ETH Price: $2,675.31 (-2.92%)

Contract

0x6Fa769EED284a94A73C15299e1D3719B29Ae2F52
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Safe Transfer Fr...218592642025-02-16 13:29:352 days ago1739712575IN
BFH: Unit
0 ETH0.000035370.67207115
Safe Transfer Fr...218592632025-02-16 13:29:232 days ago1739712563IN
BFH: Unit
0 ETH0.000038220.69302897
Safe Transfer Fr...218592622025-02-16 13:29:112 days ago1739712551IN
BFH: Unit
0 ETH0.000037790.68520749
Safe Transfer Fr...218592622025-02-16 13:29:112 days ago1739712551IN
BFH: Unit
0 ETH0.000035630.67698268
Set Approval For...218429102025-02-14 6:27:474 days ago1739514467IN
BFH: Unit
0 ETH0.000029350.9
Set Approval For...218429082025-02-14 6:27:234 days ago1739514443IN
BFH: Unit
0 ETH0.000027610.84668948
Set Approval For...218429072025-02-14 6:27:114 days ago1739514431IN
BFH: Unit
0 ETH0.000026990.82767532
Safe Transfer Fr...218241652025-02-11 15:25:597 days ago1739287559IN
BFH: Unit
0 ETH0.000237794.31151886
Safe Transfer Fr...218241632025-02-11 15:25:357 days ago1739287535IN
BFH: Unit
0 ETH0.000203734.25936656
Approve212444352024-11-22 16:22:2387 days ago1732292543IN
BFH: Unit
0 ETH0.0007925616.3431606
Safe Transfer Fr...209175462024-10-08 1:23:47133 days ago1728350627IN
BFH: Unit
0 ETH0.0005413311.31750175
Approve208883752024-10-03 23:49:59137 days ago1727999399IN
BFH: Unit
0 ETH0.000156783.23309507
Approve208883612024-10-03 23:47:11137 days ago1727999231IN
BFH: Unit
0 ETH0.000155253.20156483
Transfer From208746472024-10-02 1:52:35139 days ago1727833955IN
BFH: Unit
0 ETH0.000381336.33915787
Safe Transfer Fr...207400592024-09-13 6:59:23158 days ago1726210763IN
BFH: Unit
0 ETH0.000203114.24652208
Safe Transfer Fr...207400502024-09-13 6:57:35158 days ago1726210655IN
BFH: Unit
0 ETH0.000228384.33931013
Transfer From202512672024-07-07 1:10:47226 days ago1720314647IN
BFH: Unit
0 ETH0.000040051.069
Approve202475772024-07-06 12:50:59227 days ago1720270259IN
BFH: Unit
0 ETH0.000098072.02243612
Approve202475752024-07-06 12:50:35227 days ago1720270235IN
BFH: Unit
0 ETH0.000109142.25058085
Approve202404682024-07-05 13:01:11228 days ago1720184471IN
BFH: Unit
0 ETH0.000319096.58
Approve202404512024-07-05 12:57:47228 days ago1720184267IN
BFH: Unit
0 ETH0.000319836.59520257
Approve202404442024-07-05 12:56:23228 days ago1720184183IN
BFH: Unit
0 ETH0.000361357.45129476
Safe Transfer Fr...202214972024-07-02 21:25:47230 days ago1719955547IN
BFH: Unit
0 ETH0.000228114.76914461
Safe Transfer Fr...202200842024-07-02 16:41:11230 days ago1719938471IN
BFH: Unit
0 ETH0.000326936.21167305
Safe Transfer Fr...202200842024-07-02 16:41:11230 days ago1719938471IN
BFH: Unit
0 ETH0.000326936.21167305
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BFHUnit

Compiler Version
v0.5.12+commit.7709ece9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-01-26
*/

// Copyright (c) 2018-2020 double jump.tokyo inc.
pragma solidity 0.5.12;

interface IERC721Metadata /* is ERC721 */ {
    /// @notice A descriptive name for a collection of NFTs in this contract
    function name() external view returns (string memory _name);

    /// @notice An abbreviated name for NFTs in this contract
    function symbol() external view returns (string memory _symbol);

    /// @notice A distinct Uniform Resource Identifier (URI) for a given asset.
    /// @dev Throws if `_tokenId` is not a valid NFT. URIs are defined in RFC
    ///  3986. The URI may point to a JSON file that conforms to the "ERC721
    ///  Metadata JSON Schema".
    function tokenURI(uint256 _tokenId) external view returns (string memory);
}

interface IERC721TokenReceiver {
    /// @notice Handle the receipt of an NFT
    /// @dev The ERC721 smart contract calls this function on the recipient
    ///  after a `transfer`. This function MAY throw to revert and reject the
    ///  transfer. Return of other than the magic value MUST result in the
    ///  transaction being reverted.
    ///  Note: the contract address is always the message sender.
    /// @param _operator The address which called `safeTransferFrom` function
    /// @param _from The address which previously owned the token
    /// @param _tokenId The NFT identifier which is being transferred
    /// @param _data Additional data with no specified format
    /// @return `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
    ///  unless throwing
    function onERC721Received(
        address _operator,
        address _from,
        uint256 _tokenId,
        bytes calldata _data
    )
        external
        returns(bytes4);
}

library Uint32 {

    function add(uint32 a, uint32 b) internal pure returns (uint32) {
        uint32 c = a + b;
        require(c >= a, "addition overflow");
        return c;
    }

    function sub(uint32 a, uint32 b) internal pure returns (uint32) {
        require(a >= b, "subtraction overflow");
        return a - b;
    }

    function mul(uint32 a, uint32 b) internal pure returns (uint32) {
        if (a == 0) {
            return 0;
        }
        uint32 c = a * b;
        require(c / a == b, "multiplication overflow");
        return c;
    }

    function div(uint32 a, uint32 b) internal pure returns (uint32) {
        require(b != 0, "division by 0");
        return a / b;
    }

    function mod(uint32 a, uint32 b) internal pure returns (uint32) {
        require(b != 0, "modulo by 0");
        return a % b;
    }

}

library String {

    function compare(string memory _a, string memory _b) public pure returns (bool) {
        return (keccak256(abi.encodePacked(_a)) == keccak256(abi.encodePacked(_b)));
    }

    function cut(string memory _s, uint256 _from, uint256 _range) public pure returns (string memory) {
        bytes memory s = bytes(_s);
        require(s.length >= _from + _range, "_s length must be longer than _from + _range");
        bytes memory ret = new bytes(_range);

        for (uint256 i = 0; i < _range; i++) {
            ret[i] = s[_from+i];
        }
        return string(ret);
    }

    function concat(string memory _a, string memory _b) internal pure returns (string memory) {
        return string(abi.encodePacked(_a, _b));
    }
}

library Address {

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

    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }

    function toHex(address account) internal pure returns (string memory) {
        bytes32 value = bytes32(uint256(account));
        bytes memory alphabet = "0123456789abcdef";

        bytes memory str = new bytes(42);
        str[0] = '0';
        str[1] = 'x';
        for (uint i = 0; i < 20; i++) {
            str[2+i*2] = alphabet[uint(uint8(value[i + 12] >> 4))];
            str[3+i*2] = alphabet[uint(uint8(value[i + 12] & 0x0f))];
        }
        return string(str);
    }
}
interface IERC165 {
    function supportsInterface(bytes4 interfaceID) external view returns (bool);
}

/// @title ERC-165 Standard Interface Detection
/// @dev See https://eips.ethereum.org/EIPS/eip-165
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, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}

interface IApprovalProxy {
  function setApprovalForAll(address _owner, address _spender, bool _approved) external;
  function isApprovedForAll(address _owner, address _spender, bool _original) external view returns (bool);
}
library Uint256 {

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

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(a >= b, "subtraction overflow");
        return a - b;
    }

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

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "division by 0");
        return a / b;
    }

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

    function toString(uint256 a) internal pure returns (string memory) {
        bytes32 retBytes32;
        uint256 len = 0;
        if (a == 0) {
            retBytes32 = "0";
            len++;
        } else {
            uint256 value = a;
            while (value > 0) {
                retBytes32 = bytes32(uint256(retBytes32) / (2 ** 8));
                retBytes32 |= bytes32(((value % 10) + 48) * 2 ** (8 * 31));
                value /= 10;
                len++;
            }
        }

        bytes memory ret = new bytes(len);
        uint256 i;

        for (i = 0; i < len; i++) {
            ret[i] = retBytes32[i];
        }
        return string(ret);
    }
}

interface IERC721 /* is ERC165 */ {
    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) external view returns (uint256);
    function ownerOf(uint256 _tokenId) external view returns (address);
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes calldata data) external payable;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function approve(address _approved, uint256 _tokenId) external payable;
    function setApprovalForAll(address _operator, bool _approved) external;
    function getApproved(uint256 _tokenId) external view returns (address);
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    function add(Role storage role, address account) internal {
        require(!has(role, account), "role already has the account");
        role.bearer[account] = true;
    }

    function remove(Role storage role, address account) internal {
        require(has(role, account), "role dosen't have the account");
        role.bearer[account] = false;
    }

    function has(Role storage role, address account) internal view returns (bool) {
        return role.bearer[account];
    }
}

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

    bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;
    bytes4 private constant _InterfaceId_ERC721 = 0x80ac58cd;

    mapping (uint256 => address) private _tokenOwner;
    mapping (address => uint256) private _balance;
    mapping (uint256 => address) private _tokenApproved;
    mapping (address => mapping (address => bool)) private _operatorApprovals;

    constructor () public {
        _registerInterface(_InterfaceId_ERC721);
    }

    function balanceOf(address _owner) public view returns (uint256) {
        return _balance[_owner];
    }

    function ownerOf(uint256 _tokenId) public view returns (address) {
        require(_exist(_tokenId),
                "`_tokenId` is not a valid NFT.");
        return _tokenOwner[_tokenId];
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory _data) public payable {
        require(_data.length == 0, "data is not implemented");
        safeTransferFrom(_from, _to, _tokenId);
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId) public payable {
        require(_checkOnERC721Received(_from, _to, _tokenId, ""),
                "`_to` is a smart contract and onERC721Received is invalid");
        transferFrom(_from, _to, _tokenId);
    }

    function transferFrom(address _from, address _to, uint256 _tokenId) public payable {
        require(_transferable(msg.sender, _tokenId),
                "Unless `msg.sender` is the current owner, an authorized operator, or the approved address for this NFT."); // solhint-disable-line
        require(ownerOf(_tokenId) == _from,
                "`_from` is not the current owner.");
        require(_to != address(0),
                "`_to` is the zero address.");
        require(_exist(_tokenId),
                "`_tokenId` is not a valid NFT.");
        _transfer(_from, _to, _tokenId);
    }

    function approve(address _approved, uint256 _tokenId) public payable {
        address owner = ownerOf(_tokenId);
        require(msg.sender == owner || isApprovedForAll(owner, msg.sender),
                "Unless `msg.sender` is the current NFT owner, or an authorized operator of the current owner.");

        _tokenApproved[_tokenId] = _approved;
        emit Approval(msg.sender, _approved, _tokenId);
    }

    function setApprovalForAll(address _operator, bool _approved) public {
        _setApprovalForAll(msg.sender, _operator, _approved);
    }

    function _setApprovalForAll(address _owner, address _operator, bool _approved) internal {
        _operatorApprovals[_owner][_operator] = _approved;
        emit ApprovalForAll(_owner, _operator, _approved);
    }

    function getApproved(uint256 _tokenId) public view returns (address) {
        require(_exist(_tokenId),
                "`_tokenId` is not a valid NFT.");
        return _tokenApproved[_tokenId];
    }

    function isApprovedForAll(address _owner, address _operator) public view returns (bool) {
        return _isApprovedForAll(_owner, _operator);
    }
    
    function _isApprovedForAll(address _owner, address _operator) internal view returns (bool) {
        return _operatorApprovals[_owner][_operator];
    }

    function _transferable(address _spender, uint256 _tokenId) internal view returns (bool){
        address owner = ownerOf(_tokenId);
        return (_spender == owner || getApproved(_tokenId) == _spender || isApprovedForAll(owner, _spender));
    }

    function _transfer(address _from, address _to, uint256 _tokenId) internal {
        _clearApproval(_tokenId);
        _tokenOwner[_tokenId] = _to;
        _balance[_from] = _balance[_from].sub(1);
        _balance[_to] = _balance[_to].add(1);
        emit Transfer(_from, _to, _tokenId);
    }
  
    function _mint(address _to, uint256 _tokenId) internal {
        require(!_exist(_tokenId), "mint token already exists");
        _tokenOwner[_tokenId] = _to;
        _balance[_to] = _balance[_to].add(1);
        emit Transfer(address(0), _to, _tokenId);
    }
  
    function _burn(uint256 _tokenId) internal {
        require(_exist(_tokenId), "burn token does not already exists");
        address owner = ownerOf(_tokenId);
        _clearApproval(_tokenId);
        _tokenOwner[_tokenId] = address(0);
        _balance[owner] = _balance[owner].sub(1);
        emit Transfer(owner, address(0), _tokenId);
    }

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

    function _checkOnERC721Received(
        address _from,
        address _to,
        uint256 _tokenId,
        bytes memory _data
    ) 
        internal
        returns (bool) 
    {
        if (!_to.isContract()) {
            return true;
        }
        bytes4 retval = IERC721TokenReceiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data);
        return (retval == _ERC721_RECEIVED);
    }

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

