ETH Price: $3,182.32 (+3.11%)

Token

smol studio (SmolStudio)
 

Overview

Max Total Supply

5,809 SmolStudio

Holders

562

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
froggie.eth
0x0f1025f754b3eb32ab3105127b563084bfa03a6f
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
SmolStudio

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
No with 999999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-11-13
*/

pragma solidity >=0.5.0 <0.6.0;

/*
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with GSN meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */


/*

                                       ##
                                    @%...%@
                                   @@..*,*@@
                                    @@,,,%@
               @@@@@@@@@              @@.@%             @@@@@@@@&
          @@@@@/......./@@@           @@.@%         /@@@/......./@@@@@
       &@@@...............@@@         @@.@%        @@@...............@@@
      @@@......&@@@........@@@@@@@@@@@@@@@@@@@@@@@@@@......@@@@........@@@
     &@@......@@@  @@....................................@@@@  @/.......@@
      @@......@@@@@@......................................@@@@@@........@@
      @@@..........................(,.......@,........................*@@@
      @@@%.........................#@@@@@@@@@.........................#@@@@
    @@@,.....*********...................................*********........@@@
  @@@**.......*******,....................................********..........@@@
 @@@,*......................................................................,@@@
 @@*,*......................................................................,*@@
 @@,,,......................................................................,,@@
 @@#,*.....................................................................,,(@@
  @@(**...................................................................,*,@@
   @@@**.................................................................**|@@
     @@@,,..............................................................,,@@@
       @@@@*..........................................................**@@@
          @@@@*.....................................................,@@@@
             *@@@@@..............................................@@@@@
                   @@@@@@@@,...................................@@@
                           &@@@..................................@@@
                         %@@@@...................................*@@@
                       @@@.......................................**@@
                      #@@@......................................,,,@@
                         @@@@@*.................................,*#@@
                          (@@@,................................*,*@@
                      (@@@@,..................................***@@
                    (@@,....................................,,,@@@
                    (@@....................................*|@@@
                      @@@@@@,.........................*@@@@@@/
                           *@@@@@@@@@@@@@@@@@@@@@@@@@@@/

*/


contract Context {
    // Empty internal constructor, to prevent people from mistakenly deploying
    // an instance of this contract, which should be used via inheritance.
    constructor () internal { }
    // solhint-disable-previous-line no-empty-blocks

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return _msgSender() == _owner;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "ownable: new studio owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev Give an account access to this role.
     */
    function add(Role storage role, address account) internal {
        require(!has(role, account), "roles: account already has requested role");
        role.bearer[account] = true;
    }

    /**
     * @dev Remove an account's access to this role.
     */
    function remove(Role storage role, address account) internal {
        require(has(role, account), "roles: account does not have needed role");
        role.bearer[account] = false;
    }

    /**
     * @dev Check if an account has this role.
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0), "roles: account is the zero address");
        return role.bearer[account];
    }
}

contract MinterRole is Context {
    using Roles for Roles.Role;

    event MinterAdded(address indexed account);
    event MinterRemoved(address indexed account);

    Roles.Role private _minters;

    constructor () internal {
        _addMinter(_msgSender());
    }

    modifier onlyMinter() {
        require(isMinter(_msgSender()), "minterRole: caller does not have the beeg nft minter role");
        _;
    }

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

    function addMinter(address account) public onlyMinter {
        _addMinter(account);
    }

    function renounceMinter() public {
        _removeMinter(_msgSender());
    }

    function _addMinter(address account) internal {
        _minters.add(account);
        emit MinterAdded(account);
    }

    function _removeMinter(address account) internal {
        _minters.remove(account);
        emit MinterRemoved(account);
    }
}

/**
 * @title WhitelistAdminRole
 * @dev WhitelistAdmins are responsible for assigning and removing Whitelisted accounts.
 */
contract WhitelistAdminRole is Context {
    using Roles for Roles.Role;

    event WhitelistAdminAdded(address indexed account);
    event WhitelistAdminRemoved(address indexed account);

    Roles.Role private _whitelistAdmins;

    constructor () internal {
        _addWhitelistAdmin(_msgSender());
    }

    modifier onlyWhitelistAdmin() {
        require(isWhitelistAdmin(_msgSender()), "whitelistadminrole: caller does not have the beeg whitelistadmin ting");
        _;
    }

    function isWhitelistAdmin(address account) public view returns (bool) {
        return _whitelistAdmins.has(account);
    }

    function addWhitelistAdmin(address account) public onlyWhitelistAdmin {
        _addWhitelistAdmin(account);
    }

    function renounceWhitelistAdmin() public {
        _removeWhitelistAdmin(_msgSender());
    }

    function _addWhitelistAdmin(address account) internal {
        _whitelistAdmins.add(account);
        emit WhitelistAdminAdded(account);
    }

    function _removeWhitelistAdmin(address account) internal {
        _whitelistAdmins.remove(account);
        emit WhitelistAdminRemoved(account);
    }
}

/**
 * @title ERC165
 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md
 */
interface IERC165 {

    /**
     * @notice Query if a contract implements an interface
     * @dev Interface identification is specified in ERC-165. This function
     * uses less than 30,000 gas
     * @param _interfaceId The interface identifier, as specified in ERC-165
     */
    function supportsInterface(bytes4 _interfaceId)
    external
    view
    returns (bool);
}

/**
 * @title SafeMath
 * @dev Unsigned math operations with safety checks that revert on error
 */
library SafeMath {

    /**
     * @dev Multiplies two unsigned integers, reverts on overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "safemath#mul: OVERFLOW");

        return c;
    }

    /**
     * @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, "safemath#div: DIVISION_BY_ZERO");
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "safemath#sub: UNDERFLOW");
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Adds two unsigned integers, reverts on overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "safemath#add: OVERFLOW");

        return c;
    }

    /**
     * @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
     * reverts when dividing by zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b != 0, "safemath#mod: DIVISION_BY_ZERO");
        return a % b;
    }

}

/**
 * @dev ERC-1155 interface for accepting safe transfers.
 */
interface IERC1155TokenReceiver {

    /**
     * @notice Handle the receipt of a single ERC1155 token type
     * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeTransferFrom` after the balance has been updated
     * This function MAY throw to revert and reject the transfer
     * Return of other amount than the magic value MUST result in the transaction being reverted
     * Note: The token contract address is always the message sender
     * @param _operator  The address which called the `safeTransferFrom` function
     * @param _from      The address which previously owned the token
     * @param _id        The id of the token being transferred
     * @param _amount    The amount of tokens being transferred
     * @param _data      Additional data with no specified format
     * @return           `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     */
    function onERC1155Received(address _operator, address _from, uint256 _id, uint256 _amount, bytes calldata _data) external returns(bytes4);

    /**
     * @notice Handle the receipt of multiple ERC1155 token types
     * @dev An ERC1155-compliant smart contract MUST call this function on the token recipient contract, at the end of a `safeBatchTransferFrom` after the balances have been updated
     * This function MAY throw to revert and reject the transfer
     * Return of other amount than the magic value WILL result in the transaction being reverted
     * Note: The token contract address is always the message sender
     * @param _operator  The address which called the `safeBatchTransferFrom` function
     * @param _from      The address which previously owned the token
     * @param _ids       An array containing ids of each token being transferred
     * @param _amounts   An array containing amounts of each token being transferred
     * @param _data      Additional data with no specified format
     * @return           `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     */
    function onERC1155BatchReceived(address _operator, address _from, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external returns(bytes4);

    /**
     * @notice Indicates whether a contract implements the `ERC1155TokenReceiver` functions and so can accept ERC1155 token types.
     * @param  interfaceID The ERC-165 interface ID that is queried for support.s
     * @dev This function MUST return true if it implements the ERC1155TokenReceiver interface and ERC-165 interface.
     *      This function MUST NOT consume more than 5,000 gas.
     * @return Wheter ERC-165 or ERC1155TokenReceiver interfaces are supported.
     */
    function supportsInterface(bytes4 interfaceID) external view returns (bool);

}

interface IERC1155 {
    // Events

    /**
     * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning
     *   Operator MUST be msg.sender
     *   When minting/creating tokens, the `_from` field MUST be set to `0x0`
     *   When burning/destroying tokens, the `_to` field MUST be set to `0x0`
     *   The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID
     *   To broadcast the existence of a token ID with no initial balance, the contract SHOULD emit the TransferSingle event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0
     */
    event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount);

    /**
     * @dev Either TransferSingle or TransferBatch MUST emit when tokens are transferred, including zero amount transfers as well as minting or burning
     *   Operator MUST be msg.sender
     *   When minting/creating tokens, the `_from` field MUST be set to `0x0`
     *   When burning/destroying tokens, the `_to` field MUST be set to `0x0`
     *   The total amount transferred from address 0x0 minus the total amount transferred to 0x0 may be used by clients and exchanges to be added to the "circulating supply" for a given token ID
     *   To broadcast the existence of multiple token IDs with no initial balance, this SHOULD emit the TransferBatch event from `0x0` to `0x0`, with the token creator as `_operator`, and a `_amount` of 0
     */
    event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts);

    /**
     * @dev MUST emit when an approval is updated
     */
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

    /**
     * @dev MUST emit when the URI is updated for a token ID
     *   URIs are defined in RFC 3986
     *   The URI MUST point a JSON file that conforms to the "ERC-1155 Metadata JSON Schema"
     */
    event URI(string _amount, uint256 indexed _id);

    /**
     * @notice Transfers amount of an _id from the _from address to the _to address specified
     * @dev MUST emit TransferSingle event on success
     * Caller must be approved to manage the _from account's tokens (see isApprovedForAll)
     * MUST throw if `_to` is the zero address
     * MUST throw if balance of sender for token `_id` is lower than the `_amount` sent
     * MUST throw on any other error
     * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155Received` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * @param _from    Source address
     * @param _to      Target address
     * @param _id      ID of the token type
     * @param _amount  Transfered amount
     * @param _data    Additional data with no specified format, sent in call to `_to`
     */
    function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes calldata _data) external;

    /**
     * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call)
     * @dev MUST emit TransferBatch event on success
     * Caller must be approved to manage the _from account's tokens (see isApprovedForAll)
     * MUST throw if `_to` is the zero address
     * MUST throw if length of `_ids` is not the same as length of `_amounts`
     * MUST throw if any of the balance of sender for token `_ids` is lower than the respective `_amounts` sent
     * MUST throw on any other error
     * When transfer is complete, this function MUST check if `_to` is a smart contract (code size > 0). If so, it MUST call `onERC1155BatchReceived` on `_to` and revert if the return amount is not `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * Transfers and events MUST occur in the array order they were submitted (_ids[0] before _ids[1], etc)
     * @param _from     Source addresses
     * @param _to       Target addresses
     * @param _ids      IDs of each token type
     * @param _amounts  Transfer amounts per token type
     * @param _data     Additional data with no specified format, sent in call to `_to`
    */
    function safeBatchTransferFrom(address _from, address _to, uint256[] calldata _ids, uint256[] calldata _amounts, bytes calldata _data) external;

    /**
     * @notice Get the balance of an account's Tokens
     * @param _owner  The address of the token holder
     * @param _id     ID of the Token
     * @return        The _owner's balance of the Token type requested
     */
    function balanceOf(address _owner, uint256 _id) external view returns (uint256);

    /**
     * @notice Get the balance of multiple account/token pairs
     * @param _owners The addresses of the token holders
     * @param _ids    ID of the Tokens
     * @return        The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair)
     */
    function balanceOfBatch(address[] calldata _owners, uint256[] calldata _ids) external view returns (uint256[] memory);

    /**
     * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens
     * @dev MUST emit the ApprovalForAll event on success
     * @param _operator  Address to add to the set of authorized operators
     * @param _approved  True if the operator is approved, false to revoke approval
     */
    function setApprovalForAll(address _operator, bool _approved) external;

    /**
     * @notice Queries the approval status of an operator for a given owner
     * @param _owner     The owner of the Tokens
     * @param _operator  Address of authorized operator
     * @return           True if the operator is approved, false if not
     */
    function isApprovedForAll(address _owner, address _operator) external view returns (bool isOperator);

}

