ETH Price: $1,840.23 (-1.22%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Safe Transfer Fr...160398932022-11-24 12:39:351187 days ago1669293575IN
0xf2D11bbF...8bbf2bb2b
0 ETH0.0013745312.87741043
Set Approval For...160390532022-11-24 9:50:231187 days ago1669283423IN
0xf2D11bbF...8bbf2bb2b
0 ETH0.0003245713.36194032
Set Approval For...142576432022-02-22 19:06:191462 days ago1645556779IN
0xf2D11bbF...8bbf2bb2b
0 ETH0.00579253125.37148873
Transfer From138025452021-12-14 9:44:311532 days ago1639475071IN
0xf2D11bbF...8bbf2bb2b
0 ETH0.004469152.14951551
Set Approval For...136499942021-11-20 5:17:051556 days ago1637385425IN
0xf2D11bbF...8bbf2bb2b
0 ETH0.00346062131.56752516
Set Approval For...136499942021-11-20 5:17:051556 days ago1637385425IN
0xf2D11bbF...8bbf2bb2b
0 ETH0.00607881131.56752516
Transfer From136498932021-11-20 4:51:141556 days ago1637383874IN
0xf2D11bbF...8bbf2bb2b
0 ETH0.01055826101.69190466
Bid134521102021-10-20 3:04:411587 days ago1634699081IN
0xf2D11bbF...8bbf2bb2b
0.3001 ETH0.0124474160.50010696
Set Approval For...126119772021-06-11 7:38:021718 days ago1623397082IN
0xf2D11bbF...8bbf2bb2b
0 ETH0.0006468414
Bid125458192021-06-01 2:01:591729 days ago1622512919IN
0xf2D11bbF...8bbf2bb2b
0.2501 ETH0.0031532718
Bid125422912021-05-31 13:06:471729 days ago1622466407IN
0xf2D11bbF...8bbf2bb2b
0.2001 ETH0.0057684630
Bid125422852021-05-31 13:04:131729 days ago1622466253IN
0xf2D11bbF...8bbf2bb2b
0.1501 ETH0.0009026319.85
Bid125422682021-05-31 13:01:061729 days ago1622466066IN
0xf2D11bbF...8bbf2bb2b
0.2 ETH0.0058362733.32313
Bid125422642021-05-31 13:00:251729 days ago1622466025IN
0xf2D11bbF...8bbf2bb2b
0.35 ETH0.0063065536
Bid125422622021-05-31 13:00:121729 days ago1622466012IN
0xf2D11bbF...8bbf2bb2b
0.2 ETH0.0011231433.32293
Bid125422622021-05-31 13:00:121729 days ago1622466012IN
0xf2D11bbF...8bbf2bb2b
0.2 ETH0.0051486233.32333
Set Default Bid ...125420412021-05-31 12:10:401729 days ago1622463040IN
0xf2D11bbF...8bbf2bb2b
0 ETH0.0008140217
Creat Art125319232021-05-29 22:21:041731 days ago1622326864IN
0xf2D11bbF...8bbf2bb2b
0 ETH0.006189820
Bid123172852021-04-26 17:26:431764 days ago1619458003IN
0xf2D11bbF...8bbf2bb2b
1.8988 ETH0.0151402676
Bid123153112021-04-26 10:16:021764 days ago1619432162IN
0xf2D11bbF...8bbf2bb2b
1.7262 ETH0.0097614849
Bid123145722021-04-26 7:25:151764 days ago1619421915IN
0xf2D11bbF...8bbf2bb2b
1.5693 ETH0.009958750
Bid123145662021-04-26 7:22:261764 days ago1619421746IN
0xf2D11bbF...8bbf2bb2b
1.4267 ETH0.0101648747
Bid123145142021-04-26 7:12:001764 days ago1619421120IN
0xf2D11bbF...8bbf2bb2b
1.297 ETH0.0114646453
Bid123144932021-04-26 7:08:141764 days ago1619420894IN
0xf2D11bbF...8bbf2bb2b
1 ETH0.0029811943
Bid123144932021-04-26 7:08:141764 days ago1619420894IN
0xf2D11bbF...8bbf2bb2b
1 ETH0.0029839643.04
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
-134521102021-10-20 3:04:411587 days ago1634699081
0xf2D11bbF...8bbf2bb2b
0.265 ETH
-134521102021-10-20 3:04:411587 days ago1634699081
0xf2D11bbF...8bbf2bb2b
0.001 ETH
-134521102021-10-20 3:04:411587 days ago1634699081
0xf2D11bbF...8bbf2bb2b
0.009 ETH
-134521102021-10-20 3:04:411587 days ago1634699081
0xf2D11bbF...8bbf2bb2b
0.025 ETH
-134521102021-10-20 3:04:411587 days ago1634699081
0xf2D11bbF...8bbf2bb2b
0.0001 ETH
-125458192021-06-01 2:01:591729 days ago1622512919
0xf2D11bbF...8bbf2bb2b
0.215 ETH
-125458192021-06-01 2:01:591729 days ago1622512919
0xf2D11bbF...8bbf2bb2b
0.001 ETH
-125458192021-06-01 2:01:591729 days ago1622512919
0xf2D11bbF...8bbf2bb2b
0.009 ETH
-125458192021-06-01 2:01:591729 days ago1622512919
0xf2D11bbF...8bbf2bb2b
0.025 ETH
-125458192021-06-01 2:01:591729 days ago1622512919
0xf2D11bbF...8bbf2bb2b
0.0001 ETH
-125422912021-05-31 13:06:471729 days ago1622466407
0xf2D11bbF...8bbf2bb2b
0.165 ETH
-125422912021-05-31 13:06:471729 days ago1622466407
0xf2D11bbF...8bbf2bb2b
0.001 ETH
-125422912021-05-31 13:06:471729 days ago1622466407
0xf2D11bbF...8bbf2bb2b
0.009 ETH
-125422912021-05-31 13:06:471729 days ago1622466407
0xf2D11bbF...8bbf2bb2b
0.025 ETH
-125422912021-05-31 13:06:471729 days ago1622466407
0xf2D11bbF...8bbf2bb2b
0.0001 ETH
-125422682021-05-31 13:01:061729 days ago1622466066
0xf2D11bbF...8bbf2bb2b
0.115 ETH
-125422682021-05-31 13:01:061729 days ago1622466066
0xf2D11bbF...8bbf2bb2b
0.001 ETH
-125422682021-05-31 13:01:061729 days ago1622466066
0xf2D11bbF...8bbf2bb2b
0.009 ETH
-125422682021-05-31 13:01:061729 days ago1622466066
0xf2D11bbF...8bbf2bb2b
0.025 ETH
-125422682021-05-31 13:01:061729 days ago1622466066
0xf2D11bbF...8bbf2bb2b
0.05 ETH
-125422642021-05-31 13:00:251729 days ago1622466025
0xf2D11bbF...8bbf2bb2b
0.065 ETH
-125422642021-05-31 13:00:251729 days ago1622466025
0xf2D11bbF...8bbf2bb2b
0.001 ETH
-125422642021-05-31 13:00:251729 days ago1622466025
0xf2D11bbF...8bbf2bb2b
0.009 ETH
-125422642021-05-31 13:00:251729 days ago1622466025
0xf2D11bbF...8bbf2bb2b
0.025 ETH
-125422642021-05-31 13:00:251729 days ago1622466025
0xf2D11bbF...8bbf2bb2b
0.25 ETH
View All Internal Transactions
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0x68E09411...C849F5BfD
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
Artist

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU LGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-04-23
*/

// SPDX-License-Identifier: BUSL-1.1

pragma solidity ^0.5.16;

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

pragma solidity ^0.5.16;

contract IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function balanceOf(address owner) public view returns (uint256 balance);
    function ownerOf(uint256 tokenId) public view returns (address owner);
    function approve(address to, uint256 tokenId) public;
    function getApproved(uint256 tokenId) public view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) public;
    function isApprovedForAll(address owner, address operator) public view returns (bool);
    function transferFrom(address from, address to, uint256 tokenId) public;
    function safeTransferFrom(address from, address to, uint256 tokenId) public;
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public;
}

pragma solidity ^0.5.16;

contract IERC721Receiver {
    function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data)
    public returns (bytes4);
}

pragma solidity ^0.5.16;

library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b);
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0);
        uint256 c = a / b;
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a);
        uint256 c = a - b;
        return c;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a);
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0);
        return a % b;
    }
}

pragma solidity ^0.5.16;

library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}

pragma solidity ^0.5.16;

contract ERC165 is IERC165 {
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () internal {
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    function supportsInterface(bytes4 interfaceId) external view returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    function _registerInterface(bytes4 interfaceId) internal {
        require(interfaceId != 0xffffffff);
        _supportedInterfaces[interfaceId] = true;
    }
}

pragma solidity ^0.5.16;

contract ERC721 is ERC165, IERC721 {
    using SafeMath for uint256;
    using Address for address;

    bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;
    mapping (uint256 => address) private _tokenOwner;
    mapping (uint256 => address) private _tokenApprovals;
    mapping (address => uint256) private _ownedTokensCount;
    mapping (address => mapping (address => bool)) private _operatorApprovals;
    bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;

    constructor () public {
        _registerInterface(_INTERFACE_ID_ERC721);
    }

    function balanceOf(address owner) public view returns (uint256) {
        require(owner != address(0));
        return _ownedTokensCount[owner];
    }

    function ownerOf(uint256 tokenId) public view returns (address) {
        address owner = _tokenOwner[tokenId];
        require(owner != address(0));
        return owner;
    }

    function approve(address to, uint256 tokenId) public {
        address owner = ownerOf(tokenId);
        require(to != owner);
        require(msg.sender == owner || isApprovedForAll(owner, msg.sender));

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    function getApproved(uint256 tokenId) public view returns (address) {
        require(_exists(tokenId));
        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address to, bool approved) public {
        require(to != msg.sender);
        _operatorApprovals[msg.sender][to] = approved;
        emit ApprovalForAll(msg.sender, to, approved);
    }

    function isApprovedForAll(address owner, address operator) public view returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(address from, address to, uint256 tokenId) public {
        require(_isApprovedOrOwner(msg.sender, tokenId));
        _transferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public {
        transferFrom(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data));
    }

    function _exists(uint256 tokenId) internal view returns (bool) {
        address owner = _tokenOwner[tokenId];
        return owner != address(0);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
        address owner = ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    function _mint(address to, uint256 tokenId) internal {
        require(to != address(0));
        require(!_exists(tokenId));

        _tokenOwner[tokenId] = to;
        _ownedTokensCount[to] = _ownedTokensCount[to].add(1);

        emit Transfer(address(0), to, tokenId);
    }

    function _transferFrom(address from, address to, uint256 tokenId) internal {
        require(ownerOf(tokenId) == from);
        require(to != address(0));

        _clearApproval(tokenId);

        _ownedTokensCount[from] = _ownedTokensCount[from].sub(1);
        _ownedTokensCount[to] = _ownedTokensCount[to].add(1);
        _tokenOwner[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        internal returns (bool)
    {
        if (!to.isContract()) {
            return true;
        }

        bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data);
        return (retval == _ERC721_RECEIVED);
    }

    function _clearApproval(uint256 tokenId) private {
        if (_tokenApprovals[tokenId] != address(0)) {
            _tokenApprovals[tokenId] = address(0);
        }
    }

}

pragma solidity ^0.5.16;

contract IERC721Enumerable is IERC721 {
    function totalSupply() public view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId);
    function tokenByIndex(uint256 index) public view returns (uint256);
}

pragma solidity ^0.5.16;

contract ERC721Enumerable is ERC165, ERC721, IERC721Enumerable {

    mapping(address => uint256[]) private _ownedTokens;
    mapping(uint256 => uint256) private _ownedTokensIndex;
    uint256[] private _allTokens;
    mapping(uint256 => uint256) private _allTokensIndex;
    bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;

    constructor () public {
        _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);
    }

    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) {
        require(index < balanceOf(owner));
        return _ownedTokens[owner][index];
    }

    function totalSupply() public view returns (uint256) {
        return _allTokens.length;
    }

    function tokenByIndex(uint256 index) public view returns (uint256) {
        require(index < totalSupply());
        return _allTokens[index];
    }

    function _transferFrom(address from, address to, uint256 tokenId) internal {
        super._transferFrom(from, to, tokenId);
        _removeTokenFromOwnerEnumeration(from, tokenId);
        _addTokenToOwnerEnumeration(to, tokenId);
    }

    function _mint(address to, uint256 tokenId) internal {
        super._mint(to, tokenId);
        _addTokenToOwnerEnumeration(to, tokenId);
        _addTokenToAllTokensEnumeration(tokenId);
    }

    function _tokensOfOwner(address owner) internal view returns (uint256[] storage) {
        return _ownedTokens[owner];
    }

    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        _ownedTokensIndex[tokenId] = _ownedTokens[to].length;
        _ownedTokens[to].push(tokenId);
    }

    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        uint256 lastTokenIndex = _ownedTokens[from].length.sub(1);
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
            _ownedTokens[from][tokenIndex] = lastTokenId;
            _ownedTokensIndex[lastTokenId] = tokenIndex;
        }

        _ownedTokens[from].length--;
    }

    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {

        uint256 lastTokenIndex = _allTokens.length.sub(1);
        uint256 tokenIndex = _allTokensIndex[tokenId];
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId;
        _allTokensIndex[lastTokenId] = tokenIndex;

        _allTokens.length--;
        _allTokensIndex[tokenId] = 0;
    }
}

