ETH Price: $3,310.81 (+1.19%)
Gas: 6 Gwei

Token

EtherPets (EPETS)
 

Overview

Max Total Supply

0 EPETS

Holders

131

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
15 EPETS
0x4354fe06da70fb716f41809b153623650c97078a
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

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

Contract Name:
Diamond

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2023-02-03
*/

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

/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
*
* Implementation of a diamond.
/******************************************************************************/




/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/


// Remember to add the loupe functions from DiamondLoupeFacet to the diamond.
// The loupe functions are required by the EIP2535 Diamonds standard

error InitializationFunctionReverted(address _initializationContractAddress, bytes _calldata);

library LibDiamond {
    bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage");

    struct FacetAddressAndPosition {
        address facetAddress;
        uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array
    }

    struct FacetFunctionSelectors {
        bytes4[] functionSelectors;
        uint256 facetAddressPosition; // position of facetAddress in facetAddresses array
    }

    struct DiamondStorage {
        // maps function selector to the facet address and
        // the position of the selector in the facetFunctionSelectors.selectors array
        mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition;
        // maps facet addresses to function selectors
        mapping(address => FacetFunctionSelectors) facetFunctionSelectors;
        // facet addresses
        address[] facetAddresses;
        // Used to query if a contract implements an interface.
        // Used to implement ERC-165.
        mapping(bytes4 => bool) supportedInterfaces;
        // owner of the contract
        address contractOwner;
    }

    function diamondStorage() internal pure returns (DiamondStorage storage ds) {
        bytes32 position = DIAMOND_STORAGE_POSITION;
        assembly {
            ds.slot := position
        }
    }

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    function setContractOwner(address _newOwner) internal {
        DiamondStorage storage ds = diamondStorage();
        address previousOwner = ds.contractOwner;
        ds.contractOwner = _newOwner;
        emit OwnershipTransferred(previousOwner, _newOwner);
    }

    function contractOwner() internal view returns (address contractOwner_) {
        contractOwner_ = diamondStorage().contractOwner;
    }

    function enforceIsContractOwner() internal view {
        require(msg.sender == diamondStorage().contractOwner, "LibDiamond: Must be contract owner");
    }

    event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata);

    // Internal function version of diamondCut
    function diamondCut(
        IDiamondCut.FacetCut[] memory _diamondCut,
        address _init,
        bytes memory _calldata
    ) internal {
        for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) {
            IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;
            if (action == IDiamondCut.FacetCutAction.Add) {
                addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else if (action == IDiamondCut.FacetCutAction.Replace) {
                replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else if (action == IDiamondCut.FacetCutAction.Remove) {
                removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors);
            } else {
                revert("LibDiamondCut: Incorrect FacetCutAction");
            }
        }
        emit DiamondCut(_diamondCut, _init, _calldata);
        initializeDiamondCut(_init, _calldata);
    }

    function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();        
        require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)");
        uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);
        // add new facet address if it does not exist
        if (selectorPosition == 0) {
            addFacet(ds, _facetAddress);            
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            require(oldFacetAddress == address(0), "LibDiamondCut: Can't add function that already exists");
            addFunction(ds, selector, selectorPosition, _facetAddress);
            selectorPosition++;
        }
    }

    function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();
        require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)");
        uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length);
        // add new facet address if it does not exist
        if (selectorPosition == 0) {
            addFacet(ds, _facetAddress);
        }
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            require(oldFacetAddress != _facetAddress, "LibDiamondCut: Can't replace function with same function");
            removeFunction(ds, oldFacetAddress, selector);
            addFunction(ds, selector, selectorPosition, _facetAddress);
            selectorPosition++;
        }
    }

    function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {
        require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut");
        DiamondStorage storage ds = diamondStorage();
        // if function does not exist then do nothing and return
        require(_facetAddress == address(0), "LibDiamondCut: Remove facet address must be address(0)");
        for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
            bytes4 selector = _functionSelectors[selectorIndex];
            address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress;
            removeFunction(ds, oldFacetAddress, selector);
        }
    }

    function addFacet(DiamondStorage storage ds, address _facetAddress) internal {
        enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code");
        ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length;
        ds.facetAddresses.push(_facetAddress);
    }    


    function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal {
        ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition;
        ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector);
        ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress;
    }

    function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal {        
        require(_facetAddress != address(0), "LibDiamondCut: Can't remove function that doesn't exist");
        // an immutable function is a function defined directly in a diamond
        require(_facetAddress != address(this), "LibDiamondCut: Can't remove immutable function");
        // replace selector with last selector, then delete last selector
        uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition;
        uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1;
        // if not the same then replace _selector with lastSelector
        if (selectorPosition != lastSelectorPosition) {
            bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition];
            ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector;
            ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition);
        }
        // delete the last selector
        ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop();
        delete ds.selectorToFacetAndPosition[_selector];

        // if no more selectors for facet address then delete the facet address
        if (lastSelectorPosition == 0) {
            // replace facet address with last facet address and delete last facet address
            uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1;
            uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;
            if (facetAddressPosition != lastFacetAddressPosition) {
                address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition];
                ds.facetAddresses[facetAddressPosition] = lastFacetAddress;
                ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition;
            }
            ds.facetAddresses.pop();
            delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition;
        }
    }

    function initializeDiamondCut(address _init, bytes memory _calldata) internal {
        if (_init == address(0)) {
            return;
        }
        enforceHasContractCode(_init, "LibDiamondCut: _init address has no code");        
        (bool success, bytes memory error) = _init.delegatecall(_calldata);
        if (!success) {
            if (error.length > 0) {
                // bubble up error
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(error)
                    revert(add(32, error), returndata_size)
                }
            } else {
                revert InitializationFunctionReverted(_init, _calldata);
            }
        }
    }

    function enforceHasContractCode(address _contract, string memory _errorMessage) internal view {
        uint256 contractSize;
        assembly {
            contractSize := extcodesize(_contract)
        }
        require(contractSize > 0, _errorMessage);
    }
}




/******************************************************************************\
* Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen)
* EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535
/******************************************************************************/

interface IDiamondCut {
    enum FacetCutAction {Add, Replace, Remove}
    // Add=0, Replace=1, Remove=2

    struct FacetCut {
        address facetAddress;
        FacetCutAction action;
        bytes4[] functionSelectors;
    }

    /// @notice Add/replace/remove any number of functions and optionally execute
    ///         a function with delegatecall
    /// @param _diamondCut Contains the facet addresses and function selectors
    /// @param _init The address of the contract or facet to execute _calldata
    /// @param _calldata A function call, including function selector and arguments
    ///                  _calldata is executed with delegatecall on _init
    function diamondCut(
        FacetCut[] calldata _diamondCut,
        address _init,
        bytes calldata _calldata
    ) external;

    event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata);
}