/**
 * Copyright 2018 ZeroEx Intl.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *   http://www.apache.org/licenses/LICENSE-2.0
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/**
 * Utility library of inline functions on addresses
 */
library Address {

    /**
     * Returns whether the target address is a contract
     * @dev This function will return false if invoked during the constructor of a contract,
     * as the code is not actually created until after the constructor finishes.
     * @param account address of the account to check
     * @return whether the target address is a contract
     */
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;

        // XXX Currently there is no better way to check if there is a contract in an address
        // than to check the size of the code at that address.
        // See https://ethereum.stackexchange.com/a/14016/36603
        // for more details about how this works.
        // TODO Check this again before the Serenity release, because all addresses will be
        // contracts then.
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }

}

/**
 * @dev Implementation of Multi-Token Standard contract
 */
contract ERC1155 is IERC165 {
    using SafeMath for uint256;
    using Address for address;


    /***********************************|
    |        Variables and Events       |
    |__________________________________*/

    // onReceive function signatures
    bytes4 constant internal ERC1155_RECEIVED_VALUE = 0xf23a6e61;
    bytes4 constant internal ERC1155_BATCH_RECEIVED_VALUE = 0xbc197c81;

    // Objects balances
    mapping (address => mapping(uint256 => uint256)) internal balances;

    // Operator Functions
    mapping (address => mapping(address => bool)) internal operators;

    // Events
    event TransferSingle(address indexed _operator, address indexed _from, address indexed _to, uint256 _id, uint256 _amount);
    event TransferBatch(address indexed _operator, address indexed _from, address indexed _to, uint256[] _ids, uint256[] _amounts);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);
    event URI(string _uri, uint256 indexed _id);


    /***********************************|
    |     Public Transfer Functions     |
    |__________________________________*/

    /**
     * @notice Transfers amount amount of an _id from the _from address to the _to address specified
     * @param _from    Source address
     * @param _to      Target address
     * @param _id      ID of the token type
     * @param _amount  Transfered amount
     * @param _data    Additional data with no specified format, sent in call to `_to`
     */
    function safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount, bytes memory _data)
    public
    {
        require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "erc1155#safetransferfrom: INVALID_OPERATOR");
        require(_to != address(0),"erc1155#safetransferfrom: INVALID_RECIPIENT");
        // require(_amount >= balances[_from][_id]) is not necessary since checked with safemath operations

        _safeTransferFrom(_from, _to, _id, _amount);
        _callonERC1155Received(_from, _to, _id, _amount, _data);
    }

    /**
     * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call)
     * @param _from     Source addresses
     * @param _to       Target addresses
     * @param _ids      IDs of each token type
     * @param _amounts  Transfer amounts per token type
     * @param _data     Additional data with no specified format, sent in call to `_to`
     */
    function safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data)
    public
    {
        // Requirements
        require((msg.sender == _from) || isApprovedForAll(_from, msg.sender), "erc1155#safebatchtransferfrom: INVALID_OPERATOR");
        require(_to != address(0), "erc1155#safebatchtransferfrom: INVALID_RECIPIENT");

        _safeBatchTransferFrom(_from, _to, _ids, _amounts);
        _callonERC1155BatchReceived(_from, _to, _ids, _amounts, _data);
    }


    /***********************************|
    |    Internal Transfer Functions    |
    |__________________________________*/

    /**
     * @notice Transfers amount amount of an _id from the _from address to the _to address specified
     * @param _from    Source address
     * @param _to      Target address
     * @param _id      ID of the token type
     * @param _amount  Transfered amount
     */
    function _safeTransferFrom(address _from, address _to, uint256 _id, uint256 _amount)
    internal
    {
        // Update balances
        balances[_from][_id] = balances[_from][_id].sub(_amount); // Subtract amount
        balances[_to][_id] = balances[_to][_id].add(_amount);     // Add amount

        // Emit event
        emit TransferSingle(msg.sender, _from, _to, _id, _amount);
    }

    /**
     * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155Received(...)
     */
    function _callonERC1155Received(address _from, address _to, uint256 _id, uint256 _amount, bytes memory _data)
    internal
    {
        // Check if recipient is contract
        if (_to.isContract()) {
            bytes4 retval = IERC1155TokenReceiver(_to).onERC1155Received(msg.sender, _from, _id, _amount, _data);
            require(retval == ERC1155_RECEIVED_VALUE, "erc1155#_callonerc1155received: INVALID_ON_RECEIVE_MESSAGE");
        }
    }

    /**
     * @notice Send multiple types of Tokens from the _from address to the _to address (with safety call)
     * @param _from     Source addresses
     * @param _to       Target addresses
     * @param _ids      IDs of each token type
     * @param _amounts  Transfer amounts per token type
     */
    function _safeBatchTransferFrom(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts)
    internal
    {
        require(_ids.length == _amounts.length, "erc1155#_safebatchtransferfrom: INVALID_ARRAYS_LENGTH");

        // Number of transfer to execute
        uint256 nTransfer = _ids.length;

        // Executing all transfers
        for (uint256 i = 0; i < nTransfer; i++) {
            // Update storage balance of previous bin
            balances[_from][_ids[i]] = balances[_from][_ids[i]].sub(_amounts[i]);
            balances[_to][_ids[i]] = balances[_to][_ids[i]].add(_amounts[i]);
        }

        // Emit event
        emit TransferBatch(msg.sender, _from, _to, _ids, _amounts);
    }

    /**
     * @notice Verifies if receiver is contract and if so, calls (_to).onERC1155BatchReceived(...)
     */
    function _callonERC1155BatchReceived(address _from, address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data)
    internal
    {
        // Pass data if recipient is contract
        if (_to.isContract()) {
            bytes4 retval = IERC1155TokenReceiver(_to).onERC1155BatchReceived(msg.sender, _from, _ids, _amounts, _data);
            require(retval == ERC1155_BATCH_RECEIVED_VALUE, "erc1155#_callonerc1155batchreceived: INVALID_ON_RECEIVE_MESSAGE");
        }
    }


    /***********************************|
    |         Operator Functions        |
    |__________________________________*/

    /**
     * @notice Enable or disable approval for a third party ("operator") to manage all of caller's tokens
     * @param _operator  Address to add to the set of authorized operators
     * @param _approved  True if the operator is approved, false to revoke approval
     */
    function setApprovalForAll(address _operator, bool _approved)
    external
    {
        // Update operator status
        operators[msg.sender][_operator] = _approved;
        emit ApprovalForAll(msg.sender, _operator, _approved);
    }

    /**
     * @notice Queries the approval status of an operator for a given owner
     * @param _owner     The owner of the Tokens
     * @param _operator  Address of authorized operator
     * @return True if the operator is approved, false if not
     */
    function isApprovedForAll(address _owner, address _operator)
    public view returns (bool isOperator)
    {
        return operators[_owner][_operator];
    }


    /***********************************|
    |         Balance Functions         |
    |__________________________________*/

    /**
     * @notice Get the balance of an account's Tokens
     * @param _owner  The address of the token holder
     * @param _id     ID of the Token
     * @return The _owner's balance of the Token type requested
     */
    function balanceOf(address _owner, uint256 _id)
    public view returns (uint256)
    {
        return balances[_owner][_id];
    }

    /**
     * @notice Get the balance of multiple account/token pairs
     * @param _owners The addresses of the token holders
     * @param _ids    ID of the Tokens
     * @return        The _owner's balance of the Token types requested (i.e. balance for each (owner, id) pair)
     */
    function balanceOfBatch(address[] memory _owners, uint256[] memory _ids)
    public view returns (uint256[] memory)
    {
        require(_owners.length == _ids.length, "erc1155#balanceofbatch: INVALID_ARRAY_LENGTH");

        // Variables
        uint256[] memory batchBalances = new uint256[](_owners.length);

        // Iterate over each owner and token ID
        for (uint256 i = 0; i < _owners.length; i++) {
            batchBalances[i] = balances[_owners[i]][_ids[i]];
        }

        return batchBalances;
    }


    /***********************************|
    |          ERC165 Functions         |
    |__________________________________*/

    /**
     * INTERFACE_SIGNATURE_ERC165 = bytes4(keccak256("supportsInterface(bytes4)"));
     */
    bytes4 constant private INTERFACE_SIGNATURE_ERC165 = 0x01ffc9a7;

    /**
     * INTERFACE_SIGNATURE_ERC1155 =
     * bytes4(keccak256("safeTransferFrom(address,address,uint256,uint256,bytes)")) ^
     * bytes4(keccak256("safeBatchTransferFrom(address,address,uint256[],uint256[],bytes)")) ^
     * bytes4(keccak256("balanceOf(address,uint256)")) ^
     * bytes4(keccak256("balanceOfBatch(address[],uint256[])")) ^
     * bytes4(keccak256("setApprovalForAll(address,bool)")) ^
     * bytes4(keccak256("isApprovedForAll(address,address)"));
     */
    bytes4 constant private INTERFACE_SIGNATURE_ERC1155 = 0xd9b67a26;

    /**
     * @notice Query if a contract implements an interface
     * @param _interfaceID  The interface identifier, as specified in ERC-165
     * @return `true` if the contract implements `_interfaceID` and
     */
    function supportsInterface(bytes4 _interfaceID) external view returns (bool) {
        if (_interfaceID == INTERFACE_SIGNATURE_ERC165 ||
            _interfaceID == INTERFACE_SIGNATURE_ERC1155) {
            return true;
        }
        return false;
    }

}

/**
 * @notice Contract that handles metadata related methods.
 * @dev Methods assume a deterministic generation of URI based on token IDs.
 *      Methods also assume that URI uses hex representation of token IDs.
 */
contract ERC1155Metadata {

    // URI's default URI prefix
    string internal baseMetadataURI;
    event URI(string _uri, uint256 indexed _id);


    /***********************************|
    |     Metadata Public Function s    |
    |__________________________________*/

    /**
     * @notice A distinct Uniform Resource Identifier (URI) for a given token.
     * @dev URIs are defined in RFC 3986.
     *      URIs are assumed to be deterministically generated based on token ID
     *      Token IDs are assumed to be represented in their hex format in URIs
     * @return URI string
     */
    function uri(uint256 _id) public view returns (string memory) {
        return string(abi.encodePacked(baseMetadataURI, _uint2str(_id), ".json"));
    }


    /***********************************|
    |    Metadata Internal Functions    |
    |__________________________________*/

    /**
     * @notice Will emit default URI log event for corresponding token _id
     * @param _tokenIDs Array of IDs of tokens to log default URI
     */
    function _logURIs(uint256[] memory _tokenIDs) internal {
        string memory baseURL = baseMetadataURI;
        string memory tokenURI;

        for (uint256 i = 0; i < _tokenIDs.length; i++) {
            tokenURI = string(abi.encodePacked(baseURL, _uint2str(_tokenIDs[i]), ".json"));
            emit URI(tokenURI, _tokenIDs[i]);
        }
    }

    /**
     * @notice Will emit a specific URI log event for corresponding token
     * @param _tokenIDs IDs of the token corresponding to the _uris logged
     * @param _URIs    The URIs of the specified _tokenIDs
     */
    function _logURIs(uint256[] memory _tokenIDs, string[] memory _URIs) internal {
        require(_tokenIDs.length == _URIs.length, "erc1155metadata#_loguris: INVALID_ARRAYS_LENGTH");
        for (uint256 i = 0; i < _tokenIDs.length; i++) {
            emit URI(_URIs[i], _tokenIDs[i]);
        }
    }

    /**
     * @notice Will update the base URL of token's URI
     * @param _newBaseMetadataURI New base URL of token's URI
     */
    function _setBaseMetadataURI(string memory _newBaseMetadataURI) internal {
        baseMetadataURI = _newBaseMetadataURI;
    }


    /***********************************|
    |    Utility Internal Functions     |
    |__________________________________*/

    /**
     * @notice Convert uint256 to string
     * @param _i Unsigned integer to convert to string
     */
    function _uint2str(uint256 _i) internal pure returns (string memory _uintAsString) {
        if (_i == 0) {
            return "0";
        }

        uint256 j = _i;
        uint256 ii = _i;
        uint256 len;

        // Get number of bytes
        while (j != 0) {
            len++;
            j /= 10;
        }

        bytes memory bstr = new bytes(len);
        uint256 k = len - 1;

        // Get each individual ASCII
        while (ii != 0) {
            bstr[k--] = byte(uint8(48 + ii % 10));
            ii /= 10;
        }

        // Convert to string
        return string(bstr);
    }

}