pragma solidity ^0.5.16;

contract IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}


pragma solidity ^0.5.16;

contract ERC721Metadata is ERC165, ERC721, IERC721Metadata {

    string private _name;
    string private _symbol;

    bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;

    constructor (string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;
        _registerInterface(_INTERFACE_ID_ERC721_METADATA);
    }

    function name() external view returns (string memory) {
        return _name;
    }

    function symbol() external view returns (string memory) {
        return _symbol;
    }

}

pragma solidity ^0.5.16;

contract ERC721Full is ERC721, ERC721Enumerable, ERC721Metadata {
    constructor (string memory name, string memory symbol) public ERC721Metadata(name, symbol) {
    }
}
pragma solidity ^0.5.16;

contract IRadicalNFT is IERC165 {
    function round(uint256 _tokenid) external view returns (uint256 _round);
    function price(uint256 _round) public returns (uint256 _price);
    function getBidStartTime(uint256 tokenid)external view returns(uint64);
    function bid(address inviterAddress, uint256 tokenid) external payable;
}
contract RadicalNFT is ERC165,IRadicalNFT {

    bytes4 private constant _INTERFACE_ID_RADICALNFT = 0x9203c74e;
 //       bytes4(keccak256('round(uint256)')) ^
 //       bytes4(keccak256('price(uint256)')) ^
 //       bytes4(keccak256('getBidStartTime(uint256)')) ^
 //       bytes4(keccak256('bid(address,uint256)'));

    constructor () public {
        _registerInterface(_INTERFACE_ID_RADICALNFT);
    }
}

contract Ownable {
  address public owner;

    constructor() public {
    owner = msg.sender;
  }


  modifier onlyOwner() {
    require(msg.sender == owner);
    _;
  }

  function transferOwnership(address newOwner) onlyOwner public {
    if (newOwner != address(0)) {
      owner = newOwner;
    }
  }

}

contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor ()public {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}
contract ArtistBase is Ownable,ERC721Full,RadicalNFT,ReentrancyGuard {
    
    using SafeMath for uint256;
    
    bool public paused = false;
    address public cfoAddress;
    address public cooAddress;
    
    address public bonusPoolAddress;
    address public devPoolAddress;  
    uint256[] private priceList;



    /// @dev The main art struct. 
    struct Art {
        uint256 id;
        uint64 bidStartTime;
        uint64 round;
        //bid issue privileges
        bool bid;
        string ipfs;
    }


    uint256 public lastBidTime=0;
    Art[]  arts;

    //current id 
    uint256 curid;
    
    uint256 public bidInterval;
    uint256 public defaultBidTokenId;
    
    modifier onlyCLevel() {
        require(
            msg.sender == cooAddress 
        );
        _;
    }
    modifier whenNotPaused() {
        require(!paused);
        _;
    }

    /// @dev Modifier to allow actions only when the contract IS paused
    modifier whenPaused {
        require(paused);
        _;
    }


    function pause() external onlyCLevel whenNotPaused {
        paused = true;
    }

    function unpause() public onlyCLevel whenPaused {
        paused = false;
    }

    function creatArt(
        bool bidflag,
        string calldata ipfsaddr,
        uint64 startTime

    )
        external
        whenNotPaused
        returns (uint256)
    {
         require(msg.sender == owner, "ERR_NOT_OWNER");


        if(lastBidTime==0){
            bidflag=false;
        }else if((now-lastBidTime)<bidInterval){
            bidflag=false;
        }else{
            if(bidflag){
                lastBidTime=now;
            }
        }

        Art memory _art = Art({
            id: curid,
            bidStartTime: startTime,
            round: 0,
            bid: bidflag,
            ipfs: ipfsaddr

        });
        curid = arts.push(_art) ;

        require(curid == uint256(uint32(curid)));

        _mint(owner, curid-1);

        return curid;
    }
    
    function tokenURI(uint256 tokenId) external view returns (string memory) {
        require(_exists(tokenId));
        return arts[tokenId].ipfs;
    }

    function checkArtBidable(uint256 tokenId) external view returns (bool) {
        require(_exists(tokenId));
        return arts[tokenId].bid;
    }

    function openBidTokenAuthority() 
        external
        onlyCLevel
        {
            lastBidTime=now - bidInterval;
        }

    function closeBidTokenAuthority() 
        external
        onlyCLevel
        {
            lastBidTime=0;
        }

    function setBidInterval(uint256 interval) 
        external
        onlyCLevel
        {
            bidInterval=interval;
        }
        

    function changeArtData(uint256 tokenid,string calldata ipfs) 
        external
        onlyCLevel
        {
            require(tokenid<curid, "ERR_ARTID_TOOBIG");
            arts[tokenid].ipfs=ipfs;
        }
    function editArtData(uint256 tokenid,string calldata ipfs) 
        external
        onlyOwner
        {
            require(tokenid<curid, "ERR_ARTID_TOOBIG");
            require(arts[tokenid].bidStartTime>now,"ERR_ALREADY_START");
            arts[tokenid].ipfs=ipfs;
        }

    function checkBidable() view
        external
        returns (bool){
        
            if(lastBidTime==0){
                return false;
            }else if((now-lastBidTime)<bidInterval){
                return false;
            }else{
                return true;
            }
        
        }
    function getLatestTokenID() view
        external
        returns (uint256){
            return curid;
        }
        
    function setBidStartTime(uint256 tokenid,uint64 startTime) 
        external
        onlyOwner
        {
            require(tokenid<curid, "ERR_TOKEN_ID_ERROR");
            require(arts[tokenid].bidStartTime>now,"ERR_ALREADY_START");
            arts[tokenid].bidStartTime=startTime;
        }
    function getBidStartTime(uint256 tokenid) view
        external
        returns(uint64)
        {
            require(tokenid<curid, "ERR_TOKEN_ID_ERROR");
            return arts[tokenid].bidStartTime;
        }
    function setDefaultBidId(uint256 tokenid) 
        external
        onlyOwner
        {
            require(tokenid<curid, "ERR_TOKEN_ID_ERROR");

            defaultBidTokenId=tokenid;
        }
        
    function round(uint256 tokenid) view 
        external
        returns (uint256){
            return arts[tokenid].round;
        }

    event LOG_AUCTION(
        uint256  artid,
        uint256  lastPrice,
        uint256  curPrice,
        uint256  bid,
        address  lastOwner,
        address  buyer,
        address  inviterAddress
    );
    //bid token address
    IERC20 public bidtoken;
    function () external
    whenNotPaused
     payable {
        _bid(devPoolAddress,defaultBidTokenId);
         
    }
   
      function bid(address inviterAddress, uint256 artid) payable
    whenNotPaused
     public {
        _bid(inviterAddress,artid); 
     }
     
     function price(uint256 _round) public
     returns (uint256)
     {
         if(_round>priceList.length){
             uint256 lastValue=priceList[priceList.length-1];
             for(uint256 i=priceList.length;i<_round;i++){
                 lastValue=lastValue.mul(11).div(10);
                 priceList.push(lastValue);
             }
             return lastValue;
         }
         return priceList[_round-1];
     }     
     
     function initRoundPrice() internal
     returns (uint256)
     {
         uint256 lastValue=0;
         for(uint256 i=1;i<12;i++){
            if(i<11){
                lastValue=i.mul(0.05 ether);
            }else{
                lastValue=lastValue.mul(11).div(10);
            }
            priceList.push(lastValue);
         }
     }
    
    function _bid(address inviterAddress, uint256 artid) nonReentrant internal
     {
         require(artid<curid, "ERR_ARTID_TOOBIG");  
         address lastOwner=ownerOf(artid);
         require(lastOwner!=msg.sender, "ERR_CAN_NOT_PURCHASE_OWN_ART");       
         require(arts[artid].bidStartTime<now,"ERR_BID_NOT_START_YET");
         uint256 r=arts[artid].round;
         
         if(r==0){
             uint256 payprice=0.05 ether;
             require(msg.value>=payprice, "ERR_NOT_ENOUGH_MONEY");
              msg.sender.send(msg.value.sub(payprice));
              address(uint160(owner)).send(payprice);
              uint256 x=0;
              if(arts[artid].bid){
                  x=50 ether;
                  if(bidtoken.balanceOf(cfoAddress)>=x){
                      bidtoken.transferFrom(cfoAddress,msg.sender,x);                  
                  }else{
                      x=0;
                  }
             }
             arts[artid].round++;
            _transferFrom(lastOwner, msg.sender, artid);

            emit LOG_AUCTION(artid, payprice,payprice,x,lastOwner,msg.sender,inviterAddress );
            return;
         }
        uint256 curprice=price(r);
        uint256 payprice=price(r+1);
        require(msg.value>=payprice, "ERR_NOT_ENOUGH_MONEY");
        
         //refund extra money
         msg.sender.send(msg.value-payprice);
         
         uint256 smoney=payprice-curprice;
         
         //we don't check any send process,only 2300 gas provided
         address(uint160(owner)).send(smoney.mul(5).div(10));

         address(uint160(bonusPoolAddress)).send(smoney.mul(18).div(100));
        
         address(uint160(inviterAddress)).send(smoney.mul(2).div(100));
        
         address(uint160(lastOwner)).send(smoney.mul(30).div(100).add(curprice));

         uint256 x=0;
         if(arts[artid].bid){
             //r is last round
            x=r<10?50 ether:((r+1).mul(5 ether));
            if(bidtoken.balanceOf(cfoAddress)>=x){
                bidtoken.transferFrom(cfoAddress,msg.sender,x);
            }else{
                x=0;
            }
         }

         arts[artid].round++;
    
          _transferFrom(lastOwner, msg.sender, artid);

        emit LOG_AUCTION(artid, curprice,payprice,x,lastOwner,msg.sender,inviterAddress );

    }

}