interface IERC173 /* is ERC165 */ {
    /// @dev This emits when ownership of a contract changes.
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /// @notice Get the address of the owner
    /// @return The address of the owner.
    function owner() external view returns (address);

    /// @notice Set the address of the new owner of the contract
    /// @param _newOwner The address of the new owner of the contract
    function transferOwnership(address _newOwner) external;
}

contract ERC173 is IERC173, ERC165  {
    address private _owner;

    constructor() public {
        _registerInterface(0x7f5828d0);
        _transferOwnership(msg.sender);
    }

    modifier onlyOwner() {
        require(msg.sender == owner(), "Must be owner");
        _;
    }

    function owner() public view returns (address) {
        return _owner;
    }

    function transferOwnership(address _newOwner) public onlyOwner() {
        _transferOwnership(_newOwner);
    }

    function _transferOwnership(address _newOwner) internal {
        address previousOwner = owner();
	_owner = _newOwner;
        emit OwnershipTransferred(previousOwner, _newOwner);
    }
}

contract Operatable is ERC173 {
    using Roles for Roles.Role;

    event OperatorAdded(address indexed account);
    event OperatorRemoved(address indexed account);

    event Paused(address account);
    event Unpaused(address account);

    bool private _paused;
    Roles.Role private operators;

    constructor() public {
        operators.add(msg.sender);
        _paused = false;
    }

    modifier onlyOperator() {
        require(isOperator(msg.sender), "Must be operator");
        _;
    }

    modifier whenNotPaused() {
        require(!_paused, "Pausable: paused");
        _;
    }

    modifier whenPaused() {
        require(_paused, "Pausable: not paused");
        _;
    }

    function transferOwnership(address _newOwner) public onlyOperator() {
        _transferOwnership(_newOwner);
    }

    function isOperator(address account) public view returns (bool) {
        return operators.has(account);
    }

    function addOperator(address account) public onlyOperator() {
        operators.add(account);
        emit OperatorAdded(account);
    }

    function removeOperator(address account) public onlyOperator() {
        operators.remove(account);
        emit OperatorRemoved(account);
    }

    function paused() public view returns (bool) {
        return _paused;
    }

    function pause() public onlyOperator() whenNotPaused() {
        _paused = true;
        emit Paused(msg.sender);
    }

    function unpause() public onlyOperator() whenPaused() {
        _paused = false;
        emit Unpaused(msg.sender);
    }

    function withdrawEther() public onlyOperator() {
        msg.sender.transfer(address(this).balance);
    }

}

contract ERC721Metadata is IERC721Metadata, ERC721, Operatable {
    using Uint256 for uint256;
    using String for string;

    event UpdateTokenURIPrefix(
        string tokenUriPrefix
    );

    // Metadata
    string private __name;
    string private __symbol;
    string private __tokenUriPrefix;

    constructor(string memory _name,
                string memory _symbol,
                string memory _tokenUriPrefix) public {
        // ERC721Metadata
        __name = _name;
        __symbol = _symbol;
        setTokenURIPrefix(_tokenUriPrefix);
    }

    function setTokenURIPrefix(string memory _tokenUriPrefix) public onlyOperator() {
        __tokenUriPrefix = _tokenUriPrefix;
        emit UpdateTokenURIPrefix(_tokenUriPrefix);
    }

    function name() public view returns (string memory) {
        return __name;
    }

    function symbol() public view returns (string memory) {
        return __symbol;
    }

    function tokenURI(uint256 _tokenId) public view returns (string memory) {
        return __tokenUriPrefix.concat(_tokenId.toString());
    }
}

contract ERC721TokenPausable is ERC721,Operatable {
    using Roles for Roles.Role;
    Roles.Role private tokenPauser;

    event TokenPauserAdded(address indexed account);
    event TokenPauserRemoved(address indexed account);

    event TokenPaused(uint256 indexed tokenId);
    event TokenUnpaused(uint256 indexed tokenId);

    mapping (uint256 => bool) private _tokenPaused;

    constructor() public {
        tokenPauser.add(msg.sender);
    }

    modifier onlyTokenPauser() {
        require(isTokenPauser(msg.sender), "Only token pauser can call this method");
        _;
    }

    modifier whenNotTokenPaused(uint256 _tokenId) {
        require(!isTokenPaused(_tokenId), "TokenPausable: paused");
        _;
    }

    modifier whenTokenPaused(uint256 _tokenId) {
        require(isTokenPaused(_tokenId), "TokenPausable: not paused");
        _;
    }

    function pauseToken(uint256 _tokenId) public onlyTokenPauser() {
        require(!isTokenPaused(_tokenId), "Token is already paused");
        _tokenPaused[_tokenId] = true;
        emit TokenPaused(_tokenId);
    }

    function unpauseToken(uint256 _tokenId) public onlyTokenPauser() {
        require(isTokenPaused(_tokenId), "Token is not paused");
        _tokenPaused[_tokenId] = false;
        emit TokenUnpaused(_tokenId);
    }

    function isTokenPaused(uint256 _tokenId) public view returns (bool) {
        return _tokenPaused[_tokenId];
    }

    function isTokenPauser(address account) public view returns (bool) {
        return tokenPauser.has(account);
    }

    function addTokenPauser(address account) public onlyOperator() {
        tokenPauser.add(account);
        emit TokenPauserAdded(account);
    }

    function removeTokenPauser(address account) public onlyOperator() {
        tokenPauser.remove(account);
        emit TokenPauserRemoved(account);
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory _data) public payable
                            whenNotPaused() whenNotTokenPaused(_tokenId) {
        super.safeTransferFrom(_from, _to, _tokenId, _data);
    }

    function safeTransferFrom(address _from, address _to, uint256 _tokenId) public payable
                            whenNotPaused() whenNotTokenPaused(_tokenId) {
        super.safeTransferFrom(_from, _to, _tokenId);
    }

    function transferFrom(address _from, address _to, uint256 _tokenId) public payable
                            whenNotPaused() whenNotTokenPaused(_tokenId) {
        super.transferFrom(_from, _to, _tokenId);
    }
}

interface IERC721Mintable {
    event MinterAdded(address indexed account);
    event MinterRemoved(address indexed account);
    function exist(uint256 _tokenId) external view returns (bool);
    function mint(address _to, uint256 _tokenId) external;
    function isMinter(address account) external view returns (bool);
    function addMinter(address account) external;
    function removeMinter(address account) external;
}

contract ERC721Mintable is ERC721, IERC721Mintable, Operatable {
    using Roles for Roles.Role;
    Roles.Role private minters;

    constructor() public {
        addMinter(msg.sender);
    }

    modifier onlyMinter() {
        require(isMinter(msg.sender), "Must be minter");
        _;
    }

    function isMinter(address account) public view returns (bool) {
        return minters.has(account);
    }

    function addMinter(address account) public onlyOperator() {
        minters.add(account);
        emit MinterAdded(account);
    }

    function removeMinter(address account) public onlyOperator() {
        minters.remove(account);
        emit MinterRemoved(account);
    }
    
    function exist(uint256 tokenId) public view returns (bool) {
        return _exist(tokenId);
    }

    function mint(address to, uint256 tokenId) public onlyMinter() {
        _mint(to, tokenId);
    }
}
interface IERC721CappedSupply /* IERC721Mintable, IERC721 */ {
    event SetUnitCap(uint32 _assetType, uint32 _unitCap);
    event SetTypeCap(uint256 _typeCap);
    function totalSupply() external view returns (uint256);
    function getTypeOffset() external view returns (uint256);
    function getTypeCap() external view returns (uint256);
    function setTypeCap(uint32 _newTypeCap) external;
    function getTypeCount() external view returns (uint256);
    function existingType(uint32 _assetType) external view returns (bool);
    function getUnitCap(uint32 _assetType) external view returns (uint32);
    function setUnitCap(uint32 _assetType, uint32 _newUnitCap) external;
    function mint(address _to, uint256 _tokenId) external;
}

/// @title ERC-721 Capped Supply
/// @author double jump.tokyo inc.
/// @dev see https://medium.com/@makzent/ca1008866871
contract ERC721CappedSupply is IERC721CappedSupply, ERC721Mintable {
    using Uint256 for uint256;
    using Uint32 for uint32;

    uint32 private assetTypeOffset;
    mapping(uint32 => uint32) private unitCap;
    mapping(uint32 => uint32) private unitCount;
    mapping(uint32 => bool) private unitCapIsSet;
    uint256 private assetTypeCap = 2**256-1;
    uint256 private assetTypeCount = 0;
    uint256 private totalCount = 0;

    constructor(uint32 _assetTypeOffset) public {
        setTypeOffset(_assetTypeOffset);
    }

    function isValidOffset(uint32 _offset) private pure returns (bool) {
        for (uint32 i = _offset; i > 0; i = i.div(10)) {
            if (i == 10) {
                return true;
            }
            if (i.mod(10) != 0) {
                return false;
            }
        }
        return false;
    }

    function totalSupply() public view returns (uint256) {
        return totalCount;
    }

    function setTypeOffset(uint32 _assetTypeOffset) private {
        require(isValidOffset(_assetTypeOffset),  "Offset is invalid");
        assetTypeCap = assetTypeCap / _assetTypeOffset;
        assetTypeOffset = _assetTypeOffset;
    }

    function getTypeOffset() public view returns (uint256) {
        return assetTypeOffset;
    }

    function setTypeCap(uint32 _newTypeCap) public onlyMinter() {
        require(_newTypeCap < assetTypeCap, "New type cap cannot be less than existing type cap");
        require(_newTypeCap >= assetTypeCount, "New type cap must be more than current type count");
        assetTypeCap = _newTypeCap;
        emit SetTypeCap(_newTypeCap);
    }

    function getTypeCap() public view returns (uint256) {
        return assetTypeCap;
    }

    function getTypeCount() public view returns (uint256) {
        return assetTypeCount;
    }

    function existingType(uint32 _assetType) public view returns (bool) {
        return unitCapIsSet[_assetType];
    }

    function setUnitCap(uint32 _assetType, uint32 _newUnitCap) public onlyMinter() {
        require(_assetType != 0, "Asset Type must not be 0");
        require(_newUnitCap < assetTypeOffset, "New unit cap must be less than asset type offset");

        if (!existingType(_assetType)) {
            unitCapIsSet[_assetType] = true;
            assetTypeCount = assetTypeCount.add(1);
            require(assetTypeCount <= assetTypeCap, "Asset type cap is exceeded");
        } else {
            require(_newUnitCap < getUnitCap(_assetType), "New unit cap must be less than previous unit cap");
            require(_newUnitCap >= getUnitCount(_assetType), "New unit cap must be more than current unit count");
        }

        unitCap[_assetType] = _newUnitCap;
        emit SetUnitCap(_assetType, _newUnitCap);
    }

    function getUnitCap(uint32 _assetType) public view returns (uint32) {
        require(existingType(_assetType), "Asset type does not exist");
        return unitCap[_assetType];
    }

    function getUnitCount(uint32 _assetType) public view returns (uint32) {
        return unitCount[_assetType];
    }

    function mint(address _to, uint256 _tokenId) public onlyMinter() {
        require(_tokenId.mod(assetTypeOffset) != 0, "Index must not be 0");
        uint32 assetType = uint32(_tokenId.div(assetTypeOffset));
        unitCount[assetType] = unitCount[assetType].add(1);
        totalCount = totalCount.add(1);
        require(unitCount[assetType] <= getUnitCap(assetType), "Asset unit cap is exceed");
        super.mint(_to, _tokenId);
    }
}

contract BFHUnit is
                    ERC721TokenPausable,
                    ERC721CappedSupply(10000),
                    ERC721Metadata("BFH:Unit", "BFHU", "https://bravefrontierheroes.com/metadata/units/")
                    {

    event UpdateApprovalProxy(address _newProxyContract);
    IApprovalProxy public approvalProxy;
    constructor(address _approvalProxy) public {
        setApprovalProxy(_approvalProxy);
    }

    function setApprovalProxy(address _new) public onlyOperator() {
        approvalProxy = IApprovalProxy(_new);
        emit UpdateApprovalProxy(_new);
    }

    function setApprovalForAll(address _spender, bool _approved) public {
        if (address(approvalProxy) != address(0x0) && _spender.isContract()) {
            approvalProxy.setApprovalForAll(msg.sender, _spender, _approved);
        }
        super.setApprovalForAll(_spender, _approved);
    }

    function isApprovedForAll(address _owner, address _spender) public view returns (bool) {
        bool original = super.isApprovedForAll(_owner, _spender);
        if (address(approvalProxy) != address(0x0)) {
            return approvalProxy.isApprovedForAll(_owner, _spender, original);
        }
        return original;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_approvalProxy","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":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"OperatorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"OperatorRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_typeCap","type":"uint256"}],"name":"SetTypeCap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint32","name":"_assetType","type":"uint32"},{"indexed":false,"internalType":"uint32","name":"_unitCap","type":"uint32"}],"name":"SetUnitCap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"TokenPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"TokenPauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"TokenPauserRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"TokenUnpaused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_newProxyContract","type":"address"}],"name":"UpdateApprovalProxy","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"tokenUriPrefix","type":"string"}],"name":"UpdateTokenURIPrefix","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addTokenPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"approvalProxy","outputs":[{"internalType":"contract IApprovalProxy","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_approved","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":true,"stateMutability":"payable","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":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"exist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint32","name":"_assetType","type":"uint32"}],"name":"existingType","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","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":[],"name":"getTypeCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTypeCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getTypeOffset","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint32","name":"_assetType","type":"uint32"}],"name":"getUnitCap","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint32","name":"_assetType","type":"uint32"}],"name":"getUnitCount","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_spender","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"isTokenPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTokenPauser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","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":false,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"pauseToken","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":"address","name":"account","type":"address"}],"name":"removeMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeOperator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeTokenPauser","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"}],"name":"safeTransferFrom","outputs":[],"payable":true,"stateMutability":"payable","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":true,"stateMutability":"payable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_new","type":"address"}],"name":"setApprovalProxy","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_tokenUriPrefix","type":"string"}],"name":"setTokenURIPrefix","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint32","name":"_newTypeCap","type":"uint32"}],"name":"setTypeCap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint32","name":"_assetType","type":"uint32"},{"internalType":"uint32","name":"_newUnitCap","type":"uint32"}],"name":"setUnitCap","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":"_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":true,"stateMutability":"payable","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"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"unpauseToken","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawEther","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

