ETH Price: $3,405.11 (+2.81%)

Token

EQLZ Squads (3777)
 

Overview

Max Total Supply

250 3777

Holders

40

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
doink.eth
Balance
10 3777
0xdfe7ad3e0cc6fb0798e66c67c72927c49fc42478
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 0xd9531C6E...68A19eE88
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.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 7 : Diamond.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/***************************************************************\
 .    . . . . . . .... .. ...................... . . . .  .   .+
   ..  .   . .. . ............................ ... ....  . .. .+
 .   .  .. .. ....... ..;@@@@@@@@@@@@@@@@@@@;........ ... .  . +
  .   .  .. ...........X 8@8X8X8X8X8X8X8X8X@ 8  ....... .. .. .+
.  .. . . ... ... .:..% 8 88@ 888888888888@%..8  .:...... . .  +
 .  . ... . ........:t:88888888@88888@8@888 ;  @......... .. ..+
.  . . . ........::.% 8 888@888888X888888  .   88:;:.:....... .+
.   . .. . .....:.:; 88888888@8888888@88      S.88:.:........ .+
 . . .. .......:.:;88 @8@8@888888@@88888.   .888 88;.:..:..... +
.  .. .......:..:; 8888888888888@88888X :  :Xt8 8 :S:.:........+
 .  .......:..:.;:8 8888888%8888888888 :. .888 8 88:;::::..... +
 . .. .......:::tS8@8888888@88%88888X ;. [email protected] 8  %:  8:..:.....+
. .........:..::8888@S888S8888888888 ;. :88SS 8t8.    @::......+
 . . .....:.::.8@ 88 @88 @8 88@ 88 @::  8.8 8 8@     88:.:.....v
. . .......:.:;t8 :8 8 88.8 8:8.:8 t8..88 8 8 @ 8   88;::.:....+
.. .......:.:::;.%8 @ 8 @ .8:@.8 ;8;8t8:X@ 8:8X    88t::::.....+
. .. ......:..:::t88 8 8 8 t8 %88 88.@8 @ 888 X 8 XX;::::.::...+
..........:::::::;:X:8 :8 8 ;8.8.8 @ :88 8:@ @   8X;::::::.:...+
  . .......:.:::::; 8 8.:8 8 t8:8 8 8.;88 XX  8 88t;:::::......+
.. .......:.:.:::::; @:8.;8 8.t8 8 tt8.%8@. 8  88t;:;::::.:....+
 ... ....:.:.:.::;::; 8:8 ;8 8 t8 8:8 8.t8S. 888;;:;::::.:..:..+
.  ........::::::::;:;.t 8 ;8 8 ;88:;8.8 ;88 88S:::::::.:.:....+
 .. .. .....:.:.:::::;; 888X8S8 X@XSSS88 888X:t;;;::::::.:.....+
 .. ........:..:::::;::;%;:   .t. ;ttS:;t. .  :;;:;:::.::......+
 . . ......:.:..::::::;;;t;;:;;;;;;;;t;;;;;:: :;:;:::.:........+
/***************************************************************/

import { LibDiamond } from "./libraries/LibDiamond.sol";
import { IDiamondCut } from "./interfaces/IDiamondCut.sol";
import { IDiamondLoupe } from  "./interfaces/IDiamondLoupe.sol";
import { IERC173 } from "./interfaces/IERC173.sol";
import { IERC165} from "./interfaces/IERC165.sol";

error FunctionNotFound(bytes4 _functionSelector);

struct DiamondArgs {
  address owner;
  address init;
  bytes initCalldata;
}

contract Diamond {    

  constructor(IDiamondCut.FacetCut[] memory _diamondCut, DiamondArgs memory _args) payable {
    LibDiamond.setContractOwner(_args.owner);
    LibDiamond.diamondCut(_diamondCut, _args.init, _args.initCalldata);        
  }
  
  fallback() external payable {
    LibDiamond.DiamondStorage storage ds;
    bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION;
    
    assembly {
      ds.slot := position
    }
    
    address facet = ds.facetAddressAndSelectorPosition[msg.sig].facetAddress;
    if(facet == address(0)) {
      revert FunctionNotFound(msg.sig);
    }
    
    assembly {        
      calldatacopy(0, 0, calldatasize())             
      let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0)            
      returndatacopy(0, 0, returndatasize())            
      switch result
      case 0 {
        revert(0, returndatasize())
      }
      default {
        return(0, returndatasize())
      }
    }
  }

  receive() external payable {}
}

File 2 of 7 : IDiamond.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/***************************************************************\
 .    . . . . . . .... .. ...................... . . . .  .   .+
   ..  .   . .. . ............................ ... ....  . .. .+
 .   .  .. .. ....... ..;@@@@@@@@@@@@@@@@@@@;........ ... .  . +
  .   .  .. ...........X 8@8X8X8X8X8X8X8X8X@ 8  ....... .. .. .+
.  .. . . ... ... .:..% 8 88@ 888888888888@%..8  .:...... . .  +
 .  . ... . ........:t:88888888@88888@8@888 ;  @......... .. ..+
.  . . . ........::.% 8 888@888888X888888  .   88:;:.:....... .+
.   . .. . .....:.:; 88888888@8888888@88      S.88:.:........ .+
 . . .. .......:.:;88 @8@8@888888@@88888.   .888 88;.:..:..... +
.  .. .......:..:; 8888888888888@88888X :  :Xt8 8 :S:.:........+
 .  .......:..:.;:8 8888888%8888888888 :. .888 8 88:;::::..... +
 . .. .......:::tS8@8888888@88%88888X ;. [email protected] 8  %:  8:..:.....+
. .........:..::8888@S888S8888888888 ;. :88SS 8t8.    @::......+
 . . .....:.::.8@ 88 @88 @8 88@ 88 @::  8.8 8 8@     88:.:.....v
. . .......:.:;t8 :8 8 88.8 8:8.:8 t8..88 8 8 @ 8   88;::.:....+
.. .......:.:::;.%8 @ 8 @ .8:@.8 ;8;8t8:X@ 8:8X    88t::::.....+
. .. ......:..:::t88 8 8 8 t8 %88 88.@8 @ 888 X 8 XX;::::.::...+
..........:::::::;:X:8 :8 8 ;8.8.8 @ :88 8:@ @   8X;::::::.:...+
  . .......:.:::::; 8 8.:8 8 t8:8 8 8.;88 XX  8 88t;:::::......+
.. .......:.:.:::::; @:8.;8 8.t8 8 tt8.%8@. 8  88t;:;::::.:....+
 ... ....:.:.:.::;::; 8:8 ;8 8 t8 8:8 8.t8S. 888;;:;::::.:..:..+
.  ........::::::::;:;.t 8 ;8 8 ;88:;8.8 ;88 88S:::::::.:.:....+
 .. .. .....:.:.:::::;; 888X8S8 X@XSSS88 888X:t;;;::::::.:.....+
 .. ........:..:::::;::;%;:   .t. ;ttS:;t. .  :;;:;:::.::......+
 . . ......:.:..::::::;;;t;;:;;;;;;;;t;;;;;:: :;:;:::.:........+
/***************************************************************/

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

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

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

