Overview
ETH Balance
0 ETH
ETH Value
$0.00Token Holdings
More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 6,617 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
0x54d4fad3 | 126683520 | 1 hr ago | IN | 0 ETH | 0.000002722565 | ||||
0x54d4fad3 | 126682542 | 2 hrs ago | IN | 0 ETH | 0.000001750869 | ||||
0x54d4fad3 | 126682532 | 2 hrs ago | IN | 0 ETH | 0.00000271599 | ||||
0x54d4fad3 | 126680854 | 2 hrs ago | IN | 0 ETH | 0.000001801796 | ||||
0x54d4fad3 | 126680844 | 2 hrs ago | IN | 0 ETH | 0.000002031775 | ||||
0x54d4fad3 | 126680834 | 2 hrs ago | IN | 0 ETH | 0.000002617548 | ||||
0x54d4fad3 | 126680806 | 2 hrs ago | IN | 0 ETH | 0.000001724731 | ||||
0x54d4fad3 | 126680796 | 3 hrs ago | IN | 0 ETH | 0.00000272682 | ||||
0x54d4fad3 | 126680235 | 3 hrs ago | IN | 0 ETH | 0.000003482347 | ||||
0x54d4fad3 | 126671127 | 8 hrs ago | IN | 0 ETH | 0.000011600439 | ||||
0x54d4fad3 | 126662489 | 13 hrs ago | IN | 0 ETH | 0.000068191616 | ||||
0x54d4fad3 | 126656549 | 16 hrs ago | IN | 0 ETH | 0.000002801569 | ||||
0xac56d39c | 126651466 | 19 hrs ago | IN | 0.0025 ETH | 0.000001471477 | ||||
0x54d4fad3 | 126647700 | 21 hrs ago | IN | 0 ETH | 0.000002806529 | ||||
0x54d4fad3 | 126636381 | 27 hrs ago | IN | 0 ETH | 0.000002018746 | ||||
0x321720db | 126627292 | 32 hrs ago | IN | 0 ETH | 0.000000685882 | ||||
0x54d4fad3 | 126627279 | 32 hrs ago | IN | 0 ETH | 0.000002018671 | ||||
0x54d4fad3 | 126624825 | 34 hrs ago | IN | 0 ETH | 0.000003393788 | ||||
0x54d4fad3 | 126624809 | 34 hrs ago | IN | 0 ETH | 0.000002133621 | ||||
0x54d4fad3 | 126624796 | 34 hrs ago | IN | 0 ETH | 0.000003656316 | ||||
0x54d4fad3 | 126622090 | 35 hrs ago | IN | 0 ETH | 0.000005181543 | ||||
0x54d4fad3 | 126619764 | 36 hrs ago | IN | 0 ETH | 0.000005909795 | ||||
0x54d4fad3 | 126618905 | 37 hrs ago | IN | 0 ETH | 0.000004308375 | ||||
0x54d4fad3 | 126614504 | 39 hrs ago | IN | 0 ETH | 0.000001590821 | ||||
0xac56d39c | 126609103 | 42 hrs ago | IN | 0 ETH | 0.000001734916 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
126651466 | 19 hrs ago | 0.0025 ETH | ||||
126627292 | 32 hrs ago | 0.913311035193268 ETH | ||||
126627292 | 32 hrs ago | 0.913311035193268 ETH | ||||
126064262 | 14 days ago | 0.004325277824759 ETH | ||||
126064262 | 14 days ago | 0.000004329607432 ETH | ||||
126064262 | 14 days ago | 0.004329607432191 ETH | ||||
125985576 | 16 days ago | 0.032484832142893 ETH | ||||
125985576 | 16 days ago | 0.000032517349492 ETH | ||||
125985576 | 16 days ago | 0.032517349492386 ETH | ||||
125578494 | 25 days ago | 0.035999999999999 ETH | ||||
125324684 | 31 days ago | 0.003425324903064 ETH | ||||
125324684 | 31 days ago | 0.000003428753656 ETH | ||||
125324684 | 31 days ago | 0.003428753656721 ETH | ||||
125195752 | 34 days ago | 0.01041911418392 ETH | ||||
125195752 | 34 days ago | 0.000010429543727 ETH | ||||
125195752 | 34 days ago | 0.010429543727647 ETH | ||||
124866670 | 42 days ago | 0.043841033598684 ETH | ||||
124866670 | 42 days ago | 0.000043884918517 ETH | ||||
124866670 | 42 days ago | 0.043884918517201 ETH | ||||
124844570 | 42 days ago | 0.017 ETH | ||||
124844557 | 42 days ago | 0.017 ETH | ||||
124162516 | 58 days ago | 0.01 ETH | ||||
124103018 | 59 days ago | 0.01 ETH | ||||
124083900 | 60 days ago | 0.01 ETH | ||||
123739010 | 68 days ago | 0.0069 ETH |
Loading...
Loading
Contract Name:
vaultFactory
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: UNLICENCED pragma solidity 0.6.12; /* /$$ /$$ /$$ /$$ | $$ | $$ | $$ | $$ /$$$$$$ /$$$$$$$/$$ /$$ | $$ | $$/$$$$$$ /$$ /$| $$/$$$$$$ /$$$$$$$ |____ $$/$$_____| $$ /$$/ | $$ / $$|____ $| $$ | $| $|_ $$_/ /$$_____/ /$$$$$$| $$ \ $$$$/ \ $$ $$/ /$$$$$$| $$ | $| $$ | $$ | $$$$$$ /$$__ $| $$ >$$ $$ \ $$$/ /$$__ $| $$ | $| $$ | $$ /$\____ $$ | $$$$$$| $$$$$$$/$$/\ $$ \ $/ | $$$$$$| $$$$$$| $$ | $$$$/$$$$$$$/ \_______/\_______|__/ \__/ \_/ \_______/\______/|__/ \___/|_______/ */ // An Open X Project import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/math/SafeMath.sol"; import "./Interfaces/IVelodromePair.sol"; import './Interfaces/IGauge.sol'; import "./Interfaces/IACX.sol"; import "./Interfaces/IWETH.sol"; import "./acxToken.sol"; import "./lpHelper.sol"; contract vaultFactory is Ownable, lpHelper{ using SafeMath for uint256; // The struct for the pool information. struct PoolInfo { address rewardToken; address underlyingLp; address acxToken; address gauge; uint256 totalStaked; address[] path; uint256 lastCollectionTimestamp; } // Array of pools and mapping to check if pair already exists. PoolInfo[] public Pools; mapping(address => bool) public pairExists; // Variables for fees. uint256 public bountyfeePer10K = 100; uint256 public performanceFeePer10K = 600; uint256 public zapFeePer10K = 10; uint256 public perfPool = 0; address public weth = 0x4200000000000000000000000000000000000006; uint private unlocked = 1; //reentrancy guard modifier lock() { require(unlocked == 1, 'OpenX LOCKED'); unlocked = 0; _; unlocked = 1; } // Method to get the length of pools. function poolsLength() public view returns (uint256){ return Pools.length; } // Method to add a new vault. function addVault(address _underlyingLp, address _gauge, address[] memory path) public onlyOwner{ require(pairExists[_underlyingLp] == false, "Pool Already Exists."); pairExists[_underlyingLp] = true; PoolInfo memory newPool; acxToken acx = new acxToken(string(abi.encodePacked('acx-', IVelodromePair(_underlyingLp).symbol())) , string(abi.encodePacked('Auto Compounding X ', IVelodromePair(_underlyingLp).symbol()))); newPool.acxToken = address(acx); newPool.gauge = _gauge; newPool.underlyingLp = _underlyingLp; newPool.rewardToken = IGauge(_gauge).rewardToken(); newPool.path = path; Pools.push(newPool); } // Method to update the path for token swaps. function updatePath(uint256 _pid, address[] memory _path) public onlyOwner { Pools[_pid].path = _path; } // Method to update the performance pool. function updatePerfPool(uint256 _pid) public onlyOwner{ perfPool = _pid; } // Method to update the fees. function updateFees(uint256 _bountyfeePer10K, uint256 _performanceFeePer10K, uint256 _zapFeePer10K) public onlyOwner { require(_bountyfeePer10K.add(_performanceFeePer10K).add(_zapFeePer10K) <= 1000, "Max 10%"); bountyfeePer10K = _bountyfeePer10K; performanceFeePer10K = _performanceFeePer10K; zapFeePer10K = _zapFeePer10K; } // Method to deposit into a pool. function deposit(uint256 _pid, uint256 _amount, address _to) public lock{ IERC20 lpToken = IERC20(Pools[_pid].underlyingLp); safeTransferFrom(address(lpToken), msg.sender, address(this), _amount); _deposit(_pid, _amount, _to); } // Internal method to handle the deposit logic. function _deposit(uint256 _pid, uint256 _amount, address _to) internal { IACX acxToken = IACX(Pools[_pid].acxToken); IERC20 lpToken = IERC20(Pools[_pid].underlyingLp); IGauge gauge = IGauge(Pools[_pid].gauge); uint256 totalSupply = acxToken.totalSupply(); if(totalSupply == 0){ acxToken.mint(_to, _amount); }else{ if(Pools[_pid].lastCollectionTimestamp != block.timestamp){ Pools[_pid].lastCollectionTimestamp = block.timestamp; claimBounty(_pid,_to); } uint256 lpBal = gauge.balanceOf(address(this)); uint256 _mintAmount = _amount.mul(totalSupply).div(lpBal); acxToken.mint(_to, _mintAmount); } lpToken.approve(address(gauge), _amount); gauge.deposit(_amount); Pools[_pid].totalStaked += _amount; } // Method to withdraw from a pool. function withdraw(uint256 _pid, uint256 _amount, address _to) public lock{ _withdraw(_pid, _amount, msg.sender, _to); } // Internal method to handle the withdrawal logic. function _withdraw(uint256 _pid, uint256 _amount,address _from, address _to) internal returns(uint256) { IACX acxToken = IACX(Pools[_pid].acxToken); IERC20 lpToken = IERC20(Pools[_pid].underlyingLp); IGauge gauge = IGauge(Pools[_pid].gauge); uint256 totalSupply = acxToken.totalSupply(); uint256 lpBal = gauge.balanceOf(address(this)); uint256 withdrawAmount = _amount.mul(lpBal).div(totalSupply); acxToken.burn(_from, _amount); gauge.withdraw(withdrawAmount); safeTransfer(address(lpToken), _to, withdrawAmount); Pools[_pid].totalStaked -= withdrawAmount; return withdrawAmount; } // Method to claim the bounty. function claimBounty(uint256 _pid, address _to) public { address rewardToken = Pools[_pid].rewardToken; IGauge gauge = IGauge(Pools[_pid].gauge); uint256 earned = gauge.earned(address(this)); if(earned < 1*10**17){ return; } uint256 bounty = earned.mul(bountyfeePer10K).div(10000); uint256 performance = earned.mul(bountyfeePer10K).div(10000); gauge.getReward(address(this)); safeTransfer(rewardToken, _to, bounty); earned = earned.sub(performance).sub(bounty); uint256 amount = _compound(_pid, earned); uint256 amountPerf = _compound(perfPool, performance); _deposit(perfPool, amountPerf, owner()); Pools[_pid].totalStaked += amount; IERC20(Pools[_pid].underlyingLp).approve(address(gauge), amount); gauge.deposit(amount); } // Method to handle the compounding. function _compound(uint256 _pid, uint256 _amount) internal returns(uint256){ uint256 len = Pools[_pid].path.length; address outToken = Pools[_pid].rewardToken; for(uint i; i < len; i++){ (_amount, outToken) = _swapToken(Pools[_pid].path[i], outToken, _amount); } if(len > 0){ return _addLiquidity(outToken, Pools[_pid].underlyingLp, _amount); }else{ return _addLiquidity(Pools[_pid].rewardToken, Pools[_pid].underlyingLp, _amount); } } // Method to zap. function zap(uint256 _pid,address _inToken, uint256 _amount, address[] memory _path, address _to) public payable lock { uint256 len = _path.length; if(_inToken == weth){ IWETH(weth).deposit{value: msg.value}(); }else{ safeTransferFrom(_inToken, msg.sender, address(this), _amount); } for(uint i; i < len; i++){ (_amount, _inToken) = _swapToken(_path[i], _inToken, _amount); } _amount = _addLiquidity(_inToken, Pools[_pid].underlyingLp, _amount); uint256 feeAmount = _amount.mul(zapFeePer10K).div(10000); _deposit(_pid, feeAmount, owner()); _deposit(_pid, _amount.sub(feeAmount), _to); } // Method to unzap. function unzap(uint256 _pid,address _outToken, uint256 _amount, address[] memory _path, address _to) public lock { uint256 len = _path.length; address outToken = _outToken; address token0 = IVelodromePair(Pools[_pid].underlyingLp).token0(); address token1 = IVelodromePair(Pools[_pid].underlyingLp).token1(); if(_outToken == address(0)){ _amount = _withdraw(_pid, _amount, msg.sender, address(this)); uint256 feeAmount = _amount.mul(zapFeePer10K).div(10000); _deposit(_pid, feeAmount, owner()); safeTransfer(Pools[_pid].underlyingLp, Pools[_pid].underlyingLp, _amount.sub(feeAmount)); (uint256 amount0, uint256 amount1) = IVelodromePair(Pools[_pid].underlyingLp).burn(address(this)); if (token0 == weth) { IWETH(weth).withdraw(amount0); safeTransferETH(_to, amount0); }else{ safeTransfer(token0, _to, amount0); } if (token1 == weth) { IWETH(weth).withdraw(amount1); safeTransferETH(_to, amount1); }else{ safeTransfer(token1, _to, amount1); } }else{ _withdraw(_pid, _amount, msg.sender, Pools[_pid].underlyingLp); (uint256 amount0, uint256 amount1) = IVelodromePair(Pools[_pid].underlyingLp).burn(address(this)); if(token0 == outToken){ (_amount, outToken) = _swapToken(Pools[_pid].underlyingLp, token1, amount1); _amount += amount0; }else{ (_amount, outToken) = _swapToken(Pools[_pid].underlyingLp, token0, amount0); _amount += amount1; } for(uint i; i < len; i++){ (_amount, outToken) = _swapToken(_path[i], outToken, _amount); } uint256 feeAmount = _amount.mul(zapFeePer10K).div(10000); if(_outToken == weth){ IWETH(weth).withdraw(_amount); safeTransferETH(owner(), feeAmount); safeTransferETH(_to, _amount.sub(feeAmount)); }else{ safeTransfer(_outToken, owner(), feeAmount); safeTransfer(_outToken, _to, _amount.sub(feeAmount)); } } } //Receive Eth receive() external payable{} function safeTransferETH(address to, uint _value) internal { (bool success,) = to.call{value:_value}(new bytes(0)); require(success, 'ETH_TRANSFER_FAILED'); } function safeTransferFrom(address token, address from, address to, uint value) internal { // bytes4(keccak256(bytes('transferFrom(address,address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TRANSFER_FROM_FAILED'); } function safeTransfer(address token, address to, uint value) internal { // bytes4(keccak256(bytes('transfer(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TRANSFER_FAILED'); } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "../utils/Context.sol"; /** * @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 () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; import "../../utils/Context.sol"; import "./IERC20.sol"; import "../../math/SafeMath.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name_, string memory symbol_) public { _name = name_; _symbol = symbol_; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view virtual returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal virtual { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @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 `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount) external returns (bool); /** * @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); }
// SPDX-License-Identifier: MIT pragma solidity >=0.6.0 <0.8.0; /* * @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 GSN 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 payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/token/ERC20/ERC20.sol"; import "@openzeppelin/contracts/math/SafeMath.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; contract acxToken is ERC20, Ownable{ constructor(string memory symbol, string memory name) public ERC20(symbol, name) { } function mint(address _to, uint256 _amount) public onlyOwner{ _mint(_to, _amount); } function burn(address _from, uint256 _amount) public{ if(msg.sender != owner()){ require(msg.sender == _from, "No"); } _burn(_from, _amount); } }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IACX{ function burn(address _to, uint256 _amount) external; function mint(address _to, uint256 _amount) external; function totalSupply() external returns(uint256); }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IGauge{ function getReward(address account) external; function deposit(uint amount) external; function withdraw(uint amount) external; function balanceOf(address) external view returns (uint); function earned(address account) external view returns (uint); function rewardToken() external view returns (address); }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.12; interface IVelodromePair { function allowance(address owner, address spender)external view returns(uint256); function approve(address spender, uint256 amount)external returns(bool); function balanceOf(address account)external view returns(uint256); function burn(address to)external returns(uint256 amount0, uint256 amount1); function getAmountOut(uint256 amountIn, address tokenIn)external view returns(uint256); function getReserves() external view returns(uint256 _reserve0, uint256 _reserve1, uint256 _blockTimestampLast); function mint(address to)external returns(uint256 liquidity); function name() external view returns(string memory); function quote(address tokenIn, uint256 amountIn, uint256 granularity)external view returns(uint256 amountOut); function reserve0() external view returns(uint256); function reserve1() external view returns(uint256); function stable() external view returns(bool); function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes memory data)external; function symbol() external view returns(string memory); function token0() external view returns(address); function token1() external view returns(address); }
// SPDX-License-Identifier: MIT pragma solidity 0.6.12; interface IWETH { function deposit() external payable; function withdraw(uint256 value) external; }
// SPDX-License-Identifier: MIT import "@openzeppelin/contracts/math/SafeMath.sol"; import "./Interfaces/IVelodromePair.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; pragma solidity ^0.6.12; library Babylonian { function sqrt(uint256 y) internal pure returns (uint256 z) { if (y > 3) { z = y; uint256 x = y / 2 + 1; while (x < z) { z = x; x = (y / x + x) / 2; } } else if (y != 0) { z = 1; } // else z = 0 } } contract lpHelper { using SafeMath for uint256; function calculateSwapInAmount(uint256 reserveIn, uint256 reserveOut, uint256 userIn, bool stable,uint256 amountOut) public pure returns (uint256) { if(stable){ uint ratio = amountOut * 1e18 / (userIn) * reserveIn / reserveOut; return userIn * 1e18 / (ratio + 1e18); } return Babylonian .sqrt( reserveIn.mul(userIn.mul(3988000) + reserveIn.mul(3988009)) ) .sub(reserveIn.mul(1997)) / 1994; } function _addLiquidity(address _token, address _pair, uint256 _amount) internal returns (uint256 liquidity) { address token0 = IVelodromePair(_pair).token0(); address token1 = IVelodromePair(_pair).token1(); if(token0 != _token){ (uint256 amountIn,uint256 amountOut) = _swapTokenForLiq(_pair, token1, _amount); IERC20(token1).transfer(address(_pair), amountIn); IERC20(token0).transfer(address(_pair), amountOut); liquidity = IVelodromePair(_pair).mint(address(this)); }else{ (uint256 amountIn,uint256 amountOut) = _swapTokenForLiq(_pair, token0, _amount); IERC20(token0).transfer(address(_pair), amountIn); IERC20(token1).transfer(address(_pair), amountOut); liquidity = IVelodromePair(_pair).mint(address(this)); } } function _swapTokenForLiq(address _pair, address fromToken, uint256 amountIn) internal returns (uint256 inputAmount, uint256 amountOut) { IVelodromePair pair = IVelodromePair(_pair); (uint256 reserve0, uint256 reserve1,) = pair.getReserves(); bool stable = IVelodromePair(_pair).stable(); uint256 out = IVelodromePair(_pair).getAmountOut(amountIn, fromToken); if (fromToken == pair.token0()) { inputAmount = calculateSwapInAmount(reserve0, reserve1 , amountIn, stable, out); IERC20(fromToken).transfer(address(pair), inputAmount); amountOut = pair.getAmountOut(inputAmount, fromToken); pair.swap(0, amountOut, address(this), new bytes(0)); inputAmount = amountIn.sub(inputAmount); } else { inputAmount = calculateSwapInAmount(reserve1, reserve0 ,amountIn, stable, out); IERC20(fromToken).transfer(address(pair), inputAmount); amountOut = pair.getAmountOut(inputAmount, fromToken); pair.swap(amountOut, 0, address(this), new bytes(0)); inputAmount = amountIn.sub(inputAmount); } } function _swapToken(address _pair, address fromToken, uint256 amountIn) internal returns(uint256 amountOut, address outToken){ IVelodromePair pair = IVelodromePair(_pair); if (fromToken == pair.token0()) { outToken = pair.token1(); IERC20(fromToken).transfer(address(pair), amountIn); amountOut = pair.getAmountOut(amountIn, fromToken); pair.swap(0, amountOut, address(this), new bytes(0)); } else { outToken = pair.token0(); IERC20(fromToken).transfer(address(pair), amountIn); amountOut = pair.getAmountOut(amountIn, fromToken); pair.swap(amountOut, 0, address(this), new bytes(0)); } } }
{ "optimizer": { "enabled": true, "runs": 10000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"Pools","outputs":[{"internalType":"address","name":"rewardToken","type":"address"},{"internalType":"address","name":"underlyingLp","type":"address"},{"internalType":"address","name":"acxToken","type":"address"},{"internalType":"address","name":"gauge","type":"address"},{"internalType":"uint256","name":"totalStaked","type":"uint256"},{"internalType":"uint256","name":"lastCollectionTimestamp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_underlyingLp","type":"address"},{"internalType":"address","name":"_gauge","type":"address"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"addVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bountyfeePer10K","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"},{"internalType":"uint256","name":"userIn","type":"uint256"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"amountOut","type":"uint256"}],"name":"calculateSwapInAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"claimBounty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"pairExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"perfPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"performanceFeePer10K","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_outToken","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address[]","name":"_path","type":"address[]"},{"internalType":"address","name":"_to","type":"address"}],"name":"unzap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_bountyfeePer10K","type":"uint256"},{"internalType":"uint256","name":"_performanceFeePer10K","type":"uint256"},{"internalType":"uint256","name":"_zapFeePer10K","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address[]","name":"_path","type":"address[]"}],"name":"updatePath","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePerfPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_inToken","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address[]","name":"_path","type":"address[]"},{"internalType":"address","name":"_to","type":"address"}],"name":"zap","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"zapFeePer10K","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526064600355610258600455600a6005556000600655600780546001600160a01b03191673420000000000000000000000000000000000000617905560016008553480156200005157600080fd5b5060006200005e620000ae565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350620000b2565b3390565b615b4f80620000c26000396000f3fe608060405260043610620001935760003560e01c806373dfccca11620000df578063ac56d39c116200008b578063ec55045f1162000061578063ec55045f14620007cd578063ed17230b14620007e5578063f2fde38b14620007fd576200019b565b8063ac56d39c1462000687578063e3e01aad1462000757578063e910b36c1462000785576200019b565b80638da5cb5b11620000c15780638da5cb5b14620006145780638dbdbe6d146200062c578063a4f688fb146200066f576200019b565b806373dfccca146200058957806386079e3214620005fc576200019b565b8063321720db116200013f57806354d4fad3116200012157806354d4fad31462000476578063715018a614620004b357806372e617c814620004cb576200019b565b8063321720db14620003645780633fc8cef31462000442576200019b565b80631a56f64811620001755780631a56f64814620002b55780632242908514620003005780632716ae66146200033a576200019b565b80630ad58d2f14620001a05780630d55850914620001e5576200019b565b366200019b57005b600080fd5b348015620001ad57600080fd5b50620001e360048036036060811015620001c657600080fd5b50803590602081013590604001356001600160a01b031662000834565b005b348015620001f257600080fd5b50620001e3600480360360608110156200020b57600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156200024057600080fd5b8201836020820111156200025357600080fd5b803590602001918460208302840111640100000000831117156200027657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550620008aa945050505050565b348015620002c257600080fd5b50620002ec60048036036020811015620002db57600080fd5b50356001600160a01b031662001097565b604080519115158252519081900360200190f35b3480156200030d57600080fd5b50620001e3600480360360608110156200032657600080fd5b5080359060208101359060400135620010ac565b3480156200034757600080fd5b5062000352620011a2565b60408051918252519081900360200190f35b3480156200037157600080fd5b50620001e3600480360360a08110156200038a57600080fd5b8135916001600160a01b036020820135169160408201359190810190608081016060820135640100000000811115620003c257600080fd5b820183602082011115620003d557600080fd5b80359060200191846020830284011164010000000083111715620003f857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505090356001600160a01b03169150620011a89050565b3480156200044f57600080fd5b506200045a62001964565b604080516001600160a01b039092168252519081900360200190f35b3480156200048357600080fd5b50620001e3600480360360408110156200049c57600080fd5b50803590602001356001600160a01b031662001973565b348015620004c057600080fd5b50620001e362001cdf565b348015620004d857600080fd5b50620001e360048036036040811015620004f157600080fd5b813591908101906040810160208201356401000000008111156200051457600080fd5b8201836020820111156200052757600080fd5b803590602001918460208302840111640100000000831117156200054a57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955062001dba945050505050565b3480156200059657600080fd5b50620005b760048036036020811015620005af57600080fd5b503562001e6d565b604080516001600160a01b039788168152958716602087015293861685850152919094166060840152608083019390935260a082019290925290519081900360c00190f35b3480156200060957600080fd5b506200035262001ec1565b3480156200062157600080fd5b506200045a62001ec7565b3480156200063957600080fd5b50620001e3600480360360608110156200065257600080fd5b50803590602081013590604001356001600160a01b031662001ed6565b3480156200067c57600080fd5b506200035262001f7e565b620001e3600480360360a08110156200069f57600080fd5b8135916001600160a01b036020820135169160408201359190810190608081016060820135640100000000811115620006d757600080fd5b820183602082011115620006ea57600080fd5b803590602001918460208302840111640100000000831117156200070d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505090356001600160a01b0316915062001f849050565b3480156200076457600080fd5b50620001e3600480360360208110156200077d57600080fd5b503562002145565b3480156200079257600080fd5b5062000352600480360360a0811015620007ab57600080fd5b50803590602081013590604081013590606081013515159060800135620021c3565b348015620007da57600080fd5b506200035262002278565b348015620007f257600080fd5b50620003526200227e565b3480156200080a57600080fd5b50620001e3600480360360208110156200082357600080fd5b50356001600160a01b031662002284565b6008546001146200088c576040805162461bcd60e51b815260206004820152600c60248201527f4f70656e58204c4f434b45440000000000000000000000000000000000000000604482015290519081900360640190fd5b60006008556200089f83833384620023b7565b505060016008555050565b620008b46200267a565b6001600160a01b0316620008c762001ec7565b6001600160a01b03161462000923576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03831660009081526002602052604090205460ff161562000992576040805162461bcd60e51b815260206004820152601460248201527f506f6f6c20416c7265616479204578697374732e000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038316600090815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055620009dd6200436e565b6000846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801562000a1957600080fd5b505afa15801562000a2e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101562000a5857600080fd5b810190808051604051939291908464010000000082111562000a7957600080fd5b90830190602082018581111562000a8f57600080fd5b825164010000000081118282018810171562000aaa57600080fd5b82525081516020918201929091019080838360005b8381101562000ad957818101518382015260200162000abf565b50505050905090810190601f16801562000b075780820380516001836020036101000a031916815260200191505b5060405250505060405160200180807f6163782d0000000000000000000000000000000000000000000000000000000081525060040182805190602001908083835b6020831062000b6a5780518252601f19909201916020918201910162000b49565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052856001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801562000bd857600080fd5b505afa15801562000bed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101562000c1757600080fd5b810190808051604051939291908464010000000082111562000c3857600080fd5b90830190602082018581111562000c4e57600080fd5b825164010000000081118282018810171562000c6957600080fd5b82525081516020918201929091019080838360005b8381101562000c9857818101518382015260200162000c7e565b50505050905090810190601f16801562000cc65780820380516001836020036101000a031916815260200191505b5060405250505060405160200180807f4175746f20436f6d706f756e64696e672058200000000000000000000000000081525060130182805190602001908083835b6020831062000d295780518252601f19909201916020918201910162000d08565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405260405162000d6b90620043a9565b604080825283519082015282518190602080830191606084019187019080838360005b8381101562000da857818101518382015260200162000d8e565b50505050905090810190601f16801562000dd65780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101562000e0b57818101518382015260200162000df1565b50505050905090810190601f16801562000e395780820380516001836020036101000a031916815260200191505b50945050505050604051809103906000f08015801562000e5d573d6000803e3d6000fd5b506001600160a01b038082166040808601919091528682166060860181905291881660208087019190915281517ff7c618c10000000000000000000000000000000000000000000000000000000081529151939450919263f7c618c192600480840193919291829003018186803b15801562000ed857600080fd5b505afa15801562000eed573d6000803e3d6000fd5b505050506040513d602081101562000f0457600080fd5b50516001600160a01b03908116835260a0830184815260018054808201825560009190915284517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6600790920291820180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169286169290921781556020808801517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf785018054851691881691909117905560408801517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf885018054851691881691909117905560608801517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf98501805490941696169590951790915560808601517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa83015591518051869462001083937fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfb01920190620043b7565b5060c0820151816006015550505050505050565b60026020526000908152604090205460ff1681565b620010b66200267a565b6001600160a01b0316620010c962001ec7565b6001600160a01b03161462001125576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6103e862001140826200113986866200267e565b906200267e565b111562001194576040805162461bcd60e51b815260206004820152600760248201527f4d61782031302500000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600392909255600455600555565b60015490565b60085460011462001200576040805162461bcd60e51b815260206004820152600c60248201527f4f70656e58204c4f434b45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000600881905582516001805491928792909190899081106200121f57fe5b600091825260209182902060016007909202010154604080517f0dfe168100000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921692630dfe168192600480840193829003018186803b1580156200128a57600080fd5b505afa1580156200129f573d6000803e3d6000fd5b505050506040513d6020811015620012b657600080fd5b5051600180549192506000918a908110620012cd57fe5b600091825260209182902060016007909202010154604080517fd21220a700000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169263d21220a792600480840193829003018186803b1580156200133857600080fd5b505afa1580156200134d573d6000803e3d6000fd5b505050506040513d60208110156200136457600080fd5b505190506001600160a01b0388166200166f576200138589883330620023b7565b96506000620013ae612710620013a76005548b620026e290919063ffffffff16565b9062002740565b9050620013c68a82620013c062001ec7565b620027a9565b6200143a60018b81548110620013d857fe5b906000526020600020906007020160010160009054906101000a90046001600160a01b031660018c815481106200140b57fe5b60009182526020909120600160079092020101546001600160a01b0316620014348b8562002bbc565b62002c1a565b60008060018c815481106200144b57fe5b60009182526020822060016007909202010154604080517f89afcb4400000000000000000000000000000000000000000000000000000000815230600482015281516001600160a01b03909316936389afcb4493602480840194939192918390030190829087803b158015620014c057600080fd5b505af1158015620014d5573d6000803e3d6000fd5b505050506040513d6040811015620014ec57600080fd5b50805160209091015160075491935091506001600160a01b0386811691161415620015a357600754604080517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810185905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156200157857600080fd5b505af11580156200158d573d6000803e3d6000fd5b505050506200159d888362002dba565b620015b0565b620015b085898462002c1a565b6007546001600160a01b03858116911614156200165957600754604080517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156200162e57600080fd5b505af115801562001643573d6000803e3d6000fd5b5050505062001653888262002dba565b62001666565b6200166684898362002c1a565b50505062001954565b620016a789883360018d815481106200168457fe5b60009182526020909120600160079092020101546001600160a01b0316620023b7565b5060008060018b81548110620016b957fe5b60009182526020822060016007909202010154604080517f89afcb4400000000000000000000000000000000000000000000000000000000815230600482015281516001600160a01b03909316936389afcb4493602480840194939192918390030190829087803b1580156200172e57600080fd5b505af115801562001743573d6000803e3d6000fd5b505050506040513d60408110156200175a57600080fd5b50805160209091015190925090506001600160a01b038481169086161415620017c157620017b460018c815481106200178f57fe5b60009182526020909120600160079092020101546001600160a01b0316848362002ec8565b9083019950945062001800565b620017f860018c81548110620017d357fe5b60009182526020909120600160079092020101546001600160a01b0316858462002ec8565b908201995094505b60005b868110156200183b576200182d8982815181106200181d57fe5b6020026020010151878c62002ec8565b909a50955060010162001803565b5060006200185c612710620013a76005548d620026e290919063ffffffff16565b6007549091506001600160a01b038c8116911614156200192857600754604080517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018d905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b158015620018dd57600080fd5b505af1158015620018f2573d6000803e3d6000fd5b505050506200190b6200190462001ec7565b8262002dba565b62001922886200191c8c8462002bbc565b62002dba565b62001950565b6200193e8b6200193762001ec7565b8362002c1a565b620019508b89620014348d8562002bbc565b5050505b5050600160085550505050505050565b6007546001600160a01b031681565b6000600183815481106200198357fe5b60009182526020822060079091020154600180546001600160a01b0390921693509085908110620019b057fe5b6000918252602080832060036007909302019190910154604080517e8cc26200000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b0390921694508492628cc26292602480840193829003018186803b15801562001a2457600080fd5b505afa15801562001a39573d6000803e3d6000fd5b505050506040513d602081101562001a5057600080fd5b5051905067016345785d8a000081101562001a6e5750505062001cdb565b600062001a8e612710620013a760035485620026e290919063ffffffff16565b9050600062001ab0612710620013a760035486620026e290919063ffffffff16565b9050836001600160a01b031663c00007b0306040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801562001b0257600080fd5b505af115801562001b17573d6000803e3d6000fd5b5050505062001b2885878462002c1a565b62001b408262001b39858462002bbc565b9062002bbc565b9250600062001b508885620034a9565b9050600062001b6260065484620034a9565b905062001b7660065482620013c062001ec7565b8160018a8154811062001b8557fe5b6000918252602090912060046007909202010180549091019055600180548a90811062001bae57fe5b906000526020600020906007020160010160009054906101000a90046001600160a01b03166001600160a01b031663095ea7b387846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801562001c2a57600080fd5b505af115801562001c3f573d6000803e3d6000fd5b505050506040513d602081101562001c5657600080fd5b5050604080517fb6b55f250000000000000000000000000000000000000000000000000000000081526004810184905290516001600160a01b0388169163b6b55f2591602480830192600092919082900301818387803b15801562001cba57600080fd5b505af115801562001ccf573d6000803e3d6000fd5b50505050505050505050505b5050565b62001ce96200267a565b6001600160a01b031662001cfc62001ec7565b6001600160a01b03161462001d58576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b62001dc46200267a565b6001600160a01b031662001dd762001ec7565b6001600160a01b03161462001e33576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b806001838154811062001e4257fe5b9060005260206000209060070201600501908051906020019062001e68929190620043b7565b505050565b6001818154811062001e7b57fe5b60009182526020909120600790910201805460018201546002830154600384015460048501546006909501546001600160a01b0394851696509284169491841693169186565b60045481565b6000546001600160a01b031690565b60085460011462001f2e576040805162461bcd60e51b815260206004820152600c60248201527f4f70656e58204c4f434b45440000000000000000000000000000000000000000604482015290519081900360640190fd5b60006008819055600180548590811062001f4457fe5b60009182526020909120600160079092020101546001600160a01b0316905062001f7181333086620035c3565b6200089f848484620027a9565b60055481565b60085460011462001fdc576040805162461bcd60e51b815260206004820152600c60248201527f4f70656e58204c4f434b45440000000000000000000000000000000000000000604482015290519081900360640190fd5b600060085581516007546001600160a01b03868116911614156200206b57600760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200204b57600080fd5b505af115801562002060573d6000803e3d6000fd5b505050505062002079565b6200207985333087620035c3565b60005b81811015620020b357620020a68482815181106200209657fe5b6020026020010151878762002ec8565b965094506001016200207c565b50620020eb8560018881548110620020c757fe5b60009182526020909120600160079092020101546001600160a01b0316866200376c565b935060006200210d612710620013a760055488620026e290919063ffffffff16565b90506200211f8782620013c062001ec7565b620021378762002130878462002bbc565b85620027a9565b505060016008555050505050565b6200214f6200267a565b6001600160a01b03166200216262001ec7565b6001600160a01b031614620021be576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600655565b600082156200221957600085878685670de0b6b3a76400000281620021e457fe5b040281620021ee57fe5b04905080670de0b6b3a76400000185670de0b6b3a764000002816200220f57fe5b049150506200226f565b6107ca620022636200222e886107cd620026e2565b62001b396200225d620022458b623cda29620026e2565b620022548a623cda20620026e2565b8c9101620026e2565b62003c1e565b816200226b57fe5b0490505b95945050505050565b60065481565b60035481565b6200228e6200267a565b6001600160a01b0316620022a162001ec7565b6001600160a01b031614620022fd576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620023445760405162461bcd60e51b815260040180806020018281038252602681526020018062005ad36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008060018681548110620023c857fe5b60009182526020822060026007909202010154600180546001600160a01b0390921693509088908110620023f857fe5b600091825260208220600160079092020181015481546001600160a01b039091169350899081106200242657fe5b906000526020600020906007020160030160009054906101000a90046001600160a01b031690506000836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156200248b57600080fd5b505af1158015620024a0573d6000803e3d6000fd5b505050506040513d6020811015620024b757600080fd5b5051604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156200251f57600080fd5b505afa15801562002534573d6000803e3d6000fd5b505050506040513d60208110156200254b57600080fd5b5051905060006200256283620013a78c85620026e2565b9050856001600160a01b0316639dc29fac8a8c6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015620025bc57600080fd5b505af1158015620025d1573d6000803e3d6000fd5b50505050836001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156200261c57600080fd5b505af115801562002631573d6000803e3d6000fd5b505050506200264285898362002c1a565b8060018c815481106200265157fe5b6000918252602090912060079091020160040180549190910390559a9950505050505050505050565b3390565b600082820183811015620026d9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600082620026f357506000620026dc565b828202828482816200270157fe5b0414620026d95760405162461bcd60e51b815260040180806020018281038252602181526020018062005af96021913960400191505060405180910390fd5b600080821162002797576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381620027a157fe5b049392505050565b600060018481548110620027b957fe5b60009182526020822060026007909202010154600180546001600160a01b0390921693509086908110620027e957fe5b600091825260208220600160079092020181015481546001600160a01b039091169350879081106200281757fe5b906000526020600020906007020160030160009054906101000a90046001600160a01b031690506000836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156200287c57600080fd5b505af115801562002891573d6000803e3d6000fd5b505050506040513d6020811015620028a857600080fd5b50519050806200292957836001600160a01b03166340c10f1986886040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156200290a57600080fd5b505af11580156200291f573d6000803e3d6000fd5b5050505062002a89565b42600188815481106200293857fe5b90600052602060002090600702016006015414620029805742600188815481106200295f57fe5b90600052602060002090600702016006018190555062002980878662001973565b6000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015620029d057600080fd5b505afa158015620029e5573d6000803e3d6000fd5b505050506040513d6020811015620029fc57600080fd5b50519050600062002a1382620013a78a86620026e2565b9050856001600160a01b03166340c10f1988836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801562002a6d57600080fd5b505af115801562002a82573d6000803e3d6000fd5b5050505050505b826001600160a01b031663095ea7b383886040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801562002ae157600080fd5b505af115801562002af6573d6000803e3d6000fd5b505050506040513d602081101562002b0d57600080fd5b5050604080517fb6b55f250000000000000000000000000000000000000000000000000000000081526004810188905290516001600160a01b0384169163b6b55f2591602480830192600092919082900301818387803b15801562002b7157600080fd5b505af115801562002b86573d6000803e3d6000fd5b50505050856001888154811062002b9957fe5b600091825260209091206004600790920201018054909101905550505050505050565b60008282111562002c14576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b6020831062002cc75780518252601f19909201916020918201910162002ca6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462002d2b576040519150601f19603f3d011682016040523d82523d6000602084013e62002d30565b606091505b509150915081801562002d6157508051158062002d61575080806020019051602081101562002d5e57600080fd5b50515b62002db3576040805162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831062002e085780518252601f19909201916020918201910162002de7565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811462002e6c576040519150601f19603f3d011682016040523d82523d6000602084013e62002e71565b606091505b505090508062001e68576040805162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b6000806000859050806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801562002f0a57600080fd5b505afa15801562002f1f573d6000803e3d6000fd5b505050506040513d602081101562002f3657600080fd5b50516001600160a01b0386811691161415620031fb57806001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801562002f8657600080fd5b505afa15801562002f9b573d6000803e3d6000fd5b505050506040513d602081101562002fb257600080fd5b5051604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526024820188905291519294509087169163a9059cbb916044808201926020929091908290030181600087803b1580156200302457600080fd5b505af115801562003039573d6000803e3d6000fd5b505050506040513d60208110156200305057600080fd5b5050604080517ff140a35a000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b03878116602483015291519183169163f140a35a91604480820192602092909190829003018186803b158015620030bd57600080fd5b505afa158015620030d2573d6000803e3d6000fd5b505050506040513d6020811015620030e957600080fd5b505160408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201818152604483018590523060648401819052608060848501908152845160a486018190529699506001600160a01b0388169663022c0d9f9694958b959394909390929160c4850191908083838b5b838110156200318b57818101518382015260200162003171565b50505050905090810190601f168015620031b95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015620031dc57600080fd5b505af1158015620031f1573d6000803e3d6000fd5b50505050620034a0565b806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200323557600080fd5b505afa1580156200324a573d6000803e3d6000fd5b505050506040513d60208110156200326157600080fd5b5051604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526024820188905291519294509087169163a9059cbb916044808201926020929091908290030181600087803b158015620032d357600080fd5b505af1158015620032e8573d6000803e3d6000fd5b505050506040513d6020811015620032ff57600080fd5b5050604080517ff140a35a000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b03878116602483015291519183169163f140a35a91604480820192602092909190829003018186803b1580156200336c57600080fd5b505afa15801562003381573d6000803e3d6000fd5b505050506040513d60208110156200339857600080fd5b505160408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201848152604483018290523060648401819052608060848501908152845160a486018190529699506001600160a01b0388169663022c0d9f968b969394929160c4850191908083838a5b83811015620034355781810151838201526020016200341b565b50505050905090810190601f168015620034635780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156200348657600080fd5b505af11580156200349b573d6000803e3d6000fd5b505050505b50935093915050565b60008060018481548110620034ba57fe5b9060005260206000209060070201600501805490509050600060018581548110620034e157fe5b600091825260208220600790910201546001600160a01b031691505b82811015620035605762003552600187815481106200351857fe5b906000526020600020906007020160050182815481106200353557fe5b6000918252602090912001546001600160a01b0316838762002ec8565b9095509150600101620034fd565b50811562003585576200357b8160018781548110620020c757fe5b92505050620026dc565b6200357b600186815481106200359757fe5b6000918252602090912060079091020154600180546001600160a01b039092169188908110620020c757fe5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b60208310620036785780518252601f19909201916020918201910162003657565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114620036dc576040519150601f19603f3d011682016040523d82523d6000602084013e620036e1565b606091505b5091509150818015620037125750805115806200371257508080602001905160208110156200370f57600080fd5b50515b62003764576040805162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000604482015290519081900360640190fd5b505050505050565b600080836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015620037a957600080fd5b505afa158015620037be573d6000803e3d6000fd5b505050506040513d6020811015620037d557600080fd5b5051604080517fd21220a700000000000000000000000000000000000000000000000000000000815290519192506000916001600160a01b0387169163d21220a7916004808301926020929190829003018186803b1580156200383757600080fd5b505afa1580156200384c573d6000803e3d6000fd5b505050506040513d60208110156200386357600080fd5b505190506001600160a01b038281169087161462003a4b576000806200388b87848862003c77565b91509150826001600160a01b031663a9059cbb88846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015620038e757600080fd5b505af1158015620038fc573d6000803e3d6000fd5b505050506040513d60208110156200391357600080fd5b5050604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301526024820184905291519186169163a9059cbb916044808201926020929091908290030181600087803b1580156200398257600080fd5b505af115801562003997573d6000803e3d6000fd5b505050506040513d6020811015620039ae57600080fd5b5050604080517f6a62784200000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b03891691636a6278429160248083019260209291908290030181600087803b15801562003a1257600080fd5b505af115801562003a27573d6000803e3d6000fd5b505050506040513d602081101562003a3e57600080fd5b5051945062003c15915050565b60008062003a5b87858862003c77565b91509150836001600160a01b031663a9059cbb88846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801562003ab757600080fd5b505af115801562003acc573d6000803e3d6000fd5b505050506040513d602081101562003ae357600080fd5b5050604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301526024820184905291519185169163a9059cbb916044808201926020929091908290030181600087803b15801562003b5257600080fd5b505af115801562003b67573d6000803e3d6000fd5b505050506040513d602081101562003b7e57600080fd5b5050604080517f6a62784200000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b03891691636a6278429160248083019260209291908290030181600087803b15801562003be257600080fd5b505af115801562003bf7573d6000803e3d6000fd5b505050506040513d602081101562003c0e57600080fd5b5051945050505b50509392505050565b6000600382111562003c67575080600160028204015b8181101562003c605780915060028182858162003c4d57fe5b04018162003c5757fe5b04905062003c34565b5062003c72565b811562003c72575060015b919050565b6000806000859050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801562003cbc57600080fd5b505afa15801562003cd1573d6000803e3d6000fd5b505050506040513d606081101562003ce857600080fd5b508051602091820151604080517f22be3de100000000000000000000000000000000000000000000000000000000815290519295509093506000926001600160a01b038c16926322be3de1926004808201939291829003018186803b15801562003d5157600080fd5b505afa15801562003d66573d6000803e3d6000fd5b505050506040513d602081101562003d7d57600080fd5b5051604080517ff140a35a000000000000000000000000000000000000000000000000000000008152600481018a90526001600160a01b038b811660248301529151929350600092918c169163f140a35a91604480820192602092909190829003018186803b15801562003df057600080fd5b505afa15801562003e05573d6000803e3d6000fd5b505050506040513d602081101562003e1c57600080fd5b5051604080517f0dfe168100000000000000000000000000000000000000000000000000000000815290519192506001600160a01b03871691630dfe168191600480820192602092909190829003018186803b15801562003e7c57600080fd5b505afa15801562003e91573d6000803e3d6000fd5b505050506040513d602081101562003ea857600080fd5b50516001600160a01b038a811691161415620041155762003ecd84848a8585620021c3565b9650886001600160a01b031663a9059cbb86896040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801562003f2757600080fd5b505af115801562003f3c573d6000803e3d6000fd5b505050506040513d602081101562003f5357600080fd5b5050604080517ff140a35a000000000000000000000000000000000000000000000000000000008152600481018990526001600160a01b038b8116602483015291519187169163f140a35a91604480820192602092909190829003018186803b15801562003fc057600080fd5b505afa15801562003fd5573d6000803e3d6000fd5b505050506040513d602081101562003fec57600080fd5b505160408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201818152604483018590523060648401819052608060848501908152845160a48601819052969c506001600160a01b038c169663022c0d9f9694958e959394909390929160c4850191908083838b5b838110156200408e57818101518382015260200162004074565b50505050905090810190601f168015620040bc5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015620040df57600080fd5b505af1158015620040f4573d6000803e3d6000fd5b505050506200410d878962002bbc90919063ffffffff16565b96506200349b565b6200412483858a8585620021c3565b9650886001600160a01b031663a9059cbb86896040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156200417e57600080fd5b505af115801562004193573d6000803e3d6000fd5b505050506040513d6020811015620041aa57600080fd5b5050604080517ff140a35a000000000000000000000000000000000000000000000000000000008152600481018990526001600160a01b038b8116602483015291519187169163f140a35a91604480820192602092909190829003018186803b1580156200421757600080fd5b505afa1580156200422c573d6000803e3d6000fd5b505050506040513d60208110156200424357600080fd5b505160408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201848152604483018290523060648401819052608060848501908152845160a48601819052969c506001600160a01b038c169663022c0d9f968e969394929160c4850191908083838a5b83811015620042e0578181015183820152602001620042c6565b50505050905090810190601f1680156200430e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156200433157600080fd5b505af115801562004346573d6000803e3d6000fd5b505050506200435f878962002bbc90919063ffffffff16565b96505050505050935093915050565b6040805160e08101825260008082526020820181905291810182905260608082018390526080820183905260a082015260c081019190915290565b611660806200447383390190565b82805482825590600052602060002090810192821562004427579160200282015b828111156200442757825182547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909116178255602090920191600190910190620043d8565b506200443592915062004439565b5090565b5b80821115620044355780547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001016200443a56fe60806040523480156200001157600080fd5b506040516200166038038062001660833981810160405260408110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b50604052505082518391508290620001b89060039060208501906200024c565b508051620001ce9060049060208401906200024c565b50506005805460ff19166012179055506000620001ea62000248565b60058054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3505050620002e8565b3390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200028f57805160ff1916838001178555620002bf565b82800160010185558215620002bf579182015b82811115620002bf578251825591602001919060010190620002a2565b50620002cd929150620002d1565b5090565b5b80821115620002cd5760008155600101620002d2565b61136880620002f86000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063715018a611610097578063a457c2d711610066578063a457c2d71461036b578063a9059cbb146103a4578063dd62ed3e146103dd578063f2fde38b1461041857610100565b8063715018a6146102f15780638da5cb5b146102f957806395d89b411461032a5780639dc29fac1461033257610100565b8063313ce567116100d3578063313ce5671461022c578063395093511461024a57806340c10f191461028357806370a08231146102be57610100565b806306fdde0314610105578063095ea7b31461018257806318160ddd146101cf57806323b872dd146101e9575b600080fd5b61010d61044b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014757818101518382015260200161012f565b50505050905090810190601f1680156101745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101bb6004803603604081101561019857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356104ff565b604080519115158252519081900360200190f35b6101d761051c565b60408051918252519081900360200190f35b6101bb600480360360608110156101ff57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610522565b6102346105c3565b6040805160ff9092168252519081900360200190f35b6101bb6004803603604081101561026057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356105cc565b6102bc6004803603604081101561029957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610627565b005b6101d7600480360360208110156102d457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106c3565b6102bc6106eb565b6103016107ed565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61010d61080e565b6102bc6004803603604081101561034857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561088d565b6101bb6004803603604081101561038157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561093b565b6101bb600480360360408110156103ba57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356109b0565b6101d7600480360360408110156103f357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166109c4565b6102bc6004803603602081101561042e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109fc565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104f55780601f106104ca576101008083540402835291602001916104f5565b820191906000526020600020905b8154815290600101906020018083116104d857829003601f168201915b5050505050905090565b600061051361050c610b74565b8484610b78565b50600192915050565b60025490565b600061052f848484610c8b565b6105b98461053b610b74565b6105b48560405180606001604052806028815260200161127c6028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020526040812090610586610b74565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549190610e27565b610b78565b5060019392505050565b60055460ff1690565b60006105136105d9610b74565b846105b485600160006105ea610b74565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c168152925290205490610ebe565b61062f610b74565b73ffffffffffffffffffffffffffffffffffffffff1661064d6107ed565b73ffffffffffffffffffffffffffffffffffffffff16146106b5576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6106bf8282610f1f565b5050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6106f3610b74565b73ffffffffffffffffffffffffffffffffffffffff166107116107ed565b73ffffffffffffffffffffffffffffffffffffffff1614610779576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600554604051600091610100900473ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff169055565b600554610100900473ffffffffffffffffffffffffffffffffffffffff1690565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104f55780601f106104ca576101008083540402835291602001916104f5565b6108956107ed565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610931573373ffffffffffffffffffffffffffffffffffffffff831614610931576040805162461bcd60e51b815260206004820152600260248201527f4e6f000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6106bf8282611036565b6000610513610948610b74565b846105b48560405180606001604052806025815260200161130e6025913960016000610972610b74565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d16815292529020549190610e27565b60006105136109bd610b74565b8484610c8b565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b610a04610b74565b73ffffffffffffffffffffffffffffffffffffffff16610a226107ed565b73ffffffffffffffffffffffffffffffffffffffff1614610a8a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610adc5760405162461bcd60e51b815260040180806020018281038252602681526020018061120e6026913960400191505060405180910390fd5b60055460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b3390565b73ffffffffffffffffffffffffffffffffffffffff8316610bca5760405162461bcd60e51b81526004018080602001828103825260248152602001806112ea6024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610c1c5760405162461bcd60e51b81526004018080602001828103825260228152602001806112346022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610cdd5760405162461bcd60e51b81526004018080602001828103825260258152602001806112c56025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610d2f5760405162461bcd60e51b81526004018080602001828103825260238152602001806111c96023913960400191505060405180910390fd5b610d3a838383611166565b610d84816040518060600160405280602681526020016112566026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610e27565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610dc09082610ebe565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610eb65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e7b578181015183820152602001610e63565b50505050905090810190601f168015610ea85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610f18576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8216610f87576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610f9360008383611166565b600254610fa09082610ebe565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054610fd39082610ebe565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff82166110885760405162461bcd60e51b81526004018080602001828103825260218152602001806112a46021913960400191505060405180910390fd5b61109482600083611166565b6110de816040518060600160405280602281526020016111ec6022913973ffffffffffffffffffffffffffffffffffffffff85166000908152602081905260409020549190610e27565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902055600254611111908261116b565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b505050565b6000828211156111c2576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122085df8449fea57341989f2b795e9a8fcc0b99d1bf7d02d2d3c9d9bbff23ebcc9464736f6c634300060c00334f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220faa81b6bdbede1faff06882bb1b172e6e670b7143372554a67d898b89ec5a30464736f6c634300060c0033
Deployed Bytecode
0x608060405260043610620001935760003560e01c806373dfccca11620000df578063ac56d39c116200008b578063ec55045f1162000061578063ec55045f14620007cd578063ed17230b14620007e5578063f2fde38b14620007fd576200019b565b8063ac56d39c1462000687578063e3e01aad1462000757578063e910b36c1462000785576200019b565b80638da5cb5b11620000c15780638da5cb5b14620006145780638dbdbe6d146200062c578063a4f688fb146200066f576200019b565b806373dfccca146200058957806386079e3214620005fc576200019b565b8063321720db116200013f57806354d4fad3116200012157806354d4fad31462000476578063715018a614620004b357806372e617c814620004cb576200019b565b8063321720db14620003645780633fc8cef31462000442576200019b565b80631a56f64811620001755780631a56f64814620002b55780632242908514620003005780632716ae66146200033a576200019b565b80630ad58d2f14620001a05780630d55850914620001e5576200019b565b366200019b57005b600080fd5b348015620001ad57600080fd5b50620001e360048036036060811015620001c657600080fd5b50803590602081013590604001356001600160a01b031662000834565b005b348015620001f257600080fd5b50620001e3600480360360608110156200020b57600080fd5b6001600160a01b0382358116926020810135909116918101906060810160408201356401000000008111156200024057600080fd5b8201836020820111156200025357600080fd5b803590602001918460208302840111640100000000831117156200027657600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550620008aa945050505050565b348015620002c257600080fd5b50620002ec60048036036020811015620002db57600080fd5b50356001600160a01b031662001097565b604080519115158252519081900360200190f35b3480156200030d57600080fd5b50620001e3600480360360608110156200032657600080fd5b5080359060208101359060400135620010ac565b3480156200034757600080fd5b5062000352620011a2565b60408051918252519081900360200190f35b3480156200037157600080fd5b50620001e3600480360360a08110156200038a57600080fd5b8135916001600160a01b036020820135169160408201359190810190608081016060820135640100000000811115620003c257600080fd5b820183602082011115620003d557600080fd5b80359060200191846020830284011164010000000083111715620003f857600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505090356001600160a01b03169150620011a89050565b3480156200044f57600080fd5b506200045a62001964565b604080516001600160a01b039092168252519081900360200190f35b3480156200048357600080fd5b50620001e3600480360360408110156200049c57600080fd5b50803590602001356001600160a01b031662001973565b348015620004c057600080fd5b50620001e362001cdf565b348015620004d857600080fd5b50620001e360048036036040811015620004f157600080fd5b813591908101906040810160208201356401000000008111156200051457600080fd5b8201836020820111156200052757600080fd5b803590602001918460208302840111640100000000831117156200054a57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955062001dba945050505050565b3480156200059657600080fd5b50620005b760048036036020811015620005af57600080fd5b503562001e6d565b604080516001600160a01b039788168152958716602087015293861685850152919094166060840152608083019390935260a082019290925290519081900360c00190f35b3480156200060957600080fd5b506200035262001ec1565b3480156200062157600080fd5b506200045a62001ec7565b3480156200063957600080fd5b50620001e3600480360360608110156200065257600080fd5b50803590602081013590604001356001600160a01b031662001ed6565b3480156200067c57600080fd5b506200035262001f7e565b620001e3600480360360a08110156200069f57600080fd5b8135916001600160a01b036020820135169160408201359190810190608081016060820135640100000000811115620006d757600080fd5b820183602082011115620006ea57600080fd5b803590602001918460208302840111640100000000831117156200070d57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550505090356001600160a01b0316915062001f849050565b3480156200076457600080fd5b50620001e3600480360360208110156200077d57600080fd5b503562002145565b3480156200079257600080fd5b5062000352600480360360a0811015620007ab57600080fd5b50803590602081013590604081013590606081013515159060800135620021c3565b348015620007da57600080fd5b506200035262002278565b348015620007f257600080fd5b50620003526200227e565b3480156200080a57600080fd5b50620001e3600480360360208110156200082357600080fd5b50356001600160a01b031662002284565b6008546001146200088c576040805162461bcd60e51b815260206004820152600c60248201527f4f70656e58204c4f434b45440000000000000000000000000000000000000000604482015290519081900360640190fd5b60006008556200089f83833384620023b7565b505060016008555050565b620008b46200267a565b6001600160a01b0316620008c762001ec7565b6001600160a01b03161462000923576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b03831660009081526002602052604090205460ff161562000992576040805162461bcd60e51b815260206004820152601460248201527f506f6f6c20416c7265616479204578697374732e000000000000000000000000604482015290519081900360640190fd5b6001600160a01b038316600090815260026020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055620009dd6200436e565b6000846001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801562000a1957600080fd5b505afa15801562000a2e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101562000a5857600080fd5b810190808051604051939291908464010000000082111562000a7957600080fd5b90830190602082018581111562000a8f57600080fd5b825164010000000081118282018810171562000aaa57600080fd5b82525081516020918201929091019080838360005b8381101562000ad957818101518382015260200162000abf565b50505050905090810190601f16801562000b075780820380516001836020036101000a031916815260200191505b5060405250505060405160200180807f6163782d0000000000000000000000000000000000000000000000000000000081525060040182805190602001908083835b6020831062000b6a5780518252601f19909201916020918201910162000b49565b6001836020036101000a038019825116818451168082178552505050505050905001915050604051602081830303815290604052856001600160a01b03166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b15801562000bd857600080fd5b505afa15801562000bed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052602081101562000c1757600080fd5b810190808051604051939291908464010000000082111562000c3857600080fd5b90830190602082018581111562000c4e57600080fd5b825164010000000081118282018810171562000c6957600080fd5b82525081516020918201929091019080838360005b8381101562000c9857818101518382015260200162000c7e565b50505050905090810190601f16801562000cc65780820380516001836020036101000a031916815260200191505b5060405250505060405160200180807f4175746f20436f6d706f756e64696e672058200000000000000000000000000081525060130182805190602001908083835b6020831062000d295780518252601f19909201916020918201910162000d08565b6001836020036101000a03801982511681845116808217855250505050505090500191505060405160208183030381529060405260405162000d6b90620043a9565b604080825283519082015282518190602080830191606084019187019080838360005b8381101562000da857818101518382015260200162000d8e565b50505050905090810190601f16801562000dd65780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101562000e0b57818101518382015260200162000df1565b50505050905090810190601f16801562000e395780820380516001836020036101000a031916815260200191505b50945050505050604051809103906000f08015801562000e5d573d6000803e3d6000fd5b506001600160a01b038082166040808601919091528682166060860181905291881660208087019190915281517ff7c618c10000000000000000000000000000000000000000000000000000000081529151939450919263f7c618c192600480840193919291829003018186803b15801562000ed857600080fd5b505afa15801562000eed573d6000803e3d6000fd5b505050506040513d602081101562000f0457600080fd5b50516001600160a01b03908116835260a0830184815260018054808201825560009190915284517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6600790920291820180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169286169290921781556020808801517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf785018054851691881691909117905560408801517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf885018054851691881691909117905560608801517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf98501805490941696169590951790915560808601517fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfa83015591518051869462001083937fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cfb01920190620043b7565b5060c0820151816006015550505050505050565b60026020526000908152604090205460ff1681565b620010b66200267a565b6001600160a01b0316620010c962001ec7565b6001600160a01b03161462001125576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6103e862001140826200113986866200267e565b906200267e565b111562001194576040805162461bcd60e51b815260206004820152600760248201527f4d61782031302500000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600392909255600455600555565b60015490565b60085460011462001200576040805162461bcd60e51b815260206004820152600c60248201527f4f70656e58204c4f434b45440000000000000000000000000000000000000000604482015290519081900360640190fd5b6000600881905582516001805491928792909190899081106200121f57fe5b600091825260209182902060016007909202010154604080517f0dfe168100000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921692630dfe168192600480840193829003018186803b1580156200128a57600080fd5b505afa1580156200129f573d6000803e3d6000fd5b505050506040513d6020811015620012b657600080fd5b5051600180549192506000918a908110620012cd57fe5b600091825260209182902060016007909202010154604080517fd21220a700000000000000000000000000000000000000000000000000000000815290516001600160a01b039092169263d21220a792600480840193829003018186803b1580156200133857600080fd5b505afa1580156200134d573d6000803e3d6000fd5b505050506040513d60208110156200136457600080fd5b505190506001600160a01b0388166200166f576200138589883330620023b7565b96506000620013ae612710620013a76005548b620026e290919063ffffffff16565b9062002740565b9050620013c68a82620013c062001ec7565b620027a9565b6200143a60018b81548110620013d857fe5b906000526020600020906007020160010160009054906101000a90046001600160a01b031660018c815481106200140b57fe5b60009182526020909120600160079092020101546001600160a01b0316620014348b8562002bbc565b62002c1a565b60008060018c815481106200144b57fe5b60009182526020822060016007909202010154604080517f89afcb4400000000000000000000000000000000000000000000000000000000815230600482015281516001600160a01b03909316936389afcb4493602480840194939192918390030190829087803b158015620014c057600080fd5b505af1158015620014d5573d6000803e3d6000fd5b505050506040513d6040811015620014ec57600080fd5b50805160209091015160075491935091506001600160a01b0386811691161415620015a357600754604080517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810185905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156200157857600080fd5b505af11580156200158d573d6000803e3d6000fd5b505050506200159d888362002dba565b620015b0565b620015b085898462002c1a565b6007546001600160a01b03858116911614156200165957600754604080517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526004810184905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b1580156200162e57600080fd5b505af115801562001643573d6000803e3d6000fd5b5050505062001653888262002dba565b62001666565b6200166684898362002c1a565b50505062001954565b620016a789883360018d815481106200168457fe5b60009182526020909120600160079092020101546001600160a01b0316620023b7565b5060008060018b81548110620016b957fe5b60009182526020822060016007909202010154604080517f89afcb4400000000000000000000000000000000000000000000000000000000815230600482015281516001600160a01b03909316936389afcb4493602480840194939192918390030190829087803b1580156200172e57600080fd5b505af115801562001743573d6000803e3d6000fd5b505050506040513d60408110156200175a57600080fd5b50805160209091015190925090506001600160a01b038481169086161415620017c157620017b460018c815481106200178f57fe5b60009182526020909120600160079092020101546001600160a01b0316848362002ec8565b9083019950945062001800565b620017f860018c81548110620017d357fe5b60009182526020909120600160079092020101546001600160a01b0316858462002ec8565b908201995094505b60005b868110156200183b576200182d8982815181106200181d57fe5b6020026020010151878c62002ec8565b909a50955060010162001803565b5060006200185c612710620013a76005548d620026e290919063ffffffff16565b6007549091506001600160a01b038c8116911614156200192857600754604080517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018d905290516001600160a01b0390921691632e1a7d4d9160248082019260009290919082900301818387803b158015620018dd57600080fd5b505af1158015620018f2573d6000803e3d6000fd5b505050506200190b6200190462001ec7565b8262002dba565b62001922886200191c8c8462002bbc565b62002dba565b62001950565b6200193e8b6200193762001ec7565b8362002c1a565b620019508b89620014348d8562002bbc565b5050505b5050600160085550505050505050565b6007546001600160a01b031681565b6000600183815481106200198357fe5b60009182526020822060079091020154600180546001600160a01b0390921693509085908110620019b057fe5b6000918252602080832060036007909302019190910154604080517e8cc26200000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b0390921694508492628cc26292602480840193829003018186803b15801562001a2457600080fd5b505afa15801562001a39573d6000803e3d6000fd5b505050506040513d602081101562001a5057600080fd5b5051905067016345785d8a000081101562001a6e5750505062001cdb565b600062001a8e612710620013a760035485620026e290919063ffffffff16565b9050600062001ab0612710620013a760035486620026e290919063ffffffff16565b9050836001600160a01b031663c00007b0306040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b15801562001b0257600080fd5b505af115801562001b17573d6000803e3d6000fd5b5050505062001b2885878462002c1a565b62001b408262001b39858462002bbc565b9062002bbc565b9250600062001b508885620034a9565b9050600062001b6260065484620034a9565b905062001b7660065482620013c062001ec7565b8160018a8154811062001b8557fe5b6000918252602090912060046007909202010180549091019055600180548a90811062001bae57fe5b906000526020600020906007020160010160009054906101000a90046001600160a01b03166001600160a01b031663095ea7b387846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801562001c2a57600080fd5b505af115801562001c3f573d6000803e3d6000fd5b505050506040513d602081101562001c5657600080fd5b5050604080517fb6b55f250000000000000000000000000000000000000000000000000000000081526004810184905290516001600160a01b0388169163b6b55f2591602480830192600092919082900301818387803b15801562001cba57600080fd5b505af115801562001ccf573d6000803e3d6000fd5b50505050505050505050505b5050565b62001ce96200267a565b6001600160a01b031662001cfc62001ec7565b6001600160a01b03161462001d58576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b62001dc46200267a565b6001600160a01b031662001dd762001ec7565b6001600160a01b03161462001e33576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b806001838154811062001e4257fe5b9060005260206000209060070201600501908051906020019062001e68929190620043b7565b505050565b6001818154811062001e7b57fe5b60009182526020909120600790910201805460018201546002830154600384015460048501546006909501546001600160a01b0394851696509284169491841693169186565b60045481565b6000546001600160a01b031690565b60085460011462001f2e576040805162461bcd60e51b815260206004820152600c60248201527f4f70656e58204c4f434b45440000000000000000000000000000000000000000604482015290519081900360640190fd5b60006008819055600180548590811062001f4457fe5b60009182526020909120600160079092020101546001600160a01b0316905062001f7181333086620035c3565b6200089f848484620027a9565b60055481565b60085460011462001fdc576040805162461bcd60e51b815260206004820152600c60248201527f4f70656e58204c4f434b45440000000000000000000000000000000000000000604482015290519081900360640190fd5b600060085581516007546001600160a01b03868116911614156200206b57600760009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b1580156200204b57600080fd5b505af115801562002060573d6000803e3d6000fd5b505050505062002079565b6200207985333087620035c3565b60005b81811015620020b357620020a68482815181106200209657fe5b6020026020010151878762002ec8565b965094506001016200207c565b50620020eb8560018881548110620020c757fe5b60009182526020909120600160079092020101546001600160a01b0316866200376c565b935060006200210d612710620013a760055488620026e290919063ffffffff16565b90506200211f8782620013c062001ec7565b620021378762002130878462002bbc565b85620027a9565b505060016008555050505050565b6200214f6200267a565b6001600160a01b03166200216262001ec7565b6001600160a01b031614620021be576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600655565b600082156200221957600085878685670de0b6b3a76400000281620021e457fe5b040281620021ee57fe5b04905080670de0b6b3a76400000185670de0b6b3a764000002816200220f57fe5b049150506200226f565b6107ca620022636200222e886107cd620026e2565b62001b396200225d620022458b623cda29620026e2565b620022548a623cda20620026e2565b8c9101620026e2565b62003c1e565b816200226b57fe5b0490505b95945050505050565b60065481565b60035481565b6200228e6200267a565b6001600160a01b0316620022a162001ec7565b6001600160a01b031614620022fd576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6001600160a01b038116620023445760405162461bcd60e51b815260040180806020018281038252602681526020018062005ad36026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60008060018681548110620023c857fe5b60009182526020822060026007909202010154600180546001600160a01b0390921693509088908110620023f857fe5b600091825260208220600160079092020181015481546001600160a01b039091169350899081106200242657fe5b906000526020600020906007020160030160009054906101000a90046001600160a01b031690506000836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156200248b57600080fd5b505af1158015620024a0573d6000803e3d6000fd5b505050506040513d6020811015620024b757600080fd5b5051604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156200251f57600080fd5b505afa15801562002534573d6000803e3d6000fd5b505050506040513d60208110156200254b57600080fd5b5051905060006200256283620013a78c85620026e2565b9050856001600160a01b0316639dc29fac8a8c6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015620025bc57600080fd5b505af1158015620025d1573d6000803e3d6000fd5b50505050836001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156200261c57600080fd5b505af115801562002631573d6000803e3d6000fd5b505050506200264285898362002c1a565b8060018c815481106200265157fe5b6000918252602090912060079091020160040180549190910390559a9950505050505050505050565b3390565b600082820183811015620026d9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b90505b92915050565b600082620026f357506000620026dc565b828202828482816200270157fe5b0414620026d95760405162461bcd60e51b815260040180806020018281038252602181526020018062005af96021913960400191505060405180910390fd5b600080821162002797576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b818381620027a157fe5b049392505050565b600060018481548110620027b957fe5b60009182526020822060026007909202010154600180546001600160a01b0390921693509086908110620027e957fe5b600091825260208220600160079092020181015481546001600160a01b039091169350879081106200281757fe5b906000526020600020906007020160030160009054906101000a90046001600160a01b031690506000836001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156200287c57600080fd5b505af115801562002891573d6000803e3d6000fd5b505050506040513d6020811015620028a857600080fd5b50519050806200292957836001600160a01b03166340c10f1986886040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b1580156200290a57600080fd5b505af11580156200291f573d6000803e3d6000fd5b5050505062002a89565b42600188815481106200293857fe5b90600052602060002090600702016006015414620029805742600188815481106200295f57fe5b90600052602060002090600702016006018190555062002980878662001973565b6000826001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015620029d057600080fd5b505afa158015620029e5573d6000803e3d6000fd5b505050506040513d6020811015620029fc57600080fd5b50519050600062002a1382620013a78a86620026e2565b9050856001600160a01b03166340c10f1988836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801562002a6d57600080fd5b505af115801562002a82573d6000803e3d6000fd5b5050505050505b826001600160a01b031663095ea7b383886040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801562002ae157600080fd5b505af115801562002af6573d6000803e3d6000fd5b505050506040513d602081101562002b0d57600080fd5b5050604080517fb6b55f250000000000000000000000000000000000000000000000000000000081526004810188905290516001600160a01b0384169163b6b55f2591602480830192600092919082900301818387803b15801562002b7157600080fd5b505af115801562002b86573d6000803e3d6000fd5b50505050856001888154811062002b9957fe5b600091825260209091206004600790920201018054909101905550505050505050565b60008282111562002c14576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b6020831062002cc75780518252601f19909201916020918201910162002ca6565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811462002d2b576040519150601f19603f3d011682016040523d82523d6000602084013e62002d30565b606091505b509150915081801562002d6157508051158062002d61575080806020019051602081101562002d5e57600080fd5b50515b62002db3576040805162461bcd60e51b815260206004820152600f60248201527f5452414e534645525f4641494c45440000000000000000000000000000000000604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831062002e085780518252601f19909201916020918201910162002de7565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811462002e6c576040519150601f19603f3d011682016040523d82523d6000602084013e62002e71565b606091505b505090508062001e68576040805162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c454400000000000000000000000000604482015290519081900360640190fd5b6000806000859050806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801562002f0a57600080fd5b505afa15801562002f1f573d6000803e3d6000fd5b505050506040513d602081101562002f3657600080fd5b50516001600160a01b0386811691161415620031fb57806001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801562002f8657600080fd5b505afa15801562002f9b573d6000803e3d6000fd5b505050506040513d602081101562002fb257600080fd5b5051604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526024820188905291519294509087169163a9059cbb916044808201926020929091908290030181600087803b1580156200302457600080fd5b505af115801562003039573d6000803e3d6000fd5b505050506040513d60208110156200305057600080fd5b5050604080517ff140a35a000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b03878116602483015291519183169163f140a35a91604480820192602092909190829003018186803b158015620030bd57600080fd5b505afa158015620030d2573d6000803e3d6000fd5b505050506040513d6020811015620030e957600080fd5b505160408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201818152604483018590523060648401819052608060848501908152845160a486018190529699506001600160a01b0388169663022c0d9f9694958b959394909390929160c4850191908083838b5b838110156200318b57818101518382015260200162003171565b50505050905090810190601f168015620031b95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015620031dc57600080fd5b505af1158015620031f1573d6000803e3d6000fd5b50505050620034a0565b806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200323557600080fd5b505afa1580156200324a573d6000803e3d6000fd5b505050506040513d60208110156200326157600080fd5b5051604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0384811660048301526024820188905291519294509087169163a9059cbb916044808201926020929091908290030181600087803b158015620032d357600080fd5b505af1158015620032e8573d6000803e3d6000fd5b505050506040513d6020811015620032ff57600080fd5b5050604080517ff140a35a000000000000000000000000000000000000000000000000000000008152600481018690526001600160a01b03878116602483015291519183169163f140a35a91604480820192602092909190829003018186803b1580156200336c57600080fd5b505afa15801562003381573d6000803e3d6000fd5b505050506040513d60208110156200339857600080fd5b505160408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201848152604483018290523060648401819052608060848501908152845160a486018190529699506001600160a01b0388169663022c0d9f968b969394929160c4850191908083838a5b83811015620034355781810151838201526020016200341b565b50505050905090810190601f168015620034635780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156200348657600080fd5b505af11580156200349b573d6000803e3d6000fd5b505050505b50935093915050565b60008060018481548110620034ba57fe5b9060005260206000209060070201600501805490509050600060018581548110620034e157fe5b600091825260208220600790910201546001600160a01b031691505b82811015620035605762003552600187815481106200351857fe5b906000526020600020906007020160050182815481106200353557fe5b6000918252602090912001546001600160a01b0316838762002ec8565b9095509150600101620034fd565b50811562003585576200357b8160018781548110620020c757fe5b92505050620026dc565b6200357b600186815481106200359757fe5b6000918252602090912060079091020154600180546001600160a01b039092169188908110620020c757fe5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b60208310620036785780518252601f19909201916020918201910162003657565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114620036dc576040519150601f19603f3d011682016040523d82523d6000602084013e620036e1565b606091505b5091509150818015620037125750805115806200371257508080602001905160208110156200370f57600080fd5b50515b62003764576040805162461bcd60e51b815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000604482015290519081900360640190fd5b505050505050565b600080836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015620037a957600080fd5b505afa158015620037be573d6000803e3d6000fd5b505050506040513d6020811015620037d557600080fd5b5051604080517fd21220a700000000000000000000000000000000000000000000000000000000815290519192506000916001600160a01b0387169163d21220a7916004808301926020929190829003018186803b1580156200383757600080fd5b505afa1580156200384c573d6000803e3d6000fd5b505050506040513d60208110156200386357600080fd5b505190506001600160a01b038281169087161462003a4b576000806200388b87848862003c77565b91509150826001600160a01b031663a9059cbb88846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015620038e757600080fd5b505af1158015620038fc573d6000803e3d6000fd5b505050506040513d60208110156200391357600080fd5b5050604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301526024820184905291519186169163a9059cbb916044808201926020929091908290030181600087803b1580156200398257600080fd5b505af115801562003997573d6000803e3d6000fd5b505050506040513d6020811015620039ae57600080fd5b5050604080517f6a62784200000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b03891691636a6278429160248083019260209291908290030181600087803b15801562003a1257600080fd5b505af115801562003a27573d6000803e3d6000fd5b505050506040513d602081101562003a3e57600080fd5b5051945062003c15915050565b60008062003a5b87858862003c77565b91509150836001600160a01b031663a9059cbb88846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801562003ab757600080fd5b505af115801562003acc573d6000803e3d6000fd5b505050506040513d602081101562003ae357600080fd5b5050604080517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b0389811660048301526024820184905291519185169163a9059cbb916044808201926020929091908290030181600087803b15801562003b5257600080fd5b505af115801562003b67573d6000803e3d6000fd5b505050506040513d602081101562003b7e57600080fd5b5050604080517f6a62784200000000000000000000000000000000000000000000000000000000815230600482015290516001600160a01b03891691636a6278429160248083019260209291908290030181600087803b15801562003be257600080fd5b505af115801562003bf7573d6000803e3d6000fd5b505050506040513d602081101562003c0e57600080fd5b5051945050505b50509392505050565b6000600382111562003c67575080600160028204015b8181101562003c605780915060028182858162003c4d57fe5b04018162003c5757fe5b04905062003c34565b5062003c72565b811562003c72575060015b919050565b6000806000859050600080826001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801562003cbc57600080fd5b505afa15801562003cd1573d6000803e3d6000fd5b505050506040513d606081101562003ce857600080fd5b508051602091820151604080517f22be3de100000000000000000000000000000000000000000000000000000000815290519295509093506000926001600160a01b038c16926322be3de1926004808201939291829003018186803b15801562003d5157600080fd5b505afa15801562003d66573d6000803e3d6000fd5b505050506040513d602081101562003d7d57600080fd5b5051604080517ff140a35a000000000000000000000000000000000000000000000000000000008152600481018a90526001600160a01b038b811660248301529151929350600092918c169163f140a35a91604480820192602092909190829003018186803b15801562003df057600080fd5b505afa15801562003e05573d6000803e3d6000fd5b505050506040513d602081101562003e1c57600080fd5b5051604080517f0dfe168100000000000000000000000000000000000000000000000000000000815290519192506001600160a01b03871691630dfe168191600480820192602092909190829003018186803b15801562003e7c57600080fd5b505afa15801562003e91573d6000803e3d6000fd5b505050506040513d602081101562003ea857600080fd5b50516001600160a01b038a811691161415620041155762003ecd84848a8585620021c3565b9650886001600160a01b031663a9059cbb86896040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801562003f2757600080fd5b505af115801562003f3c573d6000803e3d6000fd5b505050506040513d602081101562003f5357600080fd5b5050604080517ff140a35a000000000000000000000000000000000000000000000000000000008152600481018990526001600160a01b038b8116602483015291519187169163f140a35a91604480820192602092909190829003018186803b15801562003fc057600080fd5b505afa15801562003fd5573d6000803e3d6000fd5b505050506040513d602081101562003fec57600080fd5b505160408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201818152604483018590523060648401819052608060848501908152845160a48601819052969c506001600160a01b038c169663022c0d9f9694958e959394909390929160c4850191908083838b5b838110156200408e57818101518382015260200162004074565b50505050905090810190601f168015620040bc5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015620040df57600080fd5b505af1158015620040f4573d6000803e3d6000fd5b505050506200410d878962002bbc90919063ffffffff16565b96506200349b565b6200412483858a8585620021c3565b9650886001600160a01b031663a9059cbb86896040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156200417e57600080fd5b505af115801562004193573d6000803e3d6000fd5b505050506040513d6020811015620041aa57600080fd5b5050604080517ff140a35a000000000000000000000000000000000000000000000000000000008152600481018990526001600160a01b038b8116602483015291519187169163f140a35a91604480820192602092909190829003018186803b1580156200421757600080fd5b505afa1580156200422c573d6000803e3d6000fd5b505050506040513d60208110156200424357600080fd5b505160408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201848152604483018290523060648401819052608060848501908152845160a48601819052969c506001600160a01b038c169663022c0d9f968e969394929160c4850191908083838a5b83811015620042e0578181015183820152602001620042c6565b50505050905090810190601f1680156200430e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156200433157600080fd5b505af115801562004346573d6000803e3d6000fd5b505050506200435f878962002bbc90919063ffffffff16565b96505050505050935093915050565b6040805160e08101825260008082526020820181905291810182905260608082018390526080820183905260a082015260c081019190915290565b611660806200447383390190565b82805482825590600052602060002090810192821562004427579160200282015b828111156200442757825182547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03909116178255602090920191600190910190620043d8565b506200443592915062004439565b5090565b5b80821115620044355780547fffffffffffffffffffffffff00000000000000000000000000000000000000001681556001016200443a56fe60806040523480156200001157600080fd5b506040516200166038038062001660833981810160405260408110156200003757600080fd5b81019080805160405193929190846401000000008211156200005857600080fd5b9083019060208201858111156200006e57600080fd5b82516401000000008111828201881017156200008957600080fd5b82525081516020918201929091019080838360005b83811015620000b85781810151838201526020016200009e565b50505050905090810190601f168015620000e65780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200010a57600080fd5b9083019060208201858111156200012057600080fd5b82516401000000008111828201881017156200013b57600080fd5b82525081516020918201929091019080838360005b838110156200016a57818101518382015260200162000150565b50505050905090810190601f168015620001985780820380516001836020036101000a031916815260200191505b50604052505082518391508290620001b89060039060208501906200024c565b508051620001ce9060049060208401906200024c565b50506005805460ff19166012179055506000620001ea62000248565b60058054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3505050620002e8565b3390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200028f57805160ff1916838001178555620002bf565b82800160010185558215620002bf579182015b82811115620002bf578251825591602001919060010190620002a2565b50620002cd929150620002d1565b5090565b5b80821115620002cd5760008155600101620002d2565b61136880620002f86000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063715018a611610097578063a457c2d711610066578063a457c2d71461036b578063a9059cbb146103a4578063dd62ed3e146103dd578063f2fde38b1461041857610100565b8063715018a6146102f15780638da5cb5b146102f957806395d89b411461032a5780639dc29fac1461033257610100565b8063313ce567116100d3578063313ce5671461022c578063395093511461024a57806340c10f191461028357806370a08231146102be57610100565b806306fdde0314610105578063095ea7b31461018257806318160ddd146101cf57806323b872dd146101e9575b600080fd5b61010d61044b565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014757818101518382015260200161012f565b50505050905090810190601f1680156101745780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101bb6004803603604081101561019857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356104ff565b604080519115158252519081900360200190f35b6101d761051c565b60408051918252519081900360200190f35b6101bb600480360360608110156101ff57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160208101359091169060400135610522565b6102346105c3565b6040805160ff9092168252519081900360200190f35b6101bb6004803603604081101561026057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356105cc565b6102bc6004803603604081101561029957600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135610627565b005b6101d7600480360360208110156102d457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166106c3565b6102bc6106eb565b6103016107ed565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b61010d61080e565b6102bc6004803603604081101561034857600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561088d565b6101bb6004803603604081101561038157600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813516906020013561093b565b6101bb600480360360408110156103ba57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81351690602001356109b0565b6101d7600480360360408110156103f357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff813581169160200135166109c4565b6102bc6004803603602081101561042e57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109fc565b60038054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104f55780601f106104ca576101008083540402835291602001916104f5565b820191906000526020600020905b8154815290600101906020018083116104d857829003601f168201915b5050505050905090565b600061051361050c610b74565b8484610b78565b50600192915050565b60025490565b600061052f848484610c8b565b6105b98461053b610b74565b6105b48560405180606001604052806028815260200161127c6028913973ffffffffffffffffffffffffffffffffffffffff8a16600090815260016020526040812090610586610b74565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020549190610e27565b610b78565b5060019392505050565b60055460ff1690565b60006105136105d9610b74565b846105b485600160006105ea610b74565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918c168152925290205490610ebe565b61062f610b74565b73ffffffffffffffffffffffffffffffffffffffff1661064d6107ed565b73ffffffffffffffffffffffffffffffffffffffff16146106b5576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6106bf8282610f1f565b5050565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6106f3610b74565b73ffffffffffffffffffffffffffffffffffffffff166107116107ed565b73ffffffffffffffffffffffffffffffffffffffff1614610779576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b600554604051600091610100900473ffffffffffffffffffffffffffffffffffffffff16907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580547fffffffffffffffffffffff0000000000000000000000000000000000000000ff169055565b600554610100900473ffffffffffffffffffffffffffffffffffffffff1690565b60048054604080516020601f60027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104f55780601f106104ca576101008083540402835291602001916104f5565b6108956107ed565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610931573373ffffffffffffffffffffffffffffffffffffffff831614610931576040805162461bcd60e51b815260206004820152600260248201527f4e6f000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6106bf8282611036565b6000610513610948610b74565b846105b48560405180606001604052806025815260200161130e6025913960016000610972610b74565b73ffffffffffffffffffffffffffffffffffffffff908116825260208083019390935260409182016000908120918d16815292529020549190610e27565b60006105136109bd610b74565b8484610c8b565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b610a04610b74565b73ffffffffffffffffffffffffffffffffffffffff16610a226107ed565b73ffffffffffffffffffffffffffffffffffffffff1614610a8a576040805162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff8116610adc5760405162461bcd60e51b815260040180806020018281038252602681526020018061120e6026913960400191505060405180910390fd5b60055460405173ffffffffffffffffffffffffffffffffffffffff80841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36005805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b3390565b73ffffffffffffffffffffffffffffffffffffffff8316610bca5760405162461bcd60e51b81526004018080602001828103825260248152602001806112ea6024913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610c1c5760405162461bcd60e51b81526004018080602001828103825260228152602001806112346022913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff808416600081815260016020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b73ffffffffffffffffffffffffffffffffffffffff8316610cdd5760405162461bcd60e51b81526004018080602001828103825260258152602001806112c56025913960400191505060405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8216610d2f5760405162461bcd60e51b81526004018080602001828103825260238152602001806111c96023913960400191505060405180910390fd5b610d3a838383611166565b610d84816040518060600160405280602681526020016112566026913973ffffffffffffffffffffffffffffffffffffffff86166000908152602081905260409020549190610e27565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152602081905260408082209390935590841681522054610dc09082610ebe565b73ffffffffffffffffffffffffffffffffffffffff8084166000818152602081815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115610eb65760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e7b578181015183820152602001610e63565b50505050905090810190601f168015610ea85780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610f18576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8216610f87576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610f9360008383611166565b600254610fa09082610ebe565b60025573ffffffffffffffffffffffffffffffffffffffff8216600090815260208190526040902054610fd39082610ebe565b73ffffffffffffffffffffffffffffffffffffffff83166000818152602081815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b73ffffffffffffffffffffffffffffffffffffffff82166110885760405162461bcd60e51b81526004018080602001828103825260218152602001806112a46021913960400191505060405180910390fd5b61109482600083611166565b6110de816040518060600160405280602281526020016111ec6022913973ffffffffffffffffffffffffffffffffffffffff85166000908152602081905260409020549190610e27565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260208190526040902055600254611111908261116b565b60025560408051828152905160009173ffffffffffffffffffffffffffffffffffffffff8516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b505050565b6000828211156111c2576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b5090039056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122085df8449fea57341989f2b795e9a8fcc0b99d1bf7d02d2d3c9d9bbff23ebcc9464736f6c634300060c00334f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220faa81b6bdbede1faff06882bb1b172e6e670b7143372554a67d898b89ec5a30464736f6c634300060c0033
Deployed Bytecode Sourcemap
1214:9337:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4647:122;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4647:122:11;;;;;;;;;;;-1:-1:-1;;;;;4647:122:11;;:::i;:::-;;2234:630;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2234:630:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2234:630:11;;-1:-1:-1;2234:630:11;;-1:-1:-1;;;;;2234:630:11:i;1606:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1606:42:11;-1:-1:-1;;;;;1606:42:11;;:::i;:::-;;;;;;;;;;;;;;;;;;3178:333;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3178:333:11;;;;;;;;;;;;:::i;2121:79::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7555:2021;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7555:2021:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7555:2021:11;;-1:-1:-1;;;7555:2021:11;;-1:-1:-1;;;;;7555:2021:11;;-1:-1:-1;7555:2021:11;;-1:-1:-1;7555:2021:11:i;1826:64::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;1826:64:11;;;;;;;;;;;;;;5473:818;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5473:818:11;;;;;;-1:-1:-1;;;;;5473:818:11;;:::i;1717:145:0:-;;;;;;;;;;;;;:::i;2914:107:11:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2914:107:11;;-1:-1:-1;2914:107:11;;-1:-1:-1;;;;;2914:107:11:i;1580:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1580:23:11;;:::i;:::-;;;;-1:-1:-1;;;;;1580:23:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1715:41;;;;;;;;;;;;;:::i;1085:85:0:-;;;;;;;;;;;;;:::i;3550:235:11:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3550:235:11;;;;;;;;;;;-1:-1:-1;;;;;3550:235:11;;:::i;1759:32::-;;;;;;;;;;;;;:::i;6861:664::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6861:664:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6861:664:11;;-1:-1:-1;;;6861:664:11;;-1:-1:-1;;;;;6861:664:11;;-1:-1:-1;6861:664:11;;-1:-1:-1;6861:664:11:i;3067:77::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3067:77:11;;:::i;625:496:10:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;625:496:10;;;;;;;;;;;;;;;;;;;;;;;;:::i;1794:27:11:-;;;;;;;;;;;;;:::i;1676:36::-;;;;;;;;;;;;;:::i;2011:240:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2011:240:0;-1:-1:-1;;;;;2011:240:0;;:::i;4647:122:11:-;1984:8;;1996:1;1984:13;1976:38;;;;;-1:-1:-1;;;1976:38:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;2035:1;2024:8;:12;4724:41:::1;4734:4:::0;4740:7;4749:10:::1;4761:3:::0;4724:9:::1;:41::i;:::-;-1:-1:-1::0;;2068:1:11;2057:8;:12;-1:-1:-1;;4647:122:11:o;2234:630::-;1308:12:0;:10;:12::i;:::-;-1:-1:-1;;;;;1297:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1297:23:0;;1289:68;;;;;-1:-1:-1;;;1289:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2342:25:11;::::1;;::::0;;;:10:::1;:25;::::0;;;;;::::1;;:34;2334:67;;;::::0;;-1:-1:-1;;;2334:67:11;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;2405:25:11;::::1;;::::0;;;:10:::1;:25;::::0;;;;:32;;;::::1;2433:4;2405:32;::::0;;2441:23:::1;;:::i;:::-;2468:12;2543:13;-1:-1:-1::0;;;;;2528:36:11::1;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;2528:38:11::1;::::0;::::1;;::::0;::::1;::::0;::::1;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;;;;;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;-1:-1:-1;2528:38:11::1;;;;;::::0;::::1;;::::0;;-1:-1:-1;2528:38:11;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;::::1;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;2503:64;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;2503:64:11;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2633:13;-1:-1:-1::0;;;;;2618:36:11::1;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;2618:38:11::1;::::0;::::1;;::::0;::::1;::::0;::::1;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;;;;;::::0;::::1;;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;-1:-1:-1;2618:38:11::1;;;;;::::0;::::1;;::::0;;-1:-1:-1;2618:38:11;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;::::1;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;2578:79;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;::::0;;;;-1:-1:-1;;2578:79:11;;;;::::1;::::0;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2483:176;;;;;:::i;:::-;::::0;;;;;;;;;;;;;;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;;;;;::::1;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;2483:176:11;;::::1;::::0;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;2663:31:11;;::::1;:16;::::0;;::::1;:31:::0;;;;2698:22;;::::1;:13;::::0;::::1;:22:::0;;;2724:36;;::::1;:20;::::0;;::::1;:36:::0;;;;2786:28;;;;;;;2468:191;;-1:-1:-1;2698:22:11;;2786:26:::1;::::0;:28:::1;::::0;;::::1;::::0;2724:20;;2786:28;;;;;;2698:22;2786:28;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;2786:28:11;-1:-1:-1;;;;;2764:50:11;;::::1;::::0;;2818:12:::1;::::0;::::1;:19:::0;;;2841:5:::1;:19:::0;;;;::::1;::::0;;-1:-1:-1;2841:19:11;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;2786:28:::1;2841:19:::0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;;;;;;2764:50;;2841:19:::1;::::0;;;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;1367:1:0;;2234:630:11::0;;;:::o;1606:42::-;;;;;;;;;;;;;;;:::o;3178:333::-;1308:12:0;:10;:12::i;:::-;-1:-1:-1;;;;;1297:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1297:23:0;;1289:68;;;;;-1:-1:-1;;;1289:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3373:4:11::1;3307:62;3355:13:::0;3307:43:::1;:16:::0;3328:21;3307:20:::1;:43::i;:::-;:47:::0;::::1;:62::i;:::-;:70;;3299:90;;;::::0;;-1:-1:-1;;;3299:90:11;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3393:15;:34:::0;;;;3431:20:::1;:44:::0;3479:12:::1;:28:::0;3178:333::o;2121:79::-;2184:5;:12;2121:79;:::o;7555:2021::-;1984:8;;1996:1;1984:13;1976:38;;;;;-1:-1:-1;;;1976:38:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;2035:1;2024:8;:12;;;7689;;7775:5:::1;:11:::0;;7689:12;;7727:9;;2035:1;;7775:5;7781:4;;7775:11;::::1;;;;;;::::0;;;::::1;::::0;;;;:24:::1;:11;::::0;;::::1;;:24;::::0;7760:49:::1;::::0;;;;;;;-1:-1:-1;;;;;7775:24:11;;::::1;::::0;7760:47:::1;::::0;:49:::1;::::0;;::::1;::::0;;;;;;7775:24;7760:49;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;7760:49:11;7848:5:::1;:11:::0;;7760:49;;-1:-1:-1;7816:14:11::1;::::0;7854:4;;7848:11;::::1;;;;;;::::0;;;::::1;::::0;;;;:24:::1;:11;::::0;;::::1;;:24;::::0;7833:49:::1;::::0;;;;;;;-1:-1:-1;;;;;7848:24:11;;::::1;::::0;7833:47:::1;::::0;:49:::1;::::0;;::::1;::::0;;;;;;7848:24;7833:49;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;7833:49:11;;-1:-1:-1;;;;;;7893:23:11;::::1;7890:1680;;7935:51;7945:4;7951:7;7960:10;7980:4;7935:9;:51::i;:::-;7925:61;;7994:17;8014:36;8044:5;8014:25;8026:12;;8014:7;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:36::i;:::-;7994:56;;8059:34;8068:4;8074:9;8085:7;:5;:7::i;:::-;8059:8;:34::i;:::-;8101:88;8114:5;8120:4;8114:11;;;;;;;;;;;;;;;;;;:24;;;;;;;;;;-1:-1:-1::0;;;;;8114:24:11::1;8140:5;8146:4;8140:11;;;;;;;;;::::0;;;::::1;::::0;;;:24:::1;:11;::::0;;::::1;;:24;::::0;-1:-1:-1;;;;;8140:24:11::1;8166:22;:7:::0;8178:9;8166:11:::1;:22::i;:::-;8101:12;:88::i;:::-;8198:15;8215::::0;8249:5:::1;8255:4;8249:11;;;;;;;;;::::0;;;::::1;::::0;;:24:::1;:11;::::0;;::::1;;:24;::::0;8234:60:::1;::::0;;;;;8288:4:::1;8234:60;::::0;::::1;::::0;;;-1:-1:-1;;;;;8249:24:11;;::::1;::::0;8234:45:::1;::::0;:60;;;;;;;;;;;;;;;;8249:24;8234:60;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;8234:60:11;;::::1;::::0;;::::1;::::0;8317:4:::1;::::0;8234:60;;-1:-1:-1;8234:60:11;-1:-1:-1;;;;;;8307:14:11;;::::1;8317:4:::0;::::1;8307:14;8303:158;;;8338:4;::::0;8332:29:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;8338:4:11;;::::1;::::0;8332:20:::1;::::0;:29;;;;;8338:4:::1;::::0;8332:29;;;;;;;;8338:4;;8332:29;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8370;8386:3;8391:7;8370:15;:29::i;:::-;8303:158;;;8418:34;8431:6;8439:3;8444:7;8418:12;:34::i;:::-;8482:4;::::0;-1:-1:-1;;;;;8472:14:11;;::::1;8482:4:::0;::::1;8472:14;8468:161;;;8503:4;::::0;8497:29:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;8503:4:11;;::::1;::::0;8497:20:::1;::::0;:29;;;;;8503:4:::1;::::0;8497:29;;;;;;;;8503:4;;8497:29;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8535;8551:3;8556:7;8535:15;:29::i;:::-;8468:161;;;8586:34;8599:6;8607:3;8612:7;8586:12;:34::i;:::-;7890:1680;;;;;;8648:62;8658:4;8664:7;8673:10;8685:5;8691:4;8685:11;;;;;;;;;::::0;;;::::1;::::0;;;:24:::1;:11;::::0;;::::1;;:24;::::0;-1:-1:-1;;;;;8685:24:11::1;8648:9;:62::i;:::-;;8719:15;8736::::0;8770:5:::1;8776:4;8770:11;;;;;;;;;::::0;;;::::1;::::0;;:24:::1;:11;::::0;;::::1;;:24;::::0;8755:60:::1;::::0;;;;;8809:4:::1;8755:60;::::0;::::1;::::0;;;-1:-1:-1;;;;;8770:24:11;;::::1;::::0;8755:45:::1;::::0;:60;;;;;;;;;;;;;;;;8770:24;8755:60;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;8755:60:11;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;8755:60:11;-1:-1:-1;;;;;;8827:18:11;;::::1;::::0;;::::1;;8824:269;;;8877:53;8888:5;8894:4;8888:11;;;;;;;;;::::0;;;::::1;::::0;;;:24:::1;:11;::::0;;::::1;;:24;::::0;-1:-1:-1;;;;;8888:24:11::1;8914:6:::0;8922:7;8877:10:::1;:53::i;:::-;8939:18:::0;;::::1;::::0;-1:-1:-1;8855:75:11;-1:-1:-1;8824:269:11::1;;;9004:53;9015:5;9021:4;9015:11;;;;;;;;;::::0;;;::::1;::::0;;;:24:::1;:11;::::0;;::::1;;:24;::::0;-1:-1:-1;;;;;9015:24:11::1;9041:6:::0;9049:7;9004:10:::1;:53::i;:::-;9069:18:::0;;::::1;::::0;-1:-1:-1;8982:75:11;-1:-1:-1;8824:269:11::1;9105:6;9101:104;9117:3;9113:1;:7;9101:104;;;9157:39;9168:5;9174:1;9168:8;;;;;;;;;;;;;;9178;9188:7;9157:10;:39::i;:::-;9135:61:::0;;-1:-1:-1;9135:61:11;-1:-1:-1;9122:3:11::1;;9101:104;;;;9213:17;9233:36;9263:5;9233:25;9245:12;;9233:7;:11;;:25;;;;:::i;:36::-;9294:4;::::0;9213:56;;-1:-1:-1;;;;;;9281:17:11;;::::1;9294:4:::0;::::1;9281:17;9278:285;;;9314:4;::::0;9308:29:::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;9314:4:11;;::::1;::::0;9308:20:::1;::::0;:29;;;;;9314:4:::1;::::0;9308:29;;;;;;;;9314:4;;9308:29;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;9346:35;9362:7;:5;:7::i;:::-;9371:9;9346:15;:35::i;:::-;9390:44;9406:3:::0;9411:22:::1;:7:::0;9423:9;9411:11:::1;:22::i;:::-;9390:15;:44::i;:::-;9278:285;;;9453:43;9466:9;9477:7;:5;:7::i;:::-;9486:9;9453:12;:43::i;:::-;9502:52;9515:9:::0;9526:3;9531:22:::1;:7:::0;9543:9;9531:11:::1;:22::i;9502:52::-;7890:1680;;;;-1:-1:-1::0;;2068:1:11;2057:8;:12;-1:-1:-1;;;;;;;7555:2021:11:o;1826:64::-;;;-1:-1:-1;;;;;1826:64:11;;:::o;5473:818::-;5535:19;5557:5;5563:4;5557:11;;;;;;;;;;;;;;;;;;;;:23;;5609:11;;-1:-1:-1;;;;;5557:23:11;;;;-1:-1:-1;5557:23:11;5615:4;;5609:11;;;;;;;;;;;;;;:17;:11;;;;;:17;;;;;5651:27;;;;;;5672:4;5651:27;;;;;;-1:-1:-1;;;;;5609:17:11;;;;-1:-1:-1;5609:17:11;;5651:12;;:27;;;;;;;;;;5609:17;5651:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5651:27:11;;-1:-1:-1;5697:8:11;5688:17;;5685:43;;;5714:7;;;;;5685:43;5734:14;5751:38;5783:5;5751:27;5762:15;;5751:6;:10;;:27;;;;:::i;:38::-;5734:55;;5796:19;5818:38;5850:5;5818:27;5829:15;;5818:6;:10;;:27;;;;:::i;:38::-;5796:60;;5863:5;-1:-1:-1;;;;;5863:15:11;;5887:4;5863:30;;;;;;;;;;;;;-1:-1:-1;;;;;5863:30:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5901:38;5914:11;5927:3;5932:6;5901:12;:38::i;:::-;5956:35;5984:6;5956:23;:6;5967:11;5956:10;:23::i;:::-;:27;;:35::i;:::-;5947:44;;5998:14;6015:23;6025:4;6031:6;6015:9;:23::i;:::-;5998:40;;6046:18;6067:32;6077:8;;6087:11;6067:9;:32::i;:::-;6046:53;;6106:39;6115:8;;6125:10;6137:7;:5;:7::i;6106:39::-;6180:6;6153:5;6159:4;6153:11;;;;;;;;;;;;;;;;:23;:11;;;;;:23;:33;;;;;;;-1:-1:-1;6201:11:11;;6207:4;;6201:11;;;;;;;;;;;;;;;;:24;;;;;;;;;;-1:-1:-1;;;;;6201:24:11;-1:-1:-1;;;;;6194:40:11;;6243:5;6251:6;6194:64;;;;;;;;;;;;;-1:-1:-1;;;;;6194:64:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6262:21:11;;;;;;;;;;;;;;-1:-1:-1;;;;;6262:13:11;;;;;:21;;;;;-1:-1:-1;;6262:21:11;;;;;;;-1:-1:-1;6262:13:11;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5473:818;;;;;;;;;;:::o;1717:145:0:-;1308:12;:10;:12::i;:::-;-1:-1:-1;;;;;1297:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1297:23:0;;1289:68;;;;;-1:-1:-1;;;1289:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1823:1:::1;1807:6:::0;;1786:40:::1;::::0;-1:-1:-1;;;;;1807:6:0;;::::1;::::0;1786:40:::1;::::0;1823:1;;1786:40:::1;1853:1;1836:19:::0;;;::::1;::::0;;1717:145::o;2914:107:11:-;1308:12:0;:10;:12::i;:::-;-1:-1:-1;;;;;1297:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1297:23:0;;1289:68;;;;;-1:-1:-1;;;1289:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3012:5:11::1;2993;2999:4;2993:11;;;;;;;;;;;;;;;;;;:16;;:24;;;;;;;;;;;;:::i;:::-;;2914:107:::0;;:::o;1580:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1580:23:11;;;;-1:-1:-1;1580:23:11;;;;;;;;;;;:::o;1715:41::-;;;;:::o;1085:85:0:-;1131:7;1157:6;-1:-1:-1;;;;;1157:6:0;1085:85;:::o;3550:235:11:-;1984:8;;1996:1;1984:13;1976:38;;;;;-1:-1:-1;;;1976:38:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;2035:1;2024:8;:12;;;3650:5:::1;:11:::0;;3656:4;;3650:11;::::1;;;;;;::::0;;;::::1;::::0;;;:24:::1;:11;::::0;;::::1;;:24;::::0;-1:-1:-1;;;;;3650:24:11::1;::::0;-1:-1:-1;3679:70:11::1;3650:24:::0;3714:10:::1;3734:4;3741:7:::0;3679:16:::1;:70::i;:::-;3753:28;3762:4;3768:7;3777:3;3753:8;:28::i;1759:32::-:0;;;;:::o;6861:664::-;1984:8;;1996:1;1984:13;1976:38;;;;;-1:-1:-1;;;1976:38:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;2035:1;2024:8;:12;7000;;7035:4:::1;::::0;-1:-1:-1;;;;;7023:16:11;;::::1;7035:4:::0;::::1;7023:16;7020:154;;;7054:4;;;;;;;;;-1:-1:-1::0;;;;;7054:4:11::1;-1:-1:-1::0;;;;;7048:19:11::1;;7075:9;7048:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;7020:154;;;7104:62;7121:8;7131:10;7151:4;7158:7;7104:16;:62::i;:::-;7185:6;7181:102;7197:3;7193:1;:7;7181:102;;;7236:39;7247:5;7253:1;7247:8;;;;;;;;;;;;;;7257;7267:7;7236:10;:39::i;:::-;7214:61:::0;-1:-1:-1;7214:61:11;-1:-1:-1;7202:3:11::1;;7181:102;;;;7300:58;7314:8;7324:5;7330:4;7324:11;;;;;;;;;::::0;;;::::1;::::0;;;:24:::1;:11;::::0;;::::1;;:24;::::0;-1:-1:-1;;;;;7324:24:11::1;7350:7:::0;7300:13:::1;:58::i;:::-;7290:68;;7371:17;7391:36;7421:5;7391:25;7403:12;;7391:7;:11;;:25;;;;:::i;:36::-;7371:56;;7434:34;7443:4;7449:9;7460:7;:5;:7::i;7434:34::-;7475:43;7484:4:::0;7490:22:::1;:7:::0;7502:9;7490:11:::1;:22::i;:::-;7514:3;7475:8;:43::i;:::-;-1:-1:-1::0;;2068:1:11;2057:8;:12;-1:-1:-1;;;;;6861:664:11:o;3067:77::-;1308:12:0;:10;:12::i;:::-;-1:-1:-1;;;;;1297:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1297:23:0;;1289:68;;;;;-1:-1:-1;;;1289:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3125:8:11::1;:15:::0;3067:77::o;625:496:10:-;775:7;799:6;796:146;;;812:10;867;855:9;845:6;825:9;837:4;825:16;:27;;;;;;:39;:52;;;;;;812:65;;913:5;921:4;913:12;896:6;905:4;896:13;:30;;;;;;889:37;;;;;796:146;1110:4;962:145;1087:19;:9;1101:4;1087:13;:19::i;:::-;962:110;1002:59;1038:22;:9;1052:7;1038:13;:22::i;:::-;1016:19;:6;1027:7;1016:10;:19::i;:::-;1002:9;;1016:44;1002:13;:59::i;:::-;962:25;:110::i;:145::-;:152;;;;;;946:168;;625:496;;;;;;;;:::o;1794:27:11:-;;;;:::o;1676:36::-;;;;:::o;2011:240:0:-;1308:12;:10;:12::i;:::-;-1:-1:-1;;;;;1297:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;1297:23:0;;1289:68;;;;;-1:-1:-1;;;1289:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2099:22:0;::::1;2091:73;;;;-1:-1:-1::0;;;2091:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2200:6;::::0;;2179:38:::1;::::0;-1:-1:-1;;;;;2179:38:0;;::::1;::::0;2200:6;::::1;::::0;2179:38:::1;::::0;::::1;2227:6;:17:::0;;;::::1;-1:-1:-1::0;;;;;2227:17:0;;;::::1;::::0;;;::::1;::::0;;2011:240::o;4824:608:11:-;4918:7;4931:13;4952:5;4958:4;4952:11;;;;;;;;;;;;;;;:20;:11;;;;;:20;;;5001:11;;-1:-1:-1;;;;;4952:20:11;;;;-1:-1:-1;4952:20:11;5007:4;;5001:11;;;;;;;;;;;;;:24;:11;;;;;:24;;;5052:11;;-1:-1:-1;;;;;5001:24:11;;;;-1:-1:-1;5058:4:11;;5052:11;;;;;;;;;;;;;;;;:17;;;;;;;;;;-1:-1:-1;;;;;5052:17:11;5030:40;;5074:19;5096:8;-1:-1:-1;;;;;5096:20:11;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5096:22:11;5138:30;;;;;;5162:4;5138:30;;;;;;5096:22;;-1:-1:-1;5122:13:11;;-1:-1:-1;;;;;5138:15:11;;;;;:30;;;;;5096:22;;5138:30;;;;;;;:15;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5138:30:11;;-1:-1:-1;5172:22:11;5197:35;5220:11;5197:18;:7;5138:30;5197:11;:18::i;:35::-;5172:60;;5239:8;-1:-1:-1;;;;;5239:13:11;;5253:5;5260:7;5239:29;;;;;;;;;;;;;-1:-1:-1;;;;;5239:29:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5272:5;-1:-1:-1;;;;;5272:14:11;;5287;5272:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5306:51;5327:7;5337:3;5342:14;5306:12;:51::i;:::-;5389:14;5362:5;5368:4;5362:11;;;;;;;;;;;;;;;;;;;;;:23;;:41;;;;;;;;5414:14;4824:608;-1:-1:-1;;;;;;;;;;4824:608:11:o;598:104:4:-;685:10;598:104;:::o;2690:175:1:-;2748:7;2779:5;;;2802:6;;;;2794:46;;;;;-1:-1:-1;;;2794:46:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;2857:1;-1:-1:-1;2690:175:1;;;;;:::o;3538:215::-;3596:7;3619:6;3615:20;;-1:-1:-1;3634:1:1;3627:8;;3615:20;3657:5;;;3661:1;3657;:5;:1;3680:5;;;;;:10;3672:56;;;;-1:-1:-1;;;3672:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4217:150;4275:7;4306:1;4302;:5;4294:44;;;;;-1:-1:-1;;;4294:44:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;4359:1;4355;:5;;;;;;;4217:150;-1:-1:-1;;;4217:150:1:o;3837:771:11:-;3912:13;3933:5;3939:4;3933:11;;;;;;;;;;;;;;;:20;:11;;;;;:20;;;3982:11;;-1:-1:-1;;;;;3933:20:11;;;;-1:-1:-1;3933:20:11;3988:4;;3982:11;;;;;;;;;;;;;:24;:11;;;;;:24;;;4033:11;;-1:-1:-1;;;;;3982:24:11;;;;-1:-1:-1;4039:4:11;;4033:11;;;;;;;;;;;;;;;;:17;;;;;;;;;;-1:-1:-1;;;;;4033:17:11;4011:40;;4055:19;4077:8;-1:-1:-1;;;;;4077:20:11;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4077:22:11;;-1:-1:-1;4107:16:11;4104:391;;4129:8;-1:-1:-1;;;;;4129:13:11;;4143:3;4148:7;4129:27;;;;;;;;;;;;;-1:-1:-1;;;;;4129:27:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4104:391;;;4212:15;4173:5;4179:4;4173:11;;;;;;;;;;;;;;;;;;:35;;;:54;4170:150;;4272:15;4234:5;4240:4;4234:11;;;;;;;;;;;;;;;;;;:35;;:53;;;;4293:21;4305:4;4310:3;4293:11;:21::i;:::-;4324:13;4340:5;-1:-1:-1;;;;;4340:15:11;;4364:4;4340:30;;;;;;;;;;;;;-1:-1:-1;;;;;4340:30:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4340:30:11;;-1:-1:-1;4388:19:11;4410:35;4340:30;4410:24;:7;4422:11;4410;:24::i;:35::-;4388:57;;4459:8;-1:-1:-1;;;;;4459:13:11;;4473:3;4478:11;4459:31;;;;;;;;;;;;;-1:-1:-1;;;;;4459:31:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4104:391;;;4500:7;-1:-1:-1;;;;;4500:15:11;;4524:5;4532:7;4500:40;;;;;;;;;;;;;-1:-1:-1;;;;;4500:40:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4544:22:11;;;;;;;;;;;;;;-1:-1:-1;;;;;4544:13:11;;;;;:22;;;;;-1:-1:-1;;4544:22:11;;;;;;;-1:-1:-1;4544:13:11;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4597:7;4570:5;4576:4;4570:11;;;;;;;;;;;;;;;;:23;:11;;;;;:23;:34;;;;;;;-1:-1:-1;;;;;;;3837:771:11:o;3136:155:1:-;3194:7;3226:1;3221;:6;;3213:49;;;;;-1:-1:-1;;;3213:49:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3279:5:1;;;3136:155::o;10207:341:11:-;10400:45;;;-1:-1:-1;;;;;10400:45:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10389:57;;;;10354:12;;10368:17;;10389:10;;;;10400:45;10389:57;;;10400:45;10389:57;;10400:45;10389:57;;;;;;;;;;-1:-1:-1;;10389:57:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10353:93;;;;10464:7;:57;;;;-1:-1:-1;10476:11:11;;:16;;:44;;;10507:4;10496:24;;;;;;;;;;;;;;;-1:-1:-1;10496:24:11;10476:44;10456:85;;;;;-1:-1:-1;;;10456:85:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;10207:341;;;;;:::o;9635:178::-;9744:12;;;9705;9744;;;;;;;;;-1:-1:-1;;;;;9722:7:11;;;9736:6;;9722:35;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9722:35:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9704:53;;;9775:7;9767:39;;;;;-1:-1:-1;;;9767:39:11;;;;;;;;;;;;;;;;;;;;;;;;;;;3114:711:10;3203:17;3222:16;3246:19;3283:5;3246:43;;3316:4;-1:-1:-1;;;;;3316:11:10;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3316:13:10;-1:-1:-1;;;;;3303:26:10;;;;;;3299:520;;;3353:4;-1:-1:-1;;;;;3353:11:10;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3353:13:10;3380:51;;;;;;-1:-1:-1;;;;;3380:51:10;;;;;;;;;;;;;;;3353:13;;-1:-1:-1;3380:26:10;;;;;;:51;;;;;3353:13;;3380:51;;;;;;;;-1:-1:-1;3380:26:10;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3457:38:10;;;;;;;;;;;;-1:-1:-1;;;;;3457:38:10;;;;;;;;;:17;;;;;;:38;;;;;3380:51;;3457:38;;;;;;;;:17;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3457:38:10;3548:12;;;3519:1;3548:12;;;;;;;;;;3509:52;;;;;;;;;;;;;;;3541:4;3509:52;;;;;;;;;;;;;;;;;;;;;3457:38;;-1:-1:-1;;;;;;3509:9:10;;;;;3519:1;;3457:38;;3541:4;;3548:12;;3509:52;;;;;;;3548:12;3509:52;;3548:12;3519:1;3509:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3299:520;;;3600:4;-1:-1:-1;;;;;3600:11:10;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3600:13:10;3627:51;;;;;;-1:-1:-1;;;;;3627:51:10;;;;;;;;;;;;;;;3600:13;;-1:-1:-1;3627:26:10;;;;;;:51;;;;;3600:13;;3627:51;;;;;;;;-1:-1:-1;3627:26:10;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3704:38:10;;;;;;;;;;;;-1:-1:-1;;;;;3704:38:10;;;;;;;;;:17;;;;;;:38;;;;;3627:51;;3704:38;;;;;;;;:17;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3704:38:10;3795:12;;;3777:1;3795:12;;;;;;;;;;3756:52;;;;;;;;;;;;;;;3788:4;3756:52;;;;;;;;;;;;;;;;;;;;;3704:38;;-1:-1:-1;;;;;;3756:9:10;;;;;3704:38;;3788:4;;3756:52;;;;;;3795:12;3756:52;;3795:12;3777:1;3756:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3299:520;3114:711;;;;;;;:::o;6338:495:11:-;6405:7;6420:11;6434:5;6440:4;6434:11;;;;;;;;;;;;;;;;;;:16;;:23;;;;6420:37;;6464:16;6483:5;6489:4;6483:11;;;;;;;;;;;;;;;;;;;;:23;-1:-1:-1;;;;;6483:23:11;;-1:-1:-1;6513:114:11;6529:3;6525:1;:7;6513:114;;;6569:50;6580:5;6586:4;6580:11;;;;;;;;;;;;;;;;;;:16;;6597:1;6580:19;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6580:19:11;6601:8;6611:7;6569:10;:50::i;:::-;6547:72;;-1:-1:-1;6547:72:11;-1:-1:-1;6534:3:11;;6513:114;;;-1:-1:-1;6636:7:11;;6633:194;;6659:59;6673:8;6683:5;6689:4;6683:11;;;;;;;6659:59;6652:66;;;;;;6633:194;6745:74;6759:5;6765:4;6759:11;;;;;;;;;;;;;;;;;;;;;:23;;6784:11;;-1:-1:-1;;;;;6759:23:11;;;;6790:4;;6784:11;;;;;9819:382;10042:51;;;-1:-1:-1;;;;;10042:51:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10031:63;;;;9996:12;;10010:17;;10031:10;;;;10042:51;10031:63;;;10042:51;10031:63;;10042:51;10031:63;;;;;;;;;;-1:-1:-1;;10031:63:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9995:99;;;;10112:7;:57;;;;-1:-1:-1;10124:11:11;;:16;;:44;;;10155:4;10144:24;;;;;;;;;;;;;;;-1:-1:-1;10144:24:11;10124:44;10104:90;;;;;-1:-1:-1;;;10104:90:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;9819:382;;;;;;:::o;1128:816:10:-;1217:17;1243:14;1275:5;-1:-1:-1;;;;;1260:28:10;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1260:30:10;1314;;;;;;;;1260;;-1:-1:-1;1297:14:10;;-1:-1:-1;;;;;1314:28:10;;;;;:30;;;;;1260;;1314;;;;;;;:28;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1314:30:10;;-1:-1:-1;;;;;;1354:16:10;;;;;;;1351:587;;1380:16;1397:17;1418:40;1435:5;1442:6;1450:7;1418:16;:40::i;:::-;1379:79;;;;1473:6;-1:-1:-1;;;;;1466:23:10;;1498:5;1506:8;1466:49;;;;;;;;;;;;;-1:-1:-1;;;;;1466:49:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1529:50:10;;;;;;-1:-1:-1;;;;;1529:50:10;;;;;;;;;;;;;;;:23;;;;;;:50;;;;;1466:49;;1529:50;;;;;;;;-1:-1:-1;1529:23:10;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1605:41:10;;;;;;1640:4;1605:41;;;;;;-1:-1:-1;;;;;1605:26:10;;;;;:41;;;;;1529:50;;1605:41;;;;;;;-1:-1:-1;1605:26:10;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1605:41:10;;-1:-1:-1;1351:587:10;;-1:-1:-1;;1351:587:10;;1667:16;1684:17;1705:40;1722:5;1729:6;1737:7;1705:16;:40::i;:::-;1666:79;;;;1757:6;-1:-1:-1;;;;;1750:23:10;;1782:5;1790:8;1750:49;;;;;;;;;;;;;-1:-1:-1;;;;;1750:49:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1813:50:10;;;;;;-1:-1:-1;;;;;1813:50:10;;;;;;;;;;;;;;;:23;;;;;;:50;;;;;1750:49;;1813:50;;;;;;;;-1:-1:-1;1813:23:10;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1889:41:10;;;;;;1924:4;1889:41;;;;;;-1:-1:-1;;;;;1889:26:10;;;;;:41;;;;;1813:50;;1889:41;;;;;;;-1:-1:-1;1889:26:10;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1889:41:10;;-1:-1:-1;;;1351:587:10;1128:816;;;;;;;:::o;235:323::-;283:9;312:1;308;:5;304:226;;;-1:-1:-1;333:1:10;368;364;360:5;;:9;383:89;394:1;390;:5;383:89;;;419:1;415:5;;456:1;451;447;443;:5;;;;;;:9;442:15;;;;;;438:19;;383:89;;;304:226;;;;492:6;;488:42;;-1:-1:-1;518:1:10;488:42;235:323;;;:::o;1951:1157::-;2047:19;2068:17;2097:19;2134:5;2097:43;;2151:16;2169;2190:4;-1:-1:-1;;;;;2190:16:10;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2190:18:10;;;;;;;;2232:30;;;;;;;2190:18;;-1:-1:-1;2190:18:10;;-1:-1:-1;2218:11:10;;-1:-1:-1;;;;;2232:28:10;;;;;:30;;;;;2190:18;2232:30;;;;;;:28;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2232:30:10;2286:55;;;;;;;;;;;;-1:-1:-1;;;;;2286:55:10;;;;;;;;;2232:30;;-1:-1:-1;2272:11:10;;2286:34;;;;;;:55;;;;;2232:30;;2286:55;;;;;;;;:34;:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2286:55:10;2368:13;;;;;;;;2286:55;;-1:-1:-1;;;;;;2368:11:10;;;;;:13;;;;;2286:55;;2368:13;;;;;;;;:11;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2368:13:10;-1:-1:-1;;;;;2355:26:10;;;;;;2351:751;;;2408:65;2430:8;2440;2451;2461:6;2469:3;2408:21;:65::i;:::-;2394:79;;2494:9;-1:-1:-1;;;;;2487:26:10;;2522:4;2529:11;2487:54;;;;;;;;;;;;;-1:-1:-1;;;;;2487:54:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2568:41:10;;;;;;;;;;;;-1:-1:-1;;;;;2568:41:10;;;;;;;;;:17;;;;;;:41;;;;;2487:54;;2568:41;;;;;;;;:17;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2568:41:10;2663:12;;;2634:1;2663:12;;;;;;;;;;2624:52;;;;;;;;;;;;;;;2656:4;2624:52;;;;;;;;;;;;;;;;;;;;;2568:41;;-1:-1:-1;;;;;;2624:9:10;;;;;2634:1;;2568:41;;2656:4;;2663:12;;2624:52;;;;;;;2663:12;2624:52;;2663:12;2634:1;2624:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2704:25;2717:11;2704:8;:12;;:25;;;;:::i;:::-;2690:39;;2351:751;;;2771:64;2793:8;2803;2813;2823:6;2831:3;2771:21;:64::i;:::-;2757:78;;2857:9;-1:-1:-1;;;;;2850:26:10;;2885:4;2892:11;2850:54;;;;;;;;;;;;;-1:-1:-1;;;;;2850:54:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2931:41:10;;;;;;;;;;;;-1:-1:-1;;;;;2931:41:10;;;;;;;;;:17;;;;;;:41;;;;;2850:54;;2931:41;;;;;;;;:17;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2931:41:10;3025:12;;;3007:1;3025:12;;;;;;;;;;2986:52;;;;;;;;;;;;;;;3018:4;2986:52;;;;;;;;;;;;;;;;;;;;;2931:41;;-1:-1:-1;;;;;;2986:9:10;;;;;2931:41;;3018:4;;2986:52;;;;;;3025:12;2986:52;;3025:12;3007:1;2986:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3066:25;3079:11;3066:8;:12;;:25;;;;:::i;:::-;3052:39;;1951:1157;;;;;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://faa81b6bdbede1faff06882bb1b172e6e670b7143372554a67d898b89ec5a304
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 27 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
OP | 100.00% | $0.099908 | 2.3621 | $0.2359 |
[ 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.