6080604052600019600e556000600f5560006010553480156200002157600080fd5b5060405162003cd738038062003cd7833981810160405260208110156200004757600080fd5b5051604080518082018252600881527f4246483a556e697400000000000000000000000000000000000000000000000060208281019190915282518084018452600481527f424648550000000000000000000000000000000000000000000000000000000081830152835160608101909452602f80855292939092909162003ca890830139612710620001037f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b036200024416565b620001377f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b036200024416565b6200016b7f7f5828d0000000000000000000000000000000000000000000000000000000006001600160e01b036200024416565b6200017f336001600160e01b036200031316565b6200019a3360066200037c60201b620027131790919060201c565b6005805460ff60a01b19169055620001c06007336200037c602090811b6200271317901c565b620001d4336001600160e01b036200042316565b620001e8816001600160e01b03620004f516565b508251620001fe906011906020860190620009c0565b50815162000214906012906020850190620009c0565b5062000229816001600160e01b03620005a716565b5050506200023d81620006dc60201b60201c565b5062000a62565b7fffffffff000000000000000000000000000000000000000000000000000000008082161415620002d657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015290519081900360640190fd5b7fffffffff00000000000000000000000000000000000000000000000000000000166000908152602081905260409020805460ff19166001179055565b6000620003286001600160e01b03620007b016565b600580546001600160a01b0319166001600160a01b0385811691821790925560405192935091908316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6200039182826001600160e01b03620007c016565b15620003fe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f726f6c6520616c72656164792068617320746865206163636f756e7400000000604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b62000437336001600160e01b03620007df16565b620004a357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4d757374206265206f70657261746f7200000000000000000000000000000000604482015290519081900360640190fd5b620004be8160096200037c60201b620027131790919060201c565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b62000509816001600160e01b036200080416565b6200057557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f666673657420697320696e76616c6964000000000000000000000000000000604482015290519081900360640190fd5b8063ffffffff16600e54816200058757fe5b04600e55600a805463ffffffff191663ffffffff92909216919091179055565b620005bb336001600160e01b03620007df16565b6200062757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4d757374206265206f70657261746f7200000000000000000000000000000000604482015290519081900360640190fd5b80516200063c906013906020840190620009c0565b507fd5e477fc51908e22673125c3b4666c4a72f49feb8665fd3875e224a58ca9659a816040518080602001828103825283818151815260200191508051906020019080838360005b838110156200069e57818101518382015260200162000684565b50505050905090810190601f168015620006cc5780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b620006f0336001600160e01b03620007df16565b6200075c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f4d757374206265206f70657261746f7200000000000000000000000000000000604482015290519081900360640190fd5b601480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f12be4820d03362d1f48434d870b2fc1549b3a3d16d891eeaac7c3073f3ded8b79181900360200190a150565b6005546001600160a01b03165b90565b6001600160a01b03166000908152602091909152604090205460ff1690565b6000620007fc826006620007c060201b620026f41790919060201c565b90505b919050565b6000815b63ffffffff81161562000891578063ffffffff16600a141562000830576001915050620007ff565b62000851600a8263ffffffff166200089a60201b62002f0d1790919060201c565b63ffffffff161562000868576000915050620007ff565b62000889600a8263ffffffff166200092d60201b62002f6a1790919060201c565b905062000808565b50600092915050565b600063ffffffff82166200090f57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600b60248201527f6d6f64756c6f2062792030000000000000000000000000000000000000000000604482015290519081900360640190fd5b8163ffffffff168363ffffffff16816200092557fe5b069392505050565b600063ffffffff8216620009a257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f6469766973696f6e206279203000000000000000000000000000000000000000604482015290519081900360640190fd5b8163ffffffff168363ffffffff1681620009b857fe5b049392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000a0357805160ff191683800117855562000a33565b8280016001018555821562000a33579182015b8281111562000a3357825182559160200191906001019062000a16565b5062000a4192915062000a45565b5090565b620007bd91905b8082111562000a41576000815560010162000a4c565b6132368062000a726000396000f3fe6080604052600436106102725760003560e01c8063776ab6341161014f578063ac8a584a116100c1578063ca1728fd1161007a578063ca1728fd14610a8e578063d644736814610ac6578063e985e9c514610af0578063ed841bf114610b2b578063f2fde38b14610b5e578063fbd395f814610b9157610272565b8063ac8a584a146108f3578063b88d4fde14610926578063b97d7895146109ec578063c000582714610a1c578063c2508c4614610a31578063c87b56dd14610a6457610272565b8063983b2d5611610113578063983b2d56146107395780639870d7fe1461076c57806399e0dd7c1461079f5780639bb5c9c314610852578063a22cb46514610885578063aa271e1a146108c057610272565b8063776ab634146106bb5780637d02b1a3146106e55780638456cb59146106fa5780638da5cb5b1461070f57806395d89b411461072457610272565b80634dd09f33116101e85780636352211e116101ac5780636352211e146105b35780636d70f7ae146105dd57806370a08231146106105780637362377b14610643578063739f66871461065857806374db07d81461068857610272565b80634dd09f33146104e65780634ebbc92a146104fb578063532efe60146105255780635c975abb1461056e57806362977e2c1461058357610272565b806323b872dd1161023a57806323b872dd146103e45780632cff5b391461041a5780633092afd51461042f5780633f4ba83a1461046257806340c10f191461047757806342842e0e146104b057610272565b806301ffc9a71461027757806306fdde03146102bf578063081812fc14610349578063095ea7b31461038f57806318160ddd146103bd575b600080fd5b34801561028357600080fd5b506102ab6004803603602081101561029a57600080fd5b50356001600160e01b031916610bbb565b604080519115158252519081900360200190f35b3480156102cb57600080fd5b506102d4610bda565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561030e5781810151838201526020016102f6565b50505050905090810190601f16801561033b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561035557600080fd5b506103736004803603602081101561036c57600080fd5b5035610c71565b604080516001600160a01b039092168252519081900360200190f35b6103bb600480360360408110156103a557600080fd5b506001600160a01b038135169060200135610ce9565b005b3480156103c957600080fd5b506103d2610da7565b60408051918252519081900360200190f35b6103bb600480360360608110156103fa57600080fd5b506001600160a01b03813581169160208101359091169060400135610dad565b34801561042657600080fd5b506103d2610e64565b34801561043b57600080fd5b506103bb6004803603602081101561045257600080fd5b50356001600160a01b0316610e6a565b34801561046e57600080fd5b506103bb610eff565b34801561048357600080fd5b506103bb6004803603604081101561049a57600080fd5b506001600160a01b038135169060200135610fe3565b6103bb600480360360608110156104c657600080fd5b506001600160a01b03813581169160208101359091169060400135611195565b3480156104f257600080fd5b50610373611246565b34801561050757600080fd5b506102ab6004803603602081101561051e57600080fd5b5035611255565b34801561053157600080fd5b506105556004803603602081101561054857600080fd5b503563ffffffff16611266565b6040805163ffffffff9092168252519081900360200190f35b34801561057a57600080fd5b506102ab611281565b34801561058f57600080fd5b506103bb600480360360208110156105a657600080fd5b503563ffffffff16611291565b3480156105bf57600080fd5b50610373600480360360208110156105d657600080fd5b50356113aa565b3480156105e957600080fd5b506102ab6004803603602081101561060057600080fd5b50356001600160a01b0316611422565b34801561061c57600080fd5b506103d26004803603602081101561063357600080fd5b50356001600160a01b0316611435565b34801561064f57600080fd5b506103bb611450565b34801561066457600080fd5b506105556004803603602081101561067b57600080fd5b503563ffffffff166114cd565b34801561069457600080fd5b506103bb600480360360208110156106ab57600080fd5b50356001600160a01b0316611545565b3480156106c757600080fd5b506103bb600480360360208110156106de57600080fd5b50356115da565b3480156106f157600080fd5b506103d26116ae565b34801561070657600080fd5b506103bb6116b4565b34801561071b57600080fd5b5061037361179b565b34801561073057600080fd5b506102d46117aa565b34801561074557600080fd5b506103bb6004803603602081101561075c57600080fd5b50356001600160a01b031661180b565b34801561077857600080fd5b506103bb6004803603602081101561078f57600080fd5b50356001600160a01b03166118a0565b3480156107ab57600080fd5b506103bb600480360360208110156107c257600080fd5b8101906020810181356401000000008111156107dd57600080fd5b8201836020820111156107ef57600080fd5b8035906020019184600183028401116401000000008311171561081157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611935945050505050565b34801561085e57600080fd5b506103bb6004803603602081101561087557600080fd5b50356001600160a01b0316611a32565b34801561089157600080fd5b506103bb600480360360408110156108a857600080fd5b506001600160a01b0381351690602001351515611ad3565b3480156108cc57600080fd5b506102ab600480360360208110156108e357600080fd5b50356001600160a01b0316611b82565b3480156108ff57600080fd5b506103bb6004803603602081101561091657600080fd5b50356001600160a01b0316611b95565b6103bb6004803603608081101561093c57600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561097757600080fd5b82018360208201111561098957600080fd5b803590602001918460018302840111640100000000831117156109ab57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611c2a945050505050565b3480156109f857600080fd5b506102ab60048036036020811015610a0f57600080fd5b503563ffffffff16611ce3565b348015610a2857600080fd5b506103d2611cfe565b348015610a3d57600080fd5b506103bb60048036036020811015610a5457600080fd5b50356001600160a01b0316611d0a565b348015610a7057600080fd5b506102d460048036036020811015610a8757600080fd5b5035611d9f565b348015610a9a57600080fd5b506103bb60048036036040811015610ab157600080fd5b5063ffffffff81358116916020013516611e46565b348015610ad257600080fd5b506102ab60048036036020811015610ae957600080fd5b50356120e0565b348015610afc57600080fd5b506102ab60048036036040811015610b1357600080fd5b506001600160a01b03813581169160200135166120f5565b348015610b3757600080fd5b506102ab60048036036020811015610b4e57600080fd5b50356001600160a01b03166121af565b348015610b6a57600080fd5b506103bb60048036036020811015610b8157600080fd5b50356001600160a01b03166121c2565b348015610b9d57600080fd5b506103bb60048036036020811015610bb457600080fd5b5035612218565b6001600160e01b03191660009081526020819052604090205460ff1690565b60118054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c665780601f10610c3b57610100808354040283529160200191610c66565b820191906000526020600020905b815481529060010190602001808311610c4957829003601f168201915b505050505090505b90565b6000610c7c826122fa565b610ccd576040805162461bcd60e51b815260206004820152601e60248201527f605f746f6b656e496460206973206e6f7420612076616c6964204e46542e0000604482015290519081900360640190fd5b506000908152600360205260409020546001600160a01b031690565b6000610cf4826113aa565b9050336001600160a01b0382161480610d125750610d1281336120f5565b610d4d5760405162461bcd60e51b815260040180806020018281038252605d8152602001806130fb605d913960600191505060405180910390fd5b60008281526003602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051849233917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050565b60105490565b600554600160a01b900460ff1615610dff576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b80610e09816120e0565b15610e53576040805162461bcd60e51b8152602060048201526015602482015274151bdad95b94185d5cd8589b194e881c185d5cd959605a1b604482015290519081900360640190fd5b610e5e848484612317565b50505050565b600e5490565b610e7333611422565b610eb7576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b610ec860098263ffffffff61247416565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b610f0833611422565b610f4c576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b600554600160a01b900460ff16610fa1576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6005805460ff60a01b191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b610fec33611b82565b61102e576040805162461bcd60e51b815260206004820152600e60248201526d26bab9ba1031329036b4b73a32b960911b604482015290519081900360640190fd5b600a5461104690829063ffffffff908116906124f116565b61108d576040805162461bcd60e51b81526020600482015260136024820152720496e646578206d757374206e6f74206265203606c1b604482015290519081900360640190fd5b600a546000906110a890839063ffffffff9081169061254416565b63ffffffff8082166000908152600c60205260409020549192506110d29181169060019061259916565b63ffffffff8281166000908152600c60205260409020805463ffffffff19169282169290921790915560105461110b916001906125f016565b601055611117816114cd565b63ffffffff8281166000908152600c602052604090205491811691161115611186576040805162461bcd60e51b815260206004820152601860248201527f417373657420756e697420636170206973206578636565640000000000000000604482015290519081900360640190fd5b611190838361263e565b505050565b600554600160a01b900460ff16156111e7576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b806111f1816120e0565b1561123b576040805162461bcd60e51b8152602060048201526015602482015274151bdad95b94185d5cd8589b194e881c185d5cd959605a1b604482015290519081900360640190fd5b610e5e848484612693565b6014546001600160a01b031681565b6000611260826122fa565b92915050565b63ffffffff9081166000908152600c60205260409020541690565b600554600160a01b900460ff1690565b61129a33611b82565b6112dc576040805162461bcd60e51b815260206004820152600e60248201526d26bab9ba1031329036b4b73a32b960911b604482015290519081900360640190fd5b600e548163ffffffff16106113225760405162461bcd60e51b81526004018080602001828103825260328152602001806131796032913960400191505060405180910390fd5b600f548163ffffffff1610156113695760405162461bcd60e51b81526004018080602001828103825260318152602001806131ab6031913960400191505060405180910390fd5b63ffffffff8116600e81905560408051918252517fcffe07c9e7982b6c56cb569d21caedd78c8fbc68a0cbdc4d963c21eae6e8f9109181900360200190a150565b60006113b5826122fa565b611406576040805162461bcd60e51b815260206004820152601e60248201527f605f746f6b656e496460206973206e6f7420612076616c6964204e46542e0000604482015290519081900360640190fd5b506000908152600160205260409020546001600160a01b031690565b600061126060068363ffffffff6126f416565b6001600160a01b031660009081526002602052604090205490565b61145933611422565b61149d576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b6040513390303180156108fc02916000818181858888f193505050501580156114ca573d6000803e3d6000fd5b50565b60006114d882611ce3565b611529576040805162461bcd60e51b815260206004820152601960248201527f4173736574207479706520646f6573206e6f7420657869737400000000000000604482015290519081900360640190fd5b5063ffffffff9081166000908152600b60205260409020541690565b61154e33611422565b611592576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b6115a360078263ffffffff61271316565b6040516001600160a01b038216907fff12d576e2fecf516eb406e6618d5e97bcc8046690863b984069b15ada11d61290600090a250565b6115e3336121af565b61161e5760405162461bcd60e51b81526004018080602001828103825260268152602001806131dc6026913960400191505060405180910390fd5b611627816120e0565b61166e576040805162461bcd60e51b8152602060048201526013602482015272151bdad95b881a5cc81b9bdd081c185d5cd959606a1b604482015290519081900360640190fd5b600081815260086020526040808220805460ff191690555182917f0cfa9cc56bacd896c88effb6a4051b954fcaaf2de7ae98882e39f294ea65184391a250565b600f5490565b6116bd33611422565b611701576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b600554600160a01b900460ff1615611753576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6005805460ff60a01b1916600160a01b1790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6005546001600160a01b031690565b60128054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c665780601f10610c3b57610100808354040283529160200191610c66565b61181433611422565b611858576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b61186960098263ffffffff61271316565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6118a933611422565b6118ed576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b6118fe60068263ffffffff61271316565b6040516001600160a01b038216907fac6fa858e9350a46cec16539926e0fde25b7629f84b5a72bffaae4df888ae86d90600090a250565b61193e33611422565b611982576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b8051611995906013906020840190612e75565b507fd5e477fc51908e22673125c3b4666c4a72f49feb8665fd3875e224a58ca9659a816040518080602001828103825283818151815260200191508051906020019080838360005b838110156119f55781810151838201526020016119dd565b50505050905090810190601f168015611a225780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b611a3b33611422565b611a7f576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b601480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f12be4820d03362d1f48434d870b2fc1549b3a3d16d891eeaac7c3073f3ded8b79181900360200190a150565b6014546001600160a01b031615801590611afa5750611afa826001600160a01b0316612794565b15611b745760145460408051631b3b02e560e11b81523360048201526001600160a01b03858116602483015284151560448301529151919092169163367605ca91606480830192600092919082900301818387803b158015611b5b57600080fd5b505af1158015611b6f573d6000803e3d6000fd5b505050505b611b7e828261279a565b5050565b600061126060098363ffffffff6126f416565b611b9e33611422565b611be2576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b611bf360068263ffffffff61247416565b6040516001600160a01b038216907f80c0b871b97b595b16a7741c1b06fed0c6f6f558639f18ccbce50724325dc40d90600090a250565b600554600160a01b900460ff1615611c7c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b81611c86816120e0565b15611cd0576040805162461bcd60e51b8152602060048201526015602482015274151bdad95b94185d5cd8589b194e881c185d5cd959605a1b604482015290519081900360640190fd5b611cdc858585856127a5565b5050505050565b63ffffffff166000908152600d602052604090205460ff1690565b600a5463ffffffff1690565b611d1333611422565b611d57576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b611d6860078263ffffffff61247416565b6040516001600160a01b038216907f2186c7d8e4b2d6a73790355b1a465872175798d2366146e638fc885d54460b8590600090a250565b6060611260611dad83612804565b6013805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611e335780601f10611e0857610100808354040283529160200191611e33565b820191906000526020600020905b815481529060010190602001808311611e1657829003601f168201915b50505050506128d990919063ffffffff16565b611e4f33611b82565b611e91576040805162461bcd60e51b815260206004820152600e60248201526d26bab9ba1031329036b4b73a32b960911b604482015290519081900360640190fd5b63ffffffff8216611ee9576040805162461bcd60e51b815260206004820152601860248201527f41737365742054797065206d757374206e6f7420626520300000000000000000604482015290519081900360640190fd5b600a5463ffffffff90811690821610611f335760405162461bcd60e51b81526004018080602001828103825260308152602001806130cb6030913960400191505060405180910390fd5b611f3c82611ce3565b611fd45763ffffffff8083166000908152600d60205260409020805460ff19166001908117909155600f54611f74929091906125f016565b600f819055600e541015611fcf576040805162461bcd60e51b815260206004820152601a60248201527f4173736574207479706520636170206973206578636565646564000000000000604482015290519081900360640190fd5b612079565b611fdd826114cd565b63ffffffff168163ffffffff16106120265760405162461bcd60e51b81526004018080602001828103825260308152602001806130316030913960400191505060405180910390fd5b61202f82611266565b63ffffffff168163ffffffff1610156120795760405162461bcd60e51b815260040180806020018281038252603181526020018061309a6031913960400191505060405180910390fd5b63ffffffff8281166000818152600b6020908152604091829020805463ffffffff19169486169485179055815192835282019290925281517f30525f07d1d2ff6b7c2b1817c13c37935c691304253dd353909b5c0381a9dc40929181900390910190a15050565b60009081526008602052604090205460ff1690565b6000806121028484612994565b6014549091506001600160a01b0316156121a857601454604080516346e67e2960e11b81526001600160a01b0387811660048301528681166024830152841515604483015291519190921691638dccfc52916064808301926020929190829003018186803b15801561217357600080fd5b505afa158015612187573d6000803e3d6000fd5b505050506040513d602081101561219d57600080fd5b505191506112609050565b9392505050565b600061126060078363ffffffff6126f416565b6121cb33611422565b61220f576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b6114ca816129a0565b612221336121af565b61225c5760405162461bcd60e51b81526004018080602001828103825260268152602001806131dc6026913960400191505060405180910390fd5b612265816120e0565b156122b7576040805162461bcd60e51b815260206004820152601760248201527f546f6b656e20697320616c726561647920706175736564000000000000000000604482015290519081900360640190fd5b600081815260086020526040808220805460ff191660011790555182917fc2d830ac158eec7b589dfadf012044c95b8646222991556ab4cd311e38bc77d191a250565b6000908152600160205260409020546001600160a01b0316151590565b61232133826129fe565b61235c5760405162461bcd60e51b8152600401808060200182810382526067815260200180612fca6067913960800191505060405180910390fd5b826001600160a01b031661236f826113aa565b6001600160a01b0316146123b45760405162461bcd60e51b81526004018080602001828103825260218152602001806131586021913960400191505060405180910390fd5b6001600160a01b03821661240f576040805162461bcd60e51b815260206004820152601a60248201527f605f746f6020697320746865207a65726f20616464726573732e000000000000604482015290519081900360640190fd5b612418816122fa565b612469576040805162461bcd60e51b815260206004820152601e60248201527f605f746f6b656e496460206973206e6f7420612076616c6964204e46542e0000604482015290519081900360640190fd5b611190838383612a5d565b61247e82826126f4565b6124cf576040805162461bcd60e51b815260206004820152601d60248201527f726f6c6520646f73656e2774206861766520746865206163636f756e74000000604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b600081612533576040805162461bcd60e51b815260206004820152600b60248201526a06d6f64756c6f20627920360ac1b604482015290519081900360640190fd5b81838161253c57fe5b069392505050565b600081612588576040805162461bcd60e51b815260206004820152600d60248201526c06469766973696f6e206279203609c1b604482015290519081900360640190fd5b81838161259157fe5b049392505050565b600082820163ffffffff80851690821610156121a8576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b6000828201838110156121a8576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b61264733611b82565b612689576040805162461bcd60e51b815260206004820152600e60248201526d26bab9ba1031329036b4b73a32b960911b604482015290519081900360640190fd5b611b7e8282612b30565b6126ae83838360405180602001604052806000815250612c17565b6126e95760405162461bcd60e51b81526004018080602001828103825260398152602001806130616039913960400191505060405180910390fd5b611190838383610dad565b6001600160a01b03166000908152602091909152604090205460ff1690565b61271d82826126f4565b1561276f576040805162461bcd60e51b815260206004820152601c60248201527f726f6c6520616c72656164792068617320746865206163636f756e7400000000604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b3b151590565b611b7e338383612d4a565b8051156127f9576040805162461bcd60e51b815260206004820152601760248201527f64617461206973206e6f7420696d706c656d656e746564000000000000000000604482015290519081900360640190fd5b610e5e848484611195565b60606000808361281d57600360fc1b915060010161285a565b835b80156128585761010083049250600a8106603001600160f81b0260001b83179250600a818161284a57fe5b60019093019204905061281f565b505b6060816040519080825280601f01601f191660200182016040528015612887576020820181803883390190505b50905060005b828110156128d0578381602081106128a157fe5b1a60f81b8282815181106128b157fe5b60200101906001600160f81b031916908160001a90535060010161288d565b50949350505050565b606082826040516020018083805190602001908083835b6020831061290f5780518252601f1990920191602091820191016128f0565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106129575780518252601f199092019160209182019101612938565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052905092915050565b60006121a88383612db8565b60006129aa61179b565b600580546001600160a01b0319166001600160a01b0385811691821790925560405192935091908316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080612a0a836113aa565b9050806001600160a01b0316846001600160a01b03161480612a455750836001600160a01b0316612a3a84610c71565b6001600160a01b0316145b80612a555750612a5581856120f5565b949350505050565b612a6681612de6565b600081815260016020818152604080842080546001600160a01b0319166001600160a01b038881169190911790915587168452600290915290912054612aab91612e21565b6001600160a01b038085166000908152600260205260408082209390935590841681522054612ae190600163ffffffff6125f016565b6001600160a01b03808416600081815260026020526040808220949094559251849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612b39816122fa565b15612b8b576040805162461bcd60e51b815260206004820152601960248201527f6d696e7420746f6b656e20616c72656164792065786973747300000000000000604482015290519081900360640190fd5b600081815260016020818152604080842080546001600160a01b0319166001600160a01b0388169081179091558452600290915290912054612bcc916125f0565b6001600160a01b0383166000818152600260205260408082209390935591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000612c2b846001600160a01b0316612794565b612c3757506001612a55565b604051630a85bd0160e11b815233600482018181526001600160a01b03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b83811015612cb1578181015183820152602001612c99565b50505050905090810190601f168015612cde5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015612d0057600080fd5b505af1158015612d14573d6000803e3d6000fd5b505050506040513d6020811015612d2a57600080fd5b50516001600160e01b031916630a85bd0160e11b14915050949350505050565b6001600160a01b03838116600081815260046020908152604080832094871680845294825291829020805460ff1916861515908117909155825190815291517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319281900390910190a3505050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6000818152600360205260409020546001600160a01b0316156114ca57600090815260036020526040902080546001600160a01b0319169055565b600081831015612e6f576040805162461bcd60e51b81526020600482015260146024820152737375627472616374696f6e206f766572666c6f7760601b604482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612eb657805160ff1916838001178555612ee3565b82800160010185558215612ee3579182015b82811115612ee3578251825591602001919060010190612ec8565b50612eef929150612ef3565b5090565b610c6e91905b80821115612eef5760008155600101612ef9565b600063ffffffff8216612f55576040805162461bcd60e51b815260206004820152600b60248201526a06d6f64756c6f20627920360ac1b604482015290519081900360640190fd5b8163ffffffff168363ffffffff168161253c57fe5b600063ffffffff8216612fb4576040805162461bcd60e51b815260206004820152600d60248201526c06469766973696f6e206279203609c1b604482015290519081900360640190fd5b8163ffffffff168363ffffffff168161259157fefe556e6c65737320606d73672e73656e64657260206973207468652063757272656e74206f776e65722c20616e20617574686f72697a6564206f70657261746f722c206f722074686520617070726f766564206164647265737320666f722074686973204e46542e4e657720756e697420636170206d757374206265206c657373207468616e2070726576696f757320756e697420636170605f746f60206973206120736d61727420636f6e747261637420616e64206f6e455243373231526563656976656420697320696e76616c69644e657720756e697420636170206d757374206265206d6f7265207468616e2063757272656e7420756e697420636f756e744e657720756e697420636170206d757374206265206c657373207468616e2061737365742074797065206f6666736574556e6c65737320606d73672e73656e64657260206973207468652063757272656e74204e4654206f776e65722c206f7220616e20617574686f72697a6564206f70657261746f72206f66207468652063757272656e74206f776e65722e605f66726f6d60206973206e6f74207468652063757272656e74206f776e65722e4e65772074797065206361702063616e6e6f74206265206c657373207468616e206578697374696e672074797065206361704e6577207479706520636170206d757374206265206d6f7265207468616e2063757272656e74207479706520636f756e744f6e6c7920746f6b656e207061757365722063616e2063616c6c2074686973206d6574686f64a265627a7a72315820d506f9fe37bed5f8efb64a109452c51bea04c52ee8ee21e051ae1d8d9d4d820164736f6c634300050c003268747470733a2f2f627261766566726f6e746965726865726f65732e636f6d2f6d657461646174612f756e6974732f000000000000000000000000aa06e5c117dbe8bc52dbaa18aaf447eda556b13c