File 3 of 7 : IDiamondCut.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/***************************************************************\
 .    . . . . . . .... .. ...................... . . . .  .   .+
   ..  .   . .. . ............................ ... ....  . .. .+
 .   .  .. .. ....... ..;@@@@@@@@@@@@@@@@@@@;........ ... .  . +
  .   .  .. ...........X 8@8X8X8X8X8X8X8X8X@ 8  ....... .. .. .+
.  .. . . ... ... .:..% 8 88@ 888888888888@%..8  .:...... . .  +
 .  . ... . ........:t:88888888@88888@8@888 ;  @......... .. ..+
.  . . . ........::.% 8 888@888888X888888  .   88:;:.:....... .+
.   . .. . .....:.:; 88888888@8888888@88      S.88:.:........ .+
 . . .. .......:.:;88 @8@8@888888@@88888.   .888 88;.:..:..... +
.  .. .......:..:; 8888888888888@88888X :  :Xt8 8 :S:.:........+
 .  .......:..:.;:8 8888888%8888888888 :. .888 8 88:;::::..... +
 . .. .......:::tS8@8888888@88%88888X ;. [email protected] 8  %:  8:..:.....+
. .........:..::8888@S888S8888888888 ;. :88SS 8t8.    @::......+
 . . .....:.::.8@ 88 @88 @8 88@ 88 @::  8.8 8 8@     88:.:.....v
. . .......:.:;t8 :8 8 88.8 8:8.:8 t8..88 8 8 @ 8   88;::.:....+
.. .......:.:::;.%8 @ 8 @ .8:@.8 ;8;8t8:X@ 8:8X    88t::::.....+
. .. ......:..:::t88 8 8 8 t8 %88 88.@8 @ 888 X 8 XX;::::.::...+
..........:::::::;:X:8 :8 8 ;8.8.8 @ :88 8:@ @   8X;::::::.:...+
  . .......:.:::::; 8 8.:8 8 t8:8 8 8.;88 XX  8 88t;:::::......+
.. .......:.:.:::::; @:8.;8 8.t8 8 tt8.%8@. 8  88t;:;::::.:....+
 ... ....:.:.:.::;::; 8:8 ;8 8 t8 8:8 8.t8S. 888;;:;::::.:..:..+
.  ........::::::::;:;.t 8 ;8 8 ;88:;8.8 ;88 88S:::::::.:.:....+
 .. .. .....:.:.:::::;; 888X8S8 X@XSSS88 888X:t;;;::::::.:.....+
 .. ........:..:::::;::;%;:   .t. ;ttS:;t. .  :;;:;:::.::......+
 . . ......:.:..::::::;;;t;;:;;;;;;;;t;;;;;:: :;:;:::.:........+
/***************************************************************/

import { IDiamond } from "./IDiamond.sol";

interface IDiamondCut is IDiamond {    

  /// @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;    
}

File 4 of 7 : IDiamondLoupe.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/***************************************************************\
 .    . . . . . . .... .. ...................... . . . .  .   .+
   ..  .   . .. . ............................ ... ....  . .. .+
 .   .  .. .. ....... ..;@@@@@@@@@@@@@@@@@@@;........ ... .  . +
  .   .  .. ...........X 8@8X8X8X8X8X8X8X8X@ 8  ....... .. .. .+
.  .. . . ... ... .:..% 8 88@ 888888888888@%..8  .:...... . .  +
 .  . ... . ........:t:88888888@88888@8@888 ;  @......... .. ..+
.  . . . ........::.% 8 888@888888X888888  .   88:;:.:....... .+
.   . .. . .....:.:; 88888888@8888888@88      S.88:.:........ .+
 . . .. .......:.:;88 @8@8@888888@@88888.   .888 88;.:..:..... +
.  .. .......:..:; 8888888888888@88888X :  :Xt8 8 :S:.:........+
 .  .......:..:.;:8 8888888%8888888888 :. .888 8 88:;::::..... +
 . .. .......:::tS8@8888888@88%88888X ;. [email protected] 8  %:  8:..:.....+
. .........:..::8888@S888S8888888888 ;. :88SS 8t8.    @::......+
 . . .....:.::.8@ 88 @88 @8 88@ 88 @::  8.8 8 8@     88:.:.....v
. . .......:.:;t8 :8 8 88.8 8:8.:8 t8..88 8 8 @ 8   88;::.:....+
.. .......:.:::;.%8 @ 8 @ .8:@.8 ;8;8t8:X@ 8:8X    88t::::.....+
. .. ......:..:::t88 8 8 8 t8 %88 88.@8 @ 888 X 8 XX;::::.::...+
..........:::::::;:X:8 :8 8 ;8.8.8 @ :88 8:@ @   8X;::::::.:...+
  . .......:.:::::; 8 8.:8 8 t8:8 8 8.;88 XX  8 88t;:::::......+
.. .......:.:.:::::; @:8.;8 8.t8 8 tt8.%8@. 8  88t;:;::::.:....+
 ... ....:.:.:.::;::; 8:8 ;8 8 t8 8:8 8.t8S. 888;;:;::::.:..:..+
.  ........::::::::;:;.t 8 ;8 8 ;88:;8.8 ;88 88S:::::::.:.:....+
 .. .. .....:.:.:::::;; 888X8S8 X@XSSS88 888X:t;;;::::::.:.....+
 .. ........:..:::::;::;%;:   .t. ;ttS:;t. .  :;;:;:::.::......+
 . . ......:.:..::::::;;;t;;:;;;;;;;;t;;;;;:: :;:;:::.:........+
/***************************************************************/

interface IDiamondLoupe {
  
  struct Facet {
    address facetAddress;
    bytes4[] functionSelectors;
  }

  /// @notice Gets all facet addresses and their four byte function selectors.
  /// @return facets_ Facet
  function facets() external view returns (Facet[] memory facets_);

  /// @notice Gets all the function selectors supported by a specific facet.
  /// @param _facet The facet address.
  /// @return facetFunctionSelectors_
  function facetFunctionSelectors(address _facet) external view returns (bytes4[] memory facetFunctionSelectors_);

  /// @notice Get all the facet addresses used by a diamond.
  /// @return facetAddresses_
  function facetAddresses() external view returns (address[] memory facetAddresses_);

  /// @notice Gets the facet that supports the given selector.
  /// @dev If facet is not found return address(0).
  /// @param _functionSelector The function selector.
  /// @return facetAddress_ The facet address.
  function facetAddress(bytes4 _functionSelector) external view returns (address facetAddress_);
}

