Token KudosZone

Overview CRC1155

Total Supply:
0 KZ

Holders:
0 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
KudosZone

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-11
*/

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

library Strings {

    function toString(uint256 value) internal pure returns (string memory) {

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        uint256 index = digits - 1;
        temp = value;
        while (temp != 0) {
            buffer[index--] = bytes1(uint8(48 + temp % 10));
            temp /= 10;
        }
        return string(buffer);
    }
}

library EnumerableMap {

    struct MapEntry {
        bytes32 _key;
        bytes32 _value;
    }

    struct Map {
        MapEntry[] _entries;

        mapping (bytes32 => uint256) _indexes;
    }

    function _set(Map storage map, bytes32 key, bytes32 value) private returns (bool) {
        uint256 keyIndex = map._indexes[key];

        if (keyIndex == 0) { // Equivalent to !contains(map, key)
            map._entries.push(MapEntry({ _key: key, _value: value }));
            map._indexes[key] = map._entries.length;
            return true;
        } else {
            map._entries[keyIndex - 1]._value = value;
            return false;
        }
    }

    function _remove(Map storage map, bytes32 key) private returns (bool) {
        uint256 keyIndex = map._indexes[key];

        if (keyIndex != 0) { // Equivalent to contains(map, key)
            uint256 toDeleteIndex = keyIndex - 1;
            uint256 lastIndex = map._entries.length - 1;
            MapEntry storage lastEntry = map._entries[lastIndex];

            map._entries[toDeleteIndex] = lastEntry;
            map._indexes[lastEntry._key] = toDeleteIndex + 1; // All indexes are 1-based

            map._entries.pop();

            delete map._indexes[key];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Map storage map, bytes32 key) private view returns (bool) {
        return map._indexes[key] != 0;
    }

    function _length(Map storage map) private view returns (uint256) {
        return map._entries.length;
    }

    function _at(Map storage map, uint256 index) private view returns (bytes32, bytes32) {
        require(map._entries.length > index, "EnumerableMap: index out of bounds");

        MapEntry storage entry = map._entries[index];
        return (entry._key, entry._value);
    }

    function _tryGet(Map storage map, bytes32 key) private view returns (bool, bytes32) {
        uint256 keyIndex = map._indexes[key];
        if (keyIndex == 0) return (false, 0); // Equivalent to contains(map, key)
        return (true, map._entries[keyIndex - 1]._value); // All indexes are 1-based
    }

    function _get(Map storage map, bytes32 key) private view returns (bytes32) {
        uint256 keyIndex = map._indexes[key];
        require(keyIndex != 0, "EnumerableMap: nonexistent key"); // Equivalent to contains(map, key)
        return map._entries[keyIndex - 1]._value; // All indexes are 1-based
    }

    function _get(Map storage map, bytes32 key, string memory errorMessage) private view returns (bytes32) {
        uint256 keyIndex = map._indexes[key];
        require(keyIndex != 0, errorMessage); // Equivalent to contains(map, key)
        return map._entries[keyIndex - 1]._value; // All indexes are 1-based
    }

    struct UintToAddressMap {
        Map _inner;
    }

    function set(UintToAddressMap storage map, uint256 key, address value) internal returns (bool) {
        return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));
    }

    function remove(UintToAddressMap storage map, uint256 key) internal returns (bool) {
        return _remove(map._inner, bytes32(key));
    }

    function contains(UintToAddressMap storage map, uint256 key) internal view returns (bool) {
        return _contains(map._inner, bytes32(key));
    }

    function length(UintToAddressMap storage map) internal view returns (uint256) {
        return _length(map._inner);
    }

    function at(UintToAddressMap storage map, uint256 index) internal view returns (uint256, address) {
        (bytes32 key, bytes32 value) = _at(map._inner, index);
        return (uint256(key), address(uint160(uint256(value))));
    }

    function tryGet(UintToAddressMap storage map, uint256 key) internal view returns (bool, address) {
        (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));
        return (success, address(uint160(uint256(value))));
    }

    function get(UintToAddressMap storage map, uint256 key) internal view returns (address) {
        return address(uint160(uint256(_get(map._inner, bytes32(key)))));
    }

    function get(UintToAddressMap storage map, uint256 key, string memory errorMessage) internal view returns (address) {
        return address(uint160(uint256(_get(map._inner, bytes32(key), errorMessage))));
    }
}

library EnumerableSet {
    struct Set {
        bytes32[] _values;
        mapping (bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            bytes32 lastvalue = set._values[lastIndex];

            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            set._values.pop();

            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

interface IERC165 {

    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */ 

    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC1155 is IERC165 {

    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);
    event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values);
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);
    event URI(string value, uint256 indexed id);
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function balanceOf(address account, uint256 id) external view returns (uint256);
    function royaltyFee(uint256 tokenId) external view returns(uint256);
    function getCreator(uint256 tokenId) external view returns(address);
    function tokenURI(uint256 tokenId) external view returns (string memory);
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory);
    function setApprovalForAll(address operator, bool approved) external;
    function isApprovedForAll(address account, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external;
    function safeBatchTransferFrom(address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data) external;
}

interface IERC1155MetadataURI is IERC1155 {
}

interface IERC1155Receiver is IERC165 {
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    )
        external
        returns(bytes4);

    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    )
        external
        returns(bytes4);
}

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

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