contract Diamond {    

    constructor(address _contractOwner, address _diamondCutFacet) payable {        
        LibDiamond.setContractOwner(_contractOwner);

        // Add the diamondCut external function from the diamondCutFacet
        IDiamondCut.FacetCut[] memory cut = new IDiamondCut.FacetCut[](1);
        bytes4[] memory functionSelectors = new bytes4[](1);
        functionSelectors[0] = IDiamondCut.diamondCut.selector;
        cut[0] = IDiamondCut.FacetCut({
            facetAddress: _diamondCutFacet, 
            action: IDiamondCut.FacetCutAction.Add, 
            functionSelectors: functionSelectors
        });
        LibDiamond.diamondCut(cut, address(0), "");        
    }

    // Find facet for function that is called and execute the
    // function if a facet is found and return any value.
    fallback() external payable {
        LibDiamond.DiamondStorage storage ds;
        bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;
        // get diamond storage
        assembly {
            ds.slot := position
        }
        // get facet from function selector
        address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress;
        require(facet != address(0), "Diamond: Function does not exist");
        // Execute external function from facet using delegatecall and return any value.
        assembly {
            // copy function selector and any arguments
            calldatacopy(0, 0, calldatasize())
            // execute function call using the facet
            let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)
            // get any return value
            returndatacopy(0, 0, returndatasize())
            // return any return value or error back to the caller
            switch result
                case 0 {
                    revert(0, returndatasize())
                }
                default {
                    return(0, returndatasize())
                }
        }
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_contractOwner","type":"address"},{"internalType":"address","name":"_diamondCutFacet","type":"address"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"address","name":"_initializationContractAddress","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"InitializationFunctionReverted","type":"error"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]

