POL Price: $0.221977 (+1.28%)
 

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Choose Gang392314272023-02-13 3:40:53800 days ago1676259653IN
0x2DB1F6e2...6c25674FF
0 POL0.01771526150.97508226
Choose Gang346912832022-10-23 7:14:02913 days ago1666509242IN
0x2DB1F6e2...6c25674FF
0 POL0.01491742127.11693992
Choose Gang336370702022-09-27 16:39:54938 days ago1664296794IN
0x2DB1F6e2...6c25674FF
0 POL0.0040670634.66082415
Airdrop Single T...336291502022-09-27 11:50:15938 days ago1664279415IN
0x2DB1F6e2...6c25674FF
0 POL0.003351930.00000151
Burn From Single336291392022-09-27 11:49:53938 days ago1664279393IN
0x2DB1F6e2...6c25674FF
0 POL0.0014392830.00000151
Choose Gang327904152022-09-07 4:24:25959 days ago1662524665IN
0x2DB1F6e2...6c25674FF
0 POL0.0039352133.53716801
Choose Gang327753172022-09-06 19:42:49959 days ago1662493369IN
0x2DB1F6e2...6c25674FF
0 POL0.0038040132.41546
Choose Gang327635712022-09-06 12:45:57959 days ago1662468357IN
0x2DB1F6e2...6c25674FF
0 POL0.0035205630.00000001
Choose Gang327481052022-09-06 3:49:48960 days ago1662436188IN
0x2DB1F6e2...6c25674FF
0 POL0.0035201730.00000002
Choose Gang327465012022-09-06 2:54:40960 days ago1662432880IN
0x2DB1F6e2...6c25674FF
0 POL0.0035287130.07
Choose Gang327428642022-09-06 0:49:38960 days ago1662425378IN
0x2DB1F6e2...6c25674FF
0 POL0.0031943730.00000001
Choose Gang327419502022-09-06 0:16:02960 days ago1662423362IN
0x2DB1F6e2...6c25674FF
0 POL0.0041317335.20808359
Choose Gang327378872022-09-05 21:54:15960 days ago1662414855IN
0x2DB1F6e2...6c25674FF
0 POL0.0035856930.55500001
Choose Gang327378112022-09-05 21:51:39960 days ago1662414699IN
0x2DB1F6e2...6c25674FF
0 POL0.0044684338.08144693
Choose Gang327376502022-09-05 21:46:05960 days ago1662414365IN
0x2DB1F6e2...6c25674FF
0 POL0.0037396531.87054117
Airdrop Single T...327371042022-09-05 21:27:21960 days ago1662413241IN
0x2DB1F6e2...6c25674FF
0 POL0.0091234130.90000001
Airdrop Single T...327370582022-09-05 21:25:45960 days ago1662413145IN
0x2DB1F6e2...6c25674FF
0 POL0.0063923730.90000001
Airdrop Single T...327369882022-09-05 21:23:21960 days ago1662413001IN
0x2DB1F6e2...6c25674FF
0 POL0.0062444430.18665948
Airdrop Single T...327368542022-09-05 21:18:45960 days ago1662412725IN
0x2DB1F6e2...6c25674FF
0 POL0.0122588130.00000001
Airdrop Single T...327368452022-09-05 21:18:27960 days ago1662412707IN
0x2DB1F6e2...6c25674FF
0 POL0.0096076830.00000001
Airdrop Single T...327367302022-09-05 21:14:29960 days ago1662412469IN
0x2DB1F6e2...6c25674FF
0 POL0.0115088130.00000001
Burn From Single327358312022-09-05 20:43:35960 days ago1662410615IN
0x2DB1F6e2...6c25674FF
0 POL0.0014390130.00000001
Airdrop Single T...327355112022-09-05 20:32:35960 days ago1662409955IN
0x2DB1F6e2...6c25674FF
0 POL0.0069561930.00000001
Airdrop Single T...327354852022-09-05 20:31:39960 days ago1662409899IN
0x2DB1F6e2...6c25674FF
0 POL0.0274152330.00000001
Airdrop Single T...327354302022-09-05 20:29:49960 days ago1662409789IN
0x2DB1F6e2...6c25674FF
0 POL0.0141929730.06999999
View all transactions

Latest 25 internal transactions (View All)

Parent Transaction Hash Block From To
327371042022-09-05 21:27:21960 days ago1662413241
0x2DB1F6e2...6c25674FF
0.1 POL
327371042022-09-05 21:27:21960 days ago1662413241
0x2DB1F6e2...6c25674FF
0.1 POL
327371042022-09-05 21:27:21960 days ago1662413241
0x2DB1F6e2...6c25674FF
0.1 POL
327370582022-09-05 21:25:45960 days ago1662413145
0x2DB1F6e2...6c25674FF
0.1 POL
327370582022-09-05 21:25:45960 days ago1662413145
0x2DB1F6e2...6c25674FF
0.1 POL
327369882022-09-05 21:23:21960 days ago1662413001
0x2DB1F6e2...6c25674FF
0.1 POL
327369882022-09-05 21:23:21960 days ago1662413001
0x2DB1F6e2...6c25674FF
0.1 POL
327368542022-09-05 21:18:45960 days ago1662412725
0x2DB1F6e2...6c25674FF
0.1 POL
327368542022-09-05 21:18:45960 days ago1662412725
0x2DB1F6e2...6c25674FF
0.1 POL
327368542022-09-05 21:18:45960 days ago1662412725
0x2DB1F6e2...6c25674FF
0.1 POL
327368542022-09-05 21:18:45960 days ago1662412725
0x2DB1F6e2...6c25674FF
0.1 POL
327368452022-09-05 21:18:27960 days ago1662412707
0x2DB1F6e2...6c25674FF
0.1 POL
327368452022-09-05 21:18:27960 days ago1662412707
0x2DB1F6e2...6c25674FF
0.1 POL
327368452022-09-05 21:18:27960 days ago1662412707
0x2DB1F6e2...6c25674FF
0.1 POL
327367302022-09-05 21:14:29960 days ago1662412469
0x2DB1F6e2...6c25674FF
0.1 POL
327367302022-09-05 21:14:29960 days ago1662412469
0x2DB1F6e2...6c25674FF
0.1 POL
327367302022-09-05 21:14:29960 days ago1662412469
0x2DB1F6e2...6c25674FF
0.1 POL
327367302022-09-05 21:14:29960 days ago1662412469
0x2DB1F6e2...6c25674FF
0.1 POL
327355112022-09-05 20:32:35960 days ago1662409955
0x2DB1F6e2...6c25674FF
0.1 POL
327355112022-09-05 20:32:35960 days ago1662409955
0x2DB1F6e2...6c25674FF
0.1 POL
327354852022-09-05 20:31:39960 days ago1662409899
0x2DB1F6e2...6c25674FF
0.1 POL
327354852022-09-05 20:31:39960 days ago1662409899
0x2DB1F6e2...6c25674FF
0.1 POL
327354852022-09-05 20:31:39960 days ago1662409899
0x2DB1F6e2...6c25674FF
0.1 POL
327354852022-09-05 20:31:39960 days ago1662409899
0x2DB1F6e2...6c25674FF
0.1 POL
327354852022-09-05 20:31:39960 days ago1662409899
0x2DB1F6e2...6c25674FF
0.1 POL
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GASChip

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2022-06-08
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

// ERC1155I Implementation
// Thanks Solmate for inspiration

interface ERC1155TokenReceiver {
    function onERC1155Received(address operator_, address from_, uint256 id_,
        uint256 amount_, bytes calldata data_) external returns (bytes4);
    function onERC1155BatchReceived(address operator_, address from_,
        uint256[] calldata ids_, uint256[] calldata amounts_, bytes calldata data_)
        external returns (bytes4);
}

contract ERC1155IEnumerable {
    
    // Base Info
    string public name; 
    string public symbol; 

    // Setting Name and Symbol (Missing in ERC1155 Generally)
    constructor(string memory name_, string memory symbol_) {
        name = name_; 
        symbol = symbol_; 
    }

    // Events
    event TransferSingle(address indexed operator_, address indexed from_, 
        address indexed to_, uint256 id_, uint256 amount_);
    event TransferBatch(address indexed operator_, address indexed from_, 
        address indexed to_, uint256[] ids_, uint256[] amounts_);
    event ApprovalForAll(address indexed owner_, address indexed operator_, 
        bool approved_);
    event URI(string value_, uint256 indexed id_);

    // ERC1155 Mappings
    mapping(address => mapping(uint256 => uint256)) public balanceOf;
    mapping(address => mapping(address => bool)) public isApprovedForAll;

    // ERC1155G Enumerable Ownership
    mapping(uint256 => address[]) public tokenToOwners;
    mapping(uint256 => mapping(address => uint256)) public tokenToOwnersToIndex;

    // Used for getOwnersOfTokenIdAndBalance view function
    struct TokenBalances {
        address owner;
        uint256 balance;
    }

    function _addEnumerableData(address address_, uint256 id_) internal {
        // If the user does not have any balance
        if (balanceOf[address_][id_] == 0) {
            // Find the next index
            uint256 _nextIndex = tokenToOwners[id_].length;
            // Add the address to owners list of the tokenId
            tokenToOwners[id_].push(address_);
            // Add their location in array to index data
            tokenToOwnersToIndex[id_][address_] = _nextIndex;
        }
    }
    function _removeEnumerableData(address address_, uint256 id_) internal {
        // If the user balance after deduction is 0
        if (balanceOf[address_][id_] == 0) {
            // Find the user in enumerable index
            uint256 _userIndex = tokenToOwnersToIndex[id_][address_];
            // Get the last index
            uint256 _lastIndex = tokenToOwners[id_].length - 1;
            // If the owner is not at the last index 
            if (_userIndex != _lastIndex) {
                address _userAtLastIndex = tokenToOwners[id_][_lastIndex];
                // Replace _userIndex slot with _lastIndex slot
                tokenToOwners[id_][_userIndex] = _userAtLastIndex;
                // Write the new index for the user
                tokenToOwnersToIndex[id_][_userAtLastIndex] = _userIndex;
            }

            // Now, delete the last index
            tokenToOwners[id_].pop();
            // And remove the user from the index data
            delete tokenToOwnersToIndex[id_][address_];
        }
    }
    function getOwnersOfTokenId(uint256 id_) public view returns (address[] memory) {
        return tokenToOwners[id_];
    }
    function getOwnersOfTokenIdAndBalance(uint256 id_) public view 
    returns (TokenBalances[] memory) {
        address[] memory _owners = getOwnersOfTokenId(id_);
        uint256 _ownersLength = _owners.length;
        TokenBalances[] memory _TokenBalancesAll = new TokenBalances[] (_ownersLength);

        for (uint256 i = 0; i < _ownersLength; i++) {
            address _currentOwner = _owners[i];
            _TokenBalancesAll[i] = TokenBalances(
                _currentOwner,
                balanceOf[_currentOwner][id_]
            );
        }
        return _TokenBalancesAll;
    }
    function getTotalSupplyOfIds(uint256[] calldata ids_) public view returns (uint256) {
        uint256 _tokens;
        for (uint256 i = 0; i < ids_.length; i++) {
            _tokens += getOwnersOfTokenId(ids_[i]).length;
        }
        return _tokens;
    }
    
    // URI Display Type Setting (Default to ERC721 Style)
        // 1 - ERC1155 Style
        // 2 - ERC721 Style
        // 3 - Mapping Style
    uint256 public URIType = 2; 
    function _setURIType(uint256 uriType_) internal virtual {
        URIType = uriType_;
    }   

    // ERC1155 URI
    string public _uri;
    function _setURI(string memory uri_) internal virtual { _uri = uri_; }
    
    // ERC721 URI (Override)
    string internal baseTokenURI; 
    string internal baseTokenURI_EXT;

    function _setBaseTokenURI(string memory uri_) internal virtual { 
        baseTokenURI = uri_; }
    function _setBaseTokenURI_EXT(string memory ext_) internal virtual {
        baseTokenURI_EXT = ext_; }
    function _toString(uint256 value_) internal pure returns (string memory) {
        if (value_ == 0) { return "0"; }
        uint256 _iterate = value_; uint256 _digits;
        while (_iterate != 0) { _digits++; _iterate /= 10; } // get digits in value_
        bytes memory _buffer = new bytes(_digits);
        while (value_ != 0) { _digits--; _buffer[_digits] = bytes1(uint8(
            48 + uint256(value_ % 10 ))); value_ /= 10; } // create bytes of value_
        return string(_buffer); // return string converted bytes of value_
    }

    // Mapping Style URI (Override)
    mapping(uint256 => string) public tokenIdToURI;
    
    function _setURIOfToken(uint256 id_, string memory uri_) internal virtual {
        tokenIdToURI[id_] = uri_; }


    // URI (0xInuarashi Version)
    function uri(uint256 id_) public virtual view returns (string memory) {
        // ERC1155
        if (URIType == 1) return _uri;
        // ERC721
        else if (URIType == 2) return 
            string(abi.encodePacked(baseTokenURI, _toString(id_), baseTokenURI_EXT));
        // Mapping 
        else if (URIType == 3) return tokenIdToURI[id_];
        else return "";
    }

    // TokenURI (Because ERC1155 is weird)
    function tokenURI(uint256 tokenId_) public virtual view returns (string memory) {
        return string(abi.encodePacked(
            baseTokenURI, _toString(tokenId_), baseTokenURI_EXT));
    }

    // Internal Logics
    function _isSameLength(uint256 a, uint256 b) internal pure returns (bool) {
        return a == b;
    }
    function _isApprovedOrOwner(address from_) internal view returns (bool) {
        return msg.sender == from_ 
            || isApprovedForAll[from_][msg.sender];
    }
    function _ERC1155Supported(address from_, address to_, uint256 id_,
    uint256 amount_, bytes memory data_) internal {
        require(to_.code.length == 0 ? to_ != address(0) :
            ERC1155TokenReceiver(to_).onERC1155Received(
                msg.sender, from_, id_, amount_, data_) ==
            ERC1155TokenReceiver.onERC1155Received.selector,
                "_ERC1155Supported(): Unsupported Recipient!"
        );
    }
    function _ERC1155BatchSupported(address from_, address to_, uint256[] memory ids_,
    uint256[] memory amounts_, bytes memory data_) internal {
        require(to_.code.length == 0 ? to_ != address(0) :
            ERC1155TokenReceiver(to_).onERC1155BatchReceived(
                msg.sender, from_, ids_, amounts_, data_) ==
            ERC1155TokenReceiver.onERC1155BatchReceived.selector,
                "_ERC1155BatchSupported(): Unsupported Recipient!"
        );
    }

    // ERC1155 Logics
    function setApprovalForAll(address operator_, bool approved_) public virtual {
        isApprovedForAll[msg.sender][operator_] = approved_;
        emit ApprovalForAll(msg.sender, operator_, approved_);
    }

    function _transfer(address from_, address to_, uint256 id_, uint256 amount_) 
    internal {
        // _addEnumerableData is done before any balance calculation
        _addEnumerableData(to_, id_);

        // Balance calculation
        balanceOf[to_][id_] += amount_;
        balanceOf[from_][id_] -= amount_;
        
        // _removeEnumerableData is done after all balance calculation has been done
        _removeEnumerableData(from_, id_);
    }
    function safeTransferFrom(address from_, address to_, uint256 id_, 
    uint256 amount_, bytes memory data_) public virtual {
        require(_isApprovedOrOwner(from_));
        
        _transfer(from_, to_, id_, amount_);

        emit TransferSingle(msg.sender, from_, to_, id_, amount_);

        _ERC1155Supported(from_, to_, id_, amount_, data_);
    }
    function safeBatchTransferFrom(address from_, address to_, uint256[] memory ids_,
    uint256[] memory amounts_, bytes memory data_) public virtual {
        require(_isSameLength(ids_.length, amounts_.length));
        require(_isApprovedOrOwner(from_));

        for (uint256 i = 0; i < ids_.length; i++) {
            _transfer(from_, to_, ids_[i], amounts_[i]);
        }

        emit TransferBatch(msg.sender, from_, to_, ids_, amounts_);

        _ERC1155BatchSupported(from_, to_, ids_, amounts_, data_);
    }

    // Internal Mint / Burn Logic
    function _mintInternal(address to_, uint256 id_, uint256 amount_) internal {
        // _addEnumerable data is done before any balance calculation
        _addEnumerableData(to_, id_);
        balanceOf[to_][id_] += amount_;
    }
    function _mint(address to_, uint256 id_, uint256 amount_, bytes memory data_)
    internal {
        _mintInternal(to_, id_, amount_);

        emit TransferSingle(msg.sender, address(0), to_, id_, amount_);

        _ERC1155Supported(address(0), to_, id_, amount_, data_);
    }
    function _batchMint(address to_, uint256[] memory ids_, uint256[] memory amounts_,
    bytes memory data_) internal {
        require(_isSameLength(ids_.length, amounts_.length));

        for (uint256 i = 0; i < ids_.length; i++) {
            _mintInternal(to_, ids_[i], amounts_[i]);
        }

        emit TransferBatch(msg.sender, address(0), to_, ids_, amounts_);

        _ERC1155BatchSupported(address(0), to_, ids_, amounts_, data_);
    }

    function _burnInternal(address from_, uint256 id_, uint256 amount_) internal {
        balanceOf[from_][id_] -= amount_;
        
        // _removeEnumerableData is done after all balance calculation has been done
        _removeEnumerableData(from_, id_);
    }
    function _burn(address from_, uint256 id_, uint256 amount_) internal {
        _burnInternal(from_, id_, amount_);
        emit TransferSingle(msg.sender, from_, address(0), id_, amount_);
    }
    function _batchBurn(address from_, uint256[] memory ids_, 
    uint256[] memory amounts_) internal {
        require(_isSameLength(ids_.length, amounts_.length));
        
        for (uint256 i = 0; i < ids_.length; i++) {
            _burnInternal(from_, ids_[i], amounts_[i]);
        }

        emit TransferBatch(msg.sender, from_, address(0), ids_, amounts_);
    }


    // ERC165 Logic
    function supportsInterface(bytes4 interfaceId_) public pure virtual returns (bool) {
        return 
        interfaceId_ == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
        interfaceId_ == 0xd9b67a26 || // ERC165 Interface ID for ERC1155
        interfaceId_ == 0x0e89341c;   // ERC165 Interface ID for ERC1155MetadataURI
    }

    // View Functions
    function balanceOfBatch(address[] memory owners_, uint256[] memory ids_) public
    view virtual returns (uint256[] memory) {
        require(_isSameLength(owners_.length, ids_.length));

        uint256[] memory _balances = new uint256[](owners_.length);

        for (uint256 i = 0; i < owners_.length; i++) {
            _balances[i] = balanceOf[owners_[i]][ids_[i]];
        }
        return _balances;
    }
}

