ETH Price: $3,320.76 (+0.33%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...136509782021-11-20 8:59:431162 days ago1637398783IN
0x3A8e408D...3f55651eB
0 ETH0.0031659468.52246551
Bid128872002021-07-24 5:39:371281 days ago1627105177IN
0x3A8e408D...3f55651eB
0.05 ETH0.0014301811.001
Creat Art128805442021-07-23 4:40:361282 days ago1627015236IN
0x3A8e408D...3f55651eB
0 ETH0.0067995921
Bid125049182021-05-25 17:45:551341 days ago1621964755IN
0x3A8e408D...3f55651eB
0.4 ETH0.0108764463.00000156
Bid125049052021-05-25 17:41:091341 days ago1621964469IN
0x3A8e408D...3f55651eB
0.4 ETH0.0119123768
Bid125048962021-05-25 17:39:271341 days ago1621964367IN
0x3A8e408D...3f55651eB
0.4 ETH0.0100132358.00000145
Bid125048922021-05-25 17:37:391341 days ago1621964259IN
0x3A8e408D...3f55651eB
0.1001 ETH0.0022008948.4
Bid125048852021-05-25 17:36:271341 days ago1621964187IN
0x3A8e408D...3f55651eB
0.4 ETH0.0103357359
Bid125031482021-05-25 11:16:051341 days ago1621941365IN
0x3A8e408D...3f55651eB
0.1 ETH0.0068353850.001
Creat Art125025242021-05-25 8:52:121341 days ago1621932732IN
0x3A8e408D...3f55651eB
0 ETH0.0110088634.00000145
Bid123163762021-04-26 14:04:361370 days ago1619445876IN
0x3A8e408D...3f55651eB
0.5 ETH0.0090190961.00000145
Bid123159702021-04-26 12:39:331370 days ago1619440773IN
0x3A8e408D...3f55651eB
0.2001 ETH0.0066516345
Bid123157572021-04-26 11:54:161370 days ago1619438056IN
0x3A8e408D...3f55651eB
0.1501 ETH0.0059141640.00000156
Bid123155972021-04-26 11:19:451370 days ago1619435985IN
0x3A8e408D...3f55651eB
0.1001 ETH0.0018189240
Bid123155952021-04-26 11:19:341370 days ago1619435974IN
0x3A8e408D...3f55651eB
0.1001 ETH0.0059125640
Bid123155282021-04-26 11:04:061370 days ago1619435046IN
0x3A8e408D...3f55651eB
0.0501 ETH0.0045948442
Creat Art123149262021-04-26 8:50:081370 days ago1619427008IN
0x3A8e408D...3f55651eB
0 ETH0.0141179744
Bid123087122021-04-25 9:46:041371 days ago1619343964IN
0x3A8e408D...3f55651eB
1.7262 ETH0.0093630547
Bid123086092021-04-25 9:18:221371 days ago1619342302IN
0x3A8e408D...3f55651eB
0.4001 ETH0.0049890535.6
Bid123085672021-04-25 9:11:521371 days ago1619341912IN
0x3A8e408D...3f55651eB
2 ETH0.0083669842
Bid123085602021-04-25 9:09:091371 days ago1619341749IN
0x3A8e408D...3f55651eB
2 ETH0.0102294752.01235
Bid123085542021-04-25 9:08:311371 days ago1619341711IN
0x3A8e408D...3f55651eB
1.8 ETH0.0081677741
Bid123085532021-04-25 9:08:091371 days ago1619341689IN
0x3A8e408D...3f55651eB
2 ETH0.0102294752.01235
Bid123085512021-04-25 9:07:551371 days ago1619341675IN
0x3A8e408D...3f55651eB
16 ETH0.0070822336.01
Bid123085492021-04-25 9:07:141371 days ago1619341634IN
0x3A8e408D...3f55651eB
1 ETH0.004159860
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
128872002021-07-24 5:39:371281 days ago1627105177
0x3A8e408D...3f55651eB
0.05 ETH
125049182021-05-25 17:45:551341 days ago1621964755
0x3A8e408D...3f55651eB
0.215 ETH
125049182021-05-25 17:45:551341 days ago1621964755
0x3A8e408D...3f55651eB
0.001 ETH
125049182021-05-25 17:45:551341 days ago1621964755
0x3A8e408D...3f55651eB
0.009 ETH
125049182021-05-25 17:45:551341 days ago1621964755
0x3A8e408D...3f55651eB
0.025 ETH
125049182021-05-25 17:45:551341 days ago1621964755
0x3A8e408D...3f55651eB
0.15 ETH
125049052021-05-25 17:41:091341 days ago1621964469
0x3A8e408D...3f55651eB
0.165 ETH
125049052021-05-25 17:41:091341 days ago1621964469
0x3A8e408D...3f55651eB
0.001 ETH
125049052021-05-25 17:41:091341 days ago1621964469
0x3A8e408D...3f55651eB
0.009 ETH
125049052021-05-25 17:41:091341 days ago1621964469
0x3A8e408D...3f55651eB
0.025 ETH
125049052021-05-25 17:41:091341 days ago1621964469
0x3A8e408D...3f55651eB
0.2 ETH
125048962021-05-25 17:39:271341 days ago1621964367
0x3A8e408D...3f55651eB
0.115 ETH
125048962021-05-25 17:39:271341 days ago1621964367
0x3A8e408D...3f55651eB
0.001 ETH
125048962021-05-25 17:39:271341 days ago1621964367
0x3A8e408D...3f55651eB
0.009 ETH
125048962021-05-25 17:39:271341 days ago1621964367
0x3A8e408D...3f55651eB
0.025 ETH
125048962021-05-25 17:39:271341 days ago1621964367
0x3A8e408D...3f55651eB
0.25 ETH
125048852021-05-25 17:36:271341 days ago1621964187
0x3A8e408D...3f55651eB
0.065 ETH
125048852021-05-25 17:36:271341 days ago1621964187
0x3A8e408D...3f55651eB
0.001 ETH
125048852021-05-25 17:36:271341 days ago1621964187
0x3A8e408D...3f55651eB
0.009 ETH
125048852021-05-25 17:36:271341 days ago1621964187
0x3A8e408D...3f55651eB
0.025 ETH
125048852021-05-25 17:36:271341 days ago1621964187
0x3A8e408D...3f55651eB
0.3 ETH
125031482021-05-25 11:16:051341 days ago1621941365
0x3A8e408D...3f55651eB
0.05 ETH
125031482021-05-25 11:16:051341 days ago1621941365
0x3A8e408D...3f55651eB
0.05 ETH
123163762021-04-26 14:04:361370 days ago1619445876
0x3A8e408D...3f55651eB
0.215 ETH
123163762021-04-26 14:04:361370 days ago1619445876
0x3A8e408D...3f55651eB
0.001 ETH
View All Internal Transactions
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

[{"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"}]

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 Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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