This nametag was submitted by Kleros Curate.
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 11,171,568 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Multicall | 51474064 | 1 hr ago | IN | 0.2 ETH | 0.00000813 | ||||
Multicall | 51472665 | 1 hr ago | IN | 0.2 ETH | 0.00000836 | ||||
Multicall | 51471914 | 1 hr ago | IN | 0.2 ETH | 0.00000836 | ||||
Multicall | 51471818 | 1 hr ago | IN | 0.2 ETH | 0.00001108 | ||||
Multicall | 51471194 | 2 hrs ago | IN | 0.2 ETH | 0.00000927 | ||||
Multicall | 51468694 | 2 hrs ago | IN | 0.2 ETH | 0.00000797 | ||||
Multicall | 51468635 | 2 hrs ago | IN | 0.2 ETH | 0.00000806 | ||||
Multicall | 51468634 | 2 hrs ago | IN | 0.2 ETH | 0.00000813 | ||||
Multicall | 51468633 | 2 hrs ago | IN | 0.2 ETH | 0.00000809 | ||||
Multicall | 51468620 | 2 hrs ago | IN | 0.2 ETH | 0.00001018 | ||||
Multicall | 51468580 | 2 hrs ago | IN | 0.2 ETH | 0.00000804 | ||||
Multicall | 51468552 | 2 hrs ago | IN | 0.2 ETH | 0.00000813 | ||||
Multicall | 51468462 | 2 hrs ago | IN | 0.2 ETH | 0.00000797 | ||||
Multicall | 51468346 | 2 hrs ago | IN | 0.2 ETH | 0.00001171 | ||||
Multicall | 51468345 | 2 hrs ago | IN | 0.2 ETH | 0.00000911 | ||||
Multicall | 51462826 | 4 hrs ago | IN | 0.2 ETH | 0.00000797 | ||||
Multicall | 51461702 | 5 hrs ago | IN | 0.2 ETH | 0.00000816 | ||||
Multicall | 51461477 | 5 hrs ago | IN | 0.2 ETH | 0.00000797 | ||||
Multicall | 51461455 | 5 hrs ago | IN | 0.2 ETH | 0.00000816 | ||||
Multicall | 51461430 | 5 hrs ago | IN | 0.2 ETH | 0.00000797 | ||||
Multicall | 51461422 | 5 hrs ago | IN | 0.2 ETH | 0.00000797 | ||||
Multicall | 51461288 | 5 hrs ago | IN | 0.2 ETH | 0.00000813 | ||||
Multicall | 51461287 | 5 hrs ago | IN | 0.2 ETH | 0.00000812 | ||||
Multicall | 51461287 | 5 hrs ago | IN | 0.2 ETH | 0.00000853 | ||||
Multicall | 51460868 | 5 hrs ago | IN | 0.2 ETH | 0.00001072 |
Latest 25 internal transactions (View All)
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
51474064 | 1 hr ago | 0.2 ETH | ||||
51474064 | 1 hr ago | 0.2 ETH | ||||
51474064 | 1 hr ago | 0.2 ETH | ||||
51474064 | 1 hr ago | 0.2 ETH | ||||
51472665 | 1 hr ago | 0.2 ETH | ||||
51472665 | 1 hr ago | 0.2 ETH | ||||
51472665 | 1 hr ago | 0.2 ETH | ||||
51472665 | 1 hr ago | 0.2 ETH | ||||
51472665 | 1 hr ago | 0.2 ETH | ||||
51471914 | 1 hr ago | 0.2 ETH | ||||
51471914 | 1 hr ago | 0.2 ETH | ||||
51471914 | 1 hr ago | 0.2 ETH | ||||
51471914 | 1 hr ago | 0.2 ETH | ||||
51471914 | 1 hr ago | 0.2 ETH | ||||
51471818 | 1 hr ago | 0.2 ETH | ||||
51471818 | 1 hr ago | 0.2 ETH | ||||
51471818 | 1 hr ago | 0.2 ETH | ||||
51471818 | 1 hr ago | 0.2 ETH | ||||
51471818 | 1 hr ago | 0.2 ETH | ||||
51471194 | 2 hrs ago | 0.2 ETH | ||||
51471194 | 2 hrs ago | 0.2 ETH | ||||
51471194 | 2 hrs ago | 0.2 ETH | ||||
51471194 | 2 hrs ago | 0.2 ETH | ||||
51468694 | 2 hrs ago | 0.2 ETH | ||||
51468694 | 2 hrs ago | 0.2 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
Router
Compiler Version
v0.8.17+commit.8df45f5f
ZkSolc Version
v1.3.7
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@maverick/contracts/contracts/interfaces/IPool.sol"; import "@maverick/contracts/contracts/interfaces/IFactory.sol"; import "@maverick/contracts/contracts/interfaces/IPosition.sol"; import "./interfaces/IRouter.sol"; import "./interfaces/external/IWETH9.sol"; import "./libraries/TransferHelper.sol"; import "./libraries/Path.sol"; import "./libraries/Deadline.sol"; import "./libraries/Multicall.sol"; import "./libraries/SelfPermit.sol"; contract Router is IRouter, Multicall, SelfPermit, Deadline { using Path for bytes; /// @dev Used as the placeholder value for amountInCached, because the //computed amount in for an exact output swap / can never actually be this //value uint256 private constant DEFAULT_AMOUNT_IN_CACHED = type(uint256).max; /// @dev Transient storage variable used for returning the computed amount in for an exact output swap. uint256 private amountInCached = DEFAULT_AMOUNT_IN_CACHED; struct AddLiquidityCallbackData { IERC20 tokenA; IERC20 tokenB; IPool pool; address payer; } struct SwapCallbackData { bytes path; address payer; bool exactOutput; } /// @inheritdoc IRouter IFactory public immutable factory; /// @inheritdoc IRouter IPosition public immutable position; /// @inheritdoc ISlimRouter IWETH9 public immutable WETH9; constructor(IFactory _factory, IWETH9 _WETH9) { factory = _factory; position = _factory.position(); WETH9 = _WETH9; } receive() external payable { require(IWETH9(msg.sender) == WETH9, "Not WETH9"); } /// @inheritdoc ISlimRouter function unwrapWETH9(uint256 amountMinimum, address recipient) public payable override { uint256 balanceWETH9 = WETH9.balanceOf(address(this)); require(balanceWETH9 >= amountMinimum, "Insufficient WETH9"); if (balanceWETH9 > 0) { WETH9.withdraw(balanceWETH9); TransferHelper.safeTransferETH(recipient, balanceWETH9); } } /// @inheritdoc ISlimRouter function sweepToken(IERC20 token, uint256 amountMinimum, address recipient) public payable { uint256 balanceToken = token.balanceOf(address(this)); require(balanceToken >= amountMinimum, "Insufficient token"); if (balanceToken > 0) { TransferHelper.safeTransfer(address(token), recipient, balanceToken); } } /// @inheritdoc ISlimRouter function refundETH() external payable override { if (address(this).balance > 0) TransferHelper.safeTransferETH(msg.sender, address(this).balance); } /// @param token The token to pay /// @param payer The entity that must pay /// @param recipient The entity that will receive payment /// @param value The amount to pay function pay(IERC20 token, address payer, address recipient, uint256 value) internal { if (IWETH9(address(token)) == WETH9 && address(this).balance >= value) { WETH9.deposit{value: value}(); WETH9.transfer(recipient, value); } else if (payer == address(this)) { TransferHelper.safeTransfer(address(token), recipient, value); } else { TransferHelper.safeTransferFrom(address(token), payer, recipient, value); } } function swapCallback(uint256 amountToPay, uint256 amountOut, bytes calldata _data) external { require(amountToPay > 0 && amountOut > 0, "In or Out Amount is Zero"); require(factory.isFactoryPool(IPool(msg.sender)), "Must call from a Factory Pool"); SwapCallbackData memory data = abi.decode(_data, (SwapCallbackData)); (IERC20 tokenIn, IERC20 tokenOut, IPool pool) = data.path.decodeFirstPool(); require(msg.sender == address(pool)); if (data.exactOutput) { if (data.path.hasMultiplePools()) { data.path = data.path.skipToken(); exactOutputInternal(amountToPay, msg.sender, data); } else { amountInCached = amountToPay; pay(tokenOut, data.payer, msg.sender, amountToPay); } } else { pay(tokenIn, data.payer, msg.sender, amountToPay); } } function exactInputInternal(uint256 amountIn, address recipient, uint256 sqrtPriceLimitD18, SwapCallbackData memory data) private returns (uint256 amountOut) { if (recipient == address(0)) recipient = address(this); (IERC20 tokenIn, IERC20 tokenOut, IPool pool) = data.path.decodeFirstPool(); bool tokenAIn = tokenIn < tokenOut; (, amountOut) = pool.swap(recipient, amountIn, tokenAIn, false, sqrtPriceLimitD18, abi.encode(data)); } /// @inheritdoc ISlimRouter function exactInputSingle(ExactInputSingleParams calldata params) external payable override checkDeadline(params.deadline) returns (uint256 amountOut) { bool tokenAIn = params.tokenIn < params.tokenOut; (, amountOut) = params.pool.swap( (params.recipient == address(0)) ? address(this) : params.recipient, params.amountIn, tokenAIn, false, params.sqrtPriceLimitD18, abi.encode(SwapCallbackData({path: abi.encodePacked(params.tokenIn, params.pool, params.tokenOut), payer: msg.sender, exactOutput: false})) ); require(amountOut >= params.amountOutMinimum, "Too little received"); } /// @inheritdoc IRouter function exactInput(ExactInputParams memory params) external payable override checkDeadline(params.deadline) returns (uint256 amountOut) { address payer = msg.sender; while (true) { bool stillMultiPoolSwap = params.path.hasMultiplePools(); params.amountIn = exactInputInternal( params.amountIn, stillMultiPoolSwap ? address(this) : params.recipient, 0, SwapCallbackData({path: params.path.getFirstPool(), payer: payer, exactOutput: false}) ); if (stillMultiPoolSwap) { payer = address(this); params.path = params.path.skipToken(); } else { amountOut = params.amountIn; break; } } require(amountOut >= params.amountOutMinimum, "Too little received"); } /// @dev Performs a single exact output swap function exactOutputInternal(uint256 amountOut, address recipient, SwapCallbackData memory data) private returns (uint256 amountIn) { if (recipient == address(0)) recipient = address(this); (IERC20 tokenOut, IERC20 tokenIn, IPool pool) = data.path.decodeFirstPool(); bool tokenAIn = tokenIn < tokenOut; uint256 amountOutReceived; (amountIn, amountOutReceived) = pool.swap(recipient, amountOut, tokenAIn, true, 0, abi.encode(data)); require(amountOutReceived == amountOut, "Requested amount not available"); } /// @inheritdoc ISlimRouter function exactOutputSingle(ExactOutputSingleParams calldata params) external payable override checkDeadline(params.deadline) returns (uint256 amountIn) { bool tokenAIn = params.tokenIn < params.tokenOut; uint256 amountOutReceived; (amountIn, amountOutReceived) = params.pool.swap( (params.recipient == address(0)) ? address(this) : params.recipient, params.amountOut, tokenAIn, true, 0, abi.encode(SwapCallbackData({path: abi.encodePacked(params.tokenOut, params.pool, params.tokenIn), payer: msg.sender, exactOutput: true})) ); require(amountOutReceived == params.amountOut, "Requested amount not available"); require(amountIn <= params.amountInMaximum, "Too much requested"); amountInCached = DEFAULT_AMOUNT_IN_CACHED; } /// @inheritdoc IRouter function exactOutput(ExactOutputParams calldata params) external payable override checkDeadline(params.deadline) returns (uint256 amountIn) { exactOutputInternal(params.amountOut, params.recipient, SwapCallbackData({path: params.path, payer: msg.sender, exactOutput: true})); amountIn = amountInCached; require(amountIn <= params.amountInMaximum, "Too much requested"); amountInCached = DEFAULT_AMOUNT_IN_CACHED; } // Liqudity function addLiquidityCallback(uint256 amountA, uint256 amountB, bytes calldata _data) external { AddLiquidityCallbackData memory data = abi.decode(_data, (AddLiquidityCallbackData)); require(factory.isFactoryPool(IPool(msg.sender))); require(msg.sender == address(data.pool)); if (amountA != 0) { pay(data.tokenA, data.payer, msg.sender, amountA); } if (amountB != 0) { pay(data.tokenB, data.payer, msg.sender, amountB); } } function addLiquidity( IPool pool, uint256 tokenId, IPool.AddLiquidityParams[] calldata params, uint256 minTokenAAmount, uint256 minTokenBAmount ) private returns (uint256 receivingTokenId, uint256 tokenAAmount, uint256 tokenBAmount, IPool.BinDelta[] memory binDeltas) { if (tokenId == 0) { if (IPosition(position).tokenOfOwnerByIndexExists(msg.sender, 0)) { tokenId = IPosition(position).tokenOfOwnerByIndex(msg.sender, 0); } else { tokenId = IPosition(position).mint(msg.sender); } } receivingTokenId = tokenId; AddLiquidityCallbackData memory data = AddLiquidityCallbackData({tokenA: pool.tokenA(), tokenB: pool.tokenB(), pool: pool, payer: msg.sender}); (tokenAAmount, tokenBAmount, binDeltas) = pool.addLiquidity(tokenId, params, abi.encode(data)); require(tokenAAmount >= minTokenAAmount && tokenBAmount >= minTokenBAmount, "Too little added"); } /// @inheritdoc IRouter function addLiquidityToPool( IPool pool, uint256 tokenId, IPool.AddLiquidityParams[] calldata params, uint256 minTokenAAmount, uint256 minTokenBAmount, uint256 deadline ) external payable checkDeadline(deadline) returns (uint256 receivingTokenId, uint256 tokenAAmount, uint256 tokenBAmount, IPool.BinDelta[] memory binDeltas) { return addLiquidity(pool, tokenId, params, minTokenAAmount, minTokenBAmount); } /// @inheritdoc IRouter function addLiquidityWTickLimits( IPool pool, uint256 tokenId, IPool.AddLiquidityParams[] calldata params, uint256 minTokenAAmount, uint256 minTokenBAmount, int32 minActiveTick, int32 maxActiveTick, uint256 deadline ) external payable checkDeadline(deadline) returns (uint256 receivingTokenId, uint256 tokenAAmount, uint256 tokenBAmount, IPool.BinDelta[] memory binDeltas) { int32 activeTick = pool.getState().activeTick; require(activeTick >= minActiveTick && activeTick <= maxActiveTick, "activeTick not in range"); return addLiquidity(pool, tokenId, params, minTokenAAmount, minTokenBAmount); } function getOrCreatePool(PoolParams calldata poolParams) private returns (IPool pool) { { pool = IFactory(factory).lookup(poolParams.fee, poolParams.tickSpacing, poolParams.lookback, poolParams.tokenA, poolParams.tokenB); } if (address(pool) == address(0)) { pool = IFactory(factory).create(poolParams.fee, poolParams.tickSpacing, poolParams.lookback, poolParams.activeTick, poolParams.tokenA, poolParams.tokenB); } } /// @inheritdoc IRouter function getOrCreatePoolAndAddLiquidity( PoolParams calldata poolParams, uint256 tokenId, IPool.AddLiquidityParams[] calldata addParams, uint256 minTokenAAmount, uint256 minTokenBAmount, uint256 deadline ) external payable checkDeadline(deadline) returns (uint256 receivingTokenId, uint256 tokenAAmount, uint256 tokenBAmount, IPool.BinDelta[] memory binDeltas) { IPool pool = getOrCreatePool(poolParams); return addLiquidity(pool, tokenId, addParams, minTokenAAmount, minTokenBAmount); } /// @inheritdoc IRouter function migrateBinsUpStack(IPool pool, uint128[] calldata binIds, uint32 maxRecursion, uint256 deadline) external checkDeadline(deadline) { for (uint256 i = 0; i < binIds.length; i++) { pool.migrateBinUpStack(binIds[i], maxRecursion); } } /// @inheritdoc IRouter function removeLiquidity( IPool pool, address recipient, uint256 tokenId, IPool.RemoveLiquidityParams[] calldata params, uint256 minTokenAAmount, uint256 minTokenBAmount, uint256 deadline ) external checkDeadline(deadline) returns (uint256 tokenAAmount, uint256 tokenBAmount, IPool.BinDelta[] memory binDeltas) { require(msg.sender == position.ownerOf(tokenId), "P"); if (recipient == address(0)) recipient = address(this); (tokenAAmount, tokenBAmount, binDeltas) = pool.removeLiquidity(recipient, tokenId, params); require(tokenAAmount >= minTokenAAmount && tokenBAmount >= minTokenBAmount, "Too little removed"); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "../interfaces/IPool.sol"; import "../interfaces/IPosition.sol"; interface IFactory { event PoolCreated(address poolAddress, uint256 fee, uint256 tickSpacing, int32 activeTick, int256 lookback, uint64 protocolFeeRatio, IERC20 tokenA, IERC20 tokenB); event SetFactoryProtocolFeeRatio(uint64 protocolFeeRatio); event SetFactoryOwner(address owner); /// @notice creates new pool /// @param _fee is a rate in prbmath 60x18 decimal format /// @param _tickSpacing 1.0001^tickSpacing is the bin width /// @param _activeTick initial activeTick of the pool /// @param _lookback TWAP lookback in whole seconds /// @param _tokenA ERC20 token /// @param _tokenB ERC20 token function create( uint256 _fee, uint256 _tickSpacing, int256 _lookback, int32 _activeTick, IERC20 _tokenA, IERC20 _tokenB ) external returns (IPool); function lookup( uint256 fee, uint256 tickSpacing, int256 lookback, IERC20 tokenA, IERC20 tokenB ) external view returns (IPool); function owner() external view returns (address); function position() external view returns (IPosition); /// @notice protocolFeeRatio ratio of the swap fee that is kept for the //protocol function protocolFeeRatio() external view returns (uint64); /// @notice lookup table for whether a pool is owned by the factory function isFactoryPool(IPool pool) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "./IFactory.sol"; interface IPool { event Swap(address sender, address recipient, bool tokenAIn, bool exactOutput, uint256 amountIn, uint256 amountOut, int32 activeTick); event AddLiquidity(address indexed sender, uint256 indexed tokenId, BinDelta[] binDeltas); event MigrateBinsUpStack(address indexed sender, uint128 binId, uint32 maxRecursion); event TransferLiquidity(uint256 fromTokenId, uint256 toTokenId, RemoveLiquidityParams[] params); event RemoveLiquidity(address indexed sender, address indexed recipient, uint256 indexed tokenId, BinDelta[] binDeltas); event BinMerged(uint128 indexed binId, uint128 reserveA, uint128 reserveB, uint128 mergeId); event BinMoved(uint128 indexed binId, int128 previousTick, int128 newTick); event ProtocolFeeCollected(uint256 protocolFee, bool isTokenA); event SetProtocolFeeRatio(uint256 protocolFee); /// @notice return parameters for Add/Remove liquidity /// @param binId of the bin that changed /// @param kind one of the 4 Kinds (0=static, 1=right, 2=left, 3=both) /// @param isActive bool to indicate whether the bin is still active /// @param lowerTick is the lower price tick of the bin in its current state /// @param deltaA amount of A token that has been added or removed /// @param deltaB amount of B token that has been added or removed /// @param deltaLpToken amount of LP balance that has increase (add) or decreased (remove) struct BinDelta { uint128 deltaA; uint128 deltaB; uint256 deltaLpBalance; uint128 binId; uint8 kind; int32 lowerTick; bool isActive; } /// @notice time weighted average state /// @param twa the twa at the last update instant /// @param value the new value that was passed in at the last update /// @param lastTimestamp timestamp of the last update in seconds /// @param lookback time in seconds struct TwaState { int96 twa; int96 value; uint64 lastTimestamp; } /// @notice bin state parameters /// @param kind one of the 4 Kinds (0=static, 1=right, 2=left, 3=both) /// @param lowerTick is the lower price tick of the bin in its current state /// @param mergeId binId of the bin that this bin has merged in to /// @param reserveA amount of A token in bin /// @param reserveB amount of B token in bin /// @param totalSupply total amount of LP tokens in this bin /// @param mergeBinBalance LP token balance that this bin posseses of the merge bin struct BinState { uint128 reserveA; uint128 reserveB; uint128 mergeBinBalance; uint128 mergeId; uint128 totalSupply; uint8 kind; int32 lowerTick; } /// @notice Parameters for each bin that will get new liquidity /// @param kind one of the 4 Kinds (0=static, 1=right, 2=left, 3=both) /// @param pos bin position /// @param isDelta bool that indicates whether the bin position is relative //to the current bin or an absolute position /// @param deltaA amount of A token to add /// @param deltaB amount of B token to add struct AddLiquidityParams { uint8 kind; int32 pos; bool isDelta; uint128 deltaA; uint128 deltaB; } /// @notice Parameters for each bin that will have liquidity removed /// @param binId index of the bin losing liquidity /// @param amount LP balance amount to remove struct RemoveLiquidityParams { uint128 binId; uint128 amount; } /// @notice State of the pool /// @param activeTick current bin position that contains the active bins /// @param status pool status. e.g. locked or unlocked; status values //defined in Pool.sol /// @param binCounter index of the last bin created /// @param protocolFeeRatio ratio of the swap fee that is kept for the //protocol struct State { int32 activeTick; uint8 status; uint128 binCounter; uint64 protocolFeeRatio; } /// @notice fee for pool in 18 decimal format function fee() external view returns (uint256); /// @notice tickSpacing of pool where 1.0001^tickSpacing is the bin width function tickSpacing() external view returns (uint256); /// @notice address of token A function tokenA() external view returns (IERC20); /// @notice address of token B function tokenB() external view returns (IERC20); /// @notice address of Factory function factory() external view returns (IFactory); /// @notice bitmap of active bins function binMap(int32 tick) external view returns (uint256); /// @notice mapping of tick/kind to binId function binPositions(int32 tick, uint256 kind) external view returns (uint128); /// @notice internal accounting of the sum tokenA balance across bins function binBalanceA() external view returns (uint128); /// @notice internal accounting of the sum tokenB balance across bins function binBalanceB() external view returns (uint128); /// @notice Twa state values function getTwa() external view returns (TwaState memory); /// @notice log base binWidth of the time weighted average price function getCurrentTwa() external view returns (int256); /// @notice pool state function getState() external view returns (State memory); /// @notice Add liquidity to a pool. /// @param tokenId NFT token ID that will hold the position /// @param params array of AddLiquidityParams that specify the mode and //position of the liquidity /// @param data callback function that addLiquidity will call so that the //caller can transfer tokens function addLiquidity( uint256 tokenId, AddLiquidityParams[] calldata params, bytes calldata data ) external returns ( uint256 tokenAAmount, uint256 tokenBAmount, BinDelta[] memory binDeltas ); /// @notice Transfer liquidity in an array of bins from one nft tokenId //to another /// @param fromTokenId NFT token ID that holds the position being transferred /// @param toTokenId NFT token ID that is receiving liquidity /// @param params array of binIds and amounts to transfer function transferLiquidity( uint256 fromTokenId, uint256 toTokenId, RemoveLiquidityParams[] calldata params ) external; /// @notice Remove liquidity from a pool. /// @param recipient address that will receive the removed tokens /// @param tokenId NFT token ID that holds the position being removed /// @param params array of RemoveLiquidityParams that specify the bins, //and amounts function removeLiquidity( address recipient, uint256 tokenId, RemoveLiquidityParams[] calldata params ) external returns ( uint256 tokenAOut, uint256 tokenBOut, BinDelta[] memory binDeltas ); /// @notice Migrate bins up the linked list of merged bins so that its //mergeId is the currrent active bin. /// @param binId is an array of the binIds to be migrated /// @param maxRecursion is the maximum recursion depth of the migration. set to //zero to recurse until the active bin is found. function migrateBinUpStack(uint128 binId, uint32 maxRecursion) external; /// @notice swap tokens /// @param recipient address that will receive the output tokens /// @param amount amount of token that is either the input if exactOutput //is false or the output if exactOutput is true /// @param tokenAIn bool indicating whether tokenA is the input /// @param exactOutput bool indicating whether the amount specified is the //exact output amount (true) /// @param sqrtPriceLimit limiting sqrt price of the swap. A value of 0 //indicates no limit. Limit is only engaged for exactOutput=false. If the //limit is reached only part of the input amount will be swapped and the //callback will only require that amount of the swap to be paid. /// @param data callback function that swap will call so that the //caller can transfer tokens function swap( address recipient, uint256 amount, bool tokenAIn, bool exactOutput, uint256 sqrtPriceLimit, bytes calldata data ) external returns (uint256 amountIn, uint256 amountOut); /// @notice bin information for a given binId function getBin(uint128 binId) external view returns (BinState memory bin); /// @notice LP token balance for a given tokenId at a given binId function balanceOf(uint256 tokenId, uint128 binId) external view returns (uint256 lpToken); /// @notice tokenA scale value /// @dev msb is a flag to indicate whether tokenA has more or less than 18 //decimals. Scale is used in conjuction with Math.toScale/Math.fromScale //functions to convert from token amounts to D18 scale internal pool //accounting. function tokenAScale() external view returns (uint256); /// @notice tokenB scale value /// @dev msb is a flag to indicate whether tokenA has more or less than 18 //decimals. Scale is used in conjuction with Math.toScale/Math.fromScale //functions to convert from token amounts to D18 scale internal pool //accounting. function tokenBScale() external view returns (uint256); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; import "../interfaces/IPositionMetadata.sol"; interface IPosition is IERC721Enumerable { event SetMetadata(IPositionMetadata metadata); /// @notice mint new position NFT function mint(address to) external returns (uint256 tokenId); /// @notice mint new position NFT function tokenOfOwnerByIndexExists(address owner, uint256 index) external view returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface IPositionMetadata { function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; interface ISwapCallback { function swapCallback( uint256 amountIn, uint256 amountOut, bytes calldata data ) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.7.5; pragma abicoder v2; /// @title Multicall interface /// @notice Enables calling multiple methods in a single call to the contract interface IMulticall { /// @notice Call multiple functions in the current contract and return the data from all of them if they all succeed /// @dev The `msg.value` should not be trusted for any method callable from multicall. /// @param data The encoded function data for each of the calls to make to this contract /// @return results The results from each of the calls passed in via data function multicall(bytes[] calldata data) external payable returns (bytes[] memory results); }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@maverick/contracts/contracts/interfaces/IFactory.sol"; import "@maverick/contracts/contracts/interfaces/IPool.sol"; import "@maverick/contracts/contracts/interfaces/IPosition.sol"; import "@maverick/contracts/contracts/interfaces/ISwapCallback.sol"; import "./external/IWETH9.sol"; import "./ISlimRouter.sol"; interface IRouter is ISlimRouter { /// @return Returns the address of the factory function factory() external view returns (IFactory); /// @return Returns the address of the Position NFT function position() external view returns (IPosition); struct ExactInputParams { bytes path; address recipient; uint256 deadline; uint256 amountIn; uint256 amountOutMinimum; } /// @notice Swaps `amountIn` of one token for as much as possible of //another along the specified path /// @param params The parameters necessary for the multi-hop swap, encoded //as `ExactInputParams` in calldata /// @return amountOut The amount of the received token function exactInput(ExactInputParams calldata params) external payable returns (uint256 amountOut); struct ExactOutputParams { bytes path; address recipient; uint256 deadline; uint256 amountOut; uint256 amountInMaximum; } /// @notice Swaps as little as possible of one token for `amountOut` of //another along the specified path (reversed) /// @param params The parameters necessary for the multi-hop swap, encoded //as `ExactOutputParams` in calldata /// @return amountIn The amount of the input token function exactOutput(ExactOutputParams calldata params) external payable returns (uint256 amountIn); struct PoolParams { uint256 fee; uint256 tickSpacing; int256 lookback; int32 activeTick; IERC20 tokenA; IERC20 tokenB; } /// @notice create a pool and add liquidity to it /// @param poolParams paramters of a pool /// @param tokenId nft id of token that will hold lp balance, use 0 to mint a new token /// @param addParams paramters of liquidity addition /// @param minTokenAAmount minimum amount of token A to add, revert if not met /// @param minTokenBAmount minimum amount of token B to add, revert if not met /// @param deadline epoch timestamp in seconds function getOrCreatePoolAndAddLiquidity( PoolParams calldata poolParams, uint256 tokenId, IPool.AddLiquidityParams[] calldata addParams, uint256 minTokenAAmount, uint256 minTokenBAmount, uint256 deadline ) external payable returns (uint256 receivingTokenId, uint256 tokenAAmount, uint256 tokenBAmount, IPool.BinDelta[] memory binDeltas); /// @notice add liquidity to a pool /// @param pool pool to add liquidity to /// @param tokenId nft id of token that will hold lp balance, use 0 to mint a new token /// @param params paramters of liquidity addition /// @param minTokenAAmount minimum amount of token A to add, revert if not met /// @param minTokenBAmount minimum amount of token B to add, revert if not met /// @param deadline epoch timestamp in seconds function addLiquidityToPool( IPool pool, uint256 tokenId, IPool.AddLiquidityParams[] calldata params, uint256 minTokenAAmount, uint256 minTokenBAmount, uint256 deadline ) external payable returns (uint256 receivingTokenId, uint256 tokenAAmount, uint256 tokenBAmount, IPool.BinDelta[] memory binDeltas); /// @notice add liquidity to a pool with active tick limits /// @param pool pool to add liquidity to /// @param tokenId nft id of token that will hold lp balance, use 0 to mint a new token /// @param params paramters of liquidity addition /// @param minTokenAAmount minimum amount of token A to add, revert if not met /// @param minTokenBAmount minimum amount of token B to add, revert if not met /// @param minActiveTick lowest activeTick (inclusive) of pool that will permit transaction to pass /// @param maxActiveTick highest activeTick (inclusive) of pool that will permit transaction to pass /// @param deadline epoch timestamp in seconds function addLiquidityWTickLimits( IPool pool, uint256 tokenId, IPool.AddLiquidityParams[] calldata params, uint256 minTokenAAmount, uint256 minTokenBAmount, int32 minActiveTick, int32 maxActiveTick, uint256 deadline ) external payable returns (uint256 receivingTokenId, uint256 tokenAAmount, uint256 tokenBAmount, IPool.BinDelta[] memory binDeltas); /// @notice moves the head of input merged bins to the active bin /// @param pool to remove from /// @param binIds array of bin Ids to migrate /// @param maxRecursion maximum recursion depth before returning; 0=no max /// @param deadline epoch timestamp in seconds function migrateBinsUpStack(IPool pool, uint128[] calldata binIds, uint32 maxRecursion, uint256 deadline) external; /// @notice remove liquidity from pool and receive WETH if one of the tokens is WETH /// @dev router must be approved for the withdrawing tokenId: Position.approve(router, tokenId) /// @param pool pool to remove from /// @param recipient address where proceeds are sent; use zero or router address to leave tokens in router /// @param tokenId ID of position NFT that holds liquidity /// @param params paramters of liquidity removal /// @param minTokenAAmount minimum amount of token A to receive, revert if not met /// @param minTokenBAmount minimum amount of token B to receive, revert if not met /// @param deadline epoch timestamp in seconds function removeLiquidity( IPool pool, address recipient, uint256 tokenId, IPool.RemoveLiquidityParams[] calldata params, uint256 minTokenAAmount, uint256 minTokenBAmount, uint256 deadline ) external returns (uint256 tokenAAmount, uint256 tokenBAmount, IPool.BinDelta[] memory binDeltas); }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.7.5; /// @title Self Permit /// @notice Functionality to call permit on any EIP-2612-compliant token for use in the route interface ISelfPermit { /// @notice Permits this contract to spend a given token from `msg.sender` /// @dev The `owner` is always msg.sender and the `spender` is always address(this). /// @param token The address of the token spent /// @param value The amount that can be spent of token /// @param deadline A timestamp, the current blocktime must be less than or equal to this timestamp /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s` /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s` /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v` function selfPermit(address token, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external payable; /// @notice Permits this contract to spend a given token from `msg.sender` /// @dev The `owner` is always msg.sender and the `spender` is always address(this). /// Can be used instead of #selfPermit to prevent calls from failing due to a frontrun of a call to #selfPermit /// @param token The address of the token spent /// @param value The amount that can be spent of token /// @param deadline A timestamp, the current blocktime must be less than or equal to this timestamp /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s` /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s` /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v` function selfPermitIfNecessary(address token, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external payable; /// @notice Permits this contract to spend the sender's tokens for permit signatures that have the `allowed` parameter /// @dev The `owner` is always msg.sender and the `spender` is always address(this) /// @param token The address of the token spent /// @param nonce The current nonce of the owner /// @param expiry The timestamp at which the permit is no longer valid /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s` /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s` /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v` function selfPermitAllowed(address token, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) external payable; /// @notice Permits this contract to spend the sender's tokens for permit signatures that have the `allowed` parameter /// @dev The `owner` is always msg.sender and the `spender` is always address(this) /// Can be used instead of #selfPermitAllowed to prevent calls from failing due to a frontrun of a call to #selfPermitAllowed. /// @param token The address of the token spent /// @param nonce The current nonce of the owner /// @param expiry The timestamp at which the permit is no longer valid /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s` /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s` /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v` function selfPermitAllowedIfNecessary(address token, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) external payable; }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@maverick/contracts/contracts/interfaces/IPool.sol"; import "@maverick/contracts/contracts/interfaces/ISwapCallback.sol"; import "./external/IWETH9.sol"; interface ISlimRouter is ISwapCallback { /// @return Returns the address of WETH9 function WETH9() external view returns (IWETH9); struct ExactInputSingleParams { address tokenIn; address tokenOut; IPool pool; address recipient; uint256 deadline; uint256 amountIn; uint256 amountOutMinimum; uint256 sqrtPriceLimitD18; } /// @notice Swaps `amountIn` of one token for as much as possible of //another token /// @param params The parameters necessary for the swap, encoded as //`ExactInputSingleParams` in calldata /// @return amountOut The amount of the received token function exactInputSingle(ExactInputSingleParams calldata params) external payable returns (uint256 amountOut); struct ExactOutputSingleParams { address tokenIn; address tokenOut; IPool pool; address recipient; uint256 deadline; uint256 amountOut; uint256 amountInMaximum; } /// @notice Swaps as little as possible of one token for `amountOut` of //another token /// @param params The parameters necessary for the swap, encoded as //`ExactOutputSingleParams` in calldata /// @return amountIn The amount of the input token function exactOutputSingle(ExactOutputSingleParams calldata params) external payable returns (uint256 amountIn); /// @notice Unwraps the contract's WETH9 balance and sends it to recipient as ETH. /// @dev The amountMinimum parameter prevents malicious contracts from stealing WETH9 from users. /// @param amountMinimum The minimum amount of WETH9 to unwrap /// @param recipient The address receiving ETH function unwrapWETH9(uint256 amountMinimum, address recipient) external payable; /// @notice Refunds any ETH balance held by this contract to the `msg.sender` /// @dev Useful for bundling with mint or increase liquidity that uses ether, or exact output swaps /// that use ether for the input amount function refundETH() external payable; /// @notice Transfers the full amount of a token held by this contract to recipient /// @dev The amountMinimum parameter prevents malicious contracts from stealing the token from users /// @param token The contract address of the token which will be transferred to `recipient` /// @param amountMinimum The minimum amount of token required for a transfer /// @param recipient The destination address of the token function sweepToken(IERC20 token, uint256 amountMinimum, address recipient) external payable; }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.5.0; /// @title Interface for permit /// @notice Interface used by DAI/CHAI for permit interface IERC20PermitAllowed { /// @notice Approve the spender to spend some tokens via the holder signature /// @dev This is the permit interface used by DAI and CHAI /// @param holder The address of the token holder, the token owner /// @param spender The address of the token spender /// @param nonce The holder's nonce, increases at each call to permit /// @param expiry The timestamp at which the permit is no longer valid /// @param allowed Boolean that sets approval amount, true for type(uint256).max and false for 0 /// @param v Must produce valid secp256k1 signature from the holder along with `r` and `s` /// @param r Must produce valid secp256k1 signature from the holder along with `v` and `s` /// @param s Must produce valid secp256k1 signature from the holder along with `r` and `v` function permit(address holder, address spender, uint256 nonce, uint256 expiry, bool allowed, uint8 v, bytes32 r, bytes32 s) external; }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; /// @title Interface for WETH9 interface IWETH9 is IERC20 { /// @notice Deposit ether to get wrapped ether function deposit() external payable; /// @notice Withdraw wrapped ether to get ether function withdraw(uint256) external; }
// SPDX-License-Identifier: GPL-2.0-or-later /* * @title Solidity Bytes Arrays Utils * @author Gonçalo Sá <[email protected]> * * @dev Bytes tightly packed arrays utility library for ethereum contracts written in Solidity. * The library lets you concatenate, slice and type cast bytes arrays both in memory and storage. */ pragma solidity ^0.8.0; library BytesLib { function slice(bytes memory _bytes, uint256 _start, uint256 _length) internal pure returns (bytes memory) { require(_length + 31 >= _length, "slice_overflow"); require(_start + _length >= _start, "slice_overflow"); require(_bytes.length >= _start + _length, "slice_outOfBounds"); bytes memory tempBytes; assembly { switch iszero(_length) case 0 { // Get a location of some free memory and store it in tempBytes as // Solidity does for memory variables. tempBytes := mload(0x40) // The first word of the slice result is potentially a partial // word read from the original array. To read it, we calculate // the length of that partial word and start copying that many // bytes into the array. The first word we copy will start with // data we don't care about, but the last `lengthmod` bytes will // land at the beginning of the contents of the new array. When // we're done copying, we overwrite the full first word with // the actual length of the slice. let lengthmod := and(_length, 31) // The multiplication in the next line is necessary // because when slicing multiples of 32 bytes (lengthmod == 0) // the following copy loop was copying the origin's length // and then ending prematurely not copying everything it should. let mc := add(add(tempBytes, lengthmod), mul(0x20, iszero(lengthmod))) let end := add(mc, _length) for { // The multiplication in the next line has the same exact purpose // as the one above. let cc := add(add(add(_bytes, lengthmod), mul(0x20, iszero(lengthmod))), _start) } lt(mc, end) { mc := add(mc, 0x20) cc := add(cc, 0x20) } { mstore(mc, mload(cc)) } mstore(tempBytes, _length) //update free-memory pointer //allocating the array padded to 32 bytes like the compiler does now mstore(0x40, and(add(mc, 31), not(31))) } //if we want a zero-length slice let's just return a zero-length array default { tempBytes := mload(0x40) //zero out the 32 bytes slice we are about to return //we need to do it because Solidity does not garbage collect mstore(tempBytes, 0) mstore(0x40, add(tempBytes, 0x20)) } } return tempBytes; } function toAddress(bytes memory _bytes, uint256 _start) internal pure returns (address) { require(_start + 20 >= _start, "toAddress_overflow"); require(_bytes.length >= _start + 20, "toAddress_outOfBounds"); address tempAddress; assembly { tempAddress := div(mload(add(add(_bytes, 0x20), _start)), 0x1000000000000000000000000) } return tempAddress; } function toUint24(bytes memory _bytes, uint256 _start) internal pure returns (uint24) { require(_start + 3 >= _start, "toUint24_overflow"); require(_bytes.length >= _start + 3, "toUint24_outOfBounds"); uint24 tempUint; assembly { tempUint := mload(add(add(_bytes, 0x3), _start)) } return tempUint; } }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; abstract contract Deadline { modifier checkDeadline(uint256 deadline) { require(block.timestamp <= deadline, "Transaction too old"); _; } }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; pragma abicoder v2; import "../interfaces/IMulticall.sol"; /// @title Multicall /// @notice Enables calling multiple methods in a single call to the contract abstract contract Multicall is IMulticall { /// @inheritdoc IMulticall function multicall(bytes[] calldata data) public payable override returns (bytes[] memory results) { results = new bytes[](data.length); for (uint256 i = 0; i < data.length; i++) { (bool success, bytes memory result) = address(this).delegatecall(data[i]); if (!success) { // Next 5 lines from https://ethereum.stackexchange.com/a/83577 if (result.length < 68) revert(); assembly { result := add(result, 0x04) } revert(abi.decode(result, (string))); } results[i] = result; } } }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity ^0.8.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@maverick/contracts/contracts/interfaces/IPool.sol"; import "./BytesLib.sol"; /// @title Functions for manipulating path data for multihop swaps library Path { using BytesLib for bytes; /// @dev The length of the bytes encoded address uint256 private constant ADDR_SIZE = 20; /// @dev The offset of a single token address and pool address uint256 private constant NEXT_OFFSET = ADDR_SIZE + ADDR_SIZE; /// @dev The offset of an encoded pool key uint256 private constant POP_OFFSET = NEXT_OFFSET + ADDR_SIZE; /// @dev The minimum length of an encoding that contains 2 or more pools uint256 private constant MULTIPLE_POOLS_MIN_LENGTH = POP_OFFSET + NEXT_OFFSET; /// @notice Returns true iff the path contains two or more pools /// @param path The encoded swap path /// @return True if path contains two or more pools, otherwise false function hasMultiplePools(bytes memory path) internal pure returns (bool) { return path.length >= MULTIPLE_POOLS_MIN_LENGTH; } /// @notice Returns the number of pools in the path /// @param path The encoded swap path /// @return The number of pools in the path function numPools(bytes memory path) internal pure returns (uint256) { // Ignore the first token address. From then on every fee and token offset indicates a pool. return ((path.length - ADDR_SIZE) / NEXT_OFFSET); } /// @notice Decodes the first pool in path /// @param path The bytes encoded swap path /// @return tokenIn The input in a path /// @return tokenOut The output in a path /// @return pool The pool function decodeFirstPool(bytes memory path) internal pure returns (IERC20 tokenIn, IERC20 tokenOut, IPool pool) { tokenIn = IERC20(path.toAddress(0)); pool = IPool(path.toAddress(ADDR_SIZE)); tokenOut = IERC20(path.toAddress(NEXT_OFFSET)); } /// @notice Gets the segment corresponding to the first pool in the path /// @param path The bytes encoded swap path /// @return The segment containing all data necessary to target the first pool in the path function getFirstPool(bytes memory path) internal pure returns (bytes memory) { return path.slice(0, POP_OFFSET); } /// @notice Skips a token + pool element from the buffer and returns the remainder /// @param path The swap path /// @return The remaining token + pool elements in the path function skipToken(bytes memory path) internal pure returns (bytes memory) { return path.slice(NEXT_OFFSET, path.length - NEXT_OFFSET); } }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.5.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol"; import "../interfaces/ISelfPermit.sol"; import "../interfaces/external/IERC20PermitAllowed.sol"; /// @title Self Permit /// @notice Functionality to call permit on any EIP-2612-compliant token for use in the route /// @dev These functions are expected to be embedded in multicalls to allow EOAs to approve a contract and call a function /// that requires an approval in a single transaction. abstract contract SelfPermit is ISelfPermit { /// @inheritdoc ISelfPermit function selfPermit(address token, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public payable override { IERC20Permit(token).permit(msg.sender, address(this), value, deadline, v, r, s); } /// @inheritdoc ISelfPermit function selfPermitIfNecessary(address token, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external payable override { if (IERC20(token).allowance(msg.sender, address(this)) < value) selfPermit(token, value, deadline, v, r, s); } /// @inheritdoc ISelfPermit function selfPermitAllowed(address token, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) public payable override { IERC20PermitAllowed(token).permit(msg.sender, address(this), nonce, expiry, true, v, r, s); } /// @inheritdoc ISelfPermit function selfPermitAllowedIfNecessary(address token, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) external payable override { if (IERC20(token).allowance(msg.sender, address(this)) < type(uint256).max) selfPermitAllowed(token, nonce, expiry, v, r, s); } }
// SPDX-License-Identifier: GPL-2.0-or-later pragma solidity >=0.6.0; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; library TransferHelper { /// @notice Transfers tokens from the targeted address to the given destination /// @notice Errors with 'STF' if transfer fails /// @param token The contract address of the token to be transferred /// @param from The originating address from which the tokens will be transferred /// @param to The destination address of the transfer /// @param value The amount to be transferred function safeTransferFrom(address token, address from, address to, uint256 value) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), "STF"); } /// @notice Transfers tokens from msg.sender to a recipient /// @dev Errors with ST if transfer fails /// @param token The contract address of the token which will be transferred /// @param to The recipient of the transfer /// @param value The value of the transfer function safeTransfer(address token, address to, uint256 value) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.transfer.selector, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), "ST"); } /// @notice Approves the stipulated contract to spend the given allowance in the given token /// @dev Errors with 'SA' if transfer fails /// @param token The contract address of the token to be approved /// @param to The target of the approval /// @param value The amount of the given token the target will be allowed to spend function safeApprove(address token, address to, uint256 value) internal { (bool success, bytes memory data) = token.call(abi.encodeWithSelector(IERC20.approve.selector, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), "SA"); } /// @notice Transfers ETH to the recipient address /// @dev Fails with `STE` /// @param to The destination of the transfer /// @param value The value to be transferred function safeTransferETH(address to, uint256 value) internal { (bool success, ) = to.call{value: value}(new bytes(0)); require(success, "STE"); } }
{ "compilerPath": "", "experimental": {}, "optimizer": { "enabled": true, "mode": "3" } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"contract IFactory","name":"_factory","type":"address"},{"internalType":"contract IWETH9","name":"_WETH9","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH9","outputs":[{"internalType":"contract IWETH9","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"addLiquidityCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"int32","name":"pos","type":"int32"},{"internalType":"bool","name":"isDelta","type":"bool"},{"internalType":"uint128","name":"deltaA","type":"uint128"},{"internalType":"uint128","name":"deltaB","type":"uint128"}],"internalType":"struct IPool.AddLiquidityParams[]","name":"params","type":"tuple[]"},{"internalType":"uint256","name":"minTokenAAmount","type":"uint256"},{"internalType":"uint256","name":"minTokenBAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityToPool","outputs":[{"internalType":"uint256","name":"receivingTokenId","type":"uint256"},{"internalType":"uint256","name":"tokenAAmount","type":"uint256"},{"internalType":"uint256","name":"tokenBAmount","type":"uint256"},{"components":[{"internalType":"uint128","name":"deltaA","type":"uint128"},{"internalType":"uint128","name":"deltaB","type":"uint128"},{"internalType":"uint256","name":"deltaLpBalance","type":"uint256"},{"internalType":"uint128","name":"binId","type":"uint128"},{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"int32","name":"lowerTick","type":"int32"},{"internalType":"bool","name":"isActive","type":"bool"}],"internalType":"struct IPool.BinDelta[]","name":"binDeltas","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"int32","name":"pos","type":"int32"},{"internalType":"bool","name":"isDelta","type":"bool"},{"internalType":"uint128","name":"deltaA","type":"uint128"},{"internalType":"uint128","name":"deltaB","type":"uint128"}],"internalType":"struct IPool.AddLiquidityParams[]","name":"params","type":"tuple[]"},{"internalType":"uint256","name":"minTokenAAmount","type":"uint256"},{"internalType":"uint256","name":"minTokenBAmount","type":"uint256"},{"internalType":"int32","name":"minActiveTick","type":"int32"},{"internalType":"int32","name":"maxActiveTick","type":"int32"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityWTickLimits","outputs":[{"internalType":"uint256","name":"receivingTokenId","type":"uint256"},{"internalType":"uint256","name":"tokenAAmount","type":"uint256"},{"internalType":"uint256","name":"tokenBAmount","type":"uint256"},{"components":[{"internalType":"uint128","name":"deltaA","type":"uint128"},{"internalType":"uint128","name":"deltaB","type":"uint128"},{"internalType":"uint256","name":"deltaLpBalance","type":"uint256"},{"internalType":"uint128","name":"binId","type":"uint128"},{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"int32","name":"lowerTick","type":"int32"},{"internalType":"bool","name":"isActive","type":"bool"}],"internalType":"struct IPool.BinDelta[]","name":"binDeltas","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMinimum","type":"uint256"}],"internalType":"struct IRouter.ExactInputParams","name":"params","type":"tuple"}],"name":"exactInput","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMinimum","type":"uint256"},{"internalType":"uint256","name":"sqrtPriceLimitD18","type":"uint256"}],"internalType":"struct ISlimRouter.ExactInputSingleParams","name":"params","type":"tuple"}],"name":"exactInputSingle","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"bytes","name":"path","type":"bytes"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMaximum","type":"uint256"}],"internalType":"struct IRouter.ExactOutputParams","name":"params","type":"tuple"}],"name":"exactOutput","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"},{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMaximum","type":"uint256"}],"internalType":"struct ISlimRouter.ExactOutputSingleParams","name":"params","type":"tuple"}],"name":"exactOutputSingle","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"contract IFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"fee","type":"uint256"},{"internalType":"uint256","name":"tickSpacing","type":"uint256"},{"internalType":"int256","name":"lookback","type":"int256"},{"internalType":"int32","name":"activeTick","type":"int32"},{"internalType":"contract IERC20","name":"tokenA","type":"address"},{"internalType":"contract IERC20","name":"tokenB","type":"address"}],"internalType":"struct IRouter.PoolParams","name":"poolParams","type":"tuple"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"int32","name":"pos","type":"int32"},{"internalType":"bool","name":"isDelta","type":"bool"},{"internalType":"uint128","name":"deltaA","type":"uint128"},{"internalType":"uint128","name":"deltaB","type":"uint128"}],"internalType":"struct IPool.AddLiquidityParams[]","name":"addParams","type":"tuple[]"},{"internalType":"uint256","name":"minTokenAAmount","type":"uint256"},{"internalType":"uint256","name":"minTokenBAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"getOrCreatePoolAndAddLiquidity","outputs":[{"internalType":"uint256","name":"receivingTokenId","type":"uint256"},{"internalType":"uint256","name":"tokenAAmount","type":"uint256"},{"internalType":"uint256","name":"tokenBAmount","type":"uint256"},{"components":[{"internalType":"uint128","name":"deltaA","type":"uint128"},{"internalType":"uint128","name":"deltaB","type":"uint128"},{"internalType":"uint256","name":"deltaLpBalance","type":"uint256"},{"internalType":"uint128","name":"binId","type":"uint128"},{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"int32","name":"lowerTick","type":"int32"},{"internalType":"bool","name":"isActive","type":"bool"}],"internalType":"struct IPool.BinDelta[]","name":"binDeltas","type":"tuple[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"uint128[]","name":"binIds","type":"uint128[]"},{"internalType":"uint32","name":"maxRecursion","type":"uint32"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"migrateBinsUpStack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"data","type":"bytes[]"}],"name":"multicall","outputs":[{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"position","outputs":[{"internalType":"contract IPosition","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"refundETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"contract IPool","name":"pool","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"uint128","name":"binId","type":"uint128"},{"internalType":"uint128","name":"amount","type":"uint128"}],"internalType":"struct IPool.RemoveLiquidityParams[]","name":"params","type":"tuple[]"},{"internalType":"uint256","name":"minTokenAAmount","type":"uint256"},{"internalType":"uint256","name":"minTokenBAmount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"tokenAAmount","type":"uint256"},{"internalType":"uint256","name":"tokenBAmount","type":"uint256"},{"components":[{"internalType":"uint128","name":"deltaA","type":"uint128"},{"internalType":"uint128","name":"deltaB","type":"uint128"},{"internalType":"uint256","name":"deltaLpBalance","type":"uint256"},{"internalType":"uint128","name":"binId","type":"uint128"},{"internalType":"uint8","name":"kind","type":"uint8"},{"internalType":"int32","name":"lowerTick","type":"int32"},{"internalType":"bool","name":"isActive","type":"bool"}],"internalType":"struct IPool.BinDelta[]","name":"binDeltas","type":"tuple[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermitAllowed","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermitAllowedIfNecessary","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"selfPermitIfNecessary","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountToPay","type":"uint256"},{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"swapCallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"sweepToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountMinimum","type":"uint256"},{"internalType":"address","name":"recipient","type":"address"}],"name":"unwrapWETH9","outputs":[],"stateMutability":"payable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
9c4d535b000000000000000000000000000000000000000000000000000000000000000001000a29b742de57f9978fa6283ff6589135b9b3b4cbf1923f45b06893f6879f000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000400000000000000000000000002c1a605f843a2e18b7d7772f0ce23c236accf7f50000000000000000000000005aea5775959fbc2557cc8789bc1bf90a239d9a91
Deployed Bytecode
0x0004000000000002000200000000000200000000030100190000006003300270000009b70430019700030000004103550002000000010355000009b70030019d000100000000001f00000001012001900000000c0000c13d26d700ea0000040f000000e001000039000000400010043f0000000001000416000000000110004c000000b10000c13d0000000001000031000000ff02100039000000200300008a000000000232016f000009b803200041000009b90330009c0000001e0000213d000009c10100004100000000001004350000004101000039000000040010043f000009c201000041000026d900010430000000400020043f0000001f0210018f000000020300036700000005041002720000002c0000613d00000000050000190000000506500210000000000763034f000000000707043b000000e00660003900000000007604350000000105500039000000000645004b000000240000413d000000000520004c0000003b0000613d0000000504400210000000000343034f0000000302200210000000e004400039000000000504043300000000052501cf000000000525022f000000000303043b0000010002200089000000000323022f00000000022301cf000000000252019f0000000000240435000009ba02000041000000400310008c00000000030000190000000003024019000009ba01100197000000000410004c000000000200a019000009ba0110009c00000000010300190000000001026019000000000110004c000000b10000c13d000000e00100043d000009bb02100197000009bb0310009c000000b10000213d000001000500043d000009bb0350009c000000b10000213d000000010300008a000000000030041b000000800010043f000009bc01000041000000400a00043d00000000001a04350000000001000414000000040320008c0000005c0000c13d0000000103000031000000200130008c000000200400003900000000040340190000008f0000013d000200000005001d000009b703000041000009b70410009c0000000001038019000009b704a0009c00000000030a40190000004003300210000000c001100210000000000131019f000009bd011001c700010000000a001d26d726cd0000040f000000010a00002900000000030100190000006003300270000009b703300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000007b0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000000730000413d000000000750004c0000008a0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000000205000029000000b30000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000009be0410009c000000180000213d0000000102200190000000180000c13d000000400010043f000000200130008c000000b10000413d00000000010a0433000009bf0210009c000000b10000813d000000a00010043f000000c00050043f000000800100043d00000140000004430000016000100443000000a00100043d00000020020000390000018000200443000001a0001004430000004001000039000000c00300043d000001c000100443000001e000300443000001000020044300000003010000390000012000100443000009c001000041000026d80001042e0000000001000019000026d900010430000000400200043d0000001f0430018f0000000503300272000000c00000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000000b80000413d000000000540004c000000cf0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d9000104300000000003010019000009b7010000410000000004000414000009b70540009c0000000001044019000000c00110021000000060022002100000000001120019000009c301100041000000000203001926d726cd0000040f0000000102200190000000e80000613d000000000101043b000000000001042d0000000001000019000026d900010430000c0000000000020000008001000039000000400010043f0000000002000031000000040120008c000001330000413d0000000201000367000000000301043b000000e003300270000009c40430009c000001380000213d000009d30430009c000001c70000a13d000009d40430009c0000025f0000213d000009d80430009c000006f70000613d000009d90430009c000005e90000613d000009da0330009c000009b50000c13d000000040220008a000009ba03000041000000400420008c00000000040000190000000004034019000009ba02200197000000000520004c000000000300a019000009ba0220009c00000000020400190000000002036019000000000220004c000009b50000c13d0000002401100370000000000101043b000c00000001001d000009bb0110009c000009b50000213d000009ec0100004100000000001004390000000001000412000000040010044300000040010000390000002400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ed011001c7000080050200003926d726cd0000040f0000000102200190000009b50000613d000000000201043b000000400a00043d000009e40100004100000000001a04350000000001000410000009bb031001970000000404a0003900000000010004140000000000340435000009bb02200197000000040320008c000b00000002001d000009130000c13d0000000103000031000000200130008c00000020040000390000000004034019000009450000013d000000000120004c000009b50000c13d26d71c1d0000040f0000000001000019000026d80001042e000009c50430009c000000000a000410000002230000a13d000009c60430009c000002c70000213d000009ca0430009c000007900000613d000009cb0430009c000005ee0000613d000009cc0130009c000009b50000c13d0000000001000416000000000110004c000009b50000c13d0000000002000031000000040120008a000009ba03000041000000600410008c00000000040000190000000004034019000009ba01100197000000000510004c000000000300a019000009ba0110009c00000000010400190000000001036019000000000110004c000009b50000c13d00000002030003670000002401300370000000000101043b000b00000001001d0000000401300370000000000101043b000c00000001001d0000004401300370000000000101043b000009be0410009c000009b50000213d0000002304100039000009ba05000041000000000624004b00000000060000190000000006058019000009ba07200197000009ba04400197000000000874004b0000000005008019000000000474013f000009ba0440009c00000000040600190000000004056019000000000440004c000009b50000c13d0000000404100039000000000343034f000000000403043b000009be0340009c000009b50000213d000000800340008c000009b50000413d00000024031000390000000004340019000000000224004b000009b50000213d000000400200043d000a00000002001d000009ea0220009c000012320000213d0000000a020000290000008002200039000000400020043f0000000202300367000000000202043b000009bb0320009c000009b50000213d0000000a030000290000000002230436000800000002001d00000044021000390000000202200367000000000202043b000009bb0320009c000009b50000213d0000000803000029000000000023043500000064021000390000000202200367000000000202043b000009bb0320009c000009b50000213d0000000a030000290000004003300039000600000003001d000000000023043500000084011000390000000201100367000000000101043b000009bb0210009c000009b50000213d0000000a020000290000006002200039000400000002001d0000000000120435000009eb01000041000000400200043d000700000002001d00000000001204350000000001000414000500000001001d000009ec0100004100000000001004390000000001000412000300000001001d00000004001004430000002400000443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ed011001c7000080050200003900090000000a001d26d726cd0000040f0000000102200190000009b50000613d000000000101043b000000070200002900000004022000390000000003000411000200000003001d000009bb03300197000100000003001d0000000000320435000009bb02100197000000040120008c0000107a0000c13d0000000103000031000000200130008c00000020040000390000000004034019000010ae0000013d000009db0430009c000002d20000a13d000009dc0430009c000004e10000613d000009dd0130009c000003af0000613d000009de0130009c000009b50000c13d0000000001000416000000000110004c000009b50000c13d0000000003000031000000040130008a000009ba02000041000000e00410008c00000000040000190000000004024019000009ba01100197000000000510004c000000000200a019000009ba0110009c00000000010400190000000001026019000000000110004c000009b50000c13d00000002090003670000000401900370000000000101043b000009bb0210009c000009b50000213d0000002402900370000000000202043b000009bb0420009c000009b50000213d0000006404900370000000000404043b000009be0540009c000009b50000213d0000002305400039000009ba06000041000000000735004b00000000070000190000000007068019000009ba08300197000009ba05500197000000000a85004b0000000006008019000000000585013f000009ba0550009c00000000050700190000000005066019000000000550004c000009b50000c13d0000000405400039000000000559034f000000000505043b000009be0650009c000009b50000213d000000240440003900000006065002100000000006460019000000000336004b000009b50000213d000000c403900370000000000803043b000000a403900370000000000703043b0000008403900370000000000603043b0000004403900370000000000303043b26d723770000040f000000000401001900000000050200190000000006030019000000400100043d000c00000001001d00000000020400190000000003050019000000000406001926d71b550000040f0000000c040000290000000001410049000009b702000041000009b70310009c0000000001028019000009b70340009c000000000204401900000040022002100000006001100210000000000121019f000026d80001042e000009cd0430009c000002f70000a13d000009ce0430009c0000054b0000613d000009cf0430009c000004610000613d000009d00330009c000009b50000c13d000000040220008a000009ba03000041000000c00420008c00000000040000190000000004034019000009ba02200197000000000520004c000000000300a019000009ba0220009c00000000020400190000000002036019000000000220004c000009b50000c13d0000000402100370000000000202043b000c00000002001d000009bb0220009c000009b50000213d0000006402100370000000000202043b000b00000002001d000000ff0220008c000009b50000213d000000a402100370000000000202043b000500000002001d0000008402100370000000000202043b000600000002001d0000002402100370000000000202043b000a00000002001d0000004401100370000000000101043b000700000001001d000009fd01000041000000800010043f0000000001000411000800000001001d000009bb021001970000000001000414000000840020043f000009bb02a00197000000a40020043f0000000c02000029000000040320008c000008180000c13d0000000103000031000000200130008c00000020040000390000000004034019000008450000013d000009d50430009c000007b40000613d000009d60430009c0000066b0000613d000009d70130009c000009b50000c13d0000000001000416000000000110004c000009b50000c13d0000000001000031000000040210008a000009ba03000041000000600420008c00000000040000190000000004034019000009ba02200197000000000520004c000000000300a019000009ba0220009c00000000020400190000000002036019000000000220004c000009b50000c13d00000002030003670000002402300370000000000202043b0000000404300370000000000404043b000c00000004001d0000004404300370000000000404043b000009be0540009c000009b50000213d0000002305400039000009ba06000041000000000715004b00000000070000190000000007068019000009ba08100197000009ba05500197000000000985004b0000000006008019000000000585013f000009ba0550009c00000000050700190000000005066019000000000550004c000009b50000c13d0000000405400039000000000353034f000000000303043b000b00000003001d000009be0330009c000009b50000213d0000002403400039000a00000003001d0000000b040000290000000003340019000900000003001d000000000113004b000009b50000213d000000400300043d0000000c01000029000000000110004c00000b580000613d000000000120004c00000b580000613d000009eb01000041000800000003001d00000000001304350000000001000414000700000001001d000009ec0100004100000000001004390000000001000412000600000001001d00000004001004430000002400000443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ed011001c7000080050200003926d726cd0000040f0000000102200190000009b50000613d000000000101043b000000080a0000290000000402a000390000000003000411000500000003001d000009bb03300197000400000003001d0000000000320435000009bb02100197000000040120008c00000c510000c13d0000000103000031000000200130008c0000002004000039000000000403401900000c830000013d000009c70430009c000007d90000613d000009c80430009c000006b20000613d000009c90130009c000009b50000c13d000000000102001926d71b8d0000040f26d725cf0000040f0000000001000019000026d80001042e000009df0130009c0000058e0000613d000009e00130009c000009b50000c13d000000040120008a000009ba02000041000000000310004c00000000030000190000000003024019000009ba01100197000000000410004c000000000200a019000009ba0110009c00000000010300190000000001026019000000000110004c000009b50000c13d000009ee0100004100000000001004390000000001000410000c00000001001d0000000400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ef011001c70000800a0200003926d726cd0000040f0000000102200190000009b50000613d000000000101043b000000000110004c000007fc0000c13d0000000001000019000026d80001042e000009d10430009c000005b30000613d000009d20130009c000009b50000c13d000000040120008a000009ba02000041000001000310008c00000000030000190000000003024019000009ba01100197000000000410004c000000000200a019000009ba0110009c00000000010300190000000001026019000000000110004c000009b50000c13d000009e1010000410000000000100439000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009e2011001c70000800b0200003900090000000a001d26d726cd0000040f00000009060000290000000102200190000009b50000613d000000000101043b00000002040003670000008402400370000000000202043b000000000121004b000006e50000213d0000000401400370000000000101043b000009bb0210009c000009b50000213d0000002402400370000000000302043b000009bb0230009c000009b50000213d0000004402400370000000000202043b000009bb0520009c000009b50000213d0000006404400370000000000404043b000009bb0540009c000009b50000213d000000000540004c0000032f0000c13d00000000040600190000006006100210000000400500043d000000200750003900000000006704350000006006200210000000340750003900000000006704350000006006300210000000480750003900000000006704350000003c06000039000000000065043500000a010650009c000012320000213d0000006008500039000000400080043f00000a010680009c000012320000213d000000c006500039000000400060043f00000000005804350000000006000411000009bb0660019700000080075000390000000000670435000000a0065000390000000000060435000000400500043d0000002009500039000000200a0000390000000000a9043500000000090804330000004008500039000000600a0000390000000000a80435000000a00a500039000000000809043300000000008a0435000000c00a500039000000000b80004c000003600000613d000000000b000019000000000cab0019000000200bb00039000000000d9b0019000000000d0d04330000000000dc0435000000000c8b004b000003590000413d0000000009a8001900000000000904350000000007070433000009bb07700197000000600950003900000000007904350000000006060433000000000660004c0000000006000019000000010600c03900000080075000390000000000670435000000bf07800039000000200600008a000000000767016f0000000000750435000000df07800039000000000767016f0000000008570019000000000778004b00000000070000190000000107004039000c00000008001d000009be0880009c000012320000213d0000000107700190000012320000c13d0000000c0c0000290000004000c0043f00000a020700004100000000077c0436000b00000007001d00000000070004140000000208000367000000a409800370000000000909043b000000e408800370000000000808043b000000a40ac00039000000c00b0000390000000000ba0435000000840ac0003900000000008a0435000009bb01100197000000000131004b000000000100001900000001010040390000004403c0003900000000001304350000002401c000390000000000910435000009bb014001970000000403c0003900000000001304350000006401c0003900000000000104350000000001050433000000c403c000390000000000130435000000e403c00039000000000410004c000003a60000613d000000000400001900000000083400190000002004400039000000000954001900000000090904330000000000980435000000000814004b0000039f0000413d00000000033100190000000000030435000000040320008c00000e800000c13d0000000103000031000000400130008c0000004004000039000000000403401900000eb90000013d000000040120008a000009ba02000041000000e00310008c00000000030000190000000003024019000009ba01100197000000000410004c000000000200a019000009ba0110009c00000000010300190000000001026019000000000110004c000009b50000c13d000009e1010000410000000000100439000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009e2011001c70000800b0200003926d726cd0000040f0000000102200190000009b50000613d000000000101043b00000002050003670000008402500370000000000202043b000000000121004b000006e50000213d0000000401500370000000000101043b000009bb0210009c000009b50000213d0000002402500370000000000302043b000009bb0230009c000009b50000213d0000004402500370000000000202043b000009bb0420009c000009b50000213d0000006404500370000000000404043b000009bb0640009c000009b50000213d000000000640004c000003e10000c13d0000000004000410000000a405500370000000000505043b000c00000005001d0000006006300210000000400500043d000000200750003900000000006704350000006006200210000000340750003900000000006704350000006006100210000000480750003900000000006704350000003c06000039000000000065043500000a010650009c000012320000213d0000006008500039000000400080043f00000a010680009c000012320000213d000000c006500039000000400060043f0000000000580435000000a007500039000000010600003900000000006704350000000009000411000009bb0a90019700000080095000390000000000a90435000000400500043d000000200a500039000000200b0000390000000000ba0435000000000a0804330000004008500039000000600b0000390000000000b80435000000a00b50003900000000080a043300000000008b0435000000c00b500039000000000c80004c000004160000613d000000000c000019000000000dbc0019000000200cc00039000000000eac0019000000000e0e04330000000000ed0435000000000d8c004b0000040f0000413d000000000ab8001900000000000a04350000000009090433000009bb09900197000000600a50003900000000009a04350000000007070433000000000770004c0000000007000019000000010700c03900000080095000390000000000790435000000bf09800039000000200700008a000000000979016f0000000000950435000000df08800039000000000878016f0000000009580019000000000889004b00000000080000190000000108004039000b00000009001d000009be0990009c000012320000213d0000000108800190000012320000c13d0000000b0b0000290000004000b0043f00000a020800004100000000088b0436000a00000008001d000000a409b000390000000008000414000000c00a0000390000000000a904350000006409b000390000000000690435000009bb01100197000000000131004b000000000100001900000001010040390000004403b0003900000000001304350000002401b000390000000c030000290000000000310435000009bb014001970000000403b0003900000000001304350000008401b0003900000000000104350000000001050433000000c403b000390000000000130435000000e403b00039000000000410004c000004580000613d000000000400001900000000063400190000002004400039000000000954001900000000090904330000000000960435000000000614004b000004510000413d00000000033100190000000000030435000000040320008c00000eda0000c13d0000000103000031000000400130008c0000004004000039000000000403401900000f130000013d000000040220008a000009ba03000041000000200420008c00000000040000190000000004034019000009ba05200197000000000650004c000000000300a019000009ba0550009c000000000304c019000000000330004c000009b50000c13d0000000401100370000000000101043b000009be0310009c000009b50000213d0000000002120049000009ba03000041000000a00420008c00000000040000190000000004034019000009ba02200197000000000520004c000000000300a019000009ba0220009c00000000020400190000000002036019000000000220004c000009b50000c13d0000012002000039000000400020043f00000004041000390000000203000367000000000543034f000000000505043b000009be0650009c000009b50000213d00000000054500190000001f065000390000000004000031000009ba07000041000000000846004b00000000080000190000000008078019000009ba06600197000009ba09400197000000000a96004b0000000007008019000000000696013f000009ba0660009c00000000060800190000000006076019000000000660004c000009b50000c13d000000000353034f000000000303043b000009be0630009c000012320000213d0000015f06300039000000200700008a000000000676016f000009be0760009c000012320000213d0000002005500039000000400060043f000001200030043f0000000006530019000000000446004b000009b50000213d0000001f0430018f00000002055003670000000506300272000004b30000613d00000000070000190000000508700210000000000985034f000000000909043b000001400880003900000000009804350000000107700039000000000867004b000004ab0000413d000000000740004c000004c20000613d0000000506600210000000000565034f00000003044002100000014006600039000000000706043300000000074701cf000000000747022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000474019f000000000046043500000140033000390000000000030435000000800020043f00000024021000390000000202200367000000000202043b000009bb0320009c000009b50000213d000000a00020043f00000044021000390000000202200367000000000202043b000000c00020043f00000064021000390000000202200367000000000202043b000000e00020043f00000084011000390000000201100367000000000101043b000001000010043f000000800100003926d71c710000040f000000400200043d0000000000120435000009b701000041000009b70320009c00000000010240190000004001100210000009e3011001c7000026d80001042e000000040320008a000009ba04000041000001000530008c00000000050000190000000005044019000009ba03300197000000000630004c000000000400a019000009ba0330009c00000000030500190000000003046019000000000330004c000009b50000c13d0000000403100370000000000303043b000c00000003001d000009bb0330009c000009b50000213d0000004403100370000000000303043b000009be0430009c000009b50000213d0000002304300039000009ba05000041000000000624004b00000000060000190000000006058019000009ba07200197000009ba04400197000000000874004b0000000005008019000000000474013f000009ba0440009c00000000040600190000000004056019000000000440004c000009b50000c13d0000000404300039000000000441034f000000000404043b000b00000004001d000009be0440009c000009b50000213d00000024053000390000000b03000029000000a0433000c9000a00000005001d0000000003530019000000000223004b000009b50000213d000000a402100370000000000402043b000009f802400198000009f9020000410000000002006019000009fa03400197000000000232019f000900000004001d000000000242004b000009b50000c13d000000c401100370000000000301043b000009f801300198000009f9010000410000000001006019000009fa02300197000000000121019f000800000003001d000000000131004b000009b50000c13d000009e1010000410000000000100439000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009e2011001c70000800b0200003926d726cd0000040f0000000102200190000009b50000613d000000400300043d000000000101043b000000e4020000390000000202200367000000000202043b000000000121004b00000cc80000a13d000000440130003900000a11020000410000000000210435000000240130003900000013020000390000000000210435000009e7010000410000000000130435000000040130003900000020020000390000000000210435000009b701000041000009b70230009c00000000010340190000004001100210000009e9011001c7000026d900010430000000040320008a000009ba04000041000000200530008c00000000050000190000000005044019000009ba03300197000000000630004c000000000400a019000009ba0330009c00000000030500190000000003046019000000000330004c000009b50000c13d0000000403100370000000000303043b000009be0430009c000009b50000213d0000002304300039000009ba05000041000000000624004b00000000060000190000000006058019000009ba07200197000009ba04400197000000000874004b0000000005008019000000000474013f000009ba0440009c00000000040600190000000004056019000000000440004c000009b50000c13d0000000404300039000000000141034f000000000b01043b000009be01b0009c000009b50000213d000000240c3000390000000501b002100000000004c10019000000000224004b000009b50000213d000000bf02100039000000200400008a000a00000004001d000000000242016f000009be0420009c000012320000213d000000400020043f0000008000b0043f0000000002b0004c00000a950000c13d000000400100043d000c00000001001d000000800200003926d71bae0000040f0000000c040000290000000001410049000009b702000041000009b70310009c0000000001028019000009b70340009c000000000204401900000040022002100000006001100210000000000121019f000026d80001042e0000000001000416000000000110004c000009b50000c13d000000040100008a0000000001100031000009ba02000041000000000310004c00000000030000190000000003024019000009ba01100197000000000410004c000000000200a019000009ba0110009c00000000010300190000000001026019000000000110004c000009b50000c13d000000400100043d000c00000001001d000009ec01000041000000000010043900000000010004120000000400100443000000200100003900000024001004430000800501000039000000440200003926d700d90000040f000009bb011001970000000c030000290000000000130435000009b701000041000009b70230009c00000000010340190000004001100210000009e3011001c7000026d80001042e000000040220008a000009ba03000041000000c00420008c00000000040000190000000004034019000009ba02200197000000000520004c000000000300a019000009ba0220009c00000000020400190000000002036019000000000220004c000009b50000c13d0000000402100370000000000202043b000c00000002001d000009bb0220009c000009b50000213d0000006402100370000000000202043b000b00000002001d000000ff0220008c000009b50000213d000000a402100370000000000202043b000600000002001d0000008402100370000000000202043b000700000002001d0000002402100370000000000202043b000900000002001d0000004401100370000000000101043b000800000001001d000009fd01000041000000800010043f0000000001000411000a00000001001d000009bb021001970000000001000414000000840020043f0000000002000410000500000002001d000009bb02200197000000a40020043f0000000c02000029000000040320008c000008950000c13d0000000103000031000000200130008c00000020040000390000000004034019000008c00000013d000000000102001926d71b8d0000040f26d7264a0000040f0000000001000019000026d80001042e000000040320008a000009ba04000041000001600530008c00000000050000190000000005044019000009ba03300197000000000630004c000000000400a019000009ba0330009c00000000030500190000000003046019000000000330004c000009b50000c13d000000e403100370000000000303043b000009be0430009c000009b50000213d0000002304300039000009ba05000041000000000624004b00000000060000190000000006058019000009ba07200197000009ba04400197000000000874004b0000000005008019000000000474013f000009ba0440009c00000000040600190000000004056019000000000440004c000009b50000c13d0000000404300039000000000141034f000000000101043b000c00000001001d000009be0110009c000009b50000213d00000024043000390000000c01000029000000a0311000c9000b00000004001d0000000001410019000000000121004b000009b50000213d000009e1010000410000000000100439000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009e2011001c70000800b0200003926d726cd0000040f0000000102200190000009b50000613d000000000101043b00000144020000390000000202200367000000000202043b000000000121004b000006e50000213d000009ec010000410000000000100439000000000100041200000004001004430000002400000443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ed011001c7000080050200003926d726cd0000040f0000000102200190000009b50000613d00000002020003670000004403200370000000000303043b000700000003001d0000002403200370000000000303043b000800000003001d0000000403200370000000000303043b000900000003001d000000000101043b000009bb01100197000a00000001001d0000008401200370000000000101043b000009bb0310009c000009b50000213d000000a402200370000000000302043b000009bb0230009c000009b50000213d000000400500043d000009f602000041000000000025043500000084045000390000000002000414000000000034043500000064035000390000000000130435000000440150003900000007030000290000000000310435000000240150003900000008030000290000000000310435000600000005001d0000000401500039000000090300002900000000003104350000000a01000029000000040110008c00000e0a0000c13d0000000103000031000000200130008c0000002004000039000000000403401900000e3d0000013d000000040320008a000009ba04000041000000c00530008c00000000050000190000000005044019000009ba03300197000000000630004c000000000400a019000009ba0330009c00000000030500190000000003046019000000000330004c000009b50000c13d0000000403100370000000000303043b000c00000003001d000009bb0330009c000009b50000213d0000004401100370000000000101043b000009be0310009c000009b50000213d000000040110003926d71aff0000040f000009e1030000410000000000300439000b00000001001d000a00000002001d0000800b01000039000000040200003926d700d90000040f000000a4020000390000000202200367000000000202043b000000000121004b0000000001000019000000010100a03926d71c470000040f00000002010003670000008402100370000000000602043b0000006402100370000000000502043b0000002401100370000000000201043b0000000c010000290000000b030000290000000a0400002926d71f700000040f0000000005010019000000000602001900000000070300190000000008040019000000400100043d000c00000001001d000000000205001900000000030600190000000004070019000000000508001926d71b1b0000040f0000000c040000290000000001410049000009b702000041000009b70310009c0000000001028019000009b70340009c000000000204401900000040022002100000006001100210000000000121019f000026d80001042e000000040220008a000009ba03000041000000200420008c00000000040000190000000004034019000009ba05200197000000000650004c000000000300a019000009ba0550009c000000000304c019000000000330004c000009b50000c13d0000000401100370000000000101043b000c00000001001d000009be0110009c000009b50000213d0000000c010000290000000001120049000009ba02000041000000a00310008c00000000030000190000000003024019000009ba01100197000000000410004c000000000200a019000009ba0110009c00000000010300190000000001026019000000000110004c000009b50000c13d000009e1010000410000000000100439000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009e2011001c70000800b0200003926d726cd0000040f0000000102200190000009b50000613d0000000c0400002900000044034000390000000202000367000000000332034f000000000303043b000000000101043b000000000131004b000009af0000a13d000000400100043d000000440210003900000a11030000410000000000320435000000240210003900000013030000390000000000320435000009e7020000410000000000210435000000040210003900000020030000390000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d9000104300000000001000416000000000110004c000009b50000c13d0000000001000031000000040210008a000009ba03000041000000800420008c00000000040000190000000004034019000009ba02200197000000000520004c000000000300a019000009ba0220009c00000000020400190000000002036019000000000220004c000009b50000c13d00000002020003670000000403200370000000000303043b000c00000003001d000009bb0330009c000009b50000213d0000002403200370000000000303043b000009be0430009c000009b50000213d0000002304300039000009ba05000041000000000614004b00000000060000190000000006058019000009ba07100197000009ba04400197000000000874004b0000000005008019000000000474013f000009ba0440009c00000000040600190000000004056019000000000440004c000009b50000c13d0000000404300039000000000442034f000000000404043b000900000004001d000009be0440009c000009b50000213d000000240430003900000009030000290000000503300210000800000004001d0000000003430019000000000113004b000009b50000213d0000004401200370000000000101043b000700000001001d000009b70110009c000009b50000213d000009e1010000410000000000100439000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009e2011001c70000800b0200003926d726cd0000040f0000000102200190000009b50000613d000000000101043b00000064020000390000000202200367000000000202043b000000000121004b000006e50000213d0000000901000029000000000110004c000002f50000613d0000800201000039000600000001001d00000000050000190000000501500210000000080200002900000000012100190000000201100367000000000101043b000a00000001001d00000a0f0110009c000009b50000213d000009f00100004100000000001004390000000c010000290000000400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ef011001c70000000602000029000b00000005001d26d726cd0000040f0000000b050000290000000102200190000009b50000613d000000000101043b000000000110004c000009b50000613d000000400600043d00000a10010000410000000000160435000000240260003900000000010004140000000703000029000000000032043500000004026000390000000a0300002900000000003204350000000c02000029000000040220008c000007880000613d000009b702000041000009b70310009c0000000001028019000009b70360009c00000000020640190000004002200210000000c001100210000000000121019f000009f3011001c70000000c02000029000a00000006001d26d726c80000040f0000000a060000290000000b0500002900000000030100190000006003300270000109b70030019d000009b70430019700030000000103550000000102200190000011850000613d000009be0160009c000012320000213d000000400060043f00000001055000390000000901000029000000000115004b0000074b0000413d000002f50000013d0000000001000416000000000110004c000009b50000c13d000000040100008a0000000001100031000009ba02000041000000000310004c00000000030000190000000003024019000009ba01100197000000000410004c000000000200a019000009ba0110009c00000000010300190000000001026019000000000110004c000009b50000c13d000000400100043d000c00000001001d000009ec0100004100000000001004390000000001000412000000040010044300000024000004430000800501000039000000440200003926d700d90000040f000009bb011001970000000c030000290000000000130435000009b701000041000009b70230009c00000000010340190000004001100210000009e3011001c7000026d80001042e0000000001000416000000000110004c000009b50000c13d000000040100008a0000000001100031000009ba02000041000000000310004c00000000030000190000000003024019000009ba01100197000000000410004c000000000200a019000009ba0110009c00000000010300190000000001026019000000000110004c000009b50000c13d000000400100043d000c00000001001d000009ec01000041000000000010043900000000010004120000000400100443000000400100003900000024001004430000800501000039000000440200003926d700d90000040f000009bb011001970000000c030000290000000000130435000009b701000041000009b70230009c00000000010340190000004001100210000009e3011001c7000026d80001042e000000040220008a000009ba03000041000000600420008c00000000040000190000000004034019000009ba02200197000000000520004c000000000300a019000009ba0220009c00000000020400190000000002036019000000000220004c000009b50000c13d0000000402100370000000000202043b000c00000002001d000009bb0220009c000009b50000213d0000004401100370000000000101043b000b00000001001d000009bb0110009c000009b50000213d000009e401000041000000800010043f0000008400a0043f00000000010004140000000c02000029000000040320008c0000096a0000c13d0000000103000031000000200130008c00000020040000390000000004034019000009950000013d000009ee0100004100000000001004390000000c010000290000000400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ef011001c70000800a0200003926d726cd0000040f0000000102200190000009b50000613d000000000301043b000000400100043d00000a140210009c000012320000813d00000000040004110000002002100039000000400020043f00000000000104350000000001000414000000040240008c00000b4b0000c13d0000000102000039000000010100003100000bb60000013d00090000000a001d000009b704000041000009b70310009c0000000001048019000000c001100210000009fe011001c726d726cd0000040f00000000030100190000006003300270000009b703300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000008310000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000008290000413d000000000750004c000008400000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000000090a000029000009b70000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c000009b50000413d000000800100043d0000000a02000029000000000121004b000002f50000813d000009f00100004100000000001004390000000c010000290000000400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ef011001c7000080020200003900090000000a001d26d726cd0000040f00000009030000290000000102200190000009b50000613d000000000101043b000000000110004c000009b50000613d000000400500043d000000c40150003900000005020000290000000000210435000000a4015000390000000602000029000000000021043500000084015000390000000b02000029000000000021043500000064015000390000000702000029000000000021043500000044015000390000000a02000029000000000021043500000024015000390000000000310435000009ff01000041000000000015043500000004015000390000000802000029000000000021043500000000010004140000000c02000029000000040320008c000008910000613d000009b704000041000009b70310009c0000000001048019000009b70350009c000000000304001900000000030540190000004003300210000000c001100210000000000131019f00000a00011001c7000c00000005001d26d726c80000040f0000000c0500002900000000030100190000006003300270000109b70030019d000009b7043001970003000000010355000000010220019000000d150000613d0000000002050019000009be0150009c000012320000213d000009110000013d000009b704000041000009b70310009c0000000001048019000000c001100210000009fe011001c726d726cd0000040f00000000030100190000006003300270000009b703300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000008ad0000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b000008a50000413d000000000750004c000008bc0000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000009dd0000613d0000001f01400039000000600110018f00000080011001bf000000400010043f000000200130008c000009b50000413d000000010100008a000000800200043d000000000112004b000002f50000613d000009f00100004100000000001004390000000c010000290000000400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ef011001c7000080020200003926d726cd0000040f0000000102200190000009b50000613d000000000101043b000000000110004c000009b50000613d000000400500043d000000e40150003900000006020000290000000000210435000000c40150003900000007020000290000000000210435000000a4015000390000000b02000029000000000021043500000084015000390000000102000039000000000021043500000064015000390000000802000029000000000021043500000044015000390000000902000029000000000021043500000024015000390000000502000029000000000021043500000a0301000041000000000015043500000004015000390000000a02000029000000000021043500000000010004140000000c02000029000000040320008c0000090e0000613d000009b704000041000009b70310009c0000000001048019000009b70350009c000000000304001900000000030540190000004003300210000000c001100210000000000131019f00000a04011001c7000c00000005001d26d726c80000040f0000000c0500002900000000030100190000006003300270000109b70030019d000009b7043001970003000000010355000000010220019000000d3b0000613d0000000002050019000009be0150009c000012320000213d000000400020043f000002f50000013d000009b704000041000009b70310009c0000000001048019000009b703a0009c000000000304001900000000030a40190000004003300210000000c001100210000000000131019f000009c2011001c7000a0000000a001d26d726cd0000040f0000000a0a00002900000000030100190000006003300270000009b703300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000009320000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000092a0000413d000000000750004c000009410000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000000a030000613d0000001f01400039000000600210018f00000000050a00190000000001a20019000000000221004b00000000020000190000000102004039000009be0410009c000012320000213d0000000102200190000012320000c13d000000400010043f000000200230008c000009b50000413d000000000305043300000004020000390000000202200367000000000202043b000000000223004b00000b690000813d000000440210003900000a0e030000410000000000320435000000240210003900000012030000390000000000320435000009e7020000410000000000210435000000040210003900000020030000390000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d900010430000009b704000041000009b70310009c0000000001048019000000c001100210000009e5011001c726d726cd0000040f00000000030100190000006003300270000009b703300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000009820000613d00000000070000190000000508700210000000000981034f000000000909043b000000800880003900000000009804350000000107700039000000000867004b0000097a0000413d000000000750004c000009910000613d0000000506600210000000000761034f00000003055002100000008006600039000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000000a290000613d0000001f01400039000000600210018f00000080012001bf000000400010043f000000200330008c000009b50000413d00000024030000390000000203300367000000000403043b000000800300043d000000000443004b00000a800000813d000009e703000041000000000031043500000084032001bf00000020040000390000000000430435000000c403200039000009e8040000410000000000430435000000a402200039000000120300003900000000003204350000004001100210000009e9011001c7000026d9000104300000002401400039000000000112034f000000000101043b000b00000001001d000009bb0110009c00000a4f0000a13d0000000001000019000026d900010430000000400200043d0000001f0430018f0000000503300272000009c40000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000009bc0000413d000000000540004c000009d30000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000400200043d0000001f0430018f0000000503300272000009ea0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000009e20000413d000000000540004c000009f90000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000400200043d0000001f0430018f000000050330027200000a100000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000a080000413d000000000540004c00000a1f0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000400200043d0000001f0430018f000000050330027200000a360000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000a2e0000413d000000000540004c00000a450000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d9000104300000000c010000290000000401100039000000000201001926d71f440000040f000a00000001001d000900000002001d000000400100043d000800000001001d26d71bd70000040f00000000030000310000000a01000029000000090200002926d71be20000040f0000000804000029000000400240003900000001030000390000000000320435000000200240003900000000030004110000000000320435000000000014043500000000030400190000000c0100002900000064011000390000000201100367000000000101043b0000000b0200002926d71e200000040f0000000c0100002900000084011000390000000201100367000000000101043b000000000200041a000c00000002001d000000000112004b0000000001000019000000010100a03926d71f2f0000040f000000010100008a000000000010041b000000400100043d0000000c020000290000000000210435000009b702000041000009b70310009c00000000010280190000004001100210000009e3011001c7000026d80001042e000000000430004c000002f50000613d000000c4042000390000000000340435000000a003200039000009e6040000410000000000430435000000a4042000390000000b0500002900000000005404350000004404000039000000000041043500000100022001bf000000400020043f00000000060004140000000c02000029000000040420008c00000bfa0000c13d0000000102000039000000010300003100000c0c0000013d000000600d0000390000000002000019000000a0042000390000000000d404350000002002200039000000000412004b00000a970000413d000000430100008a000000000e310049000000000f00001900090000000a001d00080000000b001d00070000000c001d00060000000d001d00050000000e001d000000000200003100000000042e00190000000501f00210000c00000001001d0000000003c100190000000201000367000000000331034f000000000303043b000009ba05000041000000000643004b00000000060000190000000006058019000009ba04400197000009ba07300197000000000847004b0000000005008019000000000447013f000009ba0440009c00000000040600190000000004056019000000000440004c000009b50000c13d0000000003c30019000000000131034f000000000101043b000009be0410009c000009b50000213d00000000021200490000002004300039000009ba03000041000000000524004b00000000050000190000000005032019000009ba02200197000009ba06400197000000000726004b0000000003008019000000000226013f000009ba0220009c00000000020500190000000002036019000000000220004c000009b50000c13d000000400300043d00000000020004140000000204400367000000050510027200000add0000613d000000000600001900000005076002100000000008730019000000000774034f000000000707043b00000000007804350000000106600039000000000756004b00000ad50000413d0000001f0610019000000aec0000613d0000000505500210000000000454034f00000000055300190000000306600210000000000705043300000000076701cf000000000767022f000000000404043b0000010006600089000000000464022f00000000046401cf000000000474019f0000000000450435000000000413001900000000000404350000000404a0008c00000af30000c13d0000000102000039000000010100003100000b0d0000013d000009b704000041000009b70510009c00000000010480190000006001100210000009b70530009c00000000030480190000004003300210000000000113019f000009b70320009c0000000002048019000000c002200210000000000121019f00000000020a0019000b0000000f001d26d726d20000040f0000000b0f000029000000050e000029000000060d000029000000070c000029000000080b000029000000090a000029000000010220018f00030000000103550000006001100270000109b70010019d000009b701100197000000000310004c00000000030d001900000b3c0000613d000009be0310009c000012320000213d0000003f031000390000000a04000029000000000443016f000000400300043d0000000004430019000000000534004b00000000050000190000000105004039000009be0640009c000012320000213d0000000105500190000012320000c13d000000400040043f000000000113043600000003040003670000000106000031000000050560027200000b2d0000613d000000000700001900000005087002100000000009810019000000000884034f000000000808043b00000000008904350000000107700039000000000857004b00000b250000413d0000001f0660019000000b3c0000613d0000000505500210000000000454034f00000000015100190000000305600210000000000601043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000410435000000000120004c00000cfb0000613d000000800100043d0000000001f1004b00000caa0000a13d0000000c01000029000000a0011000390000000000310435000000800100043d0000000001f1004b00000caa0000a13d000000010ff000390000000001bf004b00000aa40000413d0000057f0000013d000009b702000041000009b70510009c0000000001028019000000c001100210000000000230004c00000bae0000c13d000000000204001926d726c80000040f00030000000103550000006001100270000109b70010019d000009b70110019700000bb60000013d000000440130003900000a0a020000410000000000210435000000240130003900000018020000390000000000210435000009e7010000410000000000130435000000040130003900000020020000390000000000210435000009b701000041000009b70230009c00000000010340190000004001100210000009e9011001c7000026d900010430000a00000003001d000000000130004c000002f50000613d000009f00100004100000000001004390000000b010000290000000400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ef011001c7000080020200003926d726cd0000040f0000000102200190000009b50000613d000000000101043b000000000110004c000009b50000613d000000400200043d00000a0b010000410000000001120436000800000001001d000900000002001d000000040220003900000000010004140000000a0300002900000000003204350000000b02000029000000040220008c00000b9c0000613d000009b702000041000009b70310009c00000000010280190000000904000029000009b70340009c00000000020440190000004002200210000000c001100210000000000121019f000009c2011001c70000000b0200002926d726c80000040f00000000030100190000006003300270000109b70030019d000009b7043001970003000000010355000000010220019000000f8a0000613d0000000901000029000009be0110009c000012320000213d0000000901000029000000400010043f00000a0c0110009c000012320000213d0000000801000029000000400010043f0000000901000029000000000001043500000000010004140000000c02000029000000040220008c0000111e0000c13d000000010200003900000001010000310000112c0000013d00000a0d011001c70000800902000039000000000500001926d726c80000040f00030000000103550000006001100270000109b70010019d000009b701100197000000000310004c00000bcc0000c13d0000000101200190000002f50000c13d000000400100043d000000440210003900000a15030000410000000000320435000000240210003900000003030000390000000000320435000009e7020000410000000000210435000000040210003900000020030000390000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d900010430000009be0310009c000012320000213d0000003f03100039000000200400008a000000000443016f000000400300043d0000000004430019000000000534004b00000000050000190000000105004039000009be0640009c000012320000213d0000000105500190000012320000c13d000000400040043f0000000001130436000000030300036700000001050000310000001f0450018f000000050550027200000bea0000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b00000be20000413d000000000640004c00000bb80000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f000000000031043500000bb80000013d0000000001010433000009b704000041000009b70510009c000000000104801900000060011002100000004003300210000000000131019f000009b70360009c00000000030400190000000003064019000000c003300210000000000131019f26d726c80000040f000000010220018f00030000000103550000006001100270000109b70010019d000009b7031001970000006001000039000000000430004c00000c230000c13d000000000220004c00000cb00000c13d000000400100043d000000440210003900000a07030000410000000000320435000000240210003900000002030000390000000000320435000009e7020000410000000000210435000000040210003900000020030000390000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d900010430000009be0130009c000012320000213d0000003f01300039000000200400008a000000000441016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000009be0640009c000012320000213d0000000105500190000012320000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f000000050660027200000c410000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b00000c390000413d000000000750004c00000c0f0000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000043043500000c0f0000013d000009b7010000410000000704000029000009b70340009c00000000030100190000000003044019000009b704a0009c00000000010a40190000004001100210000000c003300210000000000113019f000009c2011001c726d726cd0000040f000000080a00002900000000030100190000006003300270000009b703300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000c700000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000c680000413d000000000750004c00000c7f0000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000000cd50000613d0000001f01400039000000600210018f0000000001a20019000000000221004b00000000020000190000000102004039000009be0410009c000012320000213d0000000102200190000012320000c13d000000400010043f000000200230008c000009b50000413d00000008020000290000000002020433000000000320004c0000000003000019000000010300c039000000000332004b000009b50000c13d000000000220004c00000fb00000c13d000000440210003900000a0903000041000000000032043500000024021000390000001d030000390000000000320435000009e7020000410000000000210435000000040210003900000020030000390000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d900010430000009c10100004100000000001004350000003201000039000000040010043f000009c201000041000026d9000104300000000012010434000000000320004c000002f50000613d000009ba03000041000000200420008c00000000040000190000000004034019000009ba02200197000000000520004c000000000300a019000009ba0220009c00000000020400190000000002036019000000000220004c000009b50000c13d0000000001010433000000000210004c0000000002000019000000010200c039000000000221004b000009b50000c13d000000000110004c00000c110000613d000002f50000013d00000a1201000041000700000003001d0000000001130436000600000001001d00000000010004140000000c02000029000000040220008c00000d610000c13d0000000103000031000000800130008c0000008004000039000000000403401900000d940000013d000000400200043d0000001f0430018f000000050330027200000ce20000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000cda0000413d000000000540004c00000cf10000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d9000104300000000001030433000000440110008c000009b50000413d000000240130003900000004023000390000000002020433000000000212001926d725700000040f000009e702000041000000400300043d000c00000003001d00000000002304350000000002010019000000040130003926d725b90000040f0000000c040000290000000001410049000009b702000041000009b70310009c0000000001028019000009b70340009c000000000204401900000040022002100000006001100210000000000121019f000026d900010430000000400200043d0000001f0340018f000000050440027200000d220000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000d1a0000413d000000000530004c00000d310000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000400200043d0000001f0340018f000000050440027200000d480000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000d400000413d000000000530004c00000d570000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000009b702000041000009b70310009c00000000010280190000000704000029000009b70340009c00000000020440190000004002200210000000c001100210000000000121019f000009bd011001c70000000c0200002926d726cd0000040f000000070a00002900000000030100190000006003300270000009b703300197000000800430008c000000800400003900000000040340190000001f0540018f000000050640027200000d800000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000d780000413d000000000750004c00000d900000613d0000000506600210000000000761034f000000070800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000000f3e0000613d0000001f01400039000001e00210018f00000007010000290000000001120019000000000221004b00000000020000190000000102004039000009be0410009c000012320000213d0000000102200190000012320000c13d000000400010043f000000800230008c000009b50000413d000009ea0210009c000012320000213d0000008002100039000000400020043f00000007020000290000000002020433000009f803200198000009f9030000410000000003006019000009fa04200197000000000343019f000000000323004b000009b50000c13d000000000221043600000006030000290000000003030433000000ff0430008c000009b50000213d000000000032043500000007020000290000004002200039000000000202043300000a0f0320009c000009b50000213d0000004003100039000000000023043500000007020000290000006002200039000000000202043300000a130320009c000009b50000813d000000600310003900000000002304350000000001010433000009f802100198000009f9020000410000000002006019000009fa01100197000000000112019f000009ba020000410000000904000029000000000341004b00000000030000190000000003028019000009ba04400197000009ba05100197000000000645004b00000000060000190000000006024019000000000445013f000009ba0440009c00000000030660190000000804000029000000000141004b0000000001000019000000000102a019000009ba04400197000000000645004b000000000200a019000000000445013f000009ba0440009c0000000001026019000000000110004c0000000001000019000000010100c039000000000230004c0000000002000019000000010200c039000000000112016f000000010110018f26d723620000040f00000002010003670000008402100370000000000602043b0000006402100370000000000502043b0000002401100370000000000201043b0000000c010000290000000a030000290000000b0400002926d71f700000040f0000000005010019000000000602001900000000070300190000000008040019000000400100043d000c00000001001d000000000205001900000000030600190000000004070019000000000508001926d71b1b0000040f0000000c040000290000000001410049000009b702000041000009b70310009c0000000001028019000009b70340009c000000000204401900000040022002100000006001100210000000000121019f000026d80001042e000009b701000041000009b70320009c00000000020180190000000604000029000009b70340009c00000000010440190000004001100210000000c002200210000000000112019f000009f7011001c70000000a0200002926d726cd0000040f000000060a00002900000000030100190000006003300270000009b703300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200000e290000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000e210000413d000000000750004c00000e390000613d0000000506600210000000000761034f000000060800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000000f640000613d0000001f01400039000000600110018f00000006020000290000000002210019000000000112004b00000000010000190000000101004039000500000002001d000009be0220009c000012320000213d0000000101100190000012320000c13d0000000501000029000000400010043f000000200130008c000009b50000413d00000006010000290000000001010433000009bb0210009c000009b50000213d000000000210004c0000123f0000c13d00000002020003670000006401200370000000000101043b000009f803100198000009f9030000410000000003006019000009fa04100197000000000343019f000000000313004b000009b50000c13d0000008403200370000000000303043b000009bb0430009c000009b50000213d000000a402200370000000000402043b000009bb0240009c000009b50000213d000009fb0200004100000005060000290000000000260435000000a4056000390000000002000414000000000045043500000084046000390000000000340435000000640360003900000000001304350000004401600039000000070300002900000000003104350000002401600039000000080300002900000000003104350000000401600039000000090300002900000000003104350000000a01000029000000040110008c000011f90000c13d0000000103000031000000200130008c000000200400003900000000040340190000122c0000013d0000001f01100039000000000161016f000009b7030000410000000c05000029000009b70450009c000000000403001900000000040540190000004004400210000000e401100039000009b70510009c00000000010380190000006001100210000000000141019f000009b70470009c0000000003074019000000c003300210000000000131019f26d726c80000040f0000000c0a00002900000000030100190000006003300270000009b703300197000000400430008c000000400400003900000000040340190000001f0540018f000000050640027200000ea50000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000e9d0000413d000000000750004c00000eb50000613d0000000506600210000000000761034f0000000c0800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000102e0000613d0000001f01400039000000e00210018f0000000c010000290000000001120019000000000221004b00000000020000190000000102004039000009be0410009c000012320000213d0000000102200190000012320000c13d000000400010043f000000400130008c000009b50000413d000000c4010000390000000201100367000000000101043b0000000b020000290000000002020433000c00000002001d000000000112004b0000000001000019000000010100803926d71c5c0000040f000000400100043d0000000c020000290000000000210435000009b702000041000009b70310009c00000000010280190000004001100210000009e3011001c7000026d80001042e0000001f01100039000000000171016f000009b7030000410000000b05000029000009b70450009c000000000403001900000000040540190000004004400210000000e401100039000009b70510009c00000000010380190000006001100210000000000141019f000009b70480009c0000000003084019000000c003300210000000000131019f26d726c80000040f0000000b0a00002900000000030100190000006003300270000009b703300197000000400430008c000000400400003900000000040340190000001f0540018f000000050640027200000eff0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00000ef70000413d000000000750004c00000f0f0000613d0000000506600210000000000761034f0000000b0800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000010540000613d0000001f01400039000000e00210018f0000000b010000290000000001120019000000000221004b00000000020000190000000102004039000009be0410009c000012320000213d0000000102200190000012320000c13d000000400010043f000000400130008c000009b50000413d0000000a0100002900000000010104330000000c02000029000000000121004b000000000100001900000001010060390000000b020000290000000002020433000c00000002001d26d71e0b0000040f000000c4010000390000000201100367000000000101043b0000000c02000029000000000112004b0000000001000019000000010100a03926d71f2f0000040f000000010100008a000000000010041b000000400100043d0000000c020000290000000000210435000009b702000041000009b70310009c00000000010280190000004001100210000009e3011001c7000026d80001042e000000400200043d0000001f0430018f000000050330027200000f4b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000f430000413d000000000540004c00000f5a0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000400200043d0000001f0430018f000000050330027200000f710000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00000f690000413d000000000540004c00000f800000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000400200043d0000001f0340018f000000050440027200000f970000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00000f8f0000413d000000000530004c00000fa60000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d9000104300000000b02000029000000200220008c000009b50000413d0000000a020000290000000202200367000000000202043b000009be0320009c000009b50000213d0000000a03000029000000000332001900000009020000290000000002320049000009ba04000041000000600520008c00000000050000190000000005044019000009ba02200197000000000620004c000000000400a019000009ba0220009c00000000020500190000000002046019000000000220004c000009b50000c13d00000a010210009c000012320000213d0000006002100039000000400020043f0000000204000367000000000534034f000000000505043b000009be0650009c000009b50000213d00000000053500190000001f065000390000000907000029000000000676004b000009b50000813d000000000454034f000000000404043b000009be0640009c000012320000213d0000003f06400039000000200700008a000a00000007001d000000000676016f0000000006260019000009be0760009c000012320000213d0000002005500039000000400060043f000000000042043500000000065400190000000907000029000000000676004b000009b50000213d0000001f0640018f00000002075003670000008005100039000000050840027200000ff60000613d0000000009000019000000050a900210000000000ba50019000000000aa7034f000000000a0a043b0000000000ab04350000000109900039000000000a89004b00000fee0000413d000000000960004c000010050000613d0000000508800210000000000787034f00000000088500190000000306600210000000000908043300000000096901cf000000000969022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000696019f000000000068043500000000045400190000000000040435000000000221043600000020043000390000000204400367000000000404043b000009bb0540009c000009b50000213d000000000042043500000040033000390000000203300367000000000403043b000000000340004c0000000003000019000000010300c039000000000334004b000009b50000c13d00000040031000390000000000430435000000000501043300000000760504340000003b0860008c000014d10000213d000000400100043d000000440210003900000a08030000410000000000320435000000240210003900000015030000390000000000320435000009e7020000410000000000210435000000040210003900000020030000390000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d900010430000000400200043d0000001f0430018f00000005033002720000103b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000010330000413d000000000540004c0000104a0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000400200043d0000001f0430018f0000000503300272000010610000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000010590000413d000000000540004c000010700000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000009b7010000410000000504000029000009b70340009c000000000301001900000000030440190000000705000029000009b70450009c00000000010540190000004001100210000000c003300210000000000113019f000009c2011001c726d726cd0000040f000000070a00002900000000030100190000006003300270000009b703300197000000200430008c000000200400003900000000040340190000001f0540018f00000005064002720000109a0000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000010920000413d000000000750004c000010aa0000613d0000000506600210000000000761034f000000070800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000115f0000613d0000001f01400039000000600210018f00000007010000290000000001120019000000000221004b00000000020000190000000102004039000009be0410009c000012320000213d0000000102200190000012320000c13d000000400010043f000000200130008c000009b50000413d00000007010000290000000001010433000000000210004c0000000002000019000000010200c039000009b50000613d000000000121004b000009b50000c13d00000006010000290000000001010433000009bb011001970000000202000029000000000112004b000009b50000c13d0000000c01000029000000000110004c000011ab0000c13d0000000b01000029000000000110004c000002f50000613d00000008010000290000000001010433000c00000001001d00000004010000290000000001010433000a00000001001d000009ec0100004100000000001004390000000301000029000000040010044300000040010000390000002400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ed011001c7000080050200003926d726cd0000040f0000000a03000029000009bb03300197000a00000003001d0000000c03000029000009bb03300197000c00000003001d0000000102200190000009b50000613d000000000101043b000009bb011001970000000c02000029000000000112004b000011030000c13d000009ee01000041000000000010043900000009010000290000000400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ef011001c70000800a0200003926d726cd0000040f0000000102200190000009b50000613d000000000101043b0000000b02000029000000000121004b000013ba0000813d000000400100043d000000200210003900000009030000290000000a04000029000000000334004b0000129d0000c13d000009e603000041000000000032043500000044031000390000000b04000029000000000043043500000024031000390000000104000029000000000043043500000044030000390000000000310435000009ea0310009c000012320000213d0000008003100039000000400030043f00000000030004140000000c04000029000000040440008c000013ff0000c13d00000001020000390000000103000031000014140000013d000009b702000041000009b70310009c0000000001028019000000c00110021000000a0d011001c700008009020000390000000a030000290000000c04000029000000000500001926d726c80000040f00030000000103550000006001100270000109b70010019d000009b701100197000000000310004c000011310000c13d0000000101200190000002f50000c13d00000bba0000013d000009be0310009c000012320000213d0000003f03100039000000200400008a000000000443016f000000400300043d0000000004430019000000000534004b00000000050000190000000105004039000009be0640009c000012320000213d0000000105500190000012320000c13d000000400040043f0000000001130436000000030300036700000001050000310000001f0450018f00000005055002720000114f0000613d000000000600001900000005076002100000000008710019000000000773034f000000000707043b00000000007804350000000106600039000000000756004b000011470000413d000000000640004c0000112e0000613d0000000505500210000000000353034f00000000015100190000000304400210000000000501043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003104350000112e0000013d000000400200043d0000001f0430018f00000005033002720000116c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000011640000413d000000000540004c0000117b0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000400200043d0000001f0340018f0000000504400272000011920000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000118a0000413d000000000530004c000011a10000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d9000104300000000a010000290000000001010433000a00000001001d00000004010000290000000001010433000700000001001d000009ec0100004100000000001004390000000301000029000000040010044300000040010000390000002400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ed011001c7000080050200003926d726cd0000040f0000000703000029000009bb03300197000700000003001d0000000a03000029000009bb03300197000a00000003001d0000000102200190000009b50000613d000000000101043b000009bb011001970000000a02000029000000000112004b000011de0000c13d000009ee01000041000000000010043900000009010000290000000400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ef011001c70000800a0200003926d726cd0000040f0000000102200190000009b50000613d000000000101043b0000000c02000029000000000121004b000012b50000813d000000400100043d000000200210003900000009030000290000000704000029000000000334004b000012850000c13d000009e603000041000000000032043500000044031000390000000c04000029000000000043043500000024031000390000000104000029000000000043043500000044030000390000000000310435000009ea0310009c000012320000213d0000008003100039000000400030043f00000000030004140000000a04000029000000040440008c000012fa0000c13d000000010200003900000001030000310000130f0000013d000009b701000041000009b70320009c00000000020180190000000504000029000009b70340009c00000000010440190000004001100210000000c002200210000000000112019f000009fc011001c70000000a0200002926d726c80000040f000000050a00002900000000030100190000006003300270000009b703300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000012180000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000012100000413d000000000750004c000012280000613d0000000506600210000000000761034f000000050800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000125f0000613d0000001f01400039000000600110018f00000005020000290000000001210019000009be0210009c000012380000a13d000009c10100004100000000001004350000004101000039000000040010043f000009c201000041000026d900010430000000400010043f000000200130008c000009b50000413d00000005010000290000000001010433000009bb0210009c000009b50000213d00000002020003670000012403200370000000000603043b0000010403200370000000000503043b000000c402200370000000000202043b0000000b030000290000000c0400002926d71f700000040f0000000005010019000000000602001900000000070300190000000008040019000000400100043d000c00000001001d000000000205001900000000030600190000000004070019000000000508001926d71b1b0000040f0000000c040000290000000001410049000009b702000041000009b70310009c0000000001028019000009b70340009c000000000204401900000040022002100000006001100210000000000121019f000026d80001042e000000400200043d0000001f0430018f00000005033002720000126c0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000012640000413d000000000540004c0000127b0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000009f403000041000000000032043500000064031000390000000c04000029000000000043043500000044031000390000000104000029000000000043043500000024031000390000000704000029000000000043043500000064030000390000000000310435000009f50310009c000012320000213d000000a003100039000000400030043f00000000030004140000000a04000029000000040440008c0000132c0000c13d00000001020000390000000103000031000013410000013d000009f403000041000000000032043500000064031000390000000b04000029000000000043043500000044031000390000000104000029000000000043043500000024031000390000000a04000029000000000043043500000064030000390000000000310435000009f50310009c000012320000213d000000a003100039000000400030043f00000000030004140000000c04000029000000040440008c000014310000c13d00000001020000390000000103000031000014460000013d000009f00100004100000000001004390000000a010000290000000400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ef011001c7000080020200003926d726cd0000040f0000000102200190000009b50000613d000000000101043b000000000110004c000009b50000613d000000400200043d000009f101000041000700000002001d000000000012043500000000010004140000000a02000029000000040220008c000012e40000613d000009b702000041000009b70310009c00000000010280190000000704000029000009b70340009c00000000020440190000004002200210000000c001100210000000000121019f000009f2011001c700008009020000390000000c030000290000000a04000029000000000500001926d726c80000040f00000000030100190000006003300270000109b70030019d000009b704300197000300000001035500000001022001900000152b0000613d0000000701000029000009be0110009c000012320000213d0000000704000029000000400040043f000009e6010000410000000000140435000000240240003900000000010004140000000c0300002900000000003204350000000402400039000000010300002900000000003204350000000a02000029000000040220008c000015510000c13d0000000103000031000000200130008c00000020040000390000000004034019000015840000013d000009b704000041000009b70520009c000000000204801900000040022002100000000001010433000009b70510009c00000000010480190000006001100210000000000121019f000009b70230009c00000000020400190000000002034019000000c002200210000000000121019f0000000a0200002926d726c80000040f000000010220018f00030000000103550000006001100270000109b70010019d000009b7031001970000006001000039000000000430004c0000135e0000c13d000000000220004c00000c110000613d0000000012010434000000000320004c000010cd0000613d000009ba03000041000000200420008c00000000040000190000000004034019000009ba02200197000000000520004c000000000300a019000009ba0220009c00000000020400190000000002036019000000000220004c000009b50000c13d0000000001010433000000000210004c0000000002000019000000010200c039000000000221004b000009b50000c13d000000000110004c00000c110000613d000010cd0000013d000009b704000041000009b70520009c000000000204801900000040022002100000000001010433000009b70510009c00000000010480190000006001100210000000000121019f000009b70230009c00000000020400190000000002034019000000c002200210000000000121019f0000000a0200002926d726c80000040f000000010220018f00030000000103550000006001100270000109b70010019d000009b7031001970000006001000039000000000430004c0000138c0000c13d000000000220004c0000144b0000613d0000000012010434000000000320004c000010cd0000613d000009ba03000041000000200420008c00000000040000190000000004034019000009ba02200197000000000520004c000000000300a019000009ba0220009c00000000020400190000000002036019000000000220004c000009b50000c13d0000000001010433000000000210004c0000000002000019000000010200c039000000000221004b000009b50000c13d000000000110004c0000144b0000613d000010cd0000013d000009be0130009c000012320000213d0000003f01300039000000200400008a000000000441016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000009be0640009c000012320000213d0000000105500190000012320000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f00000005066002720000137c0000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000013740000413d000000000750004c000013120000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000013120000013d000009be0130009c000012320000213d0000003f01300039000000200400008a000000000441016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000009be0640009c000012320000213d0000000105500190000012320000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f0000000506600272000013aa0000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000013a20000413d000000000750004c000013440000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000013440000013d000009f00100004100000000001004390000000c010000290000000400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ef011001c7000080020200003926d726cd0000040f0000000102200190000009b50000613d000000000101043b000000000110004c000009b50000613d000000400200043d000009f101000041000a00000002001d000000000012043500000000010004140000000c02000029000000040220008c000013e90000613d000009b702000041000009b70310009c00000000010280190000000a04000029000009b70340009c00000000020440190000004002200210000000c001100210000000000121019f000009f2011001c700008009020000390000000b030000290000000c04000029000000000500001926d726c80000040f00000000030100190000006003300270000109b70030019d000009b70430019700030000000103550000000102200190000015950000613d0000000a01000029000009be0110009c000012320000213d0000000a04000029000000400040043f000009e6010000410000000000140435000000240240003900000000010004140000000b0300002900000000003204350000000402400039000000010300002900000000003204350000000c02000029000000040220008c000016080000c13d0000000103000031000000200130008c000000200400003900000000040340190000163b0000013d000009b704000041000009b70520009c000000000204801900000040022002100000000001010433000009b70510009c00000000010480190000006001100210000000000121019f000009b70230009c00000000020400190000000002034019000000c002200210000000000121019f0000000c0200002926d726c80000040f000000010220018f00030000000103550000006001100270000109b70010019d000009b7031001970000006001000039000000000430004c0000145d0000c13d000000000220004c00000c110000613d0000000012010434000000000320004c000002f50000613d000009ba03000041000000200420008c00000000040000190000000004034019000009ba02200197000000000520004c000000000300a019000009ba0220009c00000000020400190000000002036019000000000220004c000009b50000c13d0000000001010433000000000210004c0000000002000019000000010200c039000000000221004b000009b50000c13d000000000110004c00000c110000613d000002f50000013d000009b704000041000009b70520009c000000000204801900000040022002100000000001010433000009b70510009c00000000010480190000006001100210000000000121019f000009b70230009c00000000020400190000000002034019000000c002200210000000000121019f0000000c0200002926d726c80000040f000000010220018f00030000000103550000006001100270000109b70010019d000009b7031001970000006001000039000000000430004c0000148b0000c13d000000000220004c000014b90000c13d000000400100043d000000440210003900000a06030000410000000000320435000000240210003900000003030000390000000000320435000009e7020000410000000000210435000000040210003900000020030000390000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d900010430000009be0130009c000012320000213d0000003f01300039000000200400008a000000000441016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000009be0640009c000012320000213d0000000105500190000012320000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f00000005066002720000147b0000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000014730000413d000000000750004c000014170000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000014170000013d000009be0130009c000012320000213d0000003f01300039000000200400008a000000000441016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000009be0640009c000012320000213d0000000105500190000012320000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f0000000506600272000014a90000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000014a10000413d000000000750004c000014490000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000014490000013d0000000012010434000000000320004c000002f50000613d000009ba03000041000000200420008c00000000040000190000000004034019000009ba02200197000000000520004c000000000300a019000009ba0220009c00000000020400190000000002036019000000000220004c000009b50000c13d0000000001010433000000000210004c0000000002000019000000010200c039000000000221004b000009b50000c13d000000000110004c0000144b0000613d000002f50000013d0000003408500039000000000808043300000060088002700000000509000029000000000889004b000009b50000c13d000000000440004c000015bb0000613d000000630460008c000016720000213d00000048015000390000000001010433000900000001001d0000000c01000029000000000010041b0000000001020433000b00000001001d000009ec0100004100000000001004390000000601000029000000040010044300000040010000390000002400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ed011001c7000080050200003926d726cd0000040f0000000b03000029000009bb03300197000b00000003001d0000000102200190000009b50000613d000000090200002900000060022002700000000003000410000900000003001d000000000101043b000009bb01100197000800000002001d000000000112004b000015100000c13d000009ee01000041000000000010043900000009010000290000000400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ef011001c70000800a0200003926d726cd0000040f0000000102200190000009b50000613d000000000101043b0000000c02000029000000000121004b000018b40000813d000000400100043d00000020021000390000000b030000290000000904000029000000000343004b000017390000c13d000009e603000041000000000032043500000044031000390000000c04000029000000000043043500000024031000390000000404000029000000000043043500000044030000390000000000310435000009ea0310009c000012320000213d0000008003100039000000400030043f00000000030004140000000804000029000000040440008c0000191f0000c13d00000001020000390000000103000031000019340000013d000000400200043d0000001f0340018f0000000504400272000015380000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000015300000413d000000000530004c000015470000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000009b702000041000009b70310009c00000000010280190000000704000029000009b70340009c00000000020440190000004002200210000000c001100210000000000121019f000009f3011001c70000000a0200002926d726c80000040f000000070a00002900000000030100190000006003300270000009b703300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000015700000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000015680000413d000000000750004c000015800000613d0000000506600210000000000761034f000000070800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000164c0000613d0000001f01400039000000600110018f00000007020000290000000001210019000009be0210009c000012320000213d000000400010043f000000200130008c000009b50000413d00000007010000290000000001010433000000000210004c0000000002000019000000010200c039000000000121004b000009b50000c13d000010cd0000013d000000400200043d0000001f0340018f0000000504400272000015a20000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000159a0000413d000000000530004c000015b10000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d9000104300000000001070433000900000001001d0000000001020433000b00000001001d000009ec0100004100000000001004390000000601000029000000040010044300000040010000390000002400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ed011001c7000080050200003926d726cd0000040f0000000b03000029000009bb03300197000b00000003001d0000000102200190000009b50000613d000000090200002900000060022002700000000003000410000900000003001d000000000101043b000009bb01100197000800000002001d000000000112004b000015ed0000c13d000009ee01000041000000000010043900000009010000290000000400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ef011001c70000800a0200003926d726cd0000040f0000000102200190000009b50000613d000000000101043b0000000c02000029000000000121004b000017510000813d000000400100043d00000020021000390000000b030000290000000904000029000000000343004b000017210000c13d000009e603000041000000000032043500000044031000390000000c04000029000000000043043500000024031000390000000404000029000000000043043500000044030000390000000000310435000009ea0310009c000012320000213d0000008003100039000000400030043f00000000030004140000000804000029000000040440008c000017f40000c13d00000001020000390000000103000031000018090000013d000009b702000041000009b70310009c00000000010280190000000a04000029000009b70340009c00000000020440190000004002200210000000c001100210000000000121019f000009f3011001c70000000c0200002926d726c80000040f0000000a0a00002900000000030100190000006003300270000009b703300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000016270000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b0000161f0000413d000000000750004c000016370000613d0000000506600210000000000761034f0000000a0800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000016fb0000613d0000001f01400039000000600110018f0000000a020000290000000001210019000009be0210009c000012320000213d000000400010043f000000200130008c000009b50000413d0000000a010000290000000001010433000000000210004c0000000002000019000000010200c039000000000121004b000002f50000613d000009b50000013d000000400200043d0000001f0430018f0000000503300272000016590000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000016510000413d000000000540004c000016680000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000280660008a0000001f0460019000000000070000190000002007006039000000000947019f000000400400043d00000000079400190000000008670019000000000a87004b000016820000813d0000000005950019000000280550003900000000590504340000000007970436000000000987004b0000167e0000413d00000000066404360000001f057000390000000a07000029000000000575016f000000400050043f00000000004104350000000405000029000000000550004c0000168d0000c13d0000000005000410000500000005001d00000000050404330000003c0550008c0000101c0000413d00000034054000390000000005050433000000000606043300000048044000390000000007040433000000400400043d00000020084000390000002009000039000900000009001d00000000009804350000000008010433000000400140003900000060090000390000000000910435000000a00940003900000000010804330000000000190435000000c009400039000000000a10004c000016ac0000613d000000000a000019000000000b9a0019000000200aa00039000000000c8a0019000000000c0c04330000000000cb0435000000000b1a004b000016a50000413d000000000891001900000000000804350000000002020433000009bb02200197000000600840003900000000002804350000000002030433000000000220004c0000000002000019000000010200c03900000080034000390000000000230435000000bf021000390000000a03000029000000000232016f0000000000240435000000df01100039000000000131016f0000000002410019000000000112004b00000000010000190000000101004039000b00000002001d000009be0220009c000012320000213d0000000101100190000012320000c13d0000006003700270000000600660027000000060025002700000000b08000029000000400080043f00000a02010000410000000001180436000800000001001d000000a4058000390000000001000414000000c0070000390000000000750435000000640580003900000001070000390000000000750435000000000363004b000000000300001900000001030040390000004405800039000000000035043500000024038000390000000c0500002900000000005304350000000503000029000009bb0330019700000004058000390000000000350435000000840380003900000000000304350000000003040433000000c4058000390000000000350435000000e405800039000000000630004c000016f20000613d000000000600001900000000075600190000002006600039000000000846001900000000080804330000000000870435000000000736004b000016eb0000413d00000000045300190000000000040435000000040420008c000017960000c13d0000000103000031000000400130008c00000040040000390000000004034019000017d00000013d000000400200043d0000001f0430018f0000000503300272000017080000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000017000000413d000000000540004c000017170000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000009f403000041000000000032043500000064031000390000000c04000029000000000043043500000044031000390000000404000029000000000043043500000024031000390000000b04000029000000000043043500000064030000390000000000310435000009f50310009c000012320000213d000000a003100039000000400030043f00000000030004140000000804000029000000040440008c000018260000c13d000000010200003900000001030000310000183b0000013d000009f403000041000000000032043500000064031000390000000c04000029000000000043043500000044031000390000000404000029000000000043043500000024031000390000000b04000029000000000043043500000064030000390000000000310435000009f50310009c000012320000213d000000a003100039000000400030043f00000000030004140000000804000029000000040440008c000019510000c13d00000001020000390000000103000031000019660000013d000009f001000041000000000010043900000008010000290000000400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ef011001c7000080020200003926d726cd0000040f0000000102200190000009b50000613d000000000101043b000000000110004c000009b50000613d000000400200043d000009f101000041000b00000002001d000000000012043500000000010004140000000802000029000000040220008c000017800000613d000009b702000041000009b70310009c00000000010280190000000b04000029000009b70340009c00000000020440190000004002200210000000c001100210000000000121019f000009f2011001c700008009020000390000000c030000290000000804000029000000000500001926d726c80000040f00000000030100190000006003300270000109b70030019d000009b70430019700030000000103550000000102200190000019df0000613d0000000b01000029000009be0110009c000012320000213d0000000b04000029000000400040043f000009e6010000410000000000140435000000240240003900000000010004140000000c0300002900000000003204350000000402400039000000040300002900000000003204350000000802000029000000040220008c00001a050000c13d0000000103000031000000200130008c0000002004000039000000000403401900001a380000013d0000001f033000390000000a04000029000000000343016f000009b7040000410000000b06000029000009b70560009c000000000504001900000000050640190000004005500210000000e403300039000009b70630009c00000000030480190000006003300210000000000353019f000009b70510009c0000000001048019000000c001100210000000000113019f26d726c80000040f00000000030100190000006003300270000009b703300197000000400430008c000000400400003900000000040340190000001f0540018f0000000506400272000017bc0000613d000000000700001900000005087002100000000b090000290000000009890019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000017b30000413d000000000750004c000017cc0000613d0000000506600210000000000761034f0000000b0800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000018f90000613d0000001f01400039000000e00210018f0000000b010000290000000001120019000000000221004b00000000020000190000000102004039000009be0410009c000012320000213d0000000102200190000012320000c13d000000400010043f000000400230008c000009b50000413d000000080200002900000000020204330000000c03000029000000000232004b000002f50000613d000000440210003900000a0503000041000000000032043500000024021000390000001e030000390000000000320435000009e7020000410000000000210435000000040210003900000009030000290000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d900010430000009b704000041000009b70520009c000000000204801900000040022002100000000001010433000009b70510009c00000000010480190000006001100210000000000121019f000009b70230009c00000000020400190000000002034019000000c002200210000000000121019f000000080200002926d726c80000040f000000010220018f00030000000103550000006001100270000109b70010019d000009b7031001970000006001000039000000000430004c000018580000c13d000000000220004c00000c110000613d0000000012010434000000000320004c000002f50000613d000009ba03000041000000200420008c00000000040000190000000004034019000009ba02200197000000000520004c000000000300a019000009ba0220009c00000000020400190000000002036019000000000220004c000009b50000c13d0000000001010433000000000210004c0000000002000019000000010200c039000000000221004b000009b50000c13d000000000110004c00000c110000613d000002f50000013d000009b704000041000009b70520009c000000000204801900000040022002100000000001010433000009b70510009c00000000010480190000006001100210000000000121019f000009b70230009c00000000020400190000000002034019000000c002200210000000000121019f000000080200002926d726c80000040f000000010220018f00030000000103550000006001100270000109b70010019d000009b7031001970000006001000039000000000430004c000018860000c13d000000000220004c0000144b0000613d0000000012010434000000000320004c000002f50000613d000009ba03000041000000200420008c00000000040000190000000004034019000009ba02200197000000000520004c000000000300a019000009ba0220009c00000000020400190000000002036019000000000220004c000009b50000c13d0000000001010433000000000210004c0000000002000019000000010200c039000000000221004b000009b50000c13d000000000110004c0000144b0000613d000002f50000013d000009be0130009c000012320000213d0000003f013000390000000a04000029000000000441016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000009be0640009c000012320000213d0000000105500190000012320000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f0000000506600272000018760000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b0000186e0000413d000000000750004c0000180c0000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000180c0000013d000009be0130009c000012320000213d0000003f013000390000000a04000029000000000441016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000009be0640009c000012320000213d0000000105500190000012320000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f0000000506600272000018a40000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b0000189c0000413d000000000750004c0000183e0000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000183e0000013d000009f001000041000000000010043900000008010000290000000400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ef011001c7000080020200003926d726cd0000040f0000000102200190000009b50000613d000000000101043b000000000110004c000009b50000613d000000400200043d000009f101000041000b00000002001d000000000012043500000000010004140000000802000029000000040220008c000018e30000613d000009b702000041000009b70310009c00000000010280190000000b04000029000009b70340009c00000000020440190000004002200210000000c001100210000000000121019f000009f2011001c700008009020000390000000c030000290000000804000029000000000500001926d726c80000040f00000000030100190000006003300270000109b70030019d000009b7043001970003000000010355000000010220019000001a490000613d0000000b01000029000009be0110009c000012320000213d0000000b04000029000000400040043f000009e6010000410000000000140435000000240240003900000000010004140000000c0300002900000000003204350000000402400039000000040300002900000000003204350000000802000029000000040220008c00001a6f0000c13d0000000103000031000000200130008c0000002004000039000000000403401900001aa20000013d000000400200043d0000001f0430018f0000000503300272000019060000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000018fe0000413d000000000540004c000019150000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000009b704000041000009b70520009c000000000204801900000040022002100000000001010433000009b70510009c00000000010480190000006001100210000000000121019f000009b70230009c00000000020400190000000002034019000000c002200210000000000121019f000000080200002926d726c80000040f000000010220018f00030000000103550000006001100270000109b70010019d000009b7031001970000006001000039000000000430004c000019830000c13d000000000220004c00000c110000613d0000000012010434000000000320004c000002f50000613d000009ba03000041000000200420008c00000000040000190000000004034019000009ba02200197000000000520004c000000000300a019000009ba0220009c00000000020400190000000002036019000000000220004c000009b50000c13d0000000001010433000000000210004c0000000002000019000000010200c039000000000221004b000009b50000c13d000000000110004c00000c110000613d000002f50000013d000009b704000041000009b70520009c000000000204801900000040022002100000000001010433000009b70510009c00000000010480190000006001100210000000000121019f000009b70230009c00000000020400190000000002034019000000c002200210000000000121019f000000080200002926d726c80000040f000000010220018f00030000000103550000006001100270000109b70010019d000009b7031001970000006001000039000000000430004c000019b10000c13d000000000220004c0000144b0000613d0000000012010434000000000320004c000002f50000613d000009ba03000041000000200420008c00000000040000190000000004034019000009ba02200197000000000520004c000000000300a019000009ba0220009c00000000020400190000000002036019000000000220004c000009b50000c13d0000000001010433000000000210004c0000000002000019000000010200c039000000000221004b000009b50000c13d000000000110004c0000144b0000613d000002f50000013d000009be0130009c000012320000213d0000003f013000390000000a04000029000000000441016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000009be0640009c000012320000213d0000000105500190000012320000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f0000000506600272000019a10000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000019990000413d000000000750004c000019370000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000019370000013d000009be0130009c000012320000213d0000003f013000390000000a04000029000000000441016f000000400100043d0000000004410019000000000514004b00000000050000190000000105004039000009be0640009c000012320000213d0000000105500190000012320000c13d000000400040043f0000000003310436000000030400036700000001060000310000001f0560018f0000000506600272000019cf0000613d000000000700001900000005087002100000000009830019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b000019c70000413d000000000750004c000019690000613d0000000506600210000000000464034f00000000036300190000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f0000000000430435000019690000013d000000400200043d0000001f0340018f0000000504400272000019ec0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000019e40000413d000000000530004c000019fb0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000009b702000041000009b70310009c00000000010280190000000b04000029000009b70340009c00000000020440190000004002200210000000c001100210000000000121019f000009f3011001c7000000080200002926d726c80000040f00000000030100190000006003300270000009b703300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200001a240000613d000000000700001900000005087002100000000b090000290000000009890019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00001a1b0000413d000000000750004c00001a340000613d0000000506600210000000000761034f0000000b0800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000001ab30000613d0000001f01400039000000600110018f0000000b020000290000000001210019000009be0210009c000012320000213d000000400010043f000000200130008c000009b50000413d0000000b010000290000000001010433000000000210004c0000000002000019000000010200c039000000000121004b000002f50000613d000009b50000013d000000400200043d0000001f0340018f000000050440027200001a560000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b00001a4e0000413d000000000530004c00001a650000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000009b702000041000009b70310009c00000000010280190000000b04000029000009b70340009c00000000020440190000004002200210000000c001100210000000000121019f000009f3011001c7000000080200002926d726c80000040f00000000030100190000006003300270000009b703300197000000200430008c000000200400003900000000040340190000001f0540018f000000050640027200001a8e0000613d000000000700001900000005087002100000000b090000290000000009890019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00001a850000413d000000000750004c00001a9e0000613d0000000506600210000000000761034f0000000b0800002900000000066800190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f0003000000010355000000010220019000001ad90000613d0000001f01400039000000600110018f0000000b020000290000000001210019000009be0210009c000012320000213d000000400010043f000000200130008c000009b50000413d0000000b010000290000000001010433000000000210004c0000000002000019000000010200c039000000000121004b000002f50000613d000009b50000013d000000400200043d0000001f0430018f000000050330027200001ac00000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00001ab80000413d000000000540004c00001acf0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000400200043d0000001f0430018f000000050330027200001ae60000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00001ade0000413d000000000540004c00001af50000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d9000104300000001f03100039000009ba04000041000000000523004b00000000050000190000000005044019000009ba06200197000009ba03300197000000000763004b000000000400a019000000000363013f000009ba0330009c00000000030500190000000003046019000000000330004c00001b190000613d0000000203100367000000000303043b000009be0430009c00001b190000213d000000a0543000c900000020011000390000000004410019000000000224004b00001b190000213d0000000002030019000000000001042d0000000001000019000026d90001043000000060061000390000008007000039000000000076043500000040061000390000000000460435000000200410003900000000003404350000000000210435000000000205043300000080031000390000000000230435000000a001100039000000000320004c00001b540000613d000000000300001900000020055000390000000004050433000000007604043400000a0f066001970000000006610436000000000707043300000a0f07700197000000000076043500000040064000390000000006060433000000400710003900000000006704350000006006400039000000000606043300000a0f066001970000006007100039000000000067043500000080064000390000000006060433000000ff0660018f00000080071000390000000000670435000000a0064000390000000006060433000009f907000041000009f8086001980000000007006019000009fa06600197000000000667019f000000a0071000390000000000670435000000c0044000390000000004040433000000000440004c0000000004000019000000010400c039000000c0061000390000000000460435000000e0011000390000000103300039000000000423004b00001b2a0000413d000000000001042d0000004005100039000000600600003900000000006504350000002005100039000000000035043500000000002104350000000002040433000000600310003900000000002304350000008001100039000000000320004c00001b8c0000613d000000000300001900000020044000390000000005040433000000007605043400000a0f066001970000000006610436000000000707043300000a0f07700197000000000076043500000040065000390000000006060433000000400710003900000000006704350000006006500039000000000606043300000a0f066001970000006007100039000000000067043500000080065000390000000006060433000000ff0660018f00000080071000390000000000670435000000a0065000390000000006060433000009f907000041000009f8086001980000000007006019000009fa06600197000000000667019f000000a0071000390000000000670435000000c0055000390000000005050433000000000550004c0000000005000019000000010500c039000000c0061000390000000000560435000000e0011000390000000103300039000000000523004b00001b620000413d000000000001042d000000040110008a000009ba02000041000000bf0310008c00000000030000190000000003022019000009ba01100197000000000410004c0000000002008019000009ba0110009c00000000010300190000000001026019000000000110004c00001bac0000613d00000002060003670000000401600370000000000101043b000009bb0210009c00001bac0000213d0000006402600370000000000402043b000000ff0240008c00001bac0000213d0000002402600370000000000202043b0000004403600370000000000303043b0000008405600370000000000505043b000000a406600370000000000606043b000000000001042d0000000001000019000026d90001043000000000030100190000002001000039000000000113043600000000040204330000000000410435000000400530003900000005014002100000000001150019000000000640004c00001bd60000613d000000400600008a0000000003360049000000200600008a000000000700001900001bc50000013d0000001f09800039000000000969016f0000000008180019000000000008043500000000011900190000000107700039000000000847004b00001bd60000813d000000000813001900000000058504360000002002200039000000000902043300000000080904330000000001810436000000000a80004c00001bbd0000613d000000000a000019000000000b1a0019000000200aa00039000000000c9a0019000000000c0c04330000000000cb0435000000000b8a004b00001bce0000413d00001bbd0000013d000000000001042d00000a160210009c00001bdc0000813d0000006001100039000000400010043f000000000001042d000009c10100004100000000001004350000004101000039000000040010043f000009c201000041000026d900010430000000000401001900000a130120009c00001c150000813d0000003f01200039000000200500008a000000000551016f000000400100043d0000000005510019000000000615004b00000000060000190000000106004039000009be0750009c00001c150000213d000000010660019000001c150000c13d000000400050043f00000000052104360000000006420019000000000336004b00001c1b0000213d0000001f0320018f0000000204400367000000050620027200001c030000613d000000000700001900000005087002100000000009850019000000000884034f000000000808043b00000000008904350000000107700039000000000867004b00001bfb0000413d000000000730004c00001c120000613d0000000506600210000000000464034f00000000066500190000000303300210000000000706043300000000073701cf000000000737022f000000000404043b0000010003300089000000000434022f00000000033401cf000000000373019f000000000036043500000000022500190000000000020435000000000001042d000009c10100004100000000001004350000004101000039000000040010043f000009c201000041000026d9000104300000000001000019000026d900010430000009ec0100004100000000001004390000000001000412000000040010044300000040010000390000002400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ed011001c7000080050200003926d726cd0000040f000000010220019000001c330000613d000000000101043b000009bb011001970000000002000411000000000112004b00001c350000c13d000000000001042d0000000001000019000026d900010430000000400100043d000000440210003900000a17030000410000000000320435000000240210003900000009030000390000000000320435000009e7020000410000000000210435000000040210003900000020030000390000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d900010430000000000110004c00001c4a0000613d000000000001042d000000400100043d000000440210003900000a11030000410000000000320435000000240210003900000013030000390000000000320435000009e7020000410000000000210435000000040210003900000020030000390000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d900010430000000000110004c00001c5f0000613d000000000001042d000000400100043d000000440210003900000a18030000410000000000320435000000240210003900000013030000390000000000320435000009e7020000410000000000210435000000040210003900000020030000390000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d9000104300008000000000002000200000001001d000009e1010000410000000000100439000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009e2011001c70000800b0200003926d726cd0000040f000000020f000029000000010220019000001d960000613d000000000101043b0000004002f000390000000002020433000000000121004b00001de70000213d000000000400041100000000130f0434000100000001001d0000006008f00039000600000008001d00001c910000013d00000000001304350000001f012000390000000001a1016f0000000004000410000000400010043f00000000003f043500000000010804330000000007030433000000630270008c00001c9c0000213d000000400500043d00000001020000290000000002020433000009bb022001970000003b0670008c00001c9e0000213d00001db00000013d0000000002000410000000400500043d000700000007001d00000058075000390000001c06500039000000000876004b00001ca80000813d0000001c0330003900000000380304340000000006860436000000000876004b00001ca40000413d0000003c0300003900000000003504350000001f03600039000000200700008a000000000973016f000000400090043f00000a160390009c00001d900000813d0000006003900039000000400030043f000009bb0340019700000020089000390000000000380435000000000059043500000040069000390000000000060435000009bb0320019800001cbb0000c13d0000000002000410000800000007001d000000000409043300000000530404340000003b0330008c00001d980000a13d00000034034000390000000003030433000000000505043300000048044000390000000007040433000000400400043d000000200a400039000000200b00003900050000000b001d0000000000ba0435000000000a0904330000004009400039000000600b0000390000000000b90435000000a00b40003900000000090a043300000000009b0435000000c00b400039000000000c90004c00001cdc0000613d000000000c000019000000000dbc0019000000200cc00039000000000eac0019000000000e0e04330000000000ed0435000000000d9c004b00001cd50000413d000000000ab9001900000000000a04350000000008080433000009bb08800197000000600a40003900000000008a04350000000006060433000000000660004c0000000006000019000000010600c03900000080084000390000000000680435000000bf06900039000000080a0000290000000006a6016f0000000000640435000000df069000390000000006a6016f0000000009460019000000000669004b00000000060000190000000106004039000009be0890009c00001d900000213d000000010660019000001d900000c13d00000060067002700000006005500270000000400090043f000000a407900039000000c0080000390000000000870435000000000565004b00000000050000190000000105004039000000440690003900000000005604350000002405900039000000000015043500000a0201000041000000000b190436000009bb0120019700000004029000390000000000120435000000840190003900000000000104350000006401900039000000000001043500000000010004140000000005040433000000c4029000390000000000520435000000e406900039000000000250004c00001d1b0000613d000000000200001900000000076200190000002002200039000000000842001900000000080804330000000000870435000000000752004b00001d140000413d000000600230027000000000036500190000000000030435000000040320008c00001d250000c13d0000000103000031000000400130008c0000004004000039000000000403401900001d600000013d00030000000b001d0000001f035000390000000003a3016f000009b704000041000009b70590009c000000000504001900000000050940190000004005500210000000e403300039000009b70630009c00000000030480190000006003300210000000000353019f000009b70510009c0000000001048019000000c001100210000000000113019f000400000009001d26d726c80000040f000000040900002900000000030100190000006003300270000009b703300197000000400430008c00000040040000390000000004034019000000050540027200001d4a0000613d000000000600001900000005076002100000000008790019000000000771034f000000000707043b00000000007804350000000106600039000000000756004b00001d420000413d0000001f06400190000000020f00002900001d5a0000613d0000000505500210000000000751034f00000000055900190000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000100000003001f00030000000103550000000102200190000000080a000029000000030b00002900001dc10000613d0000001f01400039000000e00210018f0000000001920019000000000221004b00000000020000190000000102004039000009be0410009c00001d900000213d000000010220019000001d900000c13d000000400010043f000000400130008c00001d960000413d00000000010b0433000000060800002900000000001804350000000702000029000000640220008c00001d8b0000413d00000000040f04330000000001040433000000270210008c00001daa0000a13d000000280110008c000000400300043d00001d890000613d0000001f0210019000000000050000190000002005006039000000000625019f00000000026300190000000005120019000000000752004b00001c8b0000813d0000000004640019000000280440003900000000460404340000000002620436000000000652004b00001d840000413d00001c8b0000013d000000000103043600001c8e0000013d0000008002f000390000000002020433000000000221004b00001df90000413d000000000001042d000009c10100004100000000001004350000004101000039000000040010043f000009c201000041000026d9000104300000000001000019000026d900010430000000400100043d000000440210003900000a08030000410000000000320435000000240210003900000015030000390000000000320435000009e7020000410000000000210435000000040210003900000020030000390000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d900010430000009c10100004100000000001004350000001101000039000000040010043f000009c201000041000026d900010430000000440150003900000a19020000410000000000210435000000240150003900000011020000390000000000210435000009e7010000410000000000150435000000040150003900000020020000390000000000210435000009b701000041000009b70250009c00000000010540190000004001100210000009e9011001c7000026d900010430000000400200043d0000001f0430018f000000050330027200001dce0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00001dc60000413d000000000540004c00001ddd0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000400100043d000000440210003900000a11030000410000000000320435000000240210003900000013030000390000000000320435000009e7020000410000000000210435000000040210003900000020030000390000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d900010430000000400100043d000000440210003900000a18030000410000000000320435000000240210003900000013030000390000000000320435000009e7020000410000000000210435000000040210003900000005030000290000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d900010430000000000110004c00001e0e0000613d000000000001042d000000400100043d000000440210003900000a0503000041000000000032043500000024021000390000001e030000390000000000320435000009e7020000410000000000210435000000040210003900000020030000390000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d9000104300004000000000002000000000e010019000009bb0120019800001e250000c13d0000000002000410000000004103043400000000650104340000003b0550008c00001ee50000a13d00000034051000390000000005050433000000000606043300000048011000390000000007010433000000400100043d0000002008100039000000200f0000390000000000f8043500000000090304330000004008100039000000600a0000390000000000a80435000000a00a100039000000000809043300000000008a0435000000c00a100039000000000b80004c00001e440000613d000000000b000019000000000cab0019000000200bb00039000000000d9b0019000000000d0d04330000000000dc0435000000000c8b004b00001e3d0000413d0000000009a8001900000000000904350000000004040433000009bb044001970000006009100039000000000049043500000040033000390000000003030433000000000330004c0000000003000019000000010300c03900000080041000390000000000340435000000bf03800039000000200400008a000000000343016f0000000000310435000000df03800039000000000343016f000000000a13001900000000033a004b00000000030000190000000103004039000009be08a0009c00001edf0000213d000000010330019000001edf0000c13d0000006007700270000000600660027000000060035002700000004000a0043f00000a0205000041000000000b5a0436000000a408a000390000000005000414000000c00900003900000000009804350000006408a0003900000001090000390000000000980435000000000667004b000000000600001900000001060040390000004407a0003900000000006704350000002406a000390000000000e60435000009bb022001970000000406a0003900000000002604350000008402a0003900000000000204350000000002010433000000c406a000390000000000260435000000e406a00039000000000720004c00001e860000613d000000000700001900000000086700190000002007700039000000000917001900000000090904330000000000980435000000000827004b00001e7f0000413d00000000016200190000000000010435000000040130008c00001e8f0000c13d0000000103000031000000400130008c0000004004000039000000000403401900001ece0000013d00010000000b001d00030000000f001d00040000000e001d0000001f01200039000000000141016f000009b702000041000009b704a0009c000000000402001900000000040a40190000004004400210000000e401100039000009b70610009c00000000010280190000006001100210000000000141019f000009b70450009c0000000002054019000000c002200210000000000121019f000000000203001900020000000a001d26d726c80000040f000000020a00002900000000030100190000006003300270000009b703300197000000400430008c000000400400003900000000040340190000001f0540018f000000050640027200001eb80000613d0000000007000019000000050870021000000000098a0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00001eb00000413d000000000750004c000000030f00002900001ec80000613d0000000506600210000000000761034f00000000066a00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000000040e000029000000010b00002900001f090000613d0000001f01400039000000e00210018f0000000001a20019000000000221004b00000000020000190000000102004039000009be0410009c00001edf0000213d000000010220019000001edf0000c13d000000400010043f0000003f0230008c00001ef70000a13d00000000020b04330000000002e2004b00001ef90000c13d000000000001042d000009c10100004100000000001004350000004101000039000000040010043f000009c201000041000026d900010430000000400100043d000000440210003900000a08030000410000000000320435000000240210003900000015030000390000000000320435000009e7020000410000000000210435000000040210003900000020030000390000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d9000104300000000001000019000026d900010430000000440210003900000a0503000041000000000032043500000024021000390000001e030000390000000000320435000009e702000041000000000021043500000004021000390000000000f20435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d900010430000000400200043d0000001f0430018f000000050330027200001f160000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b00001f0e0000413d000000000540004c00001f250000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000000110004c00001f320000613d000000000001042d000000400100043d000000440210003900000a1a030000410000000000320435000000240210003900000012030000390000000000320435000009e7020000410000000000210435000000040210003900000020030000390000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d900010430000000000300003100000000041300490000001f0540008a0000000204000367000000000224034f000000000202043b000009ba06000041000000000752004b00000000070000190000000007064019000009ba05500197000009ba08200197000000000958004b000000000600a019000000000558013f000009ba0550009c00000000050700190000000005066019000000000550004c00001f6e0000613d0000000001120019000000000214034f000000000202043b000009be0420009c00001f6e0000213d00000000032300490000002001100039000009ba04000041000000000531004b00000000050000190000000005042019000009ba03300197000009ba06100197000000000736004b0000000004008019000000000336013f000009ba0330009c00000000030500190000000003046019000000000330004c00001f6e0000c13d000000000001042d0000000001000019000026d9000104300009000000000002000300000006001d000400000005001d000000000b030019000000000c02001900000000020100190000000001c0004c0000000001000411000600000001001d000900000004001d00080000000b001d00001f7e0000613d000000400e00043d000020880000013d000700000002001d000009ec0100004100000000001004390000000001000412000000040010044300000020010000390000002400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ed011001c7000080050200003926d726cd0000040f000000080b00002900000009040000290000000102200190000022640000613d000000000201043b000000400d00043d00000a1b0100004100000000001d04350000000601000029000009bb061001970000000403d00039000000000100041400000000006304350000002403d000390000000000030435000009bb05200197000000040250008c00001fa40000c13d0000000103000031000000200130008c000000200a000039000000000a03401900001fdc0000013d000200000006001d000009b702000041000009b70310009c0000000001028019000009b703d0009c00000000020d40190000004002200210000000c001100210000000000121019f000009f3011001c7000500000005001d000000000205001900010000000d001d26d726cd0000040f000000010d00002900000000030100190000006003300270000009b703300197000000200430008c000000200a000039000000000a0340190000001f05a0018f0000000506a0027200001fc50000613d0000000007000019000000050870021000000000098d0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b00001fbd0000413d000000000750004c00001fd40000613d0000000506600210000000000761034f00000000066d00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000000904000029000000080b00002900000005050000290000000206000029000022f00000613d0000001f01a00039000000600110018f000000000cd1001900000000011c004b00000000010000190000000101004039000009be02c0009c000022660000213d0000000101100190000022660000c13d0000004000c0043f000000200130008c000022640000413d00000000010d0433000000000210004c0000000002000019000000010200c039000000000221004b000022640000c13d000000000110004c00001fff0000613d00000a1c0100004100000000001c04350000000402c00039000000000100041400000000006204350000002402c000390000000000020435000000040250008c0000200b0000c13d0000000103000031000000200130008c000000200a000039000000000a0340190000203f0000013d00000a1d0100004100000000001c04350000000402c0003900000000010004140000000000620435000000040250008c0000204a0000c13d0000000103000031000000200130008c000000200a000039000000000a0340190000207e0000013d000009b702000041000009b70310009c0000000001028019000009b703c0009c00000000020c40190000004002200210000000c001100210000000000121019f000009f3011001c7000000000205001900050000000c001d26d726cd0000040f000000050c00002900000000030100190000006003300270000009b703300197000000200430008c000000200a000039000000000a0340190000001f05a0018f0000000506a002720000202a0000613d0000000007000019000000050870021000000000098c0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000020220000413d000000000750004c00000009040000290000203a0000613d0000000506600210000000000761034f00000000066c00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000000080b000029000023160000613d0000001f01a00039000000600110018f000000000ec10019000009be01e0009c000022660000213d0000004000e0043f000000200130008c000022640000413d000000000c0c04330000000702000029000020880000013d000009b702000041000009b70310009c0000000001028019000009b703c0009c00000000020c40190000004002200210000000c001100210000000000121019f000009c2011001c7000000000205001900050000000c001d26d726c80000040f000000050c00002900000000030100190000006003300270000009b703300197000000200430008c000000200a000039000000000a0340190000001f05a0018f0000000506a00272000020690000613d0000000007000019000000050870021000000000098c0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000020610000413d000000000750004c0000000904000029000020790000613d0000000506600210000000000761034f00000000066c00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000000080b0000290000233c0000613d0000001f01a00039000000600110018f000000000ec10019000009be01e0009c000022660000213d0000004000e0043f000000200130008c000022640000413d000000000c0c0433000000070200002900000a1e0100004100000000001e04350000000001000414000009bb0d2001970000000402d0008c00070000000c001d00050000000d001d000020950000c13d0000000103000031000000200130008c000000200a000039000000000a034019000020cb0000013d000009b702000041000009b70310009c0000000001028019000009b703e0009c00000000020e40190000004002200210000000c001100210000000000121019f000009bd011001c700000000020d001900020000000e001d26d726cd0000040f000000020e00002900000000030100190000006003300270000009b703300197000000200430008c000000200a000039000000000a0340190000001f05a0018f0000000506a00272000020b40000613d0000000007000019000000050870021000000000098e0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000020ac0000413d000000000750004c0000000904000029000020c40000613d0000000506600210000000000761034f00000000066e00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f00030000000103550000000102200190000000080b000029000000070c000029000000050d0000290000227e0000613d0000001f01a00039000000600110018f000000000fe1001900000000011f004b00000000010000190000000101004039000009be02f0009c000022660000213d0000000101100190000022660000c13d0000004000f0043f000000200130008c000022640000413d00000000070e0433000009bb0170009c000022640000213d00000a1f0100004100000000001f043500000000010004140000000402d0008c000020e50000c13d0000000103000031000000200130008c000000200a000039000000000a0340190000211d0000013d000200000007001d000009b702000041000009b70310009c0000000001028019000009b703f0009c00000000020f40190000004002200210000000c001100210000000000121019f000009bd011001c700000000020d001900010000000f001d26d726cd0000040f000000010f00002900000000030100190000006003300270000009b703300197000000200430008c000000200a000039000000000a0340190000001f05a0018f0000000506a00272000021050000613d0000000007000019000000050870021000000000098f0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000020fd0000413d000000000750004c000000070c000029000021150000613d0000000506600210000000000761034f00000000066f00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000000904000029000000080b000029000000050d0000290000000207000029000022a40000613d0000001f01a00039000000600110018f0000000001f10019000009be0210009c000022660000213d000000400010043f000000200230008c000022640000413d00000000020f0433000009bb0320009c000022640000213d000009ea0310009c000022660000213d0000008003100039000000400030043f0000000603000029000009bb033001970000006006100039000000000036043500000040031000390000000000d30435000000200510003900000000002504350000000000710435000009bb01700197000000400a00043d0000002002a0003900000000001204350000000001050433000009bb011001970000004002a0003900000000001204350000000001030433000009bb011001970000006002a0003900000000001204350000000001060433000009bb011001970000008002a000390000000000120435000000800100003900000000001a0435000009f501a0009c000022660000213d000000a00ea000390000004000e0043f00000a200100004100000000001e0435000000c402a000390000000001000414000000600300003900000000003204350000010402a000390000000000420435000000a403a000390000000000c304350000012402a00039000000000540004c000021860000613d00000000090000190000000205b00367000000000505043b000000ff0650008c000022640000213d00000000055204360000002006b000390000000206600367000000000606043b000009f807600198000009f9070000410000000007006019000009fa08600197000000000787019f000000000767004b000022640000c13d00000000006504350000004005b000390000000205500367000000000505043b000000000650004c0000000006000019000000010600c039000000000665004b000022640000c13d000000400620003900000000005604350000006005b000390000000205500367000000000505043b00000a0f0650009c000022640000213d000000600620003900000000005604350000008005b000390000000205500367000000000505043b00000a0f0650009c000022640000213d00000080062000390000000000560435000000a00bb00039000000a0022000390000000109900039000000000549004b000021590000413d0000000003320049000000e404a00039000000000034043500000000030a04330000000004320436000000000530004c000021950000613d0000000005000019000000000645001900000020055000390000000007a5001900000000070704330000000000760435000000000635004b0000218e0000413d000000000443001900000000000404350000000404d0008c0000219c0000c13d00000003010003670000000105000031000021bd0000013d0000000002a200490000001f03300039000000200400008a000000000343016f0000000002320019000000800220008a000009b703000041000009b70420009c00000000020380190000006002200210000009b704e0009c000000000403001900000000040e40190000004004400210000000000242019f000009b70410009c0000000001038019000000c001100210000000000112019f00000000020d001900090000000a001d00080000000e001d26d726c80000040f000000080e000029000000090a000029000000070c00002900000000030100190000006003300270000109b70030019d000009b70530019700030000000103550000000102200190000022ca0000613d0000001f0250018f0000000503500272000021c90000613d0000000004000019000000050640021000000000076e0019000000000661034f000000000606043b00000000006704350000000104400039000000000634004b000021c10000413d000000000420004c000021d80000613d0000000503300210000000000131034f00000000033e00190000000302200210000000000403043300000000042401cf000000000424022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000141019f00000000001304350000001f01500039000000200600008a000000000161016f0000000004e10019000000000114004b00000000010000190000000101004039000009be0240009c000022660000213d0000000101100190000022660000c13d000009ba01000041000000600250008c00000000020000190000000002014019000009ba03500197000000000730004c000000000100a019000009ba0330009c000000000102c019000000400040043f000000000110004c000022640000c13d00000000020e0433000000c001a000390000000003010433000000e001a000390000000007010433000009be0170009c000022640000213d0000000001e500190000000005e700190000001f07500039000009ba08000041000000000917004b00000000090000190000000009088019000009ba07700197000009ba0a100197000000000ba7004b00000000080080190000000007a7013f000009ba0770009c00000000070900190000000007086019000000000770004c000022640000c13d0000000057050434000009be0870009c000022660000213d00000005087002100000003f08800039000000000668016f0000000006460019000009be0860009c000022660000213d000000400060043f0000000000740435000000e0767000c90000000006560019000000000716004b000022640000213d000000000765004b0000225c0000813d00000000070400190000000008510049000009ba09000041000000e00a80008c000000000a000019000000000a094019000009ba08800197000000000b80004c000000000900a019000009ba0880009c00000000080a00190000000008096019000000000880004c000022640000c13d000000400800043d00000a210980009c000022660000213d000000e009800039000000400090043f000000009a05043400000a0f0ba0009c000022640000213d000000000aa80436000000000909043300000a0f0b90009c000022640000213d00000000009a04350000004009800039000000400a500039000000000a0a04330000000000a904350000006009500039000000000909043300000a0f0a90009c000022640000213d000000600a80003900000000009a043500000080095000390000000009090433000000ff0a90008c000022640000213d000000800a80003900000000009a0435000000a0095000390000000009090433000009f80a900198000009f90a000041000000000a006019000009fa0b900197000000000aba019f000000000a9a004b000022640000c13d000000a00a80003900000000009a0435000000c0095000390000000009090433000000000a90004c000000000a000019000000010a00c039000000000aa9004b000022640000c13d0000002007700039000000c00a80003900000000009a04350000000000870435000000e005500039000000000865004b000022190000413d0000000401000029000000000112004b0000226c0000413d0000000301000029000000000113004b0000226c0000413d00000000010c0019000000000001042d0000000001000019000026d900010430000009c10100004100000000001004350000004101000039000000040010043f000009c201000041000026d900010430000000400100043d000000440210003900000a22030000410000000000320435000000240210003900000010030000390000000000320435000009e7020000410000000000210435000000040210003900000020030000390000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d900010430000000400200043d0000001f0430018f00000005033002720000228b0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000022830000413d000000000540004c0000229a0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000400200043d0000001f0430018f0000000503300272000022b10000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000022a90000413d000000000540004c000022c00000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000400200043d0000001f0350018f0000000504500272000022d70000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000022cf0000413d000000000530004c000022e60000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000400200043d0000001f0430018f0000000503300272000022fd0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000022f50000413d000000000540004c0000230c0000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000400200043d0000001f0430018f0000000503300272000023230000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000231b0000413d000000000540004c000023320000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000400200043d0000001f0430018f0000000503300272000023490000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000023410000413d000000000540004c000023580000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000000110004c000023650000613d000000000001042d000000400100043d000000440210003900000a23030000410000000000320435000000240210003900000017030000390000000000320435000009e7020000410000000000210435000000040210003900000020030000390000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d900010430000a000000000002000700000008001d000300000007001d000400000006001d000a00000005001d000900000004001d000800000003001d000500000002001d000600000001001d000009e1010000410000000000100439000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009e2011001c70000800b0200003926d726cd0000040f00000009040000290000000a030000290000000102200190000024eb0000613d000000400400043d000000000101043b0000000702000029000000000121004b000024f30000213d00000a240100004100000000001404350000000001000414000200000001001d000009ec010000410000000000100439000000000100041200000004001004430000002001000039000100000001001d0000002400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ed011001c70000800502000039000700000004001d26d726cd0000040f000000070b00002900000001022001900000000a080000290000000909000029000024eb0000613d000000000101043b0000000402b0003900000008030000290000000000320435000009bb02100197000000040120008c000023b80000c13d0000000103000031000000200130008c00000020040000390000000004034019000023ec0000013d000009b7010000410000000204000029000009b70340009c00000000030100190000000003044019000009b704b0009c00000000010b40190000004001100210000000c003300210000000000113019f000009c2011001c726d726cd0000040f000000070b00002900000000030100190000006003300270000009b703300197000000200430008c000000200400003900000000040340190000001f0540018f0000000506400272000023d70000613d0000000007000019000000050870021000000000098b0019000000000881034f000000000808043b00000000008904350000000107700039000000000867004b000023cf0000413d000000000750004c000023e60000613d0000000506600210000000000761034f00000000066b00190000000305500210000000000806043300000000085801cf000000000858022f000000000707043b0000010005500089000000000757022f00000000055701cf000000000585019f0000000000560435000100000003001f000300000001035500000001022001900000000a080000290000000909000029000025240000613d0000001f01400039000000600110018f000000000ab1001900000000011a004b00000000010000190000000101004039000009be02a0009c000024ed0000213d0000000101100190000024ed0000c13d0000004000a0043f000000200130008c000024eb0000413d00000000010b0433000009bb0210009c000024eb0000213d0000000002000411000000000112004b0000004404a000390000002403a000390000000402a00039000025040000c13d0000000501000029000009bb05100198000024070000c13d0000000001000410000009bb0510019700000a2601000041000000000b1a04360000000001000414000000600600003900000000006404350000000804000029000000000043043500000000005204350000006402a0003900000000008204350000008403a000390000000602000029000009bb02200197000000000480004c000024270000613d00000000040000190000000205900367000000000505043b00000a0f0650009c000024eb0000213d000000000553043600000020069000390000000206600367000000000606043b00000a0f0760009c000024eb0000213d0000000000650435000000400990003900000040033000390000000104400039000000000584004b000024170000413d000000040420008c0000242c0000c13d00000003010003670000000104000031000024460000013d0000000003a30049000009b704000041000009b705a0009c000000000504001900000000050a40190000004005500210000009b70630009c00000000030480190000006003300210000000000353019f000009b70510009c0000000001048019000000c001100210000000000113019f000a0000000a001d00090000000b001d26d726c80000040f000000090b0000290000000a0a00002900000000030100190000006003300270000109b70030019d000009b704300197000300000001035500000001022001900000254a0000613d0000001f0240018f0000000503400272000024520000613d0000000005000019000000050650021000000000076a0019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b0000244a0000413d000000000520004c000024610000613d0000000503300210000000000131034f00000000033a00190000000302200210000000000503043300000000052501cf000000000525022f000000000101043b0000010002200089000000000121022f00000000012101cf000000000151019f00000000001304350000001f01400039000000200600008a000000000161016f0000000003a10019000000000113004b00000000010000190000000101004039000009be0230009c000024ed0000213d0000000101100190000024ed0000c13d000009ba01000041000000600240008c00000000020000190000000002014019000009ba05400197000000000750004c000000000100a019000009ba0550009c000000000102c019000000400030043f000000000110004c000024eb0000c13d00000000010a043300000000020b04330000004005a000390000000005050433000009be0750009c000024eb0000213d0000000004a400190000000005a500190000001f07500039000009ba08000041000000000947004b00000000090000190000000009088019000009ba07700197000009ba0a400197000000000ba7004b00000000080080190000000007a7013f000009ba0770009c00000000070900190000000007086019000000000770004c000024eb0000c13d0000000057050434000009be0870009c000024ed0000213d00000005087002100000003f08800039000000000668016f0000000006360019000009be0860009c000024ed0000213d000000400060043f0000000000730435000000e0767000c90000000006560019000000000746004b000024eb0000213d000000000765004b000024e40000813d00000000070300190000000008540049000009ba09000041000000e00a80008c000000000a000019000000000a094019000009ba08800197000000000b80004c000000000900a019000009ba0880009c00000000080a00190000000008096019000000000880004c000024eb0000c13d000000400800043d00000a210980009c000024ed0000213d000000e009800039000000400090043f000000009a05043400000a0f0ba0009c000024eb0000213d000000000aa80436000000000909043300000a0f0b90009c000024eb0000213d00000000009a04350000004009800039000000400a500039000000000a0a04330000000000a904350000006009500039000000000909043300000a0f0a90009c000024eb0000213d000000600a80003900000000009a043500000080095000390000000009090433000000ff0a90008c000024eb0000213d000000800a80003900000000009a0435000000a0095000390000000009090433000009f80a900198000009f90a000041000000000a006019000009fa0b900197000000000aba019f000000000a9a004b000024eb0000c13d000000a00a80003900000000009a0435000000c0095000390000000009090433000000000a90004c000000000a000019000000010a00c039000000000aa9004b000024eb0000c13d0000002007700039000000c00a80003900000000009a04350000000000870435000000e005500039000000000865004b000024a10000413d0000000404000029000000000441004b000025120000413d0000000304000029000000000442004b000025120000413d000000000001042d0000000001000019000026d900010430000009c10100004100000000001004350000004101000039000000040010043f000009c201000041000026d900010430000000440140003900000a11020000410000000000210435000000240140003900000013020000390000000000210435000009e7010000410000000000140435000000040140003900000020020000390000000000210435000009b701000041000009b70240009c00000000010440190000004001100210000009e9011001c7000026d90001043000000a2501000041000000000014043500000001010000390000000000130435000009e70100004100000000001a043500000001010000290000000000120435000009b701000041000009b702a0009c00000000010a40190000004001100210000009e9011001c7000026d900010430000000400100043d000000440210003900000a27030000410000000000320435000000240210003900000012030000390000000000320435000009e7020000410000000000210435000000040210003900000001030000290000000000320435000009b702000041000009b70310009c00000000010280190000004001100210000009e9011001c7000026d900010430000000400200043d0000001f0430018f0000000503300272000025310000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000635004b000025290000413d000000000540004c000025400000613d0000000503300210000000000131034f00000000033200190000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000000400200043d0000001f0340018f0000000504400272000025570000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b0000254f0000413d000000000530004c000025660000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d9000104300000000003120049000009ba040000410000001f0530008c00000000050000190000000005042019000009ba03300197000000000630004c0000000004008019000009ba0330009c00000000030500190000000003046019000000000330004c000025b10000613d0000000003010433000009be0430009c000025b10000213d00000000011300190000001f03100039000009ba04000041000000000523004b00000000050000190000000005048019000009ba03300197000009ba06200197000000000763004b0000000004008019000000000363013f000009ba0330009c00000000030500190000000003046019000000000330004c000025b10000c13d000000004301043400000a130130009c000025b30000813d0000003f01300039000000200500008a000000000551016f000000400100043d0000000005510019000000000615004b00000000060000190000000106004039000009be0750009c000025b30000213d0000000106600190000025b30000c13d000000400050043f00000000053104360000000006340019000000000226004b000025b10000213d000000000230004c000025ae0000613d000000000200001900000000065200190000000007240019000000000707043300000000007604350000002002200039000000000632004b000025a70000413d00000000023500190000000000020435000000000001042d0000000001000019000026d900010430000009c10100004100000000001004350000004101000039000000040010043f000009c201000041000026d90001043000000020030000390000000004310436000000000302043300000000003404350000004001100039000000000430004c000025c80000613d000000000400001900000000051400190000002004400039000000000624001900000000060604330000000000650435000000000534004b000025c10000413d000000000213001900000000000204350000001f02300039000000200300008a000000000232016f0000000001120019000000000001042d0006000000000002000100000006001d000200000005001d000300000004001d000400000003001d000500000002001d000009f0020000410000000000200439000009bb01100197000600000001001d0000000400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ef011001c7000080020200003926d726cd0000040f00000001022001900000261c0000613d000000000101043b000000000110004c0000261c0000613d000000400500043d000000c40150003900000001020000290000000000210435000000a401500039000000020200002900000000002104350000000301000029000000ff0110018f00000084025000390000000000120435000000640150003900000004020000290000000000210435000000440150003900000005020000290000000000210435000000240150003900000000020004100000000000210435000009ff01000041000000000015043500000004015000390000000002000411000000000021043500000000010004140000000602000029000000040320008c000026180000613d000009b704000041000009b70310009c0000000001048019000009b70350009c000000000304001900000000030540190000004003300210000000c001100210000000000131019f00000a00011001c7000600000005001d26d726c80000040f000000060500002900000000030100190000006003300270000109b70030019d000009b70430019700030000000103550000000102200190000026240000613d00000a130150009c0000261e0000813d000000400050043f000000000001042d0000000001000019000026d900010430000009c10100004100000000001004350000004101000039000000040010043f000009c201000041000026d900010430000000400200043d0000001f0340018f0000000504400272000026310000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000026290000413d000000000530004c000026400000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d9000104300006000000000002000100000006001d000200000005001d000300000004001d000400000003001d000500000002001d000009f0020000410000000000200439000009bb01100197000600000001001d0000000400100443000009b7010000410000000002000414000009b70320009c0000000001024019000000c001100210000009ef011001c7000080020200003926d726cd0000040f00000001022001900000269a0000613d000000000101043b000000000110004c0000269a0000613d000000400500043d000000e40150003900000001020000290000000000210435000000c401500039000000020200002900000000002104350000000301000029000000ff0110018f000000a402500039000000000012043500000084015000390000000102000039000000000021043500000064015000390000000402000029000000000021043500000044015000390000000502000029000000000021043500000024015000390000000002000410000000000021043500000a0301000041000000000015043500000004015000390000000002000411000000000021043500000000010004140000000602000029000000040320008c000026960000613d000009b704000041000009b70310009c0000000001048019000009b70350009c000000000304001900000000030540190000004003300210000000c001100210000000000131019f00000a04011001c7000600000005001d26d726c80000040f000000060500002900000000030100190000006003300270000109b70030019d000009b70430019700030000000103550000000102200190000026a20000613d00000a130150009c0000269c0000813d000000400050043f000000000001042d0000000001000019000026d900010430000009c10100004100000000001004350000004101000039000000040010043f000009c201000041000026d900010430000000400200043d0000001f0340018f0000000504400272000026af0000613d000000000500001900000005065002100000000007620019000000000661034f000000000606043b00000000006704350000000105500039000000000645004b000026a70000413d000000000530004c000026be0000613d0000000504400210000000000141034f00000000044200190000000303300210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000009b7010000410000000103000031000009b70430009c0000000003018019000009b70420009c000000000102401900000040011002100000006002300210000000000112019f000026d900010430000026cb002104210000000102000039000000000001042d0000000002000019000000000001042d000026d0002104230000000102000039000000000001042d0000000002000019000000000001042d000026d5002104250000000102000039000000000001042d0000000002000019000000000001042d000026d700000432000026d80001042e000026d9000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff00000000000000df8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffff09218e91000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff000000000000000000000001000000000000000000000000000000000000000000000002000000000000000000000000000001000000010000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000020000020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a4a78f0b00000000000000000000000000000000000000000000000000000000c45a015400000000000000000000000000000000000000000000000000000000df2ab5ba00000000000000000000000000000000000000000000000000000000df2ab5bb00000000000000000000000000000000000000000000000000000000f28c049800000000000000000000000000000000000000000000000000000000f3995c6700000000000000000000000000000000000000000000000000000000c45a015500000000000000000000000000000000000000000000000000000000cc1695c900000000000000000000000000000000000000000000000000000000dc8fd18200000000000000000000000000000000000000000000000000000000ac9650d700000000000000000000000000000000000000000000000000000000ac9650d800000000000000000000000000000000000000000000000000000000c04b8d5900000000000000000000000000000000000000000000000000000000c2e3140a00000000000000000000000000000000000000000000000000000000a4a78f0c00000000000000000000000000000000000000000000000000000000a5dcbcdf000000000000000000000000000000000000000000000000000000003339aad0000000000000000000000000000000000000000000000000000000004aa4a4fb000000000000000000000000000000000000000000000000000000004aa4a4fc0000000000000000000000000000000000000000000000000000000079b28ef300000000000000000000000000000000000000000000000000000000923b8a2a000000000000000000000000000000000000000000000000000000003339aad1000000000000000000000000000000000000000000000000000000004659a4940000000000000000000000000000000000000000000000000000000049404b7c0000000000000000000000000000000000000000000000000000000026b3e1cb0000000000000000000000000000000000000000000000000000000026b3e1cc0000000000000000000000000000000000000000000000000000000027dbbf700000000000000000000000000000000000000000000000000000000029ffb48c0000000000000000000000000000000000000000000000000000000009218e910000000000000000000000000000000000000000000000000000000012210e8a796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000200000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002000000000000000000000000070a08231000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000800000000000000000a9059cbb0000000000000000000000000000000000000000000000000000000008c379a000000000000000000000000000000000000000000000000000000000496e73756666696369656e7420746f6b656e00000000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f578eaca400000000000000000000000000000000000000000000000000000000310ab089e4439a4c15d089f94afb7896ff553aecb10793d0ab882de59d99a32e02000002000000000000000000000000000000440000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f3902000002000000000000000000000000000000240000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b83d0e30db0000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000004400000000000000000000000023b872dd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff5fc697217a0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a40000000000000000000000000000000000000000000000000000000000000000000000000000000080000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff80000000000000000000000000000000000000000000000000000000000000007fffffff71861ede0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c4000000000000000000000000dd62ed3e000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000044000000800000000000000000d505accf0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff9fc51c9029000000000000000000000000000000000000000000000000000000008fcbaf0c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010400000000000000000000000052657175657374656420616d6f756e74206e6f7420617661696c61626c65000053544600000000000000000000000000000000000000000000000000000000005354000000000000000000000000000000000000000000000000000000000000746f416464726573735f6f75744f66426f756e647300000000000000000000004d7573742063616c6c2066726f6d206120466163746f727920506f6f6c000000496e206f72204f757420416d6f756e74206973205a65726f00000000000000002e1a7d4d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffdf0200000000000000000000000000000000000000000000000000000000000000496e73756666696369656e74205745544839000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffc0c5d7fb000000000000000000000000000000000000000000000000000000005472616e73616374696f6e20746f6f206f6c64000000000000000000000000001865c57d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffffffffffe05354450000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffa04e6f742057455448390000000000000000000000000000000000000000000000546f6f206c6974746c6520726563656976656400000000000000000000000000736c6963655f6f75744f66426f756e6473000000000000000000000000000000546f6f206d75636820726571756573746564000000000000000000000000000048fd65fe000000000000000000000000000000000000000000000000000000002f745c59000000000000000000000000000000000000000000000000000000006a627842000000000000000000000000000000000000000000000000000000000fc63d10000000000000000000000000000000000000000000000000000000005f64b55b000000000000000000000000000000000000000000000000000000009d5f20bb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffff1f546f6f206c6974746c65206164646564000000000000000000000000000000006163746976655469636b206e6f7420696e2072616e67650000000000000000006352211e00000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000057c8c7b000000000000000000000000000000000000000000000000000000000546f6f206c6974746c652072656d6f766564000000000000000000000000000004341d764aaa090df4802641a39117cecf05d062e59ab86d930c99a1dc0c23aa
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0x0000000000000000000000002c1a605f843a2e18b7d7772f0ce23c236accf7f50000000000000000000000005aea5775959fbc2557cc8789bc1bf90a239d9a91
-----Decoded View---------------
Arg [0] : _factory (address): 0x2C1a605f843A2E18b7d7772f0Ce23c236acCF7f5
Arg [1] : _WETH9 (address): 0x5AEa5775959fBC2557Cc8789bC1bf90A239D9a91
-----Encoded View---------------
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | 73.48% | $4,009.76 | 0.0468 | $187.81 | |
BASE | 17.08% | $4,006.3 | 0.0109 | $43.65 | |
ARB | 5.98% | $4,009.48 | 0.00381458 | $15.29 | |
SCROLL | 1.27% | $4,004.45 | 0.00081 | $3.24 | |
OP | 1.25% | $4,007.1 | 0.0008 | $3.21 | |
BSC | 0.83% | $721.13 | 0.00295875 | $2.13 | |
LINEA | 0.09% | $4,004.45 | 0.00006 | $0.240267 | |
MOVR | <0.01% | $15.37 | 0.00053 | $0.008144 | |
POL | <0.01% | $0.592559 | 0.01 | $0.005943 |
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.