File 5 of 7 : IERC165.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IERC165 {
    /// @notice Query if a contract implements an interface
    /// @param interfaceId The interface identifier, as specified in ERC-165
    /// @dev Interface identification is specified in ERC-165. This function
    ///  uses less than 30,000 gas.
    /// @return `true` if the contract implements `interfaceID` and
    ///  `interfaceID` is not 0xffffffff, `false` otherwise
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 6 of 7 : IERC173.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/// @title ERC-173 Contract Ownership Standard
///  Note: the ERC-165 identifier for this interface is 0x7f5828d0
/* is ERC165 */
interface IERC173 {
    /// @dev This emits when ownership of a contract changes.
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

    /// @notice Set the address of the new owner of the contract
    /// @dev Set _newOwner to address(0) to renounce any ownership.
    /// @param _newOwner The address of the new owner of the contract
    function transferOwnership(address _newOwner) external;
}

File 7 of 7 : LibDiamond.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/***************************************************************\
 .    . . . . . . .... .. ...................... . . . .  .   .+
   ..  .   . .. . ............................ ... ....  . .. .+
 .   .  .. .. ....... ..;@@@@@@@@@@@@@@@@@@@;........ ... .  . +
  .   .  .. ...........X 8@8X8X8X8X8X8X8X8X@ 8  ....... .. .. .+
.  .. . . ... ... .:..% 8 88@ 888888888888@%..8  .:...... . .  +
 .  . ... . ........:t:88888888@88888@8@888 ;  @......... .. ..+
.  . . . ........::.% 8 888@888888X888888  .   88:;:.:....... .+
.   . .. . .....:.:; 88888888@8888888@88      S.88:.:........ .+
 . . .. .......:.:;88 @8@8@888888@@88888.   .888 88;.:..:..... +
.  .. .......:..:; 8888888888888@88888X :  :Xt8 8 :S:.:........+
 .  .......:..:.;:8 8888888%8888888888 :. .888 8 88:;::::..... +
 . .. .......:::tS8@8888888@88%88888X ;. [email protected] 8  %:  8:..:.....+
. .........:..::8888@S888S8888888888 ;. :88SS 8t8.    @::......+
 . . .....:.::.8@ 88 @88 @8 88@ 88 @::  8.8 8 8@     88:.:.....v
. . .......:.:;t8 :8 8 88.8 8:8.:8 t8..88 8 8 @ 8   88;::.:....+
.. .......:.:::;.%8 @ 8 @ .8:@.8 ;8;8t8:X@ 8:8X    88t::::.....+
. .. ......:..:::t88 8 8 8 t8 %88 88.@8 @ 888 X 8 XX;::::.::...+
..........:::::::;:X:8 :8 8 ;8.8.8 @ :88 8:@ @   8X;::::::.:...+
  . .......:.:::::; 8 8.:8 8 t8:8 8 8.;88 XX  8 88t;:::::......+
.. .......:.:.:::::; @:8.;8 8.t8 8 tt8.%8@. 8  88t;:;::::.:....+
 ... ....:.:.:.::;::; 8:8 ;8 8 t8 8:8 8.t8S. 888;;:;::::.:..:..+
.  ........::::::::;:;.t 8 ;8 8 ;88:;8.8 ;88 88S:::::::.:.:....+
 .. .. .....:.:.:::::;; 888X8S8 X@XSSS88 888X:t;;;::::::.:.....+
 .. ........:..:::::;::;%;:   .t. ;ttS:;t. .  :;;:;:::.::......+
 . . ......:.:..::::::;;;t;;:;;;;;;;;t;;;;;:: :;:;:::.:........+
/***************************************************************/

import { IDiamond } from "../interfaces/IDiamond.sol";
import { IDiamondCut } from "../interfaces/IDiamondCut.sol";

error NoSelectorsGivenToAdd();
error NotContractOwner(address _user, address _contractOwner);
error NoSelectorsProvidedForFacetForCut(address _facetAddress);
error CannotAddSelectorsToZeroAddress(bytes4[] _selectors);
error NoBytecodeAtAddress(address _contractAddress, string _message);
error IncorrectFacetCutAction(uint8 _action);
error CannotAddFunctionToDiamondThatAlreadyExists(bytes4 _selector);
error CannotReplaceFunctionsFromFacetWithZeroAddress(bytes4[] _selectors);
error CannotReplaceImmutableFunction(bytes4 _selector);
error CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet(bytes4 _selector);
error CannotReplaceFunctionThatDoesNotExists(bytes4 _selector);
error RemoveFacetAddressMustBeZeroAddress(address _facetAddress);
error CannotRemoveFunctionThatDoesNotExist(bytes4 _selector);
error CannotRemoveImmutableFunction(bytes4 _selector);
error InitializationFunctionReverted(address _initializationContractAddress, bytes _calldata);

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

  struct FacetAddressAndSelectorPosition {
    address facetAddress;
    uint16 selectorPosition;
  }

  struct ProjectConfig {
    string name;    
    string symbol;    
    uint256 maxSupply;    
    uint256 price;    
    uint256 maxTotalMints;    
    uint256 maxMintTxns;    
    uint256 privateSaleTimestamp;     
    uint256 publicSaleTimestamp;             
    address superAdmin;    
    address[] primaryDistRecipients;    
    uint256[] primaryDistShares;    
    address royaltyReceiver;    
    uint96 royaltyFraction;    
    bytes32 merkleroot;            
    string _baseURI;    
    uint256 closeDate;    
    uint256 minMint;
  }

  struct DiamondStorage {
    // function selector => facet address and selector position in selectors array
    mapping(bytes4 => FacetAddressAndSelectorPosition) facetAddressAndSelectorPosition;
    bytes4[] selectors;
    mapping(bytes4 => bool) supportedInterfaces;
    // owner of the contract
    address contractOwner;  
    // mapping constant for avoiding future issues when adding new ProjectConfig vars
    uint8 INNER_STRUCT;
    mapping(uint8 => ProjectConfig) project;
  }

  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 {
    if(msg.sender != diamondStorage().contractOwner && msg.sender != diamondStorage().project[INNER_STRUCT].superAdmin) {
      revert NotContractOwner(msg.sender, diamondStorage().contractOwner);
    }        
  }

  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++) {
      bytes4[] memory functionSelectors = _diamondCut[facetIndex].functionSelectors;
      address facetAddress = _diamondCut[facetIndex].facetAddress;
      if(functionSelectors.length == 0) {
        revert NoSelectorsProvidedForFacetForCut(facetAddress);
      }
      IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action;
      if (action == IDiamond.FacetCutAction.Add) {
        addFunctions(facetAddress, functionSelectors);
      } else if (action == IDiamond.FacetCutAction.Replace) {
        replaceFunctions(facetAddress, functionSelectors);
      } else if (action == IDiamond.FacetCutAction.Remove) {
        removeFunctions(facetAddress, functionSelectors);
      } else {
        revert IncorrectFacetCutAction(uint8(action));
      }
    }
    emit DiamondCut(_diamondCut, _init, _calldata);
    initializeDiamondCut(_init, _calldata);
  }

  function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {        
    if(_facetAddress == address(0)) {
      revert CannotAddSelectorsToZeroAddress(_functionSelectors);
    }
    DiamondStorage storage ds = diamondStorage();
    uint16 selectorCount = uint16(ds.selectors.length);                
    enforceHasContractCode(_facetAddress, "LibDiamondCut: Add facet has no code");
    for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
      bytes4 selector = _functionSelectors[selectorIndex];
      address oldFacetAddress = ds.facetAddressAndSelectorPosition[selector].facetAddress;
      if(oldFacetAddress != address(0)) {
        revert CannotAddFunctionToDiamondThatAlreadyExists(selector);
      }            
      ds.facetAddressAndSelectorPosition[selector] = FacetAddressAndSelectorPosition(_facetAddress, selectorCount);
      ds.selectors.push(selector);
      selectorCount++;
    }
  }

  function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {        
    DiamondStorage storage ds = diamondStorage();
    if(_facetAddress == address(0)) {
      revert CannotReplaceFunctionsFromFacetWithZeroAddress(_functionSelectors);
    }
    enforceHasContractCode(_facetAddress, "LibDiamondCut: Replace facet has no code");
    for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
      bytes4 selector = _functionSelectors[selectorIndex];
      address oldFacetAddress = ds.facetAddressAndSelectorPosition[selector].facetAddress;
      // can't replace immutable functions -- functions defined directly in the diamond in this case
      if(oldFacetAddress == address(this)) {
        revert CannotReplaceImmutableFunction(selector);
      }
      if(oldFacetAddress == _facetAddress) {
        revert CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet(selector);
      }
      if(oldFacetAddress == address(0)) {
        revert CannotReplaceFunctionThatDoesNotExists(selector);
      }
      // replace old facet address
      ds.facetAddressAndSelectorPosition[selector].facetAddress = _facetAddress;
    }
  }

  function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal {        
    DiamondStorage storage ds = diamondStorage();
    uint256 selectorCount = ds.selectors.length;
    if(_facetAddress != address(0)) {
      revert RemoveFacetAddressMustBeZeroAddress(_facetAddress);
    }        
    for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) {
      bytes4 selector = _functionSelectors[selectorIndex];
      FacetAddressAndSelectorPosition memory oldFacetAddressAndSelectorPosition = ds.facetAddressAndSelectorPosition[selector];
      if(oldFacetAddressAndSelectorPosition.facetAddress == address(0)) {
        revert CannotRemoveFunctionThatDoesNotExist(selector);
      }            
      // can't remove immutable functions -- functions defined directly in the diamond
      if(oldFacetAddressAndSelectorPosition.facetAddress == address(this)) {
        revert CannotRemoveImmutableFunction(selector);
      }
      // replace selector with last selector
      selectorCount--;
      if (oldFacetAddressAndSelectorPosition.selectorPosition != selectorCount) {
        bytes4 lastSelector = ds.selectors[selectorCount];
        ds.selectors[oldFacetAddressAndSelectorPosition.selectorPosition] = lastSelector;
        ds.facetAddressAndSelectorPosition[lastSelector].selectorPosition = oldFacetAddressAndSelectorPosition.selectorPosition;
      }
      // delete last selector
      ds.selectors.pop();
      delete ds.facetAddressAndSelectorPosition[selector];
    }
  }

  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)
    }
    if(contractSize == 0) {
      revert NoBytecodeAtAddress(_contract, _errorMessage);
    }        
  }    
}