abstract contract Ownable {
    address public owner; 
    constructor() { owner = msg.sender; }
    modifier onlyOwner { require(owner == msg.sender, "Not Owner!"); _; }
    function transferOwnership(address new_) external onlyOwner { owner = new_; }
}

abstract contract Minterable is Ownable {
    mapping(address => bool) public minters;
    modifier onlyMinter { require(minters[msg.sender], "Not Minter!"); _; }
    function setMinter(address address_, bool bool_) external onlyOwner {
        minters[address_] = bool_;
    }
}

abstract contract Burnerable is Ownable {
    mapping(address => bool) public burners;
    modifier onlyBurner { require(burners[msg.sender], "Not Burner!"); _; }
    function setBurner(address address_, bool bool_) external onlyOwner {
        burners[address_] = bool_;
    }
}

contract ERC1155GEnumerable is ERC1155IEnumerable, Ownable, Minterable, Burnerable {
    
    ///// Set the name and symbol of ERC1155I ///
    constructor(string memory name_, string memory symbol_) 
        ERC1155IEnumerable(name_, symbol_) {}

    // Internal ETH Fallback + Sending to give some MATIC or NATIVETOKEN for user 
    event Received(address from, uint amount);
    receive() external payable { emit Received(msg.sender, msg.value); }
    function _sendETH(address payable address_, uint256 amount_) internal {
        (bool success, ) = payable(address_).call{value: amount_}("");
        require(success, "Transfer failed");
    }

    ///// Adding all Ownable Functions for convenience /////
    // URI Type
    function setURIType(uint256 uriType_) external onlyOwner {
        _setURIType(uriType_); }

    // Type 1 URI
    function setURI(string calldata uri_) external onlyOwner { _setURI(uri_); }
    
    // Type 2 URI
    function setBaseTokenURI(string calldata uri_) external onlyOwner { 
        _setBaseTokenURI(uri_); }
    function setBaseTokenURI_EXT(string calldata ext_) external onlyOwner { 
        _setBaseTokenURI_EXT(ext_); }

    // Type 3 URI
    function setURIOfToken(uint256 id_, string calldata uri_) external onlyOwner {
        _setURIOfToken(id_, uri_); }

    // Here, we implement the soulbound function overrides.
    // Also, it uses require statements instead of revert or complete removal for 
    // global compliance of verification bots (some bots break on function reverts)
    function safeTransferFrom(address from_, address to_, uint256 id_, uint256 amount_,
    bytes memory data_) public override {
        // We require amount_ to be 0 effectively disabling transfers
        require(amount_ == 0, "ERC1155G: safeTransferFrom(): Soulbound!");
    }
    function safeBatchTransferFrom(address from_, address to_, uint256[] memory ids_,
    uint256[] memory amounts_, bytes memory data_) public override {
        require(_isSameLength(ids_.length, amounts_.length),
            "ERC1155G: safeBatchTransferFrom(): Array Lengths Mismatch!");

        for (uint256 i = 0; i < amounts_.length; i++) {
            require(amounts_[i] == 0,
                "ERC1155G: safeBatchTransferFrom(): Soulbound!");
        }
    }
    function setApprovalForAll(address operator_, bool approved_) public override {
        // We require approved_ to false effectively disabling approvals
        require(!approved_, "ERC1155G: setApprovalForAll(): Soulbound!");
    }

    // Here, we add some airdrop and burning logic for project creators to have access.
    // These are accessed through my Burnable and Mintable modules.
    function _airdrop(address to_, uint256 id_, uint256 amount_, 
    bytes memory data_) internal {
        // // This makes sure we are not airdropping anyone duplicate tokens.
        // require(balanceOf[to_][id_] == 0,
        //     "ERC1155G: _airdrop(): user already has token!");

        // GAS Chip Specific Modification
        for(uint256 i = 0; i <= 3; i++) {
            require(balanceOf[to_][i] == 0,
                "ERC1155G: GAS Chip _airdrop(): user already has a chip!");
        }

        _mint(to_, id_, amount_, data_);
    }

    // This _ownerMint function overrides the balanceOf check. This is used generally
    // only to grant certain specific users above the allowed amount of tokens! 
    // Use wisely!
    function ownerAirdropOverride(address to_, uint256 id_, uint256 amount_,
    bytes memory data_) external onlyOwner {
        _mint(to_, id_, amount_, data_);
    }

    // Airdrop (Minterable)
    function airdropSingleToManyPlusETHInBalance(address payable[] calldata tos_, 
    uint256 id_, uint256 amount_, uint256 ethAmount_, bytes calldata data_) 
    external onlyMinter {
        // Contract Balance should be higher than amount to send
        require(address(this).balance >= ethAmount_ * tos_.length,
            "ERC1155G: airdropSingleToManyPlusETHInBalance(): Not enough ETH balance!");
        
        // Start airdropping and sending everyone ETH
        for (uint256 i = 0; i < tos_.length; i++) {
            _airdrop(tos_[i], id_, amount_, data_);
            _sendETH(tos_[i], ethAmount_);
        }
    }
    function airdropSingleToManyPlusETHInMsgValue(address payable[] calldata tos_,
    uint256 id_, uint256 amount_, uint256 ethAmount_, bytes calldata data_)
    external payable onlyMinter {
        // msg.value should be the same as amount to send
        require(msg.value == ethAmount_ * tos_.length,
            "ERC1155G: airdropSingleToManyPlusETHInMsgValue(): Incorrect msg.value!");
        
        // Start airdropping and sending everyone ETH
        for (uint256 i = 0; i < tos_.length; i++) {
            _airdrop(tos_[i], id_, amount_, data_);
            _sendETH(tos_[i], ethAmount_);
        }
    }

    // BurnFrom (Burnerable)
    function burnFromSingle(address[] calldata froms_, uint256 id_, uint256 amount_) 
    external onlyBurner {
        // Start burning 
        for (uint256 i = 0; i < froms_.length; i++) {
            // This will revert an underflow if burn amount exceeds balanceOf
            _burn(froms_[i], id_, amount_);
        }
    }
    function burnFromMany(address[] calldata froms_, uint256[] calldata ids_,
    uint256[] calldata amounts_) external onlyBurner {
        // Make sure all the calldata arrays are the same length
        require(_isSameLength(froms_.length, ids_.length) 
            && _isSameLength(froms_.length, amounts_.length),
            "ERC1155G: burnFromMany(): Array lengths mismatch!");
        
        // Start burning 
        for (uint256 i = 0; i < froms_.length; i++) {
            // This will revert an underflow if burn amount exceeds balanceOf
            _burn(froms_[i], ids_[i], amounts_[i]);
        }
    }
}