interface IERC20 {
    function totalSupply() external view returns (uint);
    function balanceOf(address account) external view returns (uint);
    function transfer(address recipient, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint amount) external returns (bool);
}
contract Artist is ArtistBase{

    constructor(string memory _name,string memory _symbol,address artistaddr,
    address auditor,address _bid,address _bonusPool,address _devPool) ERC721Full(_name, _symbol) public {
        bonusPoolAddress=_bonusPool;
        devPoolAddress=_devPool;
        bidtoken=IERC20(_bid);
        curid=0;
        owner=artistaddr;
        cfoAddress=msg.sender;
        cooAddress=auditor;
        bidInterval=30 days;
        defaultBidTokenId=0;
        initRoundPrice();
    }
    function setCOO(address _newCOO) external onlyCLevel {
        require(_newCOO != address(0));

        cooAddress = _newCOO;
    }
    function rescueETH(address _address) external onlyCLevel {
        address(uint160(_address)).transfer(address(this).balance);
  }
 
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"address","name":"artistaddr","type":"address"},{"internalType":"address","name":"auditor","type":"address"},{"internalType":"address","name":"_bid","type":"address"},{"internalType":"address","name":"_bonusPool","type":"address"},{"internalType":"address","name":"_devPool","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"artid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"curPrice","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bid","type":"uint256"},{"indexed":false,"internalType":"address","name":"lastOwner","type":"address"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"address","name":"inviterAddress","type":"address"}],"name":"LOG_AUCTION","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"inviterAddress","type":"address"},{"internalType":"uint256","name":"artid","type":"uint256"}],"name":"bid","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"bidInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bidtoken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"bonusPoolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"cfoAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenid","type":"uint256"},{"internalType":"string","name":"ipfs","type":"string"}],"name":"changeArtData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"checkArtBidable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"checkBidable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"closeBidTokenAuthority","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"cooAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"bool","name":"bidflag","type":"bool"},{"internalType":"string","name":"ipfsaddr","type":"string"},{"internalType":"uint64","name":"startTime","type":"uint64"}],"name":"creatArt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"defaultBidTokenId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"devPoolAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenid","type":"uint256"},{"internalType":"string","name":"ipfs","type":"string"}],"name":"editArtData","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenid","type":"uint256"}],"name":"getBidStartTime","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getLatestTokenID","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"lastBidTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"openBidTokenAuthority","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_round","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"rescueETH","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenid","type":"uint256"}],"name":"round","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"setBidInterval","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenid","type":"uint256"},{"internalType":"uint64","name":"startTime","type":"uint64"}],"name":"setBidStartTime","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_newCOO","type":"address"}],"name":"setCOO","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"tokenid","type":"uint256"}],"name":"setDefaultBidId","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