contract Modifiers {     

  modifier onlyOwner() {
    LibDiamond.enforceIsContractOwner();
    _;
  }
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"components":[{"internalType":"address","name":"facetAddress","type":"address"},{"internalType":"enum IDiamond.FacetCutAction","name":"action","type":"uint8"},{"internalType":"bytes4[]","name":"functionSelectors","type":"bytes4[]"}],"internalType":"struct IDiamond.FacetCut[]","name":"_diamondCut","type":"tuple[]"},{"components":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"init","type":"address"},{"internalType":"bytes","name":"initCalldata","type":"bytes"}],"internalType":"struct DiamondArgs","name":"_args","type":"tuple"}],"stateMutability":"payable","type":"constructor"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotAddFunctionToDiamondThatAlreadyExists","type":"error"},{"inputs":[{"internalType":"bytes4[]","name":"_selectors","type":"bytes4[]"}],"name":"CannotAddSelectorsToZeroAddress","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotRemoveFunctionThatDoesNotExist","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotRemoveImmutableFunction","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotReplaceFunctionThatDoesNotExists","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotReplaceFunctionWithTheSameFunctionFromTheSameFacet","type":"error"},{"inputs":[{"internalType":"bytes4[]","name":"_selectors","type":"bytes4[]"}],"name":"CannotReplaceFunctionsFromFacetWithZeroAddress","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_selector","type":"bytes4"}],"name":"CannotReplaceImmutableFunction","type":"error"},{"inputs":[{"internalType":"bytes4","name":"_functionSelector","type":"bytes4"}],"name":"FunctionNotFound","type":"error"},{"inputs":[{"internalType":"uint8","name":"_action","type":"uint8"}],"name":"IncorrectFacetCutAction","type":"error"},{"inputs":[{"internalType":"address","name":"_initializationContractAddress","type":"address"},{"internalType":"bytes","name":"_calldata","type":"bytes"}],"name":"InitializationFunctionReverted","type":"error"},{"inputs":[{"internalType":"address","name":"_contractAddress","type":"address"},{"internalType":"string","name":"_message","type":"string"}],"name":"NoBytecodeAtAddress","type":"error"},{"inputs":[{"internalType":"address","name":"_facetAddress","type":"address"}],"name":"NoSelectorsProvidedForFacetForCut","type":"error"},{"inputs":[{"internalType":"address","name":"_facetAddress","type":"address"}],"name":"RemoveFacetAddressMustBeZeroAddress","type":"error"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]