/**
 * @dev Multi-Fungible Tokens with minting and burning methods. These methods assume
 *      a parent contract to be executed as they are `internal` functions
 */
contract ERC1155MintBurn is ERC1155 {


    /****************************************|
    |            Minting Functions           |
    |_______________________________________*/

    /**
     * @notice Mint _amount of tokens of a given id
     * @param _to      The address to mint tokens to
     * @param _id      Token id to mint
     * @param _amount  The amount to be minted
     * @param _data    Data to pass if receiver is contract
     */
    function _mint(address _to, uint256 _id, uint256 _amount, bytes memory _data)
    internal
    {
        // Add _amount
        balances[_to][_id] = balances[_to][_id].add(_amount);

        // Emit event
        emit TransferSingle(msg.sender, address(0x0), _to, _id, _amount);

        // Calling onReceive method if recipient is contract
        _callonERC1155Received(address(0x0), _to, _id, _amount, _data);
    }

    /**
     * @notice Mint tokens for each ids in _ids
     * @param _to       The address to mint tokens to
     * @param _ids      Array of ids to mint
     * @param _amounts  Array of amount of tokens to mint per id
     * @param _data    Data to pass if receiver is contract
     */
    function _batchMint(address _to, uint256[] memory _ids, uint256[] memory _amounts, bytes memory _data)
    internal
    {
        require(_ids.length == _amounts.length, "erc1155mintburn#batchmint: INVALID_ARRAYS_LENGTH");

        // Number of mints to execute
        uint256 nMint = _ids.length;

        // Executing all minting
        for (uint256 i = 0; i < nMint; i++) {
            // Update storage balance
            balances[_to][_ids[i]] = balances[_to][_ids[i]].add(_amounts[i]);
        }

        // Emit batch mint event
        emit TransferBatch(msg.sender, address(0x0), _to, _ids, _amounts);

        // Calling onReceive method if recipient is contract
        _callonERC1155BatchReceived(address(0x0), _to, _ids, _amounts, _data);
    }


    /****************************************|
    |            Burning Functions           |
    |_______________________________________*/

    /**
     * @notice Burn _amount of tokens of a given token id
     * @param _from    The address to burn tokens from
     * @param _id      Token id to burn
     * @param _amount  The amount to be burned
     */
    function _burn(address _from, uint256 _id, uint256 _amount)
    internal
    {
        //Substract _amount
        balances[_from][_id] = balances[_from][_id].sub(_amount);

        // Emit event
        emit TransferSingle(msg.sender, _from, address(0x0), _id, _amount);
    }

    /**
     * @notice Burn tokens of given token id for each (_ids[i], _amounts[i]) pair
     * @param _from     The address to burn tokens from
     * @param _ids      Array of token ids to burn
     * @param _amounts  Array of the amount to be burned
     */
    function _batchBurn(address _from, uint256[] memory _ids, uint256[] memory _amounts)
    internal
    {
        require(_ids.length == _amounts.length, "erc1155mintburn#batchburn: INVALID_ARRAYS_LENGTH");

        // Number of mints to execute
        uint256 nBurn = _ids.length;

        // Executing all minting
        for (uint256 i = 0; i < nBurn; i++) {
            // Update storage balance
            balances[_from][_ids[i]] = balances[_from][_ids[i]].sub(_amounts[i]);
        }

        // Emit batch mint event
        emit TransferBatch(msg.sender, _from, address(0x0), _ids, _amounts);
    }

}

library Strings {
    // via https://github.com/oraclize/ethereum-api/blob/master/oraclizeAPI_0.5.sol
    function strConcat(
        string memory _a,
        string memory _b,
        string memory _c,
        string memory _d,
        string memory _e
    ) internal pure returns (string memory) {
        bytes memory _ba = bytes(_a);
        bytes memory _bb = bytes(_b);
        bytes memory _bc = bytes(_c);
        bytes memory _bd = bytes(_d);
        bytes memory _be = bytes(_e);
        string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length);
        bytes memory babcde = bytes(abcde);
        uint256 k = 0;
        for (uint256 i = 0; i < _ba.length; i++) babcde[k++] = _ba[i];
        for (uint256 i = 0; i < _bb.length; i++) babcde[k++] = _bb[i];
        for (uint256 i = 0; i < _bc.length; i++) babcde[k++] = _bc[i];
        for (uint256 i = 0; i < _bd.length; i++) babcde[k++] = _bd[i];
        for (uint256 i = 0; i < _be.length; i++) babcde[k++] = _be[i];
        return string(babcde);
    }

    function strConcat(
        string memory _a,
        string memory _b,
        string memory _c,
        string memory _d
    ) internal pure returns (string memory) {
        return strConcat(_a, _b, _c, _d, "");
    }

    function strConcat(
        string memory _a,
        string memory _b,
        string memory _c
    ) internal pure returns (string memory) {
        return strConcat(_a, _b, _c, "", "");
    }

    function strConcat(string memory _a, string memory _b) internal pure returns (string memory) {
        return strConcat(_a, _b, "", "", "");
    }

    function uint2str(uint256 _i) internal pure returns (string memory _uintAsString) {
        if (_i == 0) {
            return "0";
        }
        uint256 j = _i;
        uint256 len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint256 k = len - 1;
        while (_i != 0) {
            bstr[k--] = bytes1(uint8(48 + (_i % 10)));
            _i /= 10;
        }
        return string(bstr);
    }
}

contract OwnableDelegateProxy {}

contract ProxyRegistry {
    mapping(address => OwnableDelegateProxy) public proxies;
}

/**
 * @title ERC1155Tradable
 * ERC1155Tradable - ERC1155 contract that whitelists an operator address,
 * has create and mint functionality, and supports useful standards from OpenZeppelin,
  like _exists(), name(), symbol(), and totalSupply()
 */
contract ERC1155Tradable is ERC1155, ERC1155MintBurn, ERC1155Metadata, Ownable, MinterRole, WhitelistAdminRole {
    using Strings for string;

    address proxyRegistryAddress;
    uint256 private _currentTokenID = 0;
    mapping(uint256 => address) public creators;
    mapping(uint256 => uint256) public tokenSupply;
    mapping(uint256 => uint256) public tokenMaxSupply;
    // Contract name
    string public name;
    // Contract symbol
    string public symbol;

    constructor(
        string memory _name,
        string memory _symbol,
        address _proxyRegistryAddress
    ) public {
        name = _name;
        symbol = _symbol;
        proxyRegistryAddress = _proxyRegistryAddress;
    }

    function removeWhitelistAdmin(address account) public onlyOwner {
        _removeWhitelistAdmin(account);
    }

    function removeMinter(address account) public onlyOwner {
        _removeMinter(account);
    }

    function uri(uint256 _id) public view returns (string memory) {
        require(_exists(_id), "erc721tradable#uri: NONEXISTENT_TOKEN");
        return Strings.strConcat(baseMetadataURI, Strings.uint2str(_id));
    }

    /**
     * @dev Returns the total quantity for a token ID
     * @param _id uint256 ID of the token to query
     * @return amount of token in existence
     */
    function totalSupply(uint256 _id) public view returns (uint256) {
        return tokenSupply[_id];
    }

    /**
     * @dev Returns the max quantity for a token ID
     * @param _id uint256 ID of the token to query
     * @return amount of token in existence
     */
    function maxSupply(uint256 _id) public view returns (uint256) {
        return tokenMaxSupply[_id];
    }

    /**
     * @dev Will update the base URL of token's URI
     * @param _newBaseMetadataURI New base URL of token's URI
     */
    function setBaseMetadataURI(string memory _newBaseMetadataURI) public onlyWhitelistAdmin {
        _setBaseMetadataURI(_newBaseMetadataURI);
    }

    /**
     * @dev Creates a new token type and assigns _initialSupply to an address
     * @param _maxSupply max supply allowed
     * @param _initialSupply Optional amount to supply the first owner
     * @param _uri Optional URI for this token type
     * @param _data Optional data to pass if receiver is contract
     * @return The newly created token ID
     */
    function create(
        uint256 _maxSupply,
        uint256 _initialSupply,
        string calldata _uri,
        bytes calldata _data
    ) external onlyWhitelistAdmin returns (uint256 tokenId) {
        require(_initialSupply <= _maxSupply, "initial supply cannot be more than max supply");
        uint256 _id = _getNextTokenID();
        _incrementTokenTypeId();
        creators[_id] = msg.sender;

        if (bytes(_uri).length > 0) {
            emit URI(_uri, _id);
        }

        if (_initialSupply != 0) _mint(msg.sender, _id, _initialSupply, _data);
        tokenSupply[_id] = _initialSupply;
        tokenMaxSupply[_id] = _maxSupply;
        return _id;
    }

    /**
     * @dev Mints some amount of tokens to an address
     * @param _to          Address of the future owner of the token
     * @param _id          Token ID to mint
     * @param _quantity    Amount of tokens to mint
     * @param _data        Data to pass if receiver is contract
     */
    function mint(
        address _to,
        uint256 _id,
        uint256 _quantity,
        bytes memory _data
    ) public onlyMinter {
        uint256 tokenId = _id;
        uint256 newSupply = tokenSupply[tokenId].add(_quantity);
        require(newSupply <= tokenMaxSupply[tokenId], "max supply of nftings reached");
        _mint(_to, _id, _quantity, _data);
        tokenSupply[_id] = tokenSupply[_id].add(_quantity);
    }

    /**
     * Override isApprovedForAll to whitelist user's OpenSea proxy accounts to enable gas-free listings - The Beano of NFTs
     */
    function isApprovedForAll(address _owner, address _operator) public view returns (bool isOperator) {
        // Whitelist OpenSea proxy contract for easy trading.
        ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
        if (address(proxyRegistry.proxies(_owner)) == _operator) {
            return true;
        }

        return ERC1155.isApprovedForAll(_owner, _operator);
    }

    /**
     * @dev Returns whether the specified token exists by checking to see if it has a creator
     * @param _id uint256 ID of the token to query the existence of
     * @return bool whether the token exists
     */
    function _exists(uint256 _id) internal view returns (bool) {
        return creators[_id] != address(0);
    }

    /**
     * @dev calculates the next token ID based on value of _currentTokenID
     * @return uint256 for the next token ID
     */
    function _getNextTokenID() private view returns (uint256) {
        return _currentTokenID.add(1);
    }

    /**
     * @dev increments the value of _currentTokenID
     */
    function _incrementTokenTypeId() private {
        _currentTokenID++;
    }
}

/**
 * @title smol studio
 */
contract SmolStudio is ERC1155Tradable {
    string private _contractURI;

    constructor(address _proxyRegistryAddress) public ERC1155Tradable("smol studio", "SmolStudio", _proxyRegistryAddress) {
        _setBaseMetadataURI("https://api.smol.finance/studio/");
        _contractURI = "https://api.smol.finance/studio/tings-erc1155";
    }

    function setBaseMetadataURI(string memory newURI) public onlyWhitelistAdmin {
        _setBaseMetadataURI(newURI);
    }

    function setContractURI(string memory newURI) public onlyWhitelistAdmin {
        _contractURI = newURI;
    }

    function contractURI() public view returns (string memory) {
        return _contractURI;
    }

    /**
         * @dev Ends minting of token
         * @param _id          Token ID for which minting will end
         */
    function endMinting(uint256 _id) external onlyWhitelistAdmin {
        tokenMaxSupply[_id] = tokenSupply[_id];
    }

    function burn(address _account, uint256 _id, uint256 _amount) public onlyMinter {
        require(balanceOf(_account, _id) >= _amount, "cannot burn more than address has");
        _burn(_account, _id, _amount);
    }

    /**
    * Mint NFT and send those to the list of given addresses
    */
    function airdrop(uint256 _id, address[] memory _addresses) public onlyMinter {
        require(tokenMaxSupply[_id] - tokenSupply[_id] >= _addresses.length, "cannot mint above max supply");
        for (uint256 i = 0; i < _addresses.length; i++) {
            mint(_addresses[i], _id, 1, "");
        }
    }
}