contract GASChip is ERC1155GEnumerable {
    // Set the name and symbol
    constructor()  ERC1155GEnumerable("Gangster All Star Chips", "GASCHIP") {}
    function setName(string calldata name_) external onlyOwner { name = name_; }
    function setSymbol(string calldata symbol_) external onlyOwner { symbol = symbol_; }

    ///// Choose Your Gang Functions /////
    function _gangIsChoosable(uint256 gangId_) internal pure returns (bool) {
        return gangId_ == 1 || gangId_ == 2 || gangId_ == 3;
    }
    function chooseGang(uint256 gangId_) external {
        require(balanceOf[msg.sender][0] > 0,
            "You don't have a blank chip!");
        require(_gangIsChoosable(gangId_),
            "You cannot choose this gang!");
        
        // Burn the blank chip from msg.sender
        _burn(msg.sender, 0, 1);

        // Mint the gang chip for msg.sender
        _mint(msg.sender, gangId_, 1, "");
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner_","type":"address"},{"indexed":true,"internalType":"address","name":"operator_","type":"address"},{"indexed":false,"internalType":"bool","name":"approved_","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Received","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator_","type":"address"},{"indexed":true,"internalType":"address","name":"from_","type":"address"},{"indexed":true,"internalType":"address","name":"to_","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids_","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"amounts_","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator_","type":"address"},{"indexed":true,"internalType":"address","name":"from_","type":"address"},{"indexed":true,"internalType":"address","name":"to_","type":"address"},{"indexed":false,"internalType":"uint256","name":"id_","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value_","type":"string"},{"indexed":true,"internalType":"uint256","name":"id_","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"URIType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable[]","name":"tos_","type":"address[]"},{"internalType":"uint256","name":"id_","type":"uint256"},{"internalType":"uint256","name":"amount_","type":"uint256"},{"internalType":"uint256","name":"ethAmount_","type":"uint256"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"airdropSingleToManyPlusETHInBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable[]","name":"tos_","type":"address[]"},{"internalType":"uint256","name":"id_","type":"uint256"},{"internalType":"uint256","name":"amount_","type":"uint256"},{"internalType":"uint256","name":"ethAmount_","type":"uint256"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"airdropSingleToManyPlusETHInMsgValue","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"owners_","type":"address[]"},{"internalType":"uint256[]","name":"ids_","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"froms_","type":"address[]"},{"internalType":"uint256[]","name":"ids_","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts_","type":"uint256[]"}],"name":"burnFromMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"froms_","type":"address[]"},{"internalType":"uint256","name":"id_","type":"uint256"},{"internalType":"uint256","name":"amount_","type":"uint256"}],"name":"burnFromSingle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"burners","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gangId_","type":"uint256"}],"name":"chooseGang","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id_","type":"uint256"}],"name":"getOwnersOfTokenId","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id_","type":"uint256"}],"name":"getOwnersOfTokenIdAndBalance","outputs":[{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"}],"internalType":"struct ERC1155IEnumerable.TokenBalances[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids_","type":"uint256[]"}],"name":"getTotalSupplyOfIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minters","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"id_","type":"uint256"},{"internalType":"uint256","name":"amount_","type":"uint256"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"ownerAirdropOverride","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256[]","name":"ids_","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts_","type":"uint256[]"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from_","type":"address"},{"internalType":"address","name":"to_","type":"address"},{"internalType":"uint256","name":"id_","type":"uint256"},{"internalType":"uint256","name":"amount_","type":"uint256"},{"internalType":"bytes","name":"data_","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator_","type":"address"},{"internalType":"bool","name":"approved_","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri_","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"ext_","type":"string"}],"name":"setBaseTokenURI_EXT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"bool","name":"bool_","type":"bool"}],"name":"setBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"address_","type":"address"},{"internalType":"bool","name":"bool_","type":"bool"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"name_","type":"string"}],"name":"setName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"symbol_","type":"string"}],"name":"setSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri_","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id_","type":"uint256"},{"internalType":"string","name":"uri_","type":"string"}],"name":"setURIOfToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"uriType_","type":"uint256"}],"name":"setURIType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId_","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIdToURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenToOwners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"tokenToOwnersToIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"new_","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id_","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260026006553480156200001657600080fd5b50604080518082018252601781527f47616e677374657220416c6c20537461722043686970730000000000000000006020808301918252835180850190945260078452660474153434849560cc1b908401528151919291839183916200007f91600091620000b3565b50805162000095906001906020840190620000b3565b5050600b80546001600160a01b031916331790555062000196915050565b828054620000c19062000159565b90600052602060002090601f016020900481019282620000e5576000855562000130565b82601f106200010057805160ff191683800117855562000130565b8280016001018555821562000130579182015b828111156200013057825182559160200191906001019062000113565b506200013e92915062000142565b5090565b5b808211156200013e576000815560010162000143565b600181811c908216806200016e57607f821691505b602082108114156200019057634e487b7160e01b600052602260045260246000fd5b50919050565b612bdf80620001a66000396000f3fe6080604052600436106102285760003560e01c80637480512711610123578063bb6eef08116100ab578063e985e9c51161006f578063e985e9c514610705578063ee698d3e14610740578063f242432a14610760578063f2fde38b14610780578063f46eccc4146107a057600080fd5b8063bb6eef0814610665578063c47f002714610685578063c87b56dd146106a5578063cf456ae7146106c5578063dd184008146106e557600080fd5b806395d89b41116100f257806395d89b41146105dd5780639a81e442146105f25780639dd745af14610605578063a22cb46514610625578063b84c82461461064557600080fd5b8063748051271461053557806382b493b8146105625780638cd16a76146105785780638da5cb5b146105a557600080fd5b80630dccc9ad116101b15780633eba595e116101755780633eba595e146104705780634e1273f4146104a85780634f30f381146104d557806367bae9cb146104f557806374343af11461051557600080fd5b80630dccc9ad146103db5780630e89341c146103f05780632819b11b146104105780632eb2c2d61461043057806330176e131461045057600080fd5b806302ffaed1116101f857806302ffaed11461033657806303d41e0e1461035657806306fdde03146103865780630d79c3811461039b5780630d895ee1146103bb57600080fd5b8062fdd58e1461026c57806301ffc9a7146102b75780630221e785146102e757806302fe53051461031457600080fd5b3661026757604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b600080fd5b34801561027857600080fd5b506102a4610287366004612341565b600260209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b3480156102c357600080fd5b506102d76102d236600461264d565b6107d0565b60405190151581526020016102ae565b3480156102f357600080fd5b506103076103023660046126bc565b610822565b6040516102ae9190612977565b34801561032057600080fd5b5061033461032f366004612687565b6108bc565b005b34801561034257600080fd5b50610334610351366004612687565b610932565b34801561036257600080fd5b506102d761037136600461219c565b600d6020526000908152604090205460ff1681565b34801561039257600080fd5b5061030761099b565b3480156103a757600080fd5b506103346103b63660046126bc565b6109a8565b3480156103c757600080fd5b506103346103d636600461230e565b610a90565b3480156103e757600080fd5b50610307610ae5565b3480156103fc57600080fd5b5061030761040b3660046126bc565b610af2565b34801561041c57600080fd5b5061033461042b366004612580565b610c09565b34801561043c57600080fd5b5061033461044b3660046121f9565b610da5565b34801561045c57600080fd5b5061033461046b366004612687565b610ec1565b34801561047c57600080fd5b506102a461048b3660046126d5565b600560209081526000928352604080842090915290825290205481565b3480156104b457600080fd5b506104c86104c33660046124b8565b610f2a565b6040516102ae919061293f565b3480156104e157600080fd5b506103346104f03660046126bc565b611033565b34801561050157600080fd5b50610334610510366004612468565b611066565b34801561052157600080fd5b506103346105303660046126fa565b611108565b34801561054157600080fd5b506105556105503660046126bc565b611177565b6040516102ae919061289a565b34801561056e57600080fd5b506102a460065481565b34801561058457600080fd5b506105986105933660046126bc565b6111e2565b6040516102ae91906128e7565b3480156105b157600080fd5b50600b546105c5906001600160a01b031681565b6040516001600160a01b0390911681526020016102ae565b3480156105e957600080fd5b506103076112f3565b610334610600366004612580565b611300565b34801561061157600080fd5b506105c5610620366004612745565b611421565b34801561063157600080fd5b5061033461064036600461230e565b611459565b34801561065157600080fd5b50610334610660366004612687565b6114b9565b34801561067157600080fd5b506103346106803660046123cf565b6114ef565b34801561069157600080fd5b506103346106a0366004612687565b611637565b3480156106b157600080fd5b506103076106c03660046126bc565b61166d565b3480156106d157600080fd5b506103346106e036600461230e565b61167a565b3480156106f157600080fd5b506102a461070036600461260c565b6116cf565b34801561071157600080fd5b506102d76107203660046121c0565b600360209081526000928352604080842090915290825290205460ff1681565b34801561074c57600080fd5b5061033461075b36600461236d565b61171d565b34801561076c57600080fd5b5061033461077b3660046122a6565b611759565b34801561078c57600080fd5b5061033461079b36600461219c565b6117b8565b3480156107ac57600080fd5b506102d76107bb36600461219c565b600c6020526000908152604090205460ff1681565b60006301ffc9a760e01b6001600160e01b0319831614806108015750636cdb3d1360e11b6001600160e01b03198316145b8061081c57506303a24d0760e21b6001600160e01b03198316145b92915050565b600a602052600090815260409020805461083b90612aa6565b80601f016020809104026020016040519081016040528092919081815260200182805461086790612aa6565b80156108b45780601f10610889576101008083540402835291602001916108b4565b820191906000526020600020905b81548152906001019060200180831161089757829003601f168201915b505050505081565b600b546001600160a01b031633146108ef5760405162461bcd60e51b81526004016108e69061298a565b60405180910390fd5b61092e82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180492505050565b5050565b600b546001600160a01b0316331461095c5760405162461bcd60e51b81526004016108e69061298a565b61092e82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061181792505050565b6000805461083b90612aa6565b336000908152600260209081526040808320838052909152902054610a0f5760405162461bcd60e51b815260206004820152601c60248201527f596f7520646f6e27742068617665206120626c616e6b2063686970210000000060448201526064016108e6565b610a188161182a565b610a645760405162461bcd60e51b815260206004820152601c60248201527f596f752063616e6e6f742063686f6f736520746869732067616e67210000000060448201526064016108e6565b610a713360006001611848565b610a8d33826001604051806020016040528060008152506118a1565b50565b600b546001600160a01b03163314610aba5760405162461bcd60e51b81526004016108e69061298a565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6007805461083b90612aa6565b606060065460011415610b915760078054610b0c90612aa6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3890612aa6565b8015610b855780601f10610b5a57610100808354040283529160200191610b85565b820191906000526020600020905b815481529060010190602001808311610b6857829003601f168201915b50505050509050919050565b60065460021415610bd1576008610ba783611903565b6009604051602001610bbb9392919061282d565b6040516020818303038152906040529050919050565b60065460031415610bf5576000828152600a602052604090208054610b0c90612aa6565b505060408051602081019091526000815290565b336000908152600c602052604090205460ff16610c565760405162461bcd60e51b815260206004820152600b60248201526a4e6f74204d696e7465722160a81b60448201526064016108e6565b610c608684612a2d565b471015610ce65760405162461bcd60e51b815260206004820152604860248201527f45524331313535473a2061697264726f7053696e676c65546f4d616e79506c7560448201527f73455448496e42616c616e636528293a204e6f7420656e6f756768204554482060648201526762616c616e63652160c01b608482015260a4016108e6565b60005b86811015610d9b57610d59888883818110610d0657610d06612b52565b9050602002016020810190610d1b919061219c565b878786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a0992505050565b610d89888883818110610d6e57610d6e612b52565b9050602002016020810190610d83919061219c565b85611aca565b80610d9381612ae1565b915050610ce9565b5050505050505050565b8251825114610e1c5760405162461bcd60e51b815260206004820152603a60248201527f45524331313535473a207361666542617463685472616e7366657246726f6d2860448201527f293a204172726179204c656e67746873204d69736d617463682100000000000060648201526084016108e6565b60005b8251811015610eb957828181518110610e3a57610e3a612b52565b6020026020010151600014610ea75760405162461bcd60e51b815260206004820152602d60248201527f45524331313535473a207361666542617463685472616e7366657246726f6d2860448201526c293a20536f756c626f756e642160981b60648201526084016108e6565b80610eb181612ae1565b915050610e1f565b505050505050565b600b546001600160a01b03163314610eeb5760405162461bcd60e51b81526004016108e69061298a565b61092e82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b5f92505050565b6060610f37835183511490565b610f4057600080fd5b600083516001600160401b03811115610f5b57610f5b612b68565b604051908082528060200260200182016040528015610f84578160200160208202803683370190505b50905060005b845181101561102b5760026000868381518110610fa957610fa9612b52565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000858381518110610fe557610fe5612b52565b602002602001015181526020019081526020016000205482828151811061100e5761100e612b52565b60209081029190910101528061102381612ae1565b915050610f8a565b509392505050565b600b546001600160a01b0316331461105d5760405162461bcd60e51b81526004016108e69061298a565b610a8d81600655565b336000908152600d602052604090205460ff166110b35760405162461bcd60e51b815260206004820152600b60248201526a4e6f74204275726e65722160a81b60448201526064016108e6565b60005b83811015611101576110ef8585838181106110d3576110d3612b52565b90506020020160208101906110e8919061219c565b8484611848565b806110f981612ae1565b9150506110b6565b5050505050565b600b546001600160a01b031633146111325760405162461bcd60e51b81526004016108e69061298a565b6111728383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b7292505050565b505050565b600081815260046020908152604091829020805483518184028101840190945280845260609392830182828015610b8557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111b95750505050509050919050565b606060006111ef83611177565b80519091506000816001600160401b0381111561120e5761120e612b68565b60405190808252806020026020018201604052801561125357816020015b604080518082019091526000808252602082015281526020019060019003908161122c5790505b50905060005b828110156112ea57600084828151811061127557611275612b52565b6020908102919091018101516040805180820182526001600160a01b0383168082526000908152600285528281208c8252855291909120549281019290925284519092508490849081106112cb576112cb612b52565b60200260200101819052505080806112e290612ae1565b915050611259565b50949350505050565b6001805461083b90612aa6565b336000908152600c602052604090205460ff1661134d5760405162461bcd60e51b815260206004820152600b60248201526a4e6f74204d696e7465722160a81b60448201526064016108e6565b6113578684612a2d565b34146113da5760405162461bcd60e51b815260206004820152604660248201527f45524331313535473a2061697264726f7053696e676c65546f4d616e79506c7560448201527f73455448496e4d736756616c756528293a20496e636f7272656374206d73672e60648201526576616c75652160d01b608482015260a4016108e6565b60005b86811015610d9b576113fa888883818110610d0657610d06612b52565b61140f888883818110610d6e57610d6e612b52565b8061141981612ae1565b9150506113dd565b6004602052816000526040600020818154811061143d57600080fd5b6000918252602090912001546001600160a01b03169150829050565b801561092e5760405162461bcd60e51b815260206004820152602960248201527f45524331313535473a20736574417070726f76616c466f72416c6c28293a20536044820152686f756c626f756e642160b81b60648201526084016108e6565b600b546001600160a01b031633146114e35760405162461bcd60e51b81526004016108e69061298a565b61117260018383611f22565b336000908152600d602052604090205460ff1661153c5760405162461bcd60e51b815260206004820152600b60248201526a4e6f74204275726e65722160a81b60448201526064016108e6565b828514801561154a57508085145b6115b05760405162461bcd60e51b815260206004820152603160248201527f45524331313535473a206275726e46726f6d4d616e7928293a204172726179206044820152706c656e67746873206d69736d617463682160781b60648201526084016108e6565b60005b8581101561162e5761161c8787838181106115d0576115d0612b52565b90506020020160208101906115e5919061219c565b8686848181106115f7576115f7612b52565b9050602002013585858581811061161057611610612b52565b90506020020135611848565b8061162681612ae1565b9150506115b3565b50505050505050565b600b546001600160a01b031633146116615760405162461bcd60e51b81526004016108e69061298a565b61117260008383611f22565b60606008610ba783611903565b600b546001600160a01b031633146116a45760405162461bcd60e51b81526004016108e69061298a565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60008060005b8381101561102b576116fe8585838181106116f2576116f2612b52565b90506020020135611177565b516117099083612a01565b91508061171581612ae1565b9150506116d5565b600b546001600160a01b031633146117475760405162461bcd60e51b81526004016108e69061298a565b611753848484846118a1565b50505050565b81156111015760405162461bcd60e51b815260206004820152602860248201527f45524331313535473a20736166655472616e7366657246726f6d28293a20536f604482015267756c626f756e642160c01b60648201526084016108e6565b600b546001600160a01b031633146117e25760405162461bcd60e51b81526004016108e69061298a565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b805161092e906007906020840190611fa6565b805161092e906009906020840190611fa6565b6000816001148061183b5750816002145b8061081c57505060031490565b611853838383611b91565b60408051838152602081018390526000916001600160a01b0386169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b6118ac848484611bd4565b60408051848152602081018490526001600160a01b0386169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611753600085858585611c1b565b6060816119275750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611951578061193b81612ae1565b915061194a9050600a83612a19565b915061192b565b6000816001600160401b0381111561196b5761196b612b68565b6040519080825280601f01601f191660200182016040528015611995576020820181803683370190505b5090505b8415611a0157816119a981612a8f565b92506119b89050600a86612afc565b6119c3906030612a01565b60f81b8183815181106119d8576119d8612b52565b60200101906001600160f81b031916908160001a9053506119fa600a86612a19565b9450611999565b949350505050565b60005b60038111611abd576001600160a01b038516600090815260026020908152604080832084845290915290205415611aab5760405162461bcd60e51b815260206004820152603760248201527f45524331313535473a204741532043686970205f61697264726f7028293a207560448201527f73657220616c726561647920686173206120636869702100000000000000000060648201526084016108e6565b80611ab581612ae1565b915050611a0c565b50611753848484846118a1565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611b17576040519150601f19603f3d011682016040523d82523d6000602084013e611b1c565b606091505b50509050806111725760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016108e6565b805161092e906008906020840190611fa6565b6000828152600a60209081526040909120825161117292840190611fa6565b6001600160a01b038316600090815260026020908152604080832085845290915281208054839290611bc4908490612a4c565b9091555061117290508383611d30565b611bde8383611ea5565b6001600160a01b038316600090815260026020908152604080832085845290915281208054839290611c11908490612a01565b9091555050505050565b6001600160a01b0384163b15611cc35760405163f23a6e6160e01b808252906001600160a01b0386169063f23a6e6190611c619033908a90899089908990600401612860565b602060405180830381600087803b158015611c7b57600080fd5b505af1158015611c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb3919061266a565b6001600160e01b03191614611cd0565b6001600160a01b03841615155b6111015760405162461bcd60e51b815260206004820152602b60248201527f5f45524331313535537570706f7274656428293a20556e737570706f7274656460448201526a20526563697069656e742160a81b60648201526084016108e6565b6001600160a01b038216600090815260026020908152604080832084845290915290205461092e5760008181526005602090815260408083206001600160a01b03861684528252808320548484526004909252822054909190611d9590600190612a4c565b9050808214611e3e576000838152600460205260408120805483908110611dbe57611dbe612b52565b60009182526020808320909101548683526004909152604090912080546001600160a01b039092169250829185908110611dfa57611dfa612b52565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790558682526005815260408083209490931682529290925290208290555b6000838152600460205260409020805480611e5b57611e5b612b3c565b60008281526020808220830160001990810180546001600160a01b03191690559092019092558482526005815260408083206001600160a01b038816845290915281205550505050565b6001600160a01b038216600090815260026020908152604080832084845290915290205461092e5760008181526004602090815260408083208054600181018255908452828420810180546001600160a01b0319166001600160a01b03979097169687179055938352600582528083209483529390529190912055565b828054611f2e90612aa6565b90600052602060002090601f016020900481019282611f505760008555611f96565b82601f10611f695782800160ff19823516178555611f96565b82800160010185558215611f96579182015b82811115611f96578235825591602001919060010190611f7b565b50611fa292915061201a565b5090565b828054611fb290612aa6565b90600052602060002090601f016020900481019282611fd45760008555611f96565b82601f10611fed57805160ff1916838001178555611f96565b82800160010185558215611f96579182015b82811115611f96578251825591602001919060010190611fff565b5b80821115611fa2576000815560010161201b565b60008083601f84011261204157600080fd5b5081356001600160401b0381111561205857600080fd5b6020830191508360208260051b850101111561207357600080fd5b9250929050565b600082601f83011261208b57600080fd5b813560206120a061209b836129de565b6129ae565b80838252828201915082860187848660051b89010111156120c057600080fd5b60005b858110156120df578135845292840192908401906001016120c3565b5090979650505050505050565b60008083601f8401126120fe57600080fd5b5081356001600160401b0381111561211557600080fd5b60208301915083602082850101111561207357600080fd5b600082601f83011261213e57600080fd5b81356001600160401b0381111561215757612157612b68565b61216a601f8201601f19166020016129ae565b81815284602083860101111561217f57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156121ae57600080fd5b81356121b981612b7e565b9392505050565b600080604083850312156121d357600080fd5b82356121de81612b7e565b915060208301356121ee81612b7e565b809150509250929050565b600080600080600060a0868803121561221157600080fd5b853561221c81612b7e565b9450602086013561222c81612b7e565b935060408601356001600160401b038082111561224857600080fd5b61225489838a0161207a565b9450606088013591508082111561226a57600080fd5b61227689838a0161207a565b9350608088013591508082111561228c57600080fd5b506122998882890161212d565b9150509295509295909350565b600080600080600060a086880312156122be57600080fd5b85356122c981612b7e565b945060208601356122d981612b7e565b9350604086013592506060860135915060808601356001600160401b0381111561230257600080fd5b6122998882890161212d565b6000806040838503121561232157600080fd5b823561232c81612b7e565b9150602083013580151581146121ee57600080fd5b6000806040838503121561235457600080fd5b823561235f81612b7e565b946020939093013593505050565b6000806000806080858703121561238357600080fd5b843561238e81612b7e565b9350602085013592506040850135915060608501356001600160401b038111156123b757600080fd5b6123c38782880161212d565b91505092959194509250565b600080600080600080606087890312156123e857600080fd5b86356001600160401b03808211156123ff57600080fd5b61240b8a838b0161202f565b9098509650602089013591508082111561242457600080fd5b6124308a838b0161202f565b9096509450604089013591508082111561244957600080fd5b5061245689828a0161202f565b979a9699509497509295939492505050565b6000806000806060858703121561247e57600080fd5b84356001600160401b0381111561249457600080fd5b6124a08782880161202f565b90989097506020870135966040013595509350505050565b600080604083850312156124cb57600080fd5b82356001600160401b03808211156124e257600080fd5b818501915085601f8301126124f657600080fd5b8135602061250661209b836129de565b8083825282820191508286018a848660051b890101111561252657600080fd5b600096505b8487101561255257803561253e81612b7e565b83526001969096019591830191830161252b565b509650508601359250508082111561256957600080fd5b506125768582860161207a565b9150509250929050565b600080600080600080600060a0888a03121561259b57600080fd5b87356001600160401b03808211156125b257600080fd5b6125be8b838c0161202f565b909950975060208a0135965060408a0135955060608a0135945060808a01359150808211156125ec57600080fd5b506125f98a828b016120ec565b989b979a50959850939692959293505050565b6000806020838503121561261f57600080fd5b82356001600160401b0381111561263557600080fd5b6126418582860161202f565b90969095509350505050565b60006020828403121561265f57600080fd5b81356121b981612b93565b60006020828403121561267c57600080fd5b81516121b981612b93565b6000806020838503121561269a57600080fd5b82356001600160401b038111156126b057600080fd5b612641858286016120ec565b6000602082840312156126ce57600080fd5b5035919050565b600080604083850312156126e857600080fd5b8235915060208301356121ee81612b7e565b60008060006040848603121561270f57600080fd5b8335925060208401356001600160401b0381111561272c57600080fd5b612738868287016120ec565b9497909650939450505050565b6000806040838503121561275857600080fd5b50508035926020909101359150565b6000815180845261277f816020860160208601612a63565b601f01601f19169290920160200192915050565b8054600090600181811c90808316806127ad57607f831692505b60208084108214156127cf57634e487b7160e01b600052602260045260246000fd5b8180156127e357600181146127f457612821565b60ff19861689528489019650612821565b60008881526020902060005b868110156128195781548b820152908501908301612800565b505084890196505b50505050505092915050565b60006128398286612793565b8451612849818360208901612a63565b61285581830186612793565b979650505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061285590830184612767565b6020808252825182820181905260009190848201906040850190845b818110156128db5783516001600160a01b0316835292840192918401916001016128b6565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b8281101561293257815180516001600160a01b03168552860151868501529284019290850190600101612904565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156128db5783518352928401929184019160010161295b565b6020815260006121b96020830184612767565b6020808252600a90820152694e6f74204f776e65722160b01b604082015260600190565b604051601f8201601f191681016001600160401b03811182821017156129d6576129d6612b68565b604052919050565b60006001600160401b038211156129f7576129f7612b68565b5060051b60200190565b60008219821115612a1457612a14612b10565b500190565b600082612a2857612a28612b26565b500490565b6000816000190483118215151615612a4757612a47612b10565b500290565b600082821015612a5e57612a5e612b10565b500390565b60005b83811015612a7e578181015183820152602001612a66565b838111156117535750506000910152565b600081612a9e57612a9e612b10565b506000190190565b600181811c90821680612aba57607f821691505b60208210811415612adb57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612af557612af5612b10565b5060010190565b600082612b0b57612b0b612b26565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610a8d57600080fd5b6001600160e01b031981168114610a8d57600080fdfea2646970667358221220e83827315243ccf2613f58034872b6f59618acde0f3443079a044853a373f85364736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102285760003560e01c80637480512711610123578063bb6eef08116100ab578063e985e9c51161006f578063e985e9c514610705578063ee698d3e14610740578063f242432a14610760578063f2fde38b14610780578063f46eccc4146107a057600080fd5b8063bb6eef0814610665578063c47f002714610685578063c87b56dd146106a5578063cf456ae7146106c5578063dd184008146106e557600080fd5b806395d89b41116100f257806395d89b41146105dd5780639a81e442146105f25780639dd745af14610605578063a22cb46514610625578063b84c82461461064557600080fd5b8063748051271461053557806382b493b8146105625780638cd16a76146105785780638da5cb5b146105a557600080fd5b80630dccc9ad116101b15780633eba595e116101755780633eba595e146104705780634e1273f4146104a85780634f30f381146104d557806367bae9cb146104f557806374343af11461051557600080fd5b80630dccc9ad146103db5780630e89341c146103f05780632819b11b146104105780632eb2c2d61461043057806330176e131461045057600080fd5b806302ffaed1116101f857806302ffaed11461033657806303d41e0e1461035657806306fdde03146103865780630d79c3811461039b5780630d895ee1146103bb57600080fd5b8062fdd58e1461026c57806301ffc9a7146102b75780630221e785146102e757806302fe53051461031457600080fd5b3661026757604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b600080fd5b34801561027857600080fd5b506102a4610287366004612341565b600260209081526000928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b3480156102c357600080fd5b506102d76102d236600461264d565b6107d0565b60405190151581526020016102ae565b3480156102f357600080fd5b506103076103023660046126bc565b610822565b6040516102ae9190612977565b34801561032057600080fd5b5061033461032f366004612687565b6108bc565b005b34801561034257600080fd5b50610334610351366004612687565b610932565b34801561036257600080fd5b506102d761037136600461219c565b600d6020526000908152604090205460ff1681565b34801561039257600080fd5b5061030761099b565b3480156103a757600080fd5b506103346103b63660046126bc565b6109a8565b3480156103c757600080fd5b506103346103d636600461230e565b610a90565b3480156103e757600080fd5b50610307610ae5565b3480156103fc57600080fd5b5061030761040b3660046126bc565b610af2565b34801561041c57600080fd5b5061033461042b366004612580565b610c09565b34801561043c57600080fd5b5061033461044b3660046121f9565b610da5565b34801561045c57600080fd5b5061033461046b366004612687565b610ec1565b34801561047c57600080fd5b506102a461048b3660046126d5565b600560209081526000928352604080842090915290825290205481565b3480156104b457600080fd5b506104c86104c33660046124b8565b610f2a565b6040516102ae919061293f565b3480156104e157600080fd5b506103346104f03660046126bc565b611033565b34801561050157600080fd5b50610334610510366004612468565b611066565b34801561052157600080fd5b506103346105303660046126fa565b611108565b34801561054157600080fd5b506105556105503660046126bc565b611177565b6040516102ae919061289a565b34801561056e57600080fd5b506102a460065481565b34801561058457600080fd5b506105986105933660046126bc565b6111e2565b6040516102ae91906128e7565b3480156105b157600080fd5b50600b546105c5906001600160a01b031681565b6040516001600160a01b0390911681526020016102ae565b3480156105e957600080fd5b506103076112f3565b610334610600366004612580565b611300565b34801561061157600080fd5b506105c5610620366004612745565b611421565b34801561063157600080fd5b5061033461064036600461230e565b611459565b34801561065157600080fd5b50610334610660366004612687565b6114b9565b34801561067157600080fd5b506103346106803660046123cf565b6114ef565b34801561069157600080fd5b506103346106a0366004612687565b611637565b3480156106b157600080fd5b506103076106c03660046126bc565b61166d565b3480156106d157600080fd5b506103346106e036600461230e565b61167a565b3480156106f157600080fd5b506102a461070036600461260c565b6116cf565b34801561071157600080fd5b506102d76107203660046121c0565b600360209081526000928352604080842090915290825290205460ff1681565b34801561074c57600080fd5b5061033461075b36600461236d565b61171d565b34801561076c57600080fd5b5061033461077b3660046122a6565b611759565b34801561078c57600080fd5b5061033461079b36600461219c565b6117b8565b3480156107ac57600080fd5b506102d76107bb36600461219c565b600c6020526000908152604090205460ff1681565b60006301ffc9a760e01b6001600160e01b0319831614806108015750636cdb3d1360e11b6001600160e01b03198316145b8061081c57506303a24d0760e21b6001600160e01b03198316145b92915050565b600a602052600090815260409020805461083b90612aa6565b80601f016020809104026020016040519081016040528092919081815260200182805461086790612aa6565b80156108b45780601f10610889576101008083540402835291602001916108b4565b820191906000526020600020905b81548152906001019060200180831161089757829003601f168201915b505050505081565b600b546001600160a01b031633146108ef5760405162461bcd60e51b81526004016108e69061298a565b60405180910390fd5b61092e82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061180492505050565b5050565b600b546001600160a01b0316331461095c5760405162461bcd60e51b81526004016108e69061298a565b61092e82828080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061181792505050565b6000805461083b90612aa6565b336000908152600260209081526040808320838052909152902054610a0f5760405162461bcd60e51b815260206004820152601c60248201527f596f7520646f6e27742068617665206120626c616e6b2063686970210000000060448201526064016108e6565b610a188161182a565b610a645760405162461bcd60e51b815260206004820152601c60248201527f596f752063616e6e6f742063686f6f736520746869732067616e67210000000060448201526064016108e6565b610a713360006001611848565b610a8d33826001604051806020016040528060008152506118a1565b50565b600b546001600160a01b03163314610aba5760405162461bcd60e51b81526004016108e69061298a565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6007805461083b90612aa6565b606060065460011415610b915760078054610b0c90612aa6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b3890612aa6565b8015610b855780601f10610b5a57610100808354040283529160200191610b85565b820191906000526020600020905b815481529060010190602001808311610b6857829003601f168201915b50505050509050919050565b60065460021415610bd1576008610ba783611903565b6009604051602001610bbb9392919061282d565b6040516020818303038152906040529050919050565b60065460031415610bf5576000828152600a602052604090208054610b0c90612aa6565b505060408051602081019091526000815290565b336000908152600c602052604090205460ff16610c565760405162461bcd60e51b815260206004820152600b60248201526a4e6f74204d696e7465722160a81b60448201526064016108e6565b610c608684612a2d565b471015610ce65760405162461bcd60e51b815260206004820152604860248201527f45524331313535473a2061697264726f7053696e676c65546f4d616e79506c7560448201527f73455448496e42616c616e636528293a204e6f7420656e6f756768204554482060648201526762616c616e63652160c01b608482015260a4016108e6565b60005b86811015610d9b57610d59888883818110610d0657610d06612b52565b9050602002016020810190610d1b919061219c565b878786868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611a0992505050565b610d89888883818110610d6e57610d6e612b52565b9050602002016020810190610d83919061219c565b85611aca565b80610d9381612ae1565b915050610ce9565b5050505050505050565b8251825114610e1c5760405162461bcd60e51b815260206004820152603a60248201527f45524331313535473a207361666542617463685472616e7366657246726f6d2860448201527f293a204172726179204c656e67746873204d69736d617463682100000000000060648201526084016108e6565b60005b8251811015610eb957828181518110610e3a57610e3a612b52565b6020026020010151600014610ea75760405162461bcd60e51b815260206004820152602d60248201527f45524331313535473a207361666542617463685472616e7366657246726f6d2860448201526c293a20536f756c626f756e642160981b60648201526084016108e6565b80610eb181612ae1565b915050610e1f565b505050505050565b600b546001600160a01b03163314610eeb5760405162461bcd60e51b81526004016108e69061298a565b61092e82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b5f92505050565b6060610f37835183511490565b610f4057600080fd5b600083516001600160401b03811115610f5b57610f5b612b68565b604051908082528060200260200182016040528015610f84578160200160208202803683370190505b50905060005b845181101561102b5760026000868381518110610fa957610fa9612b52565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000858381518110610fe557610fe5612b52565b602002602001015181526020019081526020016000205482828151811061100e5761100e612b52565b60209081029190910101528061102381612ae1565b915050610f8a565b509392505050565b600b546001600160a01b0316331461105d5760405162461bcd60e51b81526004016108e69061298a565b610a8d81600655565b336000908152600d602052604090205460ff166110b35760405162461bcd60e51b815260206004820152600b60248201526a4e6f74204275726e65722160a81b60448201526064016108e6565b60005b83811015611101576110ef8585838181106110d3576110d3612b52565b90506020020160208101906110e8919061219c565b8484611848565b806110f981612ae1565b9150506110b6565b5050505050565b600b546001600160a01b031633146111325760405162461bcd60e51b81526004016108e69061298a565b6111728383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611b7292505050565b505050565b600081815260046020908152604091829020805483518184028101840190945280845260609392830182828015610b8557602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116111b95750505050509050919050565b606060006111ef83611177565b80519091506000816001600160401b0381111561120e5761120e612b68565b60405190808252806020026020018201604052801561125357816020015b604080518082019091526000808252602082015281526020019060019003908161122c5790505b50905060005b828110156112ea57600084828151811061127557611275612b52565b6020908102919091018101516040805180820182526001600160a01b0383168082526000908152600285528281208c8252855291909120549281019290925284519092508490849081106112cb576112cb612b52565b60200260200101819052505080806112e290612ae1565b915050611259565b50949350505050565b6001805461083b90612aa6565b336000908152600c602052604090205460ff1661134d5760405162461bcd60e51b815260206004820152600b60248201526a4e6f74204d696e7465722160a81b60448201526064016108e6565b6113578684612a2d565b34146113da5760405162461bcd60e51b815260206004820152604660248201527f45524331313535473a2061697264726f7053696e676c65546f4d616e79506c7560448201527f73455448496e4d736756616c756528293a20496e636f7272656374206d73672e60648201526576616c75652160d01b608482015260a4016108e6565b60005b86811015610d9b576113fa888883818110610d0657610d06612b52565b61140f888883818110610d6e57610d6e612b52565b8061141981612ae1565b9150506113dd565b6004602052816000526040600020818154811061143d57600080fd5b6000918252602090912001546001600160a01b03169150829050565b801561092e5760405162461bcd60e51b815260206004820152602960248201527f45524331313535473a20736574417070726f76616c466f72416c6c28293a20536044820152686f756c626f756e642160b81b60648201526084016108e6565b600b546001600160a01b031633146114e35760405162461bcd60e51b81526004016108e69061298a565b61117260018383611f22565b336000908152600d602052604090205460ff1661153c5760405162461bcd60e51b815260206004820152600b60248201526a4e6f74204275726e65722160a81b60448201526064016108e6565b828514801561154a57508085145b6115b05760405162461bcd60e51b815260206004820152603160248201527f45524331313535473a206275726e46726f6d4d616e7928293a204172726179206044820152706c656e67746873206d69736d617463682160781b60648201526084016108e6565b60005b8581101561162e5761161c8787838181106115d0576115d0612b52565b90506020020160208101906115e5919061219c565b8686848181106115f7576115f7612b52565b9050602002013585858581811061161057611610612b52565b90506020020135611848565b8061162681612ae1565b9150506115b3565b50505050505050565b600b546001600160a01b031633146116615760405162461bcd60e51b81526004016108e69061298a565b61117260008383611f22565b60606008610ba783611903565b600b546001600160a01b031633146116a45760405162461bcd60e51b81526004016108e69061298a565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b60008060005b8381101561102b576116fe8585838181106116f2576116f2612b52565b90506020020135611177565b516117099083612a01565b91508061171581612ae1565b9150506116d5565b600b546001600160a01b031633146117475760405162461bcd60e51b81526004016108e69061298a565b611753848484846118a1565b50505050565b81156111015760405162461bcd60e51b815260206004820152602860248201527f45524331313535473a20736166655472616e7366657246726f6d28293a20536f604482015267756c626f756e642160c01b60648201526084016108e6565b600b546001600160a01b031633146117e25760405162461bcd60e51b81526004016108e69061298a565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b805161092e906007906020840190611fa6565b805161092e906009906020840190611fa6565b6000816001148061183b5750816002145b8061081c57505060031490565b611853838383611b91565b60408051838152602081018390526000916001600160a01b0386169133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4505050565b6118ac848484611bd4565b60408051848152602081018490526001600160a01b0386169160009133917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611753600085858585611c1b565b6060816119275750506040805180820190915260018152600360fc1b602082015290565b8160005b8115611951578061193b81612ae1565b915061194a9050600a83612a19565b915061192b565b6000816001600160401b0381111561196b5761196b612b68565b6040519080825280601f01601f191660200182016040528015611995576020820181803683370190505b5090505b8415611a0157816119a981612a8f565b92506119b89050600a86612afc565b6119c3906030612a01565b60f81b8183815181106119d8576119d8612b52565b60200101906001600160f81b031916908160001a9053506119fa600a86612a19565b9450611999565b949350505050565b60005b60038111611abd576001600160a01b038516600090815260026020908152604080832084845290915290205415611aab5760405162461bcd60e51b815260206004820152603760248201527f45524331313535473a204741532043686970205f61697264726f7028293a207560448201527f73657220616c726561647920686173206120636869702100000000000000000060648201526084016108e6565b80611ab581612ae1565b915050611a0c565b50611753848484846118a1565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114611b17576040519150601f19603f3d011682016040523d82523d6000602084013e611b1c565b606091505b50509050806111725760405162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b60448201526064016108e6565b805161092e906008906020840190611fa6565b6000828152600a60209081526040909120825161117292840190611fa6565b6001600160a01b038316600090815260026020908152604080832085845290915281208054839290611bc4908490612a4c565b9091555061117290508383611d30565b611bde8383611ea5565b6001600160a01b038316600090815260026020908152604080832085845290915281208054839290611c11908490612a01565b9091555050505050565b6001600160a01b0384163b15611cc35760405163f23a6e6160e01b808252906001600160a01b0386169063f23a6e6190611c619033908a90899089908990600401612860565b602060405180830381600087803b158015611c7b57600080fd5b505af1158015611c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb3919061266a565b6001600160e01b03191614611cd0565b6001600160a01b03841615155b6111015760405162461bcd60e51b815260206004820152602b60248201527f5f45524331313535537570706f7274656428293a20556e737570706f7274656460448201526a20526563697069656e742160a81b60648201526084016108e6565b6001600160a01b038216600090815260026020908152604080832084845290915290205461092e5760008181526005602090815260408083206001600160a01b03861684528252808320548484526004909252822054909190611d9590600190612a4c565b9050808214611e3e576000838152600460205260408120805483908110611dbe57611dbe612b52565b60009182526020808320909101548683526004909152604090912080546001600160a01b039092169250829185908110611dfa57611dfa612b52565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790558682526005815260408083209490931682529290925290208290555b6000838152600460205260409020805480611e5b57611e5b612b3c565b60008281526020808220830160001990810180546001600160a01b03191690559092019092558482526005815260408083206001600160a01b038816845290915281205550505050565b6001600160a01b038216600090815260026020908152604080832084845290915290205461092e5760008181526004602090815260408083208054600181018255908452828420810180546001600160a01b0319166001600160a01b03979097169687179055938352600582528083209483529390529190912055565b828054611f2e90612aa6565b90600052602060002090601f016020900481019282611f505760008555611f96565b82601f10611f695782800160ff19823516178555611f96565b82800160010185558215611f96579182015b82811115611f96578235825591602001919060010190611f7b565b50611fa292915061201a565b5090565b828054611fb290612aa6565b90600052602060002090601f016020900481019282611fd45760008555611f96565b82601f10611fed57805160ff1916838001178555611f96565b82800160010185558215611f96579182015b82811115611f96578251825591602001919060010190611fff565b5b80821115611fa2576000815560010161201b565b60008083601f84011261204157600080fd5b5081356001600160401b0381111561205857600080fd5b6020830191508360208260051b850101111561207357600080fd5b9250929050565b600082601f83011261208b57600080fd5b813560206120a061209b836129de565b6129ae565b80838252828201915082860187848660051b89010111156120c057600080fd5b60005b858110156120df578135845292840192908401906001016120c3565b5090979650505050505050565b60008083601f8401126120fe57600080fd5b5081356001600160401b0381111561211557600080fd5b60208301915083602082850101111561207357600080fd5b600082601f83011261213e57600080fd5b81356001600160401b0381111561215757612157612b68565b61216a601f8201601f19166020016129ae565b81815284602083860101111561217f57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602082840312156121ae57600080fd5b81356121b981612b7e565b9392505050565b600080604083850312156121d357600080fd5b82356121de81612b7e565b915060208301356121ee81612b7e565b809150509250929050565b600080600080600060a0868803121561221157600080fd5b853561221c81612b7e565b9450602086013561222c81612b7e565b935060408601356001600160401b038082111561224857600080fd5b61225489838a0161207a565b9450606088013591508082111561226a57600080fd5b61227689838a0161207a565b9350608088013591508082111561228c57600080fd5b506122998882890161212d565b9150509295509295909350565b600080600080600060a086880312156122be57600080fd5b85356122c981612b7e565b945060208601356122d981612b7e565b9350604086013592506060860135915060808601356001600160401b0381111561230257600080fd5b6122998882890161212d565b6000806040838503121561232157600080fd5b823561232c81612b7e565b9150602083013580151581146121ee57600080fd5b6000806040838503121561235457600080fd5b823561235f81612b7e565b946020939093013593505050565b6000806000806080858703121561238357600080fd5b843561238e81612b7e565b9350602085013592506040850135915060608501356001600160401b038111156123b757600080fd5b6123c38782880161212d565b91505092959194509250565b600080600080600080606087890312156123e857600080fd5b86356001600160401b03808211156123ff57600080fd5b61240b8a838b0161202f565b9098509650602089013591508082111561242457600080fd5b6124308a838b0161202f565b9096509450604089013591508082111561244957600080fd5b5061245689828a0161202f565b979a9699509497509295939492505050565b6000806000806060858703121561247e57600080fd5b84356001600160401b0381111561249457600080fd5b6124a08782880161202f565b90989097506020870135966040013595509350505050565b600080604083850312156124cb57600080fd5b82356001600160401b03808211156124e257600080fd5b818501915085601f8301126124f657600080fd5b8135602061250661209b836129de565b8083825282820191508286018a848660051b890101111561252657600080fd5b600096505b8487101561255257803561253e81612b7e565b83526001969096019591830191830161252b565b509650508601359250508082111561256957600080fd5b506125768582860161207a565b9150509250929050565b600080600080600080600060a0888a03121561259b57600080fd5b87356001600160401b03808211156125b257600080fd5b6125be8b838c0161202f565b909950975060208a0135965060408a0135955060608a0135945060808a01359150808211156125ec57600080fd5b506125f98a828b016120ec565b989b979a50959850939692959293505050565b6000806020838503121561261f57600080fd5b82356001600160401b0381111561263557600080fd5b6126418582860161202f565b90969095509350505050565b60006020828403121561265f57600080fd5b81356121b981612b93565b60006020828403121561267c57600080fd5b81516121b981612b93565b6000806020838503121561269a57600080fd5b82356001600160401b038111156126b057600080fd5b612641858286016120ec565b6000602082840312156126ce57600080fd5b5035919050565b600080604083850312156126e857600080fd5b8235915060208301356121ee81612b7e565b60008060006040848603121561270f57600080fd5b8335925060208401356001600160401b0381111561272c57600080fd5b612738868287016120ec565b9497909650939450505050565b6000806040838503121561275857600080fd5b50508035926020909101359150565b6000815180845261277f816020860160208601612a63565b601f01601f19169290920160200192915050565b8054600090600181811c90808316806127ad57607f831692505b60208084108214156127cf57634e487b7160e01b600052602260045260246000fd5b8180156127e357600181146127f457612821565b60ff19861689528489019650612821565b60008881526020902060005b868110156128195781548b820152908501908301612800565b505084890196505b50505050505092915050565b60006128398286612793565b8451612849818360208901612a63565b61285581830186612793565b979650505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061285590830184612767565b6020808252825182820181905260009190848201906040850190845b818110156128db5783516001600160a01b0316835292840192918401916001016128b6565b50909695505050505050565b602080825282518282018190526000919060409081850190868401855b8281101561293257815180516001600160a01b03168552860151868501529284019290850190600101612904565b5091979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156128db5783518352928401929184019160010161295b565b6020815260006121b96020830184612767565b6020808252600a90820152694e6f74204f776e65722160b01b604082015260600190565b604051601f8201601f191681016001600160401b03811182821017156129d6576129d6612b68565b604052919050565b60006001600160401b038211156129f7576129f7612b68565b5060051b60200190565b60008219821115612a1457612a14612b10565b500190565b600082612a2857612a28612b26565b500490565b6000816000190483118215151615612a4757612a47612b10565b500290565b600082821015612a5e57612a5e612b10565b500390565b60005b83811015612a7e578181015183820152602001612a66565b838111156117535750506000910152565b600081612a9e57612a9e612b10565b506000190190565b600181811c90821680612aba57607f821691505b60208210811415612adb57634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415612af557612af5612b10565b5060010190565b600082612b0b57612b0b612b26565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610a8d57600080fd5b6001600160e01b031981168114610a8d57600080fdfea2646970667358221220e83827315243ccf2613f58034872b6f59618acde0f3443079a044853a373f85364736f6c63430008070033