Deployed Bytecode

0x6080604052600436106102725760003560e01c8063776ab6341161014f578063ac8a584a116100c1578063ca1728fd1161007a578063ca1728fd14610a8e578063d644736814610ac6578063e985e9c514610af0578063ed841bf114610b2b578063f2fde38b14610b5e578063fbd395f814610b9157610272565b8063ac8a584a146108f3578063b88d4fde14610926578063b97d7895146109ec578063c000582714610a1c578063c2508c4614610a31578063c87b56dd14610a6457610272565b8063983b2d5611610113578063983b2d56146107395780639870d7fe1461076c57806399e0dd7c1461079f5780639bb5c9c314610852578063a22cb46514610885578063aa271e1a146108c057610272565b8063776ab634146106bb5780637d02b1a3146106e55780638456cb59146106fa5780638da5cb5b1461070f57806395d89b411461072457610272565b80634dd09f33116101e85780636352211e116101ac5780636352211e146105b35780636d70f7ae146105dd57806370a08231146106105780637362377b14610643578063739f66871461065857806374db07d81461068857610272565b80634dd09f33146104e65780634ebbc92a146104fb578063532efe60146105255780635c975abb1461056e57806362977e2c1461058357610272565b806323b872dd1161023a57806323b872dd146103e45780632cff5b391461041a5780633092afd51461042f5780633f4ba83a1461046257806340c10f191461047757806342842e0e146104b057610272565b806301ffc9a71461027757806306fdde03146102bf578063081812fc14610349578063095ea7b31461038f57806318160ddd146103bd575b600080fd5b34801561028357600080fd5b506102ab6004803603602081101561029a57600080fd5b50356001600160e01b031916610bbb565b604080519115158252519081900360200190f35b3480156102cb57600080fd5b506102d4610bda565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561030e5781810151838201526020016102f6565b50505050905090810190601f16801561033b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561035557600080fd5b506103736004803603602081101561036c57600080fd5b5035610c71565b604080516001600160a01b039092168252519081900360200190f35b6103bb600480360360408110156103a557600080fd5b506001600160a01b038135169060200135610ce9565b005b3480156103c957600080fd5b506103d2610da7565b60408051918252519081900360200190f35b6103bb600480360360608110156103fa57600080fd5b506001600160a01b03813581169160208101359091169060400135610dad565b34801561042657600080fd5b506103d2610e64565b34801561043b57600080fd5b506103bb6004803603602081101561045257600080fd5b50356001600160a01b0316610e6a565b34801561046e57600080fd5b506103bb610eff565b34801561048357600080fd5b506103bb6004803603604081101561049a57600080fd5b506001600160a01b038135169060200135610fe3565b6103bb600480360360608110156104c657600080fd5b506001600160a01b03813581169160208101359091169060400135611195565b3480156104f257600080fd5b50610373611246565b34801561050757600080fd5b506102ab6004803603602081101561051e57600080fd5b5035611255565b34801561053157600080fd5b506105556004803603602081101561054857600080fd5b503563ffffffff16611266565b6040805163ffffffff9092168252519081900360200190f35b34801561057a57600080fd5b506102ab611281565b34801561058f57600080fd5b506103bb600480360360208110156105a657600080fd5b503563ffffffff16611291565b3480156105bf57600080fd5b50610373600480360360208110156105d657600080fd5b50356113aa565b3480156105e957600080fd5b506102ab6004803603602081101561060057600080fd5b50356001600160a01b0316611422565b34801561061c57600080fd5b506103d26004803603602081101561063357600080fd5b50356001600160a01b0316611435565b34801561064f57600080fd5b506103bb611450565b34801561066457600080fd5b506105556004803603602081101561067b57600080fd5b503563ffffffff166114cd565b34801561069457600080fd5b506103bb600480360360208110156106ab57600080fd5b50356001600160a01b0316611545565b3480156106c757600080fd5b506103bb600480360360208110156106de57600080fd5b50356115da565b3480156106f157600080fd5b506103d26116ae565b34801561070657600080fd5b506103bb6116b4565b34801561071b57600080fd5b5061037361179b565b34801561073057600080fd5b506102d46117aa565b34801561074557600080fd5b506103bb6004803603602081101561075c57600080fd5b50356001600160a01b031661180b565b34801561077857600080fd5b506103bb6004803603602081101561078f57600080fd5b50356001600160a01b03166118a0565b3480156107ab57600080fd5b506103bb600480360360208110156107c257600080fd5b8101906020810181356401000000008111156107dd57600080fd5b8201836020820111156107ef57600080fd5b8035906020019184600183028401116401000000008311171561081157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611935945050505050565b34801561085e57600080fd5b506103bb6004803603602081101561087557600080fd5b50356001600160a01b0316611a32565b34801561089157600080fd5b506103bb600480360360408110156108a857600080fd5b506001600160a01b0381351690602001351515611ad3565b3480156108cc57600080fd5b506102ab600480360360208110156108e357600080fd5b50356001600160a01b0316611b82565b3480156108ff57600080fd5b506103bb6004803603602081101561091657600080fd5b50356001600160a01b0316611b95565b6103bb6004803603608081101561093c57600080fd5b6001600160a01b0382358116926020810135909116916040820135919081019060808101606082013564010000000081111561097757600080fd5b82018360208201111561098957600080fd5b803590602001918460018302840111640100000000831117156109ab57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611c2a945050505050565b3480156109f857600080fd5b506102ab60048036036020811015610a0f57600080fd5b503563ffffffff16611ce3565b348015610a2857600080fd5b506103d2611cfe565b348015610a3d57600080fd5b506103bb60048036036020811015610a5457600080fd5b50356001600160a01b0316611d0a565b348015610a7057600080fd5b506102d460048036036020811015610a8757600080fd5b5035611d9f565b348015610a9a57600080fd5b506103bb60048036036040811015610ab157600080fd5b5063ffffffff81358116916020013516611e46565b348015610ad257600080fd5b506102ab60048036036020811015610ae957600080fd5b50356120e0565b348015610afc57600080fd5b506102ab60048036036040811015610b1357600080fd5b506001600160a01b03813581169160200135166120f5565b348015610b3757600080fd5b506102ab60048036036020811015610b4e57600080fd5b50356001600160a01b03166121af565b348015610b6a57600080fd5b506103bb60048036036020811015610b8157600080fd5b50356001600160a01b03166121c2565b348015610b9d57600080fd5b506103bb60048036036020811015610bb457600080fd5b5035612218565b6001600160e01b03191660009081526020819052604090205460ff1690565b60118054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c665780601f10610c3b57610100808354040283529160200191610c66565b820191906000526020600020905b815481529060010190602001808311610c4957829003601f168201915b505050505090505b90565b6000610c7c826122fa565b610ccd576040805162461bcd60e51b815260206004820152601e60248201527f605f746f6b656e496460206973206e6f7420612076616c6964204e46542e0000604482015290519081900360640190fd5b506000908152600360205260409020546001600160a01b031690565b6000610cf4826113aa565b9050336001600160a01b0382161480610d125750610d1281336120f5565b610d4d5760405162461bcd60e51b815260040180806020018281038252605d8152602001806130fb605d913960600191505060405180910390fd5b60008281526003602052604080822080546001600160a01b0319166001600160a01b0387169081179091559051849233917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259190a4505050565b60105490565b600554600160a01b900460ff1615610dff576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b80610e09816120e0565b15610e53576040805162461bcd60e51b8152602060048201526015602482015274151bdad95b94185d5cd8589b194e881c185d5cd959605a1b604482015290519081900360640190fd5b610e5e848484612317565b50505050565b600e5490565b610e7333611422565b610eb7576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b610ec860098263ffffffff61247416565b6040516001600160a01b038216907fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669290600090a250565b610f0833611422565b610f4c576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b600554600160a01b900460ff16610fa1576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6005805460ff60a01b191690556040805133815290517f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa9181900360200190a1565b610fec33611b82565b61102e576040805162461bcd60e51b815260206004820152600e60248201526d26bab9ba1031329036b4b73a32b960911b604482015290519081900360640190fd5b600a5461104690829063ffffffff908116906124f116565b61108d576040805162461bcd60e51b81526020600482015260136024820152720496e646578206d757374206e6f74206265203606c1b604482015290519081900360640190fd5b600a546000906110a890839063ffffffff9081169061254416565b63ffffffff8082166000908152600c60205260409020549192506110d29181169060019061259916565b63ffffffff8281166000908152600c60205260409020805463ffffffff19169282169290921790915560105461110b916001906125f016565b601055611117816114cd565b63ffffffff8281166000908152600c602052604090205491811691161115611186576040805162461bcd60e51b815260206004820152601860248201527f417373657420756e697420636170206973206578636565640000000000000000604482015290519081900360640190fd5b611190838361263e565b505050565b600554600160a01b900460ff16156111e7576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b806111f1816120e0565b1561123b576040805162461bcd60e51b8152602060048201526015602482015274151bdad95b94185d5cd8589b194e881c185d5cd959605a1b604482015290519081900360640190fd5b610e5e848484612693565b6014546001600160a01b031681565b6000611260826122fa565b92915050565b63ffffffff9081166000908152600c60205260409020541690565b600554600160a01b900460ff1690565b61129a33611b82565b6112dc576040805162461bcd60e51b815260206004820152600e60248201526d26bab9ba1031329036b4b73a32b960911b604482015290519081900360640190fd5b600e548163ffffffff16106113225760405162461bcd60e51b81526004018080602001828103825260328152602001806131796032913960400191505060405180910390fd5b600f548163ffffffff1610156113695760405162461bcd60e51b81526004018080602001828103825260318152602001806131ab6031913960400191505060405180910390fd5b63ffffffff8116600e81905560408051918252517fcffe07c9e7982b6c56cb569d21caedd78c8fbc68a0cbdc4d963c21eae6e8f9109181900360200190a150565b60006113b5826122fa565b611406576040805162461bcd60e51b815260206004820152601e60248201527f605f746f6b656e496460206973206e6f7420612076616c6964204e46542e0000604482015290519081900360640190fd5b506000908152600160205260409020546001600160a01b031690565b600061126060068363ffffffff6126f416565b6001600160a01b031660009081526002602052604090205490565b61145933611422565b61149d576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b6040513390303180156108fc02916000818181858888f193505050501580156114ca573d6000803e3d6000fd5b50565b60006114d882611ce3565b611529576040805162461bcd60e51b815260206004820152601960248201527f4173736574207479706520646f6573206e6f7420657869737400000000000000604482015290519081900360640190fd5b5063ffffffff9081166000908152600b60205260409020541690565b61154e33611422565b611592576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b6115a360078263ffffffff61271316565b6040516001600160a01b038216907fff12d576e2fecf516eb406e6618d5e97bcc8046690863b984069b15ada11d61290600090a250565b6115e3336121af565b61161e5760405162461bcd60e51b81526004018080602001828103825260268152602001806131dc6026913960400191505060405180910390fd5b611627816120e0565b61166e576040805162461bcd60e51b8152602060048201526013602482015272151bdad95b881a5cc81b9bdd081c185d5cd959606a1b604482015290519081900360640190fd5b600081815260086020526040808220805460ff191690555182917f0cfa9cc56bacd896c88effb6a4051b954fcaaf2de7ae98882e39f294ea65184391a250565b600f5490565b6116bd33611422565b611701576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b600554600160a01b900460ff1615611753576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6005805460ff60a01b1916600160a01b1790556040805133815290517f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2589181900360200190a1565b6005546001600160a01b031690565b60128054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610c665780601f10610c3b57610100808354040283529160200191610c66565b61181433611422565b611858576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b61186960098263ffffffff61271316565b6040516001600160a01b038216907f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f690600090a250565b6118a933611422565b6118ed576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b6118fe60068263ffffffff61271316565b6040516001600160a01b038216907fac6fa858e9350a46cec16539926e0fde25b7629f84b5a72bffaae4df888ae86d90600090a250565b61193e33611422565b611982576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b8051611995906013906020840190612e75565b507fd5e477fc51908e22673125c3b4666c4a72f49feb8665fd3875e224a58ca9659a816040518080602001828103825283818151815260200191508051906020019080838360005b838110156119f55781810151838201526020016119dd565b50505050905090810190601f168015611a225780820380516001836020036101000a031916815260200191505b509250505060405180910390a150565b611a3b33611422565b611a7f576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b601480546001600160a01b0383166001600160a01b0319909116811790915560408051918252517f12be4820d03362d1f48434d870b2fc1549b3a3d16d891eeaac7c3073f3ded8b79181900360200190a150565b6014546001600160a01b031615801590611afa5750611afa826001600160a01b0316612794565b15611b745760145460408051631b3b02e560e11b81523360048201526001600160a01b03858116602483015284151560448301529151919092169163367605ca91606480830192600092919082900301818387803b158015611b5b57600080fd5b505af1158015611b6f573d6000803e3d6000fd5b505050505b611b7e828261279a565b5050565b600061126060098363ffffffff6126f416565b611b9e33611422565b611be2576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b611bf360068263ffffffff61247416565b6040516001600160a01b038216907f80c0b871b97b595b16a7741c1b06fed0c6f6f558639f18ccbce50724325dc40d90600090a250565b600554600160a01b900460ff1615611c7c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b81611c86816120e0565b15611cd0576040805162461bcd60e51b8152602060048201526015602482015274151bdad95b94185d5cd8589b194e881c185d5cd959605a1b604482015290519081900360640190fd5b611cdc858585856127a5565b5050505050565b63ffffffff166000908152600d602052604090205460ff1690565b600a5463ffffffff1690565b611d1333611422565b611d57576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b611d6860078263ffffffff61247416565b6040516001600160a01b038216907f2186c7d8e4b2d6a73790355b1a465872175798d2366146e638fc885d54460b8590600090a250565b6060611260611dad83612804565b6013805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015611e335780601f10611e0857610100808354040283529160200191611e33565b820191906000526020600020905b815481529060010190602001808311611e1657829003601f168201915b50505050506128d990919063ffffffff16565b611e4f33611b82565b611e91576040805162461bcd60e51b815260206004820152600e60248201526d26bab9ba1031329036b4b73a32b960911b604482015290519081900360640190fd5b63ffffffff8216611ee9576040805162461bcd60e51b815260206004820152601860248201527f41737365742054797065206d757374206e6f7420626520300000000000000000604482015290519081900360640190fd5b600a5463ffffffff90811690821610611f335760405162461bcd60e51b81526004018080602001828103825260308152602001806130cb6030913960400191505060405180910390fd5b611f3c82611ce3565b611fd45763ffffffff8083166000908152600d60205260409020805460ff19166001908117909155600f54611f74929091906125f016565b600f819055600e541015611fcf576040805162461bcd60e51b815260206004820152601a60248201527f4173736574207479706520636170206973206578636565646564000000000000604482015290519081900360640190fd5b612079565b611fdd826114cd565b63ffffffff168163ffffffff16106120265760405162461bcd60e51b81526004018080602001828103825260308152602001806130316030913960400191505060405180910390fd5b61202f82611266565b63ffffffff168163ffffffff1610156120795760405162461bcd60e51b815260040180806020018281038252603181526020018061309a6031913960400191505060405180910390fd5b63ffffffff8281166000818152600b6020908152604091829020805463ffffffff19169486169485179055815192835282019290925281517f30525f07d1d2ff6b7c2b1817c13c37935c691304253dd353909b5c0381a9dc40929181900390910190a15050565b60009081526008602052604090205460ff1690565b6000806121028484612994565b6014549091506001600160a01b0316156121a857601454604080516346e67e2960e11b81526001600160a01b0387811660048301528681166024830152841515604483015291519190921691638dccfc52916064808301926020929190829003018186803b15801561217357600080fd5b505afa158015612187573d6000803e3d6000fd5b505050506040513d602081101561219d57600080fd5b505191506112609050565b9392505050565b600061126060078363ffffffff6126f416565b6121cb33611422565b61220f576040805162461bcd60e51b815260206004820152601060248201526f26bab9ba1031329037b832b930ba37b960811b604482015290519081900360640190fd5b6114ca816129a0565b612221336121af565b61225c5760405162461bcd60e51b81526004018080602001828103825260268152602001806131dc6026913960400191505060405180910390fd5b612265816120e0565b156122b7576040805162461bcd60e51b815260206004820152601760248201527f546f6b656e20697320616c726561647920706175736564000000000000000000604482015290519081900360640190fd5b600081815260086020526040808220805460ff191660011790555182917fc2d830ac158eec7b589dfadf012044c95b8646222991556ab4cd311e38bc77d191a250565b6000908152600160205260409020546001600160a01b0316151590565b61232133826129fe565b61235c5760405162461bcd60e51b8152600401808060200182810382526067815260200180612fca6067913960800191505060405180910390fd5b826001600160a01b031661236f826113aa565b6001600160a01b0316146123b45760405162461bcd60e51b81526004018080602001828103825260218152602001806131586021913960400191505060405180910390fd5b6001600160a01b03821661240f576040805162461bcd60e51b815260206004820152601a60248201527f605f746f6020697320746865207a65726f20616464726573732e000000000000604482015290519081900360640190fd5b612418816122fa565b612469576040805162461bcd60e51b815260206004820152601e60248201527f605f746f6b656e496460206973206e6f7420612076616c6964204e46542e0000604482015290519081900360640190fd5b611190838383612a5d565b61247e82826126f4565b6124cf576040805162461bcd60e51b815260206004820152601d60248201527f726f6c6520646f73656e2774206861766520746865206163636f756e74000000604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19169055565b600081612533576040805162461bcd60e51b815260206004820152600b60248201526a06d6f64756c6f20627920360ac1b604482015290519081900360640190fd5b81838161253c57fe5b069392505050565b600081612588576040805162461bcd60e51b815260206004820152600d60248201526c06469766973696f6e206279203609c1b604482015290519081900360640190fd5b81838161259157fe5b049392505050565b600082820163ffffffff80851690821610156121a8576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b6000828201838110156121a8576040805162461bcd60e51b81526020600482015260116024820152706164646974696f6e206f766572666c6f7760781b604482015290519081900360640190fd5b61264733611b82565b612689576040805162461bcd60e51b815260206004820152600e60248201526d26bab9ba1031329036b4b73a32b960911b604482015290519081900360640190fd5b611b7e8282612b30565b6126ae83838360405180602001604052806000815250612c17565b6126e95760405162461bcd60e51b81526004018080602001828103825260398152602001806130616039913960400191505060405180910390fd5b611190838383610dad565b6001600160a01b03166000908152602091909152604090205460ff1690565b61271d82826126f4565b1561276f576040805162461bcd60e51b815260206004820152601c60248201527f726f6c6520616c72656164792068617320746865206163636f756e7400000000604482015290519081900360640190fd5b6001600160a01b0316600090815260209190915260409020805460ff19166001179055565b3b151590565b611b7e338383612d4a565b8051156127f9576040805162461bcd60e51b815260206004820152601760248201527f64617461206973206e6f7420696d706c656d656e746564000000000000000000604482015290519081900360640190fd5b610e5e848484611195565b60606000808361281d57600360fc1b915060010161285a565b835b80156128585761010083049250600a8106603001600160f81b0260001b83179250600a818161284a57fe5b60019093019204905061281f565b505b6060816040519080825280601f01601f191660200182016040528015612887576020820181803883390190505b50905060005b828110156128d0578381602081106128a157fe5b1a60f81b8282815181106128b157fe5b60200101906001600160f81b031916908160001a90535060010161288d565b50949350505050565b606082826040516020018083805190602001908083835b6020831061290f5780518252601f1990920191602091820191016128f0565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b602083106129575780518252601f199092019160209182019101612938565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052905092915050565b60006121a88383612db8565b60006129aa61179b565b600580546001600160a01b0319166001600160a01b0385811691821790925560405192935091908316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080612a0a836113aa565b9050806001600160a01b0316846001600160a01b03161480612a455750836001600160a01b0316612a3a84610c71565b6001600160a01b0316145b80612a555750612a5581856120f5565b949350505050565b612a6681612de6565b600081815260016020818152604080842080546001600160a01b0319166001600160a01b038881169190911790915587168452600290915290912054612aab91612e21565b6001600160a01b038085166000908152600260205260408082209390935590841681522054612ae190600163ffffffff6125f016565b6001600160a01b03808416600081815260026020526040808220949094559251849391928716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b612b39816122fa565b15612b8b576040805162461bcd60e51b815260206004820152601960248201527f6d696e7420746f6b656e20616c72656164792065786973747300000000000000604482015290519081900360640190fd5b600081815260016020818152604080842080546001600160a01b0319166001600160a01b0388169081179091558452600290915290912054612bcc916125f0565b6001600160a01b0383166000818152600260205260408082209390935591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000612c2b846001600160a01b0316612794565b612c3757506001612a55565b604051630a85bd0160e11b815233600482018181526001600160a01b03888116602485015260448401879052608060648501908152865160848601528651600095928a169463150b7a029490938c938b938b939260a4019060208501908083838e5b83811015612cb1578181015183820152602001612c99565b50505050905090810190601f168015612cde5780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015612d0057600080fd5b505af1158015612d14573d6000803e3d6000fd5b505050506040513d6020811015612d2a57600080fd5b50516001600160e01b031916630a85bd0160e11b14915050949350505050565b6001600160a01b03838116600081815260046020908152604080832094871680845294825291829020805460ff1916861515908117909155825190815291517f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319281900390910190a3505050565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b6000818152600360205260409020546001600160a01b0316156114ca57600090815260036020526040902080546001600160a01b0319169055565b600081831015612e6f576040805162461bcd60e51b81526020600482015260146024820152737375627472616374696f6e206f766572666c6f7760601b604482015290519081900360640190fd5b50900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612eb657805160ff1916838001178555612ee3565b82800160010185558215612ee3579182015b82811115612ee3578251825591602001919060010190612ec8565b50612eef929150612ef3565b5090565b610c6e91905b80821115612eef5760008155600101612ef9565b600063ffffffff8216612f55576040805162461bcd60e51b815260206004820152600b60248201526a06d6f64756c6f20627920360ac1b604482015290519081900360640190fd5b8163ffffffff168363ffffffff168161253c57fe5b600063ffffffff8216612fb4576040805162461bcd60e51b815260206004820152600d60248201526c06469766973696f6e206279203609c1b604482015290519081900360640190fd5b8163ffffffff168363ffffffff168161259157fefe556e6c65737320606d73672e73656e64657260206973207468652063757272656e74206f776e65722c20616e20617574686f72697a6564206f70657261746f722c206f722074686520617070726f766564206164647265737320666f722074686973204e46542e4e657720756e697420636170206d757374206265206c657373207468616e2070726576696f757320756e697420636170605f746f60206973206120736d61727420636f6e747261637420616e64206f6e455243373231526563656976656420697320696e76616c69644e657720756e697420636170206d757374206265206d6f7265207468616e2063757272656e7420756e697420636f756e744e657720756e697420636170206d757374206265206c657373207468616e2061737365742074797065206f6666736574556e6c65737320606d73672e73656e64657260206973207468652063757272656e74204e4654206f776e65722c206f7220616e20617574686f72697a6564206f70657261746f72206f66207468652063757272656e74206f776e65722e605f66726f6d60206973206e6f74207468652063757272656e74206f776e65722e4e65772074797065206361702063616e6e6f74206265206c657373207468616e206578697374696e672074797065206361704e6577207479706520636170206d757374206265206d6f7265207468616e2063757272656e74207479706520636f756e744f6e6c7920746f6b656e207061757365722063616e2063616c6c2074686973206d6574686f64a265627a7a72315820d506f9fe37bed5f8efb64a109452c51bea04c52ee8ee21e051ae1d8d9d4d820164736f6c634300050c0032

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