/*
Constructor Argument To Add During Deployment
OpenSea Registry Address
000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1

0xa5409ec958c83c3f309868babaca7c86dcb077c1
*/

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":false,"internalType":"bool","name":"_approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"_amounts","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_operator","type":"address"},{"indexed":true,"internalType":"address","name":"_from","type":"address"},{"indexed":true,"internalType":"address","name":"_to","type":"address"},{"indexed":false,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"_uri","type":"string"},{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"WhitelistAdminRemoved","type":"event"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"airdrop","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_maxSupply","type":"uint256"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"string","name":"_uri","type":"string"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"create","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"creators","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"endMinting","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelistAdmin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_quantity","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"mint","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256[]","name":"_ids","type":"uint256[]"},{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_operator","type":"address"},{"internalType":"bool","name":"_approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setBaseMetadataURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"newURI","type":"string"}],"name":"setContractURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"_interfaceID","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"}]

608060405260006007553480156200001657600080fd5b5060405162004d1538038062004d15833981810160405260208110156200003c57600080fd5b81019080805190602001909291905050506040518060400160405280600b81526020017f736d6f6c2073747564696f0000000000000000000000000000000000000000008152506040518060400160405280600a81526020017f536d6f6c53747564696f00000000000000000000000000000000000000000000815250826000620000cc620002a060201b60201c565b905080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506200018b6200017f620002a060201b60201c565b620002a860201b60201c565b620001ab6200019f620002a060201b60201c565b6200030960201b60201c565b82600b9080519060200190620001c39291906200052e565b5081600c9080519060200190620001dc9291906200052e565b5080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050620002676040518060400160405280602081526020017f68747470733a2f2f6170692e736d6f6c2e66696e616e63652f73747564696f2f8152506200036a60201b60201c565b6040518060600160405280602d815260200162004c9d602d9139600d9080519060200190620002989291906200052e565b5050620005dd565b600033905090565b620002c38160046200038660201b620041f91790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b620003248160056200038660201b620041f91790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b8060029080519060200190620003829291906200052e565b5050565b6200039882826200044e60201b60201c565b15620003f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602981526020018062004cca6029913960400191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602281526020018062004cf36022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200057157805160ff1916838001178555620005a2565b82800160010185558215620005a2579182015b82811115620005a157825182559160200191906001019062000584565b5b509050620005b19190620005b5565b5090565b620005da91905b80821115620005d6576000816000905550600101620005bc565b5090565b90565b6146b080620005ed6000396000f3fe608060405234801561001057600080fd5b506004361061023f5760003560e01c80638f32d59b11610145578063bb5f747b116100bd578063e8a3d4851161008c578063f242432a11610071578063f242432a146111de578063f2fde38b146112ed578063f5298aca146113315761023f565b8063e8a3d485146110df578063e985e9c5146111625761023f565b8063bb5f747b14610f11578063bd85b03914610f6d578063bdf7a8e614610faf578063cd53d08e146110715761023f565b8063983b2d5611610114578063a22cb465116100f9578063a22cb46514610d6f578063aa271e1a14610dbf578063b09ddf7b14610e1b5761023f565b8063983b2d5614610d215780639865027514610d655761023f565b80638f32d59b14610b93578063938e3d7b14610bb557806394dd286914610c7057806395d89b4114610c9e5761023f565b80634c5a628c116101d8578063731133e9116101a75780637e518ec81161018c5780637e518ec814610a4c578063869f759414610b075780638da5cb5b14610b495761023f565b8063731133e9146109195780637362d9c814610a085761023f565b80634c5a628c146107205780634e1273f41461072a5780636897e974146108cb578063715018a61461090f5761023f565b80630e89341c116102145780630e89341c146103d05780632693ebf2146104775780632eb2c2d6146104b95780633092afd5146106dc5761023f565b80624221f014610244578062fdd58e1461028657806301ffc9a7146102e857806306fdde031461034d575b600080fd5b6102706004803603602081101561025a57600080fd5b8101908080359060200190929190505050611389565b6040518082815260200191505060405180910390f35b6102d26004803603604081101561029c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113a1565b6040518082815260200191505060405180910390f35b610333600480360360208110156102fe57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506113fb565b604051808215151515815260200191505060405180910390f35b6103556114ac565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561039557808201518184015260208101905061037a565b50505050905090810190601f1680156103c25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103fc600480360360208110156103e657600080fd5b810190808035906020019092919050505061154a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561043c578082015181840152602081019050610421565b50505050905090810190601f1680156104695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104a36004803603602081101561048d57600080fd5b810190808035906020019092919050505061165d565b6040518082815260200191505060405180910390f35b6106da600480360360a08110156104cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561052c57600080fd5b82018360208201111561053e57600080fd5b8035906020019184602083028401116401000000008311171561056057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156105c057600080fd5b8201836020820111156105d257600080fd5b803590602001918460208302840111640100000000831117156105f457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561065457600080fd5b82018360208201111561066657600080fd5b8035906020019184600183028401116401000000008311171561068857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611675565b005b61071e600480360360208110156106f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117b0565b005b610728611836565b005b6108746004803603604081101561074057600080fd5b810190808035906020019064010000000081111561075d57600080fd5b82018360208201111561076f57600080fd5b8035906020019184602083028401116401000000008311171561079157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156107f157600080fd5b82018360208201111561080357600080fd5b8035906020019184602083028401116401000000008311171561082557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611848565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156108b757808201518184015260208101905061089c565b505050509050019250505060405180910390f35b61090d600480360360208110156108e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061198e565b005b610917611a14565b005b610a066004803603608081101561092f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561098057600080fd5b82018360208201111561099257600080fd5b803590602001918460018302840111640100000000831117156109b457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b4f565b005b610a4a60048036036020811015610a1e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cbd565b005b610b0560048036036020811015610a6257600080fd5b8101908080359060200190640100000000811115610a7f57600080fd5b820183602082011115610a9157600080fd5b80359060200191846001830284011164010000000083111715610ab357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d2e565b005b610b3360048036036020811015610b1d57600080fd5b8101908080359060200190929190505050611d9f565b6040518082815260200191505060405180910390f35b610b51611dbc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b9b611de6565b604051808215151515815260200191505060405180910390f35b610c6e60048036036020811015610bcb57600080fd5b8101908080359060200190640100000000811115610be857600080fd5b820183602082011115610bfa57600080fd5b80359060200191846001830284011164010000000083111715610c1c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611e45565b005b610c9c60048036036020811015610c8657600080fd5b8101908080359060200190929190505050611ec4565b005b610ca6611f57565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ce6578082015181840152602081019050610ccb565b50505050905090810190601f168015610d135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610d6360048036036020811015610d3757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ff5565b005b610d6d612066565b005b610dbd60048036036040811015610d8557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612078565b005b610e0160048036036020811015610dd557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612179565b604051808215151515815260200191505060405180910390f35b610efb60048036036080811015610e3157600080fd5b81019080803590602001909291908035906020019092919080359060200190640100000000811115610e6257600080fd5b820183602082011115610e7457600080fd5b80359060200191846001830284011164010000000083111715610e9657600080fd5b909192939192939080359060200190640100000000811115610eb757600080fd5b820183602082011115610ec957600080fd5b80359060200191846001830284011164010000000083111715610eeb57600080fd5b9091929391929390505050612196565b6040518082815260200191505060405180910390f35b610f5360048036036020811015610f2757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123c4565b604051808215151515815260200191505060405180910390f35b610f9960048036036020811015610f8357600080fd5b81019080803590602001909291905050506123e1565b6040518082815260200191505060405180910390f35b61106f60048036036040811015610fc557600080fd5b810190808035906020019092919080359060200190640100000000811115610fec57600080fd5b820183602082011115610ffe57600080fd5b8035906020019184602083028401116401000000008311171561102057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506123fe565b005b61109d6004803603602081101561108757600080fd5b8101908080359060200190929190505050612552565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6110e7612585565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561112757808201518184015260208101905061110c565b50505050905090810190601f1680156111545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6111c46004803603604081101561117857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612627565b604051808215151515815260200191505060405180910390f35b6112eb600480360360a08110156111f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561126557600080fd5b82018360208201111561127757600080fd5b8035906020019184600183028401116401000000008311171561129957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612758565b005b61132f6004803603602081101561130357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612893565b005b6113876004803603606081101561134757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612919565b005b600a6020528060005260406000206000915090505481565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611494575063d9b67a2660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b156114a257600190506114a7565b600090505b919050565b600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115425780601f1061151757610100808354040283529160200191611542565b820191906000526020600020905b81548152906001019060200180831161152557829003601f168201915b505050505081565b6060611555826129f0565b6115aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806143ad6025913960400191505060405180910390fd5b61165660028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116435780601f1061161857610100808354040283529160200191611643565b820191906000526020600020905b81548152906001019060200180831161162657829003601f168201915b505050505061165184612a5c565b612b89565b9050919050565b60096020528060005260406000206000915090505481565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806116b557506116b48533612627565b5b61170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061435d602f913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611790576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806145c06030913960400191505060405180910390fd5b61179c85858585612bcd565b6117a98585858585612f32565b5050505050565b6117b8611de6565b61182a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611833816131ed565b50565b611846611841613247565b61324f565b565b606081518351146118a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614461602c913960400191505060405180910390fd5b606083516040519080825280602002602001820160405280156118d65781602001602082028038833980820191505090505b50905060008090505b8451811015611983576000808683815181106118f757fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085838151811061194757fe5b602002602001015181526020019081526020016000205482828151811061196a57fe5b60200260200101818152505080806001019150506118df565b508091505092915050565b611996611de6565b611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611a118161324f565b50565b611a1c611de6565b611a8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611b5f611b5a613247565b612179565b611bb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806145f06039913960400191505060405180910390fd5b60008390506000611be18460096000858152602001908152602001600020546132a990919063ffffffff16565b9050600a600083815260200190815260200160002054811115611c6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6d617820737570706c79206f66206e6674696e6773207265616368656400000081525060200191505060405180910390fd5b611c7886868686613331565b611c9e8460096000888152602001908152602001600020546132a990919063ffffffff16565b6009600087815260200190815260200160002081905550505050505050565b611ccd611cc8613247565b6123c4565b611d22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604581526020018061451f6045913960600191505060405180910390fd5b611d2b8161347f565b50565b611d3e611d39613247565b6123c4565b611d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604581526020018061451f6045913960600191505060405180910390fd5b611d9c816134d9565b50565b6000600a6000838152602001908152602001600020549050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e29613247565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b611e55611e50613247565b6123c4565b611eaa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604581526020018061451f6045913960600191505060405180910390fd5b80600d9080519060200190611ec09291906142b7565b5050565b611ed4611ecf613247565b6123c4565b611f29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604581526020018061451f6045913960600191505060405180910390fd5b6009600082815260200190815260200160002054600a60008381526020019081526020016000208190555050565b600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fed5780601f10611fc257610100808354040283529160200191611fed565b820191906000526020600020905b815481529060010190602001808311611fd057829003601f168201915b505050505081565b612005612000613247565b612179565b61205a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806145f06039913960400191505060405180910390fd5b612063816134f3565b50565b612076612071613247565b6131ed565b565b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b600061218f82600461354d90919063ffffffff16565b9050919050565b60006121a86121a3613247565b6123c4565b6121fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604581526020018061451f6045913960600191505060405180910390fd5b86861115612256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180614434602d913960400191505060405180910390fd5b600061226061362b565b905061226a613648565b336008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600086869050111561232d57807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b878760405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a25b600087146123865761238533828987878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613331565b5b86600960008381526020019081526020016000208190555087600a600083815260200190815260200160002081905550809150509695505050505050565b60006123da82600561354d90919063ffffffff16565b9050919050565b600060096000838152602001908152602001600020549050919050565b61240e612409613247565b612179565b612463576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806145f06039913960400191505060405180910390fd5b80516009600084815260200190815260200160002054600a600085815260200190815260200160002054031015612502576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f63616e6e6f74206d696e742061626f7665206d617820737570706c790000000081525060200191505060405180910390fd5b60008090505b815181101561254d5761254082828151811061252057fe5b602002602001015184600160405180602001604052806000815250611b4f565b8080600101915050612508565b505050565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600d8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561261d5780601f106125f25761010080835404028352916020019161261d565b820191906000526020600020905b81548152906001019060200180831161260057829003601f168201915b5050505050905090565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156126e357600080fd5b505afa1580156126f7573d6000803e3d6000fd5b505050506040513d602081101561270d57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415612744576001915050612752565b61274e848461365c565b9150505b92915050565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061279857506127978533612627565b5b6127ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806144f5602a913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614629602b913960400191505060405180910390fd5b61287f858585856136f0565b61288c85858585856138e4565b5050505050565b61289b611de6565b61290d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61291681613b1d565b50565b612929612924613247565b612179565b61297e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806145f06039913960400191505060405180910390fd5b8061298984846113a1565b10156129e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061438c6021913960400191505060405180910390fd5b6129eb838383613c63565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60606000821415612aa4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b84565b600082905060005b60008214612ace578080600101915050600a8281612ac657fe5b049150612aac565b6060816040519080825280601f01601f191660200182016040528015612b035781602001600182028038833980820191505090505b50905060006001830390505b60008614612b7c57600a8681612b2157fe5b0660300160f81b82828060019003935081518110612b3b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8681612b7457fe5b049550612b0f565b819450505050505b919050565b6060612bc58383604051806020016040528060008152506040518060200160405280600081525060405180602001604052806000815250613da2565b905092915050565b8051825114612c27576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806143d26035913960400191505060405180910390fd5b60008251905060008090505b81811015612e2457612cc3838281518110612c4a57fe5b60200260200101516000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878581518110612c9e57fe5b602002602001015181526020019081526020016000205461406890919063ffffffff16565b6000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868481518110612d0f57fe5b6020026020010151815260200190815260200160002081905550612db1838281518110612d3857fe5b60200260200101516000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878581518110612d8c57fe5b60200260200101518152602001908152602001600020546132a990919063ffffffff16565b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868481518110612dfd57fe5b60200260200101518152602001908152602001600020819055508080600101915050612c33565b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015612ed4578082015181840152602081019050612eb9565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015612f16578082015181840152602081019050612efb565b5050505090500194505050505060405180910390a45050505050565b612f518473ffffffffffffffffffffffffffffffffffffffff166140f1565b156131e65760008473ffffffffffffffffffffffffffffffffffffffff1663bc197c8133888787876040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561303757808201518184015260208101905061301c565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561307957808201518184015260208101905061305e565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156130b857808201518184015260208101905061309d565b50505050905090810190601f1680156130e55780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561310a57600080fd5b505af115801561311e573d6000803e3d6000fd5b505050506040513d602081101561313457600080fd5b8101908080519060200190929190505050905063bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146131e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f81526020018061448d603f913960400191505060405180910390fd5b505b5050505050565b61320181600461413c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b600033905090565b61326381600561413c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b600080828401905083811015613327576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f736166656d617468236164643a204f564552464c4f570000000000000000000081525060200191505060405180910390fd5b8091505092915050565b613393826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868152602001908152602001600020546132a990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051808381526020018281526020019250505060405180910390a46134796000858585856138e4565b50505050565b6134938160056141f990919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b80600290805190602001906134ef9291906142b7565b5050565b6135078160046141f990919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806145646022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600061364360016007546132a990919063ffffffff16565b905090565b600760008154809291906001019190505550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b613752816000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000205461406890919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550613807816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020546132a990919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051808381526020018281526020019250505060405180910390a450505050565b6139038473ffffffffffffffffffffffffffffffffffffffff166140f1565b15613b165760008473ffffffffffffffffffffffffffffffffffffffff1663f23a6e6133888787876040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156139ea5780820151818401526020810190506139cf565b50505050905090810190601f168015613a175780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015613a3a57600080fd5b505af1158015613a4e573d6000803e3d6000fd5b505050506040513d6020811015613a6457600080fd5b8101908080519060200190929190505050905063f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613b14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180614586603a913960400191505060405180910390fd5b505b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613ba3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180614407602d913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613cc5816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000205461406890919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051808381526020018281526020019250505060405180910390a4505050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f191660200182016040528015613dfe5781602001600182028038833980820191505090505b5090506060819050600080905060008090505b8851811015613e7f57888181518110613e2657fe5b602001015160f81c60f81b838380600101945081518110613e4357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613e11565b5060008090505b8751811015613ef457878181518110613e9b57fe5b602001015160f81c60f81b838380600101945081518110613eb857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613e86565b5060008090505b8651811015613f6957868181518110613f1057fe5b602001015160f81c60f81b838380600101945081518110613f2d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613efb565b5060008090505b8551811015613fde57858181518110613f8557fe5b602001015160f81c60f81b838380600101945081518110613fa257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613f70565b5060008090505b845181101561405357848181518110613ffa57fe5b602001015160f81c60f81b83838060010194508151811061401757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613fe5565b50819850505050505050505095945050505050565b6000828211156140e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f736166656d617468237375623a20554e444552464c4f5700000000000000000081525060200191505060405180910390fd5b600082840390508091505092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156141335750808214155b92505050919050565b614146828261354d565b61419b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806146546028913960400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b614203828261354d565b15614259576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806144cc6029913960400191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106142f857805160ff1916838001178555614326565b82800160010185558215614326579182015b8281111561432557825182559160200191906001019061430a565b5b5090506143339190614337565b5090565b61435991905b8082111561435557600081600090555060010161433d565b5090565b9056fe65726331313535237361666562617463687472616e7366657266726f6d3a20494e56414c49445f4f50455241544f5263616e6e6f74206275726e206d6f7265207468616e2061646472657373206861736572633732317472616461626c65237572693a204e4f4e4558495354454e545f544f4b454e65726331313535235f7361666562617463687472616e7366657266726f6d3a20494e56414c49445f4152524159535f4c454e4754486f776e61626c653a206e65772073747564696f206f776e657220697320746865207a65726f2061646472657373696e697469616c20737570706c792063616e6e6f74206265206d6f7265207468616e206d617820737570706c79657263313135352362616c616e63656f6662617463683a20494e56414c49445f41525241595f4c454e47544865726331313535235f63616c6c6f6e65726331313535626174636872656365697665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745726f6c65733a206163636f756e7420616c7265616479206861732072657175657374656420726f6c656572633131353523736166657472616e7366657266726f6d3a20494e56414c49445f4f50455241544f5277686974656c69737461646d696e726f6c653a2063616c6c657220646f6573206e6f7420686176652074686520626565672077686974656c69737461646d696e2074696e67726f6c65733a206163636f756e7420697320746865207a65726f206164647265737365726331313535235f63616c6c6f6e6572633131353572656365697665643a20494e56414c49445f4f4e5f524543454956455f4d45535341474565726331313535237361666562617463687472616e7366657266726f6d3a20494e56414c49445f524543495049454e546d696e746572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652062656567206e6674206d696e74657220726f6c656572633131353523736166657472616e7366657266726f6d3a20494e56414c49445f524543495049454e54726f6c65733a206163636f756e7420646f6573206e6f742068617665206e656564656420726f6c65a265627a7a723158206574b14a7da2a3abc82f1f2e2a2b1764cc2db3fbcd5d4b2fbc66f6bf58ba5c5864736f6c6343000511003268747470733a2f2f6170692e736d6f6c2e66696e616e63652f73747564696f2f74696e67732d65726331313535726f6c65733a206163636f756e7420616c7265616479206861732072657175657374656420726f6c65726f6c65733a206163636f756e7420697320746865207a65726f2061646472657373000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061023f5760003560e01c80638f32d59b11610145578063bb5f747b116100bd578063e8a3d4851161008c578063f242432a11610071578063f242432a146111de578063f2fde38b146112ed578063f5298aca146113315761023f565b8063e8a3d485146110df578063e985e9c5146111625761023f565b8063bb5f747b14610f11578063bd85b03914610f6d578063bdf7a8e614610faf578063cd53d08e146110715761023f565b8063983b2d5611610114578063a22cb465116100f9578063a22cb46514610d6f578063aa271e1a14610dbf578063b09ddf7b14610e1b5761023f565b8063983b2d5614610d215780639865027514610d655761023f565b80638f32d59b14610b93578063938e3d7b14610bb557806394dd286914610c7057806395d89b4114610c9e5761023f565b80634c5a628c116101d8578063731133e9116101a75780637e518ec81161018c5780637e518ec814610a4c578063869f759414610b075780638da5cb5b14610b495761023f565b8063731133e9146109195780637362d9c814610a085761023f565b80634c5a628c146107205780634e1273f41461072a5780636897e974146108cb578063715018a61461090f5761023f565b80630e89341c116102145780630e89341c146103d05780632693ebf2146104775780632eb2c2d6146104b95780633092afd5146106dc5761023f565b80624221f014610244578062fdd58e1461028657806301ffc9a7146102e857806306fdde031461034d575b600080fd5b6102706004803603602081101561025a57600080fd5b8101908080359060200190929190505050611389565b6040518082815260200191505060405180910390f35b6102d26004803603604081101561029c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113a1565b6040518082815260200191505060405180910390f35b610333600480360360208110156102fe57600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690602001909291905050506113fb565b604051808215151515815260200191505060405180910390f35b6103556114ac565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561039557808201518184015260208101905061037a565b50505050905090810190601f1680156103c25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103fc600480360360208110156103e657600080fd5b810190808035906020019092919050505061154a565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561043c578082015181840152602081019050610421565b50505050905090810190601f1680156104695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104a36004803603602081101561048d57600080fd5b810190808035906020019092919050505061165d565b6040518082815260200191505060405180910390f35b6106da600480360360a08110156104cf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561052c57600080fd5b82018360208201111561053e57600080fd5b8035906020019184602083028401116401000000008311171561056057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156105c057600080fd5b8201836020820111156105d257600080fd5b803590602001918460208302840111640100000000831117156105f457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561065457600080fd5b82018360208201111561066657600080fd5b8035906020019184600183028401116401000000008311171561068857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611675565b005b61071e600480360360208110156106f257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506117b0565b005b610728611836565b005b6108746004803603604081101561074057600080fd5b810190808035906020019064010000000081111561075d57600080fd5b82018360208201111561076f57600080fd5b8035906020019184602083028401116401000000008311171561079157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290803590602001906401000000008111156107f157600080fd5b82018360208201111561080357600080fd5b8035906020019184602083028401116401000000008311171561082557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050509192919290505050611848565b6040518080602001828103825283818151815260200191508051906020019060200280838360005b838110156108b757808201518184015260208101905061089c565b505050509050019250505060405180910390f35b61090d600480360360208110156108e157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061198e565b005b610917611a14565b005b610a066004803603608081101561092f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561098057600080fd5b82018360208201111561099257600080fd5b803590602001918460018302840111640100000000831117156109b457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611b4f565b005b610a4a60048036036020811015610a1e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cbd565b005b610b0560048036036020811015610a6257600080fd5b8101908080359060200190640100000000811115610a7f57600080fd5b820183602082011115610a9157600080fd5b80359060200191846001830284011164010000000083111715610ab357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d2e565b005b610b3360048036036020811015610b1d57600080fd5b8101908080359060200190929190505050611d9f565b6040518082815260200191505060405180910390f35b610b51611dbc565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b9b611de6565b604051808215151515815260200191505060405180910390f35b610c6e60048036036020811015610bcb57600080fd5b8101908080359060200190640100000000811115610be857600080fd5b820183602082011115610bfa57600080fd5b80359060200191846001830284011164010000000083111715610c1c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611e45565b005b610c9c60048036036020811015610c8657600080fd5b8101908080359060200190929190505050611ec4565b005b610ca6611f57565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610ce6578082015181840152602081019050610ccb565b50505050905090810190601f168015610d135780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610d6360048036036020811015610d3757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ff5565b005b610d6d612066565b005b610dbd60048036036040811015610d8557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050612078565b005b610e0160048036036020811015610dd557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612179565b604051808215151515815260200191505060405180910390f35b610efb60048036036080811015610e3157600080fd5b81019080803590602001909291908035906020019092919080359060200190640100000000811115610e6257600080fd5b820183602082011115610e7457600080fd5b80359060200191846001830284011164010000000083111715610e9657600080fd5b909192939192939080359060200190640100000000811115610eb757600080fd5b820183602082011115610ec957600080fd5b80359060200191846001830284011164010000000083111715610eeb57600080fd5b9091929391929390505050612196565b6040518082815260200191505060405180910390f35b610f5360048036036020811015610f2757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123c4565b604051808215151515815260200191505060405180910390f35b610f9960048036036020811015610f8357600080fd5b81019080803590602001909291905050506123e1565b6040518082815260200191505060405180910390f35b61106f60048036036040811015610fc557600080fd5b810190808035906020019092919080359060200190640100000000811115610fec57600080fd5b820183602082011115610ffe57600080fd5b8035906020019184602083028401116401000000008311171561102057600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506123fe565b005b61109d6004803603602081101561108757600080fd5b8101908080359060200190929190505050612552565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6110e7612585565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561112757808201518184015260208101905061110c565b50505050905090810190601f1680156111545780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6111c46004803603604081101561117857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612627565b604051808215151515815260200191505060405180910390f35b6112eb600480360360a08110156111f457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190803590602001909291908035906020019064010000000081111561126557600080fd5b82018360208201111561127757600080fd5b8035906020019184600183028401116401000000008311171561129957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050612758565b005b61132f6004803603602081101561130357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612893565b005b6113876004803603606081101561134757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050612919565b005b600a6020528060005260406000206000915090505481565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60006301ffc9a760e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611494575063d9b67a2660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b156114a257600190506114a7565b600090505b919050565b600b8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156115425780601f1061151757610100808354040283529160200191611542565b820191906000526020600020905b81548152906001019060200180831161152557829003601f168201915b505050505081565b6060611555826129f0565b6115aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806143ad6025913960400191505060405180910390fd5b61165660028054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156116435780601f1061161857610100808354040283529160200191611643565b820191906000526020600020905b81548152906001019060200180831161162657829003601f168201915b505050505061165184612a5c565b612b89565b9050919050565b60096020528060005260406000206000915090505481565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806116b557506116b48533612627565b5b61170a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061435d602f913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611790576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806145c06030913960400191505060405180910390fd5b61179c85858585612bcd565b6117a98585858585612f32565b5050505050565b6117b8611de6565b61182a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611833816131ed565b50565b611846611841613247565b61324f565b565b606081518351146118a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614461602c913960400191505060405180910390fd5b606083516040519080825280602002602001820160405280156118d65781602001602082028038833980820191505090505b50905060008090505b8451811015611983576000808683815181106118f757fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085838151811061194757fe5b602002602001015181526020019081526020016000205482828151811061196a57fe5b60200260200101818152505080806001019150506118df565b508091505092915050565b611996611de6565b611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b611a118161324f565b50565b611a1c611de6565b611a8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611b5f611b5a613247565b612179565b611bb4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806145f06039913960400191505060405180910390fd5b60008390506000611be18460096000858152602001908152602001600020546132a990919063ffffffff16565b9050600a600083815260200190815260200160002054811115611c6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f6d617820737570706c79206f66206e6674696e6773207265616368656400000081525060200191505060405180910390fd5b611c7886868686613331565b611c9e8460096000888152602001908152602001600020546132a990919063ffffffff16565b6009600087815260200190815260200160002081905550505050505050565b611ccd611cc8613247565b6123c4565b611d22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604581526020018061451f6045913960600191505060405180910390fd5b611d2b8161347f565b50565b611d3e611d39613247565b6123c4565b611d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604581526020018061451f6045913960600191505060405180910390fd5b611d9c816134d9565b50565b6000600a6000838152602001908152602001600020549050919050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e29613247565b73ffffffffffffffffffffffffffffffffffffffff1614905090565b611e55611e50613247565b6123c4565b611eaa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604581526020018061451f6045913960600191505060405180910390fd5b80600d9080519060200190611ec09291906142b7565b5050565b611ed4611ecf613247565b6123c4565b611f29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604581526020018061451f6045913960600191505060405180910390fd5b6009600082815260200190815260200160002054600a60008381526020019081526020016000208190555050565b600c8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611fed5780601f10611fc257610100808354040283529160200191611fed565b820191906000526020600020905b815481529060010190602001808311611fd057829003601f168201915b505050505081565b612005612000613247565b612179565b61205a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806145f06039913960400191505060405180910390fd5b612063816134f3565b50565b612076612071613247565b6131ed565b565b80600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b600061218f82600461354d90919063ffffffff16565b9050919050565b60006121a86121a3613247565b6123c4565b6121fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604581526020018061451f6045913960600191505060405180910390fd5b86861115612256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180614434602d913960400191505060405180910390fd5b600061226061362b565b905061226a613648565b336008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600086869050111561232d57807f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b878760405180806020018281038252848482818152602001925080828437600081840152601f19601f820116905080830192505050935050505060405180910390a25b600087146123865761238533828987878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613331565b5b86600960008381526020019081526020016000208190555087600a600083815260200190815260200160002081905550809150509695505050505050565b60006123da82600561354d90919063ffffffff16565b9050919050565b600060096000838152602001908152602001600020549050919050565b61240e612409613247565b612179565b612463576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806145f06039913960400191505060405180910390fd5b80516009600084815260200190815260200160002054600a600085815260200190815260200160002054031015612502576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f63616e6e6f74206d696e742061626f7665206d617820737570706c790000000081525060200191505060405180910390fd5b60008090505b815181101561254d5761254082828151811061252057fe5b602002602001015184600160405180602001604052806000815250611b4f565b8080600101915050612508565b505050565b60086020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600d8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561261d5780601f106125f25761010080835404028352916020019161261d565b820191906000526020600020905b81548152906001019060200180831161260057829003601f168201915b5050505050905090565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663c4552791866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156126e357600080fd5b505afa1580156126f7573d6000803e3d6000fd5b505050506040513d602081101561270d57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161415612744576001915050612752565b61274e848461365c565b9150505b92915050565b8473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061279857506127978533612627565b5b6127ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806144f5602a913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614629602b913960400191505060405180910390fd5b61287f858585856136f0565b61288c85858585856138e4565b5050505050565b61289b611de6565b61290d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b61291681613b1d565b50565b612929612924613247565b612179565b61297e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260398152602001806145f06039913960400191505060405180910390fd5b8061298984846113a1565b10156129e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602181526020018061438c6021913960400191505060405180910390fd5b6129eb838383613c63565b505050565b60008073ffffffffffffffffffffffffffffffffffffffff166008600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60606000821415612aa4576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b84565b600082905060005b60008214612ace578080600101915050600a8281612ac657fe5b049150612aac565b6060816040519080825280601f01601f191660200182016040528015612b035781602001600182028038833980820191505090505b50905060006001830390505b60008614612b7c57600a8681612b2157fe5b0660300160f81b82828060019003935081518110612b3b57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8681612b7457fe5b049550612b0f565b819450505050505b919050565b6060612bc58383604051806020016040528060008152506040518060200160405280600081525060405180602001604052806000815250613da2565b905092915050565b8051825114612c27576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260358152602001806143d26035913960400191505060405180910390fd5b60008251905060008090505b81811015612e2457612cc3838281518110612c4a57fe5b60200260200101516000808973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878581518110612c9e57fe5b602002602001015181526020019081526020016000205461406890919063ffffffff16565b6000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868481518110612d0f57fe5b6020026020010151815260200190815260200160002081905550612db1838281518110612d3857fe5b60200260200101516000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000878581518110612d8c57fe5b60200260200101518152602001908152602001600020546132a990919063ffffffff16565b6000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868481518110612dfd57fe5b60200260200101518152602001908152602001600020819055508080600101915050612c33565b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051808060200180602001838103835285818151815260200191508051906020019060200280838360005b83811015612ed4578082015181840152602081019050612eb9565b50505050905001838103825284818151815260200191508051906020019060200280838360005b83811015612f16578082015181840152602081019050612efb565b5050505090500194505050505060405180910390a45050505050565b612f518473ffffffffffffffffffffffffffffffffffffffff166140f1565b156131e65760008473ffffffffffffffffffffffffffffffffffffffff1663bc197c8133888787876040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001806020018060200180602001848103845287818151815260200191508051906020019060200280838360005b8381101561303757808201518184015260208101905061301c565b50505050905001848103835286818151815260200191508051906020019060200280838360005b8381101561307957808201518184015260208101905061305e565b50505050905001848103825285818151815260200191508051906020019080838360005b838110156130b857808201518184015260208101905061309d565b50505050905090810190601f1680156130e55780820380516001836020036101000a031916815260200191505b5098505050505050505050602060405180830381600087803b15801561310a57600080fd5b505af115801561311e573d6000803e3d6000fd5b505050506040513d602081101561313457600080fd5b8101908080519060200190929190505050905063bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146131e4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f81526020018061448d603f913960400191505060405180910390fd5b505b5050505050565b61320181600461413c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b600033905090565b61326381600561413c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b600080828401905083811015613327576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260168152602001807f736166656d617468236164643a204f564552464c4f570000000000000000000081525060200191505060405180910390fd5b8091505092915050565b613393826000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868152602001908152602001600020546132a990919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628686604051808381526020018281526020019250505060405180910390a46134796000858585856138e4565b50505050565b6134938160056141f990919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b80600290805190602001906134ef9291906142b7565b5050565b6135078160046141f990919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806145646022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600061364360016007546132a990919063ffffffff16565b905090565b600760008154809291906001019190505550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b613752816000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000205461406890919063ffffffff16565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550613807816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020546132a990919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000848152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051808381526020018281526020019250505060405180910390a450505050565b6139038473ffffffffffffffffffffffffffffffffffffffff166140f1565b15613b165760008473ffffffffffffffffffffffffffffffffffffffff1663f23a6e6133888787876040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b838110156139ea5780820151818401526020810190506139cf565b50505050905090810190601f168015613a175780820380516001836020036101000a031916815260200191505b509650505050505050602060405180830381600087803b158015613a3a57600080fd5b505af1158015613a4e573d6000803e3d6000fd5b505050506040513d6020811015613a6457600080fd5b8101908080519060200190929190505050905063f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613b14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180614586603a913960400191505060405180910390fd5b505b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613ba3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602d815260200180614407602d913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b613cc5816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000205461406890919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051808381526020018281526020019250505060405180910390a4505050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f191660200182016040528015613dfe5781602001600182028038833980820191505090505b5090506060819050600080905060008090505b8851811015613e7f57888181518110613e2657fe5b602001015160f81c60f81b838380600101945081518110613e4357fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613e11565b5060008090505b8751811015613ef457878181518110613e9b57fe5b602001015160f81c60f81b838380600101945081518110613eb857fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613e86565b5060008090505b8651811015613f6957868181518110613f1057fe5b602001015160f81c60f81b838380600101945081518110613f2d57fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613efb565b5060008090505b8551811015613fde57858181518110613f8557fe5b602001015160f81c60f81b838380600101945081518110613fa257fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613f70565b5060008090505b845181101561405357848181518110613ffa57fe5b602001015160f81c60f81b83838060010194508151811061401757fe5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050613fe5565b50819850505050505050505095945050505050565b6000828211156140e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f736166656d617468237375623a20554e444552464c4f5700000000000000000081525060200191505060405180910390fd5b600082840390508091505092915050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b82141580156141335750808214155b92505050919050565b614146828261354d565b61419b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806146546028913960400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b614203828261354d565b15614259576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806144cc6029913960400191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106142f857805160ff1916838001178555614326565b82800160010185558215614326579182015b8281111561432557825182559160200191906001019061430a565b5b5090506143339190614337565b5090565b61435991905b8082111561435557600081600090555060010161433d565b5090565b9056fe65726331313535237361666562617463687472616e7366657266726f6d3a20494e56414c49445f4f50455241544f5263616e6e6f74206275726e206d6f7265207468616e2061646472657373206861736572633732317472616461626c65237572693a204e4f4e4558495354454e545f544f4b454e65726331313535235f7361666562617463687472616e7366657266726f6d3a20494e56414c49445f4152524159535f4c454e4754486f776e61626c653a206e65772073747564696f206f776e657220697320746865207a65726f2061646472657373696e697469616c20737570706c792063616e6e6f74206265206d6f7265207468616e206d617820737570706c79657263313135352362616c616e63656f6662617463683a20494e56414c49445f41525241595f4c454e47544865726331313535235f63616c6c6f6e65726331313535626174636872656365697665643a20494e56414c49445f4f4e5f524543454956455f4d455353414745726f6c65733a206163636f756e7420616c7265616479206861732072657175657374656420726f6c656572633131353523736166657472616e7366657266726f6d3a20494e56414c49445f4f50455241544f5277686974656c69737461646d696e726f6c653a2063616c6c657220646f6573206e6f7420686176652074686520626565672077686974656c69737461646d696e2074696e67726f6c65733a206163636f756e7420697320746865207a65726f206164647265737365726331313535235f63616c6c6f6e6572633131353572656365697665643a20494e56414c49445f4f4e5f524543454956455f4d45535341474565726331313535237361666562617463687472616e7366657266726f6d3a20494e56414c49445f524543495049454e546d696e746572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652062656567206e6674206d696e74657220726f6c656572633131353523736166657472616e7366657266726f6d3a20494e56414c49445f524543495049454e54726f6c65733a206163636f756e7420646f6573206e6f742068617665206e656564656420726f6c65a265627a7a723158206574b14a7da2a3abc82f1f2e2a2b1764cc2db3fbcd5d4b2fbc66f6bf58ba5c5864736f6c63430005110032

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