6080604052604051620044b2380380620044b28339818101604052810190620000299190620017e7565b6200003f82620001f760201b620001681760201c565b6000600167ffffffffffffffff8111156200005f576200005e6200182e565b5b6040519080825280602002602001820160405280156200009c57816020015b6200008862001731565b8152602001906001900390816200007e5790505b5090506000600167ffffffffffffffff811115620000bf57620000be6200182e565b5b604051908082528060200260200182016040528015620000ee5781602001602082028036833780820191505090505b509050631f931c1c60e01b8160008151811062000110576200010f6200185d565b5b60200260200101907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152505060405180606001604052808473ffffffffffffffffffffffffffffffffffffffff168152602001600060028111156200019a57620001996200188c565b5b81526020018281525082600081518110620001ba57620001b96200185d565b5b6020026020010181905250620001ed82600060405180602001604052806000815250620002d660201b6200023f1760201c565b5050505062002350565b6000620002096200055d60201b60201c565b905060008160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60005b835181101562000508576000848281518110620002fb57620002fa6200185d565b5b60200260200101516020015190506000600281111562000320576200031f6200188c565b5b8160028111156200033657620003356200188c565b5b14156200039757620003918583815181106200035757620003566200185d565b5b6020026020010151600001518684815181106200037957620003786200185d565b5b6020026020010151604001516200058a60201b60201c565b620004f1565b60016002811115620003ae57620003ad6200188c565b5b816002811115620003c457620003c36200188c565b5b141562000425576200041f858381518110620003e557620003e46200185d565b5b6020026020010151600001518684815181106200040757620004066200185d565b5b6020026020010151604001516200082e60201b60201c565b620004f0565b6002808111156200043b576200043a6200188c565b5b8160028111156200045157620004506200188c565b5b1415620004b257620004ac8583815181106200047257620004716200185d565b5b6020026020010151600001518684815181106200049457620004936200185d565b5b60200260200101516040015162000ae560201b60201c565b620004ef565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004e69062001942565b60405180910390fd5b5b5b508080620004ff906200199d565b915050620002d9565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb6738383836040516200053e9392919062001d22565b60405180910390a162000558828262000c8d60201b60201c565b505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b6000815111620005d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005c89062001de3565b60405180910390fd5b6000620005e36200055d60201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000658576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200064f9062001e7b565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff161415620006cf57620006ce828562000dc760201b60201c565b5b60005b835181101562000827576000848281518110620006f457620006f36200185d565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614620007eb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007e29062001f13565b60405180910390fd5b620007ff8583868a62000eab60201b60201c565b83806200080c9062001f4d565b945050505080806200081e906200199d565b915050620006d2565b5050505050565b600081511162000875576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200086c9062001de3565b60405180910390fd5b6000620008876200055d60201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620008fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008f39062001e7b565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff161415620009735762000972828562000dc760201b60201c565b5b60005b835181101562000ade5760008482815181106200099857620009976200185d565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000a8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a869062001ffd565b60405180910390fd5b62000aa28582846200105860201b60201c565b62000ab68583868a62000eab60201b60201c565b838062000ac39062001f4d565b9450505050808062000ad5906200199d565b91505062000976565b5050505050565b600081511162000b2c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b239062001de3565b60405180910390fd5b600062000b3e6200055d60201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000bb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ba99062002095565b60405180910390fd5b60005b825181101562000c8757600083828151811062000bd75762000bd66200185d565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905062000c6f8482846200105860201b60201c565b5050808062000c7e906200199d565b91505062000bb5565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000cc95762000dc3565b62000cf4826040518060600160405280602881526020016200446660289139620016dc60201b60201c565b6000808373ffffffffffffffffffffffffffffffffffffffff168360405162000d1e9190620020f9565b600060405180830381855af49150503d806000811462000d5b576040519150601f19603f3d011682016040523d82523d6000602084013e62000d60565b606091505b50915091508162000dc05760008151111562000d7f5780518082602001fd5b83836040517f192105d700000000000000000000000000000000000000000000000000000000815260040162000db792919062002112565b60405180910390fd5b50505b5050565b62000df2816040518060600160405280602481526020016200448e60249139620016dc60201b60201c565b81600201805490508260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555081600201819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b81846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508360010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018390806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c021790555080846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620010cb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010c290620021bc565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200113d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620011349062002254565b60405180910390fd5b6000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff169050600060018560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905062001216919062002276565b9050808214620013b15760008560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000182815481106200127b576200127a6200185d565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b9050808660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018481548110620012fa57620012f96200185d565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555082866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550505b8460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805480620014085762001407620022b1565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff021916905550506000811415620016d557600060018660020180549050620014f6919062002276565b905060008660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508181146200163e5760008760020183815481106200156457620015636200185d565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905080886002018381548110620015ab57620015aa6200185d565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818860010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505b86600201805480620016555762001654620022b1565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590558660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000905550505b5050505050565b6000823b90506000811182906200172b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200172291906200232c565b60405180910390fd5b50505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000600281111562001770576200176f6200188c565b5b8152602001606081525090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620017af8262001782565b9050919050565b620017c181620017a2565b8114620017cd57600080fd5b50565b600081519050620017e181620017b6565b92915050565b600080604083850312156200180157620018006200177d565b5b60006200181185828601620017d0565b92505060206200182485828601620017d0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600082825260208201905092915050565b7f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560008201527f74416374696f6e00000000000000000000000000000000000000000000000000602082015250565b60006200192a602783620018bb565b91506200193782620018cc565b604082019050919050565b600060208201905081810360008301526200195d816200191b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b6000620019aa8262001993565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620019e057620019df62001964565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b62001a2281620017a2565b82525050565b6003811062001a3c5762001a3b6200188c565b5b50565b600081905062001a4f8262001a28565b919050565b600062001a618262001a3f565b9050919050565b62001a738162001a54565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62001adc8162001aa5565b82525050565b600062001af0838362001ad1565b60208301905092915050565b6000602082019050919050565b600062001b168262001a79565b62001b22818562001a84565b935062001b2f8362001a95565b8060005b8381101562001b6657815162001b4a888262001ae2565b975062001b578362001afc565b92505060018101905062001b33565b5085935050505092915050565b600060608301600083015162001b8d600086018262001a17565b50602083015162001ba2602086018262001a68565b506040830151848203604086015262001bbc828262001b09565b9150508091505092915050565b600062001bd7838362001b73565b905092915050565b6000602082019050919050565b600062001bf982620019eb565b62001c058185620019f6565b93508360208202850162001c198562001a07565b8060005b8581101562001c5b578484038952815162001c39858262001bc9565b945062001c468362001bdf565b925060208a0199505060018101905062001c1d565b50829750879550505050505092915050565b62001c7881620017a2565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b8381101562001cba57808201518184015260208101905062001c9d565b8381111562001cca576000848401525b50505050565b6000601f19601f8301169050919050565b600062001cee8262001c7e565b62001cfa818562001c89565b935062001d0c81856020860162001c9a565b62001d178162001cd0565b840191505092915050565b6000606082019050818103600083015262001d3e818662001bec565b905062001d4f602083018562001c6d565b818103604083015262001d63818462001ce1565b9050949350505050565b7f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660008201527f6163657420746f20637574000000000000000000000000000000000000000000602082015250565b600062001dcb602b83620018bb565b915062001dd88262001d6d565b604082019050919050565b6000602082019050818103600083015262001dfe8162001dbc565b9050919050565b7f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260008201527f6520616464726573732830290000000000000000000000000000000000000000602082015250565b600062001e63602c83620018bb565b915062001e708262001e05565b604082019050919050565b6000602082019050818103600083015262001e968162001e54565b9050919050565b7f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60008201527f6e207468617420616c7265616479206578697374730000000000000000000000602082015250565b600062001efb603583620018bb565b915062001f088262001e9d565b604082019050919050565b6000602082019050818103600083015262001f2e8162001eec565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b600062001f5a8262001f35565b91506bffffffffffffffffffffffff82141562001f7c5762001f7b62001964565b5b600182019050919050565b7f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60008201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000602082015250565b600062001fe5603883620018bb565b915062001ff28262001f87565b604082019050919050565b60006020820190508181036000830152620020188162001fd6565b9050919050565b7f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260008201527f657373206d757374206265206164647265737328302900000000000000000000602082015250565b60006200207d603683620018bb565b91506200208a826200201f565b604082019050919050565b60006020820190508181036000830152620020b0816200206e565b9050919050565b600081905092915050565b6000620020cf8262001c7e565b620020db8185620020b7565b9350620020ed81856020860162001c9a565b80840191505092915050565b6000620021078284620020c2565b915081905092915050565b600060408201905062002129600083018562001c6d565b81810360208301526200213d818462001ce1565b90509392505050565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360008201527f74696f6e207468617420646f65736e2774206578697374000000000000000000602082015250565b6000620021a4603783620018bb565b9150620021b18262002146565b604082019050919050565b60006020820190508181036000830152620021d78162002195565b9050919050565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560008201527f7461626c652066756e6374696f6e000000000000000000000000000000000000602082015250565b60006200223c602e83620018bb565b91506200224982620021de565b604082019050919050565b600060208201905081810360008301526200226f816200222d565b9050919050565b6000620022838262001993565b9150620022908362001993565b925082821015620022a657620022a562001964565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081519050919050565b6000620022f882620022e0565b620023048185620018bb565b93506200231681856020860162001c9a565b620023218162001cd0565b840191505092915050565b60006020820190508181036000830152620023488184620022eb565b905092915050565b61210680620023606000396000f3fe60806040523661000b57005b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9050809150600082600001600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610142576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610139906115e9565b60405180910390fd5b3660008037600080366000845af43d6000803e8060008114610163573d6000f35b3d6000fd5b6000610172610471565b905060008160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60005b83518110156104265760008482815181106102605761025f611609565b5b60200260200101516020015190506000600281111561028257610281611638565b5b81600281111561029557610294611638565b5b14156102e6576102e18583815181106102b1576102b0611609565b5b6020026020010151600001518684815181106102d0576102cf611609565b5b60200260200101516040015161049e565b610412565b600160028111156102fa576102f9611638565b5b81600281111561030d5761030c611638565b5b141561035e5761035985838151811061032957610328611609565b5b60200260200101516000015186848151811061034857610347611609565b5b602002602001015160400151610717565b610411565b60028081111561037157610370611638565b5b81600281111561038457610383611638565b5b14156103d5576103d08583815181106103a05761039f611609565b5b6020026020010151600001518684815181106103bf576103be611609565b5b60200260200101516040015161099b565b610410565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610407906116d9565b60405180910390fd5b5b5b50808061041e90611732565b915050610242565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161045a93929190611aa8565b60405180910390a161046c8282610b26565b505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b60008151116104e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d990611b5f565b60405180910390fd5b60006104ec610471565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561055e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055590611bf1565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff1614156105cc576105cb8285610c4d565b5b60005b83518110156107105760008482815181106105ed576105ec611609565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d890611c83565b60405180910390fd5b6106ed8583868a610d28565b83806106f890611cbb565b9450505050808061070890611732565b9150506105cf565b5050505050565b600081511161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290611b5f565b60405180910390fd5b6000610765610471565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ce90611bf1565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff161415610845576108448285610c4d565b5b60005b835181101561099457600084828151811061086657610865611609565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561095a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095190611d62565b60405180910390fd5b610965858284610ed5565b6109718583868a610d28565b838061097c90611cbb565b9450505050808061098c90611732565b915050610848565b5050505050565b60008151116109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690611b5f565b60405180910390fd5b60006109e9610471565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5190611df4565b60405180910390fd5b60005b8251811015610b20576000838281518110610a7b57610a7a611609565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610b0b848284610ed5565b50508080610b1890611732565b915050610a5d565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b6057610c49565b610b82826040518060600160405280602881526020016120856028913961153a565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610baa9190611e50565b600060405180830381855af49150503d8060008114610be5576040519150601f19603f3d011682016040523d82523d6000602084013e610bea565b606091505b509150915081610c4657600081511115610c075780518082602001fd5b83836040517f192105d7000000000000000000000000000000000000000000000000000000008152600401610c3d929190611e67565b60405180910390fd5b50505b5050565b610c6f816040518060600160405280602481526020016120ad6024913961153a565b81600201805490508260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555081600201819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b81846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508360010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018390806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c021790555080846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c90611f09565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90611f9b565b60405180910390fd5b6000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff169050600060018560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905061108b9190611fbb565b905080821461121f5760008560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000182815481106110ec576110eb611609565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b9050808660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001848154811061116857611167611609565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555082866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550505b8460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180548061127357611272611fef565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff0219169055505060008114156115335760006001866002018054905061135e9190611fbb565b905060008660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905081811461149f5760008760020183815481106113c8576113c7611609565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508088600201838154811061140c5761140b611609565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818860010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505b866002018054806114b3576114b2611fef565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590558660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000905550505b5050505050565b6000823b9050600081118290611586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157d9190612062565b60405180910390fd5b50505050565b600082825260208201905092915050565b7f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374600082015250565b60006115d360208361158c565b91506115de8261159d565b602082019050919050565b60006020820190508181036000830152611602816115c6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560008201527f74416374696f6e00000000000000000000000000000000000000000000000000602082015250565b60006116c360278361158c565b91506116ce82611667565b604082019050919050565b600060208201905081810360008301526116f2816116b6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b600061173d82611728565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156117705761176f6116f9565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117d2826117a7565b9050919050565b6117e2816117c7565b82525050565b600381106117f9576117f8611638565b5b50565b600081905061180a826117e8565b919050565b600061181a826117fc565b9050919050565b61182a8161180f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6118918161185c565b82525050565b60006118a38383611888565b60208301905092915050565b6000602082019050919050565b60006118c782611830565b6118d1818561183b565b93506118dc8361184c565b8060005b8381101561190d5781516118f48882611897565b97506118ff836118af565b9250506001810190506118e0565b5085935050505092915050565b600060608301600083015161193260008601826117d9565b5060208301516119456020860182611821565b506040830151848203604086015261195d82826118bc565b9150508091505092915050565b6000611976838361191a565b905092915050565b6000602082019050919050565b60006119968261177b565b6119a08185611786565b9350836020820285016119b285611797565b8060005b858110156119ee57848403895281516119cf858261196a565b94506119da8361197e565b925060208a019950506001810190506119b6565b50829750879550505050505092915050565b611a09816117c7565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611a49578082015181840152602081019050611a2e565b83811115611a58576000848401525b50505050565b6000601f19601f8301169050919050565b6000611a7a82611a0f565b611a848185611a1a565b9350611a94818560208601611a2b565b611a9d81611a5e565b840191505092915050565b60006060820190508181036000830152611ac2818661198b565b9050611ad16020830185611a00565b8181036040830152611ae38184611a6f565b9050949350505050565b7f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660008201527f6163657420746f20637574000000000000000000000000000000000000000000602082015250565b6000611b49602b8361158c565b9150611b5482611aed565b604082019050919050565b60006020820190508181036000830152611b7881611b3c565b9050919050565b7f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260008201527f6520616464726573732830290000000000000000000000000000000000000000602082015250565b6000611bdb602c8361158c565b9150611be682611b7f565b604082019050919050565b60006020820190508181036000830152611c0a81611bce565b9050919050565b7f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60008201527f6e207468617420616c7265616479206578697374730000000000000000000000602082015250565b6000611c6d60358361158c565b9150611c7882611c11565b604082019050919050565b60006020820190508181036000830152611c9c81611c60565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b6000611cc682611ca3565b91506bffffffffffffffffffffffff821415611ce557611ce46116f9565b5b600182019050919050565b7f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60008201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000602082015250565b6000611d4c60388361158c565b9150611d5782611cf0565b604082019050919050565b60006020820190508181036000830152611d7b81611d3f565b9050919050565b7f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260008201527f657373206d757374206265206164647265737328302900000000000000000000602082015250565b6000611dde60368361158c565b9150611de982611d82565b604082019050919050565b60006020820190508181036000830152611e0d81611dd1565b9050919050565b600081905092915050565b6000611e2a82611a0f565b611e348185611e14565b9350611e44818560208601611a2b565b80840191505092915050565b6000611e5c8284611e1f565b915081905092915050565b6000604082019050611e7c6000830185611a00565b8181036020830152611e8e8184611a6f565b90509392505050565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360008201527f74696f6e207468617420646f65736e2774206578697374000000000000000000602082015250565b6000611ef360378361158c565b9150611efe82611e97565b604082019050919050565b60006020820190508181036000830152611f2281611ee6565b9050919050565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560008201527f7461626c652066756e6374696f6e000000000000000000000000000000000000602082015250565b6000611f85602e8361158c565b9150611f9082611f29565b604082019050919050565b60006020820190508181036000830152611fb481611f78565b9050919050565b6000611fc682611728565b9150611fd183611728565b925082821015611fe457611fe36116f9565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081519050919050565b60006120348261201e565b61203e818561158c565b935061204e818560208601611a2b565b61205781611a5e565b840191505092915050565b6000602082019050818103600083015261207c8184612029565b90509291505056fe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a26469706673582212201399858797a8dcea09ea09edc38c2886f1f5e25d25c8d322218989dbe56919b764736f6c634300080900334c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465000000000000000000000000727bc1921eb2b53424d73b3514178144b6624cff00000000000000000000000045a3f44737b35174a08584a4971e411152c33327

