More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 182 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 19162435 | 286 days ago | IN | 0 ETH | 0.00055143 | ||||
Transfer | 17209864 | 560 days ago | IN | 0 ETH | 0.00474372 | ||||
Transfer | 17209858 | 560 days ago | IN | 0 ETH | 0.00484259 | ||||
Transfer | 17209852 | 560 days ago | IN | 0 ETH | 0.0093997 | ||||
Approve | 17198626 | 562 days ago | IN | 0 ETH | 0.00483304 | ||||
Approve | 16435014 | 669 days ago | IN | 0 ETH | 0.00454977 | ||||
Transfer | 16435000 | 669 days ago | IN | 0 ETH | 0.0061762 | ||||
Set Is Max Exemp... | 16434995 | 669 days ago | IN | 0 ETH | 0.00514803 | ||||
Set Is Fee Exemp... | 16434994 | 669 days ago | IN | 0 ETH | 0.00515086 | ||||
Transfer | 16434984 | 669 days ago | IN | 0 ETH | 0.0031929 | ||||
Approve | 16434982 | 669 days ago | IN | 0 ETH | 0.00334664 | ||||
Approve | 15965514 | 735 days ago | IN | 0 ETH | 0.00059579 | ||||
Approve | 15936036 | 739 days ago | IN | 0 ETH | 0.00237492 | ||||
Approve | 15731115 | 768 days ago | IN | 0 ETH | 0.00068392 | ||||
Approve | 15701219 | 772 days ago | IN | 0 ETH | 0.00026151 | ||||
Approve | 15700419 | 772 days ago | IN | 0 ETH | 0.0003191 | ||||
Approve | 15700041 | 772 days ago | IN | 0 ETH | 0.00031582 | ||||
Transfer | 15699991 | 772 days ago | IN | 0 ETH | 0.00042723 | ||||
Approve | 15696820 | 772 days ago | IN | 0 ETH | 0.00063376 | ||||
Approve | 15691705 | 773 days ago | IN | 0 ETH | 0.00050363 | ||||
Approve | 15674908 | 776 days ago | IN | 0 ETH | 0.00049539 | ||||
Approve | 15674155 | 776 days ago | IN | 0 ETH | 0.00034099 | ||||
Approve | 15668667 | 776 days ago | IN | 0 ETH | 0.00121316 | ||||
Approve | 15657067 | 778 days ago | IN | 0 ETH | 0.00017301 | ||||
Approve | 15651666 | 779 days ago | IN | 0 ETH | 0.00032648 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
16435036 | 669 days ago | 0.0000406 ETH | ||||
16435036 | 669 days ago | 0.00000893 ETH | ||||
16435036 | 669 days ago | 0.00000893 ETH | ||||
16435036 | 669 days ago | 0.00000893 ETH | ||||
16435036 | 669 days ago | 0.00000893 ETH | ||||
16435036 | 669 days ago | 0.00000893 ETH | ||||
16435036 | 669 days ago | 0.00000893 ETH | ||||
16435036 | 669 days ago | 0.00001766 ETH | ||||
16435036 | 669 days ago | 0.00001766 ETH | ||||
16435036 | 669 days ago | 0.00001766 ETH | ||||
16435036 | 669 days ago | 0.00003552 ETH | ||||
16435036 | 669 days ago | 0.00203007 ETH | ||||
16163989 | 707 days ago | 0.00006867 ETH | ||||
16163989 | 707 days ago | 0.0000151 ETH | ||||
16163989 | 707 days ago | 0.0000151 ETH | ||||
16163989 | 707 days ago | 0.0000151 ETH | ||||
16163989 | 707 days ago | 0.0000151 ETH | ||||
16163989 | 707 days ago | 0.0000151 ETH | ||||
16163989 | 707 days ago | 0.0000151 ETH | ||||
16163989 | 707 days ago | 0.00002987 ETH | ||||
16163989 | 707 days ago | 0.00002987 ETH | ||||
16163989 | 707 days ago | 0.00002987 ETH | ||||
16163989 | 707 days ago | 0.00006008 ETH | ||||
16163989 | 707 days ago | 0.00343356 ETH | ||||
16121188 | 713 days ago | 0.00023164 ETH |
Loading...
Loading
Contract Name:
MERGEPOOL
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-23 */ /* Website: https://mergepool.io Telegram: https://t.me/MERGEPOOL Medium: https://medium.com/@mergepool/intro-to-mergepool-73184a2c6414 Twitter: https://twitter.com/mergepool_eth */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.13; interface INetwork { function increaseShare(address _shareholder, uint256 _unlocks) external; function decreaseShare(address _shareholder) external; function deposit() external payable; function distributeDividend(address _shareholder) external; } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } library Types { struct FeeRecipients { address operations; address validatorAcquisition; address PCR; address yield; address xChainValidatorAcquisition; address indexFundPools; address sBANKRewardsPool; address OTCSwap; address rescueFund; address protocolImprovement; address developers; } struct Fees { uint16 operations; uint16 validatorAcquisition; uint16 PCR; uint16 yield; uint16 xChainValidatorAcquisition; uint16 indexFundPools; uint16 sBANKRewardsPool; uint16 OTCSwap; uint16 rescueFund; uint16 protocolImprovement; uint16 developers; } struct Share { uint256 amount; uint256 totalExcluded; uint256 totalRealised; uint256 started; uint256 unlocks; } enum MergedProduct { None, OneYear, ThreeYears, FiveYears } struct MergeNode { MergedProduct mergedProduct; address minter; uint256 created; uint256 expires; uint256 numClaims; uint256 lastClaimed; uint256 merged; uint256 unlocks; uint256 lastMergedClaimed; } struct MergePoolFeeRecipients { address operations; address validatorAcquisition; address developers; } } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom(address from, address to, uint256 value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns (uint256 amountToken, uint256 amountETH, uint256 liquidity); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; } 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); } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IMergePool is IERC20 { function burnForMergeNode(address _burnee, uint256 _amount) external returns (bool); } contract MergedPool is INetwork, Ownable { address immutable token; uint256 immutable duration; address[] shareholders; mapping(address => uint256) shareholderIndexes; mapping(address => uint256) shareholderClaims; mapping(address => uint256) public totalRewardsToUser; mapping(address => Types.Share) public shares; uint256 public totalShares; uint256 public totalDividends; uint256 public totalDistributed; uint256 public dividendsPerShare; uint256 public dividendsPerShareAccuracyFactor = 10**36; modifier onlyToken() { require(msg.sender == token); _; } constructor(address _owner, uint256 _duration) { _transferOwnership(_owner); token = msg.sender; duration = _duration; } function increaseShare(address _shareholder, uint256 _unlocks) external override onlyToken { if (shares[_shareholder].amount == 0) { addShareholder(_shareholder); } totalShares++; shares[_shareholder].amount++; shares[_shareholder].unlocks = _unlocks; shares[_shareholder].started = block.timestamp; shares[_shareholder].totalExcluded = getCumulativeDividends( shares[_shareholder].amount, shares[_shareholder].started, shares[_shareholder].unlocks ); assert(shares[_shareholder].totalExcluded == 0); } function decreaseShare(address _shareholder) external override onlyToken { if (shares[_shareholder].amount == 1) { removeShareholder(_shareholder); } totalShares--; shares[_shareholder].totalExcluded = getCumulativeDividends( shares[_shareholder].amount, shares[_shareholder].started, shares[_shareholder].started ); shares[_shareholder].amount--; shares[_shareholder].started = 0; shares[_shareholder].unlocks = 0; } function deposit() external payable override onlyOwner { uint256 amount = msg.value; totalDividends += amount; dividendsPerShare += (dividendsPerShareAccuracyFactor * amount) / totalShares; } function distributeDividend(address _shareholder) external onlyToken { uint256 amount = getPendingDividend(_shareholder); if (amount > 0) { shares[_shareholder].totalExcluded = getCumulativeDividends( shares[_shareholder].amount, shares[_shareholder].started, shares[_shareholder].unlocks ); shares[_shareholder].totalRealised += amount; totalDistributed += amount; (bool success, ) = _shareholder.call{value: amount}(""); require(success, "Could not send ETH"); totalRewardsToUser[_shareholder] = totalRewardsToUser[_shareholder] + amount; } } function getPendingDividend(address _shareholder) public view returns (uint256) { if (shares[_shareholder].amount == 0) { return 0; } uint256 shareholderTotalDividends = getCumulativeDividends( shares[_shareholder].amount, shares[_shareholder].started, shares[_shareholder].unlocks ); uint256 shareholderTotalExcluded = shares[_shareholder].totalExcluded; if (shareholderTotalDividends <= shareholderTotalExcluded) { return 0; } return shareholderTotalDividends - shareholderTotalExcluded; } function getCumulativeDividends( uint256 share, uint256 started, uint256 unlocks ) internal view returns (uint256) { if (unlocks > block.timestamp) { unlocks = block.timestamp; } uint256 total = (share * dividendsPerShare) / dividendsPerShareAccuracyFactor; uint256 end = started + duration; uint256 endAbs = end - started; uint256 nowAbs = unlocks - started; return (total * nowAbs) / endAbs; } function addShareholder(address shareholder) internal { shareholderIndexes[shareholder] = shareholders.length; shareholders.push(shareholder); } function removeShareholder(address shareholder) internal { shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length - 1]; shareholderIndexes[shareholders[shareholders.length - 1]] = shareholderIndexes[shareholder]; shareholders.pop(); } function withdrawETH(address _recipient) external onlyOwner { (bool success, ) = _recipient.call{value: address(this).balance}(""); require(success, "Could not send ETH"); } function withdrawToken(IERC20 _token, address _recipient) external onlyOwner { _token.transfer(_recipient, _token.balanceOf(address(this))); } } contract MergePoolNode is Ownable, ReentrancyGuard { uint16 public maxMonths = 6; uint16 public maxNodesPerMinter = 96; uint256 public gracePeriod = 30 days; uint256 public gammaPeriod = 72 days; uint256 public mergedWaitPeriod = 90 days; uint256 public totalMergeNodes = 0; mapping(uint256 => Types.MergeNode) public mergenodes; mapping(address => uint256) public balanceOf; mapping(address => mapping(uint256 => uint256)) public ownedMergeNodes; mapping(uint256 => uint256) public ownedMergeNodesIndex; mapping(Types.MergedProduct => uint256) public mergedLockDurations; mapping(Types.MergedProduct => MergedPool) public mergedPools; mapping(Types.MergedProduct => uint256) public boosts; uint256 public creationFee = 0; uint256 public renewalFee = 0.006 ether; uint256 public mergedFee = 0.007 ether; uint256 public mintPrice = 80e18; uint256[20] public rates = [ 700000000000, 595000000000, 505750000000, 429887500000, 365404375000, 310593718750, 264004660937, 224403961797, 190743367527, 162131862398, 137812083039, 117140270583, 99569229995, 84633845496, 71938768672, 61147953371, 51975760365, 44179396311, 37552486864, 31919613834 ]; IMergePool public immutable mergepool; IUniswapV2Router02 public immutable router; IERC20 public immutable USDC; Types.MergePoolFeeRecipients public feeRecipients; uint16 public claimFee = 600; // Basis for above fee values uint16 public constant bps = 10_000; constructor( IMergePool _mergepool, IUniswapV2Router02 _router, IERC20 _usdc, address _owner ) { transferOwnership(_owner); mergepool = _mergepool; router = _router; USDC = _usdc; feeRecipients = Types.MergePoolFeeRecipients( 0x0BC88F44498e4ae2F921C08b51b37ED0796c3d35, 0x86fe4d39B585bE32CDd892754234d95e18f3E3C0, 0xEE355B7D88907aAbb60599ACcf04934EbC998457 ); mergedLockDurations[Types.MergedProduct.OneYear] = 365 days; mergedLockDurations[Types.MergedProduct.ThreeYears] = 365 days * 3; mergedLockDurations[Types.MergedProduct.FiveYears] = 365 days * 5; mergedPools[Types.MergedProduct.OneYear] = new MergedPool(_owner, 365 days); mergedPools[Types.MergedProduct.ThreeYears] = new MergedPool(_owner, 365 days * 3); mergedPools[Types.MergedProduct.FiveYears] = new MergedPool(_owner, 365 days * 5); boosts[Types.MergedProduct.OneYear] = 8e18; boosts[Types.MergedProduct.ThreeYears] = 50e18; boosts[Types.MergedProduct.FiveYears] = 150e18; } function createNode(uint256 _months) external payable nonReentrant returns (uint256) { require(msg.value == getRenewalFeeForMonths(_months) + creationFee, "Invalid Ether value provided"); return _createNode(_months); } function createNodeBatch(uint256 _amount, uint256 _months) external payable nonReentrant returns (uint256[] memory ids) { require(msg.value == (getRenewalFeeForMonths(_months) + creationFee) * _amount, "Invalid Ether value provided"); ids = new uint256[](_amount); for (uint256 i = 0; i < _amount; ) { ids[i] = _createNode(_months); unchecked { ++i; } } return ids; } function _createNode(uint256 _months) internal returns (uint256) { require(balanceOf[msg.sender] < maxNodesPerMinter, "Too many mergenodes"); require(_months > 0 && _months <= maxMonths, "Must be 1-6 months"); require(mergepool.burnForMergeNode(msg.sender, mintPrice), "Not able to burn"); (bool success, ) = feeRecipients.validatorAcquisition.call{ value: getRenewalFeeForMonths(_months) + creationFee }(""); require(success, "Could not send ETH"); uint256 id; uint256 length; unchecked { id = totalMergeNodes++; length = balanceOf[msg.sender]++; } mergenodes[id] = Types.MergeNode( Types.MergedProduct.None, msg.sender, block.timestamp, block.timestamp + 30 days * _months, 0, 0, 0, 0, 0 ); ownedMergeNodes[msg.sender][length] = id; ownedMergeNodesIndex[id] = length; return id; } function renewNode(uint256 _id, uint256 _months) external payable nonReentrant { require(msg.value == getRenewalFeeForMonths(_months), "Invalid Ether value provided"); _renewNode(_id, _months); } function renewNodeBatch(uint256[] calldata _ids, uint256 _months) external payable nonReentrant { uint256 length = _ids.length; require(msg.value == (getRenewalFeeForMonths(_months)) * length, "Invalid Ether value provided"); for (uint256 i = 0; i < length; ) { _renewNode(_ids[i], _months); unchecked { ++i; } } } function _renewNode(uint256 _id, uint256 _months) internal { Types.MergeNode storage mergenode = mergenodes[_id]; require(mergenode.minter == msg.sender, "Invalid ownership"); require(mergenode.expires + gracePeriod >= block.timestamp, "Grace period expired"); uint256 monthsLeft = 0; if (block.timestamp > mergenode.expires) { monthsLeft = (block.timestamp - mergenode.created) / 30 days; } require(_months + monthsLeft <= maxMonths, "Too many months"); (bool success, ) = feeRecipients.validatorAcquisition.call{value: getRenewalFeeForMonths(_months)}(""); require(success, "Could not send ETH"); mergenode.expires += 30 days * _months; } function mergedNode(uint256 _id, Types.MergedProduct mergedProduct) external payable nonReentrant { Types.MergeNode storage mergenode = mergenodes[_id]; require(mergenode.minter == msg.sender, "Invalid ownership"); require(mergenode.mergedProduct == Types.MergedProduct.None, "Already merged"); require(mergenode.expires > block.timestamp, "Node expired"); require(msg.value == mergedFee, "Invalid Ether value provided"); (bool success, ) = feeRecipients.validatorAcquisition.call{value: msg.value}(""); require(success, "Could not send ETH"); INetwork network = mergedPools[mergedProduct]; network.increaseShare(msg.sender, block.timestamp + mergedLockDurations[mergedProduct]); mergenode.mergedProduct = mergedProduct; mergenode.merged = block.timestamp; mergenode.unlocks = block.timestamp + mergedLockDurations[mergedProduct]; } function claimMERGE(uint256 _id) external nonReentrant { _claimMERGE(_id); } function claimMERGEBatch(uint256[] calldata _ids) external nonReentrant { uint256 length = _ids.length; for (uint256 i = 0; i < length; ) { _claimMERGE(_ids[i]); unchecked { ++i; } } } function _claimMERGE(uint256 _id) internal { Types.MergeNode storage mergenode = mergenodes[_id]; require(mergenode.minter == msg.sender, "Invalid ownership"); require(mergenode.mergedProduct == Types.MergedProduct.None, "Must be unmerged"); require(mergenode.expires > block.timestamp, "Node expired"); uint256 amount = getPendingMERGE(_id); amount = takeClaimFee(amount); mergepool.transfer(msg.sender, amount); mergenode.numClaims++; mergenode.lastClaimed = block.timestamp; } function claimETH(uint256 _id) external nonReentrant { _claimETH(_id); } function claimETHBatch(uint256[] calldata _ids) external nonReentrant { uint256 length = _ids.length; for (uint256 i = 0; i < length; ) { _claimETH(_ids[i]); unchecked { ++i; } } } function _claimETH(uint256 _id) internal { Types.MergeNode storage mergenode = mergenodes[_id]; require(mergenode.minter == msg.sender, "Invalid ownership"); require(mergenode.mergedProduct != Types.MergedProduct.None, "Must be merged"); require(mergenode.expires > block.timestamp, "Node expired"); require(block.timestamp - mergenode.merged > mergedWaitPeriod, "Cannot claim ETH yet"); mergedPools[mergenode.mergedProduct].distributeDividend(msg.sender); if (mergenode.unlocks <= block.timestamp) { require(mergepool.transfer(msg.sender, boosts[mergenode.mergedProduct])); mergedPools[mergenode.mergedProduct].decreaseShare(mergenode.minter); mergenode.mergedProduct = Types.MergedProduct.None; mergenode.merged = 0; mergenode.unlocks = 0; } } function getPendingMERGE(uint256 _id) public view returns (uint256) { Types.MergeNode memory mergenode = mergenodes[_id]; uint256 rate = mergenode.numClaims >= rates.length ? rates[rates.length - 1] : rates[mergenode.numClaims]; uint256 amount = (block.timestamp - (mergenode.numClaims > 0 ? mergenode.lastClaimed : mergenode.created)) * (rate); if (mergenode.created < block.timestamp + gammaPeriod) { uint256 _seconds = (block.timestamp + gammaPeriod) - mergenode.created; uint256 _percent = 100; if (_seconds >= 4838400) { _percent = 900; } else if (_seconds >= 4233600) { _percent = 800; } else if (_seconds >= 3628800) { _percent = 700; } else if (_seconds >= 3024000) { _percent = 600; } else if (_seconds >= 2419200) { _percent = 500; } else if (_seconds >= 1814400) { _percent = 400; } else if (_seconds >= 1209600) { _percent = 300; } else if (_seconds >= 604800) { _percent = 200; } uint256 _divisor = amount * _percent; (, uint256 result) = tryDiv(_divisor, 10000); amount -= result; } return amount; } function takeClaimFee(uint256 amount) internal returns (uint256) { uint256 fee = (amount * claimFee) / bps; address[] memory path = new address[](2); path[0] = address(mergepool); path[1] = address(USDC); router.swapExactTokensForTokensSupportingFeeOnTransferTokens(fee, 0, path, address(this), block.timestamp); uint256 usdcToSend = USDC.balanceOf(address(this)) / 2; USDC.transfer(feeRecipients.operations, usdcToSend); USDC.transfer(feeRecipients.developers, usdcToSend); return amount - fee; } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) { return (false, 0); } return (true, a / b); } } function getRenewalFeeForMonths(uint256 _months) public view returns (uint256) { return renewalFee * _months; } function airdropmergenodes( address[] calldata _users, uint256[] calldata _months, Types.MergedProduct[] calldata _mergedProducts ) external onlyOwner returns (uint256[] memory ids) { require(_users.length == _months.length && _months.length == _mergedProducts.length, "Lengths not aligned"); uint256 length = _users.length; ids = new uint256[](length); for (uint256 i = 0; i < length; ) { ids[i] = _airdropNode(_users[i], _months[i], _mergedProducts[i]); unchecked { ++i; } } return ids; } function _airdropNode( address _user, uint256 _months, Types.MergedProduct _mergedProduct ) internal returns (uint256) { require(_months <= maxMonths, "Too many months"); uint256 id; uint256 length; unchecked { id = totalMergeNodes++; length = balanceOf[_user]++; } uint256 merged; uint256 unlocks; if (_mergedProduct != Types.MergedProduct.None) { merged = block.timestamp; unlocks = block.timestamp + mergedLockDurations[_mergedProduct]; } mergenodes[id] = Types.MergeNode( _mergedProduct, _user, block.timestamp, block.timestamp + 30 days * _months, 0, 0, merged, unlocks, 0 ); ownedMergeNodes[_user][length] = id; ownedMergeNodesIndex[id] = length; return id; } function removeNode(uint256 _id) external onlyOwner { uint256 lastNodeIndex = balanceOf[mergenodes[_id].minter]; uint256 mergenodeIndex = ownedMergeNodesIndex[_id]; if (mergenodeIndex != lastNodeIndex) { uint256 lastNodeId = ownedMergeNodes[mergenodes[_id].minter][lastNodeIndex]; ownedMergeNodes[mergenodes[_id].minter][mergenodeIndex] = lastNodeId; // Move the last mergenode to the slot of the to-delete token ownedMergeNodesIndex[lastNodeId] = mergenodeIndex; // Update the moved mergenode's index } // This also deletes the contents at the last position of the array delete ownedMergeNodesIndex[_id]; delete ownedMergeNodes[mergenodes[_id].minter][lastNodeIndex]; balanceOf[mergenodes[_id].minter]--; totalMergeNodes--; delete mergenodes[_id]; } function setRates(uint256[] calldata _rates) external onlyOwner { require(_rates.length == rates.length, "Invalid length"); uint256 length = _rates.length; for (uint256 i = 0; i < length; ) { rates[i] = _rates[i]; unchecked { ++i; } } } function setMintPrice(uint256 _mintPrice) external onlyOwner { mintPrice = _mintPrice; } function setMaxMonths(uint16 _maxMonths) external onlyOwner { maxMonths = _maxMonths; } function setFees( uint256 _creationFee, uint256 _renewalFee, uint256 _mergedFee, uint16 _claimFee ) external onlyOwner { creationFee = _creationFee; renewalFee = _renewalFee; mergedFee = _mergedFee; claimFee = _claimFee; } function setMergedLockDurations(Types.MergedProduct _mergedProduct, uint256 _duration) external onlyOwner { mergedLockDurations[_mergedProduct] = _duration; } function setMergedPool(Types.MergedProduct _mergedProduct, MergedPool _mergedPool) external onlyOwner { mergedPools[_mergedProduct] = _mergedPool; } function setBoosts(Types.MergedProduct _mergedProduct, uint256 _boost) external onlyOwner { boosts[_mergedProduct] = _boost; } function setFeeRecipients(Types.MergePoolFeeRecipients calldata _feeRecipients) external onlyOwner { feeRecipients = _feeRecipients; } function setPeriods( uint256 _gracePeriod, uint256 _gammaPeriod, uint256 _mergedWaitPeriod ) external onlyOwner { gracePeriod = _gracePeriod; gammaPeriod = _gammaPeriod; mergedWaitPeriod = _mergedWaitPeriod; } function approveRouter() external onlyOwner { mergepool.approve(address(router), type(uint256).max); } function withdrawETH(address _recipient) external onlyOwner { (bool success, ) = _recipient.call{value: address(this).balance}(""); require(success, "Could not send ETH"); } function withdrawToken(IERC20 _token, address _recipient) external onlyOwner { _token.transfer(_recipient, _token.balanceOf(address(this))); } receive() external payable {} } contract MERGEPOOL is IERC20, IMergePool, Ownable { string public constant name = "MergePool"; string public constant symbol = "MPOOL"; uint8 public constant decimals = 18; uint256 public totalSupply = 500_000e18; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; IERC20 public immutable WETH; IERC20 public immutable USDC; IUniswapV2Router02 public immutable router; address public immutable pair; MergePoolNode public mergeNode; address private mergeNodeAddress; uint256 public maxWallet = 5000e18; mapping(address => bool) public isDisabledExempt; mapping(address => bool) public isFeeExempt; mapping(address => bool) public isMaxExempt; mapping(address => bool) public isUniswapPair; mapping(address => bool) public MEVShareHolders; // Fees are charged on swaps Types.FeeRecipients public feeRecipients; Types.Fees public fees; uint16 public feeTotal = 900; // Taxes are charged on transfers and burned uint16 public tax = 100; // Basis for all fee and tax values uint16 public constant bps = 10_000; bool public contractSellEnabled = true; uint256 public contractSellThreshold = 65e18; uint256 public minSwapAmountToTriggerContractSell = 0; bool public mintingEnabled = true; bool public burningEnabled = true; bool public tradingEnabled = false; bool public MEVShareEnabled = false; bool public MEVRepelEnabled = false; address public MEVRepelToken = address(0xE7DE43Cd09b9e50eBC5FCC4F3c9ec563Bae25BD9); uint256 mevrepelMinAmount = 500_000e18; bool public isContractSelling = false; modifier contractSelling() { isContractSelling = true; _; isContractSelling = false; } constructor( address _router, address _usdc, address _safeBank ) { router = IUniswapV2Router02(_router); USDC = IERC20(_usdc); pair = IUniswapV2Factory(router.factory()).createPair(address(USDC), address(this)); WETH = IERC20(router.WETH()); mergeNode = new MergePoolNode(this, router, USDC, msg.sender); mergeNodeAddress = address(mergeNode); isDisabledExempt[msg.sender] = true; isFeeExempt[msg.sender] = true; isMaxExempt[msg.sender] = true; isDisabledExempt[mergeNodeAddress] = true; isFeeExempt[mergeNodeAddress] = true; isMaxExempt[mergeNodeAddress] = true; isDisabledExempt[address(0)] = true; isFeeExempt[address(0)] = true; isMaxExempt[address(0)] = true; isMaxExempt[address(this)] = true; isUniswapPair[pair] = true; allowance[address(this)][address(router)] = type(uint256).max; feeRecipients = Types.FeeRecipients( 0x0BC88F44498e4ae2F921C08b51b37ED0796c3d35, 0x86fe4d39B585bE32CDd892754234d95e18f3E3C0, 0xEE355B7D88907aAbb60599ACcf04934EbC998457, 0x3ce3dcce5c80e9BCEf19F006491baa95583F515B, 0x794c5e426E10AFEE4Dd04a4109B70Ed4975474ed, 0x70D3Fa66b6230661Ed0aefCBAd25B92D900d3B75, _safeBank, 0xaC41293f2a51DED456D65075D192aa9469d93c40, 0x7F2E797e3EfbCfBB6Bea40bba10348867CfB2551, 0x1408f1011566BdF90c7A74c748bd34D8237eC9aE, 0xCF94Eb523d9AaEDc3bB58126D762F389af604499 ); fees = Types.Fees(175, 87, 87, 87, 44, 44, 44, 44, 44, 44, 200); uint256 toEmissions = 160_661e18; uint256 toDeployer = totalSupply - toEmissions; balanceOf[msg.sender] = toDeployer; emit Transfer(address(0), msg.sender, toDeployer); balanceOf[mergeNodeAddress] = toEmissions; emit Transfer(address(0), mergeNodeAddress, toEmissions); } function mint(uint256 _amount) external onlyOwner { require(mintingEnabled, "Minting is disabled"); totalSupply += _amount; unchecked { balanceOf[msg.sender] += _amount; } emit Transfer(address(0), msg.sender, _amount); } function burn(address _burnee, uint256 _amount) external onlyOwner returns (bool) { require(burningEnabled, "Burning is disabled"); require(balanceOf[_burnee] >= _amount, "Cannot burn more than an account has"); totalSupply -= _amount; balanceOf[_burnee] -= _amount; emit Transfer(_burnee, address(0), _amount); return true; } function burnForMergeNode(address _burnee, uint256 _amount) external returns (bool) { require(msg.sender == address(mergeNode), "Only the Merge Node contract can burn"); require(balanceOf[_burnee] >= _amount, "Cannot burn more than an account has"); uint256 allowed = allowance[_burnee][msg.sender]; if (allowed != type(uint256).max) { allowance[_burnee][msg.sender] = allowed - _amount; } totalSupply -= _amount; balanceOf[_burnee] -= _amount; emit Transfer(_burnee, address(0), _amount); return true; } function approve(address _spender, uint256 _amount) public override returns (bool) { allowance[msg.sender][_spender] = _amount; emit Approval(msg.sender, _spender, _amount); return true; } function transfer(address _recipient, uint256 _amount) external override returns (bool) { return _transferFrom(msg.sender, _recipient, _amount); } function checkMEVRepelBalance(address _account) internal view returns (uint) { IERC20 mevrepeltoken = IERC20(MEVRepelToken); return mevrepeltoken.balanceOf(_account); } function addtoMEVShareHolders (address[] calldata _mevshareholders) external onlyOwner { for (uint256 i = 0; i < _mevshareholders.length; ) { MEVShareHolders[_mevshareholders[i]] = true; ++i; } } function transferFrom( address _sender, address _recipient, uint256 _amount ) external override returns (bool) { uint256 allowed = allowance[_sender][msg.sender]; if (allowed != type(uint256).max) { allowance[_sender][msg.sender] = allowed - _amount; } return _transferFrom(_sender, _recipient, _amount); } function _transferFrom( address _sender, address _recipient, uint256 _amount ) private returns (bool) { if (isContractSelling) { return _simpleTransfer(_sender, _recipient, _amount); } bool okToTrade = false; if (!tradingEnabled && !isDisabledExempt[_recipient]) { //added to allow mevshare holders to be able to buy early if (MEVShareEnabled) { if (MEVShareHolders[_recipient] == true) { okToTrade = true; } } if (MEVRepelEnabled) { //added to allow mevrepel holders to be able to buy early if (checkMEVRepelBalance(_recipient) > mevrepelMinAmount) { okToTrade = true; } } } else { okToTrade = true; } require(okToTrade || isDisabledExempt[_sender], "Trading is currently disabled"); bool sell = isUniswapPair[_recipient] || _recipient == address(router); if (!sell && !isMaxExempt[_recipient]) { require((balanceOf[_recipient] + _amount) <= maxWallet, "Max wallet has been triggered"); } if ( sell && _amount >= minSwapAmountToTriggerContractSell && !isUniswapPair[msg.sender] && !isContractSelling && contractSellEnabled && balanceOf[address(this)] >= contractSellThreshold ) { _contractSell(); } balanceOf[_sender] -= _amount; uint256 amountAfter = _amount; if ( ((isUniswapPair[_sender] || _sender == address(router)) || (isUniswapPair[_recipient] || _recipient == address(router))) ? !isFeeExempt[_sender] && !isFeeExempt[_recipient] : false ) { amountAfter = _collectFee(_sender, _amount); } else if (!isFeeExempt[_sender] && !isFeeExempt[_recipient]) { amountAfter = _collectTax(_sender, _amount); } unchecked { balanceOf[_recipient] += amountAfter; } emit Transfer(_sender, _recipient, amountAfter); return true; } function _simpleTransfer( address _sender, address _recipient, uint256 _amount ) private returns (bool) { balanceOf[_sender] -= _amount; unchecked { balanceOf[_recipient] += _amount; } return true; } function _contractSell() private contractSelling { uint256 ethBefore = address(this).balance; address[] memory path = new address[](3); path[0] = address(this); path[1] = address(USDC); path[2] = address(WETH); router.swapExactTokensForETHSupportingFeeOnTransferTokens( balanceOf[address(this)], 0, path, address(this), block.timestamp ); uint256 ethAfter = address(this).balance - ethBefore; if (ethAfter > bps) { bool success; (success, ) = feeRecipients.operations.call{value: (ethAfter * fees.operations) / bps}(""); require(success, "Could not send ETH"); (success, ) = feeRecipients.validatorAcquisition.call{value: (ethAfter * fees.validatorAcquisition) / bps}( "" ); require(success, "Could not send ETH"); (success, ) = feeRecipients.PCR.call{value: (ethAfter * fees.PCR) / bps}(""); require(success, "Could not send ETH"); (success, ) = feeRecipients.yield.call{value: (ethAfter * fees.yield) / bps}(""); require(success, "Could not send ETH"); (success, ) = feeRecipients.xChainValidatorAcquisition.call{ value: (ethAfter * fees.xChainValidatorAcquisition) / bps }(""); require(success, "Could not send ETH"); (success, ) = feeRecipients.indexFundPools.call{value: (ethAfter * fees.indexFundPools) / bps}(""); require(success, "Could not send ETH"); (success, ) = feeRecipients.sBANKRewardsPool.call{value: (ethAfter * fees.sBANKRewardsPool) / bps}(""); require(success, "Could not send ETH"); (success, ) = feeRecipients.OTCSwap.call{value: (ethAfter * fees.OTCSwap) / bps}(""); require(success, "Could not send ETH"); (success, ) = feeRecipients.rescueFund.call{value: (ethAfter * fees.rescueFund) / bps}(""); require(success, "Could not send ETH"); (success, ) = feeRecipients.protocolImprovement.call{value: (ethAfter * fees.protocolImprovement) / bps}( "" ); require(success, "Could not send ETH"); (success, ) = feeRecipients.developers.call{value: (ethAfter * fees.developers) / bps}(""); require(success, "Could not send ETH"); } } function _collectFee(address _sender, uint256 _amount) private returns (uint256) { uint256 feeAmount = (_amount * feeTotal) / bps; unchecked { balanceOf[address(this)] += feeAmount; } emit Transfer(_sender, address(this), feeAmount); return _amount - feeAmount; } function _collectTax(address _sender, uint256 _amount) private returns (uint256) { uint256 taxAmount = (_amount * tax) / bps; totalSupply -= taxAmount; emit Transfer(_sender, address(0), _amount); return _amount - taxAmount; } function setMaxWallet(uint256 _maxWallet) external onlyOwner { maxWallet = _maxWallet; } function setIsDisabledExempt(address _holder, bool _exempt) external onlyOwner { isDisabledExempt[_holder] = _exempt; } function setIsFeeExempt(address _holder, bool _exempt) external onlyOwner { isFeeExempt[_holder] = _exempt; } function setIsMaxExempt(address _holder, bool _exempt) external onlyOwner { isMaxExempt[_holder] = _exempt; } function setIsUniswapPair(address _pair, bool _isPair) external onlyOwner { isUniswapPair[_pair] = _isPair; } function setContractSelling( bool _contractSellEnabled, uint256 _contractSellThreshold, uint256 _minSwapAmountToTriggerContractSell ) external onlyOwner { contractSellEnabled = _contractSellEnabled; contractSellThreshold = _contractSellThreshold; minSwapAmountToTriggerContractSell = _minSwapAmountToTriggerContractSell; } function setFees(Types.Fees calldata _fees) external onlyOwner { fees = _fees; feeTotal = _fees.operations + _fees.validatorAcquisition + _fees.PCR + _fees.yield + _fees.xChainValidatorAcquisition + _fees.indexFundPools + _fees.sBANKRewardsPool + _fees.OTCSwap + _fees.rescueFund + _fees.protocolImprovement + _fees.developers; } function setFeeRecipients(Types.FeeRecipients calldata _feeRecipients) external onlyOwner { feeRecipients = _feeRecipients; } function setTax(uint16 _tax) external onlyOwner { tax = _tax; } function setMEVShareEnabled (bool _enabled) external onlyOwner { MEVShareEnabled = _enabled; } function setMEVRepelEnabled (bool _enabled) external onlyOwner { MEVRepelEnabled = _enabled; } function updateMEVToken(address _mevcontract) external onlyOwner { MEVRepelToken = _mevcontract; } function updateMEVRepelMinAmount(uint256 _mevrepelminamount) external onlyOwner { mevrepelMinAmount = _mevrepelminamount * 10**18; } function setTradingEnabled(bool _enabled) external onlyOwner { tradingEnabled = _enabled; } function setMergePoolNode(MergePoolNode _mergeNode) external onlyOwner { mergeNode = _mergeNode; mergeNodeAddress = address(mergeNode); isDisabledExempt[mergeNodeAddress] = true; isFeeExempt[mergeNodeAddress] = true; isMaxExempt[mergeNodeAddress] = true; } function permanentlyDisableMinting() external onlyOwner { mintingEnabled = false; } function permanentlyDisableBurning() external onlyOwner { burningEnabled = false; } function withdrawETH(address _recipient) external onlyOwner { (bool success, ) = _recipient.call{value: address(this).balance}(""); require(success, "Could not send ETH"); } function withdrawToken(IERC20 _token, address _recipient) external onlyOwner { _token.transfer(_recipient, _token.balanceOf(address(this))); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"address","name":"_usdc","type":"address"},{"internalType":"address","name":"_safeBank","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MEVRepelEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MEVRepelToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MEVShareEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"MEVShareHolders","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_mevshareholders","type":"address[]"}],"name":"addtoMEVShareHolders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bps","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_burnee","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_burnee","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnForMergeNode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burningEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSellEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSellThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeRecipients","outputs":[{"internalType":"address","name":"operations","type":"address"},{"internalType":"address","name":"validatorAcquisition","type":"address"},{"internalType":"address","name":"PCR","type":"address"},{"internalType":"address","name":"yield","type":"address"},{"internalType":"address","name":"xChainValidatorAcquisition","type":"address"},{"internalType":"address","name":"indexFundPools","type":"address"},{"internalType":"address","name":"sBANKRewardsPool","type":"address"},{"internalType":"address","name":"OTCSwap","type":"address"},{"internalType":"address","name":"rescueFund","type":"address"},{"internalType":"address","name":"protocolImprovement","type":"address"},{"internalType":"address","name":"developers","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeTotal","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fees","outputs":[{"internalType":"uint16","name":"operations","type":"uint16"},{"internalType":"uint16","name":"validatorAcquisition","type":"uint16"},{"internalType":"uint16","name":"PCR","type":"uint16"},{"internalType":"uint16","name":"yield","type":"uint16"},{"internalType":"uint16","name":"xChainValidatorAcquisition","type":"uint16"},{"internalType":"uint16","name":"indexFundPools","type":"uint16"},{"internalType":"uint16","name":"sBANKRewardsPool","type":"uint16"},{"internalType":"uint16","name":"OTCSwap","type":"uint16"},{"internalType":"uint16","name":"rescueFund","type":"uint16"},{"internalType":"uint16","name":"protocolImprovement","type":"uint16"},{"internalType":"uint16","name":"developers","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isContractSelling","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDisabledExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isUniswapPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mergeNode","outputs":[{"internalType":"contract MergePoolNode","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minSwapAmountToTriggerContractSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mintingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"permanentlyDisableBurning","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"permanentlyDisableMinting","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_contractSellEnabled","type":"bool"},{"internalType":"uint256","name":"_contractSellThreshold","type":"uint256"},{"internalType":"uint256","name":"_minSwapAmountToTriggerContractSell","type":"uint256"}],"name":"setContractSelling","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"address","name":"operations","type":"address"},{"internalType":"address","name":"validatorAcquisition","type":"address"},{"internalType":"address","name":"PCR","type":"address"},{"internalType":"address","name":"yield","type":"address"},{"internalType":"address","name":"xChainValidatorAcquisition","type":"address"},{"internalType":"address","name":"indexFundPools","type":"address"},{"internalType":"address","name":"sBANKRewardsPool","type":"address"},{"internalType":"address","name":"OTCSwap","type":"address"},{"internalType":"address","name":"rescueFund","type":"address"},{"internalType":"address","name":"protocolImprovement","type":"address"},{"internalType":"address","name":"developers","type":"address"}],"internalType":"struct Types.FeeRecipients","name":"_feeRecipients","type":"tuple"}],"name":"setFeeRecipients","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint16","name":"operations","type":"uint16"},{"internalType":"uint16","name":"validatorAcquisition","type":"uint16"},{"internalType":"uint16","name":"PCR","type":"uint16"},{"internalType":"uint16","name":"yield","type":"uint16"},{"internalType":"uint16","name":"xChainValidatorAcquisition","type":"uint16"},{"internalType":"uint16","name":"indexFundPools","type":"uint16"},{"internalType":"uint16","name":"sBANKRewardsPool","type":"uint16"},{"internalType":"uint16","name":"OTCSwap","type":"uint16"},{"internalType":"uint16","name":"rescueFund","type":"uint16"},{"internalType":"uint16","name":"protocolImprovement","type":"uint16"},{"internalType":"uint16","name":"developers","type":"uint16"}],"internalType":"struct Types.Fees","name":"_fees","type":"tuple"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"},{"internalType":"bool","name":"_exempt","type":"bool"}],"name":"setIsDisabledExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"},{"internalType":"bool","name":"_exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"},{"internalType":"bool","name":"_exempt","type":"bool"}],"name":"setIsMaxExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"},{"internalType":"bool","name":"_isPair","type":"bool"}],"name":"setIsUniswapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setMEVRepelEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setMEVShareEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWallet","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract MergePoolNode","name":"_mergeNode","type":"address"}],"name":"setMergePoolNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_tax","type":"uint16"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setTradingEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tax","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mevrepelminamount","type":"uint256"}],"name":"updateMEVRepelMinAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mevcontract","type":"address"}],"name":"updateMEVToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"address","name":"_recipient","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6101006040526969e10de76676d0800000600181905569010f0cf064dd592000006006556018805464ffffffffff19166401006403841790556803860e639d806400006019556000601a55601b80546001600160c81b03191678e7de43cd09b9e50ebc5fcc4f3c9ec563bae25bd90000000101179055601c55601d805460ff191690553480156200008f57600080fd5b50604051620086d9380380620086d9833981016040819052620000b29162000ce9565b620000bd3362000c6e565b6001600160a01b0380841660c081905290831660a0526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200010f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000135919062000d33565b60a0516040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303816000875af115801562000187573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ad919062000d33565b6001600160a01b031660e0816001600160a01b03168152505060c0516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000207573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022d919062000d33565b6001600160a01b031660805260c05160a051604051309291903390620002539062000cbe565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f08015801562000298573d6000803e3d6000fd5b50600460006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600460009054906101000a90046001600160a01b0316600560006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600160076000336001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000336001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000336001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000600560009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600560009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000600560009054906101000a90046001600160a01b03166001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000806001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000806001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000806001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000306001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a600060e0516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060001960036000306001600160a01b03166001600160a01b03168152602001908152602001600020600060c0516001600160a01b03166001600160a01b0316815260200190815260200160002081905550604051806101600160405280730bc88f44498e4ae2f921c08b51b37ed0796c3d356001600160a01b031681526020017386fe4d39b585be32cdd892754234d95e18f3e3c06001600160a01b0316815260200173ee355b7d88907aabb60599accf04934ebc9984576001600160a01b03168152602001733ce3dcce5c80e9bcef19f006491baa95583f515b6001600160a01b0316815260200173794c5e426e10afee4dd04a4109b70ed4975474ed6001600160a01b031681526020017370d3fa66b6230661ed0aefcbad25b92d900d3b756001600160a01b03168152602001826001600160a01b0316815260200173ac41293f2a51ded456d65075d192aa9469d93c406001600160a01b03168152602001737f2e797e3efbcfbb6bea40bba10348867cfb25516001600160a01b03168152602001731408f1011566bdf90c7a74c748bd34d8237ec9ae6001600160a01b0316815260200173cf94eb523d9aaedc3bb58126d762f389af6044996001600160a01b0316815250600c60008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160010160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060408201518160020160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060608201518160030160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060808201518160040160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060a08201518160050160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060c08201518160060160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060e08201518160070160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101008201518160080160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101208201518160090160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555061014082015181600a0160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555090505060405180610160016040528060af61ffff168152602001605761ffff168152602001605761ffff168152602001605761ffff168152602001602c61ffff168152602001602c61ffff168152602001602c61ffff168152602001602c61ffff168152602001602c61ffff168152602001602c61ffff16815260200160c861ffff16815250601760008201518160000160006101000a81548161ffff021916908361ffff16021790555060208201518160000160026101000a81548161ffff021916908361ffff16021790555060408201518160000160046101000a81548161ffff021916908361ffff16021790555060608201518160000160066101000a81548161ffff021916908361ffff16021790555060808201518160000160086101000a81548161ffff021916908361ffff16021790555060a082015181600001600a6101000a81548161ffff021916908361ffff16021790555060c082015181600001600c6101000a81548161ffff021916908361ffff16021790555060e082015181600001600e6101000a81548161ffff021916908361ffff1602179055506101008201518160000160106101000a81548161ffff021916908361ffff1602179055506101208201518160000160126101000a81548161ffff021916908361ffff1602179055506101408201518160000160146101000a81548161ffff021916908361ffff16021790555090505060006922057344598a59340000905060008160015462000bd2919062000d58565b33600081815260026020526040808220849055519293509091600080516020620086b98339815191529062000c0a9085815260200190565b60405180910390a3600580546001600160a01b03908116600090815260026020526040808220869055925492519290911691600080516020620086b98339815191529062000c5b9086815260200190565b60405180910390a3505050505062000d80565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6149338062003d8683390190565b80516001600160a01b038116811462000ce457600080fd5b919050565b60008060006060848603121562000cff57600080fd5b62000d0a8462000ccc565b925062000d1a6020850162000ccc565b915062000d2a6040850162000ccc565b90509250925092565b60006020828403121562000d4657600080fd5b62000d518262000ccc565b9392505050565b8181038181111562000d7a57634e487b7160e01b600052601160045260246000fd5b92915050565b60805160a05160c05160e051612fa262000de46000396000610ba8015260008181610d80015281816119f001528181611b9301528181611bf10152611f7e0152600081816109180152611ebf015260008181610bfc0152611f130152612fa26000f3fe6080604052600436106103a65760003560e01c8063715018a6116101e7578063a75dff841161010d578063dd395c63116100a0578063ee7bf5e21161006f578063ee7bf5e214610d2d578063f2fde38b14610d4e578063f887ea4014610d6e578063f8b45b0514610da257600080fd5b8063dd395c6314610c9f578063dd62ed3e14610cbf578063dec1cfc414610cf7578063e35a3d7c14610d1757600080fd5b8063af06795a116100dc578063af06795a14610c1e578063b55b8e0714610c3e578063c2e5ec0414610c5f578063cdae6b7a14610c7f57600080fd5b8063a75dff8414610b6d578063a8aa1b3114610b96578063a9059cbb14610bca578063ad5c464814610bea57600080fd5b806395d89b41116101855780639dc29fac116101545780639dc29fac14610af35780639fd6db1214610b13578063a0712d6814610b2d578063a0d2758414610b4d57600080fd5b806395d89b411461098857806399c8d556146109b95780639af1d35a146109da5780639cece12e14610ac357600080fd5b8063880934fd116101c1578063880934fd146108e657806389a30271146109065780638da5cb5b1461093a5780639571a07d1461095857600080fd5b8063715018a614610881578063760aa73314610896578063807fb8c5146108b657600080fd5b80633aeac4e1116102cc578063604aea6b1161026a578063682373291161023957806368237329146107fe578063690d8320146108145780636b6c8cbc1461083457806370a082311461085457600080fd5b8063604aea6b14610789578063658d4b7f146107a957806366c4390d146107c9578063677a1173146107de57600080fd5b806348b98ef5116102a657806348b98ef5146107095780634ada218b1461072a5780634d7547151461074a5780635d0044ca1461076957600080fd5b80633aeac4e11461069f5780633f4218e0146106bf5780633fc645b5146106ef57600080fd5b80631ff7637f1161034457806336203f481161031357806336203f481461060c57806336c3f71a1461062157806337bfc1ef1461065157806338db59541461067f57600080fd5b80631ff7637f1461058557806323b872dd146105a5578063313ce567146105c5578063319f5f6a146105ec57600080fd5b8063095ea7b311610380578063095ea7b3146104555780630adfdcb9146104855780630fb896a81461054d57806318160ddd1461056f57600080fd5b806301346266146103b2578063069f22ec146103ef57806306fdde031461041357600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506004546103d2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103fb57600080fd5b5061040560195481565b6040519081526020016103e6565b34801561041f57600080fd5b506104486040518060400160405280600981526020016813595c99d9541bdbdb60ba1b81525081565b6040516103e69190612797565b34801561046157600080fd5b506104756104703660046127fa565b610db8565b60405190151581526020016103e6565b34801561049157600080fd5b50600c54600d54600e54600f546010546011546012546013546014546015546016546104e29a6001600160a01b039081169a811699811698811697811696811695811694811693811692811691168b565b604080516001600160a01b039c8d1681529a8c1660208c0152988b16988a01989098529589166060890152938816608088015291871660a0870152861660c0860152851660e085015284166101008401528316610120830152909116610140820152610160016103e6565b34801561055957600080fd5b5061056d610568366004612826565b610e25565b005b34801561057b57600080fd5b5061040560015481565b34801561059157600080fd5b5061056d6105a036600461285c565b610e5d565b3480156105b157600080fd5b506104756105c0366004612879565b610e77565b3480156105d157600080fd5b506105da601281565b60405160ff90911681526020016103e6565b3480156105f857600080fd5b5061056d6106073660046128ca565b610ee9565b34801561061857600080fd5b5061056d610f11565b34801561062d57600080fd5b5061047561063c366004612826565b600b6020526000908152604090205460ff1681565b34801561065d57600080fd5b5060185461066c9061ffff1681565b60405161ffff90911681526020016103e6565b34801561068b57600080fd5b5061056d61069a366004612826565b610f26565b3480156106ab57600080fd5b5061056d6106ba3660046128e7565b610faa565b3480156106cb57600080fd5b506104756106da366004612826565b60086020526000908152604090205460ff1681565b3480156106fb57600080fd5b50601d546104759060ff1681565b34801561071557600080fd5b5060185461047590600160201b900460ff1681565b34801561073657600080fd5b50601b546104759062010000900460ff1681565b34801561075657600080fd5b50601b5461047590610100900460ff1681565b34801561077557600080fd5b5061056d610784366004612920565b611093565b34801561079557600080fd5b5061056d6107a4366004612939565b6110a0565b3480156107b557600080fd5b5061056d6107c43660046129bc565b611118565b3480156107d557600080fd5b5061056d61114b565b3480156107ea57600080fd5b5061056d6107f9366004612920565b61115f565b34801561080a57600080fd5b5061066c61271081565b34801561082057600080fd5b5061056d61082f366004612826565b61117f565b34801561084057600080fd5b5061047561084f3660046127fa565b611207565b34801561086057600080fd5b5061040561086f366004612826565b60026020526000908152604090205481565b34801561088d57600080fd5b5061056d611383565b3480156108a257600080fd5b5061056d6108b13660046129ea565b611397565b3480156108c257600080fd5b506104756108d1366004612826565b60096020526000908152604090205460ff1681565b3480156108f257600080fd5b5061056d61090136600461285c565b6113bd565b34801561091257600080fd5b506103d27f000000000000000000000000000000000000000000000000000000000000000081565b34801561094657600080fd5b506000546001600160a01b03166103d2565b34801561096457600080fd5b50610475610973366004612826565b60076020526000908152604090205460ff1681565b34801561099457600080fd5b5061044860405180604001604052806005815260200164135413d3d360da1b81525081565b3480156109c557600080fd5b5060185461066c9062010000900461ffff1681565b3480156109e657600080fd5b50601754610a5d9061ffff80821691620100008104821691600160201b820481169166010000000000008104821691600160401b8204811691600160501b8104821691600160601b8204811691600160701b8104821691600160801b8204811691600160901b8104821691600160a01b909104168b565b6040805161ffff9c8d1681529a8c1660208c0152988b16988a01989098529589166060890152938816608088015291871660a0870152861660c0860152851660e085015284166101008401528316610120830152909116610140820152610160016103e6565b348015610acf57600080fd5b50610475610ade366004612826565b600a6020526000908152604090205460ff1681565b348015610aff57600080fd5b50610475610b0e3660046127fa565b611506565b348015610b1f57600080fd5b50601b546104759060ff1681565b348015610b3957600080fd5b5061056d610b48366004612920565b611605565b348015610b5957600080fd5b5061056d610b68366004612a07565b6116a4565b348015610b7957600080fd5b50601b546103d2906501000000000090046001600160a01b031681565b348015610ba257600080fd5b506103d27f000000000000000000000000000000000000000000000000000000000000000081565b348015610bd657600080fd5b50610475610be53660046127fa565b6116d2565b348015610bf657600080fd5b506103d27f000000000000000000000000000000000000000000000000000000000000000081565b348015610c2a57600080fd5b5061056d610c393660046129bc565b6116df565b348015610c4a57600080fd5b50601b54610475906301000000900460ff1681565b348015610c6b57600080fd5b5061056d610c7a3660046129ea565b611712565b348015610c8b57600080fd5b5061056d610c9a3660046129bc565b611736565b348015610cab57600080fd5b5061056d610cba3660046129bc565b611769565b348015610ccb57600080fd5b50610405610cda3660046128e7565b600360209081526000928352604080842090915290825290205481565b348015610d0357600080fd5b5061056d610d123660046129ea565b61179c565b348015610d2357600080fd5b50610405601a5481565b348015610d3957600080fd5b50601b5461047590600160201b900460ff1681565b348015610d5a57600080fd5b5061056d610d69366004612826565b6117c3565b348015610d7a57600080fd5b506103d27f000000000000000000000000000000000000000000000000000000000000000081565b348015610dae57600080fd5b5061040560065481565b3360008181526003602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e139086815260200190565b60405180910390a35060015b92915050565b610e2d61183c565b601b80546001600160a01b03909216650100000000000265010000000000600160c81b0319909216919091179055565b610e6561183c565b80600c610e728282612a69565b505050565b6001600160a01b03831660009081526003602090815260408083203384529091528120546000198114610ed357610eae8382612b84565b6001600160a01b03861660009081526003602090815260408083203384529091529020555b610ede858585611896565b9150505b9392505050565b610ef161183c565b6018805461ffff909216620100000263ffff000019909216919091179055565b610f1961183c565b601b805461ff0019169055565b610f2e61183c565b600480546001600160a01b039283166001600160a01b0319918216811790925560058054909116821781556000918252600760209081526040808420805460ff19908116600190811790925584548716865260088452828620805482168317905593549095168452600990915290912080549091169091179055565b610fb261183c565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a0823190602401602060405180830381865afa158015611000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110249190612b97565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561106f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e729190612bb0565b61109b61183c565b600655565b6110a861183c565b60005b81811015610e72576001600b60008585858181106110cb576110cb612bcd565b90506020020160208101906110e09190612826565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561111181612be3565b90506110ab565b61112061183c565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b61115361183c565b601b805460ff19169055565b61116761183c565b61117981670de0b6b3a7640000612bfc565b601c5550565b61118761183c565b6000816001600160a01b03164760405160006040518083038185875af1925050503d80600081146111d4576040519150601f19603f3d011682016040523d82523d6000602084013e6111d9565b606091505b50509050806112035760405162461bcd60e51b81526004016111fa90612c13565b60405180910390fd5b5050565b6004546000906001600160a01b031633146112725760405162461bcd60e51b815260206004820152602560248201527f4f6e6c7920746865204d65726765204e6f646520636f6e74726163742063616e60448201526410313ab93760d91b60648201526084016111fa565b6001600160a01b0383166000908152600260205260409020548211156112aa5760405162461bcd60e51b81526004016111fa90612c3f565b6001600160a01b03831660009081526003602090815260408083203384529091529020546000198114611306576112e18382612b84565b6001600160a01b03851660009081526003602090815260408083203384529091529020555b82600160008282546113189190612b84565b90915550506001600160a01b03841660009081526002602052604081208054859290611345908490612b84565b90915550506040518381526000906001600160a01b03861690600080516020612f4d8339815191529060200160405180910390a35060019392505050565b61138b61183c565b6113956000611d35565b565b61139f61183c565b601b805491151563010000000263ff00000019909216919091179055565b6113c561183c565b8060176113d28282612c90565b506113e79050610160820161014083016128ca565b6113f9610140830161012084016128ca565b61140b610120840161010085016128ca565b61141c610100850160e086016128ca565b61142c60e0860160c087016128ca565b61143c60c0870160a088016128ca565b61144c60a08801608089016128ca565b61145c6080890160608a016128ca565b61146c60608a0160408b016128ca565b61147c60408b0160208c016128ca565b61148960208c018c6128ca565b6114939190612e84565b61149d9190612e84565b6114a79190612e84565b6114b19190612e84565b6114bb9190612e84565b6114c59190612e84565b6114cf9190612e84565b6114d99190612e84565b6114e39190612e84565b6114ed9190612e84565b6018805461ffff191661ffff9290921691909117905550565b600061151061183c565b601b54610100900460ff1661155d5760405162461bcd60e51b8152602060048201526013602482015272109d5c9b9a5b99c81a5cc8191a5cd8589b1959606a1b60448201526064016111fa565b6001600160a01b0383166000908152600260205260409020548211156115955760405162461bcd60e51b81526004016111fa90612c3f565b81600160008282546115a79190612b84565b90915550506001600160a01b038316600090815260026020526040812080548492906115d4908490612b84565b90915550506040518281526000906001600160a01b03851690600080516020612f4d83398151915290602001610e13565b61160d61183c565b601b5460ff166116555760405162461bcd60e51b8152602060048201526013602482015272135a5b9d1a5b99c81a5cc8191a5cd8589b1959606a1b60448201526064016111fa565b80600160008282546116679190612ea6565b909155505033600081815260026020908152604080832080548601905551848152600080516020612f4d833981519152910160405180910390a350565b6116ac61183c565b60188054931515600160201b0264ff000000001990941693909317909255601955601a55565b6000610ee2338484611896565b6116e761183c565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b61171a61183c565b601b8054911515620100000262ff000019909216919091179055565b61173e61183c565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b61177161183c565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6117a461183c565b601b8054911515600160201b0264ff0000000019909216919091179055565b6117cb61183c565b6001600160a01b0381166118305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016111fa565b61183981611d35565b50565b6000546001600160a01b031633146113955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016111fa565b601d5460009060ff16156118b6576118af848484611d85565b9050610ee2565b601b5460009062010000900460ff161580156118eb57506001600160a01b03841660009081526007602052604090205460ff16155b1561195857601b546301000000900460ff161561192b576001600160a01b0384166000908152600b602052604090205460ff16151560010361192b575060015b601b54600160201b900460ff161561195357601c5461194985611ddc565b1115611953575060015b61195c565b5060015b808061198057506001600160a01b03851660009081526007602052604090205460ff165b6119cc5760405162461bcd60e51b815260206004820152601d60248201527f54726164696e672069732063757272656e746c792064697361626c656400000060448201526064016111fa565b6001600160a01b0384166000908152600a602052604081205460ff1680611a2457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316145b905080158015611a4d57506001600160a01b03851660009081526009602052604090205460ff16155b15611ac7576006546001600160a01b038616600090815260026020526040902054611a79908690612ea6565b1115611ac75760405162461bcd60e51b815260206004820152601d60248201527f4d61782077616c6c657420686173206265656e2074726967676572656400000060448201526064016111fa565b808015611ad65750601a548410155b8015611af25750336000908152600a602052604090205460ff16155b8015611b015750601d5460ff16155b8015611b165750601854600160201b900460ff165b8015611b3357506019543060009081526002602052604090205410155b15611b4057611b40611e56565b6001600160a01b03861660009081526002602052604081208054869290611b68908490612b84565b90915550506001600160a01b0386166000908152600a6020526040902054849060ff1680611bc757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b0316145b80611c2557506001600160a01b0386166000908152600a602052604090205460ff1680611c2557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316145b611c30576000611c72565b6001600160a01b03871660009081526008602052604090205460ff16158015611c7257506001600160a01b03861660009081526008602052604090205460ff16155b15611c8857611c8187866126a6565b9050611cdc565b6001600160a01b03871660009081526008602052604090205460ff16158015611cca57506001600160a01b03861660009081526008602052604090205460ff16155b15611cdc57611cd98786612728565b90505b6001600160a01b0380871660008181526002602052604090819020805485019055519091891690600080516020612f4d83398151915290611d209085815260200190565b60405180910390a35060019695505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260026020526040812080548391908390611daf908490612b84565b9091555050506001600160a01b038216600090815260026020526040902080548201905560019392505050565b601b546040516370a0823160e01b81526001600160a01b038381166004830152600092650100000000009004169081906370a0823190602401602060405180830381865afa158015611e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee29190612b97565b601d805460ff1916600117905560408051600380825260808201909252479160009190602082016060803683370190505090503081600081518110611e9d57611e9d612bcd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110611ef157611ef1612bcd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600281518110611f4557611f45612bcd565b6001600160a01b039283166020918202929092018101919091523060008181526002909252604080832054905163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009094169363791ac94793611fba9390918791904290600401612eb9565b600060405180830381600087803b158015611fd457600080fd5b505af1158015611fe8573d6000803e3d6000fd5b5050505060008247611ffa9190612b84565b905061271081111561269757600c546017546000916001600160a01b0316906127109061202b9061ffff1685612bfc565b6120359190612f2a565b604051600081818185875af1925050503d8060008114612071576040519150601f19603f3d011682016040523d82523d6000602084013e612076565b606091505b505080915050806120995760405162461bcd60e51b81526004016111fa90612c13565b600d546017546001600160a01b0390911690612710906120c39062010000900461ffff1685612bfc565b6120cd9190612f2a565b604051600081818185875af1925050503d8060008114612109576040519150601f19603f3d011682016040523d82523d6000602084013e61210e565b606091505b505080915050806121315760405162461bcd60e51b81526004016111fa90612c13565b600e546017546001600160a01b03909116906127109061215c90600160201b900461ffff1685612bfc565b6121669190612f2a565b604051600081818185875af1925050503d80600081146121a2576040519150601f19603f3d011682016040523d82523d6000602084013e6121a7565b606091505b505080915050806121ca5760405162461bcd60e51b81526004016111fa90612c13565b600f546017546001600160a01b0390911690612710906121f8906601000000000000900461ffff1685612bfc565b6122029190612f2a565b604051600081818185875af1925050503d806000811461223e576040519150601f19603f3d011682016040523d82523d6000602084013e612243565b606091505b505080915050806122665760405162461bcd60e51b81526004016111fa90612c13565b6010546017546001600160a01b03909116906127109061229190600160401b900461ffff1685612bfc565b61229b9190612f2a565b604051600081818185875af1925050503d80600081146122d7576040519150601f19603f3d011682016040523d82523d6000602084013e6122dc565b606091505b505080915050806122ff5760405162461bcd60e51b81526004016111fa90612c13565b6011546017546001600160a01b03909116906127109061232a90600160501b900461ffff1685612bfc565b6123349190612f2a565b604051600081818185875af1925050503d8060008114612370576040519150601f19603f3d011682016040523d82523d6000602084013e612375565b606091505b505080915050806123985760405162461bcd60e51b81526004016111fa90612c13565b6012546017546001600160a01b0390911690612710906123c390600160601b900461ffff1685612bfc565b6123cd9190612f2a565b604051600081818185875af1925050503d8060008114612409576040519150601f19603f3d011682016040523d82523d6000602084013e61240e565b606091505b505080915050806124315760405162461bcd60e51b81526004016111fa90612c13565b6013546017546001600160a01b03909116906127109061245c90600160701b900461ffff1685612bfc565b6124669190612f2a565b604051600081818185875af1925050503d80600081146124a2576040519150601f19603f3d011682016040523d82523d6000602084013e6124a7565b606091505b505080915050806124ca5760405162461bcd60e51b81526004016111fa90612c13565b6014546017546001600160a01b0390911690612710906124f590600160801b900461ffff1685612bfc565b6124ff9190612f2a565b604051600081818185875af1925050503d806000811461253b576040519150601f19603f3d011682016040523d82523d6000602084013e612540565b606091505b505080915050806125635760405162461bcd60e51b81526004016111fa90612c13565b6015546017546001600160a01b03909116906127109061258e90600160901b900461ffff1685612bfc565b6125989190612f2a565b604051600081818185875af1925050503d80600081146125d4576040519150601f19603f3d011682016040523d82523d6000602084013e6125d9565b606091505b505080915050806125fc5760405162461bcd60e51b81526004016111fa90612c13565b6016546017546001600160a01b03909116906127109061262790600160a01b900461ffff1685612bfc565b6126319190612f2a565b604051600081818185875af1925050503d806000811461266d576040519150601f19603f3d011682016040523d82523d6000602084013e612672565b606091505b505080915050806126955760405162461bcd60e51b81526004016111fa90612c13565b505b5050601d805460ff1916905550565b6018546000908190612710906126c09061ffff1685612bfc565b6126ca9190612f2a565b306000818152600260205260409081902080548401905551919250906001600160a01b03861690600080516020612f4d8339815191529061270e9085815260200190565b60405180910390a36127208184612b84565b949350505050565b6018546000908190612710906127489062010000900461ffff1685612bfc565b6127529190612f2a565b905080600160008282546127669190612b84565b90915550506040518381526000906001600160a01b03861690600080516020612f4d8339815191529060200161270e565b600060208083528351808285015260005b818110156127c4578581018301518582016040015282016127a8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461183957600080fd5b6000806040838503121561280d57600080fd5b8235612818816127e5565b946020939093013593505050565b60006020828403121561283857600080fd5b8135610ee2816127e5565b6000610160828403121561285657600080fd5b50919050565b6000610160828403121561286f57600080fd5b610ee28383612843565b60008060006060848603121561288e57600080fd5b8335612899816127e5565b925060208401356128a9816127e5565b929592945050506040919091013590565b61ffff8116811461183957600080fd5b6000602082840312156128dc57600080fd5b8135610ee2816128ba565b600080604083850312156128fa57600080fd5b8235612905816127e5565b91506020830135612915816127e5565b809150509250929050565b60006020828403121561293257600080fd5b5035919050565b6000806020838503121561294c57600080fd5b823567ffffffffffffffff8082111561296457600080fd5b818501915085601f83011261297857600080fd5b81358181111561298757600080fd5b8660208260051b850101111561299c57600080fd5b60209290920196919550909350505050565b801515811461183957600080fd5b600080604083850312156129cf57600080fd5b82356129da816127e5565b91506020830135612915816129ae565b6000602082840312156129fc57600080fd5b8135610ee2816129ae565b600080600060608486031215612a1c57600080fd5b8335612a27816129ae565b95602085013595506040909401359392505050565b60008135610e1f816127e5565b80546001600160a01b0319166001600160a01b0392909216919091179055565b612a7b612a7583612a3c565b82612a49565b612a93612a8a60208401612a3c565b60018301612a49565b612aab612aa260408401612a3c565b60028301612a49565b612ac3612aba60608401612a3c565b60038301612a49565b612adb612ad260808401612a3c565b60048301612a49565b612af3612aea60a08401612a3c565b60058301612a49565b612b0b612b0260c08401612a3c565b60068301612a49565b612b23612b1a60e08401612a3c565b60078301612a49565b612b3c612b336101008401612a3c565b60088301612a49565b612b55612b4c6101208401612a3c565b60098301612a49565b611203612b656101408401612a3c565b600a8301612a49565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e1f57610e1f612b6e565b600060208284031215612ba957600080fd5b5051919050565b600060208284031215612bc257600080fd5b8151610ee2816129ae565b634e487b7160e01b600052603260045260246000fd5b600060018201612bf557612bf5612b6e565b5060010190565b8082028115828204841417610e1f57610e1f612b6e565b602080825260129082015271086deead8c840dcdee840e6cadcc8408aa8960731b604082015260600190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207468616e20616e206163636f756e746040820152632068617360e01b606082015260800190565b60008135610e1f816128ba565b8135612c9b816128ba565b61ffff811661ffff1983541617825550612cd4612cba60208401612c83565b825463ffff0000191660109190911b63ffff000016178255565b612d01612ce360408401612c83565b825465ffff00000000191660209190911b65ffff0000000016178255565b612d32612d1060608401612c83565b825467ffff000000000000191660309190911b67ffff00000000000016178255565b612d67612d4160808401612c83565b825469ffff0000000000000000191660409190911b69ffff000000000000000016178255565b612d96612d7660a08401612c83565b82805461ffff60501b191660509290921b61ffff60501b16919091179055565b612dc5612da560c08401612c83565b82805461ffff60601b191660609290921b61ffff60601b16919091179055565b612df4612dd460e08401612c83565b82805461ffff60701b191660709290921b61ffff60701b16919091179055565b612e24612e046101008401612c83565b82805461ffff60801b191660809290921b61ffff60801b16919091179055565b612e54612e346101208401612c83565b82805461ffff60901b191660909290921b61ffff60901b16919091179055565b611203612e646101408401612c83565b82805461ffff60a01b191660a09290921b61ffff60a01b16919091179055565b61ffff818116838216019080821115612e9f57612e9f612b6e565b5092915050565b80820180821115610e1f57610e1f612b6e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612f095784516001600160a01b031683529383019391830191600101612ee4565b50506001600160a01b03969096166060850152505050608001529392505050565b600082612f4757634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122078f885f2847f52703cae8b0c84b00564f3fbac8a90b8a42951a66dcf49c3077f64736f6c634300081100336002805463ffffffff19166260000617905562278d00600355625eec006004556276a70060055560006006819055600e55661550f7dca70000600f556618de76816d80006010556804563918244f40000060115561036060405264a2fb40580060e0908152648a88c37e00610100526475c10c9180610120526464174aaee061014052645513cc47d861016052644850d409de61018052643d77e76ec96101a05264343f84b7c56101c052642c6930cf676101e0526425bfcfe37e610200526420163d815f61022052641b461aadf76102405264172ec9e0ab610260526413b491fef8610280526410bfe27f206102a052640e3cb3b8db6102c052640c19ff29ed6102e052640a494c16d7610300526408be4d79d06103205264076e8ea78a61034052620001329060129060146200061a565b506029805461ffff19166102581790553480156200014f57600080fd5b5060405162004933380380620049338339810160408190526200017291620006a1565b6200017d33620004e9565b600180556200018c8162000539565b6001600160a01b0384811660805283811660a052821660c05260408051606081018252730bc88f44498e4ae2f921c08b51b37ed0796c3d358082527386fe4d39b585be32cdd892754234d95e18f3e3c0602080840182905273ee355b7d88907aabb60599accf04934ebc998457938501849052602680546001600160a01b03199081169094179055602780548416909217909155602880549092169092179055600b90526301e133807f72c6bfb7988af3a1efa6568f02a999bc52252641c659d85961ca3d372b57d5cf8190556305a39a807fa50eece07c7db1631545c0069bd8f5f54d5935e215d59097edf258a44ba9163455600360005263096601807f64c15cc42be7899b001f818cf4433057002112c418d1d3a67cd5cb453051d33e559051829190620002bc9062000666565b6001600160a01b0390921682526020820152604001604051809103906000f080158015620002ee573d6000803e3d6000fd5b506001600052600c6020527fd421a5181c571bba3f01190c922c3b2a896fc1d84e86c9f17ac10e67ebef8b5c80546001600160a01b0319166001600160a01b039290921691909117905560405181906305a39a80906200034e9062000666565b6001600160a01b0390921682526020820152604001604051809103906000f08015801562000380573d6000803e3d6000fd5b506002600052600c6020527f5d6016397a73f5e079297ac5a36fef17b4d9c3831618e63ab105738020ddd72080546001600160a01b0319166001600160a01b03929092169190911790556040518190630966018090620003e09062000666565b6001600160a01b0390921682526020820152604001604051809103906000f08015801562000412573d6000803e3d6000fd5b507fc0da782485e77ae272268ae0a3ff44c1552ecb60b3743924de17a815e0a3cfd780546001600160a01b0319166001600160a01b03929092169190911790555050600d6020525050676f05b59d3b2000007ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c5556802b5e3af16b18800007f10a81eed9d63d16face5e76357905348e6253d3394086026bb2bf2145d7cc249556003600052680821ab0d44149800007f26b4a10d0f0b04925c23bd4480ee147c916e5e87a7d68206a533dad160ac81e25562000709565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b62000543620005bc565b6001600160a01b038116620005ae5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b620005b981620004e9565b50565b6000546001600160a01b03163314620006185760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620005a5565b565b826014810192821562000654579160200282015b8281111562000654578251829064ffffffffff169055916020019190600101906200062e565b506200066292915062000674565b5090565b610faf806200398483390190565b5b8082111562000662576000815560010162000675565b6001600160a01b0381168114620005b957600080fd5b60008060008060808587031215620006b857600080fd5b8451620006c5816200068b565b6020860151909450620006d8816200068b565b6040860151909350620006eb816200068b565b6060860151909250620006fe816200068b565b939692955090935050565b60805160a05160c0516131fe6200078660003960008181610672015281816127eb015281816128d7015281816129780152612a0f0152600081816109e401528181610e0c015261284201526000818161081201528181610e3c0152818161209801528181612340015281816126b0015261279701526131fe6000f3fe6080604052600436106103035760003560e01c80638da5cb5b11610190578063be1c5af1116100dc578063e6aeb87d11610095578063f887ea401161006f578063f887ea40146109d2578063f98d4a8814610a06578063fe96973a14610a1c578063ffd740df14610a3c57600080fd5b8063e6aeb87d1461097f578063f2fde38b14610992578063f4a0a528146109b257600080fd5b8063be1c5af1146108bc578063c38c363e146108d2578063c75b5daf146108f2578063dce0b4e414610928578063dd418ae21461093e578063e03c6c141461095e57600080fd5b8063ab98f4ae11610149578063b6ed9d6f11610123578063b6ed9d6f14610834578063bb5fbc1f1461084f578063bc958c6b1461086f578063bdcd31e91461089c57600080fd5b8063ab98f4ae146107cd578063b1c95b25146107ed578063b551e61a1461080057600080fd5b80638da5cb5b146106ac5780638f442f7a146106ca57806399d32fc414610702578063a06db7dc1461071d578063a4d097e214610733578063a8cca0981461074657600080fd5b8063682373291161024f578063715018a6116102085780637a6de28c116101e25780637a6de28c1461060a578063849bfc411461062a5780638676e4a21461064057806389a302711461066057600080fd5b8063715018a6146105c257806374ce4487146105d75780637586e3f9146105ea57600080fd5b8063682373291461050e578063690d8320146105375780636991b45c146105575780636c0de0d01461056c5780636ca0f58f1461057f57806370a082311461059557600080fd5b80633aeac4e1116102bc57806343840c521161029657806343840c521461048b5780634c20f90a146104ab5780635ef87fcc146104cb5780636817c76c146104f857600080fd5b80633aeac4e11461042b5780633f0609b41461044b578063417314591461046b57600080fd5b8063080b301e1461030f5780630adfdcb9146103385780630cf4680e1461038f5780630f3ac4a3146103b157806317b2e40a146103d15780632a07a004146103fe57600080fd5b3661030a57005b600080fd5b34801561031b57600080fd5b50610325600f5481565b6040519081526020015b60405180910390f35b34801561034457600080fd5b50602654602754602854610365926001600160a01b03908116928116911683565b604080516001600160a01b039485168152928416602084015292169181019190915260600161032f565b34801561039b57600080fd5b506103af6103aa366004612aa9565b610a5c565b005b3480156103bd57600080fd5b506103256103cc366004612acb565b610a7c565b3480156103dd57600080fd5b506103256103ec366004612af3565b600d6020526000908152604090205481565b34801561040a57600080fd5b50610325610419366004612af3565b600b6020526000908152604090205481565b34801561043757600080fd5b506103af610446366004612b23565b610a92565b34801561045757600080fd5b506103af610466366004612b5c565b610b80565b34801561047757600080fd5b506103af610486366004612b9b565b610bae565b34801561049757600080fd5b506103af6104a6366004612bc7565b610bc4565b3480156104b757600080fd5b506103af6104c6366004612bf1565b610c09565b3480156104d757600080fd5b506104eb6104e6366004612c4e565b610c1e565b60405161032f9190612ce8565b34801561050457600080fd5b5061032560115481565b34801561051a57600080fd5b5061052461271081565b60405161ffff909116815260200161032f565b34801561054357600080fd5b506103af610552366004612d2c565b610d6e565b34801561056357600080fd5b506103af610ded565b6103af61057a366004612d49565b610eac565b34801561058b57600080fd5b5061032560065481565b3480156105a157600080fd5b506103256105b0366004612d2c565b60086020526000908152604090205481565b3480156105ce57600080fd5b506103af611188565b6103af6105e5366004612d75565b61119c565b3480156105f657600080fd5b506103af610605366004612dc1565b611236565b34801561061657600080fd5b50610325610625366004612acb565b61129c565b34801561063657600080fd5b5061032560055481565b34801561064c57600080fd5b506103af61065b366004612e03565b6114d3565b34801561066c57600080fd5b506106947f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161032f565b3480156106b857600080fd5b506000546001600160a01b0316610694565b3480156106d657600080fd5b506103256106e5366004612e1f565b600960209081526000928352604080842090915290825290205481565b34801561070e57600080fd5b506029546105249061ffff1681565b34801561072957600080fd5b5061032560035481565b6103af610741366004612e3d565b611539565b34801561075257600080fd5b506107b8610761366004612acb565b60076020819052600091825260409091208054600182015460028301546003840154600485015460058601546006870154969097015460ff8616976101009096046001600160a01b03169694959394929391929089565b60405161032f99989796959493929190612e75565b3480156107d957600080fd5b506103af6107e8366004612dc1565b611599565b6104eb6107fb366004612e3d565b61162a565b34801561080c57600080fd5b506106947f000000000000000000000000000000000000000000000000000000000000000081565b34801561084057600080fd5b506002546105249061ffff1681565b34801561085b57600080fd5b506103af61086a366004612bc7565b61171c565b34801561087b57600080fd5b5061032561088a366004612acb565b600a6020526000908152604090205481565b3480156108a857600080fd5b506103af6108b7366004612dc1565b61173b565b3480156108c857600080fd5b5061032560105481565b3480156108de57600080fd5b506103af6108ed366004612acb565b611797565b3480156108fe57600080fd5b5061069461090d366004612af3565b600c602052600090815260409020546001600160a01b031681565b34801561093457600080fd5b50610325600e5481565b34801561094a57600080fd5b50610325610959366004612acb565b6117ce565b34801561096a57600080fd5b506002546105249062010000900461ffff1681565b61032561098d366004612acb565b6117e5565b34801561099e57600080fd5b506103af6109ad366004612d2c565b611855565b3480156109be57600080fd5b506103af6109cd366004612acb565b6118cb565b3480156109de57600080fd5b506106947f000000000000000000000000000000000000000000000000000000000000000081565b348015610a1257600080fd5b5061032560045481565b348015610a2857600080fd5b506103af610a37366004612acb565b6118d8565b348015610a4857600080fd5b506103af610a57366004612acb565b611908565b610a64611a58565b6002805461ffff191661ffff92909216919091179055565b600081600f54610a8c9190612ef3565b92915050565b610a9a611a58565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a0823190602401602060405180830381865afa158015610ae8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0c9190612f0a565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610b57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7b9190612f23565b505050565b610b88611a58565b600e93909355600f919091556010556029805461ffff191661ffff909216919091179055565b610bb6611a58565b600392909255600455600555565b610bcc611a58565b80600d6000846003811115610be357610be3612e5f565b6003811115610bf457610bf4612e5f565b81526020810191909152604001600020555050565b610c11611a58565b806026610b7b8282612f65565b6060610c28611a58565b8584148015610c3657508382145b610c7d5760405162461bcd60e51b815260206004820152601360248201527213195b99dd1a1cc81b9bdd08185b1a59db9959606a1b60448201526064015b60405180910390fd5b858067ffffffffffffffff811115610c9757610c97612fb2565b604051908082528060200260200182016040528015610cc0578160200160208202803683370190505b50915060005b81811015610d6257610d3d898983818110610ce357610ce3612fc8565b9050602002016020810190610cf89190612d2c565b888884818110610d0a57610d0a612fc8565b90506020020135878785818110610d2357610d23612fc8565b9050602002016020810190610d389190612af3565b611ab2565b838281518110610d4f57610d4f612fc8565b6020908102919091010152600101610cc6565b50509695505050505050565b610d76611a58565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610dc3576040519150601f19603f3d011682016040523d82523d6000602084013e610dc8565b606091505b5050905080610de95760405162461bcd60e51b8152600401610c7490612fde565b5050565b610df5611a58565b60405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015610e85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea99190612f23565b50565b600260015403610ece5760405162461bcd60e51b8152600401610c749061300a565b60026001556000828152600760205260409020805461010090046001600160a01b03163314610f0f5760405162461bcd60e51b8152600401610c7490613041565b6000815460ff166003811115610f2757610f27612e5f565b14610f655760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481b595c99d95960921b6044820152606401610c74565b42816002015411610f885760405162461bcd60e51b8152600401610c749061306c565b6010543414610fa95760405162461bcd60e51b8152600401610c7490613092565b6027546040516000916001600160a01b03169034908381818185875af1925050503d8060008114610ff6576040519150601f19603f3d011682016040523d82523d6000602084013e610ffb565b606091505b505090508061101c5760405162461bcd60e51b8152600401610c7490612fde565b6000600c600085600381111561103457611034612e5f565b600381111561104557611045612e5f565b815260208101919091526040016000908120546001600160a01b0316915081906339d4d686903390600b9088600381111561108257611082612e5f565b600381111561109357611093612e5f565b815260200190815260200160002054426110ad91906130c9565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b1580156110f357600080fd5b505af1158015611107573d6000803e3d6000fd5b5050845486925085915060ff1916600183600381111561112957611129612e5f565b0217905550426005840155600b600085600381111561114a5761114a612e5f565b600381111561115b5761115b612e5f565b8152602001908152602001600020544261117591906130c9565b6006909301929092555050600180555050565b611190611a58565b61119a6000611cd2565b565b6002600154036111be5760405162461bcd60e51b8152600401610c749061300a565b600260015581806111ce83610a7c565b6111d89190612ef3565b34146111f65760405162461bcd60e51b8152600401610c7490613092565b60005b8181101561122b5761122385858381811061121657611216612fc8565b9050602002013584611d22565b6001016111f9565b505060018055505050565b6002600154036112585760405162461bcd60e51b8152600401610c749061300a565b60026001558060005b818110156112925761128a84848381811061127e5761127e612fc8565b90506020020135611edc565b600101611261565b5050600180555050565b60008181526007602052604080822081516101208101909252805483929190829060ff1660038111156112d1576112d1612e5f565b60038111156112e2576112e2612e5f565b815281546001600160a01b036101009182900416602083015260018301546040830152600283015460608301526003830154608080840191909152600484015460a0840152600584015460c0840152600684015460e08401526007909301549101528101519091506000906014111561137357601282608001516014811061136c5761136c612fc8565b0154611394565b6012611381600160146130dc565b6014811061139157611391612fc8565b01545b905060008160008460800151116113af5783604001516113b5565b8360a001515b6113bf90426130dc565b6113c99190612ef3565b9050600454426113d991906130c9565b836040015110156114cb5760008360400151600454426113f991906130c9565b61140391906130dc565b905060646249d400821061141a575061038461149a565b62409980821061142d575061032061149a565b62375f00821061144057506102bc61149a565b622e24808210611453575061025861149a565b6224ea00821061146657506101f461149a565b621baf808210611479575061019061149a565b62127500821061148c575061012c61149a565b62093a80821061149a575060c85b60006114a68285612ef3565b905060006114b682612710612233565b91506114c4905081866130dc565b9450505050505b949350505050565b6114db611a58565b80600c60008460038111156114f2576114f2612e5f565b600381111561150357611503612e5f565b815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b031602179055505050565b60026001540361155b5760405162461bcd60e51b8152600401610c749061300a565b600260015561156981610a7c565b34146115875760405162461bcd60e51b8152600401610c7490613092565b6115918282611d22565b505060018055565b6115a1611a58565b601481146115e25760405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b6044820152606401610c74565b8060005b818110156116245783838281811061160057611600612fc8565b905060200201356012826014811061161a5761161a612fc8565b01556001016115e6565b50505050565b606060026001540361164e5760405162461bcd60e51b8152600401610c749061300a565b6002600155600e54839061166184610a7c565b61166b91906130c9565b6116759190612ef3565b34146116935760405162461bcd60e51b8152600401610c7490613092565b8267ffffffffffffffff8111156116ac576116ac612fb2565b6040519080825280602002602001820160405280156116d5578160200160208202803683370190505b50905060005b83811015611711576116ec83612267565b8282815181106116fe576116fe612fc8565b60209081029190910101526001016116db565b506001805592915050565b611724611a58565b80600b6000846003811115610be357610be3612e5f565b60026001540361175d5760405162461bcd60e51b8152600401610c749061300a565b60026001558060005b818110156112925761178f84848381811061178357611783612fc8565b905060200201356125c4565b600101611766565b6002600154036117b95760405162461bcd60e51b8152600401610c749061300a565b60026001556117c7816125c4565b5060018055565b601281601481106117de57600080fd5b0154905081565b60006002600154036118095760405162461bcd60e51b8152600401610c749061300a565b6002600155600e5461181a83610a7c565b61182491906130c9565b34146118425760405162461bcd60e51b8152600401610c7490613092565b61184b82612267565b6001805592915050565b61185d611a58565b6001600160a01b0381166118c25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c74565b610ea981611cd2565b6118d3611a58565b601155565b6002600154036118fa5760405162461bcd60e51b8152600401610c749061300a565b60026001556117c781611edc565b611910611a58565b60008181526007602090815260408083205461010090046001600160a01b031683526008825280832054848452600a909252909120548082146119955760008381526007602090815260408083205461010090046001600160a01b03168352600982528083208584528252808320548484528184208190558352600a90915290208190555b6000838152600a602090815260408083208390556007825280832080546001600160a01b036101009182900481168652600985528386208887528552838620869055915404168352600890915281208054916119f0836130ef565b909155505060068054906000611a05836130ef565b909155505050600091825250600760208190526040822080546001600160a81b03191681556001810183905560028101839055600381018390556004810183905560058101839055600681018390550155565b6000546001600160a01b0316331461119a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c74565b60025460009061ffff16831115611afd5760405162461bcd60e51b815260206004820152600f60248201526e546f6f206d616e79206d6f6e74687360881b6044820152606401610c74565b6006805460018082019092556001600160a01b0386166000908152600860205260408120805493840190559091908080866003811115611b3f57611b3f612e5f565b14611b8b57429150600b6000876003811115611b5d57611b5d612e5f565b6003811115611b6e57611b6e612e5f565b81526020019081526020016000205442611b8891906130c9565b90505b604051806101200160405280876003811115611ba957611ba9612e5f565b81526001600160a01b038a166020820152426040820152606001611bd08962278d00612ef3565b611bda90426130c9565b8152600060208083018290526040808401839052606084018790526080840186905260a0909301829052878252600790522081518154829060ff19166001836003811115611c2a57611c2a612e5f565b02179055506020828101518254610100600160a81b0319166101006001600160a01b0392831681029190911784556040808601516001860155606086015160028601556080860151600386015560a0860151600486015560c0860151600586015560e086015160068601559401516007909301929092559916600090815260098a528181208582528a52818120869055858152600a9099529097209190915550949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000828152600760205260409020805461010090046001600160a01b03163314611d5e5760405162461bcd60e51b8152600401610c7490613041565b426003548260020154611d7191906130c9565b1015611db65760405162461bcd60e51b815260206004820152601460248201527311dc9858d9481c195c9a5bd908195e1c1a5c995960621b6044820152606401610c74565b60008160020154421115611de55762278d00826001015442611dd891906130dc565b611de2919061311c565b90505b60025461ffff16611df682856130c9565b1115611e365760405162461bcd60e51b815260206004820152600f60248201526e546f6f206d616e79206d6f6e74687360881b6044820152606401610c74565b6027546000906001600160a01b0316611e4e85610a7c565b604051600081818185875af1925050503d8060008114611e8a576040519150601f19603f3d011682016040523d82523d6000602084013e611e8f565b606091505b5050905080611eb05760405162461bcd60e51b8152600401610c7490612fde565b611ebd8462278d00612ef3565b836002016000828254611ed091906130c9565b90915550505050505050565b6000818152600760205260409020805461010090046001600160a01b03163314611f185760405162461bcd60e51b8152600401610c7490613041565b6000815460ff166003811115611f3057611f30612e5f565b03611f6e5760405162461bcd60e51b815260206004820152600e60248201526d135d5cdd081899481b595c99d95960921b6044820152606401610c74565b42816002015411611f915760405162461bcd60e51b8152600401610c749061306c565b600554816005015442611fa491906130dc565b11611fe85760405162461bcd60e51b815260206004820152601460248201527310d85b9b9bdd0818db185a5b48115512081e595d60621b6044820152606401610c74565b8054600c9060009060ff16600381111561200457612004612e5f565b600381111561201557612015612e5f565b81526020810191909152604090810160002054905163298ca82560e11b81523360048201526001600160a01b0390911690635319504a90602401600060405180830381600087803b15801561206957600080fd5b505af115801561207d573d6000803e3d6000fd5b5050505042816006015411610de95780546001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb903390600d9060009060ff1660038111156120db576120db612e5f565b60038111156120ec576120ec612e5f565b8152602001908152602001600020546040518363ffffffff1660e01b815260040161212c9291906001600160a01b03929092168252602082015260400190565b6020604051808303816000875af115801561214b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216f9190612f23565b61217857600080fd5b8054600c9060009060ff16600381111561219457612194612e5f565b60038111156121a5576121a5612e5f565b81526020810191909152604090810160002054825491516322179b6160e21b81526101009092046001600160a01b039081166004840152169063885e6d8490602401600060405180830381600087803b15801561220157600080fd5b505af1158015612215573d6000803e3d6000fd5b5050825460ff19168355505060006005820181905560069091015550565b6000808260000361224957506000905080612260565b600183858161225a5761225a613106565b04915091505b9250929050565b60025433600090815260086020526040812054909162010000900461ffff16116122c95760405162461bcd60e51b8152602060048201526013602482015272546f6f206d616e79206d657267656e6f64657360681b6044820152606401610c74565b6000821180156122df575060025461ffff168211155b6123205760405162461bcd60e51b81526020600482015260126024820152714d75737420626520312d36206d6f6e74687360701b6044820152606401610c74565b601154604051631adb232f60e21b815233600482015260248101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636b6c8cbc906044016020604051808303816000875af1158015612391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b59190612f23565b6123f45760405162461bcd60e51b815260206004820152601060248201526f2737ba1030b13632903a3790313ab93760811b6044820152606401610c74565b602754600e546000916001600160a01b03169061241085610a7c565b61241a91906130c9565b604051600081818185875af1925050503d8060008114612456576040519150601f19603f3d011682016040523d82523d6000602084013e61245b565b606091505b505090508061247c5760405162461bcd60e51b8152600401610c7490612fde565b60068054600180820190925533600090815260086020526040808220805494850190558051610120810190915291929190819081523360208201524260408201526060016124cd8762278d00612ef3565b6124d790426130c9565b8152600060208083018290526040808401839052606084018390526080840183905260a0909301829052858252600790522081518154829060ff1916600183600381111561252757612527612e5f565b02179055506020828101518254610100600160a81b0319166101006001600160a01b0390921682021783556040808501516001850155606085015160028501556080850151600385015560a0850151600485015560c0850151600585015560e08501516006850155930151600790920191909155336000908152600982528281208482528252828120859055848152600a90915220559392505050565b6000818152600760205260409020805461010090046001600160a01b031633146126005760405162461bcd60e51b8152600401610c7490613041565b6000815460ff16600381111561261857612618612e5f565b146126585760405162461bcd60e51b815260206004820152601060248201526f135d5cdd081899481d5b9b595c99d95960821b6044820152606401610c74565b4281600201541161267b5760405162461bcd60e51b8152600401610c749061306c565b60006126868361129c565b90506126918161274b565b60405163a9059cbb60e01b8152336004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015612701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127259190612f23565b506003820180549060006127388361313e565b9190505550428260040181905550505050565b6029546000908190612710906127659061ffff1685612ef3565b61276f919061311c565b60408051600280825260608201835292935060009290916020830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000816000815181106127c9576127c9612fc8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000008160018151811061281d5761281d612fc8565b6001600160a01b039283166020918202929092010152604051635c11d79560e01b81527f000000000000000000000000000000000000000000000000000000000000000090911690635c11d79590612882908590600090869030904290600401613157565b600060405180830381600087803b15801561289c57600080fd5b505af11580156128b0573d6000803e3d6000fd5b50506040516370a0823160e01b815230600482015260009250600291506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561291e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129429190612f0a565b61294c919061311c565b60265460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af11580156129c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129e59190612f23565b5060285460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303816000875af1158015612a5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a7e9190612f23565b50612a8983866130dc565b95945050505050565b803561ffff81168114612aa457600080fd5b919050565b600060208284031215612abb57600080fd5b612ac482612a92565b9392505050565b600060208284031215612add57600080fd5b5035919050565b803560048110612aa457600080fd5b600060208284031215612b0557600080fd5b612ac482612ae4565b6001600160a01b0381168114610ea957600080fd5b60008060408385031215612b3657600080fd5b8235612b4181612b0e565b91506020830135612b5181612b0e565b809150509250929050565b60008060008060808587031215612b7257600080fd5b843593506020850135925060408501359150612b9060608601612a92565b905092959194509250565b600080600060608486031215612bb057600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612bda57600080fd5b612be383612ae4565b946020939093013593505050565b600060608284031215612c0357600080fd5b50919050565b60008083601f840112612c1b57600080fd5b50813567ffffffffffffffff811115612c3357600080fd5b6020830191508360208260051b850101111561226057600080fd5b60008060008060008060608789031215612c6757600080fd5b863567ffffffffffffffff80821115612c7f57600080fd5b612c8b8a838b01612c09565b90985096506020890135915080821115612ca457600080fd5b612cb08a838b01612c09565b90965094506040890135915080821115612cc957600080fd5b50612cd689828a01612c09565b979a9699509497509295939492505050565b6020808252825182820181905260009190848201906040850190845b81811015612d2057835183529284019291840191600101612d04565b50909695505050505050565b600060208284031215612d3e57600080fd5b8135612ac481612b0e565b60008060408385031215612d5c57600080fd5b82359150612d6c60208401612ae4565b90509250929050565b600080600060408486031215612d8a57600080fd5b833567ffffffffffffffff811115612da157600080fd5b612dad86828701612c09565b909790965060209590950135949350505050565b60008060208385031215612dd457600080fd5b823567ffffffffffffffff811115612deb57600080fd5b612df785828601612c09565b90969095509350505050565b60008060408385031215612e1657600080fd5b612b4183612ae4565b60008060408385031215612e3257600080fd5b8235612be381612b0e565b60008060408385031215612e5057600080fd5b50508035926020909101359150565b634e487b7160e01b600052602160045260246000fd5b610120810160048b10612e9857634e487b7160e01b600052602160045260246000fd5b9981526001600160a01b0398909816602089015260408801969096526060870194909452608086019290925260a085015260c084015260e08301526101009091015290565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610a8c57610a8c612edd565b600060208284031215612f1c57600080fd5b5051919050565b600060208284031215612f3557600080fd5b81518015158114612ac457600080fd5b80546001600160a01b0319166001600160a01b0392909216919091179055565b8135612f7081612b0e565b612f7a8183612f45565b506020820135612f8981612b0e565b612f968160018401612f45565b506040820135612fa581612b0e565b610b7b8160028401612f45565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b602080825260129082015271086deead8c840dcdee840e6cadcc8408aa8960731b604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6020808252601190820152700496e76616c6964206f776e65727368697607c1b604082015260600190565b6020808252600c908201526b139bd91948195e1c1a5c995960a21b604082015260600190565b6020808252601c908201527f496e76616c69642045746865722076616c75652070726f766964656400000000604082015260600190565b80820180821115610a8c57610a8c612edd565b81810381811115610a8c57610a8c612edd565b6000816130fe576130fe612edd565b506000190190565b634e487b7160e01b600052601260045260246000fd5b60008261313957634e487b7160e01b600052601260045260246000fd5b500490565b60006001820161315057613150612edd565b5060010190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156131a75784516001600160a01b031683529383019391830191600101613182565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212207b57277194e0475d022c085c669c7c62ee57b0520fa06526469cfe851de1e90364736f6c6343000811003360c06040526ec097ce7bc90715b34b9f1000000000600a5534801561002357600080fd5b50604051610faf380380610faf833981016040819052610042916100b1565b61004b33610061565b61005482610061565b3360805260a052506100eb565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156100c457600080fd5b82516001600160a01b03811681146100db57600080fd5b6020939093015192949293505050565b60805160a051610e9161011e6000396000610a740152600081816103550152818161059301526107ee0152610e916000f3fe6080604052600436106100fe5760003560e01c8063885e6d8411610095578063ce7c2ac211610064578063ce7c2ac214610284578063d0e30db0146102f6578063e2d2e219146102fe578063efca2eed14610314578063f2fde38b1461032a57600080fd5b8063885e6d84146102065780638da5cb5b14610226578063997664d71461024e578063a5978c661461026457600080fd5b80635319504a116100d15780635319504a14610184578063690d8320146101a4578063715018a6146101c457806377dd2037146101d957600080fd5b806311ce023d1461010357806339d4d6861461012c5780633a98ef391461014e5780633aeac4e114610164575b600080fd5b34801561010f57600080fd5b50610119600a5481565b6040519081526020015b60405180910390f35b34801561013857600080fd5b5061014c610147366004610caa565b61034a565b005b34801561015a57600080fd5b5061011960065481565b34801561017057600080fd5b5061014c61017f366004610cd6565b61049a565b34801561019057600080fd5b5061014c61019f366004610d0f565b610588565b3480156101b057600080fd5b5061014c6101bf366004610d0f565b61072f565b3480156101d057600080fd5b5061014c6107cf565b3480156101e557600080fd5b506101196101f4366004610d0f565b60046020526000908152604090205481565b34801561021257600080fd5b5061014c610221366004610d0f565b6107e3565b34801561023257600080fd5b506000546040516001600160a01b039091168152602001610123565b34801561025a57600080fd5b5061011960075481565b34801561027057600080fd5b5061011961027f366004610d0f565b6108d7565b34801561029057600080fd5b506102ce61029f366004610d0f565b600560205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b604080519586526020860194909452928401919091526060830152608082015260a001610123565b61014c61096f565b34801561030a57600080fd5b5061011960095481565b34801561032057600080fd5b5061011960085481565b34801561033657600080fd5b5061014c610345366004610d0f565b6109c7565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461037f57600080fd5b6001600160a01b03821660009081526005602052604081205490036103fa57600180546001600160a01b03841660008181526002602052604081208390558284018455929092527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b03191690911790555b6006805490600061040a83610d49565b90915550506001600160a01b038216600090815260056020526040812080549161043383610d49565b90915550506001600160a01b0382166000908152600560205260409020600481018290554260038201819055905461046b9183610a40565b6001600160a01b03831660009081526005602052604090206001018190551561049657610496610d62565b5050565b6104a2610ad8565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a0823190602401602060405180830381865afa1580156104f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105149190610d78565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561055f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105839190610d91565b505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105bd57600080fd5b60006105c8826108d7565b90508015610496576001600160a01b0382166000908152600560205260409020805460038201546004909201546105ff9290610a40565b6001600160a01b0383166000908152600560205260408120600181019290925560029091018054839290610634908490610db3565b92505081905550806008600082825461064d9190610db3565b90915550506040516000906001600160a01b0384169083908381818185875af1925050503d806000811461069d576040519150601f19603f3d011682016040523d82523d6000602084013e6106a2565b606091505b50509050806106ed5760405162461bcd60e51b8152602060048201526012602482015271086deead8c840dcdee840e6cadcc8408aa8960731b60448201526064015b60405180910390fd5b6001600160a01b038316600090815260046020526040902054610711908390610db3565b6001600160a01b038416600090815260046020526040902055505050565b610737610ad8565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610784576040519150601f19603f3d011682016040523d82523d6000602084013e610789565b606091505b50509050806104965760405162461bcd60e51b8152602060048201526012602482015271086deead8c840dcdee840e6cadcc8408aa8960731b60448201526064016106e4565b6107d7610ad8565b6107e16000610b32565b565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461081857600080fd5b6001600160a01b0381166000908152600560205260409020546001036108415761084181610b82565b6006805490600061085183610dcc565b90915550506001600160a01b03811660009081526005602052604090208054600390910154610881919080610a40565b6001600160a01b03821660009081526005602052604081206001810192909255815491906108ae83610dcc565b90915550506001600160a01b031660009081526005602052604081206003810182905560040155565b6001600160a01b03811660009081526005602052604081205481036108fe57506000919050565b6001600160a01b03821660009081526005602052604081208054600382015460049092015461092d9290610a40565b6001600160a01b03841660009081526005602052604090206001015490915080821161095d575060009392505050565b6109678183610de3565b949350505050565b610977610ad8565b6000349050806007600082825461098e9190610db3565b9091555050600654600a546109a4908390610df6565b6109ae9190610e0d565b600960008282546109bf9190610db3565b909155505050565b6109cf610ad8565b6001600160a01b038116610a345760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106e4565b610a3d81610b32565b50565b600042821115610a4e574291505b6000600a5460095486610a619190610df6565b610a6b9190610e0d565b90506000610a997f000000000000000000000000000000000000000000000000000000000000000086610db3565b90506000610aa78683610de3565b90506000610ab58787610de3565b905081610ac28286610df6565b610acc9190610e0d565b98975050505050505050565b6000546001600160a01b031633146107e15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106e4565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60018054610b91908290610de3565b81548110610ba157610ba1610e2f565b60009182526020808320909101546001600160a01b0384811684526002909252604090922054600180549290931692918110610bdf57610bdf610e2f565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260029182905260408120546001805491939291610c2a908290610de3565b81548110610c3a57610c3a610e2f565b60009182526020808320909101546001600160a01b031683528201929092526040019020556001805480610c7057610c70610e45565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6001600160a01b0381168114610a3d57600080fd5b60008060408385031215610cbd57600080fd5b8235610cc881610c95565b946020939093013593505050565b60008060408385031215610ce957600080fd5b8235610cf481610c95565b91506020830135610d0481610c95565b809150509250929050565b600060208284031215610d2157600080fd5b8135610d2c81610c95565b9392505050565b634e487b7160e01b600052601160045260246000fd5b600060018201610d5b57610d5b610d33565b5060010190565b634e487b7160e01b600052600160045260246000fd5b600060208284031215610d8a57600080fd5b5051919050565b600060208284031215610da357600080fd5b81518015158114610d2c57600080fd5b80820180821115610dc657610dc6610d33565b92915050565b600081610ddb57610ddb610d33565b506000190190565b81810381811115610dc657610dc6610d33565b8082028115828204841417610dc657610dc6610d33565b600082610e2a57634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fdfea26469706673582212207018f3a0bbcffcf829fb036b147dca2d74efe088f1432183d74194b5e208d32e64736f6c63430008110033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c40b44792710d89cdae0b2c21c5aec9257cd2cd9
Deployed Bytecode
0x6080604052600436106103a65760003560e01c8063715018a6116101e7578063a75dff841161010d578063dd395c63116100a0578063ee7bf5e21161006f578063ee7bf5e214610d2d578063f2fde38b14610d4e578063f887ea4014610d6e578063f8b45b0514610da257600080fd5b8063dd395c6314610c9f578063dd62ed3e14610cbf578063dec1cfc414610cf7578063e35a3d7c14610d1757600080fd5b8063af06795a116100dc578063af06795a14610c1e578063b55b8e0714610c3e578063c2e5ec0414610c5f578063cdae6b7a14610c7f57600080fd5b8063a75dff8414610b6d578063a8aa1b3114610b96578063a9059cbb14610bca578063ad5c464814610bea57600080fd5b806395d89b41116101855780639dc29fac116101545780639dc29fac14610af35780639fd6db1214610b13578063a0712d6814610b2d578063a0d2758414610b4d57600080fd5b806395d89b411461098857806399c8d556146109b95780639af1d35a146109da5780639cece12e14610ac357600080fd5b8063880934fd116101c1578063880934fd146108e657806389a30271146109065780638da5cb5b1461093a5780639571a07d1461095857600080fd5b8063715018a614610881578063760aa73314610896578063807fb8c5146108b657600080fd5b80633aeac4e1116102cc578063604aea6b1161026a578063682373291161023957806368237329146107fe578063690d8320146108145780636b6c8cbc1461083457806370a082311461085457600080fd5b8063604aea6b14610789578063658d4b7f146107a957806366c4390d146107c9578063677a1173146107de57600080fd5b806348b98ef5116102a657806348b98ef5146107095780634ada218b1461072a5780634d7547151461074a5780635d0044ca1461076957600080fd5b80633aeac4e11461069f5780633f4218e0146106bf5780633fc645b5146106ef57600080fd5b80631ff7637f1161034457806336203f481161031357806336203f481461060c57806336c3f71a1461062157806337bfc1ef1461065157806338db59541461067f57600080fd5b80631ff7637f1461058557806323b872dd146105a5578063313ce567146105c5578063319f5f6a146105ec57600080fd5b8063095ea7b311610380578063095ea7b3146104555780630adfdcb9146104855780630fb896a81461054d57806318160ddd1461056f57600080fd5b806301346266146103b2578063069f22ec146103ef57806306fdde031461041357600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506004546103d2906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156103fb57600080fd5b5061040560195481565b6040519081526020016103e6565b34801561041f57600080fd5b506104486040518060400160405280600981526020016813595c99d9541bdbdb60ba1b81525081565b6040516103e69190612797565b34801561046157600080fd5b506104756104703660046127fa565b610db8565b60405190151581526020016103e6565b34801561049157600080fd5b50600c54600d54600e54600f546010546011546012546013546014546015546016546104e29a6001600160a01b039081169a811699811698811697811696811695811694811693811692811691168b565b604080516001600160a01b039c8d1681529a8c1660208c0152988b16988a01989098529589166060890152938816608088015291871660a0870152861660c0860152851660e085015284166101008401528316610120830152909116610140820152610160016103e6565b34801561055957600080fd5b5061056d610568366004612826565b610e25565b005b34801561057b57600080fd5b5061040560015481565b34801561059157600080fd5b5061056d6105a036600461285c565b610e5d565b3480156105b157600080fd5b506104756105c0366004612879565b610e77565b3480156105d157600080fd5b506105da601281565b60405160ff90911681526020016103e6565b3480156105f857600080fd5b5061056d6106073660046128ca565b610ee9565b34801561061857600080fd5b5061056d610f11565b34801561062d57600080fd5b5061047561063c366004612826565b600b6020526000908152604090205460ff1681565b34801561065d57600080fd5b5060185461066c9061ffff1681565b60405161ffff90911681526020016103e6565b34801561068b57600080fd5b5061056d61069a366004612826565b610f26565b3480156106ab57600080fd5b5061056d6106ba3660046128e7565b610faa565b3480156106cb57600080fd5b506104756106da366004612826565b60086020526000908152604090205460ff1681565b3480156106fb57600080fd5b50601d546104759060ff1681565b34801561071557600080fd5b5060185461047590600160201b900460ff1681565b34801561073657600080fd5b50601b546104759062010000900460ff1681565b34801561075657600080fd5b50601b5461047590610100900460ff1681565b34801561077557600080fd5b5061056d610784366004612920565b611093565b34801561079557600080fd5b5061056d6107a4366004612939565b6110a0565b3480156107b557600080fd5b5061056d6107c43660046129bc565b611118565b3480156107d557600080fd5b5061056d61114b565b3480156107ea57600080fd5b5061056d6107f9366004612920565b61115f565b34801561080a57600080fd5b5061066c61271081565b34801561082057600080fd5b5061056d61082f366004612826565b61117f565b34801561084057600080fd5b5061047561084f3660046127fa565b611207565b34801561086057600080fd5b5061040561086f366004612826565b60026020526000908152604090205481565b34801561088d57600080fd5b5061056d611383565b3480156108a257600080fd5b5061056d6108b13660046129ea565b611397565b3480156108c257600080fd5b506104756108d1366004612826565b60096020526000908152604090205460ff1681565b3480156108f257600080fd5b5061056d61090136600461285c565b6113bd565b34801561091257600080fd5b506103d27f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881565b34801561094657600080fd5b506000546001600160a01b03166103d2565b34801561096457600080fd5b50610475610973366004612826565b60076020526000908152604090205460ff1681565b34801561099457600080fd5b5061044860405180604001604052806005815260200164135413d3d360da1b81525081565b3480156109c557600080fd5b5060185461066c9062010000900461ffff1681565b3480156109e657600080fd5b50601754610a5d9061ffff80821691620100008104821691600160201b820481169166010000000000008104821691600160401b8204811691600160501b8104821691600160601b8204811691600160701b8104821691600160801b8204811691600160901b8104821691600160a01b909104168b565b6040805161ffff9c8d1681529a8c1660208c0152988b16988a01989098529589166060890152938816608088015291871660a0870152861660c0860152851660e085015284166101008401528316610120830152909116610140820152610160016103e6565b348015610acf57600080fd5b50610475610ade366004612826565b600a6020526000908152604090205460ff1681565b348015610aff57600080fd5b50610475610b0e3660046127fa565b611506565b348015610b1f57600080fd5b50601b546104759060ff1681565b348015610b3957600080fd5b5061056d610b48366004612920565b611605565b348015610b5957600080fd5b5061056d610b68366004612a07565b6116a4565b348015610b7957600080fd5b50601b546103d2906501000000000090046001600160a01b031681565b348015610ba257600080fd5b506103d27f000000000000000000000000c628144075b311a37671eee9d59b1e5021ceacd581565b348015610bd657600080fd5b50610475610be53660046127fa565b6116d2565b348015610bf657600080fd5b506103d27f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281565b348015610c2a57600080fd5b5061056d610c393660046129bc565b6116df565b348015610c4a57600080fd5b50601b54610475906301000000900460ff1681565b348015610c6b57600080fd5b5061056d610c7a3660046129ea565b611712565b348015610c8b57600080fd5b5061056d610c9a3660046129bc565b611736565b348015610cab57600080fd5b5061056d610cba3660046129bc565b611769565b348015610ccb57600080fd5b50610405610cda3660046128e7565b600360209081526000928352604080842090915290825290205481565b348015610d0357600080fd5b5061056d610d123660046129ea565b61179c565b348015610d2357600080fd5b50610405601a5481565b348015610d3957600080fd5b50601b5461047590600160201b900460ff1681565b348015610d5a57600080fd5b5061056d610d69366004612826565b6117c3565b348015610d7a57600080fd5b506103d27f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610dae57600080fd5b5061040560065481565b3360008181526003602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610e139086815260200190565b60405180910390a35060015b92915050565b610e2d61183c565b601b80546001600160a01b03909216650100000000000265010000000000600160c81b0319909216919091179055565b610e6561183c565b80600c610e728282612a69565b505050565b6001600160a01b03831660009081526003602090815260408083203384529091528120546000198114610ed357610eae8382612b84565b6001600160a01b03861660009081526003602090815260408083203384529091529020555b610ede858585611896565b9150505b9392505050565b610ef161183c565b6018805461ffff909216620100000263ffff000019909216919091179055565b610f1961183c565b601b805461ff0019169055565b610f2e61183c565b600480546001600160a01b039283166001600160a01b0319918216811790925560058054909116821781556000918252600760209081526040808420805460ff19908116600190811790925584548716865260088452828620805482168317905593549095168452600990915290912080549091169091179055565b610fb261183c565b6040516370a0823160e01b81523060048201526001600160a01b0383169063a9059cbb90839083906370a0823190602401602060405180830381865afa158015611000573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110249190612b97565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801561106f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e729190612bb0565b61109b61183c565b600655565b6110a861183c565b60005b81811015610e72576001600b60008585858181106110cb576110cb612bcd565b90506020020160208101906110e09190612826565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561111181612be3565b90506110ab565b61112061183c565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b61115361183c565b601b805460ff19169055565b61116761183c565b61117981670de0b6b3a7640000612bfc565b601c5550565b61118761183c565b6000816001600160a01b03164760405160006040518083038185875af1925050503d80600081146111d4576040519150601f19603f3d011682016040523d82523d6000602084013e6111d9565b606091505b50509050806112035760405162461bcd60e51b81526004016111fa90612c13565b60405180910390fd5b5050565b6004546000906001600160a01b031633146112725760405162461bcd60e51b815260206004820152602560248201527f4f6e6c7920746865204d65726765204e6f646520636f6e74726163742063616e60448201526410313ab93760d91b60648201526084016111fa565b6001600160a01b0383166000908152600260205260409020548211156112aa5760405162461bcd60e51b81526004016111fa90612c3f565b6001600160a01b03831660009081526003602090815260408083203384529091529020546000198114611306576112e18382612b84565b6001600160a01b03851660009081526003602090815260408083203384529091529020555b82600160008282546113189190612b84565b90915550506001600160a01b03841660009081526002602052604081208054859290611345908490612b84565b90915550506040518381526000906001600160a01b03861690600080516020612f4d8339815191529060200160405180910390a35060019392505050565b61138b61183c565b6113956000611d35565b565b61139f61183c565b601b805491151563010000000263ff00000019909216919091179055565b6113c561183c565b8060176113d28282612c90565b506113e79050610160820161014083016128ca565b6113f9610140830161012084016128ca565b61140b610120840161010085016128ca565b61141c610100850160e086016128ca565b61142c60e0860160c087016128ca565b61143c60c0870160a088016128ca565b61144c60a08801608089016128ca565b61145c6080890160608a016128ca565b61146c60608a0160408b016128ca565b61147c60408b0160208c016128ca565b61148960208c018c6128ca565b6114939190612e84565b61149d9190612e84565b6114a79190612e84565b6114b19190612e84565b6114bb9190612e84565b6114c59190612e84565b6114cf9190612e84565b6114d99190612e84565b6114e39190612e84565b6114ed9190612e84565b6018805461ffff191661ffff9290921691909117905550565b600061151061183c565b601b54610100900460ff1661155d5760405162461bcd60e51b8152602060048201526013602482015272109d5c9b9a5b99c81a5cc8191a5cd8589b1959606a1b60448201526064016111fa565b6001600160a01b0383166000908152600260205260409020548211156115955760405162461bcd60e51b81526004016111fa90612c3f565b81600160008282546115a79190612b84565b90915550506001600160a01b038316600090815260026020526040812080548492906115d4908490612b84565b90915550506040518281526000906001600160a01b03851690600080516020612f4d83398151915290602001610e13565b61160d61183c565b601b5460ff166116555760405162461bcd60e51b8152602060048201526013602482015272135a5b9d1a5b99c81a5cc8191a5cd8589b1959606a1b60448201526064016111fa565b80600160008282546116679190612ea6565b909155505033600081815260026020908152604080832080548601905551848152600080516020612f4d833981519152910160405180910390a350565b6116ac61183c565b60188054931515600160201b0264ff000000001990941693909317909255601955601a55565b6000610ee2338484611896565b6116e761183c565b6001600160a01b03919091166000908152600760205260409020805460ff1916911515919091179055565b61171a61183c565b601b8054911515620100000262ff000019909216919091179055565b61173e61183c565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b61177161183c565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6117a461183c565b601b8054911515600160201b0264ff0000000019909216919091179055565b6117cb61183c565b6001600160a01b0381166118305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016111fa565b61183981611d35565b50565b6000546001600160a01b031633146113955760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016111fa565b601d5460009060ff16156118b6576118af848484611d85565b9050610ee2565b601b5460009062010000900460ff161580156118eb57506001600160a01b03841660009081526007602052604090205460ff16155b1561195857601b546301000000900460ff161561192b576001600160a01b0384166000908152600b602052604090205460ff16151560010361192b575060015b601b54600160201b900460ff161561195357601c5461194985611ddc565b1115611953575060015b61195c565b5060015b808061198057506001600160a01b03851660009081526007602052604090205460ff165b6119cc5760405162461bcd60e51b815260206004820152601d60248201527f54726164696e672069732063757272656e746c792064697361626c656400000060448201526064016111fa565b6001600160a01b0384166000908152600a602052604081205460ff1680611a2457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316856001600160a01b0316145b905080158015611a4d57506001600160a01b03851660009081526009602052604090205460ff16155b15611ac7576006546001600160a01b038616600090815260026020526040902054611a79908690612ea6565b1115611ac75760405162461bcd60e51b815260206004820152601d60248201527f4d61782077616c6c657420686173206265656e2074726967676572656400000060448201526064016111fa565b808015611ad65750601a548410155b8015611af25750336000908152600a602052604090205460ff16155b8015611b015750601d5460ff16155b8015611b165750601854600160201b900460ff165b8015611b3357506019543060009081526002602052604090205410155b15611b4057611b40611e56565b6001600160a01b03861660009081526002602052604081208054869290611b68908490612b84565b90915550506001600160a01b0386166000908152600a6020526040902054849060ff1680611bc757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316876001600160a01b0316145b80611c2557506001600160a01b0386166000908152600a602052604090205460ff1680611c2557507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316866001600160a01b0316145b611c30576000611c72565b6001600160a01b03871660009081526008602052604090205460ff16158015611c7257506001600160a01b03861660009081526008602052604090205460ff16155b15611c8857611c8187866126a6565b9050611cdc565b6001600160a01b03871660009081526008602052604090205460ff16158015611cca57506001600160a01b03861660009081526008602052604090205460ff16155b15611cdc57611cd98786612728565b90505b6001600160a01b0380871660008181526002602052604090819020805485019055519091891690600080516020612f4d83398151915290611d209085815260200190565b60405180910390a35060019695505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038316600090815260026020526040812080548391908390611daf908490612b84565b9091555050506001600160a01b038216600090815260026020526040902080548201905560019392505050565b601b546040516370a0823160e01b81526001600160a01b038381166004830152600092650100000000009004169081906370a0823190602401602060405180830381865afa158015611e32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ee29190612b97565b601d805460ff1916600117905560408051600380825260808201909252479160009190602082016060803683370190505090503081600081518110611e9d57611e9d612bcd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4881600181518110611ef157611ef1612bcd565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc281600281518110611f4557611f45612bcd565b6001600160a01b039283166020918202929092018101919091523060008181526002909252604080832054905163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9094169363791ac94793611fba9390918791904290600401612eb9565b600060405180830381600087803b158015611fd457600080fd5b505af1158015611fe8573d6000803e3d6000fd5b5050505060008247611ffa9190612b84565b905061271081111561269757600c546017546000916001600160a01b0316906127109061202b9061ffff1685612bfc565b6120359190612f2a565b604051600081818185875af1925050503d8060008114612071576040519150601f19603f3d011682016040523d82523d6000602084013e612076565b606091505b505080915050806120995760405162461bcd60e51b81526004016111fa90612c13565b600d546017546001600160a01b0390911690612710906120c39062010000900461ffff1685612bfc565b6120cd9190612f2a565b604051600081818185875af1925050503d8060008114612109576040519150601f19603f3d011682016040523d82523d6000602084013e61210e565b606091505b505080915050806121315760405162461bcd60e51b81526004016111fa90612c13565b600e546017546001600160a01b03909116906127109061215c90600160201b900461ffff1685612bfc565b6121669190612f2a565b604051600081818185875af1925050503d80600081146121a2576040519150601f19603f3d011682016040523d82523d6000602084013e6121a7565b606091505b505080915050806121ca5760405162461bcd60e51b81526004016111fa90612c13565b600f546017546001600160a01b0390911690612710906121f8906601000000000000900461ffff1685612bfc565b6122029190612f2a565b604051600081818185875af1925050503d806000811461223e576040519150601f19603f3d011682016040523d82523d6000602084013e612243565b606091505b505080915050806122665760405162461bcd60e51b81526004016111fa90612c13565b6010546017546001600160a01b03909116906127109061229190600160401b900461ffff1685612bfc565b61229b9190612f2a565b604051600081818185875af1925050503d80600081146122d7576040519150601f19603f3d011682016040523d82523d6000602084013e6122dc565b606091505b505080915050806122ff5760405162461bcd60e51b81526004016111fa90612c13565b6011546017546001600160a01b03909116906127109061232a90600160501b900461ffff1685612bfc565b6123349190612f2a565b604051600081818185875af1925050503d8060008114612370576040519150601f19603f3d011682016040523d82523d6000602084013e612375565b606091505b505080915050806123985760405162461bcd60e51b81526004016111fa90612c13565b6012546017546001600160a01b0390911690612710906123c390600160601b900461ffff1685612bfc565b6123cd9190612f2a565b604051600081818185875af1925050503d8060008114612409576040519150601f19603f3d011682016040523d82523d6000602084013e61240e565b606091505b505080915050806124315760405162461bcd60e51b81526004016111fa90612c13565b6013546017546001600160a01b03909116906127109061245c90600160701b900461ffff1685612bfc565b6124669190612f2a565b604051600081818185875af1925050503d80600081146124a2576040519150601f19603f3d011682016040523d82523d6000602084013e6124a7565b606091505b505080915050806124ca5760405162461bcd60e51b81526004016111fa90612c13565b6014546017546001600160a01b0390911690612710906124f590600160801b900461ffff1685612bfc565b6124ff9190612f2a565b604051600081818185875af1925050503d806000811461253b576040519150601f19603f3d011682016040523d82523d6000602084013e612540565b606091505b505080915050806125635760405162461bcd60e51b81526004016111fa90612c13565b6015546017546001600160a01b03909116906127109061258e90600160901b900461ffff1685612bfc565b6125989190612f2a565b604051600081818185875af1925050503d80600081146125d4576040519150601f19603f3d011682016040523d82523d6000602084013e6125d9565b606091505b505080915050806125fc5760405162461bcd60e51b81526004016111fa90612c13565b6016546017546001600160a01b03909116906127109061262790600160a01b900461ffff1685612bfc565b6126319190612f2a565b604051600081818185875af1925050503d806000811461266d576040519150601f19603f3d011682016040523d82523d6000602084013e612672565b606091505b505080915050806126955760405162461bcd60e51b81526004016111fa90612c13565b505b5050601d805460ff1916905550565b6018546000908190612710906126c09061ffff1685612bfc565b6126ca9190612f2a565b306000818152600260205260409081902080548401905551919250906001600160a01b03861690600080516020612f4d8339815191529061270e9085815260200190565b60405180910390a36127208184612b84565b949350505050565b6018546000908190612710906127489062010000900461ffff1685612bfc565b6127529190612f2a565b905080600160008282546127669190612b84565b90915550506040518381526000906001600160a01b03861690600080516020612f4d8339815191529060200161270e565b600060208083528351808285015260005b818110156127c4578581018301518582016040015282016127a8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461183957600080fd5b6000806040838503121561280d57600080fd5b8235612818816127e5565b946020939093013593505050565b60006020828403121561283857600080fd5b8135610ee2816127e5565b6000610160828403121561285657600080fd5b50919050565b6000610160828403121561286f57600080fd5b610ee28383612843565b60008060006060848603121561288e57600080fd5b8335612899816127e5565b925060208401356128a9816127e5565b929592945050506040919091013590565b61ffff8116811461183957600080fd5b6000602082840312156128dc57600080fd5b8135610ee2816128ba565b600080604083850312156128fa57600080fd5b8235612905816127e5565b91506020830135612915816127e5565b809150509250929050565b60006020828403121561293257600080fd5b5035919050565b6000806020838503121561294c57600080fd5b823567ffffffffffffffff8082111561296457600080fd5b818501915085601f83011261297857600080fd5b81358181111561298757600080fd5b8660208260051b850101111561299c57600080fd5b60209290920196919550909350505050565b801515811461183957600080fd5b600080604083850312156129cf57600080fd5b82356129da816127e5565b91506020830135612915816129ae565b6000602082840312156129fc57600080fd5b8135610ee2816129ae565b600080600060608486031215612a1c57600080fd5b8335612a27816129ae565b95602085013595506040909401359392505050565b60008135610e1f816127e5565b80546001600160a01b0319166001600160a01b0392909216919091179055565b612a7b612a7583612a3c565b82612a49565b612a93612a8a60208401612a3c565b60018301612a49565b612aab612aa260408401612a3c565b60028301612a49565b612ac3612aba60608401612a3c565b60038301612a49565b612adb612ad260808401612a3c565b60048301612a49565b612af3612aea60a08401612a3c565b60058301612a49565b612b0b612b0260c08401612a3c565b60068301612a49565b612b23612b1a60e08401612a3c565b60078301612a49565b612b3c612b336101008401612a3c565b60088301612a49565b612b55612b4c6101208401612a3c565b60098301612a49565b611203612b656101408401612a3c565b600a8301612a49565b634e487b7160e01b600052601160045260246000fd5b81810381811115610e1f57610e1f612b6e565b600060208284031215612ba957600080fd5b5051919050565b600060208284031215612bc257600080fd5b8151610ee2816129ae565b634e487b7160e01b600052603260045260246000fd5b600060018201612bf557612bf5612b6e565b5060010190565b8082028115828204841417610e1f57610e1f612b6e565b602080825260129082015271086deead8c840dcdee840e6cadcc8408aa8960731b604082015260600190565b60208082526024908201527f43616e6e6f74206275726e206d6f7265207468616e20616e206163636f756e746040820152632068617360e01b606082015260800190565b60008135610e1f816128ba565b8135612c9b816128ba565b61ffff811661ffff1983541617825550612cd4612cba60208401612c83565b825463ffff0000191660109190911b63ffff000016178255565b612d01612ce360408401612c83565b825465ffff00000000191660209190911b65ffff0000000016178255565b612d32612d1060608401612c83565b825467ffff000000000000191660309190911b67ffff00000000000016178255565b612d67612d4160808401612c83565b825469ffff0000000000000000191660409190911b69ffff000000000000000016178255565b612d96612d7660a08401612c83565b82805461ffff60501b191660509290921b61ffff60501b16919091179055565b612dc5612da560c08401612c83565b82805461ffff60601b191660609290921b61ffff60601b16919091179055565b612df4612dd460e08401612c83565b82805461ffff60701b191660709290921b61ffff60701b16919091179055565b612e24612e046101008401612c83565b82805461ffff60801b191660809290921b61ffff60801b16919091179055565b612e54612e346101208401612c83565b82805461ffff60901b191660909290921b61ffff60901b16919091179055565b611203612e646101408401612c83565b82805461ffff60a01b191660a09290921b61ffff60a01b16919091179055565b61ffff818116838216019080821115612e9f57612e9f612b6e565b5092915050565b80820180821115610e1f57610e1f612b6e565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612f095784516001600160a01b031683529383019391830191600101612ee4565b50506001600160a01b03969096166060850152505050608001529392505050565b600082612f4757634e487b7160e01b600052601260045260246000fd5b50049056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122078f885f2847f52703cae8b0c84b00564f3fbac8a90b8a42951a66dcf49c3077f64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48000000000000000000000000c40b44792710d89cdae0b2c21c5aec9257cd2cd9
-----Decoded View---------------
Arg [0] : _router (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [1] : _usdc (address): 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48
Arg [2] : _safeBank (address): 0xC40B44792710d89CDaE0b2C21C5aEc9257cd2cD9
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [1] : 000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
Arg [2] : 000000000000000000000000c40b44792710d89cdae0b2c21c5aec9257cd2cd9
Deployed Bytecode Sourcemap
38045:15577:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38569:30;;;;;;;;;;-1:-1:-1;38569:30:0;;;;-1:-1:-1;;;;;38569:30:0;;;;;;-1:-1:-1;;;;;208:32:1;;;190:51;;178:2;163:18;38569:30:0;;;;;;;;39312:44;;;;;;;;;;;;;;;;;;;398:25:1;;;386:2;371:18;39312:44:0;252:177:1;38102:41:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38102:41:0;;;;;;;;;;;;:::i;43314:220::-;;;;;;;;;;-1:-1:-1;43314:220:0;;;;;:::i;:::-;;:::i;:::-;;;1608:14:1;;1601:22;1583:41;;1571:2;1556:18;43314:220:0;1443:187:1;38987:40:0;;;;;;;;;;-1:-1:-1;38987:40:0;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38987:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2119:15:1;;;2101:34;;2171:15;;;2166:2;2151:18;;2144:43;2223:15;;;2203:18;;;2196:43;;;;2275:15;;;2270:2;2255:18;;2248:43;2328:15;;;2322:3;2307:19;;2300:44;2381:15;;;2081:3;2360:19;;2353:44;2434:15;;2428:3;2413:19;;2406:44;2487:15;;2481:3;2466:19;;2459:44;2540:15;;2534:3;2519:19;;2512:44;2593:15;;2587:3;2572:19;;2565:44;2646:16;;;2640:3;2625:19;;2618:45;2050:3;2035:19;38987:40:0;1635:1034:1;52309:112:0;;;;;;;;;;-1:-1:-1;52309:112:0;;;;;:::i;:::-;;:::i;:::-;;38238:39;;;;;;;;;;;;;;;;51841:139;;;;;;;;;;-1:-1:-1;51841:139:0;;;;;:::i;:::-;;:::i;44163:394::-;;;;;;;;;;-1:-1:-1;44163:394:0;;;;;:::i;:::-;;:::i;38196:35::-;;;;;;;;;;;;38229:2;38196:35;;;;;3981:4:1;3969:17;;;3951:36;;3939:2;3924:18;38196:35:0;3809:184:1;51988:77:0;;;;;;;;;;-1:-1:-1;51988:77:0;;;;;:::i;:::-;;:::i;53117:97::-;;;;;;;;;;;;;:::i;38897:47::-;;;;;;;;;;-1:-1:-1;38897:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39063:28;;;;;;;;;;-1:-1:-1;39063:28:0;;;;;;;;;;;4544:6:1;4532:19;;;4514:38;;4502:2;4487:18;39063:28:0;4370:188:1;52696:308:0;;;;;;;;;;-1:-1:-1;52696:308:0;;;;;:::i;:::-;;:::i;53426:156::-;;;;;;;;;;-1:-1:-1;53426:156:0;;;;;:::i;:::-;;:::i;38745:43::-;;;;;;;;;;-1:-1:-1;38745:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39766:37;;;;;;;;;;-1:-1:-1;39766:37:0;;;;;;;;39267:38;;;;;;;;;;-1:-1:-1;39267:38:0;;;;-1:-1:-1;;;39267:38:0;;;;;;39505:34;;;;;;;;;;-1:-1:-1;39505:34:0;;;;;;;;;;;39465:33;;;;;;;;;;-1:-1:-1;39465:33:0;;;;;;;;;;;50298:102;;;;;;;;;;-1:-1:-1;50298:102:0;;;;;:::i;:::-;;:::i;43909:246::-;;;;;;;;;;-1:-1:-1;43909:246:0;;;;;:::i;:::-;;:::i;50549:123::-;;;;;;;;;;-1:-1:-1;50549:123:0;;;;;:::i;:::-;;:::i;53012:97::-;;;;;;;;;;;;;:::i;52429:146::-;;;;;;;;;;-1:-1:-1;52429:146:0;;;;;:::i;:::-;;:::i;39223:35::-;;;;;;;;;;;;39252:6;39223:35;;53222:196;;;;;;;;;;-1:-1:-1;53222:196:0;;;;;:::i;:::-;;:::i;42697:609::-;;;;;;;;;;-1:-1:-1;42697:609:0;;;;;:::i;:::-;;:::i;38286:44::-;;;;;;;;;;-1:-1:-1;38286:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;15438:103;;;;;;;;;;;;;:::i;52073:108::-;;;;;;;;;;-1:-1:-1;52073:108:0;;;;;:::i;:::-;;:::i;38795:43::-;;;;;;;;;;-1:-1:-1;38795:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;51336:497;;;;;;;;;;-1:-1:-1;51336:497:0;;;;;:::i;:::-;;:::i;38445:28::-;;;;;;;;;;;;;;;14790:87;;;;;;;;;;-1:-1:-1;14836:7:0;14863:6;-1:-1:-1;;;;;14863:6:0;14790:87;;38690:48;;;;;;;;;;-1:-1:-1;38690:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;38150:39;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38150:39:0;;;;;39150:23;;;;;;;;;;-1:-1:-1;39150:23:0;;;;;;;;;;;39034:22;;;;;;;;;;-1:-1:-1;39034:22:0;;;;;;;;;;;;;;;-1:-1:-1;;;39034:22:0;;;;;;;;;;;-1:-1:-1;;;39034:22:0;;;;;-1:-1:-1;;;39034:22:0;;;;;-1:-1:-1;;;39034:22:0;;;;;-1:-1:-1;;;39034:22:0;;;;;-1:-1:-1;;;39034:22:0;;;;;-1:-1:-1;;;39034:22:0;;;;;-1:-1:-1;;;39034:22:0;;;;;;;;;;7897:6:1;7930:15;;;7912:34;;7982:15;;;7977:2;7962:18;;7955:43;8034:15;;;8014:18;;;8007:43;;;;8086:15;;;8081:2;8066:18;;8059:43;8139:15;;;8133:3;8118:19;;8111:44;8192:15;;;8186:3;8171:19;;8164:44;8245:15;;8239:3;8224:19;;8217:44;8298:15;;8292:3;8277:19;;8270:44;8351:15;;8345:3;8330:19;;8323:44;8404:15;;8398:3;8383:19;;8376:44;8457:16;;;8451:3;8436:19;;8429:45;7874:3;7859:19;39034:22:0;7481:999:1;38845:45:0;;;;;;;;;;-1:-1:-1;38845:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42300:389;;;;;;;;;;-1:-1:-1;42300:389:0;;;;;:::i;:::-;;:::i;39425:33::-;;;;;;;;;;-1:-1:-1;39425:33:0;;;;;;;;42006:286;;;;;;;;;;-1:-1:-1;42006:286:0;;;;;:::i;:::-;;:::i;50942:386::-;;;;;;;;;;-1:-1:-1;50942:386:0;;;;;:::i;:::-;;:::i;39630:82::-;;;;;;;;;;-1:-1:-1;39630:82:0;;;;;;;-1:-1:-1;;;;;39630:82:0;;;38531:29;;;;;;;;;;;;;;;43542:160;;;;;;;;;;-1:-1:-1;43542:160:0;;;;;:::i;:::-;;:::i;38410:28::-;;;;;;;;;;;;;;;50408:133;;;;;;;;;;-1:-1:-1;50408:133:0;;;;;:::i;:::-;;:::i;39546:35::-;;;;;;;;;;-1:-1:-1;39546:35:0;;;;;;;;;;;52583:105;;;;;;;;;;-1:-1:-1;52583:105:0;;;;;:::i;:::-;;:::i;50811:123::-;;;;;;;;;;-1:-1:-1;50811:123:0;;;;;:::i;:::-;;:::i;50680:::-;;;;;;;;;;-1:-1:-1;50680:123:0;;;;;:::i;:::-;;:::i;38337:64::-;;;;;;;;;;-1:-1:-1;38337:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;52193:108;;;;;;;;;;-1:-1:-1;52193:108:0;;;;;:::i;:::-;;:::i;39363:53::-;;;;;;;;;;;;;;;;39588:35;;;;;;;;;;-1:-1:-1;39588:35:0;;;;-1:-1:-1;;;39588:35:0;;;;;;15696:201;;;;;;;;;;-1:-1:-1;15696:201:0;;;;;:::i;:::-;;:::i;38482:42::-;;;;;;;;;;;;;;;38647:34;;;;;;;;;;;;;;;;43314:220;43418:10;43391:4;43408:21;;;:9;:21;;;;;;;;-1:-1:-1;;;;;43408:31:0;;;;;;;;;;:41;;;43465:39;43391:4;;43408:31;;43465:39;;;;43442:7;398:25:1;;386:2;371:18;;252:177;43465:39:0;;;;;;;;-1:-1:-1;43522:4:0;43314:220;;;;;:::o;52309:112::-;14676:13;:11;:13::i;:::-;52385::::1;:28:::0;;-1:-1:-1;;;;;52385:28:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;52385:28:0;;::::1;::::0;;;::::1;::::0;;52309:112::o;51841:139::-;14676:13;:11;:13::i;:::-;51958:14;51942:13:::1;:30;51958:14:::0;51942:13;:30:::1;:::i;:::-;-1:-1:-1::0;;;51841:139:0:o;44163:394::-;-1:-1:-1;;;;;44335:18:0;;44300:4;44335:18;;;:9;:18;;;;;;;;44354:10;44335:30;;;;;;;;-1:-1:-1;;44380:28:0;;44376:111;;44458:17;44468:7;44458;:17;:::i;:::-;-1:-1:-1;;;;;44425:18:0;;;;;;:9;:18;;;;;;;;44444:10;44425:30;;;;;;;:50;44376:111;44506:43;44520:7;44529:10;44541:7;44506:13;:43::i;:::-;44499:50;;;44163:394;;;;;;:::o;51988:77::-;14676:13;:11;:13::i;:::-;52047:3:::1;:10:::0;;::::1;::::0;;::::1;::::0;::::1;-1:-1:-1::0;;52047:10:0;;::::1;::::0;;;::::1;::::0;;51988:77::o;53117:97::-;14676:13;:11;:13::i;:::-;53184:14:::1;:22:::0;;-1:-1:-1;;53184:22:0::1;::::0;;53117:97::o;52696:308::-;14676:13;:11;:13::i;:::-;52778:9:::1;:22:::0;;-1:-1:-1;;;;;52778:22:0;;::::1;-1:-1:-1::0;;;;;;52778:22:0;;::::1;::::0;::::1;::::0;;;52811:16:::1;:37:::0;;;;::::1;::::0;::::1;::::0;;52778:9:::1;52861:34:::0;;;:16:::1;:34;::::0;;;;;;;:41;;-1:-1:-1;;52861:41:0;;::::1;52778:22:::0;52861:41;;::::1;::::0;;;52925:16;;;::::1;52913:29:::0;;:11:::1;:29:::0;;;;;:36;;;::::1;::::0;::::1;::::0;;52972:16;;;;::::1;52960:29:::0;;:11:::1;:29:::0;;;;;;:36;;;;::::1;::::0;;::::1;::::0;;52696:308::o;53426:156::-;14676:13;:11;:13::i;:::-;53542:31:::1;::::0;-1:-1:-1;;;53542:31:0;;53567:4:::1;53542:31;::::0;::::1;190:51:1::0;-1:-1:-1;;;;;53514:15:0;::::1;::::0;::::1;::::0;53530:10;;53514:15;;53542:16:::1;::::0;163:18:1;;53542:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53514:60;::::0;-1:-1:-1;;;;;;53514:60:0::1;::::0;;;;;;-1:-1:-1;;;;;11926:32:1;;;53514:60:0::1;::::0;::::1;11908:51:1::0;11975:18;;;11968:34;11881:18;;53514:60:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;50298:102::-:0;14676:13;:11;:13::i;:::-;50370:9:::1;:22:::0;50298:102::o;43909:246::-;14676:13;:11;:13::i;:::-;44012:9:::1;44007:139;44027:27:::0;;::::1;44007:139;;;44112:4;44073:15;:36;44089:16;;44106:1;44089:19;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44073:36:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;44073:36:0;:43;;-1:-1:-1;;44073:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44131:3:::1;::::0;::::1;:::i;:::-;;;44007:139;;50549:123:::0;14676:13;:11;:13::i;:::-;-1:-1:-1;;;;;50634:20:0;;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:30;;-1:-1:-1;;50634:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50549:123::o;53012:97::-;14676:13;:11;:13::i;:::-;53079:14:::1;:22:::0;;-1:-1:-1;;53079:22:0::1;::::0;;53012:97::o;52429:146::-;14676:13;:11;:13::i;:::-;52540:27:::1;:18:::0;52561:6:::1;52540:27;:::i;:::-;52520:17;:47:::0;-1:-1:-1;52429:146:0:o;53222:196::-;14676:13;:11;:13::i;:::-;53294:12:::1;53312:10;-1:-1:-1::0;;;;;53312:15:0::1;53335:21;53312:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53293:68;;;53380:7;53372:38;;;;-1:-1:-1::0;;;53372:38:0::1;;;;;;;:::i;:::-;;;;;;;;;53282:136;53222:196:::0;:::o;42697:609::-;42822:9;;42775:4;;-1:-1:-1;;;;;42822:9:0;42800:10;:32;42792:82;;;;-1:-1:-1;;;42792:82:0;;13467:2:1;42792:82:0;;;13449:21:1;13506:2;13486:18;;;13479:30;13545:34;13525:18;;;13518:62;-1:-1:-1;;;13596:18:1;;;13589:35;13641:19;;42792:82:0;13265:401:1;42792:82:0;-1:-1:-1;;;;;42893:18:0;;;;;;:9;:18;;;;;;:29;-1:-1:-1;42893:29:0;42885:78;;;;-1:-1:-1;;;42885:78:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42994:18:0;;42976:15;42994:18;;;:9;:18;;;;;;;;43013:10;42994:30;;;;;;;;-1:-1:-1;;43039:28:0;;43035:111;;43117:17;43127:7;43117;:17;:::i;:::-;-1:-1:-1;;;;;43084:18:0;;;;;;:9;:18;;;;;;;;43103:10;43084:30;;;;;;;:50;43035:111;43173:7;43158:11;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;43193:18:0;;;;;;:9;:18;;;;;:29;;43215:7;;43193:18;:29;;43215:7;;43193:29;:::i;:::-;;;;-1:-1:-1;;43238:38:0;;398:25:1;;;43264:1:0;;-1:-1:-1;;;;;43238:38:0;;;-1:-1:-1;;;;;;;;;;;43238:38:0;386:2:1;371:18;43238:38:0;;;;;;;-1:-1:-1;43294:4:0;;42697:609;-1:-1:-1;;;42697:609:0:o;15438:103::-;14676:13;:11;:13::i;:::-;15503:30:::1;15530:1;15503:18;:30::i;:::-;15438:103::o:0;52073:108::-;14676:13;:11;:13::i;:::-;52147:15:::1;:26:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;52147:26:0;;::::1;::::0;;;::::1;::::0;;52073:108::o;51336:497::-;14676:13;:11;:13::i;:::-;51417:5;51410:4:::1;:12;51417:5:::0;51410:4;:12:::1;:::i;:::-;-1:-1:-1::0;51809:16:0::1;::::0;-1:-1:-1;51809:16:0;;;::::1;::::0;::::1;;:::i;:::-;51768:25;::::0;;;::::1;::::0;::::1;;:::i;:::-;51736:16;::::0;;;::::1;::::0;::::1;;:::i;:::-;51707:13;::::0;;;::::1;::::0;::::1;;:::i;:::-;51669:22;::::0;;;::::1;::::0;::::1;;:::i;:::-;51633:20;::::0;;;::::1;::::0;::::1;;:::i;:::-;51585:32;::::0;;;::::1;::::0;::::1;;:::i;:::-;51558:11;::::0;;;::::1;::::0;::::1;;:::i;:::-;51533:9;::::0;;;::::1;::::0;::::1;;:::i;:::-;51491:26;::::0;;;::::1;::::0;::::1;;:::i;:::-;51459:16;;::::0;::::1;:5:::0;:16:::1;:::i;:::-;:58;;;;:::i;:::-;:83;;;;:::i;:::-;:110;;;;:::i;:::-;:158;;;;:::i;:::-;:194;;;;:::i;:::-;:232;;;;:::i;:::-;:261;;;;:::i;:::-;:293;;;;:::i;:::-;:334;;;;:::i;:::-;:366;;;;:::i;:::-;51435:8;:390:::0;;-1:-1:-1;;51435:390:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;51336:497:0:o;42300:389::-;42376:4;14676:13;:11;:13::i;:::-;42401:14:::1;::::0;::::1;::::0;::::1;;;42393:46;;;::::0;-1:-1:-1;;;42393:46:0;;18103:2:1;42393:46:0::1;::::0;::::1;18085:21:1::0;18142:2;18122:18;;;18115:30;-1:-1:-1;;;18161:18:1;;;18154:49;18220:18;;42393:46:0::1;17901:343:1::0;42393:46:0::1;-1:-1:-1::0;;;;;42458:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;:29;-1:-1:-1;42458:29:0::1;42450:78;;;;-1:-1:-1::0;;;42450:78:0::1;;;;;;;:::i;:::-;42556:7;42541:11;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;42576:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;:29;;42598:7;;42576:18;:29:::1;::::0;42598:7;;42576:29:::1;:::i;:::-;::::0;;;-1:-1:-1;;42621:38:0::1;::::0;398:25:1;;;42647:1:0::1;::::0;-1:-1:-1;;;;;42621:38:0;::::1;::::0;-1:-1:-1;;;;;;;;;;;42621:38:0;386:2:1;371:18;42621:38:0::1;252:177:1::0;42006:286:0;14676:13;:11;:13::i;:::-;42075:14:::1;::::0;::::1;;42067:46;;;::::0;-1:-1:-1;;;42067:46:0;;18451:2:1;42067:46:0::1;::::0;::::1;18433:21:1::0;18490:2;18470:18;;;18463:30;-1:-1:-1;;;18509:18:1;;;18502:49;18568:18;;42067:46:0::1;18249:343:1::0;42067:46:0::1;42141:7;42126:11;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;42194:10:0::1;42184:21;::::0;;;:9:::1;:21;::::0;;;;;;;:32;;;::::1;::::0;;42243:41;398:25:1;;;-1:-1:-1;;;;;;;;;;;42243:41:0;371:18:1;42243:41:0::1;;;;;;;42006:286:::0;:::o;50942:386::-;14676:13;:11;:13::i;:::-;51138:19:::1;:42:::0;;;::::1;;-1:-1:-1::0;;;51138:42:0::1;-1:-1:-1::0;;51138:42:0;;::::1;::::0;;;::::1;::::0;;;51191:21:::1;:46:::0;51248:34:::1;:72:::0;50942:386::o;43542:160::-;43624:4;43648:46;43662:10;43674;43686:7;43648:13;:46::i;50408:133::-;14676:13;:11;:13::i;:::-;-1:-1:-1;;;;;50498:25:0;;;::::1;;::::0;;;:16:::1;:25;::::0;;;;:35;;-1:-1:-1;;50498:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50408:133::o;52583:105::-;14676:13;:11;:13::i;:::-;52655:14:::1;:25:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;52655:25:0;;::::1;::::0;;;::::1;::::0;;52583:105::o;50811:123::-;14676:13;:11;:13::i;:::-;-1:-1:-1;;;;;50896:20:0;;;::::1;;::::0;;;:13:::1;:20;::::0;;;;:30;;-1:-1:-1;;50896:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50811:123::o;50680:::-;14676:13;:11;:13::i;:::-;-1:-1:-1;;;;;50765:20:0;;;::::1;;::::0;;;:11:::1;:20;::::0;;;;:30;;-1:-1:-1;;50765:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;50680:123::o;52193:108::-;14676:13;:11;:13::i;:::-;52267:15:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;52267:26:0::1;-1:-1:-1::0;;52267:26:0;;::::1;::::0;;;::::1;::::0;;52193:108::o;15696:201::-;14676:13;:11;:13::i;:::-;-1:-1:-1;;;;;15785:22:0;::::1;15777:73;;;::::0;-1:-1:-1;;;15777:73:0;;18929:2:1;15777:73:0::1;::::0;::::1;18911:21:1::0;18968:2;18948:18;;;18941:30;19007:34;18987:18;;;18980:62;-1:-1:-1;;;19058:18:1;;;19051:36;19104:19;;15777:73:0::1;18727:402:1::0;15777:73:0::1;15861:28;15880:8;15861:18;:28::i;:::-;15696:201:::0;:::o;14955:132::-;14836:7;14863:6;-1:-1:-1;;;;;14863:6:0;3753:10;15019:23;15011:68;;;;-1:-1:-1;;;15011:68:0;;19336:2:1;15011:68:0;;;19318:21:1;;;19355:18;;;19348:30;19414:34;19394:18;;;19387:62;19466:18;;15011:68:0;19134:356:1;44565:2300:0;44714:17;;44693:4;;44714:17;;44710:102;;;44755:45;44771:7;44780:10;44792:7;44755:15;:45::i;:::-;44748:52;;;;44710:102;44862:14;;44822;;44862;;;;;44861:15;:48;;;;-1:-1:-1;;;;;;44881:28:0;;;;;;:16;:28;;;;;;;;44880:29;44861:48;44857:606;;;45001:15;;;;;;;44997:155;;;-1:-1:-1;;;;;45041:27:0;;;;;;:15;:27;;;;;;;;:35;;:27;:35;45037:100;;-1:-1:-1;45113:4:0;45037:100;45170:15;;-1:-1:-1;;;45170:15:0;;;;45166:250;;;45321:17;;45286:32;45307:10;45286:20;:32::i;:::-;:52;45282:119;;;-1:-1:-1;45376:4:0;45282:119;44857:606;;;-1:-1:-1;45456:4:0;44857:606;45483:9;:38;;;-1:-1:-1;;;;;;45496:25:0;;;;;;:16;:25;;;;;;;;45483:38;45475:80;;;;-1:-1:-1;;;45475:80:0;;19697:2:1;45475:80:0;;;19679:21:1;19736:2;19716:18;;;19709:30;19775:31;19755:18;;;19748:59;19824:18;;45475:80:0;19495:353:1;45475:80:0;-1:-1:-1;;;;;45580:25:0;;45568:9;45580:25;;;:13;:25;;;;;;;;;:58;;;45631:6;-1:-1:-1;;;;;45609:29:0;:10;-1:-1:-1;;;;;45609:29:0;;45580:58;45568:70;;45656:4;45655:5;:33;;;;-1:-1:-1;;;;;;45665:23:0;;;;;;:11;:23;;;;;;;;45664:24;45655:33;45651:154;;;45750:9;;-1:-1:-1;;;;;45714:21:0;;;;;;:9;:21;;;;;;:31;;45738:7;;45714:31;:::i;:::-;45713:46;;45705:88;;;;-1:-1:-1;;;45705:88:0;;20055:2:1;45705:88:0;;;20037:21:1;20094:2;20074:18;;;20067:30;20133:31;20113:18;;;20106:59;20182:18;;45705:88:0;19853:353:1;45705:88:0;45835:4;:66;;;;;45867:34;;45856:7;:45;;45835:66;:109;;;;-1:-1:-1;45933:10:0;45919:25;;;;:13;:25;;;;;;;;45918:26;45835:109;:144;;;;-1:-1:-1;45962:17:0;;;;45961:18;45835:144;:180;;;;-1:-1:-1;45996:19:0;;-1:-1:-1;;;45996:19:0;;;;45835:180;:246;;;;-1:-1:-1;46060:21:0;;46050:4;46032:24;;;;:9;:24;;;;;;:49;;45835:246;45817:318;;;46108:15;:13;:15::i;:::-;-1:-1:-1;;;;;46147:18:0;;;;;;:9;:18;;;;;:29;;46169:7;;46147:18;:29;;46169:7;;46147:29;:::i;:::-;;;;-1:-1:-1;;;;;;;46249:22:0;;46189:19;46249:22;;;:13;:22;;;;;;46211:7;;46249:22;;;:52;;;46294:6;-1:-1:-1;;;;;46275:26:0;:7;-1:-1:-1;;;;;46275:26:0;;46249:52;46248:135;;;-1:-1:-1;;;;;;46324:25:0;;;;;;:13;:25;;;;;;;;;:58;;;46375:6;-1:-1:-1;;;;;46353:29:0;:10;-1:-1:-1;;;;;46353:29:0;;46324:58;46247:231;;46473:5;46247:231;;;-1:-1:-1;;;;;46405:20:0;;;;;;:11;:20;;;;;;;;46404:21;:49;;;;-1:-1:-1;;;;;;46430:23:0;;;;;;:11;:23;;;;;;;;46429:24;46404:49;46229:462;;;46519:29;46531:7;46540;46519:11;:29::i;:::-;46505:43;;46229:462;;;-1:-1:-1;;;;;46571:20:0;;;;;;:11;:20;;;;;;;;46570:21;:49;;;;-1:-1:-1;;;;;;46596:23:0;;;;;;:11;:23;;;;;;;;46595:24;46570:49;46566:125;;;46650:29;46662:7;46671;46650:11;:29::i;:::-;46636:43;;46566:125;-1:-1:-1;;;;;46728:21:0;;;;;;;:9;:21;;;;;;;:36;;;;;;46791:42;46728:21;;46791:42;;;-1:-1:-1;;;;;;;;;;;46791:42:0;;;46753:11;398:25:1;;386:2;371:18;;252:177;46791:42:0;;;;;;;;-1:-1:-1;46853:4:0;;44565:2300;-1:-1:-1;;;;;;44565:2300:0:o;16057:191::-;16131:16;16150:6;;-1:-1:-1;;;;;16167:17:0;;;-1:-1:-1;;;;;;16167:17:0;;;;;;16200:40;;16150:6;;;;;;;16200:40;;16131:16;16200:40;16120:128;16057:191;:::o;46873:285::-;-1:-1:-1;;;;;47020:18:0;;47003:4;47020:18;;;:9;:18;;;;;:29;;47042:7;;47020:18;47003:4;;47020:29;;47042:7;;47020:29;:::i;:::-;;;;-1:-1:-1;;;;;;;;47085:21:0;;;;;;:9;:21;;;;;:32;;;;;;-1:-1:-1;46873:285:0;;;;;:::o;43710:191::-;43828:13;;43860:33;;-1:-1:-1;;;43860:33:0;;-1:-1:-1;;;;;208:32:1;;;43860:33:0;;;190:51:1;43781:4:0;;43828:13;;;;;;;43860:23;;163:18:1;;43860:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;47166:2505::-;39850:17;:24;;-1:-1:-1;;39850:24:0;39870:4;39850:24;;;47304:16:::1;::::0;;47318:1:::1;47304:16:::0;;;;;::::1;::::0;;;47246:21:::1;::::0;-1:-1:-1;;47304:16:0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;47304:16:0::1;47280:40;;47349:4;47331;47336:1;47331:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;47331:23:0::1;;;-1:-1:-1::0;;;;;47331:23:0::1;;;::::0;::::1;47383:4;47365;47370:1;47365:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;47365:23:0::1;;;-1:-1:-1::0;;;;;47365:23:0::1;;;::::0;::::1;47417:4;47399;47404:1;47399:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47399:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;47523:4:::1;47505:24;::::0;;;:9:::1;:24:::0;;;;;;;;47433:200;;-1:-1:-1;;;47433:200:0;;:6:::1;:57:::0;;::::1;::::0;::::1;::::0;:200:::1;::::0;47505:24;;47560:4;;47523;47607:15:::1;::::0;47433:200:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;47646:16;47689:9;47665:21;:33;;;;:::i;:::-;47646:52:::0;-1:-1:-1;39252:6:0::1;47715:14:::0;::::1;47711:1953;;;47787:13;:24:::0;47836:4:::1;:15:::0;47746:12:::1;::::0;-1:-1:-1;;;;;47787:24:0::1;::::0;39252:6:::1;::::0;47825:26:::1;::::0;47824:34:::1;47836:15;47825:8:::0;:26:::1;:::i;:::-;47824:34;;;;:::i;:::-;47787:76;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47773:90;;;;;47886:7;47878:38;;;;-1:-1:-1::0;;;47878:38:0::1;;;;;;;:::i;:::-;47945:34:::0;;48004:4:::1;:25:::0;-1:-1:-1;;;;;47945:34:0;;::::1;::::0;39252:6:::1;::::0;47993:36:::1;::::0;48004:25;;::::1;47992:44;48004:25;47993:8:::0;:36:::1;:::i;:::-;47992:44;;;;:::i;:::-;47945:128;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47931:142;;;;;48096:7;48088:38;;;;-1:-1:-1::0;;;48088:38:0::1;;;;;;;:::i;:::-;48155:17:::0;;48197:4:::1;:8:::0;-1:-1:-1;;;;;48155:17:0;;::::1;::::0;39252:6:::1;::::0;48186:19:::1;::::0;-1:-1:-1;;;48197:8:0;::::1;48185:27;48197:8;48186::::0;:19:::1;:::i;:::-;48185:27;;;;:::i;:::-;48155:62;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48141:76;;;;;48240:7;48232:38;;;;-1:-1:-1::0;;;48232:38:0::1;;;;;;;:::i;:::-;48299:19:::0;;48343:4:::1;:10:::0;-1:-1:-1;;;;;48299:19:0;;::::1;::::0;39252:6:::1;::::0;48332:21:::1;::::0;48343:10;;::::1;48331:29;48343:10;48332:8:::0;:21:::1;:::i;:::-;48331:29;;;;:::i;:::-;48299:66;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48285:80;;;;;48388:7;48380:38;;;;-1:-1:-1::0;;;48380:38:0::1;;;;;;;:::i;:::-;48447:40:::0;;48530:4:::1;:31:::0;-1:-1:-1;;;;;48447:40:0;;::::1;::::0;39252:6:::1;::::0;48519:42:::1;::::0;-1:-1:-1;;;48530:31:0;::::1;48518:50;48530:31;48519:8:::0;:42:::1;:::i;:::-;48518:50;;;;:::i;:::-;48447:140;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48433:154;;;;;48610:7;48602:38;;;;-1:-1:-1::0;;;48602:38:0::1;;;;;;;:::i;:::-;48669:28:::0;;48722:4:::1;:19:::0;-1:-1:-1;;;;;48669:28:0;;::::1;::::0;39252:6:::1;::::0;48711:30:::1;::::0;-1:-1:-1;;;48722:19:0;::::1;48710:38;48722:19;48711:8:::0;:30:::1;:::i;:::-;48710:38;;;;:::i;:::-;48669:84;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48655:98;;;;;48776:7;48768:38;;;;-1:-1:-1::0;;;48768:38:0::1;;;;;;;:::i;:::-;48835:30:::0;;48890:4:::1;:21:::0;-1:-1:-1;;;;;48835:30:0;;::::1;::::0;39252:6:::1;::::0;48879:32:::1;::::0;-1:-1:-1;;;48890:21:0;::::1;48878:40;48890:21;48879:8:::0;:32:::1;:::i;:::-;48878:40;;;;:::i;:::-;48835:88;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48821:102;;;;;48946:7;48938:38;;;;-1:-1:-1::0;;;48938:38:0::1;;;;;;;:::i;:::-;49005:21:::0;;49051:4:::1;:12:::0;-1:-1:-1;;;;;49005:21:0;;::::1;::::0;39252:6:::1;::::0;49040:23:::1;::::0;-1:-1:-1;;;49051:12:0;::::1;49039:31;49051:12;49040:8:::0;:23:::1;:::i;:::-;49039:31;;;;:::i;:::-;49005:70;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48991:84;;;;;49098:7;49090:38;;;;-1:-1:-1::0;;;49090:38:0::1;;;;;;;:::i;:::-;49157:24:::0;;49206:4:::1;:15:::0;-1:-1:-1;;;;;49157:24:0;;::::1;::::0;39252:6:::1;::::0;49195:26:::1;::::0;-1:-1:-1;;;49206:15:0;::::1;49194:34;49206:15;49195:8:::0;:26:::1;:::i;:::-;49194:34;;;;:::i;:::-;49157:76;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49143:90;;;;;49256:7;49248:38;;;;-1:-1:-1::0;;;49248:38:0::1;;;;;;;:::i;:::-;49315:33:::0;;49373:4:::1;:24:::0;-1:-1:-1;;;;;49315:33:0;;::::1;::::0;39252:6:::1;::::0;49362:35:::1;::::0;-1:-1:-1;;;49373:24:0;::::1;49361:43;49373:24;49362:8:::0;:35:::1;:::i;:::-;49361:43;;;;:::i;:::-;49315:126;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49301:140;;;;;49464:7;49456:38;;;;-1:-1:-1::0;;;49456:38:0::1;;;;;;;:::i;:::-;49523:24:::0;;49572:4:::1;:15:::0;-1:-1:-1;;;;;49523:24:0;;::::1;::::0;39252:6:::1;::::0;49561:26:::1;::::0;-1:-1:-1;;;49572:15:0;::::1;49560:34;49572:15;49561:8:::0;:26:::1;:::i;:::-;49560:34;;;;:::i;:::-;49523:76;::::0;::::1;::::0;;;;;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49509:90;;;;;49622:7;49614:38;;;;-1:-1:-1::0;;;49614:38:0::1;;;;;;;:::i;:::-;47731:1933;47711:1953;-1:-1:-1::0;;39897:17:0;:25;;-1:-1:-1;;39897:25:0;;;-1:-1:-1;47166:2505:0:o;49679:330::-;49802:8;;49751:7;;;;39252:6;;49792:18;;49791:26;49802:8;49792:7;:18;:::i;:::-;49791:26;;;;:::i;:::-;49873:4;49855:24;;;;:9;:24;;;;;;;:37;;;;;;49919:43;49771:46;;-1:-1:-1;49873:4:0;-1:-1:-1;;;;;49919:43:0;;;-1:-1:-1;;;;;;;;;;;49919:43:0;;;49771:46;398:25:1;;386:2;371:18;;252:177;49919:43:0;;;;;;;;49982:19;49992:9;49982:7;:19;:::i;:::-;49975:26;49679:330;-1:-1:-1;;;;49679:330:0:o;50017:273::-;50140:3;;50089:7;;;;39252:6;;50130:13;;50140:3;;;50129:21;50140:3;50130:7;:13;:::i;:::-;50129:21;;;;:::i;:::-;50109:41;;50178:9;50163:11;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;50205:38:0;;398:25:1;;;50231:1:0;;-1:-1:-1;;;;;50205:38:0;;;-1:-1:-1;;;;;;;;;;;50205:38:0;386:2:1;371:18;50205:38:0;252:177:1;434:548;546:4;575:2;604;593:9;586:21;636:6;630:13;679:6;674:2;663:9;659:18;652:34;704:1;714:140;728:6;725:1;722:13;714:140;;;823:14;;;819:23;;813:30;789:17;;;808:2;785:26;778:66;743:10;;714:140;;;718:3;903:1;898:2;889:6;878:9;874:22;870:31;863:42;973:2;966;962:7;957:2;949:6;945:15;941:29;930:9;926:45;922:54;914:62;;;;434:548;;;;:::o;987:131::-;-1:-1:-1;;;;;1062:31:1;;1052:42;;1042:70;;1108:1;1105;1098:12;1123:315;1191:6;1199;1252:2;1240:9;1231:7;1227:23;1223:32;1220:52;;;1268:1;1265;1258:12;1220:52;1307:9;1294:23;1326:31;1351:5;1326:31;:::i;:::-;1376:5;1428:2;1413:18;;;;1400:32;;-1:-1:-1;;;1123:315:1:o;2674:247::-;2733:6;2786:2;2774:9;2765:7;2761:23;2757:32;2754:52;;;2802:1;2799;2792:12;2754:52;2841:9;2828:23;2860:31;2885:5;2860:31;:::i;2926:162::-;2992:5;3037:3;3028:6;3023:3;3019:16;3015:26;3012:46;;;3054:1;3051;3044:12;3012:46;-1:-1:-1;3076:6:1;2926:162;-1:-1:-1;2926:162:1:o;3093:250::-;3184:6;3237:3;3225:9;3216:7;3212:23;3208:33;3205:53;;;3254:1;3251;3244:12;3205:53;3277:60;3329:7;3318:9;3277:60;:::i;3348:456::-;3425:6;3433;3441;3494:2;3482:9;3473:7;3469:23;3465:32;3462:52;;;3510:1;3507;3500:12;3462:52;3549:9;3536:23;3568:31;3593:5;3568:31;:::i;:::-;3618:5;-1:-1:-1;3675:2:1;3660:18;;3647:32;3688:33;3647:32;3688:33;:::i;:::-;3348:456;;3740:7;;-1:-1:-1;;;3794:2:1;3779:18;;;;3766:32;;3348:456::o;3998:117::-;4083:6;4076:5;4072:18;4065:5;4062:29;4052:57;;4105:1;4102;4095:12;4120:245;4178:6;4231:2;4219:9;4210:7;4206:23;4202:32;4199:52;;;4247:1;4244;4237:12;4199:52;4286:9;4273:23;4305:30;4329:5;4305:30;:::i;4837:402::-;4919:6;4927;4980:2;4968:9;4959:7;4955:23;4951:32;4948:52;;;4996:1;4993;4986:12;4948:52;5035:9;5022:23;5054:31;5079:5;5054:31;:::i;:::-;5104:5;-1:-1:-1;5161:2:1;5146:18;;5133:32;5174:33;5133:32;5174:33;:::i;:::-;5226:7;5216:17;;;4837:402;;;;;:::o;5244:180::-;5303:6;5356:2;5344:9;5335:7;5331:23;5327:32;5324:52;;;5372:1;5369;5362:12;5324:52;-1:-1:-1;5395:23:1;;5244:180;-1:-1:-1;5244:180:1:o;5429:615::-;5515:6;5523;5576:2;5564:9;5555:7;5551:23;5547:32;5544:52;;;5592:1;5589;5582:12;5544:52;5632:9;5619:23;5661:18;5702:2;5694:6;5691:14;5688:34;;;5718:1;5715;5708:12;5688:34;5756:6;5745:9;5741:22;5731:32;;5801:7;5794:4;5790:2;5786:13;5782:27;5772:55;;5823:1;5820;5813:12;5772:55;5863:2;5850:16;5889:2;5881:6;5878:14;5875:34;;;5905:1;5902;5895:12;5875:34;5958:7;5953:2;5943:6;5940:1;5936:14;5932:2;5928:23;5924:32;5921:45;5918:65;;;5979:1;5976;5969:12;5918:65;6010:2;6002:11;;;;;6032:6;;-1:-1:-1;5429:615:1;;-1:-1:-1;;;;5429:615:1:o;6049:118::-;6135:5;6128:13;6121:21;6114:5;6111:32;6101:60;;6157:1;6154;6147:12;6172:382;6237:6;6245;6298:2;6286:9;6277:7;6273:23;6269:32;6266:52;;;6314:1;6311;6304:12;6266:52;6353:9;6340:23;6372:31;6397:5;6372:31;:::i;:::-;6422:5;-1:-1:-1;6479:2:1;6464:18;;6451:32;6492:30;6451:32;6492:30;:::i;6559:241::-;6615:6;6668:2;6656:9;6647:7;6643:23;6639:32;6636:52;;;6684:1;6681;6674:12;6636:52;6723:9;6710:23;6742:28;6764:5;6742:28;:::i;8485:377::-;8559:6;8567;8575;8628:2;8616:9;8607:7;8603:23;8599:32;8596:52;;;8644:1;8641;8634:12;8596:52;8683:9;8670:23;8702:28;8724:5;8702:28;:::i;:::-;8749:5;8801:2;8786:18;;8773:32;;-1:-1:-1;8852:2:1;8837:18;;;8824:32;;8485:377;-1:-1:-1;;;8485:377:1:o;9494:176::-;9539:11;9591:3;9578:17;9604:31;9629:5;9604:31;:::i;9675:195::-;9779:11;;-1:-1:-1;;;;;;9775:54:1;-1:-1:-1;;;;;9831:31:1;;;;9772:91;;;;9759:105;;9675:195::o;9875:1400::-;10022:89;10076:34;10104:5;10076:34;:::i;:::-;10070:4;10022:89;:::i;:::-;10120:106;10182:43;10221:2;10214:5;10210:14;10182:43;:::i;:::-;10178:1;10172:4;10168:12;10120:106;:::i;:::-;10235;10297:43;10336:2;10329:5;10325:14;10297:43;:::i;:::-;10293:1;10287:4;10283:12;10235:106;:::i;:::-;10350;10412:43;10451:2;10444:5;10440:14;10412:43;:::i;:::-;10408:1;10402:4;10398:12;10350:106;:::i;:::-;10465:107;10527:44;10566:3;10559:5;10555:15;10527:44;:::i;:::-;10523:1;10517:4;10513:12;10465:107;:::i;:::-;10581;10643:44;10682:3;10675:5;10671:15;10643:44;:::i;:::-;10639:1;10633:4;10629:12;10581:107;:::i;:::-;10697;10759:44;10798:3;10791:5;10787:15;10759:44;:::i;:::-;10755:1;10749:4;10745:12;10697:107;:::i;:::-;10813;10875:44;10914:3;10907:5;10903:15;10875:44;:::i;:::-;10871:1;10865:4;10861:12;10813:107;:::i;:::-;10929;10991:44;11030:3;11023:5;11019:15;10991:44;:::i;:::-;10987:1;10981:4;10977:12;10929:107;:::i;:::-;11045;11107:44;11146:3;11139:5;11135:15;11107:44;:::i;:::-;11103:1;11097:4;11093:12;11045:107;:::i;:::-;11161:108;11224:44;11263:3;11256:5;11252:15;11224:44;:::i;:::-;11219:2;11213:4;11209:13;11161:108;:::i;11280:127::-;11341:10;11336:3;11332:20;11329:1;11322:31;11372:4;11369:1;11362:15;11396:4;11393:1;11386:15;11412:128;11479:9;;;11500:11;;;11497:37;;;11514:18;;:::i;11545:184::-;11615:6;11668:2;11656:9;11647:7;11643:23;11639:32;11636:52;;;11684:1;11681;11674:12;11636:52;-1:-1:-1;11707:16:1;;11545:184;-1:-1:-1;11545:184:1:o;12013:245::-;12080:6;12133:2;12121:9;12112:7;12108:23;12104:32;12101:52;;;12149:1;12146;12139:12;12101:52;12181:9;12175:16;12200:28;12222:5;12200:28;:::i;12263:127::-;12324:10;12319:3;12315:20;12312:1;12305:31;12355:4;12352:1;12345:15;12379:4;12376:1;12369:15;12395:135;12434:3;12455:17;;;12452:43;;12475:18;;:::i;:::-;-1:-1:-1;12522:1:1;12511:13;;12395:135::o;12535:168::-;12608:9;;;12639;;12656:15;;;12650:22;;12636:37;12626:71;;12677:18;;:::i;12918:342::-;13120:2;13102:21;;;13159:2;13139:18;;;13132:30;-1:-1:-1;;;13193:2:1;13178:18;;13171:48;13251:2;13236:18;;12918:342::o;13671:400::-;13873:2;13855:21;;;13912:2;13892:18;;;13885:30;13951:34;13946:2;13931:18;;13924:62;-1:-1:-1;;;14017:2:1;14002:18;;13995:34;14061:3;14046:19;;13671:400::o;14076:174::-;14120:11;14172:3;14159:17;14185:30;14209:5;14185:30;:::i;16366:1357::-;16523:5;16510:19;16538:32;16562:7;16538:32;:::i;:::-;16638:6;16629:7;16625:20;16616:5;16612:10;16605:4;16599:11;16595:28;16592:54;16586:4;16579:68;;16656:95;16708:42;16746:2;16739:5;16735:14;16708:42;:::i;:::-;14347:11;;-1:-1:-1;;14383:24:1;14417:2;14413:14;;;;14429:10;14409:31;14380:61;14367:75;;14255:193;16656:95;16760:97;16814:42;16852:2;16845:5;16841:14;16814:42;:::i;:::-;14547:11;;-1:-1:-1;;14583:28:1;14621:2;14617:14;;;;14633;14613:35;14580:69;14567:83;;14453:203;16760:97;16866;16920:42;16958:2;16951:5;16947:14;16920:42;:::i;:::-;14755:11;;-1:-1:-1;;14791:32:1;14833:2;14829:14;;;;14845:18;14825:39;14788:77;14775:91;;14661:211;16866:97;16972:98;17026:43;17064:3;17057:5;17053:15;17026:43;:::i;:::-;14971:11;;-1:-1:-1;;15007:36:1;15053:2;15049:14;;;;15065:22;15045:43;15004:85;14991:99;;14877:219;16972:98;17079:99;17134:43;17172:3;17165:5;17161:15;17134:43;:::i;:::-;17128:4;15196:11;;-1:-1:-1;;;;15232:28:1;15286:2;15266:14;;;;-1:-1:-1;;;15262:35:1;15229:69;;;;15216:83;;15101:204;17079:99;17187;17242:43;17280:3;17273:5;17269:15;17242:43;:::i;:::-;17236:4;15405:11;;-1:-1:-1;;;;15441:28:1;15495:2;15475:14;;;;-1:-1:-1;;;15471:35:1;15438:69;;;;15425:83;;15310:204;17187:99;17295;17350:43;17388:3;17381:5;17377:15;17350:43;:::i;:::-;17344:4;15614:11;;-1:-1:-1;;;;15650:29:1;15706:3;15685:15;;;;-1:-1:-1;;;15681:37:1;15647:72;;;;15634:86;;15519:207;17295:99;17403;17458:43;17496:3;17489:5;17485:15;17458:43;:::i;:::-;17452:4;15826:11;;-1:-1:-1;;;;15862:29:1;15918:3;15897:15;;;;-1:-1:-1;;;15893:37:1;15859:72;;;;15846:86;;15731:207;17403:99;17511;17566:43;17604:3;17597:5;17593:15;17566:43;:::i;:::-;17560:4;16038:11;;-1:-1:-1;;;;16074:29:1;16130:3;16109:15;;;;-1:-1:-1;;;16105:37:1;16071:72;;;;16058:86;;15943:207;17511:99;17619:98;17673:43;17711:3;17704:5;17700:15;17673:43;:::i;:::-;17667:4;16249:11;;-1:-1:-1;;;;16285:29:1;16341:3;16320:15;;;;-1:-1:-1;;;16316:37:1;16282:72;;;;16269:86;;16155:206;17728:168;17795:6;17821:10;;;17833;;;17817:27;;17856:11;;;17853:37;;;17870:18;;:::i;:::-;17853:37;17728:168;;;;:::o;18597:125::-;18662:9;;;18683:10;;;18680:36;;;18696:18;;:::i;20343:980::-;20605:4;20653:3;20642:9;20638:19;20684:6;20673:9;20666:25;20710:2;20748:6;20743:2;20732:9;20728:18;20721:34;20791:3;20786:2;20775:9;20771:18;20764:31;20815:6;20850;20844:13;20881:6;20873;20866:22;20919:3;20908:9;20904:19;20897:26;;20958:2;20950:6;20946:15;20932:29;;20979:1;20989:195;21003:6;21000:1;20997:13;20989:195;;;21068:13;;-1:-1:-1;;;;;21064:39:1;21052:52;;21159:15;;;;21124:12;;;;21100:1;21018:9;20989:195;;;-1:-1:-1;;;;;;;21240:32:1;;;;21235:2;21220:18;;21213:60;-1:-1:-1;;;21304:3:1;21289:19;21282:35;21201:3;20343:980;-1:-1:-1;;;20343:980:1:o;21328:217::-;21368:1;21394;21384:132;;21438:10;21433:3;21429:20;21426:1;21419:31;21473:4;21470:1;21463:15;21501:4;21498:1;21491:15;21384:132;-1:-1:-1;21530:9:1;;21328:217::o
Swarm Source
ipfs://7018f3a0bbcffcf829fb036b147dca2d74efe088f1432183d74194b5e208d32e
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,076.61 | 2.0578 | $6,331.05 |
Loading...
Loading
[ 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.