ETH Price: $2,402.88 (-0.79%)

Contract

0x38009b7Fd1FF6B719d18e0C03eE4CAdff539d788
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Unstake166679812023-02-20 6:28:35572 days ago1676874515IN
0x38009b7F...ff539d788
0 ETH0.0032586523.64723417
Unstake166679802023-02-20 6:28:23572 days ago1676874503IN
0x38009b7F...ff539d788
0 ETH0.0026597222.99668069
Unstake166679772023-02-20 6:27:47572 days ago1676874467IN
0x38009b7F...ff539d788
0 ETH0.003259524.42433437
Unstake166679752023-02-20 6:27:23572 days ago1676874443IN
0x38009b7F...ff539d788
0 ETH0.0027981424.19349957
Unstake166679732023-02-20 6:26:59572 days ago1676874419IN
0x38009b7F...ff539d788
0 ETH0.0025371821.93485999
Unstake166679722023-02-20 6:26:47572 days ago1676874407IN
0x38009b7F...ff539d788
0 ETH0.0026554322.95953508
Unstake166583452023-02-18 22:00:47573 days ago1676757647IN
0x38009b7F...ff539d788
0 ETH0.0022851219.75571739
Unstake164336692023-01-18 12:23:59605 days ago1674044639IN
0x38009b7F...ff539d788
0 ETH0.0018551716.01829539
Unstake163929572023-01-12 19:58:47610 days ago1673553527IN
0x38009b7F...ff539d788
0 ETH0.0031435722.78776704
Unstake163437172023-01-05 22:58:11617 days ago1672959491IN
0x38009b7F...ff539d788
0 ETH0.0024128420.83562334
Unstake163437142023-01-05 22:57:35617 days ago1672959455IN
0x38009b7F...ff539d788
0 ETH0.0031259222.66182461
Unstake163437082023-01-05 22:56:23617 days ago1672959383IN
0x38009b7F...ff539d788
0 ETH0.0026091322.53058487
Unstake163436492023-01-05 22:44:23617 days ago1672958663IN
0x38009b7F...ff539d788
0 ETH0.0032698224.47691332
Unstake161223242022-12-06 0:59:59648 days ago1670288399IN
0x38009b7F...ff539d788
0 ETH0.002189615.87109368
Unstake161223172022-12-06 0:58:35648 days ago1670288315IN
0x38009b7F...ff539d788
0 ETH0.0020851418.00205635
Unstake161222102022-12-06 0:37:11648 days ago1670287031IN
0x38009b7F...ff539d788
0 ETH0.0013963613.46356799
Unstake161222082022-12-06 0:36:47648 days ago1670287007IN
0x38009b7F...ff539d788
0 ETH0.0013974611.99414959
Unstake161221942022-12-06 0:33:59648 days ago1670286839IN
0x38009b7F...ff539d788
0 ETH0.00159913.8049909
Unstake160798342022-11-30 2:31:11654 days ago1669775471IN
0x38009b7F...ff539d788
0 ETH0.0017334712.97631004
Unstake160277752022-11-22 19:57:59661 days ago1669147079IN
0x38009b7F...ff539d788
0 ETH0.0025795521.37746126
Unstake160236712022-11-22 6:10:23662 days ago1669097423IN
0x38009b7F...ff539d788
0 ETH0.0013294711.49380452
Unstake160236662022-11-22 6:09:23662 days ago1669097363IN
0x38009b7F...ff539d788
0 ETH0.0014554212.05787455
Unstake160236462022-11-22 6:05:23662 days ago1669097123IN
0x38009b7F...ff539d788
0 ETH0.0011125911.28750744
Unstake160236452022-11-22 6:05:11662 days ago1669097111IN
0x38009b7F...ff539d788
0 ETH0.0011196111.28317537
Unstake160236442022-11-22 6:04:59662 days ago1669097099IN
0x38009b7F...ff539d788
0 ETH0.001088811.0461182
View all transactions

Latest 7 internal transactions

Advanced mode:
Parent Transaction Hash Block From To
160024342022-11-19 7:00:59665 days ago1668841259
0x38009b7F...ff539d788
1.5 ETH
159926192022-11-17 22:07:47666 days ago1668722867
0x38009b7F...ff539d788
1.5 ETH
159857242022-11-16 23:00:47667 days ago1668639647
0x38009b7F...ff539d788
2.5 ETH
159690552022-11-14 15:05:11670 days ago1668438311
0x38009b7F...ff539d788
1.5 ETH
159536392022-11-12 11:29:11672 days ago1668252551
0x38009b7F...ff539d788
1.5 ETH
159437072022-11-11 2:10:23673 days ago1668132623
0x38009b7F...ff539d788
1.5 ETH
159369002022-11-10 3:20:59674 days ago1668050459
0x38009b7F...ff539d788
3 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BBCStakingContract

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity Multiple files format)

File 1 of 8: bbcstakingcontract.sol
 pragma solidity ^0.8.0;

//SPDX-License-Identifier: Unlicensed

import "./ITeam.sol";
import "./IERC20.sol";
import "./Ownable.sol";
import "./AggregatorV3Interface.sol";
import "./SafeMath.sol";
import "./SignedSafeMath.sol";


interface IUniswapV2Pair {
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);    
}

interface IUniswapV2Router {
    function getAmountsIn(uint amountIn, address[] memory path) external view returns (uint[] memory amounts);
}


contract BBCStakingContract is Ownable {
    
    using SignedSafeMath for int256;    
    using SafeMath for uint256;

    address immutable WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address immutable DAI_ADDRESS = 0x6B175474E89094C44Da98b954EedeAC495271d0F;
    IUniswapV2Pair immutable DAI_PAIR = IUniswapV2Pair(0xA478c2975Ab1Ea89e8196811F51A7B7Ade33eB11);
    IUniswapV2Router immutable UNISWAP_ROUTER_V2 = IUniswapV2Router(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);   

    address public _bearAddress;
    address public _bullAddress;
    address public _crabAddress;

    address public _mainAddress;

    ITeam private _bearToken;
    ITeam private _bullToken;
    ITeam private _crabToken;

    IERC20 private _mainToken;

    uint256 public _startTime;
    uint256 public _endTime;

    int256 public _openPrice;
    int256 public _closePrice;
    int256 public _currentPrice;
    uint256 public lastTimeChecked;
    uint256 public _prize;

    string public _name;
    string public _symbol;

    //percentage change below which we can confidently say: we crabbin'
    int256 public _crabPercentage;

    //0 for Chainlink, 1 for UniswapV2
    bool public _betType;

    //Chainlink Stuff
    address public _linkAggregatorAddress;
    AggregatorV3Interface private priceFeed;
    uint8 public oracleDecimals;

    //Univ2stuff
    IERC20 public _token;
    IERC20 public _otherToken;
    IUniswapV2Pair public _pair;
    uint8 _tokenDecimals;
    uint8 _otherTokenDecimals;
    bool _tokenPosition;

    game[] public games;
    uint public counter = 0;

  

    struct game {
        string name;
        string symbol;
        uint256 startTime;
        uint256 endTime;
        uint256 prize;
        string winner;
    }

    constructor (address bullAddress, address bearAddress, address crabAddress, address mainAddress) {
        _bullAddress= bullAddress;
        _bearAddress = bearAddress;
        _crabAddress = crabAddress;
        _mainAddress = mainAddress;

        _bullToken = ITeam(_bullAddress);
        _bearToken = ITeam(_bearAddress);
        _crabToken = ITeam(_crabAddress);

        _mainToken = IERC20(_mainAddress); 
    
    }

    receive() external payable {}


    //for data available through ChainLink
    function setOracleBet(
        string calldata name,
        string calldata symbol,
        address linkAggregatorAddress,
        int256 crabPercentage, 
        uint256 startTime, 
        uint256 endTime
    ) external payable onlyOwner {

        _name = name;
        _symbol = symbol;

        _betType = false;
        _crabPercentage = crabPercentage;
        _startTime = startTime;
        _endTime = endTime;

        _linkAggregatorAddress = linkAggregatorAddress;
        priceFeed = AggregatorV3Interface(_linkAggregatorAddress);  
        oracleDecimals = priceFeed.decimals();

        _prize = msg.value;      

        getPrice();
    }
    
    //for Uniswap V2 pools
    function setUniV2Bet(
        string calldata name,
        string calldata symbol,
        address token,
        address pair, 
        int256 crabPercentage, 
        uint256 startTime, 
        uint256 endTime
    ) external payable onlyOwner {

        _name = name;
        _symbol = symbol;

        _token = IERC20(token);
        _pair = IUniswapV2Pair(pair);   

        if (_pair.token0() == token) {
            _tokenPosition = false;
            _otherToken = IERC20(_pair.token1());
        }
        else if (_pair.token1() == address(token)) {
            _tokenPosition = true;
            _otherToken = IERC20(_pair.token0());
        }
        else require(false, "invalid pair");

        _tokenDecimals = _token.decimals();
        _otherTokenDecimals = _otherToken.decimals();

        _betType = true;
       
        _crabPercentage = crabPercentage;
        _startTime = startTime;
        _endTime = endTime;

        _prize = msg.value;

        getPrice();
    } 
       
    

    function getPrice() public {

        int256 _gudPrice;

        if (!_betType) {
            //get price with ChainLink
            (
            /*int2560 roundID*/,
            _gudPrice,
            /*uint startedAt*/,
            /*uint timeStamp*/,
            /*int2560 answeredInRound*/
            ) = (priceFeed.latestRoundData());
            _currentPrice=_gudPrice;
                        
        }
        else {
            address[] memory path1 = new address[](2);
            path1[0] = address(_otherToken);
            path1[1] = address(_token);

            uint256 price = UNISWAP_ROUTER_V2.getAmountsIn(1*10**_tokenDecimals, path1)[0];                

            //if it's not a stablecoin pool, convert ETH value to USD
            if (address(_otherToken) == WETH) {
                address[] memory path2 = new address[](2);
                
                path2[1] = address(_otherToken);
                path2[0] = address(DAI_ADDRESS);               
                
                _gudPrice = int256(UNISWAP_ROUTER_V2.getAmountsIn(price, path2)[0]);                
            }
            else {
                _gudPrice = int256(price);
            }

            _currentPrice = _gudPrice;
        }

    }        

    function sendPrize() internal {
        game memory lastGame;
        lastGame.name = _name;
        lastGame.symbol = _symbol;
        lastGame.startTime = _startTime;
        lastGame.endTime = _endTime;
        lastGame.prize = _prize;
            
        address winner;
        int256 percentageChange = ((_closePrice.sub(_openPrice)).mul(100)).div(_openPrice);
        if (abs(percentageChange) < _crabPercentage) {
            winner = _crabAddress;
            lastGame.winner ="Crab";
        }
        else if (percentageChange > 0) {
            winner = _bullAddress;
            lastGame.winner = "Bull";
        }
        else {
            winner = _bearAddress;
            lastGame.winner =  "Bear";
        }
        games.push(lastGame);
        counter++;
        payable(winner).call{value: _prize}("");

        _openPrice = 0;
        _closePrice = 0;       
        _prize = 0;
    }

 
    
    function stake(uint256 amount, address team) external {
        checkTime();
        require (!isStakingClosed(), "Bets are closed: you cannot Stake at this time!");     
        require(_mainToken.balanceOf(msg.sender) >= amount, "Not enough tokens");

        _mainToken.transferFrom(msg.sender, address(this), amount);        
    
        if (team == _bearAddress) {
            _bearToken.stake(msg.sender, amount);
        }

        else if (team == _bullAddress) {
            _bullToken.stake(msg.sender, amount);
        }

        else if (team == _crabAddress) {
            _crabToken.stake(msg.sender, amount);
        }

        else {
            require(false, "Provide a valid team address");
        }

    }

    function unstake(uint256 amount, address team) external {
        checkTime();
        require (!isStakingClosed(), "Bets are closed: you cannot Unstake at this time!"); 

        if (team == _bearAddress) {
            require (amount <= _bearToken.balanceOf(msg.sender)); 
            require (_mainToken.balanceOf(address(this)) >= amount);
            _bearToken.unstake(msg.sender, amount); 
            _mainToken.transfer(msg.sender,amount);
        }

        else if (team == _bullAddress) {
            require (amount <= _bullToken.balanceOf(msg.sender)); 
            require (_mainToken.balanceOf(address(this)) >= amount);
            _bullToken.unstake(msg.sender, amount); 
            _mainToken.transfer(msg.sender,amount);
        }

        else if (team == _crabAddress) {
            require (amount <= _crabToken.balanceOf(msg.sender)); 
            require (_mainToken.balanceOf(address(this)) >= amount);
            _crabToken.unstake(msg.sender, amount); 
            _mainToken.transfer(msg.sender,amount);
        }

        else {
            require(false, "provide a valid team address");
        }
    }

    function checkTime() public {
        if (_prize == 0) {
            return;
        }
        getPrice();
        if (block.timestamp >= _startTime && block.timestamp < _endTime) {
            if (_openPrice == 0) {
                _openPrice = _currentPrice;
            }
        }
        else if (block.timestamp >= _endTime) {
            if (_closePrice == 0) {
                _closePrice = _currentPrice;
                sendPrize();
            }
        }
        lastTimeChecked = block.timestamp;
    }  
  
    function cancelBet() external onlyOwner {
        _openPrice = 0;
        _closePrice = 0;
        _startTime = 0;
        _endTime = 0;
        _prize = 0;
    }

    function setBear(address bearAddress) external onlyOwner{
        _bearAddress = bearAddress;
        _bearToken = ITeam(_bearAddress);
    }

    function setBull(address bullAddress) external onlyOwner{
        _bullAddress = bullAddress;
        _bullToken = ITeam(_bullAddress);
    }

    function setCrab(address crabAddress) external onlyOwner {
        _crabAddress = crabAddress;
        _crabToken = ITeam(_crabAddress);
    }

    function setMain(address mainAddress) external onlyOwner {
        _mainAddress= mainAddress;
        _mainToken= IERC20(_mainAddress);
    }

    function manualSend(uint256 amount, address holder) external onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        payable(holder).transfer(amount > 0 ? amount : contractETHBalance);
    }

    function abs(int256 x) private pure returns (int256) {
        return x >= 0 ? x : -x;
    }

     function getGame(uint i) public view returns (game memory) {
        require (counter > 0);
        require (counter >= i);
        return  games[i - 1];
    }

    function getLastGame() public view returns (game memory) {
        require (counter > 0);
        return games[counter - 1];
    }

    function isStakingClosed() public view returns (bool) {
        return (block.timestamp >= _startTime && block.timestamp < _endTime);
    }
    
}

File 2 of 8: AggregatorV3Interface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface AggregatorV3Interface {
  function decimals() external view returns (uint8);

  function description() external view returns (string memory);

  function version() external view returns (uint256);

  function getRoundData(uint80 _roundId)
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );

  function latestRoundData()
    external
    view
    returns (
      uint80 roundId,
      int256 answer,
      uint256 startedAt,
      uint256 updatedAt,
      uint80 answeredInRound
    );
}

File 3 of 8: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^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 meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

File 4 of 8: IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    function decimals() external view returns (uint8);

}

File 5 of 8: ITeam.sol
pragma solidity ^0.8.0;

// SPDX-License-Identifier: MIT License


interface ITeam {
    function stake(address account, uint256 amount) external;

    function unstake(address account, uint256 amount) external;

    function balanceOf(address account) external view returns (uint256);
}