Deployed Bytecode

0x60806040523661000b57005b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9050809150600082600001600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610142576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610139906115e9565b60405180910390fd5b3660008037600080366000845af43d6000803e8060008114610163573d6000f35b3d6000fd5b6000610172610471565b905060008160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60005b83518110156104265760008482815181106102605761025f611609565b5b60200260200101516020015190506000600281111561028257610281611638565b5b81600281111561029557610294611638565b5b14156102e6576102e18583815181106102b1576102b0611609565b5b6020026020010151600001518684815181106102d0576102cf611609565b5b60200260200101516040015161049e565b610412565b600160028111156102fa576102f9611638565b5b81600281111561030d5761030c611638565b5b141561035e5761035985838151811061032957610328611609565b5b60200260200101516000015186848151811061034857610347611609565b5b602002602001015160400151610717565b610411565b60028081111561037157610370611638565b5b81600281111561038457610383611638565b5b14156103d5576103d08583815181106103a05761039f611609565b5b6020026020010151600001518684815181106103bf576103be611609565b5b60200260200101516040015161099b565b610410565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610407906116d9565b60405180910390fd5b5b5b50808061041e90611732565b915050610242565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161045a93929190611aa8565b60405180910390a161046c8282610b26565b505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b60008151116104e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d990611b5f565b60405180910390fd5b60006104ec610471565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561055e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055590611bf1565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff1614156105cc576105cb8285610c4d565b5b60005b83518110156107105760008482815181106105ed576105ec611609565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d890611c83565b60405180910390fd5b6106ed8583868a610d28565b83806106f890611cbb565b9450505050808061070890611732565b9150506105cf565b5050505050565b600081511161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290611b5f565b60405180910390fd5b6000610765610471565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ce90611bf1565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff161415610845576108448285610c4d565b5b60005b835181101561099457600084828151811061086657610865611609565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561095a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095190611d62565b60405180910390fd5b610965858284610ed5565b6109718583868a610d28565b838061097c90611cbb565b9450505050808061098c90611732565b915050610848565b5050505050565b60008151116109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690611b5f565b60405180910390fd5b60006109e9610471565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5190611df4565b60405180910390fd5b60005b8251811015610b20576000838281518110610a7b57610a7a611609565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610b0b848284610ed5565b50508080610b1890611732565b915050610a5d565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b6057610c49565b610b82826040518060600160405280602881526020016120856028913961153a565b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610baa9190611e50565b600060405180830381855af49150503d8060008114610be5576040519150601f19603f3d011682016040523d82523d6000602084013e610bea565b606091505b509150915081610c4657600081511115610c075780518082602001fd5b83836040517f192105d7000000000000000000000000000000000000000000000000000000008152600401610c3d929190611e67565b60405180910390fd5b50505b5050565b610c6f816040518060600160405280602481526020016120ad6024913961153a565b81600201805490508260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555081600201819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b81846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508360010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018390806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c021790555080846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3c90611f09565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90611f9b565b60405180910390fd5b6000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff169050600060018560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905061108b9190611fbb565b905080821461121f5760008560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000182815481106110ec576110eb611609565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b9050808660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001848154811061116857611167611609565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555082866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550505b8460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180548061127357611272611fef565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff0219169055505060008114156115335760006001866002018054905061135e9190611fbb565b905060008660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905081811461149f5760008760020183815481106113c8576113c7611609565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508088600201838154811061140c5761140b611609565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818860010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505b866002018054806114b3576114b2611fef565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590558660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000905550505b5050505050565b6000823b9050600081118290611586576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157d9190612062565b60405180910390fd5b50505050565b600082825260208201905092915050565b7f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374600082015250565b60006115d360208361158c565b91506115de8261159d565b602082019050919050565b60006020820190508181036000830152611602816115c6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560008201527f74416374696f6e00000000000000000000000000000000000000000000000000602082015250565b60006116c360278361158c565b91506116ce82611667565b604082019050919050565b600060208201905081810360008301526116f2816116b6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b600061173d82611728565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156117705761176f6116f9565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006117d2826117a7565b9050919050565b6117e2816117c7565b82525050565b600381106117f9576117f8611638565b5b50565b600081905061180a826117e8565b919050565b600061181a826117fc565b9050919050565b61182a8161180f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6118918161185c565b82525050565b60006118a38383611888565b60208301905092915050565b6000602082019050919050565b60006118c782611830565b6118d1818561183b565b93506118dc8361184c565b8060005b8381101561190d5781516118f48882611897565b97506118ff836118af565b9250506001810190506118e0565b5085935050505092915050565b600060608301600083015161193260008601826117d9565b5060208301516119456020860182611821565b506040830151848203604086015261195d82826118bc565b9150508091505092915050565b6000611976838361191a565b905092915050565b6000602082019050919050565b60006119968261177b565b6119a08185611786565b9350836020820285016119b285611797565b8060005b858110156119ee57848403895281516119cf858261196a565b94506119da8361197e565b925060208a019950506001810190506119b6565b50829750879550505050505092915050565b611a09816117c7565b82525050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611a49578082015181840152602081019050611a2e565b83811115611a58576000848401525b50505050565b6000601f19601f8301169050919050565b6000611a7a82611a0f565b611a848185611a1a565b9350611a94818560208601611a2b565b611a9d81611a5e565b840191505092915050565b60006060820190508181036000830152611ac2818661198b565b9050611ad16020830185611a00565b8181036040830152611ae38184611a6f565b9050949350505050565b7f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660008201527f6163657420746f20637574000000000000000000000000000000000000000000602082015250565b6000611b49602b8361158c565b9150611b5482611aed565b604082019050919050565b60006020820190508181036000830152611b7881611b3c565b9050919050565b7f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260008201527f6520616464726573732830290000000000000000000000000000000000000000602082015250565b6000611bdb602c8361158c565b9150611be682611b7f565b604082019050919050565b60006020820190508181036000830152611c0a81611bce565b9050919050565b7f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60008201527f6e207468617420616c7265616479206578697374730000000000000000000000602082015250565b6000611c6d60358361158c565b9150611c7882611c11565b604082019050919050565b60006020820190508181036000830152611c9c81611c60565b9050919050565b60006bffffffffffffffffffffffff82169050919050565b6000611cc682611ca3565b91506bffffffffffffffffffffffff821415611ce557611ce46116f9565b5b600182019050919050565b7f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60008201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000602082015250565b6000611d4c60388361158c565b9150611d5782611cf0565b604082019050919050565b60006020820190508181036000830152611d7b81611d3f565b9050919050565b7f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260008201527f657373206d757374206265206164647265737328302900000000000000000000602082015250565b6000611dde60368361158c565b9150611de982611d82565b604082019050919050565b60006020820190508181036000830152611e0d81611dd1565b9050919050565b600081905092915050565b6000611e2a82611a0f565b611e348185611e14565b9350611e44818560208601611a2b565b80840191505092915050565b6000611e5c8284611e1f565b915081905092915050565b6000604082019050611e7c6000830185611a00565b8181036020830152611e8e8184611a6f565b90509392505050565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360008201527f74696f6e207468617420646f65736e2774206578697374000000000000000000602082015250565b6000611ef360378361158c565b9150611efe82611e97565b604082019050919050565b60006020820190508181036000830152611f2281611ee6565b9050919050565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560008201527f7461626c652066756e6374696f6e000000000000000000000000000000000000602082015250565b6000611f85602e8361158c565b9150611f9082611f29565b604082019050919050565b60006020820190508181036000830152611fb481611f78565b9050919050565b6000611fc682611728565b9150611fd183611728565b925082821015611fe457611fe36116f9565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081519050919050565b60006120348261201e565b61203e818561158c565b935061204e818560208601611a2b565b61205781611a5e565b840191505092915050565b6000602082019050818103600083015261207c8184612029565b90509291505056fe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a26469706673582212201399858797a8dcea09ea09edc38c2886f1f5e25d25c8d322218989dbe56919b764736f6c63430008090033