Deployed Bytecode Sourcemap

18980:948:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13423:31;;;13432:10;15335:51:1;;13444:9:0;15417:2:1;15402:18;;15395:34;13423:31:0;;15308:18:1;13423:31:0;;;;;;;18980:948;;;;;1291:64;;;;;;;;;;-1:-1:-1;1291:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;24082:25:1;;;24070:2;24055:18;1291:64:0;;;;;;;;11358:340;;;;;;;;;;-1:-1:-1;11358:340:0;;;;;:::i;:::-;;:::i;:::-;;;17734:14:1;;17727:22;17709:41;;17697:2;17682:18;11358:340:0;17569:187:1;5697:46:0;;;;;;;;;;-1:-1:-1;5697:46:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;13865:75::-;;;;;;;;;;-1:-1:-1;13865:75:0;;;;;:::i;:::-;;:::i;:::-;;14080:111;;;;;;;;;;-1:-1:-1;14080:111:0;;;;;:::i;:::-;;:::i;12757:39::-;;;;;;;;;;-1:-1:-1;12757:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;569:18;;;;;;;;;;;;;:::i;19504:421::-;;;;;;;;;;-1:-1:-1;19504:421:0;;;;;:::i;:::-;;:::i;12880:112::-;;;;;;;;;;-1:-1:-1;12880:112:0;;;;;:::i;:::-;;:::i;4675:18::-;;;;;;;;;;;;;:::i;5912:388::-;;;;;;;;;;-1:-1:-1;5912:388:0;;;;;:::i;:::-;;:::i;16698:640::-;;;;;;;;;;-1:-1:-1;16698:640:0;;;;;:::i;:::-;;:::i;14858:472::-;;;;;;;;;;-1:-1:-1;14858:472:0;;;;;:::i;:::-;;:::i;13971:103::-;;;;;;;;;;-1:-1:-1;13971:103:0;;;;;:::i;:::-;;:::i;1534:75::-;;;;;;;;;;-1:-1:-1;1534:75:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;11729:422;;;;;;;;;;-1:-1:-1;11729:422:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;13746:92::-;;;;;;;;;;-1:-1:-1;13746:92:0;;;;;:::i;:::-;;:::i;18008:332::-;;;;;;;;;;-1:-1:-1;18008:332:0;;;;;:::i;:::-;;:::i;14218:116::-;;;;;;;;;;-1:-1:-1;14218:116:0;;;;;:::i;:::-;;:::i;3347:124::-;;;;;;;;;;-1:-1:-1;3347:124:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4517:26::-;;;;;;;;;;;;;;;;3477:607;;;;;;;;;;-1:-1:-1;3477:607:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12191:20::-;;;;;;;;;;-1:-1:-1;12191:20:0;;;;-1:-1:-1;;;;;12191:20:0;;;;;;-1:-1:-1;;;;;14552:32:1;;;14534:51;;14522:2;14507:18;12191:20:0;14388:203:1;595:20:0;;;;;;;;;;;;;:::i;17344:626::-;;;;;;:::i;:::-;;:::i;1477:50::-;;;;;;;;;;-1:-1:-1;1477:50:0;;;;;:::i;:::-;;:::i;15336:235::-;;;;;;;;;;-1:-1:-1;15336:235:0;;;;;:::i;:::-;;:::i;19220:84::-;;;;;;;;;;-1:-1:-1;19220:84:0;;;;;:::i;:::-;;:::i;18346:627::-;;;;;;;;;;-1:-1:-1;18346:627:0;;;;;:::i;:::-;;:::i;19138:76::-;;;;;;;;;;-1:-1:-1;19138:76:0;;;;;:::i;:::-;;:::i;6352:197::-;;;;;;;;;;-1:-1:-1;6352:197:0;;;;;:::i;:::-;;:::i;12591:112::-;;;;;;;;;;-1:-1:-1;12591:112:0;;;;;:::i;:::-;;:::i;4090:267::-;;;;;;;;;;-1:-1:-1;4090:267:0;;;;;:::i;:::-;;:::i;1362:68::-;;;;;;;;;;-1:-1:-1;1362:68:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;16494:167;;;;;;;;;;-1:-1:-1;16494:167:0;;;;;:::i;:::-;;:::i;14572:280::-;;;;;;;;;;-1:-1:-1;14572:280:0;;;;;:::i;:::-;;:::i;12337:77::-;;;;;;;;;;-1:-1:-1;12337:77:0;;;;;:::i;:::-;;:::i;12468:39::-;;;;;;;;;;-1:-1:-1;12468:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;11358:340;11435:4;-1:-1:-1;;;;;;;;;11469:26:0;;;;:99;;-1:-1:-1;;;;;;;;;;11542:26:0;;;11469:99;:173;;;-1:-1:-1;;;;;;;;;;11616:26:0;;;11469:173;11452:190;11358:340;-1:-1:-1;;11358:340:0:o;5697:46::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13865:75::-;12291:5;;-1:-1:-1;;;;;12291:5:0;12300:10;12291:19;12283:42;;;;-1:-1:-1;;;12283:42:0;;;;;;;:::i;:::-;;;;;;;;;13924:13:::1;13932:4;;13924:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;13924:7:0::1;::::0;-1:-1:-1;;;13924:13:0:i:1;:::-;13865:75:::0;;:::o;14080:111::-;12291:5;;-1:-1:-1;;;;;12291:5:0;12300:10;12291:19;12283:42;;;;-1:-1:-1;;;12283:42:0;;;;;;;:::i;:::-;14162:26:::1;14183:4;;14162:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;14162:20:0::1;::::0;-1:-1:-1;;;14162:26:0:i:1;569:18::-:0;;;;;;;:::i;19504:421::-;19579:10;19596:1;19569:21;;;:9;:21;;;;;;;;:24;;;;;;;;;19561:82;;;;-1:-1:-1;;;19561:82:0;;21281:2:1;19561:82:0;;;21263:21:1;21320:2;21300:18;;;21293:30;21359;21339:18;;;21332:58;21407:18;;19561:82:0;21079:352:1;19561:82:0;19662:25;19679:7;19662:16;:25::i;:::-;19654:79;;;;-1:-1:-1;;;19654:79:0;;22056:2:1;19654:79:0;;;22038:21:1;22095:2;22075:18;;;22068:30;22134;22114:18;;;22107:58;22182:18;;19654:79:0;21854:352:1;19654:79:0;19802:23;19808:10;19820:1;19823;19802:5;:23::i;:::-;19884:33;19890:10;19902:7;19911:1;19884:33;;;;;;;;;;;;:5;:33::i;:::-;19504:421;:::o;12880:112::-;12291:5;;-1:-1:-1;;;;;12291:5:0;12300:10;12291:19;12283:42;;;;-1:-1:-1;;;12283:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12959:17:0;;;::::1;;::::0;;;:7:::1;:17;::::0;;;;:25;;-1:-1:-1;;12959:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12880:112::o;4675:18::-;;;;;;;:::i;5912:388::-;5967:13;6017:7;;6028:1;6017:12;6013:279;;;6038:4;6031:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5912:388;;;:::o;6013:279::-;6081:7;;6092:1;6081:12;6077:215;;;6140:12;6154:14;6164:3;6154:9;:14::i;:::-;6170:16;6123:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6095:93;;5912:388;;;:::o;6077:215::-;6229:7;;6240:1;6229:12;6225:67;;;6250:17;;;;:12;:17;;;;;6243:24;;;;;:::i;6225:67::-;-1:-1:-1;;6283:9:0;;;;;;;;;-1:-1:-1;6283:9:0;;;5912:388::o;16698:640::-;12552:10;12544:19;;;;:7;:19;;;;;;;;12536:43;;;;-1:-1:-1;;;12536:43:0;;18940:2:1;12536:43:0;;;18922:21:1;18979:2;18959:18;;;18952:30;-1:-1:-1;;;18998:18:1;;;18991:41;19049:18;;12536:43:0;18738:335:1;12536:43:0;16990:24:::1;17003:4:::0;16990:10;:24:::1;:::i;:::-;16965:21;:49;;16957:147;;;::::0;-1:-1:-1;;;16957:147:0;;20376:2:1;16957:147:0::1;::::0;::::1;20358:21:1::0;20415:2;20395:18;;;20388:30;20454:34;20434:18;;;20427:62;20525:34;20505:18;;;20498:62;-1:-1:-1;;;20576:19:1;;;20569:39;20625:19;;16957:147:0::1;20174:476:1::0;16957:147:0::1;17185:9;17180:151;17200:15:::0;;::::1;17180:151;;;17237:38;17246:4;;17251:1;17246:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17255:3;17260:7;17269:5;;17237:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;17237:8:0::1;::::0;-1:-1:-1;;;17237:38:0:i:1;:::-;17290:29;17299:4;;17304:1;17299:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17308:10;17290:8;:29::i;:::-;17217:3:::0;::::1;::::0;::::1;:::i;:::-;;;;17180:151;;;;16698:640:::0;;;;;;;:::o;14858:472::-;15041:11;;15054:15;;6673:6;15019:127;;;;-1:-1:-1;;;15019:127:0;;23711:2:1;15019:127:0;;;23693:21:1;23750:2;23730:18;;;23723:30;23789:34;23769:18;;;23762:62;23860:28;23840:18;;;23833:56;23906:19;;15019:127:0;23509:422:1;15019:127:0;15164:9;15159:164;15183:8;:15;15179:1;:19;15159:164;;;15228:8;15237:1;15228:11;;;;;;;;:::i;:::-;;;;;;;15243:1;15228:16;15220:91;;;;-1:-1:-1;;;15220:91:0;;18187:2:1;15220:91:0;;;18169:21:1;18226:2;18206:18;;;18199:30;18265:34;18245:18;;;18238:62;-1:-1:-1;;;18316:18:1;;;18309:43;18369:19;;15220:91:0;17985:409:1;15220:91:0;15200:3;;;;:::i;:::-;;;;15159:164;;;;14858:472;;;;;:::o;13971:103::-;12291:5;;-1:-1:-1;;;;;12291:5:0;12300:10;12291:19;12283:42;;;;-1:-1:-1;;;12283:42:0;;;;;;;:::i;:::-;14049:22:::1;14066:4;;14049:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;14049:16:0::1;::::0;-1:-1:-1;;;14049:22:0:i:1;11729:422::-:0;11836:16;11873:42;11887:7;:14;11903:4;:11;6673:6;;6581:106;11873:42;11865:51;;;;;;11929:26;11972:7;:14;-1:-1:-1;;;;;11958:29:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11958:29:0;;11929:58;;12005:9;12000:117;12024:7;:14;12020:1;:18;12000:117;;;12075:9;:21;12085:7;12093:1;12085:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;12075:21:0;-1:-1:-1;;;;;12075:21:0;;;;;;;;;;;;:30;12097:4;12102:1;12097:7;;;;;;;;:::i;:::-;;;;;;;12075:30;;;;;;;;;;;;12060:9;12070:1;12060:12;;;;;;;;:::i;:::-;;;;;;;;;;:45;12040:3;;;;:::i;:::-;;;;12000:117;;;-1:-1:-1;12134:9:0;11729:422;-1:-1:-1;;;11729:422:0:o;13746:92::-;12291:5;;-1:-1:-1;;;;;12291:5:0;12300:10;12291:19;12283:42;;;;-1:-1:-1;;;12283:42:0;;;;;;;:::i;:::-;13814:21:::1;13826:8;4618:7:::0;:18;4551:93;18008:332;12841:10;12833:19;;;;:7;:19;;;;;;;;12825:43;;;;-1:-1:-1;;;12825:43:0;;20036:2:1;12825:43:0;;;20018:21:1;20075:2;20055:18;;;20048:30;-1:-1:-1;;;20094:18:1;;;20087:41;20145:18;;12825:43:0;19834:335:1;12825:43:0;18158:9:::1;18153:180;18173:17:::0;;::::1;18153:180;;;18291:30;18297:6;;18304:1;18297:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18308:3;18313:7;18291:5;:30::i;:::-;18192:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18153:180;;;;18008:332:::0;;;;:::o;14218:116::-;12291:5;;-1:-1:-1;;;;;12291:5:0;12300:10;12291:19;12283:42;;;;-1:-1:-1;;;12283:42:0;;;;;;;:::i;:::-;14306:25:::1;14321:3;14326:4;;14306:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;14306:14:0::1;::::0;-1:-1:-1;;;14306:25:0:i:1;:::-;14218:116:::0;;;:::o;3347:124::-;3445:18;;;;:13;:18;;;;;;;;;3438:25;;;;;;;;;;;;;;;;;3409:16;;3438:25;;;3445:18;3438:25;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3438:25:0;;;;;;;;;;;;;;;;;;;;;;3347:124;;;:::o;3477:607::-;3555:22;3590:24;3617:23;3636:3;3617:18;:23::i;:::-;3675:14;;3590:50;;-1:-1:-1;3651:21:0;3675:14;-1:-1:-1;;;;;3743:35:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;3743:35:0;;;;;;;;;;;;;;;;3700:78;;3796:9;3791:251;3815:13;3811:1;:17;3791:251;;;3850:21;3874:7;3882:1;3874:10;;;;;;;;:::i;:::-;;;;;;;;;;;;3922:108;;;;;;;;-1:-1:-1;;;;;3922:108:0;;;;;-1:-1:-1;3986:24:0;;;:9;:24;;;;;:29;;;;;;;;;;3922:108;;;;;;;3899:20;;3874:10;;-1:-1:-1;3899:17:0;;3917:1;;3899:20;;;;;;:::i;:::-;;;;;;:131;;;;3835:207;3830:3;;;;;:::i;:::-;;;;3791:251;;;-1:-1:-1;4059:17:0;3477:607;-1:-1:-1;;;;3477:607:0:o;595:20::-;;;;;;;:::i;17344:626::-;12552:10;12544:19;;;;:7;:19;;;;;;;;12536:43;;;;-1:-1:-1;;;12536:43:0;;18940:2:1;12536:43:0;;;18922:21:1;18979:2;18959:18;;;18952:30;-1:-1:-1;;;18998:18:1;;;18991:41;19049:18;;12536:43:0;18738:335:1;12536:43:0;17624:24:::1;17637:4:::0;17624:10;:24:::1;:::i;:::-;17611:9;:37;17603:133;;;::::0;-1:-1:-1;;;17603:133:0;;22413:2:1;17603:133:0::1;::::0;::::1;22395:21:1::0;22452:2;22432:18;;;22425:30;22491:34;22471:18;;;22464:62;22562:34;22542:18;;;22535:62;-1:-1:-1;;;22613:19:1;;;22606:37;22660:19;;17603:133:0::1;22211:474:1::0;17603:133:0::1;17817:9;17812:151;17832:15:::0;;::::1;17812:151;;;17869:38;17878:4;;17883:1;17878:7;;;;;;;:::i;17869:38::-;17922:29;17931:4;;17936:1;17931:7;;;;;;;:::i;17922:29::-;17849:3:::0;::::1;::::0;::::1;:::i;:::-;;;;17812:151;;1477:50:::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1477:50:0;;-1:-1:-1;1477:50:0;;-1:-1:-1;1477:50:0:o;15336:235::-;15508:9;15507:10;15499:64;;;;-1:-1:-1;;;15499:64:0;;22892:2:1;15499:64:0;;;22874:21:1;22931:2;22911:18;;;22904:30;22970:34;22950:18;;;22943:62;-1:-1:-1;;;23021:18:1;;;23014:39;23070:19;;15499:64:0;22690:405:1;19220:84:0;12291:5;;-1:-1:-1;;;;;12291:5:0;12300:10;12291:19;12283:42;;;;-1:-1:-1;;;12283:42:0;;;;;;;:::i;:::-;19285:16:::1;:6;19294:7:::0;;19285:16:::1;:::i;18346:627::-:0;12841:10;12833:19;;;;:7;:19;;;;;;;;12825:43;;;;-1:-1:-1;;;12825:43:0;;20036:2:1;12825:43:0;;;20018:21:1;20075:2;20055:18;;;20048:30;-1:-1:-1;;;20094:18:1;;;20087:41;20145:18;;12825:43:0;19834:335:1;12825:43:0;6673:6;;;18559:104:::1;;;;-1:-1:-1::0;6673:6:0;;;18618:45:::1;18551:179;;;::::0;-1:-1:-1;;;18551:179:0;;21638:2:1;18551:179:0::1;::::0;::::1;21620:21:1::0;21677:2;21657:18;;;21650:30;21716:34;21696:18;;;21689:62;-1:-1:-1;;;21767:18:1;;;21760:47;21824:19;;18551:179:0::1;21436:413:1::0;18551:179:0::1;18783:9;18778:188;18798:17:::0;;::::1;18778:188;;;18916:38;18922:6;;18929:1;18922:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18933:4;;18938:1;18933:7;;;;;;;:::i;:::-;;;;;;;18942:8;;18951:1;18942:11;;;;;;;:::i;:::-;;;;;;;18916:5;:38::i;:::-;18817:3:::0;::::1;::::0;::::1;:::i;:::-;;;;18778:188;;;;18346:627:::0;;;;;;:::o;19138:76::-;12291:5;;-1:-1:-1;;;;;12291:5:0;12300:10;12291:19;12283:42;;;;-1:-1:-1;;;12283:42:0;;;;;;;:::i;:::-;19199:12:::1;:4;19206:5:::0;;19199:12:::1;:::i;6352:197::-:0;6417:13;6488:12;6502:19;6512:8;6502:9;:19::i;12591:112::-;12291:5;;-1:-1:-1;;;;;12291:5:0;12300:10;12291:19;12283:42;;;;-1:-1:-1;;;12283:42:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12670:17:0;;;::::1;;::::0;;;:7:::1;:17;::::0;;;;:25;;-1:-1:-1;;12670:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12591:112::o;4090:267::-;4165:7;4185:15;4216:9;4211:114;4231:15;;;4211:114;;;4279:27;4298:4;;4303:1;4298:7;;;;;;;:::i;:::-;;;;;;;4279:18;:27::i;:::-;:34;4268:45;;;;:::i;:::-;;-1:-1:-1;4248:3:0;;;;:::i;:::-;;;;4211:114;;16494:167;12291:5;;-1:-1:-1;;;;;12291:5:0;12300:10;12291:19;12283:42;;;;-1:-1:-1;;;12283:42:0;;;;;;;:::i;:::-;16622:31:::1;16628:3;16633;16638:7;16647:5;16622;:31::i;:::-;16494:167:::0;;;;:::o;14572:280::-;14787:12;;14779:65;;;;-1:-1:-1;;;14779:65:0;;23302:2:1;14779:65:0;;;23284:21:1;23341:2;23321:18;;;23314:30;23380:34;23360:18;;;23353:62;-1:-1:-1;;;23431:18:1;;;23424:38;23479:19;;14779:65:0;23100:404:1;12337:77:0;12291:5;;-1:-1:-1;;;;;12291:5:0;12300:10;12291:19;12283:42;;;;-1:-1:-1;;;12283:42:0;;;;;;;:::i;:::-;12399:5:::1;:12:::0;;-1:-1:-1;;;;;;12399:12:0::1;-1:-1:-1::0;;;;;12399:12:0;;;::::1;::::0;;;::::1;::::0;;12337:77::o;4700:70::-;4756:11;;;;:4;;:11;;;;;:::i;4992:104::-;5070:23;;;;:16;;:23;;;;;:::i;19356:142::-;19422:4;19446:7;19457:1;19446:12;:28;;;;19462:7;19473:1;19462:12;19446:28;:44;;;-1:-1:-1;;19489:1:0;19478:12;;19356:142::o;10744:197::-;10824:34;10838:5;10845:3;10850:7;10824:13;:34::i;:::-;10874:59;;;24292:25:1;;;24348:2;24333:18;;24326:34;;;10916:1:0;;-1:-1:-1;;;;;10874:59:0;;;10889:10;;10874:59;;24265:18:1;10874:59:0;;;;;;;10744:197;;;:::o;9710:286::-;9813:32;9827:3;9832;9837:7;9813:13;:32::i;:::-;9863:57;;;24292:25:1;;;24348:2;24333:18;;24326:34;;;-1:-1:-1;;;;;9863:57:0;;;9898:1;;9878:10;;9863:57;;24265:18:1;9863:57:0;;;;;;;9933:55;9959:1;9963:3;9968;9973:7;9982:5;9933:17;:55::i;5102:550::-;5160:13;5190:11;5186:32;;-1:-1:-1;;5205:10:0;;;;;;;;;;;;-1:-1:-1;;;5205:10:0;;;;;5102:550::o;5186:32::-;5247:6;5228:16;5281:52;5288:13;;5281:52;;5305:9;;;;:::i;:::-;;-1:-1:-1;5316:14:0;;-1:-1:-1;5328:2:0;5316:14;;:::i;:::-;;;5281:52;;;5367:20;5400:7;-1:-1:-1;;;;;5390:18:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5390:18:0;;5367:41;;5419:124;5426:11;;5419:124;;5441:9;;;;:::i;:::-;;-1:-1:-1;5511:11:0;;-1:-1:-1;5520:2:0;5511:6;:11;:::i;:::-;5498:26;;:2;:26;:::i;:::-;5471:55;;5452:7;5460;5452:16;;;;;;;;:::i;:::-;;;;:74;-1:-1:-1;;;;;5452:74:0;;;;;;;;-1:-1:-1;5528:12:0;5538:2;5528:12;;:::i;:::-;;;5419:124;;;5593:7;5102:550;-1:-1:-1;;;;5102:550:0:o;15737:560::-;16084:9;16080:166;16104:1;16099;:6;16080:166;;-1:-1:-1;;;;;16135:14:0;;;;;;:9;:14;;;;;;;;:17;;;;;;;;;:22;16127:107;;;;-1:-1:-1;;;16127:107:0;;20857:2:1;16127:107:0;;;20839:21:1;20896:2;20876:18;;;20869:30;20935:34;20915:18;;;20908:62;21006:25;20986:18;;;20979:53;21049:19;;16127:107:0;20655:419:1;16127:107:0;16107:3;;;;:::i;:::-;;;;16080:166;;;;16258:31;16264:3;16269;16274:7;16283:5;16258;:31::i;13463:196::-;13545:12;13571:8;-1:-1:-1;;;;;13563:22:0;13593:7;13563:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13544:61;;;13624:7;13616:35;;;;-1:-1:-1;;;13616:35:0;;19692:2:1;13616:35:0;;;19674:21:1;19731:2;19711:18;;;19704:30;-1:-1:-1;;;19750:18:1;;;19743:45;19805:18;;13616:35:0;19490:339:1;4889:97:0;4964:19;;;;:12;;:19;;;;;:::i;5756:112::-;5841:17;;;;:12;:17;;;;;;;;:24;;;;;;;;:::i;10470:268::-;-1:-1:-1;;;;;10558:16:0;;;;;;:9;:16;;;;;;;;:21;;;;;;;;:32;;10583:7;;10558:16;:32;;10583:7;;10558:32;:::i;:::-;;;;-1:-1:-1;10697:33:0;;-1:-1:-1;10719:5:0;10726:3;10697:21;:33::i;9470:234::-;9627:28;9646:3;9651;9627:18;:28::i;:::-;-1:-1:-1;;;;;9666:14:0;;;;;;:9;:14;;;;;;;;:19;;;;;;;;:30;;9689:7;;9666:14;:30;;9689:7;;9666:30;:::i;:::-;;;;-1:-1:-1;;;;;9470:234:0:o;6869:442::-;-1:-1:-1;;;;;7007:15:0;;;:20;:221;;7063:101;;-1:-1:-1;;;7063:101:0;;;7181:47;-1:-1:-1;;;;;7063:43:0;;;7181:47;;7063:101;;7125:10;;7137:5;;7144:3;;7149:7;;7158:5;;7063:101;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;7063:165:0;;7007:221;;;-1:-1:-1;;;;;7030:17:0;;;;7007:221;6999:304;;;;-1:-1:-1;;;6999:304:0;;19280:2:1;6999:304:0;;;19262:21:1;19319:2;19299:18;;;19292:30;19358:34;19338:18;;;19331:62;-1:-1:-1;;;19409:18:1;;;19402:41;19460:19;;6999:304:0;19078:407:1;2282:1059:0;-1:-1:-1;;;;;2421:19:0;;;;;;:9;:19;;;;;;;;:24;;;;;;;;;2417:917;;2517:18;2538:25;;;:20;:25;;;;;;;;-1:-1:-1;;;;;2538:35:0;;;;;;;;;;2644:18;;;:13;:18;;;;;:25;2538:35;;2517:18;2644:29;;2672:1;;2644:29;:::i;:::-;2623:50;;2761:10;2747;:24;2743:383;;2792:24;2819:18;;;:13;:18;;;;;:30;;2838:10;;2819:30;;;;;;:::i;:::-;;;;;;;;;;;;;2933:18;;;:13;:18;;;;;;;:30;;-1:-1:-1;;;;;2819:30:0;;;;-1:-1:-1;2819:30:0;;2952:10;;2933:30;;;;;;:::i;:::-;;;;;;;;;;;;;:49;;-1:-1:-1;;;;;;2933:49:0;-1:-1:-1;;;;;2933:49:0;;;;;;3054:25;;;:20;:25;;;;;;:43;;;;;;;;;;;;:56;;;2743:383;3185:18;;;;:13;:18;;;;;:24;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;3185:24:0;;;;;-1:-1:-1;;;;;;3185:24:0;;;;;;;;;3287:25;;;:20;:25;;;;;;-1:-1:-1;;;;;3287:35:0;;;;;;;;;3280:42;-1:-1:-1;;2282:1059:0;;:::o;1765:511::-;-1:-1:-1;;;;;1898:19:0;;;;;;:9;:19;;;;;;;;:24;;;;;;;;;1894:375;;1980:18;2001;;;:13;:18;;;;;;;;:25;;2103:33;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2103:33:0;-1:-1:-1;;;;;2103:33:0;;;;;;;;;2209:25;;;:20;:25;;;;;:35;;;;;;;;;;:48;1765:511::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:367:1;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:1;;-1:-1:-1;;;;;214:30:1;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:673::-;440:5;493:3;486:4;478:6;474:17;470:27;460:55;;511:1;508;501:12;460:55;547:6;534:20;573:4;597:60;613:43;653:2;613:43;:::i;:::-;597:60;:::i;:::-;679:3;703:2;698:3;691:15;731:2;726:3;722:12;715:19;;766:2;758:6;754:15;818:3;813:2;807;804:1;800:10;792:6;788:23;784:32;781:41;778:61;;;835:1;832;825:12;778:61;857:1;867:163;881:2;878:1;875:9;867:163;;;938:17;;926:30;;976:12;;;;1008;;;;899:1;892:9;867:163;;;-1:-1:-1;1048:5:1;;386:673;-1:-1:-1;;;;;;;386:673:1:o;1064:347::-;1115:8;1125:6;1179:3;1172:4;1164:6;1160:17;1156:27;1146:55;;1197:1;1194;1187:12;1146:55;-1:-1:-1;1220:20:1;;-1:-1:-1;;;;;1252:30:1;;1249:50;;;1295:1;1292;1285:12;1249:50;1332:4;1324:6;1320:17;1308:29;;1384:3;1377:4;1368:6;1360;1356:19;1352:30;1349:39;1346:59;;;1401:1;1398;1391:12;1416:530;1458:5;1511:3;1504:4;1496:6;1492:17;1488:27;1478:55;;1529:1;1526;1519:12;1478:55;1565:6;1552:20;-1:-1:-1;;;;;1587:2:1;1584:26;1581:52;;;1613:18;;:::i;:::-;1657:55;1700:2;1681:13;;-1:-1:-1;;1677:27:1;1706:4;1673:38;1657:55;:::i;:::-;1737:2;1728:7;1721:19;1783:3;1776:4;1771:2;1763:6;1759:15;1755:26;1752:35;1749:55;;;1800:1;1797;1790:12;1749:55;1865:2;1858:4;1850:6;1846:17;1839:4;1830:7;1826:18;1813:55;1913:1;1888:16;;;1906:4;1884:27;1877:38;;;;1892:7;1416:530;-1:-1:-1;;;1416:530:1:o;1951:247::-;2010:6;2063:2;2051:9;2042:7;2038:23;2034:32;2031:52;;;2079:1;2076;2069:12;2031:52;2118:9;2105:23;2137:31;2162:5;2137:31;:::i;:::-;2187:5;1951:247;-1:-1:-1;;;1951:247:1:o;2463:388::-;2531:6;2539;2592:2;2580:9;2571:7;2567:23;2563:32;2560:52;;;2608:1;2605;2598:12;2560:52;2647:9;2634:23;2666:31;2691:5;2666:31;:::i;:::-;2716:5;-1:-1:-1;2773:2:1;2758:18;;2745:32;2786:33;2745:32;2786:33;:::i;:::-;2838:7;2828:17;;;2463:388;;;;;:::o;2856:1071::-;3010:6;3018;3026;3034;3042;3095:3;3083:9;3074:7;3070:23;3066:33;3063:53;;;3112:1;3109;3102:12;3063:53;3151:9;3138:23;3170:31;3195:5;3170:31;:::i;:::-;3220:5;-1:-1:-1;3277:2:1;3262:18;;3249:32;3290:33;3249:32;3290:33;:::i;:::-;3342:7;-1:-1:-1;3400:2:1;3385:18;;3372:32;-1:-1:-1;;;;;3453:14:1;;;3450:34;;;3480:1;3477;3470:12;3450:34;3503:61;3556:7;3547:6;3536:9;3532:22;3503:61;:::i;:::-;3493:71;;3617:2;3606:9;3602:18;3589:32;3573:48;;3646:2;3636:8;3633:16;3630:36;;;3662:1;3659;3652:12;3630:36;3685:63;3740:7;3729:8;3718:9;3714:24;3685:63;:::i;:::-;3675:73;;3801:3;3790:9;3786:19;3773:33;3757:49;;3831:2;3821:8;3818:16;3815:36;;;3847:1;3844;3837:12;3815:36;;3870:51;3913:7;3902:8;3891:9;3887:24;3870:51;:::i;:::-;3860:61;;;2856:1071;;;;;;;;:::o;3932:734::-;4036:6;4044;4052;4060;4068;4121:3;4109:9;4100:7;4096:23;4092:33;4089:53;;;4138:1;4135;4128:12;4089:53;4177:9;4164:23;4196:31;4221:5;4196:31;:::i;:::-;4246:5;-1:-1:-1;4303:2:1;4288:18;;4275:32;4316:33;4275:32;4316:33;:::i;:::-;4368:7;-1:-1:-1;4422:2:1;4407:18;;4394:32;;-1:-1:-1;4473:2:1;4458:18;;4445:32;;-1:-1:-1;4528:3:1;4513:19;;4500:33;-1:-1:-1;;;;;4545:30:1;;4542:50;;;4588:1;4585;4578:12;4542:50;4611:49;4652:7;4643:6;4632:9;4628:22;4611:49;:::i;4671:416::-;4736:6;4744;4797:2;4785:9;4776:7;4772:23;4768:32;4765:52;;;4813:1;4810;4803:12;4765:52;4852:9;4839:23;4871:31;4896:5;4871:31;:::i;:::-;4921:5;-1:-1:-1;4978:2:1;4963:18;;4950:32;5020:15;;5013:23;5001:36;;4991:64;;5051:1;5048;5041:12;5092:315;5160:6;5168;5221:2;5209:9;5200:7;5196:23;5192:32;5189:52;;;5237:1;5234;5227:12;5189:52;5276:9;5263:23;5295:31;5320:5;5295:31;:::i;:::-;5345:5;5397:2;5382:18;;;;5369:32;;-1:-1:-1;;;5092:315:1:o;5412:592::-;5507:6;5515;5523;5531;5584:3;5572:9;5563:7;5559:23;5555:33;5552:53;;;5601:1;5598;5591:12;5552:53;5640:9;5627:23;5659:31;5684:5;5659:31;:::i;:::-;5709:5;-1:-1:-1;5761:2:1;5746:18;;5733:32;;-1:-1:-1;5812:2:1;5797:18;;5784:32;;-1:-1:-1;5867:2:1;5852:18;;5839:32;-1:-1:-1;;;;;5883:30:1;;5880:50;;;5926:1;5923;5916:12;5880:50;5949:49;5990:7;5981:6;5970:9;5966:22;5949:49;:::i;:::-;5939:59;;;5412:592;;;;;;;:::o;6009:1088::-;6167:6;6175;6183;6191;6199;6207;6260:2;6248:9;6239:7;6235:23;6231:32;6228:52;;;6276:1;6273;6266:12;6228:52;6316:9;6303:23;-1:-1:-1;;;;;6386:2:1;6378:6;6375:14;6372:34;;;6402:1;6399;6392:12;6372:34;6441:70;6503:7;6494:6;6483:9;6479:22;6441:70;:::i;:::-;6530:8;;-1:-1:-1;6415:96:1;-1:-1:-1;6618:2:1;6603:18;;6590:32;;-1:-1:-1;6634:16:1;;;6631:36;;;6663:1;6660;6653:12;6631:36;6702:72;6766:7;6755:8;6744:9;6740:24;6702:72;:::i;:::-;6793:8;;-1:-1:-1;6676:98:1;-1:-1:-1;6881:2:1;6866:18;;6853:32;;-1:-1:-1;6897:16:1;;;6894:36;;;6926:1;6923;6916:12;6894:36;;6965:72;7029:7;7018:8;7007:9;7003:24;6965:72;:::i;:::-;6009:1088;;;;-1:-1:-1;6009:1088:1;;-1:-1:-1;6009:1088:1;;7056:8;;6009:1088;-1:-1:-1;;;6009:1088:1:o;7102:573::-;7206:6;7214;7222;7230;7283:2;7271:9;7262:7;7258:23;7254:32;7251:52;;;7299:1;7296;7289:12;7251:52;7339:9;7326:23;-1:-1:-1;;;;;7364:6:1;7361:30;7358:50;;;7404:1;7401;7394:12;7358:50;7443:70;7505:7;7496:6;7485:9;7481:22;7443:70;:::i;:::-;7532:8;;7417:96;;-1:-1:-1;7614:2:1;7599:18;;7586:32;;7665:2;7650:18;7637:32;;-1:-1:-1;7102:573:1;-1:-1:-1;;;;7102:573:1:o;7680:1226::-;7798:6;7806;7859:2;7847:9;7838:7;7834:23;7830:32;7827:52;;;7875:1;7872;7865:12;7827:52;7915:9;7902:23;-1:-1:-1;;;;;7985:2:1;7977:6;7974:14;7971:34;;;8001:1;7998;7991:12;7971:34;8039:6;8028:9;8024:22;8014:32;;8084:7;8077:4;8073:2;8069:13;8065:27;8055:55;;8106:1;8103;8096:12;8055:55;8142:2;8129:16;8164:4;8188:60;8204:43;8244:2;8204:43;:::i;8188:60::-;8270:3;8294:2;8289:3;8282:15;8322:2;8317:3;8313:12;8306:19;;8353:2;8349;8345:11;8401:7;8396:2;8390;8387:1;8383:10;8379:2;8375:19;8371:28;8368:41;8365:61;;;8422:1;8419;8412:12;8365:61;8444:1;8435:10;;8454:238;8468:2;8465:1;8462:9;8454:238;;;8539:3;8526:17;8556:31;8581:5;8556:31;:::i;:::-;8600:18;;8486:1;8479:9;;;;;8638:12;;;;8670;;8454:238;;;-1:-1:-1;8711:5:1;-1:-1:-1;;8754:18:1;;8741:32;;-1:-1:-1;;8785:16:1;;;8782:36;;;8814:1;8811;8804:12;8782:36;;8837:63;8892:7;8881:8;8870:9;8866:24;8837:63;:::i;:::-;8827:73;;;7680:1226;;;;;:::o;8911:959::-;9052:6;9060;9068;9076;9084;9092;9100;9153:3;9141:9;9132:7;9128:23;9124:33;9121:53;;;9170:1;9167;9160:12;9121:53;9210:9;9197:23;-1:-1:-1;;;;;9280:2:1;9272:6;9269:14;9266:34;;;9296:1;9293;9286:12;9266:34;9335:70;9397:7;9388:6;9377:9;9373:22;9335:70;:::i;:::-;9424:8;;-1:-1:-1;9309:96:1;-1:-1:-1;9506:2:1;9491:18;;9478:32;;-1:-1:-1;9557:2:1;9542:18;;9529:32;;-1:-1:-1;9608:2:1;9593:18;;9580:32;;-1:-1:-1;9665:3:1;9650:19;;9637:33;;-1:-1:-1;9682:16:1;;;9679:36;;;9711:1;9708;9701:12;9679:36;;9750:60;9802:7;9791:8;9780:9;9776:24;9750:60;:::i;:::-;8911:959;;;;-1:-1:-1;8911:959:1;;-1:-1:-1;8911:959:1;;;;9724:86;;-1:-1:-1;;;8911:959:1:o;9875:437::-;9961:6;9969;10022:2;10010:9;10001:7;9997:23;9993:32;9990:52;;;10038:1;10035;10028:12;9990:52;10078:9;10065:23;-1:-1:-1;;;;;10103:6:1;10100:30;10097:50;;;10143:1;10140;10133:12;10097:50;10182:70;10244:7;10235:6;10224:9;10220:22;10182:70;:::i;:::-;10271:8;;10156:96;;-1:-1:-1;9875:437:1;-1:-1:-1;;;;9875:437:1:o;10317:245::-;10375:6;10428:2;10416:9;10407:7;10403:23;10399:32;10396:52;;;10444:1;10441;10434:12;10396:52;10483:9;10470:23;10502:30;10526:5;10502:30;:::i;10567:249::-;10636:6;10689:2;10677:9;10668:7;10664:23;10660:32;10657:52;;;10705:1;10702;10695:12;10657:52;10737:9;10731:16;10756:30;10780:5;10756:30;:::i;10821:410::-;10892:6;10900;10953:2;10941:9;10932:7;10928:23;10924:32;10921:52;;;10969:1;10966;10959:12;10921:52;11009:9;10996:23;-1:-1:-1;;;;;11034:6:1;11031:30;11028:50;;;11074:1;11071;11064:12;11028:50;11113:58;11163:7;11154:6;11143:9;11139:22;11113:58;:::i;11236:180::-;11295:6;11348:2;11336:9;11327:7;11323:23;11319:32;11316:52;;;11364:1;11361;11354:12;11316:52;-1:-1:-1;11387:23:1;;11236:180;-1:-1:-1;11236:180:1:o;11421:315::-;11489:6;11497;11550:2;11538:9;11529:7;11525:23;11521:32;11518:52;;;11566:1;11563;11556:12;11518:52;11602:9;11589:23;11579:33;;11662:2;11651:9;11647:18;11634:32;11675:31;11700:5;11675:31;:::i;11741:478::-;11821:6;11829;11837;11890:2;11878:9;11869:7;11865:23;11861:32;11858:52;;;11906:1;11903;11896:12;11858:52;11942:9;11929:23;11919:33;;12003:2;11992:9;11988:18;11975:32;-1:-1:-1;;;;;12022:6:1;12019:30;12016:50;;;12062:1;12059;12052:12;12016:50;12101:58;12151:7;12142:6;12131:9;12127:22;12101:58;:::i;:::-;11741:478;;12178:8;;-1:-1:-1;12075:84:1;;-1:-1:-1;;;;11741:478:1:o;12224:248::-;12292:6;12300;12353:2;12341:9;12332:7;12328:23;12324:32;12321:52;;;12369:1;12366;12359:12;12321:52;-1:-1:-1;;12392:23:1;;;12462:2;12447:18;;;12434:32;;-1:-1:-1;12224:248:1:o;12477:257::-;12518:3;12556:5;12550:12;12583:6;12578:3;12571:19;12599:63;12655:6;12648:4;12643:3;12639:14;12632:4;12625:5;12621:16;12599:63;:::i;:::-;12716:2;12695:15;-1:-1:-1;;12691:29:1;12682:39;;;;12723:4;12678:50;;12477:257;-1:-1:-1;;12477:257:1:o;12739:973::-;12824:12;;12789:3;;12879:1;12899:18;;;;12952;;;;12979:61;;13033:4;13025:6;13021:17;13011:27;;12979:61;13059:2;13107;13099:6;13096:14;13076:18;13073:38;13070:161;;;13153:10;13148:3;13144:20;13141:1;13134:31;13188:4;13185:1;13178:15;13216:4;13213:1;13206:15;13070:161;13247:18;13274:104;;;;13392:1;13387:319;;;;13240:466;;13274:104;-1:-1:-1;;13307:24:1;;13295:37;;13352:16;;;;-1:-1:-1;13274:104:1;;13387:319;24912:1;24905:14;;;24949:4;24936:18;;13481:1;13495:165;13509:6;13506:1;13503:13;13495:165;;;13587:14;;13574:11;;;13567:35;13630:16;;;;13524:10;;13495:165;;;13499:3;;13689:6;13684:3;13680:16;13673:23;;13240:466;;;;;;;12739:973;;;;:::o;13717:456::-;13938:3;13966:38;14000:3;13992:6;13966:38;:::i;:::-;14033:6;14027:13;14049:52;14094:6;14090:2;14083:4;14075:6;14071:17;14049:52;:::i;:::-;14117:50;14159:6;14155:2;14151:15;14143:6;14117:50;:::i;:::-;14110:57;13717:456;-1:-1:-1;;;;;;;13717:456:1:o;14596:560::-;-1:-1:-1;;;;;14893:15:1;;;14875:34;;14945:15;;14940:2;14925:18;;14918:43;14992:2;14977:18;;14970:34;;;15035:2;15020:18;;15013:34;;;14855:3;15078;15063:19;;15056:32;;;14818:4;;15105:45;;15130:19;;15122:6;15105:45;:::i;15440:658::-;15611:2;15663:21;;;15733:13;;15636:18;;;15755:22;;;15582:4;;15611:2;15834:15;;;;15808:2;15793:18;;;15582:4;15877:195;15891:6;15888:1;15885:13;15877:195;;;15956:13;;-1:-1:-1;;;;;15952:39:1;15940:52;;16047:15;;;;16012:12;;;;15988:1;15906:9;15877:195;;;-1:-1:-1;16089:3:1;;15440:658;-1:-1:-1;;;;;;15440:658:1:o;16103:824::-;16334:2;16386:21;;;16456:13;;16359:18;;;16478:22;;;16305:4;;16334:2;16519;;16537:18;;;;16578:15;;;16305:4;16621:280;16635:6;16632:1;16629:13;16621:280;;;16694:13;;16736:9;;-1:-1:-1;;;;;16732:35:1;16720:48;;16808:11;;16802:18;16788:12;;;16781:40;16841:12;;;;16876:15;;;;16764:1;16650:9;16621:280;;;-1:-1:-1;16918:3:1;;16103:824;-1:-1:-1;;;;;;;16103:824:1:o;16932:632::-;17103:2;17155:21;;;17225:13;;17128:18;;;17247:22;;;17074:4;;17103:2;17326:15;;;;17300:2;17285:18;;;17074:4;17369:169;17383:6;17380:1;17377:13;17369:169;;;17444:13;;17432:26;;17513:15;;;;17478:12;;;;17405:1;17398:9;17369:169;;17761:219;17910:2;17899:9;17892:21;17873:4;17930:44;17970:2;17959:9;17955:18;17947:6;17930:44;:::i;18399:334::-;18601:2;18583:21;;;18640:2;18620:18;;;18613:30;-1:-1:-1;;;18674:2:1;18659:18;;18652:40;18724:2;18709:18;;18399:334::o;24371:275::-;24442:2;24436:9;24507:2;24488:13;;-1:-1:-1;;24484:27:1;24472:40;;-1:-1:-1;;;;;24527:34:1;;24563:22;;;24524:62;24521:88;;;24589:18;;:::i;:::-;24625:2;24618:22;24371:275;;-1:-1:-1;24371:275:1:o;24651:183::-;24711:4;-1:-1:-1;;;;;24736:6:1;24733:30;24730:56;;;24766:18;;:::i;:::-;-1:-1:-1;24811:1:1;24807:14;24823:4;24803:25;;24651:183::o;24965:128::-;25005:3;25036:1;25032:6;25029:1;25026:13;25023:39;;;25042:18;;:::i;:::-;-1:-1:-1;25078:9:1;;24965:128::o;25098:120::-;25138:1;25164;25154:35;;25169:18;;:::i;:::-;-1:-1:-1;25203:9:1;;25098:120::o;25223:168::-;25263:7;25329:1;25325;25321:6;25317:14;25314:1;25311:21;25306:1;25299:9;25292:17;25288:45;25285:71;;;25336:18;;:::i;:::-;-1:-1:-1;25376:9:1;;25223:168::o;25396:125::-;25436:4;25464:1;25461;25458:8;25455:34;;;25469:18;;:::i;:::-;-1:-1:-1;25506:9:1;;25396:125::o;25526:258::-;25598:1;25608:113;25622:6;25619:1;25616:13;25608:113;;;25698:11;;;25692:18;25679:11;;;25672:39;25644:2;25637:10;25608:113;;;25739:6;25736:1;25733:13;25730:48;;;-1:-1:-1;;25774:1:1;25756:16;;25749:27;25526:258::o;25789:136::-;25828:3;25856:5;25846:39;;25865:18;;:::i;:::-;-1:-1:-1;;;25901:18:1;;25789:136::o;25930:380::-;26009:1;26005:12;;;;26052;;;26073:61;;26127:4;26119:6;26115:17;26105:27;;26073:61;26180:2;26172:6;26169:14;26149:18;26146:38;26143:161;;;26226:10;26221:3;26217:20;26214:1;26207:31;26261:4;26258:1;26251:15;26289:4;26286:1;26279:15;26143:161;;25930:380;;;:::o;26315:135::-;26354:3;-1:-1:-1;;26375:17:1;;26372:43;;;26395:18;;:::i;:::-;-1:-1:-1;26442:1:1;26431:13;;26315:135::o;26455:112::-;26487:1;26513;26503:35;;26518:18;;:::i;:::-;-1:-1:-1;26552:9:1;;26455:112::o;26572:127::-;26633:10;26628:3;26624:20;26621:1;26614:31;26664:4;26661:1;26654:15;26688:4;26685:1;26678:15;26704:127;26765:10;26760:3;26756:20;26753:1;26746:31;26796:4;26793:1;26786:15;26820:4;26817:1;26810:15;26836:127;26897:10;26892:3;26888:20;26885:1;26878:31;26928:4;26925:1;26918:15;26952:4;26949:1;26942:15;26968:127;27029:10;27024:3;27020:20;27017:1;27010:31;27060:4;27057:1;27050:15;27084:4;27081:1;27074:15;27100:127;27161:10;27156:3;27152:20;27149:1;27142:31;27192:4;27189:1;27182:15;27216:4;27213:1;27206:15;27232:131;-1:-1:-1;;;;;27307:31:1;;27297:42;;27287:70;;27353:1;27350;27343:12;27368:131;-1:-1:-1;;;;;;27442:32:1;;27432:43;;27422:71;;27489:1;27486;27479:12

Swarm Source

ipfs://e83827315243ccf2613f58034872b6f59618acde0f3443079a044853a373f853

Block Transaction 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
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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