6080604052604051620036c7380380620036c783398181016040528101906200002991906200163e565b6200004381600001516200006b60201b6200018d1760201c565b6200006382826020015183604001516200014a60201b620002641760201c565b505062001d95565b60006200007d620003b660201b60201c565b905060008160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60005b8351811015620003615760008482815181106200016f576200016e620016c3565b5b60200260200101516040015190506000858381518110620001955762000194620016c3565b5b60200260200101516000015190506000825103620001ec57806040517fe767f91f000000000000000000000000000000000000000000000000000000008152600401620001e3919062001703565b60405180910390fd5b6000868481518110620002045762000203620016c3565b5b60200260200101516020015190506000600281111562000229576200022862001720565b5b8160028111156200023f576200023e62001720565b5b036200025d57620002578284620003e360201b60201c565b62000348565b6001600281111562000274576200027362001720565b5b8160028111156200028a576200028962001720565b5b03620002a857620002a282846200072b60201b60201c565b62000347565b600280811115620002be57620002bd62001720565b5b816002811115620002d457620002d362001720565b5b03620002f257620002ec828462000a9560201b60201c565b62000346565b80600281111562000308576200030762001720565b5b6040517f7fe9a41e0000000000000000000000000000000000000000000000000000000081526004016200033d91906200176d565b60405180910390fd5b5b5b50505080806200035890620017c3565b9150506200014d565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673838383604051620003979392919062001ac3565b60405180910390a1620003b1828262000f4060201b60201c565b505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200045757806040517f0ae3681c0000000000000000000000000000000000000000000000000000000081526004016200044e919062001b89565b60405180910390fd5b600062000469620003b660201b60201c565b9050600081600101805490509050620004a28460405180606001604052806024815260200162003653602491396200107460201b60201c565b60005b835181101562000724576000848281518110620004c757620004c6620016c3565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614620005c057816040517febbf5d07000000000000000000000000000000000000000000000000000000008152600401620005b7919062001bbe565b60405180910390fd5b60405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018561ffff16815250856000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548161ffff021916908361ffff160217905550905050846001018290806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c02179055508380620007099062001be9565b945050505080806200071b90620017c3565b915050620004a5565b5050505050565b60006200073d620003b660201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620007b357816040517fcd98a96f000000000000000000000000000000000000000000000000000000008152600401620007aa919062001b89565b60405180910390fd5b620007de836040518060600160405280602881526020016200369f602891396200107460201b60201c565b60005b825181101562000a8f576000838281518110620008035762000802620016c3565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620008fb57816040517f520300da000000000000000000000000000000000000000000000000000000008152600401620008f2919062001bbe565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200096e57816040517f358d9d1a00000000000000000000000000000000000000000000000000000000815260040162000965919062001bbe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620009e257816040517f7479f939000000000000000000000000000000000000000000000000000000008152600401620009d9919062001bbe565b60405180910390fd5b85846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050808062000a8690620017c3565b915050620007e1565b50505050565b600062000aa7620003b660201b60201c565b9050600081600101805490509050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161462000b2957836040517fd091bc8100000000000000000000000000000000000000000000000000000000815260040162000b20919062001703565b60405180910390fd5b60005b835181101562000f3957600084828151811062000b4e5762000b4d620016c3565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900461ffff1661ffff1661ffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff160362000ca857816040517f7a08a22d00000000000000000000000000000000000000000000000000000000815260040162000c9f919062001bbe565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff160362000d1f57816040517f6fafeb0800000000000000000000000000000000000000000000000000000000815260040162000d16919062001bbe565b60405180910390fd5b838062000d2c9062001c18565b94505083816020015161ffff161462000e4857600085600101858154811062000d5a5762000d59620016c3565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b90508086600101836020015161ffff168154811062000da15762000da0620016c3565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c02179055508160200151866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a81548161ffff021916908361ffff160217905550505b8460010180548062000e5f5762000e5e62001c46565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549061ffff021916905550505050808062000f3090620017c3565b91505062000b2c565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160315620010705762000fa18260405180606001604052806028815260200162003677602891396200107460201b60201c565b6000808373ffffffffffffffffffffffffffffffffffffffff168360405162000fcb919062001cb7565b600060405180830381855af49150503d806000811462001008576040519150601f19603f3d011682016040523d82523d6000602084013e6200100d565b606091505b5091509150816200106d576000815111156200102c5780518082602001fd5b83836040517f192105d70000000000000000000000000000000000000000000000000000000081526004016200106492919062001cd0565b60405180910390fd5b50505b5050565b6000823b905060008103620010c45782826040517f919834b9000000000000000000000000000000000000000000000000000000008152600401620010bb92919062001d61565b60405180910390fd5b505050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200112d82620010e2565b810181811067ffffffffffffffff821117156200114f576200114e620010f3565b5b80604052505050565b600062001164620010c9565b905062001172828262001122565b919050565b600067ffffffffffffffff821115620011955762001194620010f3565b5b602082029050602081019050919050565b600080fd5b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011e282620011b5565b9050919050565b620011f481620011d5565b81146200120057600080fd5b50565b6000815190506200121481620011e9565b92915050565b600381106200122857600080fd5b50565b6000815190506200123c816200121a565b92915050565b600067ffffffffffffffff82111562001260576200125f620010f3565b5b602082029050602081019050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b620012a88162001271565b8114620012b457600080fd5b50565b600081519050620012c8816200129d565b92915050565b6000620012e5620012df8462001242565b62001158565b905080838252602082019050602084028301858111156200130b576200130a620011a6565b5b835b81811015620013385780620013238882620012b7565b8452602084019350506020810190506200130d565b5050509392505050565b600082601f8301126200135a5762001359620010dd565b5b81516200136c848260208601620012ce565b91505092915050565b6000606082840312156200138e576200138d620011ab565b5b6200139a606062001158565b90506000620013ac8482850162001203565b6000830152506020620013c2848285016200122b565b602083015250604082015167ffffffffffffffff811115620013e957620013e8620011b0565b5b620013f78482850162001342565b60408301525092915050565b60006200141a620014148462001177565b62001158565b9050808382526020820190506020840283018581111562001440576200143f620011a6565b5b835b818110156200148e57805167ffffffffffffffff811115620014695762001468620010dd565b5b80860162001478898262001375565b8552602085019450505060208101905062001442565b5050509392505050565b600082601f830112620014b057620014af620010dd565b5b8151620014c284826020860162001403565b91505092915050565b600080fd5b600067ffffffffffffffff821115620014ee57620014ed620010f3565b5b620014f982620010e2565b9050602081019050919050565b60005b838110156200152657808201518184015260208101905062001509565b60008484015250505050565b6000620015496200154384620014d0565b62001158565b905082815260208101848484011115620015685762001567620014cb565b5b6200157584828562001506565b509392505050565b600082601f830112620015955762001594620010dd565b5b8151620015a784826020860162001532565b91505092915050565b600060608284031215620015c957620015c8620011ab565b5b620015d5606062001158565b90506000620015e78482850162001203565b6000830152506020620015fd8482850162001203565b602083015250604082015167ffffffffffffffff811115620016245762001623620011b0565b5b62001632848285016200157d565b60408301525092915050565b60008060408385031215620016585762001657620010d3565b5b600083015167ffffffffffffffff811115620016795762001678620010d8565b5b620016878582860162001498565b925050602083015167ffffffffffffffff811115620016ab57620016aa620010d8565b5b620016b985828601620015b0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b620016fd81620011d5565b82525050565b60006020820190506200171a6000830184620016f2565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060ff82169050919050565b62001767816200174f565b82525050565b60006020820190506200178460008301846200175c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b6000620017d082620017b9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200180557620018046200178a565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6200184781620011d5565b82525050565b6003811062001861576200186062001720565b5b50565b600081905062001874826200184d565b919050565b6000620018868262001864565b9050919050565b620018988162001879565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b620018d58162001271565b82525050565b6000620018e98383620018ca565b60208301905092915050565b6000602082019050919050565b60006200190f826200189e565b6200191b8185620018a9565b93506200192883620018ba565b8060005b838110156200195f578151620019438882620018db565b97506200195083620018f5565b9250506001810190506200192c565b5085935050505092915050565b60006060830160008301516200198660008601826200183c565b5060208301516200199b60208601826200188d565b5060408301518482036040860152620019b5828262001902565b9150508091505092915050565b6000620019d083836200196c565b905092915050565b6000602082019050919050565b6000620019f28262001810565b620019fe81856200181b565b93508360208202850162001a12856200182c565b8060005b8581101562001a54578484038952815162001a328582620019c2565b945062001a3f83620019d8565b925060208a0199505060018101905062001a16565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b600062001a8f8262001a66565b62001a9b818562001a71565b935062001aad81856020860162001506565b62001ab881620010e2565b840191505092915050565b6000606082019050818103600083015262001adf8186620019e5565b905062001af06020830185620016f2565b818103604083015262001b04818462001a82565b9050949350505050565b600082825260208201905092915050565b600062001b2c826200189e565b62001b38818562001b0e565b935062001b4583620018ba565b8060005b8381101562001b7c57815162001b608882620018db565b975062001b6d83620018f5565b92505060018101905062001b49565b5085935050505092915050565b6000602082019050818103600083015262001ba5818462001b1f565b905092915050565b62001bb88162001271565b82525050565b600060208201905062001bd5600083018462001bad565b92915050565b600061ffff82169050919050565b600062001bf68262001bdb565b915061ffff820362001c0d5762001c0c6200178a565b5b600182019050919050565b600062001c2582620017b9565b91506000820362001c3b5762001c3a6200178a565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081905092915050565b600062001c8d8262001a66565b62001c99818562001c75565b935062001cab81856020860162001506565b80840191505092915050565b600062001cc5828462001c80565b915081905092915050565b600060408201905062001ce76000830185620016f2565b818103602083015262001cfb818462001a82565b90509392505050565b600081519050919050565b600082825260208201905092915050565b600062001d2d8262001d04565b62001d39818562001d0f565b935062001d4b81856020860162001506565b62001d5681620010e2565b840191505092915050565b600060408201905062001d786000830185620016f2565b818103602083015262001d8c818462001d20565b90509392505050565b6118ae8062001da56000396000f3fe60806040523661000b57005b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9050809150600082600001600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610167576000357fffffffff00000000000000000000000000000000000000000000000000000000166040517f5416eb9800000000000000000000000000000000000000000000000000000000815260040161015e9190611152565b60405180910390fd5b3660008037600080366000845af43d6000803e8060008114610188573d6000f35b3d6000fd5b6000610197610481565b905060008160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60005b83518110156104365760008482815181106102855761028461116d565b5b602002602001015160400151905060008583815181106102a8576102a761116d565b5b602002602001015160000151905060008251036102fc57806040517fe767f91f0000000000000000000000000000000000000000000000000000000081526004016102f391906111dd565b60405180910390fd5b60008684815181106103115761031061116d565b5b602002602001015160200151905060006002811115610333576103326111f8565b5b816002811115610346576103456111f8565b5b0361035a5761035582846104ae565b610420565b6001600281111561036e5761036d6111f8565b5b816002811115610381576103806111f8565b5b036103955761039082846107d6565b61041f565b6002808111156103a8576103a76111f8565b5b8160028111156103bb576103ba6111f8565b5b036103cf576103ca8284610b1c565b61041e565b8060028111156103e2576103e16111f8565b5b6040517f7fe9a41e0000000000000000000000000000000000000000000000000000000081526004016104159190611243565b60405180910390fd5b5b5b505050808061042e90611297565b915050610267565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161046a93929190611596565b60405180910390a161047c8282610fa3565b505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361051f57806040517f0ae3681c000000000000000000000000000000000000000000000000000000008152600401610516919061164a565b60405180910390fd5b6000610529610481565b905060008160010180549050905061055984604051806060016040528060248152602001611805602491396110c5565b60005b83518110156107cf57600084828151811061057a5761057961116d565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461067057816040517febbf5d070000000000000000000000000000000000000000000000000000000081526004016106679190611152565b60405180910390fd5b60405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018561ffff16815250856000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548161ffff021916908361ffff160217905550905050846001018290806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c021790555083806107b79061167a565b945050505080806107c790611297565b91505061055c565b5050505050565b60006107e0610481565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361085357816040517fcd98a96f00000000000000000000000000000000000000000000000000000000815260040161084a919061164a565b60405180910390fd5b61087583604051806060016040528060288152602001611851602891396110c5565b60005b8251811015610b165760008382815181106108965761089561116d565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361098b57816040517f520300da0000000000000000000000000000000000000000000000000000000081526004016109829190611152565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109fb57816040517f358d9d1a0000000000000000000000000000000000000000000000000000000081526004016109f29190611152565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a6c57816040517f7479f939000000000000000000000000000000000000000000000000000000008152600401610a639190611152565b60405180910390fd5b85846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050508080610b0e90611297565b915050610878565b50505050565b6000610b26610481565b9050600081600101805490509050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610ba557836040517fd091bc81000000000000000000000000000000000000000000000000000000008152600401610b9c91906111dd565b60405180910390fd5b60005b8351811015610f9c576000848281518110610bc657610bc561116d565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900461ffff1661ffff1661ffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610d1d57816040517f7a08a22d000000000000000000000000000000000000000000000000000000008152600401610d149190611152565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610d9157816040517f6fafeb08000000000000000000000000000000000000000000000000000000008152600401610d889190611152565b60405180910390fd5b8380610d9c906116a4565b94505083816020015161ffff1614610eb1576000856001018581548110610dc657610dc561116d565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b90508086600101836020015161ffff1681548110610e0a57610e0961116d565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c02179055508160200151866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a81548161ffff021916908361ffff160217905550505b84600101805480610ec557610ec46116cd565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549061ffff0219169055505050508080610f9490611297565b915050610ba8565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603156110c157610ffa82604051806060016040528060288152602001611829602891396110c5565b6000808373ffffffffffffffffffffffffffffffffffffffff16836040516110229190611738565b600060405180830381855af49150503d806000811461105d576040519150601f19603f3d011682016040523d82523d6000602084013e611062565b606091505b5091509150816110be5760008151111561107f5780518082602001fd5b83836040517f192105d70000000000000000000000000000000000000000000000000000000081526004016110b592919061174f565b60405180910390fd5b50505b5050565b6000823b9050600081036111125782826040517f919834b90000000000000000000000000000000000000000000000000000000081526004016111099291906117d4565b60405180910390fd5b505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61114c81611117565b82525050565b60006020820190506111676000830184611143565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111c78261119c565b9050919050565b6111d7816111bc565b82525050565b60006020820190506111f260008301846111ce565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060ff82169050919050565b61123d81611227565b82525050565b60006020820190506112586000830184611234565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b60006112a28261128d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036112d4576112d361125e565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611314816111bc565b82525050565b6003811061132b5761132a6111f8565b5b50565b600081905061133c8261131a565b919050565b600061134c8261132e565b9050919050565b61135c81611341565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61139781611117565b82525050565b60006113a9838361138e565b60208301905092915050565b6000602082019050919050565b60006113cd82611362565b6113d7818561136d565b93506113e28361137e565b8060005b838110156114135781516113fa888261139d565b9750611405836113b5565b9250506001810190506113e6565b5085935050505092915050565b6000606083016000830151611438600086018261130b565b50602083015161144b6020860182611353565b506040830151848203604086015261146382826113c2565b9150508091505092915050565b600061147c8383611420565b905092915050565b6000602082019050919050565b600061149c826112df565b6114a681856112ea565b9350836020820285016114b8856112fb565b8060005b858110156114f457848403895281516114d58582611470565b94506114e083611484565b925060208a019950506001810190506114bc565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611540578082015181840152602081019050611525565b60008484015250505050565b6000601f19601f8301169050919050565b600061156882611506565b6115728185611511565b9350611582818560208601611522565b61158b8161154c565b840191505092915050565b600060608201905081810360008301526115b08186611491565b90506115bf60208301856111ce565b81810360408301526115d1818461155d565b9050949350505050565b600082825260208201905092915050565b60006115f782611362565b61160181856115db565b935061160c8361137e565b8060005b8381101561163d578151611624888261139d565b975061162f836113b5565b925050600181019050611610565b5085935050505092915050565b6000602082019050818103600083015261166481846115ec565b905092915050565b600061ffff82169050919050565b60006116858261166c565b915061ffff82036116995761169861125e565b5b600182019050919050565b60006116af8261128d565b9150600082036116c2576116c161125e565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081905092915050565b600061171282611506565b61171c81856116fc565b935061172c818560208601611522565b80840191505092915050565b60006117448284611707565b915081905092915050565b600060408201905061176460008301856111ce565b8181036020830152611776818461155d565b90509392505050565b600081519050919050565b600082825260208201905092915050565b60006117a68261177f565b6117b0818561178a565b93506117c0818560208601611522565b6117c98161154c565b840191505092915050565b60006040820190506117e960008301856111ce565b81810360208301526117fb818461179b565b9050939250505056fe4c69624469616d6f6e644375743a2041646420666163657420686173206e6f20636f64654c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a205265706c61636520666163657420686173206e6f20636f6465a2646970667358221220c1e58a49e314c0fadd33c396cb6360695d84c9973d44dcc5eaca882385794c8c64736f6c634300081100334c69624469616d6f6e644375743a2041646420666163657420686173206e6f20636f64654c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a205265706c61636520666163657420686173206e6f20636f646500000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000700000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000018000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000003600000000000000000000000000000000000000000000000000000000000000680000000000000000000000000000000000000000000000000000000000000088000000000000000000000000000000000000000000000000000000000000009a000000000000000000000000031b26cafc85a3d37f18e2f4a56ee0513b477d1180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000011f931c1c0000000000000000000000000000000000000000000000000000000000000000000000000000000066d880d7d3dd16fa28e61f8ca68f03dc924c582f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000005cdffacc60000000000000000000000000000000000000000000000000000000052ef6b2c00000000000000000000000000000000000000000000000000000000adfca15e000000000000000000000000000000000000000000000000000000007a0ed6270000000000000000000000000000000000000000000000000000000001ffc9a70000000000000000000000000000000000000000000000000000000000000000000000000000000097c254ffb0cf40c9b22224bbcb9290d519b254e20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000028da5cb5b00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000000000000000000000000000b8d6a3e525de4fc1de6198d0804ee880532ff7f4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000015e58306f900000000000000000000000000000000000000000000000000000000095ea7b30000000000000000000000000000000000000000000000000000000070a08231000000000000000000000000000000000000000000000000000000002611e12700000000000000000000000000000000000000000000000000000000c23dc68f000000000000000000000000000000000000000000000000000000005bbb217700000000000000000000000000000000000000000000000000000000081812fc000000000000000000000000000000000000000000000000000000008129fc1c00000000000000000000000000000000000000000000000000000000e985e9c500000000000000000000000000000000000000000000000000000000641ce1400000000000000000000000000000000000000000000000000000000006fdde03000000000000000000000000000000000000000000000000000000006352211e0000000000000000000000000000000000000000000000000000000042842e0e00000000000000000000000000000000000000000000000000000000b88d4fde00000000000000000000000000000000000000000000000000000000a22cb4650000000000000000000000000000000000000000000000000000000095d89b4100000000000000000000000000000000000000000000000000000000c87b56dd000000000000000000000000000000000000000000000000000000008462151c0000000000000000000000000000000000000000000000000000000099a2557a0000000000000000000000000000000000000000000000000000000018160ddd0000000000000000000000000000000000000000000000000000000023b872dd000000000000000000000000000000000000000000000000000000000000000000000000000000008f2d61e8edde239366e8938ba6459c5eba4f11e900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000c67c897fe000000000000000000000000000000000000000000000000000000008456cb590000000000000000000000000000000000000000000000000000000055f804b3000000000000000000000000000000000000000000000000000000006f8b44b00000000000000000000000000000000000000000000000000000000092f6c43900000000000000000000000000000000000000000000000000000000b7126e77000000000000000000000000000000000000000000000000000000007a91bd34000000000000000000000000000000000000000000000000000000000e1812290000000000000000000000000000000000000000000000000000000091b7f5ed00000000000000000000000000000000000000000000000000000000ef38d8b200000000000000000000000000000000000000000000000000000000fa10197700000000000000000000000000000000000000000000000000000000cae43fd80000000000000000000000000000000000000000000000000000000000000000000000000000000079ec1df2aca48deecd6f479f45fd7b475c44eca300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000536fdc63c00000000000000000000000000000000000000000000000000000000604ba39e00000000000000000000000000000000000000000000000000000000b1c1ab1b00000000000000000000000000000000000000000000000000000000b552a471000000000000000000000000000000000000000000000000000000002a55205a00000000000000000000000000000000000000000000000000000000000000000000000000000000956f3de29f85fda97ebb059f9c40ae6fd859cf6500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000c8b83209b000000000000000000000000000000000000000000000000000000004e8086aa000000000000000000000000000000000000000000000000000000004b5bed1b0000000000000000000000000000000000000000000000000000000000f4e1210000000000000000000000000000000000000000000000000000000050b2ee1d000000000000000000000000000000000000000000000000000000002561de4900000000000000000000000000000000000000000000000000000000b021e03e0000000000000000000000000000000000000000000000000000000053bd5c9a00000000000000000000000000000000000000000000000000000000ce7c2ac200000000000000000000000000000000000000000000000000000000d79779b200000000000000000000000000000000000000000000000000000000e33b7de3000000000000000000000000000000000000000000000000000000003a98ef3900000000000000000000000000000000000000000000000000000000000000000000000000000000089c8e678e4db12971f78db08f86fe69b85454d0000000000000000000000000259361580aeb14ca575dc4448c441429cd7f352a000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000004044ddf47d4000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000003c000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000026000000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000648b5fb000000000000000000000000000000000000000000000000000000000648b5fb0000000000000000000000000089c8e678e4db12971f78db08f86fe69b85454d000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002e0000000000000000000000000089c8e678e4db12971f78db08f86fe69b85454d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000648b5fb00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000001a486f74204c6971756f7220616e64205761726d20536872696d7000000000000000000000000000000000000000000000000000000000000000000000000000045741524d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000089c8e678e4db12971f78db08f86fe69b85454d000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000004f68747470733a2f2f6261747465722d6170692e6865726f6b756170702e636f6d2f76312f636f6c6c656374696f6e2f3634383963366266366464306663653733643538366130622f746f6b656e732f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040523661000b57005b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9050809150600082600001600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610167576000357fffffffff00000000000000000000000000000000000000000000000000000000166040517f5416eb9800000000000000000000000000000000000000000000000000000000815260040161015e9190611152565b60405180910390fd5b3660008037600080366000845af43d6000803e8060008114610188573d6000f35b3d6000fd5b6000610197610481565b905060008160030160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260030160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b60005b83518110156104365760008482815181106102855761028461116d565b5b602002602001015160400151905060008583815181106102a8576102a761116d565b5b602002602001015160000151905060008251036102fc57806040517fe767f91f0000000000000000000000000000000000000000000000000000000081526004016102f391906111dd565b60405180910390fd5b60008684815181106103115761031061116d565b5b602002602001015160200151905060006002811115610333576103326111f8565b5b816002811115610346576103456111f8565b5b0361035a5761035582846104ae565b610420565b6001600281111561036e5761036d6111f8565b5b816002811115610381576103806111f8565b5b036103955761039082846107d6565b61041f565b6002808111156103a8576103a76111f8565b5b8160028111156103bb576103ba6111f8565b5b036103cf576103ca8284610b1c565b61041e565b8060028111156103e2576103e16111f8565b5b6040517f7fe9a41e0000000000000000000000000000000000000000000000000000000081526004016104159190611243565b60405180910390fd5b5b5b505050808061042e90611297565b915050610267565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161046a93929190611596565b60405180910390a161047c8282610fa3565b505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361051f57806040517f0ae3681c000000000000000000000000000000000000000000000000000000008152600401610516919061164a565b60405180910390fd5b6000610529610481565b905060008160010180549050905061055984604051806060016040528060248152602001611805602491396110c5565b60005b83518110156107cf57600084828151811061057a5761057961116d565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461067057816040517febbf5d070000000000000000000000000000000000000000000000000000000081526004016106679190611152565b60405180910390fd5b60405180604001604052808873ffffffffffffffffffffffffffffffffffffffff1681526020018561ffff16815250856000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548161ffff021916908361ffff160217905550905050846001018290806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c021790555083806107b79061167a565b945050505080806107c790611297565b91505061055c565b5050505050565b60006107e0610481565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361085357816040517fcd98a96f00000000000000000000000000000000000000000000000000000000815260040161084a919061164a565b60405180910390fd5b61087583604051806060016040528060288152602001611851602891396110c5565b60005b8251811015610b165760008382815181106108965761089561116d565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361098b57816040517f520300da0000000000000000000000000000000000000000000000000000000081526004016109829190611152565b60405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109fb57816040517f358d9d1a0000000000000000000000000000000000000000000000000000000081526004016109f29190611152565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a6c57816040517f7479f939000000000000000000000000000000000000000000000000000000008152600401610a639190611152565b60405180910390fd5b85846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050508080610b0e90611297565b915050610878565b50505050565b6000610b26610481565b9050600081600101805490509050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610ba557836040517fd091bc81000000000000000000000000000000000000000000000000000000008152600401610b9c91906111dd565b60405180910390fd5b60005b8351811015610f9c576000848281518110610bc657610bc561116d565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900461ffff1661ffff1661ffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610d1d57816040517f7a08a22d000000000000000000000000000000000000000000000000000000008152600401610d149190611152565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610d9157816040517f6fafeb08000000000000000000000000000000000000000000000000000000008152600401610d889190611152565b60405180910390fd5b8380610d9c906116a4565b94505083816020015161ffff1614610eb1576000856001018581548110610dc657610dc561116d565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b90508086600101836020015161ffff1681548110610e0a57610e0961116d565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c02179055508160200151866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a81548161ffff021916908361ffff160217905550505b84600101805480610ec557610ec46116cd565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a81549061ffff0219169055505050508080610f9490611297565b915050610ba8565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603156110c157610ffa82604051806060016040528060288152602001611829602891396110c5565b6000808373ffffffffffffffffffffffffffffffffffffffff16836040516110229190611738565b600060405180830381855af49150503d806000811461105d576040519150601f19603f3d011682016040523d82523d6000602084013e611062565b606091505b5091509150816110be5760008151111561107f5780518082602001fd5b83836040517f192105d70000000000000000000000000000000000000000000000000000000081526004016110b592919061174f565b60405180910390fd5b50505b5050565b6000823b9050600081036111125782826040517f919834b90000000000000000000000000000000000000000000000000000000081526004016111099291906117d4565b60405180910390fd5b505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61114c81611117565b82525050565b60006020820190506111676000830184611143565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006111c78261119c565b9050919050565b6111d7816111bc565b82525050565b60006020820190506111f260008301846111ce565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060ff82169050919050565b61123d81611227565b82525050565b60006020820190506112586000830184611234565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b60006112a28261128d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036112d4576112d361125e565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611314816111bc565b82525050565b6003811061132b5761132a6111f8565b5b50565b600081905061133c8261131a565b919050565b600061134c8261132e565b9050919050565b61135c81611341565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61139781611117565b82525050565b60006113a9838361138e565b60208301905092915050565b6000602082019050919050565b60006113cd82611362565b6113d7818561136d565b93506113e28361137e565b8060005b838110156114135781516113fa888261139d565b9750611405836113b5565b9250506001810190506113e6565b5085935050505092915050565b6000606083016000830151611438600086018261130b565b50602083015161144b6020860182611353565b506040830151848203604086015261146382826113c2565b9150508091505092915050565b600061147c8383611420565b905092915050565b6000602082019050919050565b600061149c826112df565b6114a681856112ea565b9350836020820285016114b8856112fb565b8060005b858110156114f457848403895281516114d58582611470565b94506114e083611484565b925060208a019950506001810190506114bc565b50829750879550505050505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611540578082015181840152602081019050611525565b60008484015250505050565b6000601f19601f8301169050919050565b600061156882611506565b6115728185611511565b9350611582818560208601611522565b61158b8161154c565b840191505092915050565b600060608201905081810360008301526115b08186611491565b90506115bf60208301856111ce565b81810360408301526115d1818461155d565b9050949350505050565b600082825260208201905092915050565b60006115f782611362565b61160181856115db565b935061160c8361137e565b8060005b8381101561163d578151611624888261139d565b975061162f836113b5565b925050600181019050611610565b5085935050505092915050565b6000602082019050818103600083015261166481846115ec565b905092915050565b600061ffff82169050919050565b60006116858261166c565b915061ffff82036116995761169861125e565b5b600182019050919050565b60006116af8261128d565b9150600082036116c2576116c161125e565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600081905092915050565b600061171282611506565b61171c81856116fc565b935061172c818560208601611522565b80840191505092915050565b60006117448284611707565b915081905092915050565b600060408201905061176460008301856111ce565b8181036020830152611776818461155d565b90509392505050565b600081519050919050565b600082825260208201905092915050565b60006117a68261177f565b6117b0818561178a565b93506117c0818560208601611522565b6117c98161154c565b840191505092915050565b60006040820190506117e960008301856111ce565b81810360208301526117fb818461179b565b9050939250505056fe4c69624469616d6f6e644375743a2041646420666163657420686173206e6f20636f64654c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a205265706c61636520666163657420686173206e6f20636f6465a2646970667358221220c1e58a49e314c0fadd33c396cb6360695d84c9973d44dcc5eaca882385794c8c64736f6c63430008110033

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.