000000000000000000000000aa06e5c117dbe8bc52dbaa18aaf447eda556b13c

-----Decoded View---------------
Arg [0] : _approvalProxy (address): 0xAa06e5c117dbe8bC52dBaa18AaF447eDA556B13c

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000aa06e5c117dbe8bc52dbaa18aaf447eda556b13c


Deployed Bytecode Sourcemap

26572:1262:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4728:135;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4728:135:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4728:135:0;-1:-1:-1;;;;;;4728:135:0;;:::i;:::-;;;;;;;;;;;;;;;;;;17720:84;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17720:84:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17720:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11430:206;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11430:206:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11430:206:0;;:::i;:::-;;;;-1:-1:-1;;;;;11430:206:0;;;;;;;;;;;;;;10631:419;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;10631:419:0;;;;;;;;:::i;:::-;;23830:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23830:89:0;;;:::i;:::-;;;;;;;;;;;;;;;;20470:216;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20470:216:0;;;;;;;;;;;;;;;;;:::i;24632:90::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24632:90:0;;;:::i;21702:141::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21702:141:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21702:141:0;-1:-1:-1;;;;;21702:141:0;;:::i;16684:124::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16684:124:0;;;:::i;26117:448::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26117:448:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;26117:448:0;;;;;;;;:::i;20238:224::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;20238:224:0;;;;;;;;;;;;;;;;;:::i;26878:35::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26878:35:0;;;:::i;21855:100::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21855:100:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21855:100:0;;:::i;25992:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25992:117:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25992:117:0;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16468:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16468:78:0;;;:::i;24278:346::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24278:346:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24278:346:0;;;;:::i;9279:199::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9279:199:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9279:199:0;;:::i;16046:112::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16046:112:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16046:112:0;-1:-1:-1;;;;;16046:112:0;;:::i;9164:107::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9164:107:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;9164:107:0;-1:-1:-1;;;;;9164:107:0;;:::i;16816:108::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16816:108:0;;;:::i;25798:186::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25798:186:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25798:186:0;;;;:::i;19661:147::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19661:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19661:147:0;-1:-1:-1;;;;;19661:147:0;;:::i;19185:219::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19185:219:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19185:219:0;;:::i;24730:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24730:94:0;;;:::i;16554:122::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16554:122:0;;;:::i;14784:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14784:79:0;;;:::i;17812:88::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17812:88:0;;;:::i;21561:133::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21561:133:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21561:133:0;-1:-1:-1;;;;;21561:133:0;;:::i;16166:139::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16166:139:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16166:139:0;-1:-1:-1;;;;;16166:139:0;;:::i;17526:186::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17526:186:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17526:186:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;17526:186:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17526:186: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;17526:186:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;17526:186:0;;-1:-1:-1;17526:186:0;;-1:-1:-1;;;;;17526:186:0:i;27022:158::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27022:158:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27022:158:0;-1:-1:-1;;;;;27022:158:0;;:::i;27188:301::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27188:301:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;27188:301:0;;;;;;;;;;:::i;21445:108::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21445:108:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21445:108:0;-1:-1:-1;;;;;21445:108:0;;:::i;16313:147::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16313:147:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16313:147:0;-1:-1:-1;;;;;16313:147:0;;:::i;19979:251::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;19979:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;19979:251:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;19979:251: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;19979:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;19979:251:0;;-1:-1:-1;19979:251:0;;-1:-1:-1;;;;;19979:251:0:i;24832:118::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24832:118:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24832:118:0;;;;:::i;24174:96::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24174:96:0;;;:::i;19816:155::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19816:155:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19816:155:0;-1:-1:-1;;;;;19816:155:0;;:::i;17908:142::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17908:142:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17908:142:0;;:::i;24958:832::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24958:832:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24958:832:0;;;;;;;;;;;:::i;19412:116::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19412:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19412:116:0;;:::i;27497:334::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27497:334:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;27497:334:0;;;;;;;;;;:::i;19536:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19536:117:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19536:117:0;-1:-1:-1;;;;;19536:117:0;;:::i;15922:116::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15922:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15922:116:0;-1:-1:-1;;;;;15922:116:0;;:::i;18958:219::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18958:219:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18958:219:0;;:::i;4728:135::-;-1:-1:-1;;;;;;4822:33:0;4798:4;4822:33;;;;;;;;;;;;;;4728:135::o;17720:84::-;17790:6;17783:13;;;;;;;;-1:-1:-1;;17783:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17757;;17783;;17790:6;;17783:13;;17790:6;17783:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17720:84;;:::o;11430:206::-;11490:7;11518:16;11525:8;11518:6;:16::i;:::-;11510:76;;;;;-1:-1:-1;;;11510:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11604:24:0;;;;:14;:24;;;;;;-1:-1:-1;;;;;11604:24:0;;11430:206::o;10631:419::-;10711:13;10727:17;10735:8;10727:7;:17::i;:::-;10711:33;-1:-1:-1;10763:10:0;-1:-1:-1;;;;;10763:19:0;;;;:58;;;10786:35;10803:5;10810:10;10786:16;:35::i;:::-;10755:181;;;;-1:-1:-1;;;10755:181:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10949:24;;;;:14;:24;;;;;;:36;;-1:-1:-1;;;;;;10949:36:0;-1:-1:-1;;;;;10949:36:0;;;;;;;;11001:41;;10949:24;;11010:10;;11001:41;;10949:24;11001:41;10631:419;;;:::o;23830:89::-;23901:10;;23830:89;:::o;20470:216::-;15765:7;;-1:-1:-1;;;15765:7:0;;;;15764:8;15756:37;;;;;-1:-1:-1;;;15756:37:0;;;;;;;;;;;;-1:-1:-1;;;15756:37:0;;;;;;;;;;;;;;;20617:8;18738:23;18752:8;18738:13;:23::i;:::-;18737:24;18729:58;;;;;-1:-1:-1;;;18729:58:0;;;;;;;;;;;;-1:-1:-1;;;18729:58:0;;;;;;;;;;;;;;;20638:40;20657:5;20664:3;20669:8;20638:18;:40::i;:::-;15804:1;20470:216;;;:::o;24632:90::-;24702:12;;24632:90;:::o;21702:141::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;;;;21774:23;:7;21789;21774:23;:14;:23;:::i;:::-;21813:22;;-1:-1:-1;;;;;21813:22:0;;;;;;;;21702:141;:::o;16684:124::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;;;;15862:7;;-1:-1:-1;;;15862:7:0;;;;15854:40;;;;;-1:-1:-1;;;15854:40:0;;;;;;;;;;;;-1:-1:-1;;;15854:40:0;;;;;;;;;;;;;;;16749:7;:15;;-1:-1:-1;;;;16749:15:0;;;16780:20;;;16789:10;16780:20;;;;;;;;;;;;;16684:124::o;26117:448::-;21378:20;21387:10;21378:8;:20::i;:::-;21370:47;;;;;-1:-1:-1;;;21370:47:0;;;;;;;;;;;;-1:-1:-1;;;21370:47:0;;;;;;;;;;;;;;;26214:15;;26201:29;;:8;;26214:15;;;;;26201:12;:29;:::i;:::-;26193:66;;;;;-1:-1:-1;;;26193:66:0;;;;;;;;;;;;-1:-1:-1;;;26193:66:0;;;;;;;;;;;;;;;26309:15;;26270:16;;26296:29;;:8;;26309:15;;;;;26296:12;:29;:::i;:::-;26360:20;;;;;;;;:9;:20;;;;;;26270:56;;-1:-1:-1;26360:27:0;;:20;;;26385:1;;26360:24;:27;:::i;:::-;26337:20;;;;;;;;:9;:20;;;;;:50;;-1:-1:-1;;26337:50:0;;;;;;;;;;;26411:10;;:17;;-1:-1:-1;;26411:14:0;:17;:::i;:::-;26398:10;:30;26471:21;26482:9;26471:10;:21::i;:::-;26447:45;:20;;;;;;;:9;:20;;;;;;:45;;;:20;;:45;;26439:82;;;;;-1:-1:-1;;;26439:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26532:25;26543:3;26548:8;26532:10;:25::i;:::-;21428:1;26117:448;;:::o;20238:224::-;15765:7;;-1:-1:-1;;;15765:7:0;;;;15764:8;15756:37;;;;;-1:-1:-1;;;15756:37:0;;;;;;;;;;;;-1:-1:-1;;;15756:37:0;;;;;;;;;;;;;;;20389:8;18738:23;18752:8;18738:13;:23::i;:::-;18737:24;18729:58;;;;;-1:-1:-1;;;18729:58:0;;;;;;;;;;;;-1:-1:-1;;;18729:58:0;;;;;;;;;;;;;;;20410:44;20433:5;20440:3;20445:8;20410:22;:44::i;26878:35::-;;;-1:-1:-1;;;;;26878:35:0;;:::o;21855:100::-;21908:4;21932:15;21939:7;21932:6;:15::i;:::-;21925:22;21855:100;-1:-1:-1;;21855:100:0:o;25992:117::-;26080:21;;;;26054:6;26080:21;;;:9;:21;;;;;;;;25992:117::o;16468:78::-;16531:7;;-1:-1:-1;;;16531:7:0;;;;;16468:78::o;24278:346::-;21378:20;21387:10;21378:8;:20::i;:::-;21370:47;;;;;-1:-1:-1;;;21370:47:0;;;;;;;;;;;;-1:-1:-1;;;21370:47:0;;;;;;;;;;;;;;;24371:12;;24357:11;:26;;;24349:89;;;;-1:-1:-1;;;24349:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24472:14;;24457:11;:29;;;;24449:91;;;;-1:-1:-1;;;24449:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24551:26;;;:12;:26;;;24593:23;;;;;;;;;;;;;;;;24278:346;:::o;9279:199::-;9335:7;9363:16;9370:8;9363:6;:16::i;:::-;9355:76;;;;;-1:-1:-1;;;9355:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9449:21:0;;;;:11;:21;;;;;;-1:-1:-1;;;;;9449:21:0;;9279:199::o;16046:112::-;16104:4;16128:22;:9;16142:7;16128:22;:13;:22;:::i;9164:107::-;-1:-1:-1;;;;;9247:16:0;9220:7;9247:16;;;:8;:16;;;;;;;9164:107::o;16816:108::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;;;;16874:42;;:10;;16902:4;16894:21;16874:42;;;;;;;;;16894:21;16874:10;:42;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16874:42:0;16816:108::o;25798:186::-;25858:6;25885:24;25898:10;25885:12;:24::i;:::-;25877:62;;;;;-1:-1:-1;;;25877:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25957:19:0;;;;;;;;:7;:19;;;;;;;;25798:186::o;19661:147::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;;;;19735:24;:11;19751:7;19735:24;:15;:24;:::i;:::-;19775:25;;-1:-1:-1;;;;;19775:25:0;;;;;;;;19661:147;:::o;19185:219::-;18576:25;18590:10;18576:13;:25::i;:::-;18568:76;;;;-1:-1:-1;;;18568:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19269:23;19283:8;19269:13;:23::i;:::-;19261:55;;;;;-1:-1:-1;;;19261:55:0;;;;;;;;;;;;-1:-1:-1;;;19261:55:0;;;;;;;;;;;;;;;19352:5;19327:22;;;:12;:22;;;;;;:30;;-1:-1:-1;;19327:30:0;;;19373:23;19340:8;;19373:23;;;19185:219;:::o;24730:94::-;24802:14;;24730:94;:::o;16554:122::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;;;;15765:7;;-1:-1:-1;;;15765:7:0;;;;15764:8;15756:37;;;;;-1:-1:-1;;;15756:37:0;;;;;;;;;;;;-1:-1:-1;;;15756:37:0;;;;;;;;;;;;;;;16620:7;:14;;-1:-1:-1;;;;16620:14:0;-1:-1:-1;;;16620:14:0;;;16650:18;;;16657:10;16650:18;;;;;;;;;;;;;16554:122::o;14784:79::-;14849:6;;-1:-1:-1;;;;;14849:6:0;14784:79;:::o;17812:88::-;17884:8;17877:15;;;;;;;;-1:-1:-1;;17877:15:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17851:13;;17877:15;;17884:8;;17877:15;;17884:8;17877:15;;;;;;;;;;;;;;;;;;;;;;;;21561:133;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;;;;21630:20;:7;21642;21630:20;:11;:20;:::i;:::-;21666;;-1:-1:-1;;;;;21666:20:0;;;;;;;;21561:133;:::o;16166:139::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;;;;16237:22;:9;16251:7;16237:22;:13;:22;:::i;:::-;16275;;-1:-1:-1;;;;;16275:22:0;;;;;;;;16166:139;:::o;17526:186::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;;;;17617:34;;;;:16;;:34;;;;;:::i;:::-;;17667:37;17688:15;17667:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;17667:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17526:186;:::o;27022:158::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;;;;27095:13;:36;;-1:-1:-1;;;;;27095:36:0;;-1:-1:-1;;;;;;27095:36:0;;;;;;;;27147:25;;;;;;;;;;;;;;;;27022:158;:::o;27188:301::-;27279:13;;-1:-1:-1;;;;;27279:13:0;27271:38;;;;:63;;;27313:21;:8;-1:-1:-1;;;;;27313:19:0;;:21::i;:::-;27267:160;;;27351:13;;:64;;;-1:-1:-1;;;27351:64:0;;27383:10;27351:64;;;;-1:-1:-1;;;;;27351:64:0;;;;;;;;;;;;;;;;:13;;;;;:31;;:64;;;;;:13;;:64;;;;;;;:13;;:64;;;5:2:-1;;;;30:1;27;20:12;5:2;27351:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27351:64:0;;;;27267:160;27437:44;27461:8;27471:9;27437:23;:44::i;:::-;27188:301;;:::o;21445:108::-;21501:4;21525:20;:7;21537;21525:20;:11;:20;:::i;16313:147::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;;;;16387:25;:9;16404:7;16387:25;:16;:25;:::i;:::-;16428:24;;-1:-1:-1;;;;;16428:24:0;;;;;;;;16313:147;:::o;19979:251::-;15765:7;;-1:-1:-1;;;15765:7:0;;;;15764:8;15756:37;;;;;-1:-1:-1;;;15756:37:0;;;;;;;;;;;;-1:-1:-1;;;15756:37:0;;;;;;;;;;;;;;;20150:8;18738:23;18752:8;18738:13;:23::i;:::-;18737:24;18729:58;;;;;-1:-1:-1;;;18729:58:0;;;;;;;;;;;;-1:-1:-1;;;18729:58:0;;;;;;;;;;;;;;;20171:51;20194:5;20201:3;20206:8;20216:5;20171:22;:51::i;:::-;15804:1;19979:251;;;;:::o;24832:118::-;24918:24;;24894:4;24918:24;;;:12;:24;;;;;;;;;24832:118::o;24174:96::-;24247:15;;;;24174:96;:::o;19816:155::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;;;;19893:27;:11;19912:7;19893:27;:18;:27;:::i;:::-;19936;;-1:-1:-1;;;;;19936:27:0;;;;;;;;19816:155;:::o;17908:142::-;17965:13;17998:44;18022:19;:8;:17;:19::i;:::-;17998:16;:23;;;;;;;;;;;;;-1:-1:-1;;17998:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:16;:23;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;:::i;24958:832::-;21378:20;21387:10;21378:8;:20::i;:::-;21370:47;;;;;-1:-1:-1;;;21370:47:0;;;;;;;;;;;;-1:-1:-1;;;21370:47:0;;;;;;;;;;;;;;;25056:15;;;25048:52;;;;;-1:-1:-1;;;25048:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25133:15;;;;;;25119:29;;;;25111:90;;;;-1:-1:-1;;;25111:90:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25219:24;25232:10;25219:12;:24::i;:::-;25214:472;;25260:24;;;;;;;;:12;:24;;;;;:31;;-1:-1:-1;;25260:31:0;25287:4;25260:31;;;;;;25323:14;;:21;;:14;;25287:4;25323:18;:21;:::i;:::-;25306:14;:38;;;25385:12;;-1:-1:-1;25367:30:0;25359:69;;;;;-1:-1:-1;;;25359:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;25214:472;;;25483:22;25494:10;25483;:22::i;:::-;25469:36;;:11;:36;;;25461:97;;;;-1:-1:-1;;;25461:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25596:24;25609:10;25596:12;:24::i;:::-;25581:39;;:11;:39;;;;25573:101;;;;-1:-1:-1;;;25573:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25698:19;;;;;;;;:7;:19;;;;;;;;;:33;;-1:-1:-1;;25698:33:0;;;;;;;;;25747:35;;;;;;;;;;;;;;;;;;;;;;;;24958:832;;:::o;19412:116::-;19474:4;19498:22;;;:12;:22;;;;;;;;;19412:116::o;27497:334::-;27578:4;27595:13;27611:40;27634:6;27642:8;27611:22;:40::i;:::-;27674:13;;27595:56;;-1:-1:-1;;;;;;27674:13:0;27666:38;27662:136;;27728:13;;:58;;;-1:-1:-1;;;27728:58:0;;-1:-1:-1;;;;;27728:58:0;;;;;;;;;;;;;;;;;;;;;;;:13;;;;;:30;;:58;;;;;;;;;;;;;;:13;:58;;;5:2:-1;;;;30:1;27;20:12;5:2;27728:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27728:58:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27728:58:0;;-1:-1:-1;27721:65:0;;-1:-1:-1;27721:65:0;27662:136;27815:8;27497:334;-1:-1:-1;;;27497:334:0:o;19536:117::-;19597:4;19621:24;:11;19637:7;19621:24;:15;:24;:::i;15922:116::-;15649:22;15660:10;15649;:22::i;:::-;15641:51;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;-1:-1:-1;;;15641:51:0;;;;;;;;;;;;;;;16001:29;16020:9;16001:18;:29::i;18958:219::-;18576:25;18590:10;18576:13;:25::i;:::-;18568:76;;;;-1:-1:-1;;;18568:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19041:23;19055:8;19041:13;:23::i;:::-;19040:24;19032:60;;;;;-1:-1:-1;;;19032:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;19103:22;;;;:12;:22;;;;;;:29;;-1:-1:-1;;19103:29:0;19128:4;19103:29;;;19148:21;19116:8;;19148:21;;;18958:219;:::o;13170:156::-;13227:4;13260:21;;;:11;:21;;;;;;-1:-1:-1;;;;;13260:21:0;13299:19;;;13170:156::o;10016:607::-;10118:35;10132:10;10144:8;10118:13;:35::i;:::-;10110:168;;;;-1:-1:-1;;;10110:168:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10342:5;-1:-1:-1;;;;;10321:26:0;:17;10329:8;10321:7;:17::i;:::-;-1:-1:-1;;;;;10321:26:0;;10313:89;;;;-1:-1:-1;;;10313:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10421:17:0;;10413:73;;;;;-1:-1:-1;;;10413:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10505:16;10512:8;10505:6;:16::i;:::-;10497:76;;;;;-1:-1:-1;;;10497:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10584:31;10594:5;10601:3;10606:8;10584:9;:31::i;8278:179::-;8358:18;8362:4;8368:7;8358:3;:18::i;:::-;8350:60;;;;;-1:-1:-1;;;8350:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8421:20:0;8444:5;8421:20;;;;;;;;;;;:28;;-1:-1:-1;;8421:28:0;;;8278:179::o;6052:139::-;6110:7;6138:6;6130:30;;;;;-1:-1:-1;;;6130:30:0;;;;;;;;;;;;-1:-1:-1;;;6130:30:0;;;;;;;;;;;;;;;6182:1;6178;:5;;;;;;;6052:139;-1:-1:-1;;;6052:139:0:o;5903:141::-;5961:7;5989:6;5981:32;;;;;-1:-1:-1;;;5981:32:0;;;;;;;;;;;;-1:-1:-1;;;5981:32:0;;;;;;;;;;;;;;;6035:1;6031;:5;;;;;;;5903:141;-1:-1:-1;;;5903:141:0:o;1792:165::-;1848:6;1878:5;;;1902:6;;;;;;;;;1894:36;;;;;-1:-1:-1;;;1894:36:0;;;;;;;;;;;;-1:-1:-1;;;1894:36:0;;;;;;;;;;;;;;5326:169;5384:7;5416:5;;;5440:6;;;;5432:36;;;;;-1:-1:-1;;;5432:36:0;;;;;;;;;;;;-1:-1:-1;;;5432:36:0;;;;;;;;;;;;;;21963:100;21378:20;21387:10;21378:8;:20::i;:::-;21370:47;;;;;-1:-1:-1;;;21370:47:0;;;;;;;;;;;;-1:-1:-1;;;21370:47:0;;;;;;;;;;;;;;;22037:18;22043:2;22047:7;22037:5;:18::i;9722:286::-;9828:48;9851:5;9858:3;9863:8;9828:48;;;;;;;;;;;;:22;:48::i;:::-;9820:135;;;;-1:-1:-1;;;9820:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9966:34;9979:5;9986:3;9991:8;9966:12;:34::i;8465:124::-;-1:-1:-1;;;;;8561:20:0;8537:4;8561:20;;;;;;;;;;;;;;;8465:124::o;8095:175::-;8173:18;8177:4;8183:7;8173:3;:18::i;:::-;8172:19;8164:60;;;;;-1:-1:-1;;;8164:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8235:20:0;:11;:20;;;;;;;;;;;:27;;-1:-1:-1;;8235:27:0;8258:4;8235:27;;;8095:175::o;3451:174::-;3570:20;3609:8;;;3451:174::o;11058:140::-;11138:52;11157:10;11169:9;11180;11138:18;:52::i;9486:228::-;9612:12;;:17;9604:53;;;;;-1:-1:-1;;;9604:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9668:38;9685:5;9692:3;9697:8;9668:16;:38::i;6199:697::-;6251:13;6277:18;;6336:6;6332:375;;-1:-1:-1;;;6359:16:0;-1:-1:-1;6390:5:0;;6332:375;;;6444:1;6460:236;6467:9;;6460:236;;6541:6;6526:10;6518:30;;-1:-1:-1;6600:2:0;6592:5;:10;6606:2;6591:17;-1:-1:-1;;;6590:35:0;6582:44;;6568:58;;;;6654:2;6645:11;;;;;;6675:5;;;;;6645:11;;-1:-1:-1;6460:236:0;;;6332:375;;6719:16;6748:3;6738:14;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;6738:14:0;87:34:-1;135:17;;-1:-1;6738:14:0;-1:-1:-1;6719:33:0;-1:-1:-1;6763:9:0;6785:75;6801:3;6797:1;:7;6785:75;;;6835:10;6846:1;6835:13;;;;;;;;;;6826:3;6830:1;6826:6;;;;;;;;;;;:22;-1:-1:-1;;;;;6826:22:0;;;;;;;;-1:-1:-1;6806:3:0;;6785:75;;;-1:-1:-1;6884:3:0;6199:697;-1:-1:-1;;;;6199:697:0:o;3271:148::-;3346:13;3403:2;3407;3386:24;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;299:10;344;;263:2;259:12;;;254:3;250:22;-1:-1;;246:30;311:9;;295:26;;;340:21;;377:20;365:33;;3386:24:0;;;;;;;;;;-1:-1:-1;3386:24:0;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;3386:24:0;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3386:24:0;;;3372:39;;3271:148;;;;:::o;11644:150::-;11726:4;11750:36;11768:6;11776:9;11750:17;:36::i;14992:190::-;15059:21;15083:7;:5;:7::i;:::-;15094:6;:18;;-1:-1:-1;;;;;;15094:18:0;-1:-1:-1;;;;;15094:18:0;;;;;;;;;15128:46;;15059:31;;-1:-1:-1;15094:18:0;15128:46;;;;;;-1:-1:-1;;15128:46:0;14992:190;;:::o;11968:250::-;12050:4;12066:13;12082:17;12090:8;12082:7;:17::i;:::-;12066:33;;12130:5;-1:-1:-1;;;;;12118:17:0;:8;-1:-1:-1;;;;;12118:17:0;;:54;;;;12164:8;-1:-1:-1;;;;;12139:33:0;:21;12151:8;12139:11;:21::i;:::-;-1:-1:-1;;;;;12139:33:0;;12118:54;:91;;;;12176:33;12193:5;12200:8;12176:16;:33::i;:::-;12110:100;11968:250;-1:-1:-1;;;;11968:250:0:o;12226:299::-;12311:24;12326:8;12311:14;:24::i;:::-;12346:21;;;;:11;:21;;;;;;;;:27;;-1:-1:-1;;;;;;12346:27:0;-1:-1:-1;;;;;12346:27:0;;;;;;;;;;12402:15;;;;:8;:15;;;;;;;:22;;:19;:22::i;:::-;-1:-1:-1;;;;;12384:15:0;;;;;;;:8;:15;;;;;;:40;;;;12451:13;;;;;;;:20;;12469:1;12451:20;:17;:20;:::i;:::-;-1:-1:-1;;;;;12435:13:0;;;;;;;:8;:13;;;;;;:36;;;;12487:30;;12508:8;;12435:13;;12487:30;;;;;;12226:299;;;:::o;12535:265::-;12610:16;12617:8;12610:6;:16::i;:::-;12609:17;12601:55;;;;;-1:-1:-1;;;12601:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12667:21;;;;:11;:21;;;;;;;;:27;;-1:-1:-1;;;;;;12667:27:0;-1:-1:-1;;;;;12667:27:0;;;;;;;;12721:13;;:8;:13;;;;;;;:20;;:17;:20::i;:::-;-1:-1:-1;;;;;12705:13:0;;;;;;:8;:13;;;;;;:36;;;;12757:35;;12783:8;;12705:13;12757:35;;12705:13;;12757:35;12535:265;;:::o;13334:420::-;13512:4;13540:16;:3;-1:-1:-1;;;;;13540:14:0;;:16::i;:::-;13535:61;;-1:-1:-1;13580:4:0;13573:11;;13535:61;13622:78;;-1:-1:-1;;;13622:78:0;;13665:10;13622:78;;;;;;-1:-1:-1;;;;;13622:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13606:13;;13622:42;;;;;;13665:10;;13677:5;;13684:8;;13694:5;;13622:78;;;;;;;;;;;13606:13;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;13622:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13622:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13622:78:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13622:78:0;-1:-1:-1;;;;;;13719:26:0;-1:-1:-1;;;13719:26:0;;-1:-1:-1;;13334:420:0;;;;;;:::o;11206:216::-;-1:-1:-1;;;;;11305:26:0;;;;;;;:18;:26;;;;;;;;:37;;;;;;;;;;;;;:49;;-1:-1:-1;;11305:49:0;;;;;;;;;;11370:44;;;;;;;;;;;;;;;;;11206:216;;;:::o;11806:154::-;-1:-1:-1;;;;;11915:26:0;;;11891:4;11915:26;;;:18;:26;;;;;;;;:37;;;;;;;;;;;;;;;11806:154::o;13762:174::-;13862:1;13827:23;;;:14;:23;;;;;;-1:-1:-1;;;;;13827:23:0;:37;13823:106;;13915:1;13881:23;;;:14;:23;;;;;:36;;-1:-1:-1;;;;;;13881:36:0;;;13762:174::o;5503:148::-;5561:7;5594:1;5589;:6;;5581:39;;;;;-1:-1:-1;;;5581:39:0;;;;;;;;;;;;-1:-1:-1;;;5581:39:0;;;;;;;;;;;;;;;-1:-1:-1;5638:5:0;;;5503:148::o;26572:1262::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26572:1262:0;;;-1:-1:-1;26572:1262:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;2504:136;2560:6;2587;;;2579:30;;;;;-1:-1:-1;;;2579:30:0;;;;;;;;;;;;-1:-1:-1;;;2579:30:0;;;;;;;;;;;;;;;2631:1;2627:5;;:1;:5;;;;;;2358:138;2414:6;2441;;;2433:32;;;;;-1:-1:-1;;;2433:32:0;;;;;;;;;;;;-1:-1:-1;;;2433:32:0;;;;;;;;;;;;;;;2487:1;2483:5;;:1;:5;;;;;

Swarm Source

bzzr://d506f9fe37bed5f8efb64a109452c51bea04c52ee8ee21e051ae1d8d9d4d8201

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  ]

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.