Deployed Bytecode Sourcemap

12540:2058:0:-:0;;;;;;;;13423:36;13470:16;1042:45;13470:54;;13602:8;13591:19;;13676:13;13692:2;:29;;:38;13722:7;;;;13692:38;;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;13676:67;;13779:1;13762:19;;:5;:19;;;;13754:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;14019:14;14016:1;14013;14000:34;14165:1;14162;14146:14;14143:1;14136:5;14129;14116:51;14239:16;14236:1;14233;14218:38;14345:6;14374:1;14369:76;;;;14504:16;14501:1;14494:27;14369:76;14409:16;14406:1;14399:27;2437:269;2502:25;2530:16;:14;:16::i;:::-;2502:44;;2557:21;2581:2;:16;;;;;;;;;;;;2557:40;;2627:9;2608:2;:16;;;:28;;;;;;;;;;;;;;;;;;2688:9;2652:46;;2673:13;2652:46;;;;;;;;;;;;2491:215;;2437:269;:::o;3167:1086::-;3328:18;3323:817;3361:11;:18;3348:10;:31;3323:817;;;3410:33;3446:11;3458:10;3446:23;;;;;;;;:::i;:::-;;;;;;;;:30;;;3410:66;;3505:30;3495:40;;;;;;;;:::i;:::-;;:6;:40;;;;;;;;:::i;:::-;;;3491:638;;;3556:93;3569:11;3581:10;3569:23;;;;;;;;:::i;:::-;;;;;;;;:36;;;3607:11;3619:10;3607:23;;;;;;;;:::i;:::-;;;;;;;;:41;;;3556:12;:93::i;:::-;3491:638;;;3685:34;3675:44;;;;;;;;:::i;:::-;;:6;:44;;;;;;;;:::i;:::-;;;3671:458;;;3740:97;3757:11;3769:10;3757:23;;;;;;;;:::i;:::-;;;;;;;;:36;;;3795:11;3807:10;3795:23;;;;;;;;:::i;:::-;;;;;;;;:41;;;3740:16;:97::i;:::-;3671:458;;;3873:33;3863:43;;;;;;;;:::i;:::-;;:6;:43;;;;;;;;:::i;:::-;;;3859:270;;;3927:96;3943:11;3955:10;3943:23;;;;;;;;:::i;:::-;;;;;;;;:36;;;3981:11;3993:10;3981:23;;;;;;;;:::i;:::-;;;;;;;;:41;;;3927:15;:96::i;:::-;3859:270;;;4064:49;;;;;;;;;;:::i;:::-;;;;;;;;3859:270;3671:458;3491:638;3395:745;3381:12;;;;;:::i;:::-;;;;3323:817;;;;4155:41;4166:11;4179:5;4186:9;4155:41;;;;;;;;:::i;:::-;;;;;;;;4207:38;4228:5;4235:9;4207:20;:38::i;:::-;3167:1086;;;:::o;2135:202::-;2184:25;2222:16;1042:45;2222:43;;2311:8;2300:19;;2285:45;2135:202;:::o;4261:1105::-;4398:1;4370:18;:25;:29;4362:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4458:25;4486:16;:14;:16::i;:::-;4458:44;;4554:1;4529:27;;:13;:27;;;;4521:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;4616:23;4649:2;:25;;:40;4675:13;4649:40;;;;;;;;;;;;;;;:58;;:65;;;;4616:99;;4805:1;4785:16;:21;;;4781:93;;;4823:27;4832:2;4836:13;4823:8;:27::i;:::-;4781:93;4889:21;4884:475;4928:18;:25;4912:13;:41;4884:475;;;4987:15;5005:18;5024:13;5005:33;;;;;;;;:::i;:::-;;;;;;;;4987:51;;5053:23;5079:2;:29;;:39;5109:8;5079:39;;;;;;;;;;;;;;;;;:52;;;;;;;;;;;;5053:78;;5181:1;5154:29;;:15;:29;;;5146:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;5256:58;5268:2;5272:8;5282:16;5300:13;5256:11;:58::i;:::-;5329:18;;;;;:::i;:::-;;;;4972:387;;4955:15;;;;;:::i;:::-;;;;4884:475;;;;4351:1015;;4261:1105;;:::o;5374:1155::-;5515:1;5487:18;:25;:29;5479:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;5575:25;5603:16;:14;:16::i;:::-;5575:44;;5663:1;5638:27;;:13;:27;;;;5630:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;5725:23;5758:2;:25;;:40;5784:13;5758:40;;;;;;;;;;;;;;;:58;;:65;;;;5725:99;;5914:1;5894:16;:21;;;5890:81;;;5932:27;5941:2;5945:13;5932:8;:27::i;:::-;5890:81;5986:21;5981:541;6025:18;:25;6009:13;:41;5981:541;;;6084:15;6102:18;6121:13;6102:33;;;;;;;;:::i;:::-;;;;;;;;6084:51;;6150:23;6176:2;:29;;:39;6206:8;6176:39;;;;;;;;;;;;;;;;;:52;;;;;;;;;;;;6150:78;;6270:13;6251:32;;:15;:32;;;;6243:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;6359:45;6374:2;6378:15;6395:8;6359:14;:45::i;:::-;6419:58;6431:2;6435:8;6445:16;6463:13;6419:11;:58::i;:::-;6492:18;;;;;:::i;:::-;;;;6069:453;;6052:15;;;;;:::i;:::-;;;;5981:541;;;;5468:1061;;5374:1155;;:::o;6537:752::-;6677:1;6649:18;:25;:29;6641:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;6737:25;6765:16;:14;:16::i;:::-;6737:44;;6891:1;6866:27;;:13;:27;;;6858:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;6968:21;6963:319;7007:18;:25;6991:13;:41;6963:319;;;7066:15;7084:18;7103:13;7084:33;;;;;;;;:::i;:::-;;;;;;;;7066:51;;7132:23;7158:2;:29;;:39;7188:8;7158:39;;;;;;;;;;;;;;;;;:52;;;;;;;;;;;;7132:78;;7225:45;7240:2;7244:15;7261:8;7225:14;:45::i;:::-;7051:231;;7034:15;;;;;:::i;:::-;;;;6963:319;;;;6630:659;6537:752;;:::o;10260:760::-;10370:1;10353:19;;:5;:19;;;10349:58;;;10389:7;;10349:58;10417:73;10440:5;10417:73;;;;;;;;;;;;;;;;;:22;:73::i;:::-;10510:12;10524:18;10546:5;:18;;10565:9;10546:29;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10509:66;;;;10591:7;10586:427;;10634:1;10619:5;:12;:16;10615:387;;;10805:5;10799:12;10856:15;10848:5;10844:2;10840:14;10833:39;10615:387;10969:5;10976:9;10938:48;;;;;;;;;;;;:::i;:::-;;;;;;;;10586:427;10338:682;;10260:760;;;:::o;7297:320::-;7385:77;7408:13;7385:77;;;;;;;;;;;;;;;;;:22;:77::i;:::-;7537:2;:17;;:24;;;;7473:2;:25;;:40;7499:13;7473:40;;;;;;;;;;;;;;;:61;;:88;;;;7572:2;:17;;7595:13;7572:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7297:320;;:::o;7631:393::-;7834:17;7766:2;:29;;:40;7796:9;7766:40;;;;;;;;;;;;;;;;;:65;;;:85;;;;;;;;;;;;;;;;;;7862:2;:25;;:40;7888:13;7862:40;;;;;;;;;;;;;;;:58;;7926:9;7862:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8003:13;7947:2;:29;;:40;7977:9;7947:40;;;;;;;;;;;;;;;;;:53;;;:69;;;;;;;;;;;;;;;;;;7631:393;;;;:::o;8032:2220::-;8185:1;8160:27;;:13;:27;;;;8152:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;8369:4;8344:30;;:13;:30;;;;8336:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;8511:24;8538:2;:29;;:40;8568:9;8538:40;;;;;;;;;;;;;;;;;:65;;;;;;;;;;;;8511:92;;;;8614:28;8713:1;8645:2;:25;;:40;8671:13;8645:40;;;;;;;;;;;;;;;:58;;:65;;;;:69;;;;:::i;:::-;8614:100;;8818:20;8798:16;:40;8794:391;;8855:19;8877:2;:25;;:40;8903:13;8877:40;;;;;;;;;;;;;;;:58;;8936:20;8877:80;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8855:102;;9051:12;8972:2;:25;;:40;8998:13;8972:40;;;;;;;;;;;;;;;:58;;9031:16;8972:76;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;:91;;;;;;;;;;;;;;;;;;9156:16;9078:2;:29;;:43;9108:12;9078:43;;;;;;;;;;;;;;;;;:68;;;:95;;;;;;;;;;;;;;;;;;8840:345;8794:391;9232:2;:25;;:40;9258:13;9232:40;;;;;;;;;;;;;;;:58;;:64;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9314:2;:29;;:40;9344:9;9314:40;;;;;;;;;;;;;;;;;;9307:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9476:1;9452:20;:25;9448:797;;;9586:32;9648:1;9621:2;:17;;:24;;;;:28;;;;:::i;:::-;9586:63;;9664:28;9695:2;:25;;:40;9721:13;9695:40;;;;;;;;;;;;;;;:61;;;9664:92;;9799:24;9775:20;:48;9771:342;;9844:24;9871:2;:17;;9889:24;9871:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9844:70;;9975:16;9933:2;:17;;9951:20;9933:39;;;;;;;;:::i;:::-;;;;;;;;;;:58;;;;;;;;;;;;;;;;;;10077:20;10010:2;:25;;:43;10036:16;10010:43;;;;;;;;;;;;;;;:64;;:87;;;;9825:288;9771:342;10127:2;:17;;:23;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;10172:2;:25;;:40;10198:13;10172:40;;;;;;;;;;;;;;;:61;;10165:68;;;9479:766;;9448:797;8133:2119;;8032:2220;;;:::o;11028:267::-;11133:20;11216:9;11204:22;11188:38;;11270:1;11255:12;:16;11273:13;11247:40;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11122:173;11028:267;;:::o;7:169:1:-;91:11;125:6;120:3;113:19;165:4;160:3;156:14;141:29;;7:169;;;;:::o;182:182::-;322:34;318:1;310:6;306:14;299:58;182:182;:::o;370:366::-;512:3;533:67;597:2;592:3;533:67;:::i;:::-;526:74;;609:93;698:3;609:93;:::i;:::-;727:2;722:3;718:12;711:19;;370:366;;;:::o;742:419::-;908:4;946:2;935:9;931:18;923:26;;995:9;989:4;985:20;981:1;970:9;966:17;959:47;1023:131;1149:4;1023:131;:::i;:::-;1015:139;;742:419;;;:::o;1167:180::-;1215:77;1212:1;1205:88;1312:4;1309:1;1302:15;1336:4;1333:1;1326:15;1353:180;1401:77;1398:1;1391:88;1498:4;1495:1;1488:15;1522:4;1519:1;1512:15;1539:226;1679:34;1675:1;1667:6;1663:14;1656:58;1748:9;1743:2;1735:6;1731:15;1724:34;1539:226;:::o;1771:366::-;1913:3;1934:67;1998:2;1993:3;1934:67;:::i;:::-;1927:74;;2010:93;2099:3;2010:93;:::i;:::-;2128:2;2123:3;2119:12;2112:19;;1771:366;;;:::o;2143:419::-;2309:4;2347:2;2336:9;2332:18;2324:26;;2396:9;2390:4;2386:20;2382:1;2371:9;2367:17;2360:47;2424:131;2550:4;2424:131;:::i;:::-;2416:139;;2143:419;;;:::o;2568:180::-;2616:77;2613:1;2606:88;2713:4;2710:1;2703:15;2737:4;2734:1;2727:15;2754:77;2791:7;2820:5;2809:16;;2754:77;;;:::o;2837:233::-;2876:3;2899:24;2917:5;2899:24;:::i;:::-;2890:33;;2945:66;2938:5;2935:77;2932:103;;;3015:18;;:::i;:::-;2932:103;3062:1;3055:5;3051:13;3044:20;;2837:233;;;:::o;3076:139::-;3168:6;3202:5;3196:12;3186:22;;3076:139;;;:::o;3221:209::-;3345:11;3379:6;3374:3;3367:19;3419:4;3414:3;3410:14;3395:29;;3221:209;;;;:::o;3436:157::-;3528:4;3551:3;3543:11;;3581:4;3576:3;3572:14;3564:22;;3436:157;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:108::-;3910:24;3928:5;3910:24;:::i;:::-;3905:3;3898:37;3833:108;;:::o;3947:123::-;4038:1;4031:5;4028:12;4018:46;;4044:18;;:::i;:::-;4018:46;3947:123;:::o;4076:147::-;4131:7;4160:5;4149:16;;4166:51;4211:5;4166:51;:::i;:::-;4076:147;;;:::o;4229:::-;4295:9;4328:42;4364:5;4328:42;:::i;:::-;4315:55;;4229:147;;;:::o;4382:153::-;4475:53;4522:5;4475:53;:::i;:::-;4470:3;4463:66;4382:153;;:::o;4541:113::-;4607:6;4641:5;4635:12;4625:22;;4541:113;;;:::o;4660:173::-;4748:11;4782:6;4777:3;4770:19;4822:4;4817:3;4813:14;4798:29;;4660:173;;;;:::o;4839:131::-;4905:4;4928:3;4920:11;;4958:4;4953:3;4949:14;4941:22;;4839:131;;;:::o;4976:149::-;5012:7;5052:66;5045:5;5041:78;5030:89;;4976:149;;;:::o;5131:105::-;5206:23;5223:5;5206:23;:::i;:::-;5201:3;5194:36;5131:105;;:::o;5242:175::-;5309:10;5330:44;5370:3;5362:6;5330:44;:::i;:::-;5406:4;5401:3;5397:14;5383:28;;5242:175;;;;:::o;5423:112::-;5492:4;5524;5519:3;5515:14;5507:22;;5423:112;;;:::o;5569:704::-;5676:3;5705:53;5752:5;5705:53;:::i;:::-;5774:75;5842:6;5837:3;5774:75;:::i;:::-;5767:82;;5873:55;5922:5;5873:55;:::i;:::-;5951:7;5982:1;5967:281;5992:6;5989:1;5986:13;5967:281;;;6068:6;6062:13;6095:61;6152:3;6137:13;6095:61;:::i;:::-;6088:68;;6179:59;6231:6;6179:59;:::i;:::-;6169:69;;6027:221;6014:1;6011;6007:9;6002:14;;5967:281;;;5971:14;6264:3;6257:10;;5681:592;;;5569:704;;;;:::o;6345:837::-;6454:3;6490:4;6485:3;6481:14;6585:4;6578:5;6574:16;6568:23;6604:63;6661:4;6656:3;6652:14;6638:12;6604:63;:::i;:::-;6505:172;6761:4;6754:5;6750:16;6744:23;6780:79;6853:4;6848:3;6844:14;6830:12;6780:79;:::i;:::-;6687:182;6964:4;6957:5;6953:16;6947:23;7017:3;7011:4;7007:14;7000:4;6995:3;6991:14;6984:38;7043:101;7139:4;7125:12;7043:101;:::i;:::-;7035:109;;6879:276;7172:4;7165:11;;6459:723;6345:837;;;;:::o;7188:256::-;7307:10;7342:96;7434:3;7426:6;7342:96;:::i;:::-;7328:110;;7188:256;;;;:::o;7450:138::-;7545:4;7577;7572:3;7568:14;7560:22;;7450:138;;;:::o;7664:1111::-;7833:3;7862:79;7935:5;7862:79;:::i;:::-;7957:111;8061:6;8056:3;7957:111;:::i;:::-;7950:118;;8094:3;8139:4;8131:6;8127:17;8122:3;8118:27;8169:81;8244:5;8169:81;:::i;:::-;8273:7;8304:1;8289:441;8314:6;8311:1;8308:13;8289:441;;;8385:9;8379:4;8375:20;8370:3;8363:33;8436:6;8430:13;8464:114;8573:4;8558:13;8464:114;:::i;:::-;8456:122;;8601:85;8679:6;8601:85;:::i;:::-;8591:95;;8715:4;8710:3;8706:14;8699:21;;8349:381;8336:1;8333;8329:9;8324:14;;8289:441;;;8293:14;8746:4;8739:11;;8766:3;8759:10;;7838:937;;;;;7664:1111;;;;:::o;8781:118::-;8868:24;8886:5;8868:24;:::i;:::-;8863:3;8856:37;8781:118;;:::o;8905:98::-;8956:6;8990:5;8984:12;8974:22;;8905:98;;;:::o;9009:168::-;9092:11;9126:6;9121:3;9114:19;9166:4;9161:3;9157:14;9142:29;;9009:168;;;;:::o;9183:307::-;9251:1;9261:113;9275:6;9272:1;9269:13;9261:113;;;9360:1;9355:3;9351:11;9345:18;9341:1;9336:3;9332:11;9325:39;9297:2;9294:1;9290:10;9285:15;;9261:113;;;9392:6;9389:1;9386:13;9383:101;;;9472:1;9463:6;9458:3;9454:16;9447:27;9383:101;9232:258;9183:307;;;:::o;9496:102::-;9537:6;9588:2;9584:7;9579:2;9572:5;9568:14;9564:28;9554:38;;9496:102;;;:::o;9604:360::-;9690:3;9718:38;9750:5;9718:38;:::i;:::-;9772:70;9835:6;9830:3;9772:70;:::i;:::-;9765:77;;9851:52;9896:6;9891:3;9884:4;9877:5;9873:16;9851:52;:::i;:::-;9928:29;9950:6;9928:29;:::i;:::-;9923:3;9919:39;9912:46;;9694:270;9604:360;;;;:::o;9970:780::-;10237:4;10275:2;10264:9;10260:18;10252:26;;10324:9;10318:4;10314:20;10310:1;10299:9;10295:17;10288:47;10352:158;10505:4;10496:6;10352:158;:::i;:::-;10344:166;;10520:72;10588:2;10577:9;10573:18;10564:6;10520:72;:::i;:::-;10639:9;10633:4;10629:20;10624:2;10613:9;10609:18;10602:48;10667:76;10738:4;10729:6;10667:76;:::i;:::-;10659:84;;9970:780;;;;;;:::o;10756:230::-;10896:34;10892:1;10884:6;10880:14;10873:58;10965:13;10960:2;10952:6;10948:15;10941:38;10756:230;:::o;10992:366::-;11134:3;11155:67;11219:2;11214:3;11155:67;:::i;:::-;11148:74;;11231:93;11320:3;11231:93;:::i;:::-;11349:2;11344:3;11340:12;11333:19;;10992:366;;;:::o;11364:419::-;11530:4;11568:2;11557:9;11553:18;11545:26;;11617:9;11611:4;11607:20;11603:1;11592:9;11588:17;11581:47;11645:131;11771:4;11645:131;:::i;:::-;11637:139;;11364:419;;;:::o;11789:231::-;11929:34;11925:1;11917:6;11913:14;11906:58;11998:14;11993:2;11985:6;11981:15;11974:39;11789:231;:::o;12026:366::-;12168:3;12189:67;12253:2;12248:3;12189:67;:::i;:::-;12182:74;;12265:93;12354:3;12265:93;:::i;:::-;12383:2;12378:3;12374:12;12367:19;;12026:366;;;:::o;12398:419::-;12564:4;12602:2;12591:9;12587:18;12579:26;;12651:9;12645:4;12641:20;12637:1;12626:9;12622:17;12615:47;12679:131;12805:4;12679:131;:::i;:::-;12671:139;;12398:419;;;:::o;12823:240::-;12963:34;12959:1;12951:6;12947:14;12940:58;13032:23;13027:2;13019:6;13015:15;13008:48;12823:240;:::o;13069:366::-;13211:3;13232:67;13296:2;13291:3;13232:67;:::i;:::-;13225:74;;13308:93;13397:3;13308:93;:::i;:::-;13426:2;13421:3;13417:12;13410:19;;13069:366;;;:::o;13441:419::-;13607:4;13645:2;13634:9;13630:18;13622:26;;13694:9;13688:4;13684:20;13680:1;13669:9;13665:17;13658:47;13722:131;13848:4;13722:131;:::i;:::-;13714:139;;13441:419;;;:::o;13866:109::-;13902:7;13942:26;13935:5;13931:38;13920:49;;13866:109;;;:::o;13981:191::-;14019:3;14042:23;14059:5;14042:23;:::i;:::-;14033:32;;14087:26;14080:5;14077:37;14074:63;;;14117:18;;:::i;:::-;14074:63;14164:1;14157:5;14153:13;14146:20;;13981:191;;;:::o;14178:243::-;14318:34;14314:1;14306:6;14302:14;14295:58;14387:26;14382:2;14374:6;14370:15;14363:51;14178:243;:::o;14427:366::-;14569:3;14590:67;14654:2;14649:3;14590:67;:::i;:::-;14583:74;;14666:93;14755:3;14666:93;:::i;:::-;14784:2;14779:3;14775:12;14768:19;;14427:366;;;:::o;14799:419::-;14965:4;15003:2;14992:9;14988:18;14980:26;;15052:9;15046:4;15042:20;15038:1;15027:9;15023:17;15016:47;15080:131;15206:4;15080:131;:::i;:::-;15072:139;;14799:419;;;:::o;15224:241::-;15364:34;15360:1;15352:6;15348:14;15341:58;15433:24;15428:2;15420:6;15416:15;15409:49;15224:241;:::o;15471:366::-;15613:3;15634:67;15698:2;15693:3;15634:67;:::i;:::-;15627:74;;15710:93;15799:3;15710:93;:::i;:::-;15828:2;15823:3;15819:12;15812:19;;15471:366;;;:::o;15843:419::-;16009:4;16047:2;16036:9;16032:18;16024:26;;16096:9;16090:4;16086:20;16082:1;16071:9;16067:17;16060:47;16124:131;16250:4;16124:131;:::i;:::-;16116:139;;15843:419;;;:::o;16268:147::-;16369:11;16406:3;16391:18;;16268:147;;;;:::o;16421:373::-;16525:3;16553:38;16585:5;16553:38;:::i;:::-;16607:88;16688:6;16683:3;16607:88;:::i;:::-;16600:95;;16704:52;16749:6;16744:3;16737:4;16730:5;16726:16;16704:52;:::i;:::-;16781:6;16776:3;16772:16;16765:23;;16529:265;16421:373;;;;:::o;16800:271::-;16930:3;16952:93;17041:3;17032:6;16952:93;:::i;:::-;16945:100;;17062:3;17055:10;;16800:271;;;;:::o;17077:419::-;17216:4;17254:2;17243:9;17239:18;17231:26;;17267:71;17335:1;17324:9;17320:17;17311:6;17267:71;:::i;:::-;17385:9;17379:4;17375:20;17370:2;17359:9;17355:18;17348:48;17413:76;17484:4;17475:6;17413:76;:::i;:::-;17405:84;;17077:419;;;;;:::o;17502:242::-;17642:34;17638:1;17630:6;17626:14;17619:58;17711:25;17706:2;17698:6;17694:15;17687:50;17502:242;:::o;17750:366::-;17892:3;17913:67;17977:2;17972:3;17913:67;:::i;:::-;17906:74;;17989:93;18078:3;17989:93;:::i;:::-;18107:2;18102:3;18098:12;18091:19;;17750:366;;;:::o;18122:419::-;18288:4;18326:2;18315:9;18311:18;18303:26;;18375:9;18369:4;18365:20;18361:1;18350:9;18346:17;18339:47;18403:131;18529:4;18403:131;:::i;:::-;18395:139;;18122:419;;;:::o;18547:233::-;18687:34;18683:1;18675:6;18671:14;18664:58;18756:16;18751:2;18743:6;18739:15;18732:41;18547:233;:::o;18786:366::-;18928:3;18949:67;19013:2;19008:3;18949:67;:::i;:::-;18942:74;;19025:93;19114:3;19025:93;:::i;:::-;19143:2;19138:3;19134:12;19127:19;;18786:366;;;:::o;19158:419::-;19324:4;19362:2;19351:9;19347:18;19339:26;;19411:9;19405:4;19401:20;19397:1;19386:9;19382:17;19375:47;19439:131;19565:4;19439:131;:::i;:::-;19431:139;;19158:419;;;:::o;19583:191::-;19623:4;19643:20;19661:1;19643:20;:::i;:::-;19638:25;;19677:20;19695:1;19677:20;:::i;:::-;19672:25;;19716:1;19713;19710:8;19707:34;;;19721:18;;:::i;:::-;19707:34;19766:1;19763;19759:9;19751:17;;19583:191;;;;:::o;19780:180::-;19828:77;19825:1;19818:88;19925:4;19922:1;19915:15;19949:4;19946:1;19939:15;19966:99;20018:6;20052:5;20046:12;20036:22;;19966:99;;;:::o;20071:364::-;20159:3;20187:39;20220:5;20187:39;:::i;:::-;20242:71;20306:6;20301:3;20242:71;:::i;:::-;20235:78;;20322:52;20367:6;20362:3;20355:4;20348:5;20344:16;20322:52;:::i;:::-;20399:29;20421:6;20399:29;:::i;:::-;20394:3;20390:39;20383:46;;20163:272;20071:364;;;;:::o;20441:313::-;20554:4;20592:2;20581:9;20577:18;20569:26;;20641:9;20635:4;20631:20;20627:1;20616:9;20612:17;20605:47;20669:78;20742:4;20733:6;20669:78;:::i;:::-;20661:86;;20441:313;;;;:::o

Swarm Source

ipfs://1399858797a8dcea09ea09edc38c2886f1f5e25d25c8d322218989dbe56919b7
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.