000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1

-----Decoded View---------------
Arg [0] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1

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


Deployed Bytecode Sourcemap

48025:1587:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48025:1587:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43122:49;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;43122:49:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30770:135;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30770:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32851:264;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;32851:264:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;43200:18;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;43200:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43753:218;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;43753:218:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;43753:218:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43069:46;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;43069:46:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;25659:535;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;25659:535:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;25659:535:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;25659:535:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25659:535:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;25659:535:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;25659:535:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;25659:535:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25659:535:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;25659:535:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;25659:535:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;25659:535:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;25659:535:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;25659:535:0;;;;;;;;;;;;;;;:::i;:::-;;43648:97;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;43648:97:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;9063:95;;;:::i;:::-;;31207:538;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31207:538:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;31207:538:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;31207:538:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31207:538:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;31207:538:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;31207:538:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;31207:538:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31207:538:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;31207:538:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;31207:538:0;;;;;;;;;;;;;;;;;43527:113;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;43527:113:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;5396:140;;;:::i;:::-;;46222:440;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;46222:440:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;46222:440:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46222:440:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;46222:440:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;46222:440:0;;;;;;;;;;;;;;;:::i;:::-;;8939:116;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8939:116:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;48380:122;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;48380:122:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;48380:122:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;48380:122:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;48380:122:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;48380:122:0;;;;;;;;;;;;;;;:::i;:::-;;44431:107;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44431:107:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4585:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4951:94;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;48510:112;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;48510:112:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;48510:112:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;48510:112:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;48510:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;48510:112:0;;;;;;;;;;;;;;;:::i;:::-;;48864:118;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;48864:118:0;;;;;;;;;;;;;;;;;:::i;:::-;;43249:20;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;43249:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7715:92;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7715:92:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;7815:79;;;:::i;:::-;;29718:243;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29718:243:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7598:109;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7598:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;45213:696;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;45213:696:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;45213:696:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;45213:696:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;45213:696:0;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;45213:696:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;45213:696:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;45213:696:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8806:125;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8806:125:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;44149:106;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44149:106:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;49297:312;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;49297:312:0;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;49297:312:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;49297:312:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;49297:312:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;49297:312:0;;;;;;;;;;;;;;;:::i;:::-;;43019:43;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;43019:43:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;48630:97;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;48630:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46813:414;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46813:414:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;24679:569;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;24679:569:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;24679:569:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;24679:569:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;24679:569:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;24679:569:0;;;;;;;;;;;;;;;:::i;:::-;;5691:109;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5691:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;48990:220;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;48990:220:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43122:49;;;;;;;;;;;;;;;;;:::o;30770:135::-;30844:7;30876:8;:16;30885:6;30876:16;;;;;;;;;;;;;;;:21;30893:3;30876:21;;;;;;;;;;;;30869:28;;30770:135;;;;:::o;32851:264::-;32922:4;32042:10;32959:26;;32943:42;;;:12;:42;;;;:102;;;;32606:10;33018:27;;33002:43;;;:12;:43;;;;32943:102;32939:146;;;33069:4;33062:11;;;;32939:146;33102:5;33095:12;;32851:264;;;;:::o;43200:18::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43753:218::-;43800:13;43834:12;43842:3;43834:7;:12::i;:::-;43826:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43906:57;43924:15;43906:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43941:21;43958:3;43941:16;:21::i;:::-;43906:17;:57::i;:::-;43899:64;;43753:218;;;:::o;43069:46::-;;;;;;;;;;;;;;;;;:::o;25659:535::-;25864:5;25850:19;;:10;:19;;;25849:60;;;;25874:35;25891:5;25898:10;25874:16;:35::i;:::-;25849:60;25841:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25995:1;25980:17;;:3;:17;;;;25972:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26063:50;26086:5;26093:3;26098:4;26104:8;26063:22;:50::i;:::-;26124:62;26152:5;26159:3;26164:4;26170:8;26180:5;26124:27;:62::i;:::-;25659:535;;;;;:::o;43648:97::-;4797:9;:7;:9::i;:::-;4789:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43715:22;43729:7;43715:13;:22::i;:::-;43648:97;:::o;9063:95::-;9115:35;9137:12;:10;:12::i;:::-;9115:21;:35::i;:::-;9063:95::o;31207:538::-;31306:16;31366:4;:11;31348:7;:14;:29;31340:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31461:30;31508:7;:14;31494:29;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;117:4;105:10;97:6;88:34;148:4;140:6;136:17;126:27;;0:157;31494:29:0;;;;31461:62;;31590:9;31602:1;31590:13;;31585:120;31609:7;:14;31605:1;:18;31585:120;;;31664:8;:20;31673:7;31681:1;31673:10;;;;;;;;;;;;;;31664:20;;;;;;;;;;;;;;;:29;31685:4;31690:1;31685:7;;;;;;;;;;;;;;31664:29;;;;;;;;;;;;31645:13;31659:1;31645:16;;;;;;;;;;;;;:48;;;;;31625:3;;;;;;;31585:120;;;;31724:13;31717:20;;;31207:538;;;;:::o;43527:113::-;4797:9;:7;:9::i;:::-;4789:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43602:30;43624:7;43602:21;:30::i;:::-;43527:113;:::o;5396:140::-;4797:9;:7;:9::i;:::-;4789:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5495:1;5458:40;;5479:6;;;;;;;;;;;5458:40;;;;;;;;;;;;5526:1;5509:6;;:19;;;;;;;;;;;;;;;;;;5396:140::o;46222:440::-;7486:22;7495:12;:10;:12::i;:::-;7486:8;:22::i;:::-;7478:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46373:15;46391:3;46373:21;;46405:17;46425:35;46450:9;46425:11;:20;46437:7;46425:20;;;;;;;;;;;;:24;;:35;;;;:::i;:::-;46405:55;;46492:14;:23;46507:7;46492:23;;;;;;;;;;;;46479:9;:36;;46471:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46560:33;46566:3;46571;46576:9;46587:5;46560;:33::i;:::-;46623:31;46644:9;46623:11;:16;46635:3;46623:16;;;;;;;;;;;;:20;;:31;;;;:::i;:::-;46604:11;:16;46616:3;46604:16;;;;;;;;;;;:50;;;;7581:1;;46222:440;;;;:::o;8939:116::-;8674:30;8691:12;:10;:12::i;:::-;8674:16;:30::i;:::-;8666:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9020:27;9039:7;9020:18;:27::i;:::-;8939:116;:::o;48380:122::-;8674:30;8691:12;:10;:12::i;:::-;8674:16;:30::i;:::-;8666:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48467:27;48487:6;48467:19;:27::i;:::-;48380:122;:::o;44431:107::-;44484:7;44511:14;:19;44526:3;44511:19;;;;;;;;;;;;44504:26;;44431:107;;;:::o;4585:79::-;4623:7;4650:6;;;;;;;;;;;4643:13;;4585:79;:::o;4951:94::-;4991:4;5031:6;;;;;;;;;;;5015:22;;:12;:10;:12::i;:::-;:22;;;5008:29;;4951:94;:::o;48510:112::-;8674:30;8691:12;:10;:12::i;:::-;8674:16;:30::i;:::-;8666:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48608:6;48593:12;:21;;;;;;;;;;;;:::i;:::-;;48510:112;:::o;48864:118::-;8674:30;8691:12;:10;:12::i;:::-;8674:16;:30::i;:::-;8666:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48958:11;:16;48970:3;48958:16;;;;;;;;;;;;48936:14;:19;48951:3;48936:19;;;;;;;;;;;:38;;;;48864:118;:::o;43249:20::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7715:92::-;7486:22;7495:12;:10;:12::i;:::-;7486:8;:22::i;:::-;7478:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7780:19;7791:7;7780:10;:19::i;:::-;7715:92;:::o;7815:79::-;7859:27;7873:12;:10;:12::i;:::-;7859:13;:27::i;:::-;7815:79::o;29718:243::-;29880:9;29845;:21;29855:10;29845:21;;;;;;;;;;;;;;;:32;29867:9;29845:32;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;29932:9;29905:48;;29920:10;29905:48;;;29943:9;29905:48;;;;;;;;;;;;;;;;;;;;;;29718:243;;:::o;7598:109::-;7654:4;7678:21;7691:7;7678:8;:12;;:21;;;;:::i;:::-;7671:28;;7598:109;;;:::o;45213:696::-;45397:15;8674:30;8691:12;:10;:12::i;:::-;8674:16;:30::i;:::-;8666:112;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45451:10;45433:14;:28;;45425:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45522:11;45536:17;:15;:17::i;:::-;45522:31;;45564:23;:21;:23::i;:::-;45614:10;45598:8;:13;45607:3;45598:13;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;45662:1;45647:4;;45641:18;;:22;45637:74;;;45695:3;45685:14;45689:4;;45685:14;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;45685:14:0;;;;;;;;;;;;;;45637:74;45745:1;45727:14;:19;45723:70;;45748:45;45754:10;45766:3;45771:14;45787:5;;45748:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;45748:45:0;;;;;;:5;:45::i;:::-;45723:70;45823:14;45804:11;:16;45816:3;45804:16;;;;;;;;;;;:33;;;;45870:10;45848:14;:19;45863:3;45848:19;;;;;;;;;;;:32;;;;45898:3;45891:10;;;45213:696;;;;;;;;:::o;8806:125::-;8870:4;8894:29;8915:7;8894:16;:20;;:29;;;;:::i;:::-;8887:36;;8806:125;;;:::o;44149:106::-;44204:7;44231:11;:16;44243:3;44231:16;;;;;;;;;;;;44224:23;;44149:106;;;:::o;49297:312::-;7486:22;7495:12;:10;:12::i;:::-;7486:8;:22::i;:::-;7478:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49435:10;:17;49415:11;:16;49427:3;49415:16;;;;;;;;;;;;49393:14;:19;49408:3;49393:19;;;;;;;;;;;;:38;:59;;49385:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49501:9;49513:1;49501:13;;49496:106;49520:10;:17;49516:1;:21;49496:106;;;49559:31;49564:10;49575:1;49564:13;;;;;;;;;;;;;;49579:3;49584:1;49559:31;;;;;;;;;;;;:4;:31::i;:::-;49539:3;;;;;;;49496:106;;;;49297:312;;:::o;43019:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;48630:97::-;48674:13;48707:12;48700:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48630:97;:::o;46813:414::-;46895:15;46986:27;47030:20;;;;;;;;;;;46986:65;;47108:9;47066:51;;47074:13;:21;;;47096:6;47074:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47074:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;47074:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;47074:29:0;;;;;;;;;;;;;;;;47066:51;;;47062:95;;;47141:4;47134:11;;;;;47062:95;47176:43;47201:6;47209:9;47176:24;:43::i;:::-;47169:50;;;46813:414;;;;;:::o;24679:569::-;24834:5;24820:19;;:10;:19;;;24819:60;;;;24844:35;24861:5;24868:10;24844:16;:35::i;:::-;24819:60;24811:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24960:1;24945:17;;:3;:17;;;;24937:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25131:43;25149:5;25156:3;25161;25166:7;25131:17;:43::i;:::-;25185:55;25208:5;25215:3;25220;25225:7;25234:5;25185:22;:55::i;:::-;24679:569;;;;;:::o;5691:109::-;4797:9;:7;:9::i;:::-;4789:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5764:28;5783:8;5764:18;:28::i;:::-;5691:109;:::o;48990:220::-;7486:22;7495:12;:10;:12::i;:::-;7486:8;:22::i;:::-;7478:92;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49117:7;49089:24;49099:8;49109:3;49089:9;:24::i;:::-;:35;;49081:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49173:29;49179:8;49189:3;49194:7;49173:5;:29::i;:::-;48990:220;;;:::o;47463:112::-;47516:4;47565:1;47540:27;;:8;:13;47549:3;47540:13;;;;;;;;;;;;;;;;;;;;;:27;;;;47533:34;;47463:112;;;:::o;41901:498::-;41954:27;42004:1;41998:2;:7;41994:50;;;42022:10;;;;;;;;;;;;;;;;;;;;;41994:50;42054:9;42066:2;42054:14;;42079:11;42101:69;42113:1;42108;:6;42101:69;;42131:5;;;;;;;42156:2;42151:7;;;;;;;;;42101:69;;;42180:17;42210:3;42200:14;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;42200:14:0;;;;42180:34;;42225:9;42243:1;42237:3;:7;42225:19;;42255:107;42268:1;42262:2;:7;42255:107;;42322:2;42317;:7;;;;;;42311:2;:14;42298:29;;42286:4;42291:3;;;;;;;42286:9;;;;;;;;;;;:41;;;;;;;;;;;42348:2;42342:8;;;;;;;;;42255:107;;;42386:4;42372:19;;;;;;41901:498;;;;:::o;41745:148::-;41823:13;41856:29;41866:2;41870;41856:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:29::i;:::-;41849:36;;41745:148;;;;:::o;27920:741::-;28083:8;:15;28068:4;:11;:30;28060:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28211:17;28231:4;:11;28211:31;;28296:9;28308:1;28296:13;;28291:269;28315:9;28311:1;:13;28291:269;;;28428:41;28457:8;28466:1;28457:11;;;;;;;;;;;;;;28428:8;:15;28437:5;28428:15;;;;;;;;;;;;;;;:24;28444:4;28449:1;28444:7;;;;;;;;;;;;;;28428:24;;;;;;;;;;;;:28;;:41;;;;:::i;:::-;28401:8;:15;28410:5;28401:15;;;;;;;;;;;;;;;:24;28417:4;28422:1;28417:7;;;;;;;;;;;;;;28401:24;;;;;;;;;;;:68;;;;28509:39;28536:8;28545:1;28536:11;;;;;;;;;;;;;;28509:8;:13;28518:3;28509:13;;;;;;;;;;;;;;;:22;28523:4;28528:1;28523:7;;;;;;;;;;;;;;28509:22;;;;;;;;;;;;:26;;:39;;;;:::i;:::-;28484:8;:13;28493:3;28484:13;;;;;;;;;;;;;;;:22;28498:4;28503:1;28498:7;;;;;;;;;;;;;;28484:22;;;;;;;;;;;:64;;;;28326:3;;;;;;;28291:269;;;;28633:3;28600:53;;28626:5;28600:53;;28614:10;28600:53;;;28638:4;28644:8;28600:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;28600:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;28600:53:0;;;;;;;;;;;;;;;;;;;27920:741;;;;;:::o;28787:504::-;29003:16;:3;:14;;;:16::i;:::-;28999:285;;;29036:13;29074:3;29052:49;;;29102:10;29114:5;29121:4;29127:8;29137:5;29052:91;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;29052:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;29052:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;29052:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29052:91:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29052:91:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;29052:91:0;;;;;;;;;;;;;;;;29036:107;;23532:10;29176:28;;29166:38;;;:6;:38;;;;29158:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28999:285;;28787:504;;;;;:::o;8032:130::-;8092:24;8108:7;8092:8;:15;;:24;;;;:::i;:::-;8146:7;8132:22;;;;;;;;;;;;8032:130;:::o;3376:98::-;3421:15;3456:10;3449:17;;3376:98;:::o;9320:154::-;9388:32;9412:7;9388:16;:23;;:32;;;;:::i;:::-;9458:7;9436:30;;;;;;;;;;;;9320:154;:::o;11522:176::-;11580:7;11600:9;11616:1;11612;:5;11600:17;;11641:1;11636;:6;;11628:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11689:1;11682:8;;;11522:176;;;;:::o;37134:429::-;37287:31;37310:7;37287:8;:13;37296:3;37287:13;;;;;;;;;;;;;;;:18;37301:3;37287:18;;;;;;;;;;;;:22;;:31;;;;:::i;:::-;37266:8;:13;37275:3;37266:13;;;;;;;;;;;;;;;:18;37280:3;37266:18;;;;;;;;;;;:52;;;;37400:3;37359:59;;37394:3;37359:59;;37374:10;37359:59;;;37405:3;37410:7;37359:59;;;;;;;;;;;;;;;;;;;;;;;;37493:62;37524:3;37530;37535;37540:7;37549:5;37493:22;:62::i;:::-;37134:429;;;;:::o;9166:146::-;9231:29;9252:7;9231:16;:20;;:29;;;;:::i;:::-;9296:7;9276:28;;;;;;;;;;;;9166:146;:::o;35469:129::-;35571:19;35553:15;:37;;;;;;;;;;;;:::i;:::-;;35469:129;:::o;7902:122::-;7959:21;7972:7;7959:8;:12;;:21;;;;:::i;:::-;8008:7;7996:20;;;;;;;;;;;;7902:122;:::o;6949:203::-;7021:4;7065:1;7046:21;;:7;:21;;;;7038:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7124:4;:11;;:20;7136:7;7124:20;;;;;;;;;;;;;;;;;;;;;;;;;7117:27;;6949:203;;;;:::o;47723:106::-;47772:7;47799:22;47819:1;47799:15;;:19;;:22;;;;:::i;:::-;47792:29;;47723:106;:::o;47908:77::-;47960:15;;:17;;;;;;;;;;;;;47908:77::o;30234:163::-;30321:15;30361:9;:17;30371:6;30361:17;;;;;;;;;;;;;;;:28;30379:9;30361:28;;;;;;;;;;;;;;;;;;;;;;;;;30354:35;;30234:163;;;;:::o;26620:400::-;26786:33;26811:7;26786:8;:15;26795:5;26786:15;;;;;;;;;;;;;;;:20;26802:3;26786:20;;;;;;;;;;;;:24;;:33;;;;:::i;:::-;26763:8;:15;26772:5;26763:15;;;;;;;;;;;;;;;:20;26779:3;26763:20;;;;;;;;;;;:56;;;;26870:31;26893:7;26870:8;:13;26879:3;26870:13;;;;;;;;;;;;;;;:18;26884:3;26870:18;;;;;;;;;;;;:22;;:31;;;;:::i;:::-;26849:8;:13;26858:3;26849:13;;;;;;;;;;;;;;;:18;26863:3;26849:18;;;;;;;;;;;:52;;;;26994:3;26960:52;;26987:5;26960:52;;26975:10;26960:52;;;26999:3;27004:7;26960:52;;;;;;;;;;;;;;;;;;;;;;;;26620:400;;;;:::o;27141:457::-;27328:16;:3;:14;;;:16::i;:::-;27324:267;;;27361:13;27399:3;27377:44;;;27422:10;27434:5;27441:3;27446:7;27455:5;27377:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;27377:84:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27377:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;27377:84:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27377:84:0;;;;;;;;;;;;;;;;27361:100;;23459:10;27494:22;;27484:32;;;:6;:32;;;;27476:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27324:267;;27141:457;;;;;:::o;5906:236::-;6000:1;5980:22;;:8;:22;;;;5972:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6097:8;6068:38;;6089:6;;;;;;;;;;;6068:38;;;;;;;;;;;;6126:8;6117:6;;:17;;;;;;;;;;;;;;;;;;5906:236;:::o;39023:285::-;39165:33;39190:7;39165:8;:15;39174:5;39165:15;;;;;;;;;;;;;;;:20;39181:3;39165:20;;;;;;;;;;;;:24;;:33;;;;:::i;:::-;39142:8;:15;39151:5;39142:15;;;;;;;;;;;;;;;:20;39158:3;39142:20;;;;;;;;;;;:56;;;;39281:3;39239:61;;39266:5;39239:61;;39254:10;39239:61;;;39287:3;39292:7;39239:61;;;;;;;;;;;;;;;;;;;;;;;;39023:285;;;:::o;40324:970::-;40508:13;40534:16;40559:2;40534:28;;40573:16;40598:2;40573:28;;40612:16;40637:2;40612:28;;40651:16;40676:2;40651:28;;40690:16;40715:2;40690:28;;40729:19;40814:3;:10;40801:3;:10;40788:3;:10;40775:3;:10;40762:3;:10;:23;:36;:49;:62;40751:74;;;;;;;;;;;;;;;;;;;;;;;;;29:1:-1;21:6;17:14;116:4;104:10;96:6;87:34;147:4;139:6;135:17;125:27;;0:156;40751:74:0;;;;40729:96;;40836:19;40864:5;40836:34;;40881:9;40893:1;40881:13;;40910:9;40922:1;40910:13;;40905:61;40929:3;:10;40925:1;:14;40905:61;;;40960:3;40964:1;40960:6;;;;;;;;;;;;;;;;40946;40953:3;;;;;;40946:11;;;;;;;;;;;:20;;;;;;;;;;;40941:3;;;;;;;40905:61;;;;40982:9;40994:1;40982:13;;40977:61;41001:3;:10;40997:1;:14;40977:61;;;41032:3;41036:1;41032:6;;;;;;;;;;;;;;;;41018;41025:3;;;;;;41018:11;;;;;;;;;;;:20;;;;;;;;;;;41013:3;;;;;;;40977:61;;;;41054:9;41066:1;41054:13;;41049:61;41073:3;:10;41069:1;:14;41049:61;;;41104:3;41108:1;41104:6;;;;;;;;;;;;;;;;41090;41097:3;;;;;;41090:11;;;;;;;;;;;:20;;;;;;;;;;;41085:3;;;;;;;41049:61;;;;41126:9;41138:1;41126:13;;41121:61;41145:3;:10;41141:1;:14;41121:61;;;41176:3;41180:1;41176:6;;;;;;;;;;;;;;;;41162;41169:3;;;;;;41162:11;;;;;;;;;;;:20;;;;;;;;;;;41157:3;;;;;;;41121:61;;;;41198:9;41210:1;41198:13;;41193:61;41217:3;:10;41213:1;:14;41193:61;;;41248:3;41252:1;41248:6;;;;;;;;;;;;;;;;41234;41241:3;;;;;;41234:11;;;;;;;;;;;:20;;;;;;;;;;;41229:3;;;;;;;41193:61;;;;41279:6;41265:21;;;;;;;;;;40324:970;;;;;;;:::o;11257:177::-;11315:7;11348:1;11343;:6;;11335:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11388:9;11404:1;11400;:5;11388:17;;11425:1;11418:8;;;11257:177;;;;:::o;22345:715::-;22405:4;22422:16;22449:19;22471:66;22449:88;;;;22981:7;22969:20;22957:32;;23021:3;23009:15;;:8;:15;;:42;;;;;23040:11;23028:8;:23;;23009:42;23001:51;;;;22345:715;;;:::o;6664:190::-;6744:18;6748:4;6754:7;6744:3;:18::i;:::-;6736:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6841:5;6818:4;:11;;:20;6830:7;6818:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;6664:190;;:::o;6396:188::-;6474:18;6478:4;6484:7;6474:3;:18::i;:::-;6473:19;6465:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6572:4;6549;:11;;:20;6561:7;6549:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;6396:188;;:::o;48025:1587::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://6574b14a7da2a3abc82f1f2e2a2b1764cc2db3fbcd5d4b2fbc66f6bf58ba5c58
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.