0x60806040526000600d60006101000a81548160ff02191690831515021790555060006012553480156200003157600080fd5b5060405162004e4e38038062004e4e833981810160405260e08110156200005757600080fd5b81019080805160405193929190846401000000008211156200007857600080fd5b838201915060208201858111156200008f57600080fd5b8251866001820283011164010000000082111715620000ad57600080fd5b8083526020830192505050908051906020019080838360005b83811015620000e3578082015181840152602081019050620000c6565b50505050905090810190601f168015620001115780820380516001836020036101000a031916815260200191505b50604052602001805160405193929190846401000000008211156200013557600080fd5b838201915060208201858111156200014c57600080fd5b82518660018202830111640100000000821117156200016a57600080fd5b8083526020830192505050908051906020019080838360005b83811015620001a057808201518184015260208101905062000183565b50505050905090810190601f168015620001ce5780820380516001836020036101000a031916815260200191505b50604052602001805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505086868181336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002666301ffc9a760e01b620004c160201b60201c565b6200027e6380ac58cd60e01b620004c160201b60201c565b6200029663780e9d6360e01b620004c160201b60201c565b81600a9080519060200190620002ae92919062000689565b5080600b9080519060200190620002c792919062000689565b50620002e0635b5e139f60e01b620004c160201b60201c565b50505050620002fc639203c74e60e01b620004c160201b60201c565b6001600c8190555081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601481905550846000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062278d006015819055506000601681905550620004b36200056160201b60201c565b505050505050505062000738565b63ffffffff60e01b817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161415620004f557600080fd5b6001806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600080600090506000600190505b600c8110156200061e57600b811015620005ac57620005a466b1a2bc2ec50000826200062360201b62003a331790919060201c565b9150620005e4565b620005e1600a620005cd600b856200062360201b62003a331790919060201c565b6200066160201b62003a6d1790919060201c565b91505b601182908060018154018082558091505090600182039060005260206000200160009091929091909150555080806001019150506200056f565b505090565b6000808314156200063857600090506200065b565b60008284029050828482816200064a57fe5b04146200065657600080fd5b809150505b92915050565b60008082116200067057600080fd5b60008284816200067c57fe5b0490508091505092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006cc57805160ff1916838001178555620006fd565b82800160010185558215620006fd579182015b82811115620006fc578251825591602001919060010190620006df565b5b5090506200070c919062000710565b5090565b6200073591905b808211156200073157600081600090555060010162000717565b5090565b90565b61470680620007486000396000f3fe60806040526004361061027d5760003560e01c8063642ab4b11161014f578063a8d48680116100c1578063cf59e7051161007a578063cf59e70514611190578063d9a4cda7146111bb578063da95f1d41461121e578063e985e9c51461124d578063f0588e7c146112d6578063f2fde38b146112ed5761027d565b8063a8d4868014610ef6578063b046229d14610f31578063b047fb5014610f5c578063b0b7d30c14610fb3578063b88d4fde14610fca578063c87b56dd146110dc5761027d565b806384efd6751161011357806384efd67514610ca05780638a9bfa0314610cf75780638da5cb5b14610d8757806395d89b4114610dde578063a22cb46514610e6e578063a622fc7314610ecb5761027d565b8063642ab4b114610b4f5780636604a6a314610b7a57806370a0823114610bd157806381c0f3da14610c365780638456cb5914610c895761027d565b806326a49e37116101f357806346834cca116101ac57806346834cca146109135780634f6ccce7146109cd57806359d667a514610a1c5780635a4d8e5414610a6a5780635c975abb14610aa55780636352211e14610ad45761027d565b806326a49e37146107235780632ba73c15146107725780632f745c59146107c357806334d5f37b146108325780633f4ba83a1461088157806342842e0e146108985761027d565b8063095ea7b311610245578063095ea7b3146104ec5780630d64ca031461054757806318160ddd14610596578063189db8c6146105c157806323b872dd1461061857806325c5edf4146106935761027d565b806301ffc9a7146102c757806304824e70146103395780630519ce791461038a57806306fdde03146103e1578063081812fc14610471575b600d60009054906101000a900460ff161561029757600080fd5b6102c5601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660165461133e565b005b3480156102d357600080fd5b5061031f600480360360208110156102ea57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506121a6565b604051808215151515815260200191505060405180910390f35b34801561034557600080fd5b506103886004803603602081101561035c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061220e565b005b34801561039657600080fd5b5061039f6122b2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103ed57600080fd5b506103f66122d8565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561043657808201518184015260208101905061041b565b50505050905090810190601f1680156104635780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561047d57600080fd5b506104aa6004803603602081101561049457600080fd5b810190808035906020019092919050505061237a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f857600080fd5b506105456004803603604081101561050f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123c9565b005b34801561055357600080fd5b506105946004803603604081101561056a57600080fd5b8101908080359060200190929190803567ffffffffffffffff16906020019092919050505061250a565b005b3480156105a257600080fd5b506105ab6126d4565b6040518082815260200191505060405180910390f35b3480156105cd57600080fd5b506105d66126e1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561062457600080fd5b506106916004803603606081101561063b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612707565b005b34801561069f57600080fd5b50610721600480360360408110156106b657600080fd5b8101908080359060200190929190803590602001906401000000008111156106dd57600080fd5b8201836020820111156106ef57600080fd5b8035906020019184600183028401116401000000008311171561071157600080fd5b909192939192939050505061272a565b005b34801561072f57600080fd5b5061075c6004803603602081101561074657600080fd5b81019080803590602001909291905050506128de565b6040518082815260200191505060405180910390f35b34801561077e57600080fd5b506107c16004803603602081101561079557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129b3565b005b3480156107cf57600080fd5b5061081c600480360360408110156107e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612a8b565b6040518082815260200191505060405180910390f35b34801561083e57600080fd5b5061086b6004803603602081101561085557600080fd5b8101908080359060200190929190505050612afe565b6040518082815260200191505060405180910390f35b34801561088d57600080fd5b50610896612b44565b005b3480156108a457600080fd5b50610911600480360360608110156108bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612bd4565b005b34801561091f57600080fd5b506109b76004803603606081101561093657600080fd5b810190808035151590602001909291908035906020019064010000000081111561095f57600080fd5b82018360208201111561097157600080fd5b8035906020019184600183028401116401000000008311171561099357600080fd5b9091929391929390803567ffffffffffffffff169060200190929190505050612bf4565b6040518082815260200191505060405180910390f35b3480156109d957600080fd5b50610a06600480360360208110156109f057600080fd5b8101908080359060200190929190505050612eca565b6040518082815260200191505060405180910390f35b610a6860048036036040811015610a3257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612efe565b005b348015610a7657600080fd5b50610aa360048036036020811015610a8d57600080fd5b8101908080359060200190929190505050612f26565b005b348015610ab157600080fd5b50610aba612f8a565b604051808215151515815260200191505060405180910390f35b348015610ae057600080fd5b50610b0d60048036036020811015610af757600080fd5b8101908080359060200190929190505050612f9d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b5b57600080fd5b50610b64613019565b6040518082815260200191505060405180910390f35b348015610b8657600080fd5b50610b8f61301f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bdd57600080fd5b50610c2060048036036020811015610bf457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613045565b6040518082815260200191505060405180910390f35b348015610c4257600080fd5b50610c6f60048036036020811015610c5957600080fd5b81019080803590602001909291905050506130c7565b604051808215151515815260200191505060405180910390f35b348015610c9557600080fd5b50610c9e61310e565b005b348015610cac57600080fd5b50610cb561319f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d0357600080fd5b50610d8560048036036040811015610d1a57600080fd5b810190808035906020019092919080359060200190640100000000811115610d4157600080fd5b820183602082011115610d5357600080fd5b80359060200191846001830284011164010000000083111715610d7557600080fd5b90919293919293905050506131c5565b005b348015610d9357600080fd5b50610d9c6132c9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dea57600080fd5b50610df36132ee565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e33578082015181840152602081019050610e18565b50505050905090810190601f168015610e605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e7a57600080fd5b50610ec960048036036040811015610e9157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613390565b005b348015610ed757600080fd5b50610ee06134ca565b6040518082815260200191505060405180910390f35b348015610f0257600080fd5b50610f2f60048036036020811015610f1957600080fd5b81019080803590602001909291905050506134d0565b005b348015610f3d57600080fd5b50610f466135aa565b6040518082815260200191505060405180910390f35b348015610f6857600080fd5b50610f716135b4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610fbf57600080fd5b50610fc86135da565b005b348015610fd657600080fd5b506110da60048036036080811015610fed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561105457600080fd5b82018360208201111561106657600080fd5b8035906020019184600183028401116401000000008311171561108857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613641565b005b3480156110e857600080fd5b50611115600480360360208110156110ff57600080fd5b8101908080359060200190929190505050613667565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561115557808201518184015260208101905061113a565b50505050905090810190601f1680156111825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561119c57600080fd5b506111a5613739565b6040518082815260200191505060405180910390f35b3480156111c757600080fd5b506111f4600480360360208110156111de57600080fd5b810190808035906020019092919050505061373f565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b34801561122a57600080fd5b506112336137f2565b604051808215151515815260200191505060405180910390f35b34801561125957600080fd5b506112bc6004803603604081101561127057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613826565b604051808215151515815260200191505060405180910390f35b3480156112e257600080fd5b506112eb6138ba565b005b3480156112f957600080fd5b5061133c6004803603602081101561131057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061391e565b005b6002600c5414156113b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600c819055506014548110611436576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552525f41525449445f544f4f4249470000000000000000000000000000000081525060200191505060405180910390fd5b600061144182612f9d565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552525f43414e5f4e4f545f50555243484153455f4f574e5f4152540000000081525060200191505060405180910390fd5b42601383815481106114f357fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1610611596576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4552525f4249445f4e4f545f53544152545f594554000000000000000000000081525060200191505060405180910390fd5b6000601383815481106115a557fe5b906000526020600020906003020160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1690506000811415611aed57600066b1a2bc2ec50000905080341015611662576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4552525f4e4f545f454e4f5547485f4d4f4e455900000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc61168f83346139ef90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050505060008090506013858154811061171357fe5b906000526020600020906003020160010160109054906101000a900460ff161561198b576802b5e3af16b1880000905080601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561180557600080fd5b505afa158015611819573d6000803e3d6000fd5b505050506040513d602081101561182f57600080fd5b81019080805190602001909291905050501061198557601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561194457600080fd5b505af1158015611958573d6000803e3d6000fd5b505050506040513d602081101561196e57600080fd5b81019080805190602001909291905050505061198a565b600090505b5b6013858154811061199857fe5b9060005260206000209060030201600101600881819054906101000a900467ffffffffffffffff168092919060010191906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506119f9843387613a0f565b7fdbc7bf8977d24ca9350fbf7da682a8d3bf6c09e8ec388302d894cd222bf664428583848488338c604051808881526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390a15050505061219a565b6000611af8826128de565b90506000611b08600184016128de565b905080341015611b80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4552525f4e4f545f454e4f5547485f4d4f4e455900000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8234039081150290604051600060405180830381858888f1935050505050600082820390506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611c21600a611c13600586613a3390919063ffffffff16565b613a6d90919063ffffffff16565b9081150290604051600060405180830381858888f1935050505050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611c9f6064611c91601286613a3390919063ffffffff16565b613a6d90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050508673ffffffffffffffffffffffffffffffffffffffff166108fc611cfb6064611ced600286613a3390919063ffffffff16565b613a6d90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050508473ffffffffffffffffffffffffffffffffffffffff166108fc611d6985611d5b6064611d4d601e88613a3390919063ffffffff16565b613a6d90919063ffffffff16565b613a9390919063ffffffff16565b9081150290604051600060405180830381858888f1935050505050600080905060138781548110611d9657fe5b906000526020600020906003020160010160109054906101000a900460ff161561203a57600a8510611de557611de0674563918244f4000060018701613a3390919063ffffffff16565b611df0565b6802b5e3af16b18800005b905080601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611eb457600080fd5b505afa158015611ec8573d6000803e3d6000fd5b505050506040513d6020811015611ede57600080fd5b81019080805190602001909291905050501061203457601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611ff357600080fd5b505af1158015612007573d6000803e3d6000fd5b505050506040513d602081101561201d57600080fd5b810190808051906020019092919050505050612039565b600090505b5b6013878154811061204757fe5b9060005260206000209060030201600101600881819054906101000a900467ffffffffffffffff168092919060010191906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506120a8863389613a0f565b7fdbc7bf8977d24ca9350fbf7da682a8d3bf6c09e8ec388302d894cd222bf66442878585848a338e604051808881526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390a15050505050505b6001600c819055505050565b600060016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461226857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156122ae573d6000803e3d6000fd5b5050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123705780601f1061234557610100808354040283529160200191612370565b820191906000526020600020905b81548152906001019060200180831161235357829003601f168201915b5050505050905090565b600061238582613ab2565b61238e57600080fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006123d482612f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561240f57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061244f575061244e8133613826565b5b61245857600080fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461256357600080fd5b60145482106125da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4552525f544f4b454e5f49445f4552524f52000000000000000000000000000081525060200191505060405180910390fd5b42601383815481106125e857fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff161161268b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4552525f414c52454144595f535441525400000000000000000000000000000081525060200191505060405180910390fd5b806013838154811061269957fe5b906000526020600020906003020160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b6000600880549050905090565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6127113382613b24565b61271a57600080fd5b612725838383613a0f565b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461278357600080fd5b60145483106127fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552525f41525449445f544f4f4249470000000000000000000000000000000081525060200191505060405180910390fd5b426013848154811061280857fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16116128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4552525f414c52454144595f535441525400000000000000000000000000000081525060200191505060405180910390fd5b8181601385815481106128ba57fe5b906000526020600020906003020160020191906128d892919061453b565b50505050565b600060118054905082111561299057600060116001601180549050038154811061290457fe5b90600052602060002001549050600060118054905090505b838110156129865761294b600a61293d600b85613a3390919063ffffffff16565b613a6d90919063ffffffff16565b91506011829080600181540180825580915050906001820390600052602060002001600090919290919091505550808060010191505061291c565b50809150506129ae565b601160018303815481106129a057fe5b906000526020600020015490505b919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a0d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a4757600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612a9683613045565b8210612aa157600080fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110612aeb57fe5b9060005260206000200154905092915050565b600060138281548110612b0d57fe5b906000526020600020906003020160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b9e57600080fd5b600d60009054906101000a900460ff16612bb757600080fd5b6000600d60006101000a81548160ff021916908315150217905550565b612bef83838360405180602001604052806000815250613641565b505050565b6000600d60009054906101000a900460ff1615612c1057600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612cd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4552525f4e4f545f4f574e45520000000000000000000000000000000000000081525060200191505060405180910390fd5b60006012541415612ce65760009450612d0d565b60155460125442031015612cfd5760009450612d0c565b8415612d0b57426012819055505b5b5b612d156145bb565b6040518060a0016040528060145481526020018467ffffffffffffffff168152602001600067ffffffffffffffff168152602001871515815260200186868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152509050601381908060018154018082558091505090600182039060005260206000209060030201600090919290919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548160ff0219169083151502179055506080820151816002019080519060200190612e6d929190614600565b50505060148190555060145463ffffffff1660145414612e8c57600080fd5b612ebc6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160145403613bb9565b601454915050949350505050565b6000612ed46126d4565b8210612edf57600080fd5b60088281548110612eec57fe5b90600052602060002001549050919050565b600d60009054906101000a900460ff1615612f1857600080fd5b612f22828261133e565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f8057600080fd5b8060158190555050565b600d60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561301057600080fd5b80915050919050565b60125481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561308057600080fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006130d282613ab2565b6130db57600080fd5b601382815481106130e857fe5b906000526020600020906003020160010160109054906101000a900460ff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461316857600080fd5b600d60009054906101000a900460ff161561318257600080fd5b6001600d60006101000a81548160ff021916908315150217905550565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461321f57600080fd5b6014548310613296576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552525f41525449445f544f4f4249470000000000000000000000000000000081525060200191505060405180910390fd5b8181601385815481106132a557fe5b906000526020600020906003020160020191906132c392919061453b565b50505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156133865780601f1061335b57610100808354040283529160200191613386565b820191906000526020600020905b81548152906001019060200180831161336957829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133c957600080fd5b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b60165481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461352957600080fd5b60145481106135a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4552525f544f4b454e5f49445f4552524f52000000000000000000000000000081525060200191505060405180910390fd5b8060168190555050565b6000601454905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461363457600080fd5b6015544203601281905550565b61364c848484612707565b61365884848484613bda565b61366157600080fd5b50505050565b606061367282613ab2565b61367b57600080fd5b6013828154811061368857fe5b90600052602060002090600302016002018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561372d5780601f106137025761010080835404028352916020019161372d565b820191906000526020600020905b81548152906001019060200180831161371057829003601f168201915b50505050509050919050565b60155481565b600060145482106137b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4552525f544f4b454e5f49445f4552524f52000000000000000000000000000081525060200191505060405180910390fd5b601382815481106137c557fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff169050919050565b60008060125414156138075760009050613823565b6015546012544203101561381e5760009050613823565b600190505b90565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461391457600080fd5b6000601281905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461397757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146139ec57806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000828211156139fe57600080fd5b600082840390508091505092915050565b613a1a838383613dc3565b613a248382614024565b613a2e82826141c2565b505050565b600080831415613a465760009050613a67565b6000828402905082848281613a5757fe5b0414613a6257600080fd5b809150505b92915050565b6000808211613a7b57600080fd5b6000828481613a8657fe5b0490508091505092915050565b600080828401905083811015613aa857600080fd5b8091505092915050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600080613b3083612f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613b9f57508373ffffffffffffffffffffffffffffffffffffffff16613b878461237a565b73ffffffffffffffffffffffffffffffffffffffff16145b80613bb05750613baf8185613826565b5b91505092915050565b613bc38282614289565b613bcd82826141c2565b613bd68161441e565b5050565b6000613bfb8473ffffffffffffffffffffffffffffffffffffffff1661446a565b613c085760019050613dbb565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613ce3578082015181840152602081019050613cc8565b50505050905090810190601f168015613d105780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015613d3257600080fd5b505af1158015613d46573d6000803e3d6000fd5b505050506040513d6020811015613d5c57600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16613de382612f9d565b73ffffffffffffffffffffffffffffffffffffffff1614613e0357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e3d57600080fd5b613e468161447d565b613e996001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ef90919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f2f6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a9390919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061407c6001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506139ef90919063ffffffff16565b9050600060076000848152602001908152602001600020549050818114614169576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106140e957fe5b9060005260206000200154905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061414157fe5b9060005260206000200181905550816007600083815260200190815260200160002081905550505b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036141bb9190614680565b5050505050565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506007600083815260200190815260200160002081905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156142c357600080fd5b6142cc81613ab2565b156142d657600080fd5b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061437b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a9390919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146145385760006003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061457c57803560ff19168380011785556145aa565b828001600101855582156145aa579182015b828111156145a957823582559160200191906001019061458e565b5b5090506145b791906146ac565b5090565b6040518060a0016040528060008152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600015158152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061464157805160ff191683800117855561466f565b8280016001018555821561466f579182015b8281111561466e578251825591602001919060010190614653565b5b50905061467c91906146ac565b5090565b8154818355818111156146a7578183600052602060002091820191016146a691906146ac565b5b505050565b6146ce91905b808211156146ca5760008160009055506001016146b2565b5090565b9056fea265627a7a7231582012f40e8f6873a77aa4d62bc4fd44305ab46de5bc66b1f9135665e3fd1d2fba3a64736f6c6343000510003200000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001200000000000000000000000002294fdbd30e03ef6ea9285c316a4af18202e31fa0000000000000000000000008888888888646b186b3b7cdc989411e8cd5a2ba200000000000000000000000000000000000045166c45af0fc6e4cf31d9e14b9a0000000000000000000000009b893781ee099ea1d3831336cd38f91af2c5f36c000000000000000000000000d979f42b2ff6151ad32c8f96bbcee68d1f8eef9200000000000000000000000000000000000000000000000000000000000000086b6566616e34303400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084b4546414e343034000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061027d5760003560e01c8063642ab4b11161014f578063a8d48680116100c1578063cf59e7051161007a578063cf59e70514611190578063d9a4cda7146111bb578063da95f1d41461121e578063e985e9c51461124d578063f0588e7c146112d6578063f2fde38b146112ed5761027d565b8063a8d4868014610ef6578063b046229d14610f31578063b047fb5014610f5c578063b0b7d30c14610fb3578063b88d4fde14610fca578063c87b56dd146110dc5761027d565b806384efd6751161011357806384efd67514610ca05780638a9bfa0314610cf75780638da5cb5b14610d8757806395d89b4114610dde578063a22cb46514610e6e578063a622fc7314610ecb5761027d565b8063642ab4b114610b4f5780636604a6a314610b7a57806370a0823114610bd157806381c0f3da14610c365780638456cb5914610c895761027d565b806326a49e37116101f357806346834cca116101ac57806346834cca146109135780634f6ccce7146109cd57806359d667a514610a1c5780635a4d8e5414610a6a5780635c975abb14610aa55780636352211e14610ad45761027d565b806326a49e37146107235780632ba73c15146107725780632f745c59146107c357806334d5f37b146108325780633f4ba83a1461088157806342842e0e146108985761027d565b8063095ea7b311610245578063095ea7b3146104ec5780630d64ca031461054757806318160ddd14610596578063189db8c6146105c157806323b872dd1461061857806325c5edf4146106935761027d565b806301ffc9a7146102c757806304824e70146103395780630519ce791461038a57806306fdde03146103e1578063081812fc14610471575b600d60009054906101000a900460ff161561029757600080fd5b6102c5601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660165461133e565b005b3480156102d357600080fd5b5061031f600480360360208110156102ea57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506121a6565b604051808215151515815260200191505060405180910390f35b34801561034557600080fd5b506103886004803603602081101561035c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061220e565b005b34801561039657600080fd5b5061039f6122b2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156103ed57600080fd5b506103f66122d8565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561043657808201518184015260208101905061041b565b50505050905090810190601f1680156104635780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561047d57600080fd5b506104aa6004803603602081101561049457600080fd5b810190808035906020019092919050505061237a565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156104f857600080fd5b506105456004803603604081101561050f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506123c9565b005b34801561055357600080fd5b506105946004803603604081101561056a57600080fd5b8101908080359060200190929190803567ffffffffffffffff16906020019092919050505061250a565b005b3480156105a257600080fd5b506105ab6126d4565b6040518082815260200191505060405180910390f35b3480156105cd57600080fd5b506105d66126e1565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561062457600080fd5b506106916004803603606081101561063b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612707565b005b34801561069f57600080fd5b50610721600480360360408110156106b657600080fd5b8101908080359060200190929190803590602001906401000000008111156106dd57600080fd5b8201836020820111156106ef57600080fd5b8035906020019184600183028401116401000000008311171561071157600080fd5b909192939192939050505061272a565b005b34801561072f57600080fd5b5061075c6004803603602081101561074657600080fd5b81019080803590602001909291905050506128de565b6040518082815260200191505060405180910390f35b34801561077e57600080fd5b506107c16004803603602081101561079557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129b3565b005b3480156107cf57600080fd5b5061081c600480360360408110156107e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612a8b565b6040518082815260200191505060405180910390f35b34801561083e57600080fd5b5061086b6004803603602081101561085557600080fd5b8101908080359060200190929190505050612afe565b6040518082815260200191505060405180910390f35b34801561088d57600080fd5b50610896612b44565b005b3480156108a457600080fd5b50610911600480360360608110156108bb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612bd4565b005b34801561091f57600080fd5b506109b76004803603606081101561093657600080fd5b810190808035151590602001909291908035906020019064010000000081111561095f57600080fd5b82018360208201111561097157600080fd5b8035906020019184600183028401116401000000008311171561099357600080fd5b9091929391929390803567ffffffffffffffff169060200190929190505050612bf4565b6040518082815260200191505060405180910390f35b3480156109d957600080fd5b50610a06600480360360208110156109f057600080fd5b8101908080359060200190929190505050612eca565b6040518082815260200191505060405180910390f35b610a6860048036036040811015610a3257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612efe565b005b348015610a7657600080fd5b50610aa360048036036020811015610a8d57600080fd5b8101908080359060200190929190505050612f26565b005b348015610ab157600080fd5b50610aba612f8a565b604051808215151515815260200191505060405180910390f35b348015610ae057600080fd5b50610b0d60048036036020811015610af757600080fd5b8101908080359060200190929190505050612f9d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610b5b57600080fd5b50610b64613019565b6040518082815260200191505060405180910390f35b348015610b8657600080fd5b50610b8f61301f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610bdd57600080fd5b50610c2060048036036020811015610bf457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613045565b6040518082815260200191505060405180910390f35b348015610c4257600080fd5b50610c6f60048036036020811015610c5957600080fd5b81019080803590602001909291905050506130c7565b604051808215151515815260200191505060405180910390f35b348015610c9557600080fd5b50610c9e61310e565b005b348015610cac57600080fd5b50610cb561319f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610d0357600080fd5b50610d8560048036036040811015610d1a57600080fd5b810190808035906020019092919080359060200190640100000000811115610d4157600080fd5b820183602082011115610d5357600080fd5b80359060200191846001830284011164010000000083111715610d7557600080fd5b90919293919293905050506131c5565b005b348015610d9357600080fd5b50610d9c6132c9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610dea57600080fd5b50610df36132ee565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610e33578082015181840152602081019050610e18565b50505050905090810190601f168015610e605780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e7a57600080fd5b50610ec960048036036040811015610e9157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050613390565b005b348015610ed757600080fd5b50610ee06134ca565b6040518082815260200191505060405180910390f35b348015610f0257600080fd5b50610f2f60048036036020811015610f1957600080fd5b81019080803590602001909291905050506134d0565b005b348015610f3d57600080fd5b50610f466135aa565b6040518082815260200191505060405180910390f35b348015610f6857600080fd5b50610f716135b4565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610fbf57600080fd5b50610fc86135da565b005b348015610fd657600080fd5b506110da60048036036080811015610fed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291908035906020019064010000000081111561105457600080fd5b82018360208201111561106657600080fd5b8035906020019184600183028401116401000000008311171561108857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050613641565b005b3480156110e857600080fd5b50611115600480360360208110156110ff57600080fd5b8101908080359060200190929190505050613667565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561115557808201518184015260208101905061113a565b50505050905090810190601f1680156111825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561119c57600080fd5b506111a5613739565b6040518082815260200191505060405180910390f35b3480156111c757600080fd5b506111f4600480360360208110156111de57600080fd5b810190808035906020019092919050505061373f565b604051808267ffffffffffffffff1667ffffffffffffffff16815260200191505060405180910390f35b34801561122a57600080fd5b506112336137f2565b604051808215151515815260200191505060405180910390f35b34801561125957600080fd5b506112bc6004803603604081101561127057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613826565b604051808215151515815260200191505060405180910390f35b3480156112e257600080fd5b506112eb6138ba565b005b3480156112f957600080fd5b5061133c6004803603602081101561131057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061391e565b005b6002600c5414156113b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b6002600c819055506014548110611436576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552525f41525449445f544f4f4249470000000000000000000000000000000081525060200191505060405180910390fd5b600061144182612f9d565b90503373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156114e5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f4552525f43414e5f4e4f545f50555243484153455f4f574e5f4152540000000081525060200191505060405180910390fd5b42601383815481106114f357fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff1610611596576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f4552525f4249445f4e4f545f53544152545f594554000000000000000000000081525060200191505060405180910390fd5b6000601383815481106115a557fe5b906000526020600020906003020160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff1690506000811415611aed57600066b1a2bc2ec50000905080341015611662576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4552525f4e4f545f454e4f5547485f4d4f4e455900000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc61168f83346139ef90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050505060008090506013858154811061171357fe5b906000526020600020906003020160010160109054906101000a900460ff161561198b576802b5e3af16b1880000905080601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561180557600080fd5b505afa158015611819573d6000803e3d6000fd5b505050506040513d602081101561182f57600080fd5b81019080805190602001909291905050501061198557601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561194457600080fd5b505af1158015611958573d6000803e3d6000fd5b505050506040513d602081101561196e57600080fd5b81019080805190602001909291905050505061198a565b600090505b5b6013858154811061199857fe5b9060005260206000209060030201600101600881819054906101000a900467ffffffffffffffff168092919060010191906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506119f9843387613a0f565b7fdbc7bf8977d24ca9350fbf7da682a8d3bf6c09e8ec388302d894cd222bf664428583848488338c604051808881526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390a15050505061219a565b6000611af8826128de565b90506000611b08600184016128de565b905080341015611b80576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f4552525f4e4f545f454e4f5547485f4d4f4e455900000000000000000000000081525060200191505060405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8234039081150290604051600060405180830381858888f1935050505050600082820390506000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611c21600a611c13600586613a3390919063ffffffff16565b613a6d90919063ffffffff16565b9081150290604051600060405180830381858888f1935050505050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc611c9f6064611c91601286613a3390919063ffffffff16565b613a6d90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050508673ffffffffffffffffffffffffffffffffffffffff166108fc611cfb6064611ced600286613a3390919063ffffffff16565b613a6d90919063ffffffff16565b9081150290604051600060405180830381858888f19350505050508473ffffffffffffffffffffffffffffffffffffffff166108fc611d6985611d5b6064611d4d601e88613a3390919063ffffffff16565b613a6d90919063ffffffff16565b613a9390919063ffffffff16565b9081150290604051600060405180830381858888f1935050505050600080905060138781548110611d9657fe5b906000526020600020906003020160010160109054906101000a900460ff161561203a57600a8510611de557611de0674563918244f4000060018701613a3390919063ffffffff16565b611df0565b6802b5e3af16b18800005b905080601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611eb457600080fd5b505afa158015611ec8573d6000803e3d6000fd5b505050506040513d6020811015611ede57600080fd5b81019080805190602001909291905050501061203457601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611ff357600080fd5b505af1158015612007573d6000803e3d6000fd5b505050506040513d602081101561201d57600080fd5b810190808051906020019092919050505050612039565b600090505b5b6013878154811061204757fe5b9060005260206000209060030201600101600881819054906101000a900467ffffffffffffffff168092919060010191906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550506120a8863389613a0f565b7fdbc7bf8977d24ca9350fbf7da682a8d3bf6c09e8ec388302d894cd222bf66442878585848a338e604051808881526020018781526020018681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200197505050505050505060405180910390a15050505050505b6001600c819055505050565b600060016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461226857600080fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156122ae573d6000803e3d6000fd5b5050565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600a8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156123705780601f1061234557610100808354040283529160200191612370565b820191906000526020600020905b81548152906001019060200180831161235357829003601f168201915b5050505050905090565b600061238582613ab2565b61238e57600080fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006123d482612f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561240f57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061244f575061244e8133613826565b5b61245857600080fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461256357600080fd5b60145482106125da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4552525f544f4b454e5f49445f4552524f52000000000000000000000000000081525060200191505060405180910390fd5b42601383815481106125e857fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff161161268b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4552525f414c52454144595f535441525400000000000000000000000000000081525060200191505060405180910390fd5b806013838154811061269957fe5b906000526020600020906003020160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b6000600880549050905090565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6127113382613b24565b61271a57600080fd5b612725838383613a0f565b505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461278357600080fd5b60145483106127fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552525f41525449445f544f4f4249470000000000000000000000000000000081525060200191505060405180910390fd5b426013848154811061280857fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff1667ffffffffffffffff16116128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4552525f414c52454144595f535441525400000000000000000000000000000081525060200191505060405180910390fd5b8181601385815481106128ba57fe5b906000526020600020906003020160020191906128d892919061453b565b50505050565b600060118054905082111561299057600060116001601180549050038154811061290457fe5b90600052602060002001549050600060118054905090505b838110156129865761294b600a61293d600b85613a3390919063ffffffff16565b613a6d90919063ffffffff16565b91506011829080600181540180825580915050906001820390600052602060002001600090919290919091505550808060010191505061291c565b50809150506129ae565b601160018303815481106129a057fe5b906000526020600020015490505b919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612a0d57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a4757600080fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612a9683613045565b8210612aa157600080fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110612aeb57fe5b9060005260206000200154905092915050565b600060138281548110612b0d57fe5b906000526020600020906003020160010160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612b9e57600080fd5b600d60009054906101000a900460ff16612bb757600080fd5b6000600d60006101000a81548160ff021916908315150217905550565b612bef83838360405180602001604052806000815250613641565b505050565b6000600d60009054906101000a900460ff1615612c1057600080fd5b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612cd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600d8152602001807f4552525f4e4f545f4f574e45520000000000000000000000000000000000000081525060200191505060405180910390fd5b60006012541415612ce65760009450612d0d565b60155460125442031015612cfd5760009450612d0c565b8415612d0b57426012819055505b5b5b612d156145bb565b6040518060a0016040528060145481526020018467ffffffffffffffff168152602001600067ffffffffffffffff168152602001871515815260200186868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508152509050601381908060018154018082558091505090600182039060005260206000209060030201600090919290919091506000820151816000015560208201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160106101000a81548160ff0219169083151502179055506080820151816002019080519060200190612e6d929190614600565b50505060148190555060145463ffffffff1660145414612e8c57600080fd5b612ebc6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160145403613bb9565b601454915050949350505050565b6000612ed46126d4565b8210612edf57600080fd5b60088281548110612eec57fe5b90600052602060002001549050919050565b600d60009054906101000a900460ff1615612f1857600080fd5b612f22828261133e565b5050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612f8057600080fd5b8060158190555050565b600d60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561301057600080fd5b80915050919050565b60125481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561308057600080fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006130d282613ab2565b6130db57600080fd5b601382815481106130e857fe5b906000526020600020906003020160010160109054906101000a900460ff169050919050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461316857600080fd5b600d60009054906101000a900460ff161561318257600080fd5b6001600d60006101000a81548160ff021916908315150217905550565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461321f57600080fd5b6014548310613296576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260108152602001807f4552525f41525449445f544f4f4249470000000000000000000000000000000081525060200191505060405180910390fd5b8181601385815481106132a557fe5b906000526020600020906003020160020191906132c392919061453b565b50505050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156133865780601f1061335b57610100808354040283529160200191613386565b820191906000526020600020905b81548152906001019060200180831161336957829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133c957600080fd5b80600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b60165481565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461352957600080fd5b60145481106135a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4552525f544f4b454e5f49445f4552524f52000000000000000000000000000081525060200191505060405180910390fd5b8060168190555050565b6000601454905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461363457600080fd5b6015544203601281905550565b61364c848484612707565b61365884848484613bda565b61366157600080fd5b50505050565b606061367282613ab2565b61367b57600080fd5b6013828154811061368857fe5b90600052602060002090600302016002018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561372d5780601f106137025761010080835404028352916020019161372d565b820191906000526020600020905b81548152906001019060200180831161371057829003601f168201915b50505050509050919050565b60155481565b600060145482106137b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f4552525f544f4b454e5f49445f4552524f52000000000000000000000000000081525060200191505060405180910390fd5b601382815481106137c557fe5b906000526020600020906003020160010160009054906101000a900467ffffffffffffffff169050919050565b60008060125414156138075760009050613823565b6015546012544203101561381e5760009050613823565b600190505b90565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461391457600080fd5b6000601281905550565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461397757600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146139ec57806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b6000828211156139fe57600080fd5b600082840390508091505092915050565b613a1a838383613dc3565b613a248382614024565b613a2e82826141c2565b505050565b600080831415613a465760009050613a67565b6000828402905082848281613a5757fe5b0414613a6257600080fd5b809150505b92915050565b6000808211613a7b57600080fd5b6000828481613a8657fe5b0490508091505092915050565b600080828401905083811015613aa857600080fd5b8091505092915050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b600080613b3083612f9d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613b9f57508373ffffffffffffffffffffffffffffffffffffffff16613b878461237a565b73ffffffffffffffffffffffffffffffffffffffff16145b80613bb05750613baf8185613826565b5b91505092915050565b613bc38282614289565b613bcd82826141c2565b613bd68161441e565b5050565b6000613bfb8473ffffffffffffffffffffffffffffffffffffffff1661446a565b613c085760019050613dbb565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff1660e01b8152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613ce3578082015181840152602081019050613cc8565b50505050905090810190601f168015613d105780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015613d3257600080fd5b505af1158015613d46573d6000803e3d6000fd5b505050506040513d6020811015613d5c57600080fd5b8101908080519060200190929190505050905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b8273ffffffffffffffffffffffffffffffffffffffff16613de382612f9d565b73ffffffffffffffffffffffffffffffffffffffff1614613e0357600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613e3d57600080fd5b613e468161447d565b613e996001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139ef90919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f2f6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a9390919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b600061407c6001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506139ef90919063ffffffff16565b9050600060076000848152602001908152602001600020549050818114614169576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481106140e957fe5b9060005260206000200154905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020838154811061414157fe5b9060005260206000200181905550816007600083815260200190815260200160002081905550505b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054809190600190036141bb9190614680565b5050505050565b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506007600083815260200190815260200160002081905550600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156142c357600080fd5b6142cc81613ab2565b156142d657600080fd5b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061437b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a9390919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146145385760006003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061457c57803560ff19168380011785556145aa565b828001600101855582156145aa579182015b828111156145a957823582559160200191906001019061458e565b5b5090506145b791906146ac565b5090565b6040518060a0016040528060008152602001600067ffffffffffffffff168152602001600067ffffffffffffffff168152602001600015158152602001606081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061464157805160ff191683800117855561466f565b8280016001018555821561466f579182015b8281111561466e578251825591602001919060010190614653565b5b50905061467c91906146ac565b5090565b8154818355818111156146a7578183600052602060002091820191016146a691906146ac565b5b505050565b6146ce91905b808211156146ca5760008160009055506001016146b2565b5090565b9056fea265627a7a7231582012f40e8f6873a77aa4d62bc4fd44305ab46de5bc66b1f9135665e3fd1d2fba3a64736f6c63430005100032