contract ERC165 is IERC165 {
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor () {
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    function supportsInterface(bytes4 interfaceId) public view override returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    function _registerInterface(bytes4 interfaceId) internal virtual {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}

/**
 * @title SafeMath
 * @dev Math operations with safety checks that throw on error
*/

library SafeMath {

    /**
    * @dev Adds two numbers, throws on overflow.
    */

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

        return c;
    }

    /**
    * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend).
    */

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
    * @dev Multiplies two numbers, throws on overflow.
    */

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
    * @dev Integer division of two numbers, truncating the quotient.
    */

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

    /**
    * @dev Integer modulo of two numbers, truncating the remainder.
    */

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {

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

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using SafeMath for uint256;
    using Address for address;
    using Strings for uint256;
    using EnumerableMap for EnumerableMap.UintToAddressMap;

    // Mapping from token ID to account balances
    mapping (uint256 => address) private creators;
    mapping (uint256 => uint256) private _royaltyFee;
    mapping (uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping (address => mapping(address => bool)) private _operatorApprovals;
    string public tokenURIPrefix;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

    EnumerableMap.UintToAddressMap private _tokenOwners;

    string private _name;

    string private _symbol;

    bytes4 private constant _INTERFACE_ID_ERC1155 = 0xd9b67a26;

    bytes4 private constant _INTERFACE_ID_ERC1155_METADATA_URI = 0x0e89341c;

    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;

        _registerInterface(_INTERFACE_ID_ERC1155);
        _registerInterface(_INTERFACE_ID_ERC1155_METADATA_URI);
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
        * @dev Internal function to set the token URI for a given token.
        * Reverts if the token ID does not exist.
        * @param tokenId uint256 ID of the token to set its URI
        * @param uri string URI to assign
    */    

    function _setTokenURI(uint256 tokenId, string memory uri) public {
        _tokenURIs[tokenId] = uri;
    }

    /**
        @notice Get the royalty associated with tokenID.
        @param tokenId     ID of the Token.
        @return        royaltyFee of given ID.
     */

    function royaltyFee(uint256 tokenId) public view override returns(uint256) {
        return _royaltyFee[tokenId];
    }

    /**
        @notice Get the creator of given tokenID.
        @param tokenId     ID of the Token.
        @return        creator of given ID.
     */    

    function getCreator(uint256 tokenId) public view virtual override returns(address) {
        return creators[tokenId];
    }

    /**
        * @dev Internal function to set the token URI for all the tokens.
        * @param _tokenURIPrefix string memory _tokenURIPrefix of the tokens.
    */   

    function _setTokenURIPrefix(string memory _tokenURIPrefix) public {
        tokenURIPrefix = _tokenURIPrefix;
    }

    /**
        * @dev Returns an URI for a given token ID.
        * Throws if the token ID does not exist. May return an empty string.
        * @param tokenId uint256 ID of the token to query
    */    

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC1155Metadata: URI query for nonexistent token");
        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = tokenURIPrefix;

        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }
        return string(abi.encodePacked(base, tokenId.toString()));
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _tokenOwners.contains(tokenId);
    }

    /**
        @notice Get the balance of an account's Tokens.
        @param account  The address of the token holder
        @param tokenId     ID of the Token
        @return        The owner's balance of the Token type requested
     */

    function balanceOf(address account, uint256 tokenId) public view override returns (uint256) {
        require(_exists(tokenId), "ERC1155Metadata: balance query for nonexistent token");
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[tokenId][account];
    }


    /**
        @notice Get the balance of multiple account/token pairs
        @param accounts 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 accounts,
        uint256[] memory ids
    )
        public
        view
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            require(accounts[i] != address(0), "ERC1155: batch balance query for the zero address");
            batchBalances[i] = _balances[ids[i]][accounts[i]];
        }

        return batchBalances;
    }

    /**
        @notice Enable or disable approval for a third party ("operator") to manage all of the 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) public virtual override {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
        @notice Queries the approval status of an operator for a given owner.
        @param account     The owner of the Tokens
        @param operator  Address of authorized operator
        @return           True if the operator is approved, false if not
    */

    function isApprovedForAll(address account, address operator) public view override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
        @notice Transfers `_value` amount of an `_id` from the `_from` address to the `_to` address specified (with safety call).
        @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
        MUST revert if `_to` is the zero address.
        MUST revert if balance of holder for token `_id` is lower than the `_value` sent.
        MUST revert on any other error.
        MUST emit the `TransferSingle` event to reflect the balance change (see "Safe Transfer Rules" section of the standard).
        After the above conditions are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call `onERC1155Received` on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
        @param from    Source address
        @param to      Target address
        @param tokenId      ID of the token type
        @param amount   Transfer amount
        @param data    Additional data with no specified format, MUST be sent unaltered in call to `onERC1155Received` on `_to`
    */    

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        uint256 amount,
        bytes memory data
    )
        public
        virtual
        override
    {
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(tokenId), _asSingletonArray(amount), data);

        _balances[tokenId][from] = _balances[tokenId][from].sub(amount, "ERC1155: insufficient balance for transfer");
        _balances[tokenId][to] = _balances[tokenId][to].add(amount);

        emit TransferSingle(operator, from, to, tokenId, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, tokenId, amount, data);
    }

    /**
        @notice Transfers `_values` amount(s) of `_ids` from the `_from` address to the `_to` address specified (with safety call).
        @dev Caller must be approved to manage the tokens being transferred out of the `_from` account (see "Approval" section of the standard).
        MUST revert if `_to` is the zero address.
        MUST revert if length of `_ids` is not the same as length of `_values`.
        MUST revert if any of the balance(s) of the holder(s) for token(s) in `_ids` is lower than the respective amount(s) in `_values` sent to the recipient.
        MUST revert on any other error.
        MUST emit `TransferSingle` or `TransferBatch` event(s) such that all the balance changes are reflected (see "Safe Transfer Rules" section of the standard).
        Balance changes and events MUST follow the ordering of the arrays (_ids[0]/_values[0] before _ids[1]/_values[1], etc).
        After the above conditions for the transfer(s) in the batch are met, this function MUST check if `_to` is a smart contract (e.g. code size > 0). If so, it MUST call the relevant `ERC1155TokenReceiver` hook(s) on `_to` and act appropriately (see "Safe Transfer Rules" section of the standard).
        @param from    Source address
        @param to      Target address
        @param tokenIds     IDs of each token type (order and length must match _values array)
        @param amounts  Transfer amounts per token type (order and length must match _ids array)
        @param data    Additional data with no specified format, MUST be sent unaltered in call to the `ERC1155TokenReceiver` hook(s) on `_to`
    */

    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory tokenIds,
        uint256[] memory amounts,
        bytes memory data
    )
        public
        virtual
        override
    {
        require(tokenIds.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, tokenIds, amounts, data);

        for (uint256 i = 0; i < tokenIds.length; ++i) {
            uint256 tokenId = tokenIds[i];
            uint256 amount = amounts[i];

            _balances[tokenId][from] = _balances[tokenId][from].sub(
                amount,
                "ERC1155: insufficient balance for transfer"
            );
            _balances[tokenId][to] = _balances[tokenId][to].add(amount);
        }

        emit TransferBatch(operator, from, to, tokenIds, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, tokenIds, amounts, data);
    }



    /**
        * @dev Internal function to mint a new token.
        * Reverts if the given token ID already exists.
        * @param tokenId uint256 ID of the token to be minted
        * @param _supply uint256 supply of the token to be minted
        * @param _uri string memory URI of the token to be minted
        * @param _fee uint256 royalty of the token to be minted
    */

    function _mint(uint256 tokenId, uint256 _supply, string memory _uri, uint256 _fee) internal {
        require(!_exists(tokenId), "ERC1155: token already minted");
        require(_supply != 0, "Supply should be positive");
        require(bytes(_uri).length > 0, "uri should be set");

        creators[tokenId] = msg.sender;
        _tokenOwners.set(tokenId, msg.sender);
        _royaltyFee[tokenId] = _fee;
        _balances[tokenId][msg.sender] = _supply;
        _setTokenURI(tokenId, _uri);

        emit TransferSingle(msg.sender, address(0x0), msg.sender, tokenId, _supply);
        emit URI(_uri, tokenId);
    }

    /**
        * @dev version of {_mint}.
        *
        * Requirements:
        *
        * - `tokenIds` and `amounts` must have the same length.
    */

    function _mintBatch(address to, uint256[] memory tokenIds, uint256[] memory amounts, bytes memory data) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(tokenIds.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, tokenIds, amounts, data);

        for (uint i = 0; i < tokenIds.length; i++) {
            _balances[tokenIds[i]][to] = amounts[i].add(_balances[tokenIds[i]][to]);
        }

        emit TransferBatch(operator, address(0), to, tokenIds, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, tokenIds, amounts, data);
    }

    /**
        * @dev Internal function to burn a specific token.
        * Reverts if the token does not exist.
        * Deprecated, use {ERC721-_burn} instead.
        * @param account owner of the token to burn
        * @param tokenId uint256 ID of the token being burned
        * @param amount uint256 amount of supply being burned
    */    

    function _burn(address account, uint256 tokenId, uint256 amount) internal virtual {
        require(_exists(tokenId), "ERC1155Metadata: burn query for nonexistent token");
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), _asSingletonArray(tokenId), _asSingletonArray(amount), "");

        _balances[tokenId][account] = _balances[tokenId][account].sub(
            amount,
            "ERC_holderTokens1155: burn amount exceeds balance"
        );


        emit TransferSingle(operator, account, address(0), tokenId, amount);
    }


    /**
        * @dev version of {_burn}.
        * Requirements:
        * - `ids` and `amounts` must have the same length.
    */

    function _burnBatch(address account, uint256[] memory tokenIds, uint256[] memory amounts) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(tokenIds.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, account, address(0), tokenIds, amounts, "");

        for (uint i = 0; i < tokenIds.length; i++) {
            _balances[tokenIds[i]][account] = _balances[tokenIds[i]][account].sub(
                amounts[i],
                "ERC1155: burn amount exceeds balance"
            );
        }

        emit TransferBatch(operator, account, address(0), tokenIds, amounts);
    }


    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory tokenIds,
        uint256[] memory amounts,
        bytes memory data
    )
        internal virtual
    { }

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 tokenId,
        uint256 amount,
        bytes memory data
    )
        private
    {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, tokenId, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver(to).onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory tokenIds,
        uint256[] memory amounts,
        bytes memory data
    )
        private
    {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, tokenIds, amounts, data) returns (bytes4 response) {
                if (response != IERC1155Receiver(to).onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

contract KudosZone is ERC1155 {

    uint256 newItemId = 1;
    address public owner;

    // struct Sign {
    //     uint8 v;
    //     bytes32 r;
    //     bytes32 s;
    // }

    constructor (string memory name, string memory symbol, string memory tokenURIPrefix) ERC1155 (name, symbol) {
        owner = msg.sender;
        _setTokenURIPrefix(tokenURIPrefix);

    }

    modifier onlyOwner() {
        require(owner == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    /** @dev change the Ownership from current owner to newOwner address
        @param newOwner : newOwner address */    

    function ownerTransfership(address newOwner) public onlyOwner returns(bool){
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        owner = newOwner;
        return true;
    }

   

    // function verifySign(string memory tokenURI, Sign memory sign) internal view {
    //     bytes32 hash = keccak256(abi.encodePacked(this,tokenURI));
    //     require(owner == ecrecover(keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)), sign.v, sign.r, sign.s), "Owner sign verification failed");
    // }

    function mint(string memory uri, uint256 supply, uint256 fee)  public {
      //  verifySign(uri, sign);
        _mint(newItemId, supply, uri,fee);
        newItemId = newItemId+1;
    }

    function burn(uint256 tokenId, uint256 supply) public {
        _burn(msg.sender, tokenId, supply);
    }

    function burnBatch(address account, uint256[] memory tokenIds, uint256[] memory amounts) public {
        _burnBatch(account, tokenIds, amounts);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"string","name":"tokenURIPrefix","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":"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":"values","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":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uri","type":"string"}],"name":"_setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURIPrefix","type":"string"}],"name":"_setTokenURIPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"supply","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getCreator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"},{"internalType":"uint256","name":"supply","type":"uint256"},{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"ownerTransfership","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"royaltyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenURIPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]

60806040526001600b553480156200001657600080fd5b5060405162002962380380620029628339810160408190526200003991620002bb565b82826200004d6301ffc9a760e01b620000c5565b81516200006290600990602085019062000162565b5080516200007890600a90602084019062000162565b506200008b636cdb3d1360e11b620000c5565b6200009d6303a24d0760e21b620000c5565b5050600c80546001600160a01b03191633179055620000bc8162000149565b5050506200039b565b6001600160e01b03198082161415620001245760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b80516200015e90600590602084019062000162565b5050565b828054620001709062000348565b90600052602060002090601f016020900481019282620001945760008555620001df565b82601f10620001af57805160ff1916838001178555620001df565b82800160010185558215620001df579182015b82811115620001df578251825591602001919060010190620001c2565b50620001ed929150620001f1565b5090565b5b80821115620001ed5760008155600101620001f2565b600082601f83011262000219578081fd5b81516001600160401b038082111562000236576200023662000385565b604051601f8301601f19908116603f0116810190828211818310171562000261576200026162000385565b816040528381526020925086838588010111156200027d578485fd5b8491505b83821015620002a0578582018301518183018401529082019062000281565b83821115620002b157848385830101525b9695505050505050565b600080600060608486031215620002d0578283fd5b83516001600160401b0380821115620002e7578485fd5b620002f58783880162000208565b945060208601519150808211156200030b578384fd5b620003198783880162000208565b935060408601519150808211156200032f578283fd5b506200033e8682870162000208565b9150509250925092565b600181811c908216806200035d57607f821691505b602082108114156200037f57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b6125b780620003ab6000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c80638da5cb5b116100ad578063c57dc23511610071578063c57dc2351461029d578063c87b56dd146102bd578063d48e638a146102d0578063e985e9c5146102f9578063f242432a1461033557600080fd5b80638da5cb5b1461023c57806395d89b4114610267578063a22cb4651461026f578063b390c0ab14610282578063c0ac99831461029557600080fd5b80632eb2c2d6116100f45780632eb2c2d6146101d05780633f564508146101e35780634e1273f4146101f65780636b20c454146102165780636fdc202f1461022957600080fd5b8062fdd58e14610130578063015388681461015657806301ffc9a71461016b57806306fdde03146101a85780631c635ded146101bd575b600080fd5b61014361013e366004611e04565b610348565b6040519081526020015b60405180910390f35b610169610164366004611fc4565b610453565b005b610198610179366004611ef7565b6001600160e01b03191660009081526020819052604090205460ff1690565b604051901515815260200161014d565b6101b0610477565b60405161014d9190612198565b6101696101cb366004611f61565b610509565b6101696101de366004611c53565b61052d565b6101696101f1366004611f2f565b61079c565b610209610204366004611e2d565b6107b3565b60405161014d9190612157565b610169610224366004611d5a565b6109e5565b610198610237366004611c07565b6109f0565b600c5461024f906001600160a01b031681565b6040516001600160a01b03909116815260200161014d565b6101b0610ad6565b61016961027d366004611dca565b610ae5565b610169610290366004611ffe565b610bbc565b6101b0610bc7565b6101436102ab366004611fac565b60009081526002602052604090205490565b6101b06102cb366004611fac565b610c55565b61024f6102de366004611fac565b6000908152600160205260409020546001600160a01b031690565b610198610307366004611c21565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205460ff1690565b610169610343366004611cf8565b610e4b565b600061035382610ffe565b6103c15760405162461bcd60e51b815260206004820152603460248201527f455243313135354d657461646174613a2062616c616e6365207175657279206660448201527337b9103737b732bc34b9ba32b73a103a37b5b2b760611b60648201526084015b60405180910390fd5b6001600160a01b03831661042b5760405162461bcd60e51b815260206004820152602b60248201527f455243313135353a2062616c616e636520717565727920666f7220746865207a60448201526a65726f206164647265737360a81b60648201526084016103b8565b5060009081526003602090815260408083206001600160a01b03949094168352929052205490565b6000828152600660209081526040909120825161047292840190611a75565b505050565b60606009805461048690612370565b80601f01602080910402602001604051908101604052809291908181526020018280546104b290612370565b80156104ff5780601f106104d4576101008083540402835291602001916104ff565b820191906000526020600020905b8154815290600101906020018083116104e257829003601f168201915b5050505050905090565b610517600b54838584611011565b600b546105259060016122e6565b600b55505050565b815183511461054e5760405162461bcd60e51b81526004016103b89061227b565b6001600160a01b0384166105745760405162461bcd60e51b81526004016103b8906121f3565b6001600160a01b03851633148061059057506105908533610307565b6105f75760405162461bcd60e51b815260206004820152603260248201527f455243313135353a207472616e736665722063616c6c6572206973206e6f74206044820152711bdddb995c881b9bdc88185c1c1c9bdd995960721b60648201526084016103b8565b3360005b845181101561072e57600085828151811061062657634e487b7160e01b600052603260045260246000fd5b60200260200101519050600085838151811061065257634e487b7160e01b600052603260045260246000fd5b602002602001015190506106bf816040518060600160405280602a8152602001612527602a91396003600086815260200190815260200160002060008d6001600160a01b03166001600160a01b03168152602001908152602001600020546111d79092919063ffffffff16565b60008381526003602090815260408083206001600160a01b038e811685529252808320939093558a16815220546106f69082611213565b60009283526003602090815260408085206001600160a01b038c1686529091529092209190915550610727816123d7565b90506105fb565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161077e92919061216a565b60405180910390a4610794818787878787611272565b505050505050565b80516107af906005906020840190611a75565b5050565b606081518351146108185760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b60648201526084016103b8565b600083516001600160401b0381111561084157634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561086a578160200160208202803683370190505b50905060005b84518110156109dd5760006001600160a01b03168582815181106108a457634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316141561091d5760405162461bcd60e51b815260206004820152603160248201527f455243313135353a2062617463682062616c616e636520717565727920666f7260448201527020746865207a65726f206164647265737360781b60648201526084016103b8565b6003600085838151811061094157634e487b7160e01b600052603260045260246000fd5b60200260200101518152602001908152602001600020600086838151811061097957634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020548282815181106109c257634e487b7160e01b600052603260045260246000fd5b60209081029190910101526109d6816123d7565b9050610870565b509392505050565b6104728383836113e6565b600c546000906001600160a01b03163314610a4d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103b8565b6001600160a01b038216610ab25760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016103b8565b50600c80546001600160a01b0319166001600160a01b03831617905560015b919050565b6060600a805461048690612370565b336001600160a01b0383161415610b505760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b60648201526084016103b8565b3360008181526004602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6107af3383836115ce565b60058054610bd490612370565b80601f0160208091040260200160405190810160405280929190818152602001828054610c0090612370565b8015610c4d5780601f10610c2257610100808354040283529160200191610c4d565b820191906000526020600020905b815481529060010190602001808311610c3057829003601f168201915b505050505081565b6060610c6082610ffe565b610cc55760405162461bcd60e51b815260206004820152603060248201527f455243313135354d657461646174613a2055524920717565727920666f72206e60448201526f37b732bc34b9ba32b73a103a37b5b2b760811b60648201526084016103b8565b60008281526006602052604081208054610cde90612370565b80601f0160208091040260200160405190810160405280929190818152602001828054610d0a90612370565b8015610d575780601f10610d2c57610100808354040283529160200191610d57565b820191906000526020600020905b815481529060010190602001808311610d3a57829003601f168201915b50505050509050600060058054610d6d90612370565b80601f0160208091040260200160405190810160405280929190818152602001828054610d9990612370565b8015610de65780601f10610dbb57610100808354040283529160200191610de6565b820191906000526020600020905b815481529060010190602001808311610dc957829003601f168201915b50505050509050805160001415610dfe575092915050565b815115610e30578082604051602001610e18929190612085565b60405160208183030381529060405292505050919050565b80610e3a8561173b565b604051602001610e18929190612085565b6001600160a01b038416610e715760405162461bcd60e51b81526004016103b8906121f3565b6001600160a01b038516331480610e8d5750610e8d8533610307565b610eeb5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260448201526808185c1c1c9bdd995960ba1b60648201526084016103b8565b33610f0b818787610efb8861186d565b610f048861186d565b5050505050565b610f52836040518060600160405280602a8152602001612527602a913960008781526003602090815260408083206001600160a01b038d16845290915290205491906111d7565b60008581526003602090815260408083206001600160a01b038b81168552925280832093909355871681522054610f899084611213565b60008581526003602090815260408083206001600160a01b038a811680865291845293829020949094558051888152918201879052898316928516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a46107948187878787876118c6565b600061100b600783611990565b92915050565b61101a84610ffe565b156110675760405162461bcd60e51b815260206004820152601d60248201527f455243313135353a20746f6b656e20616c7265616479206d696e74656400000060448201526064016103b8565b826110b45760405162461bcd60e51b815260206004820152601960248201527f537570706c792073686f756c6420626520706f7369746976650000000000000060448201526064016103b8565b60008251116110f95760405162461bcd60e51b81526020600482015260116024820152701d5c9a481cda1bdd5b19081899481cd95d607a1b60448201526064016103b8565b600084815260016020526040902080546001600160a01b031916339081179091556111289060079086906119a8565b5060008481526002602090815260408083208490556003825280832033845290915290208390556111598483610453565b6040805185815260208101859052339160009183917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4837f6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b836040516111c99190612198565b60405180910390a250505050565b600081848411156111fb5760405162461bcd60e51b81526004016103b89190612198565b5060006112088486612312565b9150505b9392505050565b60008061122083856122e6565b90508381101561120c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016103b8565b6001600160a01b0384163b156107945760405163bc197c8160e01b81526001600160a01b0385169063bc197c81906112b690899089908890889088906004016120b4565b602060405180830381600087803b1580156112d057600080fd5b505af1925050508015611300575060408051601f3d908101601f191682019092526112fd91810190611f13565b60015b6113ad5761130c612448565b806308c379a014156113465750611321612460565b8061132c5750611348565b8060405162461bcd60e51b81526004016103b89190612198565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e20455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b60648201526084016103b8565b6001600160e01b0319811663bc197c8160e01b146113dd5760405162461bcd60e51b81526004016103b8906121ab565b50505050505050565b6001600160a01b03831661140c5760405162461bcd60e51b81526004016103b890612238565b805182511461142d5760405162461bcd60e51b81526004016103b89061227b565b604080516020810190915260009081905233905b835181101561156f576114fb83828151811061146d57634e487b7160e01b600052603260045260246000fd5b602002602001015160405180606001604052806024815260200161250360249139600360008886815181106114b257634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000896001600160a01b03166001600160a01b03168152602001908152602001600020546111d79092919063ffffffff16565b6003600086848151811061151f57634e487b7160e01b600052603260045260246000fd5b602002602001015181526020019081526020016000206000876001600160a01b03166001600160a01b03168152602001908152602001600020819055508080611567906123d7565b915050611441565b5060006001600160a01b0316846001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516115c092919061216a565b60405180910390a450505050565b6115d782610ffe565b61163d5760405162461bcd60e51b815260206004820152603160248201527f455243313135354d657461646174613a206275726e20717565727920666f72206044820152703737b732bc34b9ba32b73a103a37b5b2b760791b60648201526084016103b8565b6001600160a01b0383166116635760405162461bcd60e51b81526004016103b890612238565b33611693818560006116748761186d565b61167d8761186d565b5050604080516020810190915260009052505050565b6116da826040518060600160405280603181526020016125516031913960008681526003602090815260408083206001600160a01b038b16845290915290205491906111d7565b60008481526003602090815260408083206001600160a01b0389811680865291845282852095909555815188815292830187905292938516917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6291016115c0565b60608161175f5750506040805180820190915260018152600360fc1b602082015290565b8160005b81156117895780611773816123d7565b91506117829050600a836122fe565b9150611763565b6000816001600160401b038111156117b157634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156117db576020820181803683370190505b50905060006117eb600184612312565b90508593505b831561186457611802600a856123f2565b61180d9060306122e6565b60f81b828261181b81612359565b93508151811061183b57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a90535061185d600a856122fe565b93506117f1565b50949350505050565b604080516001808252818301909252606091600091906020808301908036833701905050905082816000815181106118b557634e487b7160e01b600052603260045260246000fd5b602090810291909101015292915050565b6001600160a01b0384163b156107945760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e619061190a9089908990889088908890600401612112565b602060405180830381600087803b15801561192457600080fd5b505af1925050508015611954575060408051601f3d908101601f1916820190925261195191810190611f13565b60015b6119605761130c612448565b6001600160e01b0319811663f23a6e6160e01b146113dd5760405162461bcd60e51b81526004016103b8906121ab565b6000818152600183016020526040812054151561120c565b60006119be84846001600160a01b0385166119c6565b949350505050565b600082815260018401602052604081205480611a2b57505060408051808201825283815260208082018481528654600181810189556000898152848120955160029093029095019182559151908201558654868452818801909252929091205561120c565b8285611a38600184612312565b81548110611a5657634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020160010181905550600091505061120c565b828054611a8190612370565b90600052602060002090601f016020900481019282611aa35760008555611ae9565b82601f10611abc57805160ff1916838001178555611ae9565b82800160010185558215611ae9579182015b82811115611ae9578251825591602001919060010190611ace565b50611af5929150611af9565b5090565b5b80821115611af55760008155600101611afa565b80356001600160a01b0381168114610ad157600080fd5b600082601f830112611b35578081fd5b81356020611b42826122c3565b604051611b4f82826123ab565b8381528281019150858301600585901b87018401881015611b6e578586fd5b855b85811015611b8c57813584529284019290840190600101611b70565b5090979650505050505050565b600082601f830112611ba9578081fd5b81356001600160401b03811115611bc257611bc2612432565b604051611bd9601f8301601f1916602001826123ab565b818152846020838601011115611bed578283fd5b816020850160208301379081016020019190915292915050565b600060208284031215611c18578081fd5b61120c82611b0e565b60008060408385031215611c33578081fd5b611c3c83611b0e565b9150611c4a60208401611b0e565b90509250929050565b600080600080600060a08688031215611c6a578081fd5b611c7386611b0e565b9450611c8160208701611b0e565b935060408601356001600160401b0380821115611c9c578283fd5b611ca889838a01611b25565b94506060880135915080821115611cbd578283fd5b611cc989838a01611b25565b93506080880135915080821115611cde578283fd5b50611ceb88828901611b99565b9150509295509295909350565b600080600080600060a08688031215611d0f578081fd5b611d1886611b0e565b9450611d2660208701611b0e565b9350604086013592506060860135915060808601356001600160401b03811115611d4e578182fd5b611ceb88828901611b99565b600080600060608486031215611d6e578283fd5b611d7784611b0e565b925060208401356001600160401b0380821115611d92578384fd5b611d9e87838801611b25565b93506040860135915080821115611db3578283fd5b50611dc086828701611b25565b9150509250925092565b60008060408385031215611ddc578182fd5b611de583611b0e565b915060208301358015158114611df9578182fd5b809150509250929050565b60008060408385031215611e16578182fd5b611e1f83611b0e565b946020939093013593505050565b60008060408385031215611e3f578182fd5b82356001600160401b0380821115611e55578384fd5b818501915085601f830112611e68578384fd5b81356020611e75826122c3565b604051611e8282826123ab565b8381528281019150858301600585901b870184018b1015611ea1578889fd5b8896505b84871015611eca57611eb681611b0e565b835260019690960195918301918301611ea5565b5096505086013592505080821115611ee0578283fd5b50611eed85828601611b25565b9150509250929050565b600060208284031215611f08578081fd5b813561120c816124e9565b600060208284031215611f24578081fd5b815161120c816124e9565b600060208284031215611f40578081fd5b81356001600160401b03811115611f55578182fd5b6119be84828501611b99565b600080600060608486031215611f75578081fd5b83356001600160401b03811115611f8a578182fd5b611f9686828701611b99565b9660208601359650604090950135949350505050565b600060208284031215611fbd578081fd5b5035919050565b60008060408385031215611fd6578182fd5b8235915060208301356001600160401b03811115611ff2578182fd5b611eed85828601611b99565b60008060408385031215612010578182fd5b50508035926020909101359150565b6000815180845260208085019450808401835b8381101561204e57815187529582019590820190600101612032565b509495945050505050565b60008151808452612071816020860160208601612329565b601f01601f19169290920160200192915050565b60008351612097818460208801612329565b8351908301906120ab818360208801612329565b01949350505050565b6001600160a01b0386811682528516602082015260a0604082018190526000906120e09083018661201f565b82810360608401526120f2818661201f565b905082810360808401526121068185612059565b98975050505050505050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a06080820181905260009061214c90830184612059565b979650505050505050565b60208152600061120c602083018461201f565b60408152600061217d604083018561201f565b828103602084015261218f818561201f565b95945050505050565b60208152600061120c6020830184612059565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526028908201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206040820152670dad2e6dac2e8c6d60c31b606082015260800190565b60006001600160401b038211156122dc576122dc612432565b5060051b60200190565b600082198211156122f9576122f9612406565b500190565b60008261230d5761230d61241c565b500490565b60008282101561232457612324612406565b500390565b60005b8381101561234457818101518382015260200161232c565b83811115612353576000848401525b50505050565b60008161236857612368612406565b506000190190565b600181811c9082168061238457607f821691505b602082108114156123a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f191681016001600160401b03811182821017156123d0576123d0612432565b6040525050565b60006000198214156123eb576123eb612406565b5060010190565b6000826124015761240161241c565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b600060033d111561245d57600481823e5160e01c5b90565b600060443d101561246e5790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561249d57505050505090565b82850191508151818111156124b55750505050505090565b843d87010160208285010111156124cf5750505050505090565b6124de602082860101876123ab565b509095945050505050565b6001600160e01b0319811681146124ff57600080fd5b5056fe455243313135353a206275726e20616d6f756e7420657863656564732062616c616e6365455243313135353a20696e73756666696369656e742062616c616e636520666f72207472616e736665724552435f686f6c646572546f6b656e73313135353a206275726e20616d6f756e7420657863656564732062616c616e6365a26469706673582212203622772118aff5032bbdeec8129a6d513bca6ba696e8031145a735f468c2dbb064736f6c63430008040033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000094b75646f735a6f6e65000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024b5a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f697066732e6d6f72616c69732e696f3a323035332f697066732f000000000000000000000000000000000000000000000000000000000000

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000094b75646f735a6f6e65000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024b5a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002268747470733a2f2f697066732e6d6f72616c69732e696f3a323035332f697066732f000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): KudosZone
Arg [1] : symbol (string): KZ
Arg [2] : tokenURIPrefix (string): https://ipfs.moralis.io:2053/ipfs/

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [4] : 4b75646f735a6f6e650000000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 4b5a000000000000000000000000000000000000000000000000000000000000
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000022
Arg [8] : 68747470733a2f2f697066732e6d6f72616c69732e696f3a323035332f697066
Arg [9] : 732f000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

33965:1687:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20531:325;;;;;;:::i;:::-;;:::i;:::-;;;20522:25:1;;;20510:2;20495:18;20531:325:0;;;;;;;;18352:109;;;;;;:::i;:::-;;:::i;:::-;;12102:142;;;;;;:::i;:::-;-1:-1:-1;;;;;;12203:33:0;12179:4;12203:33;;;;;;;;;;;;;;12102:142;;;;12159:14:1;;12152:22;12134:41;;12122:2;12107:18;12102:142:0;12089:92:1;17876:100:0;;;:::i;:::-;;;;;;;:::i;35183:190::-;;;;;;:::i;:::-;;:::i;26700:1280::-;;;;;;:::i;:::-;;:::i;19244:117::-;;;;;;:::i;:::-;;:::i;21166:634::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;35496:153::-;;;;;;:::i;:::-;;:::i;34613:216::-;;;;;;:::i;:::-;;:::i;34032:20::-;;;;;-1:-1:-1;;;;;34032:20:0;;;;;;-1:-1:-1;;;;;9818:32:1;;;9800:51;;9788:2;9773:18;34032:20:0;9755:102:1;17984:104:0;;;:::i;22162:311::-;;;;;;:::i;:::-;;:::i;35381:107::-;;;;;;:::i;:::-;;:::i;17234:28::-;;;:::i;18640:121::-;;;;;;:::i;:::-;18706:7;18733:20;;;:11;:20;;;;;;;18640:121;19582:556;;;;;;:::i;:::-;;:::i;18934:126::-;;;;;;:::i;:::-;19008:7;19035:17;;;:8;:17;;;;;;-1:-1:-1;;;;;19035:17:0;;18934:126;22762:160;;;;;;:::i;:::-;-1:-1:-1;;;;;22877:27:0;;;22853:4;22877:27;;;:18;:27;;;;;;;;:37;;;;;;;;;;;;;;;22762:160;24085:964;;;;;;:::i;:::-;;:::i;20531:325::-;20614:7;20642:16;20650:7;20642;:16::i;:::-;20634:81;;;;-1:-1:-1;;;20634:81:0;;16688:2:1;20634:81:0;;;16670:21:1;16727:2;16707:18;;;16700:30;16766:34;16746:18;;;16739:62;-1:-1:-1;;;16817:18:1;;;16810:50;16877:19;;20634:81:0;;;;;;;;;-1:-1:-1;;;;;20734:21:0;;20726:77;;;;-1:-1:-1;;;20726:77:0;;13442:2:1;20726:77:0;;;13424:21:1;13481:2;13461:18;;;13454:30;13520:34;13500:18;;;13493:62;-1:-1:-1;;;13571:18:1;;;13564:41;13622:19;;20726:77:0;13414:233:1;20726:77:0;-1:-1:-1;20821:18:0;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;20821:27:0;;;;;;;;;;;;20531:325::o;18352:109::-;18428:19;;;;:10;:19;;;;;;;;:25;;;;;;;;:::i;:::-;;18352:109;;:::o;17876:100::-;17930:13;17963:5;17956:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17876:100;:::o;35183:190::-;35298:33;35304:9;;35315:6;35323:3;35327;35298:5;:33::i;:::-;35354:9;;:11;;35364:1;35354:11;:::i;:::-;35342:9;:23;-1:-1:-1;;;35183:190:0:o;26700:1280::-;26975:7;:14;26956:8;:15;:33;26948:86;;;;-1:-1:-1;;;26948:86:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27053:16:0;;27045:66;;;;-1:-1:-1;;;27045:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27144:20:0;;11594:10;27144:20;;:60;;-1:-1:-1;27168:36:0;27185:4;11594:10;22762:160;:::i;27168:36::-;27122:160;;;;-1:-1:-1;;;27122:160:0;;16269:2:1;27122:160:0;;;16251:21:1;16308:2;16288:18;;;16281:30;16347:34;16327:18;;;16320:62;-1:-1:-1;;;16398:18:1;;;16391:48;16456:19;;27122:160:0;16241:240:1;27122:160:0;11594:10;27295:16;27417:393;27441:8;:15;27437:1;:19;27417:393;;;27478:15;27496:8;27505:1;27496:11;;;;;;-1:-1:-1;;;27496:11:0;;;;;;;;;;;;;;;27478:29;;27522:14;27539:7;27547:1;27539:10;;;;;;-1:-1:-1;;;27539:10:0;;;;;;;;;;;;;;;27522:27;;27593:131;27640:6;27593:131;;;;;;;;;;;;;;;;;:9;:18;27603:7;27593:18;;;;;;;;;;;:24;27612:4;-1:-1:-1;;;;;27593:24:0;-1:-1:-1;;;;;27593:24:0;;;;;;;;;;;;;:28;;:131;;;;;:::i;:::-;27566:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;27566:24:0;;;;;;;;;;:158;;;;27764:22;;;;;;:34;;27791:6;27764:26;:34::i;:::-;27739:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;27739:22:0;;;;;;;;;;:59;;;;-1:-1:-1;27458:3:0;;;:::i;:::-;;;27417:393;;;;27857:2;-1:-1:-1;;;;;27827:52:0;27851:4;-1:-1:-1;;;;;27827:52:0;27841:8;-1:-1:-1;;;;;27827:52:0;;27861:8;27871:7;27827:52;;;;;;;:::i;:::-;;;;;;;;27892:80;27928:8;27938:4;27944:2;27948:8;27958:7;27967:4;27892:35;:80::i;:::-;26700:1280;;;;;;:::o;19244:117::-;19321:32;;;;:14;;:32;;;;;:::i;:::-;;19244:117;:::o;21166:634::-;21330:16;21391:3;:10;21372:8;:15;:29;21364:83;;;;-1:-1:-1;;;21364:83:0;;19055:2:1;21364:83:0;;;19037:21:1;19094:2;19074:18;;;19067:30;19133:34;19113:18;;;19106:62;-1:-1:-1;;;19184:18:1;;;19177:39;19233:19;;21364:83:0;19027:231:1;21364:83:0;21460:30;21507:8;:15;-1:-1:-1;;;;;21493:30:0;;;;;-1:-1:-1;;;21493:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21493:30:0;;21460:63;;21541:9;21536:224;21560:8;:15;21556:1;:19;21536:224;;;21628:1;-1:-1:-1;;;;;21605:25:0;:8;21614:1;21605:11;;;;;;-1:-1:-1;;;21605:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21605:25:0;;;21597:87;;;;-1:-1:-1;;;21597:87:0;;13854:2:1;21597:87:0;;;13836:21:1;13893:2;13873:18;;;13866:30;13932:34;13912:18;;;13905:62;-1:-1:-1;;;13983:18:1;;;13976:47;14040:19;;21597:87:0;13826:239:1;21597:87:0;21718:9;:17;21728:3;21732:1;21728:6;;;;;;-1:-1:-1;;;21728:6:0;;;;;;;;;;;;;;;21718:17;;;;;;;;;;;:30;21736:8;21745:1;21736:11;;;;;;-1:-1:-1;;;21736:11:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21718:30:0;-1:-1:-1;;;;;21718:30:0;;;;;;;;;;;;;21699:13;21713:1;21699:16;;;;;;-1:-1:-1;;;21699:16:0;;;;;;;;;;;;;;;;;;:49;21577:3;;;:::i;:::-;;;21536:224;;;-1:-1:-1;21779:13:0;21166:634;-1:-1:-1;;;21166:634:0:o;35496:153::-;35603:38;35614:7;35623:8;35633:7;35603:10;:38::i;34613:216::-;34402:5;;34683:4;;-1:-1:-1;;;;;34402:5:0;34411:10;34402:19;34394:64;;;;-1:-1:-1;;;34394:64:0;;17513:2:1;34394:64:0;;;17495:21:1;;;17532:18;;;17525:30;17591:34;17571:18;;;17564:62;17643:18;;34394:64:0;17485:182:1;34394:64:0;-1:-1:-1;;;;;34707:22:0;::::1;34699:73;;;::::0;-1:-1:-1;;;34699:73:0;;14272:2:1;34699:73:0::1;::::0;::::1;14254:21:1::0;14311:2;14291:18;;;14284:30;14350:34;14330:18;;;14323:62;-1:-1:-1;;;14401:18:1;;;14394:36;14447:19;;34699:73:0::1;14244:228:1::0;34699:73:0::1;-1:-1:-1::0;34783:5:0::1;:16:::0;;-1:-1:-1;;;;;;34783:16:0::1;-1:-1:-1::0;;;;;34783:16:0;::::1;;::::0;;-1:-1:-1;34469:1:0::1;34613:216:::0;;;:::o;17984:104::-;18040:13;18073:7;18066:14;;;;;:::i;22162:311::-;11594:10;-1:-1:-1;;;;;22265:24:0;;;;22257:78;;;;-1:-1:-1;;;22257:78:0;;18645:2:1;22257:78:0;;;18627:21:1;18684:2;18664:18;;;18657:30;18723:34;18703:18;;;18696:62;-1:-1:-1;;;18774:18:1;;;18767:39;18823:19;;22257:78:0;18617:231:1;22257:78:0;11594:10;22348:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;22348:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;22348:53:0;;;;;;;;;;22417:48;;12134:41:1;;;22348:42:0;;11594:10;22417:48;;12107:18:1;22417:48:0;;;;;;;22162:311;;:::o;35381:107::-;35446:34;35452:10;35464:7;35473:6;35446:5;:34::i;17234:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19582:556::-;19655:13;19689:16;19697:7;19689;:16::i;:::-;19681:77;;;;-1:-1:-1;;;19681:77:0;;17874:2:1;19681:77:0;;;17856:21:1;17913:2;17893:18;;;17886:30;17952:34;17932:18;;;17925:62;-1:-1:-1;;;18003:18:1;;;17996:46;18059:19;;19681:77:0;17846:238:1;19681:77:0;19769:23;19795:19;;;:10;:19;;;;;19769:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19825:18;19846:14;19825:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19883:4;19877:18;19899:1;19877:23;19873:72;;;-1:-1:-1;19924:9:0;19582:556;-1:-1:-1;;19582:556:0:o;19873:72::-;19959:23;;:27;19955:108;;20034:4;20040:9;20017:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20003:48;;;;19582:556;;;:::o;19955:108::-;20104:4;20110:18;:7;:16;:18::i;:::-;20087:42;;;;;;;;;:::i;24085:964::-;-1:-1:-1;;;;;24316:16:0;;24308:66;;;;-1:-1:-1;;;24308:66:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24407:20:0;;11594:10;24407:20;;:60;;-1:-1:-1;24431:36:0;24448:4;11594:10;22762:160;:::i;24431:36::-;24385:151;;;;-1:-1:-1;;;24385:151:0;;15035:2:1;24385:151:0;;;15017:21:1;15074:2;15054:18;;;15047:30;15113:34;15093:18;;;15086:62;-1:-1:-1;;;15164:18:1;;;15157:39;15213:19;;24385:151:0;15007:231:1;24385:151:0;11594:10;24593:101;11594:10;24624:4;24630:2;24634:26;24652:7;24634:17;:26::i;:::-;24662:25;24680:6;24662:17;:25::i;:::-;26700:1280;;;;;;24593:101;24734:82;24763:6;24734:82;;;;;;;;;;;;;;;;;:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;24734:24:0;;;;;;;;;;;:82;:28;:82::i;:::-;24707:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;24707:24:0;;;;;;;;;;:109;;;;24852:22;;;;;;:34;;24879:6;24852:26;:34::i;:::-;24827:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;24827:22:0;;;;;;;;;;;;;:59;;;;24904:51;;20732:25:1;;;20773:18;;;20766:34;;;24904:51:0;;;;;;;;;20705:18:1;24904:51:0;;;;;;;24968:73;24999:8;25009:4;25015:2;25019:7;25028:6;25036:4;24968:30;:73::i;20146:127::-;20211:4;20235:30;:12;20257:7;20235:21;:30::i;:::-;20228:37;20146:127;-1:-1:-1;;20146:127:0:o;28385:634::-;28497:16;28505:7;28497;:16::i;:::-;28496:17;28488:59;;;;-1:-1:-1;;;28488:59:0;;19874:2:1;28488:59:0;;;19856:21:1;19913:2;19893:18;;;19886:30;19952:31;19932:18;;;19925:59;20001:18;;28488:59:0;19846:179:1;28488:59:0;28566:12;28558:50;;;;-1:-1:-1;;;28558:50:0;;18291:2:1;28558:50:0;;;18273:21:1;18330:2;18310:18;;;18303:30;18369:27;18349:18;;;18342:55;18414:18;;28558:50:0;18263:175:1;28558:50:0;28648:1;28633:4;28627:18;:22;28619:52;;;;-1:-1:-1;;;28619:52:0;;20232:2:1;28619:52:0;;;20214:21:1;20271:2;20251:18;;;20244:30;-1:-1:-1;;;20290:18:1;;;20283:47;20347:18;;28619:52:0;20204:167:1;28619:52:0;28684:17;;;;:8;:17;;;;;:30;;-1:-1:-1;;;;;;28684:30:0;28704:10;28684:30;;;;;;28725:37;;:12;;28693:7;;28725:16;:37::i;:::-;-1:-1:-1;28773:20:0;;;;:11;:20;;;;;;;;:27;;;28811:9;:18;;;;;28830:10;28811:30;;;;;;;:40;;;28862:27;28785:7;28884:4;28862:12;:27::i;:::-;28907:70;;;20732:25:1;;;20788:2;20773:18;;20766:34;;;28948:10:0;;28942:3;;28948:10;;28907:70;;20705:18:1;28907:70:0;;;;;;;29003:7;28993:18;28997:4;28993:18;;;;;;:::i;:::-;;;;;;;;28385:634;;;;:::o;13102:192::-;13188:7;13224:12;13216:6;;;;13208:29;;;;-1:-1:-1;;;13208:29:0;;;;;;;;:::i;:::-;-1:-1:-1;13248:9:0;13260:5;13264:1;13260;:5;:::i;:::-;13248:17;-1:-1:-1;;13102:192:0;;;;;;:::o;12650:181::-;12708:7;;12740:5;12744:1;12740;:5;:::i;:::-;12728:17;;12769:1;12764;:6;;12756:46;;;;-1:-1:-1;;;12756:46:0;;14679:2:1;12756:46:0;;;14661:21:1;14718:2;14698:18;;;14691:30;14757:29;14737:18;;;14730:57;14804:18;;12756:46:0;14651:177:1;32943:809:0;-1:-1:-1;;;;;33202:13:0;;14604:20;14643:8;33198:547;;33238:84;;-1:-1:-1;;;33238:84:0;;-1:-1:-1;;;;;33238:43:0;;;;;:84;;33282:8;;33292:4;;33298:8;;33308:7;;33317:4;;33238:84;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33238:84:0;;;;;;;;-1:-1:-1;;33238:84:0;;;;;;;;;;;;:::i;:::-;;;33234:500;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;33607:6;33600:14;;-1:-1:-1;;;33600:14:0;;;;;;;;:::i;33234:500::-;;;33656:62;;-1:-1:-1;;;33656:62:0;;12612:2:1;33656:62:0;;;12594:21:1;12651:2;12631:18;;;12624:30;12690:34;12670:18;;;12663:62;-1:-1:-1;;;12741:18:1;;;12734:50;12801:19;;33656:62:0;12584:242:1;33234:500:0;-1:-1:-1;;;;;;33372:64:0;;-1:-1:-1;;;33372:64:0;33368:163;;33461:50;;-1:-1:-1;;;33461:50:0;;;;;;;:::i;33368:163::-;33323:223;32943:809;;;;;;:::o;31148:756::-;-1:-1:-1;;;;;31274:21:0;;31266:69;;;;-1:-1:-1;;;31266:69:0;;;;;;;:::i;:::-;31373:7;:14;31354:8;:15;:33;31346:86;;;;-1:-1:-1;;;31346:86:0;;;;;;;:::i;:::-;31489:74;;;;;;;;;31445:16;31489:74;;;;11594:10;;31576:240;31597:8;:15;31593:1;:19;31576:240;;;31668:136;31722:7;31730:1;31722:10;;;;;;-1:-1:-1;;;31722:10:0;;;;;;;;;;;;;;;31668:136;;;;;;;;;;;;;;;;;:9;:22;31678:8;31687:1;31678:11;;;;;;-1:-1:-1;;;31678:11:0;;;;;;;;;;;;;;;31668:22;;;;;;;;;;;:31;31691:7;-1:-1:-1;;;;;31668:31:0;-1:-1:-1;;;;;31668:31:0;;;;;;;;;;;;;:35;;:136;;;;;:::i;:::-;31634:9;:22;31644:8;31653:1;31644:11;;;;;;-1:-1:-1;;;31644:11:0;;;;;;;;;;;;;;;31634:22;;;;;;;;;;;:31;31657:7;-1:-1:-1;;;;;31634:31:0;-1:-1:-1;;;;;31634:31:0;;;;;;;;;;;;:170;;;;31614:3;;;;;:::i;:::-;;;;31576:240;;;;31874:1;-1:-1:-1;;;;;31833:63:0;31857:7;-1:-1:-1;;;;;31833:63:0;31847:8;-1:-1:-1;;;;;31833:63:0;;31878:8;31888:7;31833:63;;;;;;;:::i;:::-;;;;;;;;31148:756;;;;:::o;30318:680::-;30419:16;30427:7;30419;:16::i;:::-;30411:78;;;;-1:-1:-1;;;30411:78:0;;15445:2:1;30411:78:0;;;15427:21:1;15484:2;15464:18;;;15457:30;15523:34;15503:18;;;15496:62;-1:-1:-1;;;15574:18:1;;;15567:47;15631:19;;30411:78:0;15417:239:1;30411:78:0;-1:-1:-1;;;;;30508:21:0;;30500:69;;;;-1:-1:-1;;;30500:69:0;;;;;;;:::i;:::-;11594:10;30626:110;11594:10;30657:7;30582:16;30678:26;30696:7;30678:17;:26::i;:::-;30706:25;30724:6;30706:17;:25::i;:::-;-1:-1:-1;;30626:110:0;;;;;;;;;-1:-1:-1;30626:110:0;;-1:-1:-1;;;26700:1280:0;30626:110;30779:129;30825:6;30779:129;;;;;;;;;;;;;;;;;:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;30779:27:0;;;;;;;;;;;:129;:31;:129::i;:::-;30749:18;;;;:9;:18;;;;;;;;-1:-1:-1;;;;;30749:27:0;;;;;;;;;;;;:159;;;;30928:62;;20732:25:1;;;20773:18;;;20766:34;;;30749:18:0;;30928:62;;;;;20705:18:1;30928:62:0;20687:119:1;85:557:0;141:13;173:10;169:53;;-1:-1:-1;;200:10:0;;;;;;;;;;;;-1:-1:-1;;;200:10:0;;;;;85:557::o;169:53::-;247:5;232:12;288:78;295:9;;288:78;;321:8;;;;:::i;:::-;;-1:-1:-1;344:10:0;;-1:-1:-1;352:2:0;344:10;;:::i;:::-;;;288:78;;;376:19;408:6;-1:-1:-1;;;;;398:17:0;;;;;-1:-1:-1;;;398:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;398:17:0;-1:-1:-1;376:39:0;-1:-1:-1;426:13:0;442:10;451:1;442:6;:10;:::i;:::-;426:26;;470:5;463:12;;486:117;493:9;;486:117;;555:9;562:2;555:4;:9;:::i;:::-;550:14;;:2;:14;:::i;:::-;537:29;;519:6;526:7;;;;:::i;:::-;;;519:15;;;;;;-1:-1:-1;;;519:15:0;;;;;;;;;;;;:47;-1:-1:-1;;;;;519:47:0;;;;;;;;-1:-1:-1;581:10:0;589:2;581:10;;:::i;:::-;;;486:117;;;-1:-1:-1;627:6:0;85:557;-1:-1:-1;;;;85:557:0:o;33760:198::-;33880:16;;;33894:1;33880:16;;;;;;;;;33826;;33855:22;;33880:16;;;;;;;;;;;;-1:-1:-1;33880:16:0;33855:41;;33918:7;33907:5;33913:1;33907:8;;;;;;-1:-1:-1;;;33907:8:0;;;;;;;;;;;;;;;;;;:18;33945:5;33760:198;-1:-1:-1;;33760:198:0:o;32163:772::-;-1:-1:-1;;;;;32397:13:0;;14604:20;14643:8;32393:535;;32433:77;;-1:-1:-1;;;32433:77:0;;-1:-1:-1;;;;;32433:38:0;;;;;:77;;32472:8;;32482:4;;32488:7;;32497:6;;32505:4;;32433:77;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32433:77:0;;;;;;;;-1:-1:-1;;32433:77:0;;;;;;;;;;;;:::i;:::-;;;32429:488;;;;:::i;:::-;-1:-1:-1;;;;;;32560:59:0;;-1:-1:-1;;;32560:59:0;32556:158;;32644:50;;-1:-1:-1;;;32644:50:0;;;;;;;:::i;3932:151::-;4016:4;2123:17;;;:12;;;:17;;;;;;:22;;4040:35;2028:125;3589:185;3678:4;3702:64;3707:3;3727;-1:-1:-1;;;;;3741:23:0;;3702:4;:64::i;:::-;3695:71;3589:185;-1:-1:-1;;;;3589:185:0:o;867:470::-;943:4;979:17;;;:12;;;:17;;;;;;1013:13;1009:321;;-1:-1:-1;;1098:38:0;;;;;;;;;;;;;;;;;;1080:57;;;;;;;;:12;:57;;;;;;;;;;;;;;;;;;;;;;;;1172:19;;1152:17;;;:12;;;:17;;;;;;;:39;1206:11;;1009:321;1286:5;1250:3;1263:12;1274:1;1263:8;:12;:::i;:::-;1250:26;;;;;;-1:-1:-1;;;1250:26:0;;;;;;;;;;;;;;;;;;;:33;;:41;;;;1313:5;1306:12;;;;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:2;;177:1;174;167:12;192:755;246:5;299:3;292:4;284:6;280:17;276:27;266:2;;321:5;314;307:20;266:2;361:6;348:20;387:4;410:43;450:2;410:43;:::i;:::-;482:2;476:9;494:31;522:2;514:6;494:31;:::i;:::-;560:18;;;594:15;;;;-1:-1:-1;629:15:1;;;679:1;675:10;;;663:23;;659:32;;656:41;-1:-1:-1;653:2:1;;;714:5;707;700:20;653:2;740:5;754:163;768:2;765:1;762:9;754:163;;;825:17;;813:30;;863:12;;;;895;;;;786:1;779:9;754:163;;;-1:-1:-1;935:6:1;;256:691;-1:-1:-1;;;;;;;256:691:1:o;952:575::-;994:5;1047:3;1040:4;1032:6;1028:17;1024:27;1014:2;;1069:5;1062;1055:20;1014:2;1109:6;1096:20;-1:-1:-1;;;;;1131:2:1;1128:26;1125:2;;;1157:18;;:::i;:::-;1206:2;1200:9;1218:67;1273:2;1254:13;;-1:-1:-1;;1250:27:1;1279:4;1246:38;1200:9;1218:67;:::i;:::-;1309:2;1301:6;1294:18;1355:3;1348:4;1343:2;1335:6;1331:15;1327:26;1324:35;1321:2;;;1376:5;1369;1362:20;1321:2;1444;1437:4;1429:6;1425:17;1418:4;1410:6;1406:17;1393:54;1467:15;;;1484:4;1463:26;1456:41;;;;1471:6;1004:523;-1:-1:-1;;1004:523:1:o;1532:196::-;1591:6;1644:2;1632:9;1623:7;1619:23;1615:32;1612:2;;;1665:6;1657;1650:22;1612:2;1693:29;1712:9;1693:29;:::i;1733:270::-;1801:6;1809;1862:2;1850:9;1841:7;1837:23;1833:32;1830:2;;;1883:6;1875;1868:22;1830:2;1911:29;1930:9;1911:29;:::i;:::-;1901:39;;1959:38;1993:2;1982:9;1978:18;1959:38;:::i;:::-;1949:48;;1820:183;;;;;:::o;2008:983::-;2162:6;2170;2178;2186;2194;2247:3;2235:9;2226:7;2222:23;2218:33;2215:2;;;2269:6;2261;2254:22;2215:2;2297:29;2316:9;2297:29;:::i;:::-;2287:39;;2345:38;2379:2;2368:9;2364:18;2345:38;:::i;:::-;2335:48;;2434:2;2423:9;2419:18;2406:32;-1:-1:-1;;;;;2498:2:1;2490:6;2487:14;2484:2;;;2519:6;2511;2504:22;2484:2;2547:61;2600:7;2591:6;2580:9;2576:22;2547:61;:::i;:::-;2537:71;;2661:2;2650:9;2646:18;2633:32;2617:48;;2690:2;2680:8;2677:16;2674:2;;;2711:6;2703;2696:22;2674:2;2739:63;2794:7;2783:8;2772:9;2768:24;2739:63;:::i;:::-;2729:73;;2855:3;2844:9;2840:19;2827:33;2811:49;;2885:2;2875:8;2872:16;2869:2;;;2906:6;2898;2891:22;2869:2;;2934:51;2977:7;2966:8;2955:9;2951:24;2934:51;:::i;:::-;2924:61;;;2205:786;;;;;;;;:::o;2996:626::-;3100:6;3108;3116;3124;3132;3185:3;3173:9;3164:7;3160:23;3156:33;3153:2;;;3207:6;3199;3192:22;3153:2;3235:29;3254:9;3235:29;:::i;:::-;3225:39;;3283:38;3317:2;3306:9;3302:18;3283:38;:::i;:::-;3273:48;;3368:2;3357:9;3353:18;3340:32;3330:42;;3419:2;3408:9;3404:18;3391:32;3381:42;;3474:3;3463:9;3459:19;3446:33;-1:-1:-1;;;;;3494:6:1;3491:30;3488:2;;;3539:6;3531;3524:22;3488:2;3567:49;3608:7;3599:6;3588:9;3584:22;3567:49;:::i;3627:699::-;3754:6;3762;3770;3823:2;3811:9;3802:7;3798:23;3794:32;3791:2;;;3844:6;3836;3829:22;3791:2;3872:29;3891:9;3872:29;:::i;:::-;3862:39;;3952:2;3941:9;3937:18;3924:32;-1:-1:-1;;;;;4016:2:1;4008:6;4005:14;4002:2;;;4037:6;4029;4022:22;4002:2;4065:61;4118:7;4109:6;4098:9;4094:22;4065:61;:::i;:::-;4055:71;;4179:2;4168:9;4164:18;4151:32;4135:48;;4208:2;4198:8;4195:16;4192:2;;;4229:6;4221;4214:22;4192:2;;4257:63;4312:7;4301:8;4290:9;4286:24;4257:63;:::i;:::-;4247:73;;;3781:545;;;;;:::o;4331:367::-;4396:6;4404;4457:2;4445:9;4436:7;4432:23;4428:32;4425:2;;;4478:6;4470;4463:22;4425:2;4506:29;4525:9;4506:29;:::i;:::-;4496:39;;4585:2;4574:9;4570:18;4557:32;4632:5;4625:13;4618:21;4611:5;4608:32;4598:2;;4659:6;4651;4644:22;4598:2;4687:5;4677:15;;;4415:283;;;;;:::o;4703:264::-;4771:6;4779;4832:2;4820:9;4811:7;4807:23;4803:32;4800:2;;;4853:6;4845;4838:22;4800:2;4881:29;4900:9;4881:29;:::i;:::-;4871:39;4957:2;4942:18;;;;4929:32;;-1:-1:-1;;;4790:177:1:o;4972:1274::-;5090:6;5098;5151:2;5139:9;5130:7;5126:23;5122:32;5119:2;;;5172:6;5164;5157:22;5119:2;5217:9;5204:23;-1:-1:-1;;;;;5287:2:1;5279:6;5276:14;5273:2;;;5308:6;5300;5293:22;5273:2;5351:6;5340:9;5336:22;5326:32;;5396:7;5389:4;5385:2;5381:13;5377:27;5367:2;;5423:6;5415;5408:22;5367:2;5464;5451:16;5486:4;5509:43;5549:2;5509:43;:::i;:::-;5581:2;5575:9;5593:31;5621:2;5613:6;5593:31;:::i;:::-;5659:18;;;5693:15;;;;-1:-1:-1;5728:11:1;;;5770:1;5766:10;;;5758:19;;5754:28;;5751:41;-1:-1:-1;5748:2:1;;;5810:6;5802;5795:22;5748:2;5837:6;5828:15;;5852:169;5866:2;5863:1;5860:9;5852:169;;;5923:23;5942:3;5923:23;:::i;:::-;5911:36;;5884:1;5877:9;;;;;5967:12;;;;5999;;5852:169;;;-1:-1:-1;6040:6:1;-1:-1:-1;;6084:18:1;;6071:32;;-1:-1:-1;;6115:16:1;;;6112:2;;;6149:6;6141;6134:22;6112:2;;6177:63;6232:7;6221:8;6210:9;6206:24;6177:63;:::i;:::-;6167:73;;;5109:1137;;;;;:::o;6251:255::-;6309:6;6362:2;6350:9;6341:7;6337:23;6333:32;6330:2;;;6383:6;6375;6368:22;6330:2;6427:9;6414:23;6446:30;6470:5;6446:30;:::i;6511:259::-;6580:6;6633:2;6621:9;6612:7;6608:23;6604:32;6601:2;;;6654:6;6646;6639:22;6601:2;6691:9;6685:16;6710:30;6734:5;6710:30;:::i;6775:341::-;6844:6;6897:2;6885:9;6876:7;6872:23;6868:32;6865:2;;;6918:6;6910;6903:22;6865:2;6963:9;6950:23;-1:-1:-1;;;;;6988:6:1;6985:30;6982:2;;;7033:6;7025;7018:22;6982:2;7061:49;7102:7;7093:6;7082:9;7078:22;7061:49;:::i;7121:477::-;7208:6;7216;7224;7277:2;7265:9;7256:7;7252:23;7248:32;7245:2;;;7298:6;7290;7283:22;7245:2;7343:9;7330:23;-1:-1:-1;;;;;7368:6:1;7365:30;7362:2;;;7413:6;7405;7398:22;7362:2;7441:49;7482:7;7473:6;7462:9;7458:22;7441:49;:::i;:::-;7431:59;7537:2;7522:18;;7509:32;;-1:-1:-1;7588:2:1;7573:18;;;7560:32;;7235:363;-1:-1:-1;;;;7235:363:1:o;7603:190::-;7662:6;7715:2;7703:9;7694:7;7690:23;7686:32;7683:2;;;7736:6;7728;7721:22;7683:2;-1:-1:-1;7764:23:1;;7673:120;-1:-1:-1;7673:120:1:o;7798:409::-;7876:6;7884;7937:2;7925:9;7916:7;7912:23;7908:32;7905:2;;;7958:6;7950;7943:22;7905:2;7999:9;7986:23;7976:33;;8060:2;8049:9;8045:18;8032:32;-1:-1:-1;;;;;8079:6:1;8076:30;8073:2;;;8124:6;8116;8109:22;8073:2;8152:49;8193:7;8184:6;8173:9;8169:22;8152:49;:::i;8212:258::-;8280:6;8288;8341:2;8329:9;8320:7;8316:23;8312:32;8309:2;;;8362:6;8354;8347:22;8309:2;-1:-1:-1;;8390:23:1;;;8460:2;8445:18;;;8432:32;;-1:-1:-1;8299:171:1:o;8475:437::-;8528:3;8566:5;8560:12;8593:6;8588:3;8581:19;8619:4;8648:2;8643:3;8639:12;8632:19;;8685:2;8678:5;8674:14;8706:3;8718:169;8732:6;8729:1;8726:13;8718:169;;;8793:13;;8781:26;;8827:12;;;;8862:15;;;;8754:1;8747:9;8718:169;;;-1:-1:-1;8903:3:1;;8536:376;-1:-1:-1;;;;;8536:376:1:o;8917:257::-;8958:3;8996:5;8990:12;9023:6;9018:3;9011:19;9039:63;9095:6;9088:4;9083:3;9079:14;9072:4;9065:5;9061:16;9039:63;:::i;:::-;9156:2;9135:15;-1:-1:-1;;9131:29:1;9122:39;;;;9163:4;9118:50;;8966:208;-1:-1:-1;;8966:208:1:o;9179:470::-;9358:3;9396:6;9390:13;9412:53;9458:6;9453:3;9446:4;9438:6;9434:17;9412:53;:::i;:::-;9528:13;;9487:16;;;;9550:57;9528:13;9487:16;9584:4;9572:17;;9550:57;:::i;:::-;9623:20;;9366:283;-1:-1:-1;;;;9366:283:1:o;9862:826::-;-1:-1:-1;;;;;10259:15:1;;;10241:34;;10311:15;;10306:2;10291:18;;10284:43;10221:3;10358:2;10343:18;;10336:31;;;10184:4;;10390:57;;10427:19;;10419:6;10390:57;:::i;:::-;10495:9;10487:6;10483:22;10478:2;10467:9;10463:18;10456:50;10529:44;10566:6;10558;10529:44;:::i;:::-;10515:58;;10622:9;10614:6;10610:22;10604:3;10593:9;10589:19;10582:51;10650:32;10675:6;10667;10650:32;:::i;:::-;10642:40;10193:495;-1:-1:-1;;;;;;;;10193:495:1:o;10693:560::-;-1:-1:-1;;;;;10990:15:1;;;10972:34;;11042:15;;11037:2;11022:18;;11015:43;11089:2;11074:18;;11067:34;;;11132:2;11117:18;;11110:34;;;10952:3;11175;11160:19;;11153:32;;;10915:4;;11202:45;;11227:19;;11219:6;11202:45;:::i;:::-;11194:53;10924:329;-1:-1:-1;;;;;;;10924:329:1:o;11258:261::-;11437:2;11426:9;11419:21;11400:4;11457:56;11509:2;11498:9;11494:18;11486:6;11457:56;:::i;11524:465::-;11781:2;11770:9;11763:21;11744:4;11807:56;11859:2;11848:9;11844:18;11836:6;11807:56;:::i;:::-;11911:9;11903:6;11899:22;11894:2;11883:9;11879:18;11872:50;11939:44;11976:6;11968;11939:44;:::i;:::-;11931:52;11753:236;-1:-1:-1;;;;;11753:236:1:o;12186:219::-;12335:2;12324:9;12317:21;12298:4;12355:44;12395:2;12384:9;12380:18;12372:6;12355:44;:::i;12831:404::-;13033:2;13015:21;;;13072:2;13052:18;;;13045:30;13111:34;13106:2;13091:18;;13084:62;-1:-1:-1;;;13177:2:1;13162:18;;13155:38;13225:3;13210:19;;13005:230::o;15661:401::-;15863:2;15845:21;;;15902:2;15882:18;;;15875:30;15941:34;15936:2;15921:18;;15914:62;-1:-1:-1;;;16007:2:1;15992:18;;15985:35;16052:3;16037:19;;15835:227::o;16907:399::-;17109:2;17091:21;;;17148:2;17128:18;;;17121:30;17187:34;17182:2;17167:18;;17160:62;-1:-1:-1;;;17253:2:1;17238:18;;17231:33;17296:3;17281:19;;17081:225::o;19263:404::-;19465:2;19447:21;;;19504:2;19484:18;;;19477:30;19543:34;19538:2;19523:18;;19516:62;-1:-1:-1;;;19609:2:1;19594:18;;19587:38;19657:3;19642:19;;19437:230::o;20811:183::-;20871:4;-1:-1:-1;;;;;20896:6:1;20893:30;20890:2;;;20926:18;;:::i;:::-;-1:-1:-1;20971:1:1;20967:14;20983:4;20963:25;;20880:114::o;20999:128::-;21039:3;21070:1;21066:6;21063:1;21060:13;21057:2;;;21076:18;;:::i;:::-;-1:-1:-1;21112:9:1;;21047:80::o;21132:120::-;21172:1;21198;21188:2;;21203:18;;:::i;:::-;-1:-1:-1;21237:9:1;;21178:74::o;21257:125::-;21297:4;21325:1;21322;21319:8;21316:2;;;21330:18;;:::i;:::-;-1:-1:-1;21367:9:1;;21306:76::o;21387:258::-;21459:1;21469:113;21483:6;21480:1;21477:13;21469:113;;;21559:11;;;21553:18;21540:11;;;21533:39;21505:2;21498:10;21469:113;;;21600:6;21597:1;21594:13;21591:2;;;21635:1;21626:6;21621:3;21617:16;21610:27;21591:2;;21440:205;;;:::o;21650:136::-;21689:3;21717:5;21707:2;;21726:18;;:::i;:::-;-1:-1:-1;;;21762:18:1;;21697:89::o;21791:380::-;21870:1;21866:12;;;;21913;;;21934:2;;21988:4;21980:6;21976:17;21966:27;;21934:2;22041;22033:6;22030:14;22010:18;22007:38;22004:2;;;22087:10;22082:3;22078:20;22075:1;22068:31;22122:4;22119:1;22112:15;22150:4;22147:1;22140:15;22004:2;;21846:325;;;:::o;22176:249::-;22286:2;22267:13;;-1:-1:-1;;22263:27:1;22251:40;;-1:-1:-1;;;;;22306:34:1;;22342:22;;;22303:62;22300:2;;;22368:18;;:::i;:::-;22404:2;22397:22;-1:-1:-1;;22223:202:1:o;22430:135::-;22469:3;-1:-1:-1;;22490:17:1;;22487:2;;;22510:18;;:::i;:::-;-1:-1:-1;22557:1:1;22546:13;;22477:88::o;22570:112::-;22602:1;22628;22618:2;;22633:18;;:::i;:::-;-1:-1:-1;22667:9:1;;22608:74::o;22687:127::-;22748:10;22743:3;22739:20;22736:1;22729:31;22779:4;22776:1;22769:15;22803:4;22800:1;22793:15;22819:127;22880:10;22875:3;22871:20;22868:1;22861:31;22911:4;22908:1;22901:15;22935:4;22932:1;22925:15;22951:127;23012:10;23007:3;23003:20;23000:1;22993:31;23043:4;23040:1;23033:15;23067:4;23064:1;23057:15;23083:185;23118:3;23160:1;23142:16;23139:23;23136:2;;;23210:1;23205:3;23200;23185:27;23241:10;23236:3;23232:20;23136:2;23126:142;:::o;23273:671::-;23312:3;23354:4;23336:16;23333:26;23330:2;;;23320:624;:::o;23330:2::-;23396;23390:9;-1:-1:-1;;23461:16:1;23457:25;;23454:1;23390:9;23433:50;23512:4;23506:11;23536:16;-1:-1:-1;;;;;23642:2:1;23635:4;23627:6;23623:17;23620:25;23615:2;23607:6;23604:14;23601:45;23598:2;;;23649:5;;;;;23320:624;:::o;23598:2::-;23686:6;23680:4;23676:17;23665:28;;23722:3;23716:10;23749:2;23741:6;23738:14;23735:2;;;23755:5;;;;;;23320:624;:::o;23735:2::-;23839;23820:16;23814:4;23810:27;23806:36;23799:4;23790:6;23785:3;23781:16;23777:27;23774:69;23771:2;;;23846:5;;;;;;23320:624;:::o;23771:2::-;23862:57;23913:4;23904:6;23896;23892:19;23888:30;23882:4;23862:57;:::i;:::-;-1:-1:-1;23935:3:1;;23320:624;-1:-1:-1;;;;;23320:624:1:o;23949:131::-;-1:-1:-1;;;;;;24023:32:1;;24013:43;;24003:2;;24070:1;24067;24060:12;24003:2;23993:87;:::o

Swarm Source

ipfs://3622772118aff5032bbdeec8129a6d513bca6ba696e8031145a735f468c2dbb0
Loading