File 6 of 8: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 7 of 8: SafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
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) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            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) {
        unchecked {
            // 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) {
        unchecked {
            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) {
        unchecked {
            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) {
        return a + b;
    }

    /**
     * @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) {
        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) {
        return a * b;
    }

    /**
     * @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.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        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) {
        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) {
        unchecked {
            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.
     *
     * 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) {
        unchecked {
            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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

File 8 of 8: SignedSafeMath.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/math/SignedSafeMath.sol)

pragma solidity ^0.8.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SignedSafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SignedSafeMath {
    /**
     * @dev Returns the multiplication of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two signed integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        return a / b;
    }

    /**
     * @dev Returns the subtraction of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        return a - b;
    }

    /**
     * @dev Returns the addition of two signed integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        return a + b;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"bullAddress","type":"address"},{"internalType":"address","name":"bearAddress","type":"address"},{"internalType":"address","name":"crabAddress","type":"address"},{"internalType":"address","name":"mainAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"_bearAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_betType","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_bullAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_closePrice","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_crabAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_crabPercentage","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_currentPrice","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_endTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_linkAggregatorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mainAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_openPrice","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_otherToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_pair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_prize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelBet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"counter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"games","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"prize","type":"uint256"},{"internalType":"string","name":"winner","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"i","type":"uint256"}],"name":"getGame","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"prize","type":"uint256"},{"internalType":"string","name":"winner","type":"string"}],"internalType":"struct BBCStakingContract.game","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastGame","outputs":[{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"prize","type":"uint256"},{"internalType":"string","name":"winner","type":"string"}],"internalType":"struct BBCStakingContract.game","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isStakingClosed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastTimeChecked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"holder","type":"address"}],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"oracleDecimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bearAddress","type":"address"}],"name":"setBear","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bullAddress","type":"address"}],"name":"setBull","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"crabAddress","type":"address"}],"name":"setCrab","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"mainAddress","type":"address"}],"name":"setMain","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"linkAggregatorAddress","type":"address"},{"internalType":"int256","name":"crabPercentage","type":"int256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"setOracleBet","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"pair","type":"address"},{"internalType":"int256","name":"crabPercentage","type":"int256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"name":"setUniV2Bet","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"team","type":"address"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"team","type":"address"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

61010060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b815250736b175474e89094c44da98b954eedeac495271d0f73ffffffffffffffffffffffffffffffffffffffff1660a09073ffffffffffffffffffffffffffffffffffffffff1660601b81525073a478c2975ab1ea89e8196811f51a7b7ade33eb1173ffffffffffffffffffffffffffffffffffffffff1660c09073ffffffffffffffffffffffffffffffffffffffff1660601b815250737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660e09073ffffffffffffffffffffffffffffffffffffffff1660601b81525060006019553480156200013f57600080fd5b506040516200560638038062005606833981810160405281019062000165919062000502565b62000185620001796200041f60201b60201c565b6200042760201b60201c565b83600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050620005c7565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050620004fc81620005ad565b92915050565b600080600080608085870312156200051f576200051e620005a8565b5b60006200052f87828801620004eb565b94505060206200054287828801620004eb565b93505060406200055587828801620004eb565b92505060606200056887828801620004eb565b91505092959194509250565b6000620005818262000588565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b620005b88162000574565b8114620005c457600080fd5b50565b60805160601c60a05160601c60c05160601c60e05160601c614ff5620006116000396000818161272c01526129c40152600050506000612955015260006128200152614ff56000f3fe60806040526004361061023f5760003560e01c80638310d61c1161012e578063b51449bb116100ab578063e68b52e71161006f578063e68b52e7146107db578063ecd0c0c314610806578063ed03da5314610831578063f2fde38b1461085a578063fa1acb5c1461088357610246565b8063b51449bb1461071a578063c438d31614610745578063d28d885214610770578063e06865631461079b578063e0c6190d146107c457610246565b8063906b58e6116100f2578063906b58e61461065457806398d5fdca1461067f5780639a8a64e214610696578063a2f77bcc146106b2578063b09f1266146106ef57610246565b80638310d61c1461057f5780638381e182146105aa5780638646c877146105d357806388af30c3146105fe5780638da5cb5b1461062957610246565b80635a5953f8116101bc5780637acb7757116101805780637acb7757146104c05780637b6d79f1146104e95780637cc8f88614610500578063801161b01461052b57806380d4fe201461055457610246565b80635a5953f8146103fd57806361bc221a146104285780636d1ae1e014610453578063715018a61461047e57806371aa16a41461049557610246565b806340d489581161020357806340d489581461032857806343deb8011461035357806349ae86451461037e5780635557e977146103a757806359ecb89d146103d257610246565b80630f836ce11461024b5780631014edf514610276578063117a5b901461029f578063211d7c49146102e15780633bdd280e146102fd57610246565b3661024657005b600080fd5b34801561025757600080fd5b506102606108ae565b60405161026d9190614294565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190613e56565b6108d4565b005b3480156102ab57600080fd5b506102c660048036038101906102c19190613dfc565b61093c565b6040516102d89695949392919061439d565b60405180910390f35b6102fb60048036038101906102f69190613c4b565b610b20565b005b34801561030957600080fd5b50610312611175565b60405161031f9190614360565b60405180910390f35b34801561033457600080fd5b5061033d61117b565b60405161034a9190614535565b60405180910390f35b34801561035f57600080fd5b50610368611181565b6040516103759190614535565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190613b7b565b611187565b005b3480156103b357600080fd5b506103bc611236565b6040516103c9919061432a565b60405180910390f35b3480156103de57600080fd5b506103e761125c565b6040516103f49190614294565b60405180910390f35b34801561040957600080fd5b50610412611282565b60405161041f9190614535565b60405180910390f35b34801561043457600080fd5b5061043d611288565b60405161044a9190614535565b60405180910390f35b34801561045f57600080fd5b5061046861128e565b6040516104759190614294565b60405180910390f35b34801561048a57600080fd5b506104936112b4565b005b3480156104a157600080fd5b506104aa6112c8565b6040516104b79190614360565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190613e56565b6112ce565b005b3480156104f557600080fd5b506104fe6117c3565b005b34801561050c57600080fd5b506105156117f5565b6040516105229190614294565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d9190613b7b565b61181b565b005b34801561056057600080fd5b506105696118ca565b604051610576919061430f565b60405180910390f35b34801561058b57600080fd5b506105946118dd565b6040516105a19190614513565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613e56565b611b08565b005b3480156105df57600080fd5b506105e86124b8565b6040516105f59190614360565b60405180910390f35b34801561060a57600080fd5b506106136124be565b6040516106209190614294565b60405180910390f35b34801561063557600080fd5b5061063e6124e4565b60405161064b9190614294565b60405180910390f35b34801561066057600080fd5b5061066961250d565b604051610676919061430f565b60405180910390f35b34801561068b57600080fd5b50610694612527565b005b6106b060048036038101906106ab9190613d2d565b612aa6565b005b3480156106be57600080fd5b506106d960048036038101906106d49190613dfc565b612c78565b6040516106e69190614513565b60405180910390f35b3480156106fb57600080fd5b50610704612eb2565b604051610711919061437b565b60405180910390f35b34801561072657600080fd5b5061072f612f40565b60405161073c9190614345565b60405180910390f35b34801561075157600080fd5b5061075a612f66565b6040516107679190614360565b60405180910390f35b34801561077c57600080fd5b50610785612f6c565b604051610792919061437b565b60405180910390f35b3480156107a757600080fd5b506107c260048036038101906107bd9190613b7b565b612ffa565b005b3480156107d057600080fd5b506107d96130a9565b005b3480156107e757600080fd5b506107f0613125565b6040516107fd9190614580565b60405180910390f35b34801561081257600080fd5b5061081b613136565b604051610828919061432a565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190613b7b565b61315c565b005b34801561086657600080fd5b50610881600480360381019061087c9190613b7b565b61320b565b005b34801561088f57600080fd5b5061089861328f565b6040516108a59190614535565b60405180910390f35b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108dc613295565b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc60008511610909578261090b565b845b9081150290604051600060405180830381858888f19350505050158015610936573d6000803e3d6000fd5b50505050565b6018818154811061094c57600080fd5b906000526020600020906006020160009150905080600001805461096f90614b61565b80601f016020809104026020016040519081016040528092919081815260200182805461099b90614b61565b80156109e85780601f106109bd576101008083540402835291602001916109e8565b820191906000526020600020905b8154815290600101906020018083116109cb57829003601f168201915b5050505050908060010180546109fd90614b61565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2990614b61565b8015610a765780601f10610a4b57610100808354040283529160200191610a76565b820191906000526020600020905b815481529060010190602001808311610a5957829003601f168201915b505050505090806002015490806003015490806004015490806005018054610a9d90614b61565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac990614b61565b8015610b165780601f10610aeb57610100808354040283529160200191610b16565b820191906000526020600020905b815481529060010190602001808311610af957829003601f168201915b5050505050905086565b610b28613295565b888860109190610b3992919061386b565b50868660119190610b4b92919061386b565b5084601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508473ffffffffffffffffffffffffffffffffffffffff16601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610c4d57600080fd5b505afa158015610c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c859190613ba8565b73ffffffffffffffffffffffffffffffffffffffff161415610da1576000601760166101000a81548160ff021916908315150217905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610d2457600080fd5b505afa158015610d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5c9190613ba8565b601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fb7565b8473ffffffffffffffffffffffffffffffffffffffff16601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610e2057600080fd5b505afa158015610e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e589190613ba8565b73ffffffffffffffffffffffffffffffffffffffff161415610f74576001601760166101000a81548160ff021916908315150217905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610ef757600080fd5b505afa158015610f0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2f9190613ba8565b601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fb6565b6000610fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fac906144f3565b60405180910390fd5b5b5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561101f57600080fd5b505afa158015611033573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110579190613f11565b601760146101000a81548160ff021916908360ff160217905550601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156110d957600080fd5b505afa1580156110ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111119190613f11565b601760156101000a81548160ff021916908360ff1602179055506001601360006101000a81548160ff021916908315150217905550826012819055508160098190555080600a8190555034600f8190555061116a612527565b505050505050505050565b600d5481565b600a5481565b600e5481565b61118f613295565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b60195481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112bc613295565b6112c66000613313565b565b600c5481565b6112d66130a9565b6112de61250d565b1561131e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131590614473565b60405180910390fd5b81600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161137a9190614294565b60206040518083038186803b15801561139257600080fd5b505afa1580156113a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ca9190613e29565b101561140b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140290614493565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161146a939291906142af565b602060405180830381600087803b15801561148457600080fd5b505af1158015611498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bc9190613c1e565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115a757600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663adc9772e33846040518363ffffffff1660e01b81526004016115709291906142e6565b600060405180830381600087803b15801561158a57600080fd5b505af115801561159e573d6000803e3d6000fd5b505050506117bf565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561169157600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663adc9772e33846040518363ffffffff1660e01b815260040161165a9291906142e6565b600060405180830381600087803b15801561167457600080fd5b505af1158015611688573d6000803e3d6000fd5b505050506117be565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561177b57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663adc9772e33846040518363ffffffff1660e01b81526004016117449291906142e6565b600060405180830381600087803b15801561175e57600080fd5b505af1158015611772573d6000803e3d6000fd5b505050506117bd565b60006117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b390614433565b60405180910390fd5b5b5b5b5050565b6117cb613295565b6000600b819055506000600c8190555060006009819055506000600a819055506000600f81905550565b601360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611823613295565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601360009054906101000a900460ff1681565b6118e56138f1565b6000601954116118f457600080fd5b601860016019546119059190614a3d565b8154811061191657611915614ce3565b5b90600052602060002090600602016040518060c001604052908160008201805461193f90614b61565b80601f016020809104026020016040519081016040528092919081815260200182805461196b90614b61565b80156119b85780601f1061198d576101008083540402835291602001916119b8565b820191906000526020600020905b81548152906001019060200180831161199b57829003601f168201915b505050505081526020016001820180546119d190614b61565b80601f01602080910402602001604051908101604052809291908181526020018280546119fd90614b61565b8015611a4a5780601f10611a1f57610100808354040283529160200191611a4a565b820191906000526020600020905b815481529060010190602001808311611a2d57829003601f168201915b50505050508152602001600282015481526020016003820154815260200160048201548152602001600582018054611a8190614b61565b80601f0160208091040260200160405190810160405280929190818152602001828054611aad90614b61565b8015611afa5780601f10611acf57610100808354040283529160200191611afa565b820191906000526020600020905b815481529060010190602001808311611add57829003601f168201915b505050505081525050905090565b611b106130a9565b611b1861250d565b15611b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4f906144d3565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e6057600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611c099190614294565b60206040518083038186803b158015611c2157600080fd5b505afa158015611c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c599190613e29565b821115611c6557600080fd5b81600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cc19190614294565b60206040518083038186803b158015611cd957600080fd5b505afa158015611ced573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d119190613e29565b1015611d1c57600080fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2a672e033846040518363ffffffff1660e01b8152600401611d799291906142e6565b600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611e089291906142e6565b602060405180830381600087803b158015611e2257600080fd5b505af1158015611e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5a9190613c1e565b506124b4565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561216857600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611f119190614294565b60206040518083038186803b158015611f2957600080fd5b505afa158015611f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f619190613e29565b821115611f6d57600080fd5b81600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611fc99190614294565b60206040518083038186803b158015611fe157600080fd5b505afa158015611ff5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120199190613e29565b101561202457600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2a672e033846040518363ffffffff1660e01b81526004016120819291906142e6565b600060405180830381600087803b15801561209b57600080fd5b505af11580156120af573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016121109291906142e6565b602060405180830381600087803b15801561212a57600080fd5b505af115801561213e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121629190613c1e565b506124b3565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561247057600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016122199190614294565b60206040518083038186803b15801561223157600080fd5b505afa158015612245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122699190613e29565b82111561227557600080fd5b81600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016122d19190614294565b60206040518083038186803b1580156122e957600080fd5b505afa1580156122fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123219190613e29565b101561232c57600080fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2a672e033846040518363ffffffff1660e01b81526004016123899291906142e6565b600060405180830381600087803b1580156123a357600080fd5b505af11580156123b7573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016124189291906142e6565b602060405180830381600087803b15801561243257600080fd5b505af1158015612446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246a9190613c1e565b506124b2565b60006124b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a8906144b3565b60405180910390fd5b5b5b5b5050565b60125481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600060095442101580156125225750600a5442105b905090565b6000601360009054906101000a900460ff166125f857601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156125a557600080fd5b505afa1580156125b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125dd9190613e96565b90919293509091509050508091505080600d81905550612aa3565b6000600267ffffffffffffffff81111561261557612614614d12565b5b6040519080825280602002602001820160405280156126435781602001602082028036833780820191505090505b509050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160008151811061267d5761267c614ce3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106126ee576126ed614ce3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631f00ca74601760149054906101000a900460ff16600a612782919061471a565b600161278e919061494f565b846040518363ffffffff1660e01b81526004016127ac929190614550565b60006040518083038186803b1580156127c457600080fd5b505afa1580156127d8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906128019190613bd5565b60008151811061281457612813614ce3565b5b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612a95576000600267ffffffffffffffff8111156128b1576128b0614d12565b5b6040519080825280602002602001820160405280156128df5781602001602082028036833780820191505090505b509050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061291957612918614ce3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000000000000000000000000000000000000000000008160008151811061298857612987614ce3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16631f00ca7483836040518363ffffffff1660e01b8152600401612a1d929190614550565b60006040518083038186803b158015612a3557600080fd5b505afa158015612a49573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612a729190613bd5565b600081518110612a8557612a84614ce3565b5b6020026020010151935050612a99565b8092505b82600d8190555050505b50565b612aae613295565b878760109190612abf92919061386b565b50858560119190612ad192919061386b565b506000601360006101000a81548160ff021916908315150217905550826012819055508160098190555080600a8190555083601360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612c0e57600080fd5b505afa158015612c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c469190613f11565b6014806101000a81548160ff021916908360ff16021790555034600f81905550612c6e612527565b5050505050505050565b612c806138f1565b600060195411612c8f57600080fd5b816019541015612c9e57600080fd5b6018600183612cad9190614a3d565b81548110612cbe57612cbd614ce3565b5b90600052602060002090600602016040518060c0016040529081600082018054612ce790614b61565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1390614b61565b8015612d605780601f10612d3557610100808354040283529160200191612d60565b820191906000526020600020905b815481529060010190602001808311612d4357829003601f168201915b50505050508152602001600182018054612d7990614b61565b80601f0160208091040260200160405190810160405280929190818152602001828054612da590614b61565b8015612df25780601f10612dc757610100808354040283529160200191612df2565b820191906000526020600020905b815481529060010190602001808311612dd557829003601f168201915b50505050508152602001600282015481526020016003820154815260200160048201548152602001600582018054612e2990614b61565b80601f0160208091040260200160405190810160405280929190818152602001828054612e5590614b61565b8015612ea25780601f10612e7757610100808354040283529160200191612ea2565b820191906000526020600020905b815481529060010190602001808311612e8557829003601f168201915b5050505050815250509050919050565b60118054612ebf90614b61565b80601f0160208091040260200160405190810160405280929190818152602001828054612eeb90614b61565b8015612f385780601f10612f0d57610100808354040283529160200191612f38565b820191906000526020600020905b815481529060010190602001808311612f1b57829003601f168201915b505050505081565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b60108054612f7990614b61565b80601f0160208091040260200160405190810160405280929190818152602001828054612fa590614b61565b8015612ff25780601f10612fc757610100808354040283529160200191612ff2565b820191906000526020600020905b815481529060010190602001808311612fd557829003601f168201915b505050505081565b613002613295565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600f5414156130b957613123565b6130c1612527565b60095442101580156130d45750600a5442105b156130f3576000600b5414156130ee57600d54600b819055505b61311b565b600a54421061311a576000600c54141561311957600d54600c819055506131186133d7565b5b5b5b42600e819055505b565b60148054906101000a900460ff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b613164613295565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613213613295565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327a90614413565b60405180910390fd5b61328c81613313565b50565b60095481565b61329d6137ff565b73ffffffffffffffffffffffffffffffffffffffff166132bb6124e4565b73ffffffffffffffffffffffffffffffffffffffff1614613311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330890614453565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6133df6138f1565b601080546133ec90614b61565b80601f016020809104026020016040519081016040528092919081815260200182805461341890614b61565b80156134655780601f1061343a57610100808354040283529160200191613465565b820191906000526020600020905b81548152906001019060200180831161344857829003601f168201915b505050505081600001819052506011805461347f90614b61565b80601f01602080910402602001604051908101604052809291908181526020018280546134ab90614b61565b80156134f85780601f106134cd576101008083540402835291602001916134f8565b820191906000526020600020905b8154815290600101906020018083116134db57829003601f168201915b50505050508160200181905250600954816040018181525050600a54816060018181525050600f5481608001818152505060008061356a600b5461355c606461354e600b54600c5461380790919063ffffffff16565b61381d90919063ffffffff16565b61383390919063ffffffff16565b905060125461357882613849565b12156135e657600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506040518060400160405280600481526020017f43726162000000000000000000000000000000000000000000000000000000008152508360a001819052506136bc565b600081131561365757600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506040518060400160405280600481526020017f42756c6c000000000000000000000000000000000000000000000000000000008152508360a001819052506136bb565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506040518060400160405280600481526020017f42656172000000000000000000000000000000000000000000000000000000008152508360a001819052505b5b60188390806001815401808255809150506001900390600052602060002090600602016000909190919091506000820151816000019080519060200190613704929190613927565b506020820151816001019080519060200190613721929190613927565b5060408201518160020155606082015181600301556080820151816004015560a082015181600501908051906020019061375c929190613927565b5050506019600081548092919061377290614bc4565b91905055508173ffffffffffffffffffffffffffffffffffffffff16600f5460405161379d9061427f565b60006040518083038185875af1925050503d80600081146137da576040519150601f19603f3d011682016040523d82523d6000602084013e6137df565b606091505b5050506000600b819055506000600c819055506000600f81905550505050565b600033905090565b6000818361381591906149a9565b905092915050565b6000818361382b9190614838565b905092915050565b60008183613841919061465d565b905092915050565b600080821215613862578161385d90614c0d565b613864565b815b9050919050565b82805461387790614b61565b90600052602060002090601f01602090048101928261389957600085556138e0565b82601f106138b257803560ff19168380011785556138e0565b828001600101855582156138e0579182015b828111156138df5782358255916020019190600101906138c4565b5b5090506138ed91906139ad565b5090565b6040518060c001604052806060815260200160608152602001600081526020016000815260200160008152602001606081525090565b82805461393390614b61565b90600052602060002090601f016020900481019282613955576000855561399c565b82601f1061396e57805160ff191683800117855561399c565b8280016001018555821561399c579182015b8281111561399b578251825591602001919060010190613980565b5b5090506139a991906139ad565b5090565b5b808211156139c65760008160009055506001016139ae565b5090565b60006139dd6139d8846145c0565b61459b565b90508083825260208201905082856020860282011115613a00576139ff614d4b565b5b60005b85811015613a305781613a168882613b3c565b845260208401935060208301925050600181019050613a03565b5050509392505050565b600081359050613a4981614f35565b92915050565b600081519050613a5e81614f35565b92915050565b600082601f830112613a7957613a78614d46565b5b8151613a898482602086016139ca565b91505092915050565b600081519050613aa181614f4c565b92915050565b600081359050613ab681614f63565b92915050565b600081519050613acb81614f63565b92915050565b60008083601f840112613ae757613ae6614d46565b5b8235905067ffffffffffffffff811115613b0457613b03614d41565b5b602083019150836001820283011115613b2057613b1f614d4b565b5b9250929050565b600081359050613b3681614f7a565b92915050565b600081519050613b4b81614f7a565b92915050565b600081519050613b6081614fa8565b92915050565b600081519050613b7581614f91565b92915050565b600060208284031215613b9157613b90614d55565b5b6000613b9f84828501613a3a565b91505092915050565b600060208284031215613bbe57613bbd614d55565b5b6000613bcc84828501613a4f565b91505092915050565b600060208284031215613beb57613bea614d55565b5b600082015167ffffffffffffffff811115613c0957613c08614d50565b5b613c1584828501613a64565b91505092915050565b600060208284031215613c3457613c33614d55565b5b6000613c4284828501613a92565b91505092915050565b600080600080600080600080600060e08a8c031215613c6d57613c6c614d55565b5b60008a013567ffffffffffffffff811115613c8b57613c8a614d50565b5b613c978c828d01613ad1565b995099505060208a013567ffffffffffffffff811115613cba57613cb9614d50565b5b613cc68c828d01613ad1565b97509750506040613cd98c828d01613a3a565b9550506060613cea8c828d01613a3a565b9450506080613cfb8c828d01613aa7565b93505060a0613d0c8c828d01613b27565b92505060c0613d1d8c828d01613b27565b9150509295985092959850929598565b60008060008060008060008060c0898b031215613d4d57613d4c614d55565b5b600089013567ffffffffffffffff811115613d6b57613d6a614d50565b5b613d778b828c01613ad1565b9850985050602089013567ffffffffffffffff811115613d9a57613d99614d50565b5b613da68b828c01613ad1565b96509650506040613db98b828c01613a3a565b9450506060613dca8b828c01613aa7565b9350506080613ddb8b828c01613b27565b92505060a0613dec8b828c01613b27565b9150509295985092959890939650565b600060208284031215613e1257613e11614d55565b5b6000613e2084828501613b27565b91505092915050565b600060208284031215613e3f57613e3e614d55565b5b6000613e4d84828501613b3c565b91505092915050565b60008060408385031215613e6d57613e6c614d55565b5b6000613e7b85828601613b27565b9250506020613e8c85828601613a3a565b9150509250929050565b600080600080600060a08688031215613eb257613eb1614d55565b5b6000613ec088828901613b51565b9550506020613ed188828901613abc565b9450506040613ee288828901613b3c565b9350506060613ef388828901613b3c565b9250506080613f0488828901613b51565b9150509295509295909350565b600060208284031215613f2757613f26614d55565b5b6000613f3584828501613b66565b91505092915050565b6000613f4a8383613f56565b60208301905092915050565b613f5f81614a71565b82525050565b613f6e81614a71565b82525050565b6000613f7f826145fc565b613f89818561461f565b9350613f94836145ec565b8060005b83811015613fc5578151613fac8882613f3e565b9750613fb783614612565b925050600181019050613f98565b5085935050505092915050565b613fdb81614a83565b82525050565b613fea81614ae6565b82525050565b613ff981614af8565b82525050565b61400881614a8f565b82525050565b600061401982614607565b614023818561463b565b9350614033818560208601614b2e565b61403c81614d5a565b840191505092915050565b600061405282614607565b61405c818561464c565b935061406c818560208601614b2e565b61407581614d5a565b840191505092915050565b600061408d60268361464c565b915061409882614d78565b604082019050919050565b60006140b0601c8361464c565b91506140bb82614dc7565b602082019050919050565b60006140d360208361464c565b91506140de82614df0565b602082019050919050565b60006140f6600083614630565b915061410182614e19565b600082019050919050565b6000614119602f8361464c565b915061412482614e1c565b604082019050919050565b600061413c60118361464c565b915061414782614e6b565b602082019050919050565b600061415f601c8361464c565b915061416a82614e94565b602082019050919050565b600061418260318361464c565b915061418d82614ebd565b604082019050919050565b60006141a5600c8361464c565b91506141b082614f0c565b602082019050919050565b600060c08301600083015184820360008601526141d8828261400e565b915050602083015184820360208601526141f2828261400e565b91505060408301516142076040860182614252565b50606083015161421a6060860182614252565b50608083015161422d6080860182614252565b5060a083015184820360a0860152614245828261400e565b9150508091505092915050565b61425b81614ab9565b82525050565b61426a81614ab9565b82525050565b61427981614ac3565b82525050565b600061428a826140e9565b9150819050919050565b60006020820190506142a96000830184613f65565b92915050565b60006060820190506142c46000830186613f65565b6142d16020830185613f65565b6142de6040830184614261565b949350505050565b60006040820190506142fb6000830185613f65565b6143086020830184614261565b9392505050565b60006020820190506143246000830184613fd2565b92915050565b600060208201905061433f6000830184613fe1565b92915050565b600060208201905061435a6000830184613ff0565b92915050565b60006020820190506143756000830184613fff565b92915050565b600060208201905081810360008301526143958184614047565b905092915050565b600060c08201905081810360008301526143b78189614047565b905081810360208301526143cb8188614047565b90506143da6040830187614261565b6143e76060830186614261565b6143f46080830185614261565b81810360a08301526144068184614047565b9050979650505050505050565b6000602082019050818103600083015261442c81614080565b9050919050565b6000602082019050818103600083015261444c816140a3565b9050919050565b6000602082019050818103600083015261446c816140c6565b9050919050565b6000602082019050818103600083015261448c8161410c565b9050919050565b600060208201905081810360008301526144ac8161412f565b9050919050565b600060208201905081810360008301526144cc81614152565b9050919050565b600060208201905081810360008301526144ec81614175565b9050919050565b6000602082019050818103600083015261450c81614198565b9050919050565b6000602082019050818103600083015261452d81846141bb565b905092915050565b600060208201905061454a6000830184614261565b92915050565b60006040820190506145656000830185614261565b81810360208301526145778184613f74565b90509392505050565b60006020820190506145956000830184614270565b92915050565b60006145a56145b6565b90506145b18282614b93565b919050565b6000604051905090565b600067ffffffffffffffff8211156145db576145da614d12565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061466882614a8f565b915061467383614a8f565b92508261468357614682614c85565b5b600160000383147f8000000000000000000000000000000000000000000000000000000000000000831416156146bc576146bb614c56565b5b828205905092915050565b6000808291508390505b6001851115614711578086048111156146ed576146ec614c56565b5b60018516156146fc5780820291505b808102905061470a85614d6b565b94506146d1565b94509492505050565b600061472582614ab9565b915061473083614ac3565b925061475d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614765565b905092915050565b6000826147755760019050614831565b816147835760009050614831565b816001811461479957600281146147a3576147d2565b6001915050614831565b60ff8411156147b5576147b4614c56565b5b8360020a9150848211156147cc576147cb614c56565b5b50614831565b5060208310610133831016604e8410600b84101617156148075782820a90508381111561480257614801614c56565b5b614831565b61481484848460016146c7565b9250905081840481111561482b5761482a614c56565b5b81810290505b9392505050565b600061484382614a8f565b915061484e83614a8f565b9250827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211600084136000841316161561488d5761488c614c56565b5b817f800000000000000000000000000000000000000000000000000000000000000005831260008412600084131616156148ca576148c9614c56565b5b827f8000000000000000000000000000000000000000000000000000000000000000058212600084136000841216161561490757614906614c56565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff058212600084126000841216161561494457614943614c56565b5b828202905092915050565b600061495a82614ab9565b915061496583614ab9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561499e5761499d614c56565b5b828202905092915050565b60006149b482614a8f565b91506149bf83614a8f565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156149fa576149f9614c56565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018213600084121615614a3257614a31614c56565b5b828203905092915050565b6000614a4882614ab9565b9150614a5383614ab9565b925082821015614a6657614a65614c56565b5b828203905092915050565b6000614a7c82614a99565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600069ffffffffffffffffffff82169050919050565b6000614af182614b0a565b9050919050565b6000614b0382614b0a565b9050919050565b6000614b1582614b1c565b9050919050565b6000614b2782614a99565b9050919050565b60005b83811015614b4c578082015181840152602081019050614b31565b83811115614b5b576000848401525b50505050565b60006002820490506001821680614b7957607f821691505b60208210811415614b8d57614b8c614cb4565b5b50919050565b614b9c82614d5a565b810181811067ffffffffffffffff82111715614bbb57614bba614d12565b5b80604052505050565b6000614bcf82614ab9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c0257614c01614c56565b5b600182019050919050565b6000614c1882614a8f565b91507f8000000000000000000000000000000000000000000000000000000000000000821415614c4b57614c4a614c56565b5b816000039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f50726f7669646520612076616c6964207465616d206164647265737300000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f426574732061726520636c6f7365643a20796f752063616e6e6f74205374616b60008201527f6520617420746869732074696d65210000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e73000000000000000000000000000000600082015250565b7f70726f7669646520612076616c6964207465616d206164647265737300000000600082015250565b7f426574732061726520636c6f7365643a20796f752063616e6e6f7420556e737460008201527f616b6520617420746869732074696d6521000000000000000000000000000000602082015250565b7f696e76616c696420706169720000000000000000000000000000000000000000600082015250565b614f3e81614a71565b8114614f4957600080fd5b50565b614f5581614a83565b8114614f6057600080fd5b50565b614f6c81614a8f565b8114614f7757600080fd5b50565b614f8381614ab9565b8114614f8e57600080fd5b50565b614f9a81614ac3565b8114614fa557600080fd5b50565b614fb181614ad0565b8114614fbc57600080fd5b5056fea264697066735822122066129383e154b10a6220260da2ff129386ee1c90f2c1bfcf60474c5c4126351c64736f6c634300080700330000000000000000000000006709f8f39465f62116d05ee755c474f6b8f93d96000000000000000000000000b6be7bd92692a9f2a1195d979a45b7e89e78ee0f0000000000000000000000005301d0174d7db0c79e0261fcdb42e8b9c202911300000000000000000000000002f95dba153d7e3aa89811eeb298ed3727bd194b

Deployed Bytecode

0x60806040526004361061023f5760003560e01c80638310d61c1161012e578063b51449bb116100ab578063e68b52e71161006f578063e68b52e7146107db578063ecd0c0c314610806578063ed03da5314610831578063f2fde38b1461085a578063fa1acb5c1461088357610246565b8063b51449bb1461071a578063c438d31614610745578063d28d885214610770578063e06865631461079b578063e0c6190d146107c457610246565b8063906b58e6116100f2578063906b58e61461065457806398d5fdca1461067f5780639a8a64e214610696578063a2f77bcc146106b2578063b09f1266146106ef57610246565b80638310d61c1461057f5780638381e182146105aa5780638646c877146105d357806388af30c3146105fe5780638da5cb5b1461062957610246565b80635a5953f8116101bc5780637acb7757116101805780637acb7757146104c05780637b6d79f1146104e95780637cc8f88614610500578063801161b01461052b57806380d4fe201461055457610246565b80635a5953f8146103fd57806361bc221a146104285780636d1ae1e014610453578063715018a61461047e57806371aa16a41461049557610246565b806340d489581161020357806340d489581461032857806343deb8011461035357806349ae86451461037e5780635557e977146103a757806359ecb89d146103d257610246565b80630f836ce11461024b5780631014edf514610276578063117a5b901461029f578063211d7c49146102e15780633bdd280e146102fd57610246565b3661024657005b600080fd5b34801561025757600080fd5b506102606108ae565b60405161026d9190614294565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190613e56565b6108d4565b005b3480156102ab57600080fd5b506102c660048036038101906102c19190613dfc565b61093c565b6040516102d89695949392919061439d565b60405180910390f35b6102fb60048036038101906102f69190613c4b565b610b20565b005b34801561030957600080fd5b50610312611175565b60405161031f9190614360565b60405180910390f35b34801561033457600080fd5b5061033d61117b565b60405161034a9190614535565b60405180910390f35b34801561035f57600080fd5b50610368611181565b6040516103759190614535565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190613b7b565b611187565b005b3480156103b357600080fd5b506103bc611236565b6040516103c9919061432a565b60405180910390f35b3480156103de57600080fd5b506103e761125c565b6040516103f49190614294565b60405180910390f35b34801561040957600080fd5b50610412611282565b60405161041f9190614535565b60405180910390f35b34801561043457600080fd5b5061043d611288565b60405161044a9190614535565b60405180910390f35b34801561045f57600080fd5b5061046861128e565b6040516104759190614294565b60405180910390f35b34801561048a57600080fd5b506104936112b4565b005b3480156104a157600080fd5b506104aa6112c8565b6040516104b79190614360565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190613e56565b6112ce565b005b3480156104f557600080fd5b506104fe6117c3565b005b34801561050c57600080fd5b506105156117f5565b6040516105229190614294565b60405180910390f35b34801561053757600080fd5b50610552600480360381019061054d9190613b7b565b61181b565b005b34801561056057600080fd5b506105696118ca565b604051610576919061430f565b60405180910390f35b34801561058b57600080fd5b506105946118dd565b6040516105a19190614513565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc9190613e56565b611b08565b005b3480156105df57600080fd5b506105e86124b8565b6040516105f59190614360565b60405180910390f35b34801561060a57600080fd5b506106136124be565b6040516106209190614294565b60405180910390f35b34801561063557600080fd5b5061063e6124e4565b60405161064b9190614294565b60405180910390f35b34801561066057600080fd5b5061066961250d565b604051610676919061430f565b60405180910390f35b34801561068b57600080fd5b50610694612527565b005b6106b060048036038101906106ab9190613d2d565b612aa6565b005b3480156106be57600080fd5b506106d960048036038101906106d49190613dfc565b612c78565b6040516106e69190614513565b60405180910390f35b3480156106fb57600080fd5b50610704612eb2565b604051610711919061437b565b60405180910390f35b34801561072657600080fd5b5061072f612f40565b60405161073c9190614345565b60405180910390f35b34801561075157600080fd5b5061075a612f66565b6040516107679190614360565b60405180910390f35b34801561077c57600080fd5b50610785612f6c565b604051610792919061437b565b60405180910390f35b3480156107a757600080fd5b506107c260048036038101906107bd9190613b7b565b612ffa565b005b3480156107d057600080fd5b506107d96130a9565b005b3480156107e757600080fd5b506107f0613125565b6040516107fd9190614580565b60405180910390f35b34801561081257600080fd5b5061081b613136565b604051610828919061432a565b60405180910390f35b34801561083d57600080fd5b5061085860048036038101906108539190613b7b565b61315c565b005b34801561086657600080fd5b50610881600480360381019061087c9190613b7b565b61320b565b005b34801561088f57600080fd5b5061089861328f565b6040516108a59190614535565b60405180910390f35b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108dc613295565b60004790508173ffffffffffffffffffffffffffffffffffffffff166108fc60008511610909578261090b565b845b9081150290604051600060405180830381858888f19350505050158015610936573d6000803e3d6000fd5b50505050565b6018818154811061094c57600080fd5b906000526020600020906006020160009150905080600001805461096f90614b61565b80601f016020809104026020016040519081016040528092919081815260200182805461099b90614b61565b80156109e85780601f106109bd576101008083540402835291602001916109e8565b820191906000526020600020905b8154815290600101906020018083116109cb57829003601f168201915b5050505050908060010180546109fd90614b61565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2990614b61565b8015610a765780601f10610a4b57610100808354040283529160200191610a76565b820191906000526020600020905b815481529060010190602001808311610a5957829003601f168201915b505050505090806002015490806003015490806004015490806005018054610a9d90614b61565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac990614b61565b8015610b165780601f10610aeb57610100808354040283529160200191610b16565b820191906000526020600020905b815481529060010190602001808311610af957829003601f168201915b5050505050905086565b610b28613295565b888860109190610b3992919061386b565b50868660119190610b4b92919061386b565b5084601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508473ffffffffffffffffffffffffffffffffffffffff16601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610c4d57600080fd5b505afa158015610c61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c859190613ba8565b73ffffffffffffffffffffffffffffffffffffffff161415610da1576000601760166101000a81548160ff021916908315150217905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610d2457600080fd5b505afa158015610d38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5c9190613ba8565b601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fb7565b8473ffffffffffffffffffffffffffffffffffffffff16601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610e2057600080fd5b505afa158015610e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e589190613ba8565b73ffffffffffffffffffffffffffffffffffffffff161415610f74576001601760166101000a81548160ff021916908315150217905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610ef757600080fd5b505afa158015610f0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f2f9190613ba8565b601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610fb6565b6000610fb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fac906144f3565b60405180910390fd5b5b5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561101f57600080fd5b505afa158015611033573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110579190613f11565b601760146101000a81548160ff021916908360ff160217905550601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156110d957600080fd5b505afa1580156110ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111119190613f11565b601760156101000a81548160ff021916908360ff1602179055506001601360006101000a81548160ff021916908315150217905550826012819055508160098190555080600a8190555034600f8190555061116a612527565b505050505050505050565b600d5481565b600a5481565b600e5481565b61118f613295565b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b60195481565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112bc613295565b6112c66000613313565b565b600c5481565b6112d66130a9565b6112de61250d565b1561131e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131590614473565b60405180910390fd5b81600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161137a9190614294565b60206040518083038186803b15801561139257600080fd5b505afa1580156113a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ca9190613e29565b101561140b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140290614493565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b815260040161146a939291906142af565b602060405180830381600087803b15801561148457600080fd5b505af1158015611498573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bc9190613c1e565b50600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115a757600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663adc9772e33846040518363ffffffff1660e01b81526004016115709291906142e6565b600060405180830381600087803b15801561158a57600080fd5b505af115801561159e573d6000803e3d6000fd5b505050506117bf565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561169157600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663adc9772e33846040518363ffffffff1660e01b815260040161165a9291906142e6565b600060405180830381600087803b15801561167457600080fd5b505af1158015611688573d6000803e3d6000fd5b505050506117be565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561177b57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663adc9772e33846040518363ffffffff1660e01b81526004016117449291906142e6565b600060405180830381600087803b15801561175e57600080fd5b505af1158015611772573d6000803e3d6000fd5b505050506117bd565b60006117bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b390614433565b60405180910390fd5b5b5b5b5050565b6117cb613295565b6000600b819055506000600c8190555060006009819055506000600a819055506000600f81905550565b601360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611823613295565b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601360009054906101000a900460ff1681565b6118e56138f1565b6000601954116118f457600080fd5b601860016019546119059190614a3d565b8154811061191657611915614ce3565b5b90600052602060002090600602016040518060c001604052908160008201805461193f90614b61565b80601f016020809104026020016040519081016040528092919081815260200182805461196b90614b61565b80156119b85780601f1061198d576101008083540402835291602001916119b8565b820191906000526020600020905b81548152906001019060200180831161199b57829003601f168201915b505050505081526020016001820180546119d190614b61565b80601f01602080910402602001604051908101604052809291908181526020018280546119fd90614b61565b8015611a4a5780601f10611a1f57610100808354040283529160200191611a4a565b820191906000526020600020905b815481529060010190602001808311611a2d57829003601f168201915b50505050508152602001600282015481526020016003820154815260200160048201548152602001600582018054611a8190614b61565b80601f0160208091040260200160405190810160405280929190818152602001828054611aad90614b61565b8015611afa5780601f10611acf57610100808354040283529160200191611afa565b820191906000526020600020905b815481529060010190602001808311611add57829003601f168201915b505050505081525050905090565b611b106130a9565b611b1861250d565b15611b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4f906144d3565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611e6057600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611c099190614294565b60206040518083038186803b158015611c2157600080fd5b505afa158015611c35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c599190613e29565b821115611c6557600080fd5b81600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611cc19190614294565b60206040518083038186803b158015611cd957600080fd5b505afa158015611ced573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d119190613e29565b1015611d1c57600080fd5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2a672e033846040518363ffffffff1660e01b8152600401611d799291906142e6565b600060405180830381600087803b158015611d9357600080fd5b505af1158015611da7573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401611e089291906142e6565b602060405180830381600087803b158015611e2257600080fd5b505af1158015611e36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5a9190613c1e565b506124b4565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561216857600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401611f119190614294565b60206040518083038186803b158015611f2957600080fd5b505afa158015611f3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f619190613e29565b821115611f6d57600080fd5b81600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611fc99190614294565b60206040518083038186803b158015611fe157600080fd5b505afa158015611ff5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120199190613e29565b101561202457600080fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2a672e033846040518363ffffffff1660e01b81526004016120819291906142e6565b600060405180830381600087803b15801561209b57600080fd5b505af11580156120af573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016121109291906142e6565b602060405180830381600087803b15801561212a57600080fd5b505af115801561213e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121629190613c1e565b506124b3565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561247057600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016122199190614294565b60206040518083038186803b15801561223157600080fd5b505afa158015612245573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122699190613e29565b82111561227557600080fd5b81600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016122d19190614294565b60206040518083038186803b1580156122e957600080fd5b505afa1580156122fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123219190613e29565b101561232c57600080fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c2a672e033846040518363ffffffff1660e01b81526004016123899291906142e6565b600060405180830381600087803b1580156123a357600080fd5b505af11580156123b7573d6000803e3d6000fd5b50505050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016124189291906142e6565b602060405180830381600087803b15801561243257600080fd5b505af1158015612446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246a9190613c1e565b506124b2565b60006124b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a8906144b3565b60405180910390fd5b5b5b5b5050565b60125481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600060095442101580156125225750600a5442105b905090565b6000601360009054906101000a900460ff166125f857601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156125a557600080fd5b505afa1580156125b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125dd9190613e96565b90919293509091509050508091505080600d81905550612aa3565b6000600267ffffffffffffffff81111561261557612614614d12565b5b6040519080825280602002602001820160405280156126435781602001602082028036833780820191505090505b509050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160008151811061267d5761267c614ce3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106126ee576126ed614ce3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060007f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16631f00ca74601760149054906101000a900460ff16600a612782919061471a565b600161278e919061494f565b846040518363ffffffff1660e01b81526004016127ac929190614550565b60006040518083038186803b1580156127c457600080fd5b505afa1580156127d8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906128019190613bd5565b60008151811061281457612813614ce3565b5b602002602001015190507f000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc273ffffffffffffffffffffffffffffffffffffffff16601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612a95576000600267ffffffffffffffff8111156128b1576128b0614d12565b5b6040519080825280602002602001820160405280156128df5781602001602082028036833780820191505090505b509050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061291957612918614ce3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000006b175474e89094c44da98b954eedeac495271d0f8160008151811061298857612987614ce3565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16631f00ca7483836040518363ffffffff1660e01b8152600401612a1d929190614550565b60006040518083038186803b158015612a3557600080fd5b505afa158015612a49573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612a729190613bd5565b600081518110612a8557612a84614ce3565b5b6020026020010151935050612a99565b8092505b82600d8190555050505b50565b612aae613295565b878760109190612abf92919061386b565b50858560119190612ad192919061386b565b506000601360006101000a81548160ff021916908315150217905550826012819055508160098190555080600a8190555083601360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015612c0e57600080fd5b505afa158015612c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c469190613f11565b6014806101000a81548160ff021916908360ff16021790555034600f81905550612c6e612527565b5050505050505050565b612c806138f1565b600060195411612c8f57600080fd5b816019541015612c9e57600080fd5b6018600183612cad9190614a3d565b81548110612cbe57612cbd614ce3565b5b90600052602060002090600602016040518060c0016040529081600082018054612ce790614b61565b80601f0160208091040260200160405190810160405280929190818152602001828054612d1390614b61565b8015612d605780601f10612d3557610100808354040283529160200191612d60565b820191906000526020600020905b815481529060010190602001808311612d4357829003601f168201915b50505050508152602001600182018054612d7990614b61565b80601f0160208091040260200160405190810160405280929190818152602001828054612da590614b61565b8015612df25780601f10612dc757610100808354040283529160200191612df2565b820191906000526020600020905b815481529060010190602001808311612dd557829003601f168201915b50505050508152602001600282015481526020016003820154815260200160048201548152602001600582018054612e2990614b61565b80601f0160208091040260200160405190810160405280929190818152602001828054612e5590614b61565b8015612ea25780601f10612e7757610100808354040283529160200191612ea2565b820191906000526020600020905b815481529060010190602001808311612e8557829003601f168201915b5050505050815250509050919050565b60118054612ebf90614b61565b80601f0160208091040260200160405190810160405280929190818152602001828054612eeb90614b61565b8015612f385780601f10612f0d57610100808354040283529160200191612f38565b820191906000526020600020905b815481529060010190602001808311612f1b57829003601f168201915b505050505081565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b60108054612f7990614b61565b80601f0160208091040260200160405190810160405280929190818152602001828054612fa590614b61565b8015612ff25780601f10612fc757610100808354040283529160200191612ff2565b820191906000526020600020905b815481529060010190602001808311612fd557829003601f168201915b505050505081565b613002613295565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600f5414156130b957613123565b6130c1612527565b60095442101580156130d45750600a5442105b156130f3576000600b5414156130ee57600d54600b819055505b61311b565b600a54421061311a576000600c54141561311957600d54600c819055506131186133d7565b5b5b5b42600e819055505b565b60148054906101000a900460ff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b613164613295565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613213613295565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613283576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161327a90614413565b60405180910390fd5b61328c81613313565b50565b60095481565b61329d6137ff565b73ffffffffffffffffffffffffffffffffffffffff166132bb6124e4565b73ffffffffffffffffffffffffffffffffffffffff1614613311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330890614453565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6133df6138f1565b601080546133ec90614b61565b80601f016020809104026020016040519081016040528092919081815260200182805461341890614b61565b80156134655780601f1061343a57610100808354040283529160200191613465565b820191906000526020600020905b81548152906001019060200180831161344857829003601f168201915b505050505081600001819052506011805461347f90614b61565b80601f01602080910402602001604051908101604052809291908181526020018280546134ab90614b61565b80156134f85780601f106134cd576101008083540402835291602001916134f8565b820191906000526020600020905b8154815290600101906020018083116134db57829003601f168201915b50505050508160200181905250600954816040018181525050600a54816060018181525050600f5481608001818152505060008061356a600b5461355c606461354e600b54600c5461380790919063ffffffff16565b61381d90919063ffffffff16565b61383390919063ffffffff16565b905060125461357882613849565b12156135e657600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506040518060400160405280600481526020017f43726162000000000000000000000000000000000000000000000000000000008152508360a001819052506136bc565b600081131561365757600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506040518060400160405280600481526020017f42756c6c000000000000000000000000000000000000000000000000000000008152508360a001819052506136bb565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691506040518060400160405280600481526020017f42656172000000000000000000000000000000000000000000000000000000008152508360a001819052505b5b60188390806001815401808255809150506001900390600052602060002090600602016000909190919091506000820151816000019080519060200190613704929190613927565b506020820151816001019080519060200190613721929190613927565b5060408201518160020155606082015181600301556080820151816004015560a082015181600501908051906020019061375c929190613927565b5050506019600081548092919061377290614bc4565b91905055508173ffffffffffffffffffffffffffffffffffffffff16600f5460405161379d9061427f565b60006040518083038185875af1925050503d80600081146137da576040519150601f19603f3d011682016040523d82523d6000602084013e6137df565b606091505b5050506000600b819055506000600c819055506000600f81905550505050565b600033905090565b6000818361381591906149a9565b905092915050565b6000818361382b9190614838565b905092915050565b60008183613841919061465d565b905092915050565b600080821215613862578161385d90614c0d565b613864565b815b9050919050565b82805461387790614b61565b90600052602060002090601f01602090048101928261389957600085556138e0565b82601f106138b257803560ff19168380011785556138e0565b828001600101855582156138e0579182015b828111156138df5782358255916020019190600101906138c4565b5b5090506138ed91906139ad565b5090565b6040518060c001604052806060815260200160608152602001600081526020016000815260200160008152602001606081525090565b82805461393390614b61565b90600052602060002090601f016020900481019282613955576000855561399c565b82601f1061396e57805160ff191683800117855561399c565b8280016001018555821561399c579182015b8281111561399b578251825591602001919060010190613980565b5b5090506139a991906139ad565b5090565b5b808211156139c65760008160009055506001016139ae565b5090565b60006139dd6139d8846145c0565b61459b565b90508083825260208201905082856020860282011115613a00576139ff614d4b565b5b60005b85811015613a305781613a168882613b3c565b845260208401935060208301925050600181019050613a03565b5050509392505050565b600081359050613a4981614f35565b92915050565b600081519050613a5e81614f35565b92915050565b600082601f830112613a7957613a78614d46565b5b8151613a898482602086016139ca565b91505092915050565b600081519050613aa181614f4c565b92915050565b600081359050613ab681614f63565b92915050565b600081519050613acb81614f63565b92915050565b60008083601f840112613ae757613ae6614d46565b5b8235905067ffffffffffffffff811115613b0457613b03614d41565b5b602083019150836001820283011115613b2057613b1f614d4b565b5b9250929050565b600081359050613b3681614f7a565b92915050565b600081519050613b4b81614f7a565b92915050565b600081519050613b6081614fa8565b92915050565b600081519050613b7581614f91565b92915050565b600060208284031215613b9157613b90614d55565b5b6000613b9f84828501613a3a565b91505092915050565b600060208284031215613bbe57613bbd614d55565b5b6000613bcc84828501613a4f565b91505092915050565b600060208284031215613beb57613bea614d55565b5b600082015167ffffffffffffffff811115613c0957613c08614d50565b5b613c1584828501613a64565b91505092915050565b600060208284031215613c3457613c33614d55565b5b6000613c4284828501613a92565b91505092915050565b600080600080600080600080600060e08a8c031215613c6d57613c6c614d55565b5b60008a013567ffffffffffffffff811115613c8b57613c8a614d50565b5b613c978c828d01613ad1565b995099505060208a013567ffffffffffffffff811115613cba57613cb9614d50565b5b613cc68c828d01613ad1565b97509750506040613cd98c828d01613a3a565b9550506060613cea8c828d01613a3a565b9450506080613cfb8c828d01613aa7565b93505060a0613d0c8c828d01613b27565b92505060c0613d1d8c828d01613b27565b9150509295985092959850929598565b60008060008060008060008060c0898b031215613d4d57613d4c614d55565b5b600089013567ffffffffffffffff811115613d6b57613d6a614d50565b5b613d778b828c01613ad1565b9850985050602089013567ffffffffffffffff811115613d9a57613d99614d50565b5b613da68b828c01613ad1565b96509650506040613db98b828c01613a3a565b9450506060613dca8b828c01613aa7565b9350506080613ddb8b828c01613b27565b92505060a0613dec8b828c01613b27565b9150509295985092959890939650565b600060208284031215613e1257613e11614d55565b5b6000613e2084828501613b27565b91505092915050565b600060208284031215613e3f57613e3e614d55565b5b6000613e4d84828501613b3c565b91505092915050565b60008060408385031215613e6d57613e6c614d55565b5b6000613e7b85828601613b27565b9250506020613e8c85828601613a3a565b9150509250929050565b600080600080600060a08688031215613eb257613eb1614d55565b5b6000613ec088828901613b51565b9550506020613ed188828901613abc565b9450506040613ee288828901613b3c565b9350506060613ef388828901613b3c565b9250506080613f0488828901613b51565b9150509295509295909350565b600060208284031215613f2757613f26614d55565b5b6000613f3584828501613b66565b91505092915050565b6000613f4a8383613f56565b60208301905092915050565b613f5f81614a71565b82525050565b613f6e81614a71565b82525050565b6000613f7f826145fc565b613f89818561461f565b9350613f94836145ec565b8060005b83811015613fc5578151613fac8882613f3e565b9750613fb783614612565b925050600181019050613f98565b5085935050505092915050565b613fdb81614a83565b82525050565b613fea81614ae6565b82525050565b613ff981614af8565b82525050565b61400881614a8f565b82525050565b600061401982614607565b614023818561463b565b9350614033818560208601614b2e565b61403c81614d5a565b840191505092915050565b600061405282614607565b61405c818561464c565b935061406c818560208601614b2e565b61407581614d5a565b840191505092915050565b600061408d60268361464c565b915061409882614d78565b604082019050919050565b60006140b0601c8361464c565b91506140bb82614dc7565b602082019050919050565b60006140d360208361464c565b91506140de82614df0565b602082019050919050565b60006140f6600083614630565b915061410182614e19565b600082019050919050565b6000614119602f8361464c565b915061412482614e1c565b604082019050919050565b600061413c60118361464c565b915061414782614e6b565b602082019050919050565b600061415f601c8361464c565b915061416a82614e94565b602082019050919050565b600061418260318361464c565b915061418d82614ebd565b604082019050919050565b60006141a5600c8361464c565b91506141b082614f0c565b602082019050919050565b600060c08301600083015184820360008601526141d8828261400e565b915050602083015184820360208601526141f2828261400e565b91505060408301516142076040860182614252565b50606083015161421a6060860182614252565b50608083015161422d6080860182614252565b5060a083015184820360a0860152614245828261400e565b9150508091505092915050565b61425b81614ab9565b82525050565b61426a81614ab9565b82525050565b61427981614ac3565b82525050565b600061428a826140e9565b9150819050919050565b60006020820190506142a96000830184613f65565b92915050565b60006060820190506142c46000830186613f65565b6142d16020830185613f65565b6142de6040830184614261565b949350505050565b60006040820190506142fb6000830185613f65565b6143086020830184614261565b9392505050565b60006020820190506143246000830184613fd2565b92915050565b600060208201905061433f6000830184613fe1565b92915050565b600060208201905061435a6000830184613ff0565b92915050565b60006020820190506143756000830184613fff565b92915050565b600060208201905081810360008301526143958184614047565b905092915050565b600060c08201905081810360008301526143b78189614047565b905081810360208301526143cb8188614047565b90506143da6040830187614261565b6143e76060830186614261565b6143f46080830185614261565b81810360a08301526144068184614047565b9050979650505050505050565b6000602082019050818103600083015261442c81614080565b9050919050565b6000602082019050818103600083015261444c816140a3565b9050919050565b6000602082019050818103600083015261446c816140c6565b9050919050565b6000602082019050818103600083015261448c8161410c565b9050919050565b600060208201905081810360008301526144ac8161412f565b9050919050565b600060208201905081810360008301526144cc81614152565b9050919050565b600060208201905081810360008301526144ec81614175565b9050919050565b6000602082019050818103600083015261450c81614198565b9050919050565b6000602082019050818103600083015261452d81846141bb565b905092915050565b600060208201905061454a6000830184614261565b92915050565b60006040820190506145656000830185614261565b81810360208301526145778184613f74565b90509392505050565b60006020820190506145956000830184614270565b92915050565b60006145a56145b6565b90506145b18282614b93565b919050565b6000604051905090565b600067ffffffffffffffff8211156145db576145da614d12565b5b602082029050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061466882614a8f565b915061467383614a8f565b92508261468357614682614c85565b5b600160000383147f8000000000000000000000000000000000000000000000000000000000000000831416156146bc576146bb614c56565b5b828205905092915050565b6000808291508390505b6001851115614711578086048111156146ed576146ec614c56565b5b60018516156146fc5780820291505b808102905061470a85614d6b565b94506146d1565b94509492505050565b600061472582614ab9565b915061473083614ac3565b925061475d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614765565b905092915050565b6000826147755760019050614831565b816147835760009050614831565b816001811461479957600281146147a3576147d2565b6001915050614831565b60ff8411156147b5576147b4614c56565b5b8360020a9150848211156147cc576147cb614c56565b5b50614831565b5060208310610133831016604e8410600b84101617156148075782820a90508381111561480257614801614c56565b5b614831565b61481484848460016146c7565b9250905081840481111561482b5761482a614c56565b5b81810290505b9392505050565b600061484382614a8f565b915061484e83614a8f565b9250827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211600084136000841316161561488d5761488c614c56565b5b817f800000000000000000000000000000000000000000000000000000000000000005831260008412600084131616156148ca576148c9614c56565b5b827f8000000000000000000000000000000000000000000000000000000000000000058212600084136000841216161561490757614906614c56565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff058212600084126000841216161561494457614943614c56565b5b828202905092915050565b600061495a82614ab9565b915061496583614ab9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561499e5761499d614c56565b5b828202905092915050565b60006149b482614a8f565b91506149bf83614a8f565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156149fa576149f9614c56565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018213600084121615614a3257614a31614c56565b5b828203905092915050565b6000614a4882614ab9565b9150614a5383614ab9565b925082821015614a6657614a65614c56565b5b828203905092915050565b6000614a7c82614a99565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600069ffffffffffffffffffff82169050919050565b6000614af182614b0a565b9050919050565b6000614b0382614b0a565b9050919050565b6000614b1582614b1c565b9050919050565b6000614b2782614a99565b9050919050565b60005b83811015614b4c578082015181840152602081019050614b31565b83811115614b5b576000848401525b50505050565b60006002820490506001821680614b7957607f821691505b60208210811415614b8d57614b8c614cb4565b5b50919050565b614b9c82614d5a565b810181811067ffffffffffffffff82111715614bbb57614bba614d12565b5b80604052505050565b6000614bcf82614ab9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c0257614c01614c56565b5b600182019050919050565b6000614c1882614a8f565b91507f8000000000000000000000000000000000000000000000000000000000000000821415614c4b57614c4a614c56565b5b816000039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f50726f7669646520612076616c6964207465616d206164647265737300000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f426574732061726520636c6f7365643a20796f752063616e6e6f74205374616b60008201527f6520617420746869732074696d65210000000000000000000000000000000000602082015250565b7f4e6f7420656e6f75676820746f6b656e73000000000000000000000000000000600082015250565b7f70726f7669646520612076616c6964207465616d206164647265737300000000600082015250565b7f426574732061726520636c6f7365643a20796f752063616e6e6f7420556e737460008201527f616b6520617420746869732074696d6521000000000000000000000000000000602082015250565b7f696e76616c696420706169720000000000000000000000000000000000000000600082015250565b614f3e81614a71565b8114614f4957600080fd5b50565b614f5581614a83565b8114614f6057600080fd5b50565b614f6c81614a8f565b8114614f7757600080fd5b50565b614f8381614ab9565b8114614f8e57600080fd5b50565b614f9a81614ac3565b8114614fa557600080fd5b50565b614fb181614ad0565b8114614fbc57600080fd5b5056fea264697066735822122066129383e154b10a6220260da2ff129386ee1c90f2c1bfcf60474c5c4126351c64736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000006709f8f39465f62116d05ee755c474f6b8f93d96000000000000000000000000b6be7bd92692a9f2a1195d979a45b7e89e78ee0f0000000000000000000000005301d0174d7db0c79e0261fcdb42e8b9c202911300000000000000000000000002f95dba153d7e3aa89811eeb298ed3727bd194b

-----Decoded View---------------
Arg [0] : bullAddress (address): 0x6709F8F39465f62116d05EE755C474f6b8F93D96
Arg [1] : bearAddress (address): 0xB6bE7bd92692A9F2A1195d979a45B7e89E78Ee0f
Arg [2] : crabAddress (address): 0x5301d0174d7db0C79E0261fCdB42E8B9c2029113
Arg [3] : mainAddress (address): 0x02F95dBA153d7e3aa89811eEb298eD3727Bd194B

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000006709f8f39465f62116d05ee755c474f6b8f93d96
Arg [1] : 000000000000000000000000b6be7bd92692a9f2a1195d979a45b7e89e78ee0f
Arg [2] : 0000000000000000000000005301d0174d7db0c79e0261fcdb42e8b9c2029113
Arg [3] : 00000000000000000000000002f95dba153d7e3aa89811eeb298ed3727bd194b


Deployed Bytecode Sourcemap

655:10431:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1227:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10296:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2239:19;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;3725:1029;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1555:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1460:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1589:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9839:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2086:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1193:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1626:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2265:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1159:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1884:103:4;;;;;;;;;;;;;:::i;:::-;;1523:25:7;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7037:750;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9511:168;;;;;;;;;;;;;:::i;:::-;;1915:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10144:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1863:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10795:133;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7795:1164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1785:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1263:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1236:87:4;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10936:141:7;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4778:1289;;;;;;;;;;;;;:::i;:::-;;3006:679;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10624:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1682:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2118:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1492:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1656:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9687:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8967:532;;;;;;;;;;;;;:::i;:::-;;2005:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2059:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9991:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2142:201:4;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1428:25:7;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1227:27;;;;;;;;;;;;;:::o;10296:217::-;1122:13:4;:11;:13::i;:::-;10378:26:7::1;10407:21;10378:50;;10447:6;10439:24;;:66;10473:1;10464:6;:10;:40;;10486:18;10464:40;;;10477:6;10464:40;10439:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;10367:146;10296:217:::0;;:::o;2239:19::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3725:1029::-;1122:13:4;:11;:13::i;:::-;4001:4:7::1;;3993:5;:12;;;;;;;:::i;:::-;;4026:6;;4016:7;:16;;;;;;;:::i;:::-;;4061:5;4045:6;;:22;;;;;;;;;;;;;;;;;;4101:4;4078:5;;:28;;;;;;;;;;;;;;;;;;4144:5;4126:23;;:5;;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:23;;;4122:326;;;4183:5;4166:14;;:22;;;;;;;;;;;;;;;;;;4224:5;;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4203:11;;:36;;;;;;;;;;;;;;;;;;4122:326;;;4296:5;4270:32;;:5;;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;;;4266:182;;;4336:4;4319:14;;:21;;;;;;;;;;;;;;;;;;4376:5;;;;;;;;;;;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4355:11;;:36;;;;;;;;;;;;;;;;;;4266:182;;;4426:5;4418:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;4266:182;4122:326;4478:6;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4461:14;;:34;;;;;;;;;;;;;;;;;;4528:11;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4506:19;;:44;;;;;;;;;;;;;;;;;;4574:4;4563:8;;:15;;;;;;;;;;;;;;;;;;4616:14;4598:15;:32;;;;4654:9;4641:10;:22;;;;4685:7;4674:8;:18;;;;4714:9;4705:6;:18;;;;4736:10;:8;:10::i;:::-;3725:1029:::0;;;;;;;;;:::o;1555:27::-;;;;:::o;1460:23::-;;;;:::o;1589:30::-;;;;:::o;9839:144::-;1122:13:4;:11;:13::i;:::-;9921:11:7::1;9906:12;;:26;;;;;;;;;;;;;;;;;;9962:12;;;;;;;;;;;9943:10;;:32;;;;;;;;;;;;;;;;;;9839:144:::0;:::o;2086:25::-;;;;;;;;;;;;;:::o;1193:27::-;;;;;;;;;;;;;:::o;1626:21::-;;;;:::o;2265:23::-;;;;:::o;1159:27::-;;;;;;;;;;;;;:::o;1884:103:4:-;1122:13;:11;:13::i;:::-;1949:30:::1;1976:1;1949:18;:30::i;:::-;1884:103::o:0;1523:25:7:-;;;;:::o;7037:750::-;7102:11;:9;:11::i;:::-;7134:17;:15;:17::i;:::-;7133:18;7124:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;7263:6;7227:10;;;;;;;;;;;:20;;;7248:10;7227:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;7219:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;7304:10;;;;;;;;;;;:23;;;7328:10;7348:4;7355:6;7304:58;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7399:12;;;;;;;;;;;7391:20;;:4;:20;;;7387:391;;;7428:10;;;;;;;;;;;:16;;;7445:10;7457:6;7428:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7387:391;;;7505:12;;;;;;;;;;;7497:20;;:4;:20;;;7493:285;;;7534:10;;;;;;;;;;;:16;;;7551:10;7563:6;7534:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7493:285;;;7611:12;;;;;;;;;;;7603:20;;:4;:20;;;7599:179;;;7640:10;;;;;;;;;;;:16;;;7657:10;7669:6;7640:36;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7599:179;;;7728:5;7720:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;7599:179;7493:285;7387:391;7037:750;;:::o;9511:168::-;1122:13:4;:11;:13::i;:::-;9575:1:7::1;9562:10;:14;;;;9601:1;9587:11;:15;;;;9626:1;9613:10;:14;;;;9649:1;9638:8;:12;;;;9670:1;9661:6;:10;;;;9511:168::o:0;1915:37::-;;;;;;;;;;;;;:::o;10144:144::-;1122:13:4;:11;:13::i;:::-;10226:11:7::1;10212:12;;:25;;;;;;;;;;;;;;;;;;10267:12;;;;;;;;;;;10248:10;;:32;;;;;;;;;;;;;;;;;;10144:144:::0;:::o;1863:20::-;;;;;;;;;;;;;:::o;10795:133::-;10839:11;;:::i;:::-;10882:1;10872:7;;:11;10863:21;;;;;;10902:5;10918:1;10908:7;;:11;;;;:::i;:::-;10902:18;;;;;;;;:::i;:::-;;;;;;;;;;;;10895:25;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10795:133;:::o;7795:1164::-;7862:11;:9;:11::i;:::-;7894:17;:15;:17::i;:::-;7893:18;7884:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;7991:12;;;;;;;;;;;7983:20;;:4;:20;;;7979:973;;;8039:10;;;;;;;;;;;:20;;;8060:10;8039:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8029:6;:42;;8020:52;;;;;;8136:6;8097:10;;;;;;;;;;;:20;;;8126:4;8097:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;8088:55;;;;;;8158:10;;;;;;;;;;;:18;;;8177:10;8189:6;8158:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8212:10;;;;;;;;;;;:19;;;8232:10;8243:6;8212:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7979:973;;;8291:12;;;;;;;;;;;8283:20;;:4;:20;;;8279:673;;;8339:10;;;;;;;;;;;:20;;;8360:10;8339:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8329:6;:42;;8320:52;;;;;;8436:6;8397:10;;;;;;;;;;;:20;;;8426:4;8397:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;8388:55;;;;;;8458:10;;;;;;;;;;;:18;;;8477:10;8489:6;8458:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8512:10;;;;;;;;;;;:19;;;8532:10;8543:6;8512:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8279:673;;;8591:12;;;;;;;;;;;8583:20;;:4;:20;;;8579:373;;;8639:10;;;;;;;;;;;:20;;;8660:10;8639:32;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8629:6;:42;;8620:52;;;;;;8736:6;8697:10;;;;;;;;;;;:20;;;8726:4;8697:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:45;;8688:55;;;;;;8758:10;;;;;;;;;;;:18;;;8777:10;8789:6;8758:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8812:10;;;;;;;;;;;:19;;;8832:10;8843:6;8812:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8579:373;;;8902:5;8894:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8579:373;8279:673;7979:973;7795:1164;;:::o;1785:29::-;;;;:::o;1263:27::-;;;;;;;;;;;;;:::o;1236:87:4:-;1282:7;1309:6;;;;;;;;;;;1302:13;;1236:87;:::o;10936:141:7:-;10984:4;11028:10;;11009:15;:29;;:59;;;;;11060:8;;11042:15;:26;11009:59;11001:68;;10936:141;:::o;4778:1289::-;4818:16;4852:8;;;;;;;;;;;4847:1211;;5102:9;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4917:213;;;;;;;;;;;;;;;5159:9;5145:13;:23;;;;4847:1211;;;5236:22;5275:1;5261:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5236:41;;5311:11;;;;;;;;;;;5292:5;5298:1;5292:8;;;;;;;;:::i;:::-;;;;;;;:31;;;;;;;;;;;5357:6;;;;;;;;;;;5338:5;5344:1;5338:8;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;5381:13;5397:17;:30;;;5434:14;;;;;;;;;;;5430:2;:18;;;;:::i;:::-;5428:1;:20;;;;:::i;:::-;5450:5;5397:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5457:1;5397:62;;;;;;;;:::i;:::-;;;;;;;;5381:78;;5591:4;5567:28;;5575:11;;;;;;;;;;;5567:28;;;5563:442;;;5616:22;5655:1;5641:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5616:41;;5713:11;;;;;;;;;;;5694:5;5700:1;5694:8;;;;;;;;:::i;:::-;;;;;;;:31;;;;;;;;;;;5763:11;5744:5;5750:1;5744:8;;;;;;;;:::i;:::-;;;;;;;:31;;;;;;;;;;;5846:17;:30;;;5877:5;5884;5846:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5891:1;5846:47;;;;;;;;:::i;:::-;;;;;;;;5827:67;;5597:329;5563:442;;;5983:5;5964:25;;5563:442;6037:9;6021:13;:25;;;;5221:837;;4847:1211;4805:1262;4778:1289::o;3006:679::-;1122:13:4;:11;:13::i;:::-;3275:4:7::1;;3267:5;:12;;;;;;;:::i;:::-;;3300:6;;3290:7;:16;;;;;;;:::i;:::-;;3330:5;3319:8;;:16;;;;;;;;;;;;;;;;;;3364:14;3346:15;:32;;;;3402:9;3389:10;:22;;;;3433:7;3422:8;:18;;;;3478:21;3453:22;;:46;;;;;;;;;;;;;;;;;;3544:22;;;;;;;;;;;3510:9;;:57;;;;;;;;;;;;;;;;;;3597:9;;;;;;;;;;;:18;;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3580:14;::::0;:37:::1;;;;;;;;;;;;;;;;;;3639:9;3630:6;:18;;;;3667:10;:8;:10::i;:::-;3006:679:::0;;;;;;;;:::o;10624:163::-;10670:11;;:::i;:::-;10713:1;10703:7;;:11;10694:21;;;;;;10746:1;10735:7;;:12;;10726:22;;;;;;10767:5;10777:1;10773;:5;;;;:::i;:::-;10767:12;;;;;;;;:::i;:::-;;;;;;;;;;;;10759:20;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10624:163;;;:::o;1682:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2118:27::-;;;;;;;;;;;;;:::o;1492:24::-;;;;:::o;1656:19::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9687:144::-;1122:13:4;:11;:13::i;:::-;9769:11:7::1;9754:12;;:26;;;;;;;;;;;;;;;;;;9810:12;;;;;;;;;;;9791:10;;:32;;;;;;;;;;;;;;;;;;9687:144:::0;:::o;8967:532::-;9020:1;9010:6;;:11;9006:50;;;9038:7;;9006:50;9066:10;:8;:10::i;:::-;9110;;9091:15;:29;;:59;;;;;9142:8;;9124:15;:26;9091:59;9087:361;;;9185:1;9171:10;;:15;9167:82;;;9220:13;;9207:10;:26;;;;9167:82;9087:361;;;9298:8;;9279:15;:27;9275:173;;9342:1;9327:11;;:16;9323:114;;;9378:13;;9364:11;:27;;;;9410:11;:9;:11::i;:::-;9323:114;9275:173;9087:361;9476:15;9458;:33;;;;8967:532;:::o;2005:27::-;;;;;;;;;;;;:::o;2059:20::-;;;;;;;;;;;;;:::o;9991:145::-;1122:13:4;:11;:13::i;:::-;10074:11:7::1;10059:12;;:26;;;;;;;;;;;;;;;;;;10115:12;;;;;;;;;;;10096:10;;:32;;;;;;;;;;;;;;;;;;9991:145:::0;:::o;2142:201:4:-;1122:13;:11;:13::i;:::-;2251:1:::1;2231:22;;:8;:22;;;;2223:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2307:28;2326:8;2307:18;:28::i;:::-;2142:201:::0;:::o;1428:25:7:-;;;;:::o;1401:132:4:-;1476:12;:10;:12::i;:::-;1465:23;;:7;:5;:7::i;:::-;:23;;;1457:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1401:132::o;2503:191::-;2577:16;2596:6;;;;;;;;;;;2577:25;;2622:8;2613:6;;:17;;;;;;;;;;;;;;;;;;2677:8;2646:40;;2667:8;2646:40;;;;;;;;;;;;2566:128;2503:191;:::o;6083:937:7:-;6124:20;;:::i;:::-;6171:5;6155:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;:13;;:21;;;;6205:7;6187:25;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:8;:15;;:25;;;;6244:10;;6223:8;:18;;:31;;;;;6284:8;;6265;:16;;:27;;;;;6320:6;;6303:8;:14;;:23;;;;;6351:14;6376:23;6402:56;6447:10;;6403:38;6437:3;6404:27;6420:10;;6404:11;;:15;;:27;;;;:::i;:::-;6403:33;;:38;;;;:::i;:::-;6402:44;;:56;;;;:::i;:::-;6376:82;;6497:15;;6473:21;6477:16;6473:3;:21::i;:::-;:39;6469:362;;;6538:12;;;;;;;;;;;6529:21;;6565:23;;;;;;;;;;;;;;;;;:8;:15;;:23;;;;6469:362;;;6638:1;6619:16;:20;6615:216;;;6665:12;;;;;;;;;;;6656:21;;6692:24;;;;;;;;;;;;;;;;;:8;:15;;:24;;;;6615:216;;;6767:12;;;;;;;;;;;6758:21;;6794:25;;;;;;;;;;;;;;;;;:8;:15;;:25;;;;6615:216;6469:362;6841:5;6852:8;6841:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;6872:7;;:9;;;;;;;;;:::i;:::-;;;;;;6900:6;6892:20;;6920:6;;6892:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6957:1;6944:10;:14;;;;6983:1;6969:11;:15;;;;7011:1;7002:6;:10;;;;6113:907;;;6083:937::o;656:98:1:-;709:7;736:10;729:17;;656:98;:::o;1344:95:6:-;1400:6;1430:1;1426;:5;;;;:::i;:::-;1419:12;;1344:95;;;;:::o;606:::-;662:6;692:1;688;:5;;;;:::i;:::-;681:12;;606:95;;;;:::o;998:::-;1054:6;1084:1;1080;:5;;;;:::i;:::-;1073:12;;998:95;;;;:::o;10521:94:7:-;10566:6;10597:1;10592;:6;;:15;;10606:1;10605:2;;;:::i;:::-;10592:15;;;10601:1;10592:15;10585:22;;10521:94;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:744:8:-;131:5;156:81;172:64;229:6;172:64;:::i;:::-;156:81;:::i;:::-;147:90;;257:5;286:6;279:5;272:21;320:4;313:5;309:16;302:23;;346:6;396:3;388:4;380:6;376:17;371:3;367:27;364:36;361:143;;;415:79;;:::i;:::-;361:143;528:1;513:249;538:6;535:1;532:13;513:249;;;606:3;635:48;679:3;667:10;635:48;:::i;:::-;630:3;623:61;713:4;708:3;704:14;697:21;;747:4;742:3;738:14;731:21;;573:189;560:1;557;553:9;548:14;;513:249;;;517:14;137:631;;24:744;;;;;:::o;774:139::-;820:5;858:6;845:20;836:29;;874:33;901:5;874:33;:::i;:::-;774:139;;;;:::o;919:143::-;976:5;1007:6;1001:13;992:22;;1023:33;1050:5;1023:33;:::i;:::-;919:143;;;;:::o;1085:385::-;1167:5;1216:3;1209:4;1201:6;1197:17;1193:27;1183:122;;1224:79;;:::i;:::-;1183:122;1334:6;1328:13;1359:105;1460:3;1452:6;1445:4;1437:6;1433:17;1359:105;:::i;:::-;1350:114;;1173:297;1085:385;;;;:::o;1476:137::-;1530:5;1561:6;1555:13;1546:22;;1577:30;1601:5;1577:30;:::i;:::-;1476:137;;;;:::o;1619:::-;1664:5;1702:6;1689:20;1680:29;;1718:32;1744:5;1718:32;:::i;:::-;1619:137;;;;:::o;1762:141::-;1818:5;1849:6;1843:13;1834:22;;1865:32;1891:5;1865:32;:::i;:::-;1762:141;;;;:::o;1923:553::-;1981:8;1991:6;2041:3;2034:4;2026:6;2022:17;2018:27;2008:122;;2049:79;;:::i;:::-;2008:122;2162:6;2149:20;2139:30;;2192:18;2184:6;2181:30;2178:117;;;2214:79;;:::i;:::-;2178:117;2328:4;2320:6;2316:17;2304:29;;2382:3;2374:4;2366:6;2362:17;2352:8;2348:32;2345:41;2342:128;;;2389:79;;:::i;:::-;2342:128;1923:553;;;;;:::o;2482:139::-;2528:5;2566:6;2553:20;2544:29;;2582:33;2609:5;2582:33;:::i;:::-;2482:139;;;;:::o;2627:143::-;2684:5;2715:6;2709:13;2700:22;;2731:33;2758:5;2731:33;:::i;:::-;2627:143;;;;:::o;2776:141::-;2832:5;2863:6;2857:13;2848:22;;2879:32;2905:5;2879:32;:::i;:::-;2776:141;;;;:::o;2923:139::-;2978:5;3009:6;3003:13;2994:22;;3025:31;3050:5;3025:31;:::i;:::-;2923:139;;;;:::o;3068:329::-;3127:6;3176:2;3164:9;3155:7;3151:23;3147:32;3144:119;;;3182:79;;:::i;:::-;3144:119;3302:1;3327:53;3372:7;3363:6;3352:9;3348:22;3327:53;:::i;:::-;3317:63;;3273:117;3068:329;;;;:::o;3403:351::-;3473:6;3522:2;3510:9;3501:7;3497:23;3493:32;3490:119;;;3528:79;;:::i;:::-;3490:119;3648:1;3673:64;3729:7;3720:6;3709:9;3705:22;3673:64;:::i;:::-;3663:74;;3619:128;3403:351;;;;:::o;3760:554::-;3855:6;3904:2;3892:9;3883:7;3879:23;3875:32;3872:119;;;3910:79;;:::i;:::-;3872:119;4051:1;4040:9;4036:17;4030:24;4081:18;4073:6;4070:30;4067:117;;;4103:79;;:::i;:::-;4067:117;4208:89;4289:7;4280:6;4269:9;4265:22;4208:89;:::i;:::-;4198:99;;4001:306;3760:554;;;;:::o;4320:345::-;4387:6;4436:2;4424:9;4415:7;4411:23;4407:32;4404:119;;;4442:79;;:::i;:::-;4404:119;4562:1;4587:61;4640:7;4631:6;4620:9;4616:22;4587:61;:::i;:::-;4577:71;;4533:125;4320:345;;;;:::o;4671:1601::-;4807:6;4815;4823;4831;4839;4847;4855;4863;4871;4920:3;4908:9;4899:7;4895:23;4891:33;4888:120;;;4927:79;;:::i;:::-;4888:120;5075:1;5064:9;5060:17;5047:31;5105:18;5097:6;5094:30;5091:117;;;5127:79;;:::i;:::-;5091:117;5240:65;5297:7;5288:6;5277:9;5273:22;5240:65;:::i;:::-;5222:83;;;;5018:297;5382:2;5371:9;5367:18;5354:32;5413:18;5405:6;5402:30;5399:117;;;5435:79;;:::i;:::-;5399:117;5548:65;5605:7;5596:6;5585:9;5581:22;5548:65;:::i;:::-;5530:83;;;;5325:298;5662:2;5688:53;5733:7;5724:6;5713:9;5709:22;5688:53;:::i;:::-;5678:63;;5633:118;5790:2;5816:53;5861:7;5852:6;5841:9;5837:22;5816:53;:::i;:::-;5806:63;;5761:118;5918:3;5945:52;5989:7;5980:6;5969:9;5965:22;5945:52;:::i;:::-;5935:62;;5889:118;6046:3;6073:53;6118:7;6109:6;6098:9;6094:22;6073:53;:::i;:::-;6063:63;;6017:119;6175:3;6202:53;6247:7;6238:6;6227:9;6223:22;6202:53;:::i;:::-;6192:63;;6146:119;4671:1601;;;;;;;;;;;:::o;6278:1455::-;6405:6;6413;6421;6429;6437;6445;6453;6461;6510:3;6498:9;6489:7;6485:23;6481:33;6478:120;;;6517:79;;:::i;:::-;6478:120;6665:1;6654:9;6650:17;6637:31;6695:18;6687:6;6684:30;6681:117;;;6717:79;;:::i;:::-;6681:117;6830:65;6887:7;6878:6;6867:9;6863:22;6830:65;:::i;:::-;6812:83;;;;6608:297;6972:2;6961:9;6957:18;6944:32;7003:18;6995:6;6992:30;6989:117;;;7025:79;;:::i;:::-;6989:117;7138:65;7195:7;7186:6;7175:9;7171:22;7138:65;:::i;:::-;7120:83;;;;6915:298;7252:2;7278:53;7323:7;7314:6;7303:9;7299:22;7278:53;:::i;:::-;7268:63;;7223:118;7380:2;7406:52;7450:7;7441:6;7430:9;7426:22;7406:52;:::i;:::-;7396:62;;7351:117;7507:3;7534:53;7579:7;7570:6;7559:9;7555:22;7534:53;:::i;:::-;7524:63;;7478:119;7636:3;7663:53;7708:7;7699:6;7688:9;7684:22;7663:53;:::i;:::-;7653:63;;7607:119;6278:1455;;;;;;;;;;;:::o;7739:329::-;7798:6;7847:2;7835:9;7826:7;7822:23;7818:32;7815:119;;;7853:79;;:::i;:::-;7815:119;7973:1;7998:53;8043:7;8034:6;8023:9;8019:22;7998:53;:::i;:::-;7988:63;;7944:117;7739:329;;;;:::o;8074:351::-;8144:6;8193:2;8181:9;8172:7;8168:23;8164:32;8161:119;;;8199:79;;:::i;:::-;8161:119;8319:1;8344:64;8400:7;8391:6;8380:9;8376:22;8344:64;:::i;:::-;8334:74;;8290:128;8074:351;;;;:::o;8431:474::-;8499:6;8507;8556:2;8544:9;8535:7;8531:23;8527:32;8524:119;;;8562:79;;:::i;:::-;8524:119;8682:1;8707:53;8752:7;8743:6;8732:9;8728:22;8707:53;:::i;:::-;8697:63;;8653:117;8809:2;8835:53;8880:7;8871:6;8860:9;8856:22;8835:53;:::i;:::-;8825:63;;8780:118;8431:474;;;;;:::o;8911:971::-;9014:6;9022;9030;9038;9046;9095:3;9083:9;9074:7;9070:23;9066:33;9063:120;;;9102:79;;:::i;:::-;9063:120;9222:1;9247:63;9302:7;9293:6;9282:9;9278:22;9247:63;:::i;:::-;9237:73;;9193:127;9359:2;9385:63;9440:7;9431:6;9420:9;9416:22;9385:63;:::i;:::-;9375:73;;9330:128;9497:2;9523:64;9579:7;9570:6;9559:9;9555:22;9523:64;:::i;:::-;9513:74;;9468:129;9636:2;9662:64;9718:7;9709:6;9698:9;9694:22;9662:64;:::i;:::-;9652:74;;9607:129;9775:3;9802:63;9857:7;9848:6;9837:9;9833:22;9802:63;:::i;:::-;9792:73;;9746:129;8911:971;;;;;;;;:::o;9888:347::-;9956:6;10005:2;9993:9;9984:7;9980:23;9976:32;9973:119;;;10011:79;;:::i;:::-;9973:119;10131:1;10156:62;10210:7;10201:6;10190:9;10186:22;10156:62;:::i;:::-;10146:72;;10102:126;9888:347;;;;:::o;10241:179::-;10310:10;10331:46;10373:3;10365:6;10331:46;:::i;:::-;10409:4;10404:3;10400:14;10386:28;;10241:179;;;;:::o;10426:108::-;10503:24;10521:5;10503:24;:::i;:::-;10498:3;10491:37;10426:108;;:::o;10540:118::-;10627:24;10645:5;10627:24;:::i;:::-;10622:3;10615:37;10540:118;;:::o;10694:732::-;10813:3;10842:54;10890:5;10842:54;:::i;:::-;10912:86;10991:6;10986:3;10912:86;:::i;:::-;10905:93;;11022:56;11072:5;11022:56;:::i;:::-;11101:7;11132:1;11117:284;11142:6;11139:1;11136:13;11117:284;;;11218:6;11212:13;11245:63;11304:3;11289:13;11245:63;:::i;:::-;11238:70;;11331:60;11384:6;11331:60;:::i;:::-;11321:70;;11177:224;11164:1;11161;11157:9;11152:14;;11117:284;;;11121:14;11417:3;11410:10;;10818:608;;;10694:732;;;;:::o;11432:109::-;11513:21;11528:5;11513:21;:::i;:::-;11508:3;11501:34;11432:109;;:::o;11547:159::-;11648:51;11693:5;11648:51;:::i;:::-;11643:3;11636:64;11547:159;;:::o;11712:175::-;11821:59;11874:5;11821:59;:::i;:::-;11816:3;11809:72;11712:175;;:::o;11893:115::-;11978:23;11995:5;11978:23;:::i;:::-;11973:3;11966:36;11893:115;;:::o;12014:344::-;12092:3;12120:39;12153:5;12120:39;:::i;:::-;12175:61;12229:6;12224:3;12175:61;:::i;:::-;12168:68;;12245:52;12290:6;12285:3;12278:4;12271:5;12267:16;12245:52;:::i;:::-;12322:29;12344:6;12322:29;:::i;:::-;12317:3;12313:39;12306:46;;12096:262;12014:344;;;;:::o;12364:364::-;12452:3;12480:39;12513:5;12480:39;:::i;:::-;12535:71;12599:6;12594:3;12535:71;:::i;:::-;12528:78;;12615:52;12660:6;12655:3;12648:4;12641:5;12637:16;12615:52;:::i;:::-;12692:29;12714:6;12692:29;:::i;:::-;12687:3;12683:39;12676:46;;12456:272;12364:364;;;;:::o;12734:366::-;12876:3;12897:67;12961:2;12956:3;12897:67;:::i;:::-;12890:74;;12973:93;13062:3;12973:93;:::i;:::-;13091:2;13086:3;13082:12;13075:19;;12734:366;;;:::o;13106:::-;13248:3;13269:67;13333:2;13328:3;13269:67;:::i;:::-;13262:74;;13345:93;13434:3;13345:93;:::i;:::-;13463:2;13458:3;13454:12;13447:19;;13106:366;;;:::o;13478:::-;13620:3;13641:67;13705:2;13700:3;13641:67;:::i;:::-;13634:74;;13717:93;13806:3;13717:93;:::i;:::-;13835:2;13830:3;13826:12;13819:19;;13478:366;;;:::o;13850:398::-;14009:3;14030:83;14111:1;14106:3;14030:83;:::i;:::-;14023:90;;14122:93;14211:3;14122:93;:::i;:::-;14240:1;14235:3;14231:11;14224:18;;13850:398;;;:::o;14254:366::-;14396:3;14417:67;14481:2;14476:3;14417:67;:::i;:::-;14410:74;;14493:93;14582:3;14493:93;:::i;:::-;14611:2;14606:3;14602:12;14595:19;;14254:366;;;:::o;14626:::-;14768:3;14789:67;14853:2;14848:3;14789:67;:::i;:::-;14782:74;;14865:93;14954:3;14865:93;:::i;:::-;14983:2;14978:3;14974:12;14967:19;;14626:366;;;:::o;14998:::-;15140:3;15161:67;15225:2;15220:3;15161:67;:::i;:::-;15154:74;;15237:93;15326:3;15237:93;:::i;:::-;15355:2;15350:3;15346:12;15339:19;;14998:366;;;:::o;15370:::-;15512:3;15533:67;15597:2;15592:3;15533:67;:::i;:::-;15526:74;;15609:93;15698:3;15609:93;:::i;:::-;15727:2;15722:3;15718:12;15711:19;;15370:366;;;:::o;15742:::-;15884:3;15905:67;15969:2;15964:3;15905:67;:::i;:::-;15898:74;;15981:93;16070:3;15981:93;:::i;:::-;16099:2;16094:3;16090:12;16083:19;;15742:366;;;:::o;16186:1449::-;16297:3;16333:4;16328:3;16324:14;16420:4;16413:5;16409:16;16403:23;16473:3;16467:4;16463:14;16456:4;16451:3;16447:14;16440:38;16499:73;16567:4;16553:12;16499:73;:::i;:::-;16491:81;;16348:235;16667:4;16660:5;16656:16;16650:23;16720:3;16714:4;16710:14;16703:4;16698:3;16694:14;16687:38;16746:73;16814:4;16800:12;16746:73;:::i;:::-;16738:81;;16593:237;16917:4;16910:5;16906:16;16900:23;16936:63;16993:4;16988:3;16984:14;16970:12;16936:63;:::i;:::-;16840:169;17094:4;17087:5;17083:16;17077:23;17113:63;17170:4;17165:3;17161:14;17147:12;17113:63;:::i;:::-;17019:167;17269:4;17262:5;17258:16;17252:23;17288:63;17345:4;17340:3;17336:14;17322:12;17288:63;:::i;:::-;17196:165;17445:4;17438:5;17434:16;17428:23;17498:3;17492:4;17488:14;17481:4;17476:3;17472:14;17465:38;17524:73;17592:4;17578:12;17524:73;:::i;:::-;17516:81;;17371:237;17625:4;17618:11;;16302:1333;16186:1449;;;;:::o;17641:108::-;17718:24;17736:5;17718:24;:::i;:::-;17713:3;17706:37;17641:108;;:::o;17755:118::-;17842:24;17860:5;17842:24;:::i;:::-;17837:3;17830:37;17755:118;;:::o;17879:112::-;17962:22;17978:5;17962:22;:::i;:::-;17957:3;17950:35;17879:112;;:::o;17997:379::-;18181:3;18203:147;18346:3;18203:147;:::i;:::-;18196:154;;18367:3;18360:10;;17997:379;;;:::o;18382:222::-;18475:4;18513:2;18502:9;18498:18;18490:26;;18526:71;18594:1;18583:9;18579:17;18570:6;18526:71;:::i;:::-;18382:222;;;;:::o;18610:442::-;18759:4;18797:2;18786:9;18782:18;18774:26;;18810:71;18878:1;18867:9;18863:17;18854:6;18810:71;:::i;:::-;18891:72;18959:2;18948:9;18944:18;18935:6;18891:72;:::i;:::-;18973;19041:2;19030:9;19026:18;19017:6;18973:72;:::i;:::-;18610:442;;;;;;:::o;19058:332::-;19179:4;19217:2;19206:9;19202:18;19194:26;;19230:71;19298:1;19287:9;19283:17;19274:6;19230:71;:::i;:::-;19311:72;19379:2;19368:9;19364:18;19355:6;19311:72;:::i;:::-;19058:332;;;;;:::o;19396:210::-;19483:4;19521:2;19510:9;19506:18;19498:26;;19534:65;19596:1;19585:9;19581:17;19572:6;19534:65;:::i;:::-;19396:210;;;;:::o;19612:250::-;19719:4;19757:2;19746:9;19742:18;19734:26;;19770:85;19852:1;19841:9;19837:17;19828:6;19770:85;:::i;:::-;19612:250;;;;:::o;19868:266::-;19983:4;20021:2;20010:9;20006:18;19998:26;;20034:93;20124:1;20113:9;20109:17;20100:6;20034:93;:::i;:::-;19868:266;;;;:::o;20140:218::-;20231:4;20269:2;20258:9;20254:18;20246:26;;20282:69;20348:1;20337:9;20333:17;20324:6;20282:69;:::i;:::-;20140:218;;;;:::o;20364:313::-;20477:4;20515:2;20504:9;20500:18;20492:26;;20564:9;20558:4;20554:20;20550:1;20539:9;20535:17;20528:47;20592:78;20665:4;20656:6;20592:78;:::i;:::-;20584:86;;20364:313;;;;:::o;20683:1048::-;20976:4;21014:3;21003:9;20999:19;20991:27;;21064:9;21058:4;21054:20;21050:1;21039:9;21035:17;21028:47;21092:78;21165:4;21156:6;21092:78;:::i;:::-;21084:86;;21217:9;21211:4;21207:20;21202:2;21191:9;21187:18;21180:48;21245:78;21318:4;21309:6;21245:78;:::i;:::-;21237:86;;21333:72;21401:2;21390:9;21386:18;21377:6;21333:72;:::i;:::-;21415;21483:2;21472:9;21468:18;21459:6;21415:72;:::i;:::-;21497:73;21565:3;21554:9;21550:19;21541:6;21497:73;:::i;:::-;21618:9;21612:4;21608:20;21602:3;21591:9;21587:19;21580:49;21646:78;21719:4;21710:6;21646:78;:::i;:::-;21638:86;;20683:1048;;;;;;;;;:::o;21737:419::-;21903:4;21941:2;21930:9;21926:18;21918:26;;21990:9;21984:4;21980:20;21976:1;21965:9;21961:17;21954:47;22018:131;22144:4;22018:131;:::i;:::-;22010:139;;21737:419;;;:::o;22162:::-;22328:4;22366:2;22355:9;22351:18;22343:26;;22415:9;22409:4;22405:20;22401:1;22390:9;22386:17;22379:47;22443:131;22569:4;22443:131;:::i;:::-;22435:139;;22162:419;;;:::o;22587:::-;22753:4;22791:2;22780:9;22776:18;22768:26;;22840:9;22834:4;22830:20;22826:1;22815:9;22811:17;22804:47;22868:131;22994:4;22868:131;:::i;:::-;22860:139;;22587:419;;;:::o;23012:::-;23178:4;23216:2;23205:9;23201:18;23193:26;;23265:9;23259:4;23255:20;23251:1;23240:9;23236:17;23229:47;23293:131;23419:4;23293:131;:::i;:::-;23285:139;;23012:419;;;:::o;23437:::-;23603:4;23641:2;23630:9;23626:18;23618:26;;23690:9;23684:4;23680:20;23676:1;23665:9;23661:17;23654:47;23718:131;23844:4;23718:131;:::i;:::-;23710:139;;23437:419;;;:::o;23862:::-;24028:4;24066:2;24055:9;24051:18;24043:26;;24115:9;24109:4;24105:20;24101:1;24090:9;24086:17;24079:47;24143:131;24269:4;24143:131;:::i;:::-;24135:139;;23862:419;;;:::o;24287:::-;24453:4;24491:2;24480:9;24476:18;24468:26;;24540:9;24534:4;24530:20;24526:1;24515:9;24511:17;24504:47;24568:131;24694:4;24568:131;:::i;:::-;24560:139;;24287:419;;;:::o;24712:::-;24878:4;24916:2;24905:9;24901:18;24893:26;;24965:9;24959:4;24955:20;24951:1;24940:9;24936:17;24929:47;24993:131;25119:4;24993:131;:::i;:::-;24985:139;;24712:419;;;:::o;25137:357::-;25272:4;25310:2;25299:9;25295:18;25287:26;;25359:9;25353:4;25349:20;25345:1;25334:9;25330:17;25323:47;25387:100;25482:4;25473:6;25387:100;:::i;:::-;25379:108;;25137:357;;;;:::o;25500:222::-;25593:4;25631:2;25620:9;25616:18;25608:26;;25644:71;25712:1;25701:9;25697:17;25688:6;25644:71;:::i;:::-;25500:222;;;;:::o;25728:483::-;25899:4;25937:2;25926:9;25922:18;25914:26;;25950:71;26018:1;26007:9;26003:17;25994:6;25950:71;:::i;:::-;26068:9;26062:4;26058:20;26053:2;26042:9;26038:18;26031:48;26096:108;26199:4;26190:6;26096:108;:::i;:::-;26088:116;;25728:483;;;;;:::o;26217:214::-;26306:4;26344:2;26333:9;26329:18;26321:26;;26357:67;26421:1;26410:9;26406:17;26397:6;26357:67;:::i;:::-;26217:214;;;;:::o;26437:129::-;26471:6;26498:20;;:::i;:::-;26488:30;;26527:33;26555:4;26547:6;26527:33;:::i;:::-;26437:129;;;:::o;26572:75::-;26605:6;26638:2;26632:9;26622:19;;26572:75;:::o;26653:311::-;26730:4;26820:18;26812:6;26809:30;26806:56;;;26842:18;;:::i;:::-;26806:56;26892:4;26884:6;26880:17;26872:25;;26952:4;26946;26942:15;26934:23;;26653:311;;;:::o;26970:132::-;27037:4;27060:3;27052:11;;27090:4;27085:3;27081:14;27073:22;;26970:132;;;:::o;27108:114::-;27175:6;27209:5;27203:12;27193:22;;27108:114;;;:::o;27228:99::-;27280:6;27314:5;27308:12;27298:22;;27228:99;;;:::o;27333:113::-;27403:4;27435;27430:3;27426:14;27418:22;;27333:113;;;:::o;27452:184::-;27551:11;27585:6;27580:3;27573:19;27625:4;27620:3;27616:14;27601:29;;27452:184;;;;:::o;27642:147::-;27743:11;27780:3;27765:18;;27642:147;;;;:::o;27795:159::-;27869:11;27903:6;27898:3;27891:19;27943:4;27938:3;27934:14;27919:29;;27795:159;;;;:::o;27960:169::-;28044:11;28078:6;28073:3;28066:19;28118:4;28113:3;28109:14;28094:29;;27960:169;;;;:::o;28135:385::-;28174:1;28191:19;28208:1;28191:19;:::i;:::-;28186:24;;28224:19;28241:1;28224:19;:::i;:::-;28219:24;;28262:1;28252:35;;28267:18;;:::i;:::-;28252:35;28453:1;28450;28446:9;28443:1;28440:16;28359:66;28356:1;28353:73;28336:130;28333:156;;;28469:18;;:::i;:::-;28333:156;28512:1;28509;28504:10;28499:15;;28135:385;;;;:::o;28526:848::-;28587:5;28594:4;28618:6;28609:15;;28642:5;28633:14;;28656:712;28677:1;28667:8;28664:15;28656:712;;;28772:4;28767:3;28763:14;28757:4;28754:24;28751:50;;;28781:18;;:::i;:::-;28751:50;28831:1;28821:8;28817:16;28814:451;;;29246:4;29239:5;29235:16;29226:25;;28814:451;29296:4;29290;29286:15;29278:23;;29326:32;29349:8;29326:32;:::i;:::-;29314:44;;28656:712;;;28526:848;;;;;;;:::o;29380:281::-;29438:5;29462:23;29480:4;29462:23;:::i;:::-;29454:31;;29506:25;29522:8;29506:25;:::i;:::-;29494:37;;29550:104;29587:66;29577:8;29571:4;29550:104;:::i;:::-;29541:113;;29380:281;;;;:::o;29667:1073::-;29721:5;29912:8;29902:40;;29933:1;29924:10;;29935:5;;29902:40;29961:4;29951:36;;29978:1;29969:10;;29980:5;;29951:36;30047:4;30095:1;30090:27;;;;30131:1;30126:191;;;;30040:277;;30090:27;30108:1;30099:10;;30110:5;;;30126:191;30171:3;30161:8;30158:17;30155:43;;;30178:18;;:::i;:::-;30155:43;30227:8;30224:1;30220:16;30211:25;;30262:3;30255:5;30252:14;30249:40;;;30269:18;;:::i;:::-;30249:40;30302:5;;;30040:277;;30426:2;30416:8;30413:16;30407:3;30401:4;30398:13;30394:36;30376:2;30366:8;30363:16;30358:2;30352:4;30349:12;30345:35;30329:111;30326:246;;;30482:8;30476:4;30472:19;30463:28;;30517:3;30510:5;30507:14;30504:40;;;30524:18;;:::i;:::-;30504:40;30557:5;;30326:246;30597:42;30635:3;30625:8;30619:4;30616:1;30597:42;:::i;:::-;30582:57;;;;30671:4;30666:3;30662:14;30655:5;30652:25;30649:51;;;30680:18;;:::i;:::-;30649:51;30729:4;30722:5;30718:16;30709:25;;29667:1073;;;;;;:::o;30746:991::-;30785:7;30808:19;30825:1;30808:19;:::i;:::-;30803:24;;30841:19;30858:1;30841:19;:::i;:::-;30836:24;;31042:1;30974:66;30970:74;30967:1;30964:81;30959:1;30956;30952:9;30948:1;30945;30941:9;30937:25;30933:113;30930:139;;;31049:18;;:::i;:::-;30930:139;31253:1;31185:66;31180:75;31177:1;31173:83;31168:1;31165;31161:9;31157:1;31154;31150:9;31146:25;31142:115;31139:141;;;31260:18;;:::i;:::-;31139:141;31464:1;31396:66;31391:75;31388:1;31384:83;31379:1;31376;31372:9;31368:1;31365;31361:9;31357:25;31353:115;31350:141;;;31471:18;;:::i;:::-;31350:141;31674:1;31606:66;31601:75;31598:1;31594:83;31589:1;31586;31582:9;31578:1;31575;31571:9;31567:25;31563:115;31560:141;;;31681:18;;:::i;:::-;31560:141;31729:1;31726;31722:9;31711:20;;30746:991;;;;:::o;31743:348::-;31783:7;31806:20;31824:1;31806:20;:::i;:::-;31801:25;;31840:20;31858:1;31840:20;:::i;:::-;31835:25;;32028:1;31960:66;31956:74;31953:1;31950:81;31945:1;31938:9;31931:17;31927:105;31924:131;;;32035:18;;:::i;:::-;31924:131;32083:1;32080;32076:9;32065:20;;31743:348;;;;:::o;32097:527::-;32136:4;32156:19;32173:1;32156:19;:::i;:::-;32151:24;;32189:19;32206:1;32189:19;:::i;:::-;32184:24;;32378:1;32310:66;32306:74;32303:1;32299:82;32294:1;32291;32287:9;32280:17;32276:106;32273:132;;;32385:18;;:::i;:::-;32273:132;32564:1;32496:66;32492:74;32489:1;32485:82;32481:1;32478;32474:9;32470:98;32467:124;;;32571:18;;:::i;:::-;32467:124;32616:1;32613;32609:9;32601:17;;32097:527;;;;:::o;32630:191::-;32670:4;32690:20;32708:1;32690:20;:::i;:::-;32685:25;;32724:20;32742:1;32724:20;:::i;:::-;32719:25;;32763:1;32760;32757:8;32754:34;;;32768:18;;:::i;:::-;32754:34;32813:1;32810;32806:9;32798:17;;32630:191;;;;:::o;32827:96::-;32864:7;32893:24;32911:5;32893:24;:::i;:::-;32882:35;;32827:96;;;:::o;32929:90::-;32963:7;33006:5;32999:13;32992:21;32981:32;;32929:90;;;:::o;33025:76::-;33061:7;33090:5;33079:16;;33025:76;;;:::o;33107:126::-;33144:7;33184:42;33177:5;33173:54;33162:65;;33107:126;;;:::o;33239:77::-;33276:7;33305:5;33294:16;;33239:77;;;:::o;33322:86::-;33357:7;33397:4;33390:5;33386:16;33375:27;;33322:86;;;:::o;33414:105::-;33450:7;33490:22;33483:5;33479:34;33468:45;;33414:105;;;:::o;33525:140::-;33589:9;33622:37;33653:5;33622:37;:::i;:::-;33609:50;;33525:140;;;:::o;33671:148::-;33743:9;33776:37;33807:5;33776:37;:::i;:::-;33763:50;;33671:148;;;:::o;33825:126::-;33875:9;33908:37;33939:5;33908:37;:::i;:::-;33895:50;;33825:126;;;:::o;33957:113::-;34007:9;34040:24;34058:5;34040:24;:::i;:::-;34027:37;;33957:113;;;:::o;34076:307::-;34144:1;34154:113;34168:6;34165:1;34162:13;34154:113;;;34253:1;34248:3;34244:11;34238:18;34234:1;34229:3;34225:11;34218:39;34190:2;34187:1;34183:10;34178:15;;34154:113;;;34285:6;34282:1;34279:13;34276:101;;;34365:1;34356:6;34351:3;34347:16;34340:27;34276:101;34125:258;34076:307;;;:::o;34389:320::-;34433:6;34470:1;34464:4;34460:12;34450:22;;34517:1;34511:4;34507:12;34538:18;34528:81;;34594:4;34586:6;34582:17;34572:27;;34528:81;34656:2;34648:6;34645:14;34625:18;34622:38;34619:84;;;34675:18;;:::i;:::-;34619:84;34440:269;34389:320;;;:::o;34715:281::-;34798:27;34820:4;34798:27;:::i;:::-;34790:6;34786:40;34928:6;34916:10;34913:22;34892:18;34880:10;34877:34;34874:62;34871:88;;;34939:18;;:::i;:::-;34871:88;34979:10;34975:2;34968:22;34758:238;34715:281;;:::o;35002:233::-;35041:3;35064:24;35082:5;35064:24;:::i;:::-;35055:33;;35110:66;35103:5;35100:77;35097:103;;;35180:18;;:::i;:::-;35097:103;35227:1;35220:5;35216:13;35209:20;;35002:233;;;:::o;35241:228::-;35276:3;35299:23;35316:5;35299:23;:::i;:::-;35290:32;;35344:66;35337:5;35334:77;35331:103;;;35414:18;;:::i;:::-;35331:103;35457:5;35454:1;35450:13;35443:20;;35241:228;;;:::o;35475:180::-;35523:77;35520:1;35513:88;35620:4;35617:1;35610:15;35644:4;35641:1;35634:15;35661:180;35709:77;35706:1;35699:88;35806:4;35803:1;35796:15;35830:4;35827:1;35820:15;35847:180;35895:77;35892:1;35885:88;35992:4;35989:1;35982:15;36016:4;36013:1;36006:15;36033:180;36081:77;36078:1;36071:88;36178:4;36175:1;36168:15;36202:4;36199:1;36192:15;36219:180;36267:77;36264:1;36257:88;36364:4;36361:1;36354:15;36388:4;36385:1;36378:15;36405:117;36514:1;36511;36504:12;36528:117;36637:1;36634;36627:12;36651:117;36760:1;36757;36750:12;36774:117;36883:1;36880;36873:12;36897:117;37006:1;37003;36996:12;37020:102;37061:6;37112:2;37108:7;37103:2;37096:5;37092:14;37088:28;37078:38;;37020:102;;;:::o;37128:::-;37170:8;37217:5;37214:1;37210:13;37189:34;;37128:102;;;:::o;37236:225::-;37376:34;37372:1;37364:6;37360:14;37353:58;37445:8;37440:2;37432:6;37428:15;37421:33;37236:225;:::o;37467:178::-;37607:30;37603:1;37595:6;37591:14;37584:54;37467:178;:::o;37651:182::-;37791:34;37787:1;37779:6;37775:14;37768:58;37651:182;:::o;37839:114::-;;:::o;37959:234::-;38099:34;38095:1;38087:6;38083:14;38076:58;38168:17;38163:2;38155:6;38151:15;38144:42;37959:234;:::o;38199:167::-;38339:19;38335:1;38327:6;38323:14;38316:43;38199:167;:::o;38372:178::-;38512:30;38508:1;38500:6;38496:14;38489:54;38372:178;:::o;38556:236::-;38696:34;38692:1;38684:6;38680:14;38673:58;38765:19;38760:2;38752:6;38748:15;38741:44;38556:236;:::o;38798:162::-;38938:14;38934:1;38926:6;38922:14;38915:38;38798:162;:::o;38966:122::-;39039:24;39057:5;39039:24;:::i;:::-;39032:5;39029:35;39019:63;;39078:1;39075;39068:12;39019:63;38966:122;:::o;39094:116::-;39164:21;39179:5;39164:21;:::i;:::-;39157:5;39154:32;39144:60;;39200:1;39197;39190:12;39144:60;39094:116;:::o;39216:120::-;39288:23;39305:5;39288:23;:::i;:::-;39281:5;39278:34;39268:62;;39326:1;39323;39316:12;39268:62;39216:120;:::o;39342:122::-;39415:24;39433:5;39415:24;:::i;:::-;39408:5;39405:35;39395:63;;39454:1;39451;39444:12;39395:63;39342:122;:::o;39470:118::-;39541:22;39557:5;39541:22;:::i;:::-;39534:5;39531:33;39521:61;;39578:1;39575;39568:12;39521:61;39470:118;:::o;39594:120::-;39666:23;39683:5;39666:23;:::i;:::-;39659:5;39656:34;39646:62;;39704:1;39701;39694:12;39646:62;39594:120;:::o

Swarm Source

ipfs://66129383e154b10a6220260da2ff129386ee1c90f2c1bfcf60474c5c4126351c

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.