Deployed Bytecode Sourcemap

23324:807:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15235:6;;;;;;;;;;;15234:7;15226:16;;;;;;19395:38;19400:14;;;;;;;;;;;19415:17;;19395:4;:38::i;:::-;23324:807;2806:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;2806:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;2806:135:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23993:132;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23993:132:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23993:132:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;14497:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14497:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11002:85;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11002:85:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;11002:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4381:154;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4381:154:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4381:154:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4074:299;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4074:299:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4074:299:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18159:302;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18159:302:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18159:302:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8148:96;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8148:96:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19301:22;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19301:22:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4923:182;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4923:182:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4923:182:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17410:287;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17410:287:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17410:287:0;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;17410:287:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17410:287:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;17410:287:0;;;;;;;;;;;;:::i;:::-;;19618:437;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19618:437:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19618:437:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;23852:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23852:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23852:135:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;7955:185;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7955:185:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7955:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18909:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18909:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18909:135:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15510:81;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15510:81:0;;;:::i;:::-;;5113:134;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5113:134:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5113:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15599:828;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15599:828:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;15599:828:0;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;15599:828:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;15599:828:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;15599:828:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8252:151;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8252:151:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8252:151:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19465:139;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19465:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17033:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17033:137:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17033:137:0;;;;;;;;;;;;;;;;;:::i;:::-;;14464:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14464:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3885:181;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3885:181:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3885:181:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;14895:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14895:28:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14567:31;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14567:31:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3724:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3724:153:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3724:153:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16600:150;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16600:150:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16600:150:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;15419:83;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15419:83:0;;;:::i;:::-;;14605:29;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14605:29:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17188:216;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17188:216:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17188:216:0;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;17188:216:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17188:216:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;17188:216:0;;;;;;;;;;;;:::i;:::-;;12209:20;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12209:20:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11095:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11095:89:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;11095:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4543:217;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4543:217:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4543:217:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15028:32;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15028:32:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18691:202;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18691:202:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18691:202:0;;;;;;;;;;;;;;;;;:::i;:::-;;18027:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18027:116:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14529:25;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14529:25:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16758:137;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16758:137:0;;;:::i;:::-;;5255:214;;8:9:-1;5:2;;;30:1;27;20:12;5:2;5255:214:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;5255:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;5255:214:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;5255:214:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;5255:214:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;5255:214:0;;;;;;;;;;;;;;;:::i;:::-;;16439:153;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16439:153:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16439:153:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;16439:153:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14995:26;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14995:26:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18467:218;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18467:218:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18467:218:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;17705:316;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17705:316:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4768:147;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4768:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4768:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16903:122;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16903:122:0;;;:::i;:::-;;12374:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12374:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12374:135:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;20438:2382;13393:1;13996:7;;:19;;13988:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13393:1;14129:7;:18;;;;20545:5;;20539;:11;20531:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20585:17;20603:14;20611:5;20603:7;:14::i;:::-;20585:32;;20648:10;20637:21;;:9;:21;;;;20629:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20743:3;20718:4;20723:5;20718:11;;;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;:28;;;20710:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20783:9;20793:4;20798:5;20793:11;;;;;;;;;;;;;;;;;;:17;;;;;;;;;;;;20783:27;;;;20839:1;20836;:4;20833:789;;;20857:16;20874:10;20857:27;;20919:8;20908:9;:19;;20900:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20969:10;:15;;:40;20985:23;20999:8;20985:9;:13;;:23;;;;:::i;:::-;20969:40;;;;;;;;;;;;;;;;;;;;;;;;21042:5;;;;;;;;;;;21026:28;;:38;21055:8;21026:38;;;;;;;;;;;;;;;;;;;;;;;;21081:9;21091:1;21081:11;;21112:4;21117:5;21112:11;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;21109:289;;;21151:8;21149:10;;21215:1;21183:8;;;;;;;;;;;:18;;;21202:10;;;;;;;;;;;21183:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21183:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21183:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21183:30:0;;;;;;;;;;;;;;;;:33;21180:202;;21242:8;;;;;;;;;;;:21;;;21264:10;;;;;;;;;;;21275;21286:1;21242:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21242:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21242:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21242:46:0;;;;;;;;;;;;;;;;;21180:202;;;21359:1;21357:3;;21180:202;21109:289;21413:4;21418:5;21413:11;;;;;;;;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21447:43;21461:9;21472:10;21484:5;21447:13;:43::i;:::-;21512:76;21524:5;21531:8;21540;21549:1;21551:9;21561:10;21572:14;21512:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21603:7;;;;;;20833:789;21632:16;21649:8;21655:1;21649:5;:8::i;:::-;21632:25;;21668:16;21685:10;21693:1;21691;:3;21685:5;:10::i;:::-;21668:27;;21725:8;21714:9;:19;;21706:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21811:10;:15;;:35;21837:8;21827:9;:18;21811:35;;;;;;;;;;;;;;;;;;;;;;;;21869:14;21893:8;21884;:17;21869:32;;22007:5;;;;;;;;;;;21991:28;;:51;22020:21;22038:2;22020:13;22031:1;22020:6;:10;;:13;;;;:::i;:::-;:17;;:21;;;;:::i;:::-;21991:51;;;;;;;;;;;;;;;;;;;;;;;;22072:16;;;;;;;;;;;22056:39;;:64;22096:23;22115:3;22096:14;22107:2;22096:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;22056:64;;;;;;;;;;;;;;;;;;;;;;;;22158:14;22142:37;;:61;22180:22;22198:3;22180:13;22191:1;22180:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;22142:61;;;;;;;;;;;;;;;;;;;;;;;;22241:9;22225:32;;:71;22258:37;22286:8;22258:23;22277:3;22258:14;22269:2;22258:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;:27;;:37;;;;:::i;:::-;22225:71;;;;;;;;;;;;;;;;;;;;;;;;22310:9;22320:1;22310:11;;22336:4;22341:5;22336:11;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;22333:289;;;22403:2;22401:1;:4;:34;;22416:18;22426:7;22419:1;22417;:3;22416:9;;:18;;;;:::i;:::-;22401:34;;;22406:8;22401:34;22399:36;;22485:1;22453:8;;;;;;;;;;;:18;;;22472:10;;;;;;;;;;;22453:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22453:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22453:30:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22453:30:0;;;;;;;;;;;;;;;;:33;22450:160;;22506:8;;;;;;;;;;;:21;;;22528:10;;;;;;;;;;;22539;22550:1;22506:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22506:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22506:46:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22506:46:0;;;;;;;;;;;;;;;;;22450:160;;;22593:1;22591:3;;22450:160;22333:289;22635:4;22640:5;22635:11;;;;;;;;;;;;;;;;;;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22673:43;22687:9;22698:10;22710:5;22673:13;:43::i;:::-;22734:76;22746:5;22753:8;22762;22771:1;22773:9;22783:10;22794:14;22734:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14160:1;;;;;;;13349;14308:7;:22;;;;20438:2382;;:::o;2806:135::-;2876:4;2900:20;:33;2921:11;2900:33;;;;;;;;;;;;;;;;;;;;;;;;;;;2893:40;;2806:135;;;:::o;23993:132::-;15142:10;;;;;;;;;;;15128:24;;:10;:24;;;15106:58;;;;;;24077:8;24061:35;;:58;24097:21;24061:58;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24061:58:0;23993:132;:::o;14497:25::-;;;;;;;;;;;;;:::o;11002:85::-;11041:13;11074:5;11067:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11002:85;:::o;4381:154::-;4440:7;4468:16;4476:7;4468;:16::i;:::-;4460:25;;;;;;4503:15;:24;4519:7;4503:24;;;;;;;;;;;;;;;;;;;;;4496:31;;4381:154;;;:::o;4074:299::-;4138:13;4154:16;4162:7;4154;:16::i;:::-;4138:32;;4195:5;4189:11;;:2;:11;;;;4181:20;;;;;;4234:5;4220:19;;:10;:19;;;:58;;;;4243:35;4260:5;4267:10;4243:16;:35::i;:::-;4220:58;4212:67;;;;;;4319:2;4292:15;:24;4308:7;4292:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;4357:7;4353:2;4337:28;;4346:5;4337:28;;;;;;;;;;;;4074:299;;;:::o;18159:302::-;12348:5;;;;;;;;;;;12334:19;;:10;:19;;;12326:28;;;;;;18296:5;;18288:7;:13;18280:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18374:3;18347:4;18352:7;18347:13;;;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;:30;;;18339:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18440:9;18413:4;18418:7;18413:13;;;;;;;;;;;;;;;;;;:26;;;:36;;;;;;;;;;;;;;;;;;18159:302;;:::o;8148:96::-;8192:7;8219:10;:17;;;;8212:24;;8148:96;:::o;19301:22::-;;;;;;;;;;;;;:::o;4923:182::-;5014:39;5033:10;5045:7;5014:18;:39::i;:::-;5006:48;;;;;;5065:32;5079:4;5085:2;5089:7;5065:13;:32::i;:::-;4923:182;;;:::o;17410:287::-;12348:5;;;;;;;;;;;12334:19;;:10;:19;;;12326:28;;;;;;17547:5;;17539:7;:13;17531:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17623:3;17596:4;17601:7;17596:13;;;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;:30;;;17588:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17681:4;;17662;17667:7;17662:13;;;;;;;;;;;;;;;;;;:18;;:23;;;;;;;:::i;:::-;;17410:287;;;:::o;19618:437::-;19671:7;19708:9;:16;;;;19701:6;:23;19698:311;;;19741:17;19759:9;19786:1;19769:9;:16;;;;:18;19759:29;;;;;;;;;;;;;;;;19741:47;;19808:9;19818;:16;;;;19808:26;;19804:161;19837:6;19835:1;:8;19804:161;;;19878:25;19900:2;19878:17;19892:2;19878:9;:13;;:17;;;;:::i;:::-;:21;;:25;;;;:::i;:::-;19868:35;;19923:9;19938;19923:25;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;19923:25:0;;;;;;;;;;;;;;;;;;;;;;19844:3;;;;;;;19804:161;;;;19987:9;19980:16;;;;;19698:311;20027:9;20044:1;20037:6;:8;20027:19;;;;;;;;;;;;;;;;20020:26;;19618:437;;;;:::o;23852:135::-;15142:10;;;;;;;;;;;15128:24;;:10;:24;;;15106:58;;;;;;23943:1;23924:21;;:7;:21;;;;23916:30;;;;;;23972:7;23959:10;;:20;;;;;;;;;;;;;;;;;;23852:135;:::o;7955:185::-;8035:7;8071:16;8081:5;8071:9;:16::i;:::-;8063:5;:24;8055:33;;;;;;8106:12;:19;8119:5;8106:19;;;;;;;;;;;;;;;8126:5;8106:26;;;;;;;;;;;;;;;;8099:33;;7955:185;;;;:::o;18909:135::-;18983:7;19013:4;19018:7;19013:13;;;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;19006:26;;;;18909:135;;;:::o;15510:81::-;15142:10;;;;;;;;;;;15128:24;;:10;:24;;;15106:58;;;;;;15382:6;;;;;;;;;;;15374:15;;;;;;15578:5;15569:6;;:14;;;;;;;;;;;;;;;;;;15510:81::o;5113:134::-;5200:39;5217:4;5223:2;5227:7;5200:39;;;;;;;;;;;;:16;:39::i;:::-;5113:134;;;:::o;15599:828::-;15770:7;15235:6;;;;;;;;;;;15234:7;15226:16;;;;;;15818:5;;;;;;;;;;;15804:19;;:10;:19;;;15796:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15872:1;15859:11;;:14;15856:227;;;15897:5;15889:13;;15856:227;;;15940:11;;15927;;15923:3;:15;15922:29;15919:164;;;15975:5;15967:13;;15919:164;;;16014:7;16011:61;;;16053:3;16041:11;:15;;;;16011:61;15919:164;15856:227;16095:15;;:::i;:::-;16113:159;;;;;;;;16136:5;;16113:159;;;;16170:9;16113:159;;;;;;16201:1;16113:159;;;;;;16222:7;16113:159;;;;;;16250:8;;16113:159;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;16113:159:0;;;;;;;;;16095:177;;16291:4;16301;16291:15;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;16291:15:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;16283:5;:23;;;;16352:5;;16337:22;;16328:5;;:31;16320:40;;;;;;16373:21;16379:5;;;;;;;;;;;16392:1;16386:5;;:7;16373:5;:21::i;:::-;16414:5;;16407:12;;;15599:828;;;;;;:::o;8252:151::-;8310:7;8346:13;:11;:13::i;:::-;8338:5;:21;8330:30;;;;;;8378:10;8389:5;8378:17;;;;;;;;;;;;;;;;8371:24;;8252:151;;;:::o;19465:139::-;15235:6;;;;;;;;;;;15234:7;15226:16;;;;;;19568:26;19573:14;19588:5;19568:4;:26::i;:::-;19465:139;;:::o;17033:137::-;15142:10;;;;;;;;;;;15128:24;;:10;:24;;;15106:58;;;;;;17150:8;17138:11;:20;;;;17033:137;:::o;14464:26::-;;;;;;;;;;;;;:::o;3885:181::-;3940:7;3960:13;3976:11;:20;3988:7;3976:20;;;;;;;;;;;;;;;;;;;;;3960:36;;4032:1;4015:19;;:5;:19;;;;4007:28;;;;;;4053:5;4046:12;;;3885:181;;;:::o;14895:28::-;;;;:::o;14567:31::-;;;;;;;;;;;;;:::o;3724:153::-;3779:7;3824:1;3807:19;;:5;:19;;;;3799:28;;;;;;3845:17;:24;3863:5;3845:24;;;;;;;;;;;;;;;;3838:31;;3724:153;;;:::o;16600:150::-;16665:4;16690:16;16698:7;16690;:16::i;:::-;16682:25;;;;;;16725:4;16730:7;16725:13;;;;;;;;;;;;;;;;;;:17;;;;;;;;;;;;16718:24;;16600:150;;;:::o;15419:83::-;15142:10;;;;;;;;;;;15128:24;;:10;:24;;;15106:58;;;;;;15235:6;;;;;;;;;;;15234:7;15226:16;;;;;;15490:4;15481:6;;:13;;;;;;;;;;;;;;;;;;15419:83::o;14605:29::-;;;;;;;;;;;;;:::o;17188:216::-;15142:10;;;;;;;;;;;15128:24;;:10;:24;;;15106:58;;;;;;17328:5;;17320:7;:13;17312:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17388:4;;17369;17374:7;17369:13;;;;;;;;;;;;;;;;;;:18;;:23;;;;;;;:::i;:::-;;17188:216;;;:::o;12209:20::-;;;;;;;;;;;;;:::o;11095:89::-;11136:13;11169:7;11162:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11095:89;:::o;4543:217::-;4629:10;4623:16;;:2;:16;;;;4615:25;;;;;;4688:8;4651:18;:30;4670:10;4651:30;;;;;;;;;;;;;;;:34;4682:2;4651:34;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;4739:2;4712:40;;4727:10;4712:40;;;4743:8;4712:40;;;;;;;;;;;;;;;;;;;;;;4543:217;;:::o;15028:32::-;;;;:::o;18691:202::-;12348:5;;;;;;;;;;;12334:19;;:10;:19;;;12326:28;;;;;;18811:5;;18803:7;:13;18795:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18874:7;18856:17;:25;;;;18691:202;:::o;18027:116::-;18096:7;18126:5;;18119:12;;18027:116;:::o;14529:25::-;;;;;;;;;;;;;:::o;16758:137::-;15142:10;;;;;;;;;;;15128:24;;:10;:24;;;15106:58;;;;;;16872:11;;16866:3;:17;16854:11;:29;;;;16758:137::o;5255:214::-;5362:31;5375:4;5381:2;5385:7;5362:12;:31::i;:::-;5412:48;5435:4;5441:2;5445:7;5454:5;5412:22;:48::i;:::-;5404:57;;;;;;5255:214;;;;:::o;16439:153::-;16497:13;16531:16;16539:7;16531;:16::i;:::-;16523:25;;;;;;16566:4;16571:7;16566:13;;;;;;;;;;;;;;;;;;:18;;16559:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16439:153;;;:::o;14995:26::-;;;;:::o;18467:218::-;18549:6;18597:5;;18589:7;:13;18581:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18647:4;18652:7;18647:13;;;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;18640:33;;18467:218;;;:::o;17705:316::-;17770:4;17816:1;17803:11;;:14;17800:200;;;17844:5;17837:12;;;;17800:200;17891:11;;17878;;17874:3;:15;17873:29;17870:130;;;17929:5;17922:12;;;;17870:130;17980:4;17973:11;;17705:316;;:::o;4768:147::-;4848:4;4872:18;:25;4891:5;4872:25;;;;;;;;;;;;;;;:35;4898:8;4872:35;;;;;;;;;;;;;;;;;;;;;;;;;4865:42;;4768:147;;;;:::o;16903:122::-;15142:10;;;;;;;;;;;15128:24;;:10;:24;;;15106:58;;;;;;17012:1;17000:11;:13;;;;16903:122::o;12374:135::-;12348:5;;;;;;;;;;;12334:19;;:10;:19;;;12326:28;;;;;;12467:1;12447:22;;:8;:22;;;12443:61;;12488:8;12480:5;;:16;;;;;;;;;;;;;;;;;;12443:61;12374:135;:::o;1853:148::-;1911:7;1944:1;1939;:6;;1931:15;;;;;;1957:9;1973:1;1969;:5;1957:17;;1992:1;1985:8;;;1853:148;;;;:::o;8411:241::-;8497:38;8517:4;8523:2;8527:7;8497:19;:38::i;:::-;8546:47;8579:4;8585:7;8546:32;:47::i;:::-;8604:40;8632:2;8636:7;8604:27;:40::i;:::-;8411:241;;;:::o;1481:209::-;1539:7;1568:1;1563;:6;1559:47;;;1593:1;1586:8;;;;1559:47;1616:9;1632:1;1628;:5;1616:17;;1661:1;1656;1652;:5;;;;;;:10;1644:19;;;;;;1681:1;1674:8;;;1481:209;;;;;:::o;1698:147::-;1756:7;1788:1;1784;:5;1776:14;;;;;;1801:9;1817:1;1813;:5;;;;;;1801:17;;1836:1;1829:8;;;1698:147;;;;:::o;2009:148::-;2067:7;2087:9;2103:1;2099;:5;2087:17;;2128:1;2123;:6;;2115:15;;;;;;2148:1;2141:8;;;2009:148;;;;:::o;5477:155::-;5534:4;5551:13;5567:11;:20;5579:7;5567:20;;;;;;;;;;;;;;;;;;;;;5551:36;;5622:1;5605:19;;:5;:19;;;;5598:26;;;5477:155;;;:::o;5640:249::-;5725:4;5742:13;5758:16;5766:7;5758;:16::i;:::-;5742:32;;5804:5;5793:16;;:7;:16;;;:51;;;;5837:7;5813:31;;:20;5825:7;5813:11;:20::i;:::-;:31;;;5793:51;:87;;;;5848:32;5865:5;5872:7;5848:16;:32::i;:::-;5793:87;5785:96;;;5640:249;;;;:::o;8660:198::-;8724:24;8736:2;8740:7;8724:11;:24::i;:::-;8759:40;8787:2;8791:7;8759:27;:40::i;:::-;8810;8842:7;8810:31;:40::i;:::-;8660:198;;:::o;6611:356::-;6733:4;6760:15;:2;:13;;;:15::i;:::-;6755:60;;6799:4;6792:11;;;;6755:60;6827:13;6859:2;6843:36;;;6880:10;6892:4;6898:7;6907:5;6843:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;6843:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;6843:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;6843:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6843:70:0;;;;;;;;;;;;;;;;6827:86;;3297:10;6942:16;;6932:26;;;:6;:26;;;;6924:35;;;6611:356;;;;;;;:::o;6191:412::-;6305:4;6285:24;;:16;6293:7;6285;:16::i;:::-;:24;;;6277:33;;;;;;6343:1;6329:16;;:2;:16;;;;6321:25;;;;;;6359:23;6374:7;6359:14;:23::i;:::-;6421:30;6449:1;6421:17;:23;6439:4;6421:23;;;;;;;;;;;;;;;;:27;;:30;;;;:::i;:::-;6395:17;:23;6413:4;6395:23;;;;;;;;;;;;;;;:56;;;;6486:28;6512:1;6486:17;:21;6504:2;6486:21;;;;;;;;;;;;;;;;:25;;:28;;;;:::i;:::-;6462:17;:21;6480:2;6462:21;;;;;;;;;;;;;;;:52;;;;6548:2;6525:11;:20;6537:7;6525:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;6587:7;6583:2;6568:27;;6577:4;6568:27;;;;;;;;;;;;6191:412;;;:::o;9366:501::-;9458:22;9483:32;9513:1;9483:12;:18;9496:4;9483:18;;;;;;;;;;;;;;;:25;;;;:29;;:32;;;;:::i;:::-;9458:57;;9526:18;9547:17;:26;9565:7;9547:26;;;;;;;;;;;;9526:47;;9604:14;9590:10;:28;9586:234;;9635:19;9657:12;:18;9670:4;9657:18;;;;;;;;;;;;;;;9676:14;9657:34;;;;;;;;;;;;;;;;9635:56;;9739:11;9706:12;:18;9719:4;9706:18;;;;;;;;;;;;;;;9725:10;9706:30;;;;;;;;;;;;;;;:44;;;;9798:10;9765:17;:30;9783:11;9765:30;;;;;;;;;;;:43;;;;9586:234;;9832:12;:18;9845:4;9832:18;;;;;;;;;;;;;;;:27;;;;;;;;;;;;:::i;:::-;;9366:501;;;;:::o;9000:186::-;9114:12;:16;9127:2;9114:16;;;;;;;;;;;;;;;:23;;;;9085:17;:26;9103:7;9085:26;;;;;;;;;;;:52;;;;9148:12;:16;9161:2;9148:16;;;;;;;;;;;;;;;9170:7;9148:30;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;9148:30:0;;;;;;;;;;;;;;;;;;;;;;9000:186;;:::o;5897:286::-;5983:1;5969:16;;:2;:16;;;;5961:25;;;;;;6006:16;6014:7;6006;:16::i;:::-;6005:17;5997:26;;;;;;6059:2;6036:11;:20;6048:7;6036:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;6096:28;6122:1;6096:17;:21;6114:2;6096:21;;;;;;;;;;;;;;;;:25;;:28;;;;:::i;:::-;6072:17;:21;6090:2;6072:21;;;;;;;;;;;;;;;:52;;;;6167:7;6163:2;6142:33;;6159:1;6142:33;;;;;;;;;;;;5897:286;;:::o;9194:164::-;9298:10;:17;;;;9271:15;:24;9287:7;9271:24;;;;;;;;;;;:44;;;;9326:10;9342:7;9326:24;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;9326:24:0;;;;;;;;;;;;;;;;;;;;;;9194:164;:::o;2347:174::-;2407:4;2424:12;2478:7;2466:20;2458:28;;2512:1;2505:4;:8;2498:15;;;2347:174;;;:::o;6975:175::-;7075:1;7039:38;;:15;:24;7055:7;7039:24;;;;;;;;;;;;;;;;;;;;;:38;;;7035:108;;7129:1;7094:15;:24;7110:7;7094:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;7035:108;6975:175;:::o;23324:807::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://12f40e8f6873a77aa4d62bc4fd44305ab46de5bc66b1f9135665e3fd1d2fba3a

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.