ETH Price: $2,732.43 (+12.80%)
 

Overview

Max Total Supply

3,333 GATOS

Holders

1,023

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
sholmes.eth
Balance
3 GATOS
0xd01A7A028af963Ea66665fCC7CDD92dd2668f8D8
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:
ElGatosClub

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-24
*/

// SPDX-License-Identifier: MIT    

/*
7777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777
77777777777????????77777777777777777777777777??????????77777777777777777777777777????????77777777777
777777?JY5PJYPPP55P555YJJ??777777777777777?JY??77!!77??YJ?777777777777777??JJY555P55PPPJJP5YJ?777777
7777?PGPP5P~!YYYYY5~!GPPPP5555JJJ??777777?5Y7!!7!!!!77!7Y5?777777??JJJ5555PPPPG!~5YYYYY~~P5PPGP?7777
777?J75J7!!!~~~~~~!!777?JYYP77PPP5P555YJYPYYYJ7!!!!!!7JYYYPYJY555P5PPP77PYYJ?777!!~~~~~~!!!7J57J?777
777?Y!?~^~!7~~!~~7!!~!~!!^~!!!JJJY5J~JGPPPPGPP5YYYYYY5PPGPPP5GJ~J5YJJJ!!!~~!!~!~!!7~~~~~7!~^~?~Y?777
7777Y!~!!~~~~~~!~~~~~!7!7777!!~!!~77!7JY55P7~PPPP77PPPP~7P55YJ7!77~!!~!77777!7!~~~~~!~~~~~~!!~!Y7777
7777?YY7~~~~!~~~~~~~^^~!!~~~!!77?77!!~~~!!77!?JJY??YJJ?!77!!~~~!!77?77!!~~~!!~^^^~~~~~~!~~~~7YY?7777
77777JY!^~~^~~!!!!~!!!~!~~~~~!^^^!!!7!777!!7!!!~~~~~~!!!7!!777!7!!!^^^!~~~~~!~~!!~!!!!~~^~~^!YJ77777
777777JY!^~777!~~~~~~~~~~~~~~~~~~~!!~^~~~~~~!!~~~!!~~~!!~~~~~~^~!!~~~~~~~~~~~~~~~~~~~!777~^!YJ777777
777777!?YJY!~~~!~^!!^~~~^^~!~~~~~~!!!!!!!!!!!!!~~!!~~!!!!!!!!!!!!!~~~~~~!~~^~~~^!!^~!~~~!YJY?!777777
!!!!!!!!75Y7~~!!^^~~!!!!!!~~~!~~~!^~~!~~!!!!!!!!~~~~!!!!!!!!~~!~~^!~~~!~~~!!!!!!!~^^!!~~7Y57!!!!!!!!
!!!!!!!!!!?YJ7~~!777!!!~~~~!??77?77??????????7777777777?????????J77?7777!~~~~!!!!77!~~7JY?!!!!!!!!!!
!!!777777!!!7JJYY!~~!!!~!JPG55PGP??7777777?77777?77?77777?777777777YPJ7YGPJ!~!!!~~!YYJJ7!!!!!!!!!!!!
!7PPYYYYYYJJ!~!755?7~!!^7YP577??Y55555JJ77777777777777777777?7??77????775PY7^!!~7?Y5J!!!!!!!!!!!!!!!
~5G5JY5YYYY5Y!~~?PPP555JY5PJ7?77?777?JY55P5JJ??7777777777??7777777??77?7JP5YJY5YY5YYJ~~~~~~~~~~~~~~~
~5P5JYYJYYJ557~~!PGGGGBBGG5G??7???77777777?JY555YYJ?77?77777777777???7??G5G5YYYYJYYYY~~~~~~~~~~~~~~~
~5P5YYJJJJYY57~~~5BBBBBBGP5Y777?7777777777777777JJYPBGP5YJ??77777777?777Y5PYJJYYJY5YJ~~~~~~~~~~~~~~~
?PP5JYY555YY5?~~~7BBBBGBB5J7777?7?7?J??777777777777PBBBBBBBBGPP5YYY?J?777J5P5YYYJY55Y!~~~~~~~~~~~~~~
PPPYJYPPY5PY5Y~~~~PBGBGB#PY?777?777JY!5#GYJJ??JJJJJBBGGGGBBBBBBBBBBBGY5555PGY55JYYYYYY?~^~~~~~~~~~~~
PPYJJYGYYYP5YPYJ~^?BBBGG#GYJY57?7777Y?7P#PJ?5YJJJJJGBGGGGGGGGGGGGBB5?75YJYGPYYPYP55JYYYJ!~^~~~~~~~~~
PYYYYYGYYY5PJP55~^~PBBBBB#5Y5P7?7??J?YYJJJJYYYJ?J??JPBBBBBBBBBBBGPJ7?7P5Y5B5YYPYP55JYYYYYY7~^^^^^^^^
PYY555GYYY5PJP5557~JBGGGGBGPJJ??77????JJJ????77777777?YPGGGGGP5J??77??JYPPG5YYPYP55JYYYYJYYY7~^^^^^^
PYY55PGYYYYPYP555YYYG5555PBPG5YJ?7?777??777777?777777777777777777?7??Y5PPPG5YYPYP55YYYYJYYJYYJ7^^^^^
P5Y55PGYYYYPYP55YJYYPPPPPPBPGBPBP?777777777777JJ?77?JJ7!7777777777?PBGGPGGB5YY55P55YYYYYYYYYJYYJ!^^^
PPPP5GBYYYYPYP555YYYY5GGBGBPPGG@BP5YJJJJYY555PPGG5YGGPP555YYJJJJY5PB@P5YYPB5YYPPY5YYYYYYYYYYYYYYYY!^
77????G5YYYP55Y5?!!77!JPGGGG5GYP#&@&&&&&@@@@@@@@&@@&@@@@@@@@&&&&&@&#PJY!!!5PYYPJ7????????YJ??????J?!
^^^^^!G5YY5GPYY?^^^^^^7PPGGBPPP?J?5#&&&&&&&&&&&#BGB#&&&&&&&&&&###PJJ?57!!?Y?Y55~^^~~^^^^^^^^^^^^^^^^
^^~??JG5YY5PJ7!^^~~^~7?Y5GGGG5BYJ7!?YYJJYY5PGP5YYJJYPPGBP5YYJ?JYY!7JY?!!7YJ!!?5!^~~~^^^~~~^^^~~^^^^^
^^~~~!P5YY55~^^~~!!~?7!J5GGGG5PGJ?!!?J77?JJ??77J5Y55Y?J?JJJ?!?JJ7!?JY!!!?Y?!!!??~^^~^^^^^~^^^~~^^^^^
^^~~^~P5YY55~^~7!!!J?!!?YPGPP55PYJ77?55YY7!7?7!JY??JY77?JJJJJYY7!7JY?!!7JY7??77?J~^^^^^^^^~~~^^^^^^^
^^^^^~P5YY55~^!7!!???7!?5P5555P55??JJ??JYY77?!!JJ!!J5?7!7JP5Y?7????Y7!!?YY!777777?~~~~^^^^^~^^^^^^^^
^^^^^!G5YY55~^~7!??7?7!?YPP55GPP5?!??777JYYJJ7!YJ77J5?77?YJ??7!77!7Y777?YJ7777??77Y77!^^~7!~^^^^^^^^
^^^~^?GP5555!~~^7?777!!7!PBP55PP5P?7777777?JYJYP5YY55JJYJ7777!7777?Y??7!?J7!7777!!?7^^^75J!~!!~^^^^^
^^^^~7777?7!!~~~?!!7!!!!!YBGP55P5GY7777??7?7!7755Y5PY!7!7?7???7777?Y77Y!!YJ!!!!!7!!?~^7P#?JP?7J!^^^^
^^^^~???J!^^^~^?7!!!!!!!?JPBGP5GGB5!!!!!!7Y7!77?J????7J??Y7!!!!!!!!J7?Y7!!J?!!!!!!!7?~JYP?PB5J?~^^~~
^^^^^~~!~~^^^^7?!!!!!!!7J!YGGG55P5PJ7!???YJ77?77!!Y?777JJYY???!7?J77JJY!!!!J7!!!!!!!?7~7J?77??!~^^~~
^~^^~~~^^^^^^~J!!!!!!!!J77YP5GP555PPJJ?7!JYJJ77777J5J777JPJ!7?JJJJJJ?!Y7!!!!J!!!!!!!!J~^^^~~^^^^^^^^
~~~~!!7?J?7~^!?!!!!!!!JYPY5G5GG555PP!!!!!JYY?!7YYY555J7!?PY!!!!!!!!!!!Y7!!!!?J!!!!!!!??~^^^^~^^^^^^^
^~~!JPGBBBBB?7?!!!!!!?YYG!!55PPPPPPP7777?J77Y77?JJYYJ777Y5Y?77777777?JJ!!!!!!Y?!!!!!!?7^^^^~!~^^^^^^
^^^7B#BGBBBBGJ7!!!!!75?7PPPBG5G5555GY7??7!!7JY?777??!7?YY7!7???????777!!!!!!!J57!!!!!7J~^^^^^^^^^^^^
^^^7#BGBBBBBBJ!!!!??J5?!7YYYP5PP555P7!!!!!!!77JYJ???YJJ7!!!!!!!!!7!!!!!!!!!!!?5J??!!!!J!^^^^^~~^^^^^
^^~~YGB#BBBGY7!!!!7?5Y?!!!!!7PPPPPG?!!!!!!!!!!!5777?P7!!!!!!!!!!!7!!!!!!!!!!!?Y5?7!!!!??^^^^^~~^^^^^
^^~~!!?J???7J7!!!!!75J?7!!!!YP555PY!!!!!!!!!!!7577!757!!!!!!!!!!!7!!!!!!!!!!7?J57!!!!!7J~^^^^~~~^^^^
^^^^^~^^^^^^?7!7!!!?5???!!!JP555PP!!!!!!!!!!!!75?YJ757!!!!!!!!!!!!!!!!!!!!!!???5?!!!7!7?^^^~^^~~^^^^
^^^^~~^^^^^^J!!!!!!?5???77YP5555G7!7?J7!!!!!!!7P777757!!!!!!!7J?7!!!!!!!!!!7???5?!!!!!!J^^^^^^^^^^^^
^^^^^^^^^^^^J!!!!!7JY??J5PP5555PGJ?JJJ?!!!!!!!757!!757!!!!!!!?JJJ?7!!!!!!7?????YJ7!!!!!J^^^^^^^^^^^^
**/

// Hola!
// Attention! Official web https://elgatos.us
// Official Twitter https://twitter.com/ElGatosClub
// Powered by $PATAS Coin

pragma solidity ^0.8.0;
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

pragma solidity ^0.8.0;
abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner | elgatos.us");
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }


    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address | elgatos.us");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity ^0.8.0;

abstract contract ReentrancyGuard {

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call | @ElGatosClub");

        _status = _ENTERED;

        _;

        _status = _NOT_ENTERED;
    }
}

pragma solidity ^0.8.0;

library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

    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);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient | @ElGatosClub | ");
        return string(buffer);
    }

    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}

pragma solidity ^0.8.0;


library EnumerableSet {


    struct Set {
        // Storage of set values
        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) {

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastValue = set._values[lastIndex];

                set._values[toDeleteIndex] = lastValue;
                
                set._indexes[lastValue] = valueIndex; 
            }

            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) {
        return set._values[index];
    }

    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }

    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);
    }

    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
        return _values(set._inner);
    }

    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))));
    }

    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        assembly {
            result := store
        }

        return result;
    }

    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));
    }

    function values(UintSet storage set) internal view returns (uint256[] memory) {
        bytes32[] memory store = _values(set._inner);
        uint256[] memory result;

        /// @solidity memory-safe-assembly
        assembly {
            result := store
        }

        return result;
    }
}

pragma solidity ^0.8.4;

interface IERC721A {

    error ApprovalCallerNotOwnerNorApproved();

    error ApprovalQueryForNonexistentToken();

    error BalanceQueryForZeroAddress();

    error MintToZeroAddress();

    error MintZeroQuantity();

    error OwnerQueryForNonexistentToken();

    error TransferCallerNotOwnerNorApproved();

    error TransferFromIncorrectOwner();

    error TransferToNonERC721ReceiverImplementer();

    error TransferToZeroAddress();

    error URIQueryForNonexistentToken();

    error MintERC2309QuantityExceedsLimit();

    error OwnershipNotInitializedForExtraData();

    struct TokenOwnership {

        address addr;

        uint64 startTimestamp;

        bool burned;

        uint24 extraData;
    }

    function totalSupply() external view returns (uint256);

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

    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external payable;

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external payable;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external payable;

    function approve(address to, uint256 tokenId) external payable;

    function setApprovalForAll(address operator, bool _approved) external;

    function getApproved(uint256 tokenId) external view returns (address operator);

    function isApprovedForAll(address owner, address operator) external view returns (bool);

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function tokenURI(uint256 tokenId) external view returns (string memory);

    event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to); // @ElGatosClub // Twitter
}

pragma solidity ^0.8.4;

interface ERC721A__IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

contract ERC721A is IERC721A {

    struct TokenApprovalRef {
        address value;
    }

    uint256 private constant _BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    uint256 private constant _BITPOS_NUMBER_MINTED = 64;

    uint256 private constant _BITPOS_NUMBER_BURNED = 128;

    uint256 private constant _BITPOS_AUX = 192;

    uint256 private constant _BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    uint256 private constant _BITPOS_START_TIMESTAMP = 160;

    uint256 private constant _BITMASK_BURNED = 1 << 224;

    uint256 private constant _BITPOS_NEXT_INITIALIZED = 225;

    uint256 private constant _BITMASK_NEXT_INITIALIZED = 1 << 225;

    uint256 private constant _BITPOS_EXTRA_DATA = 232;

    uint256 private constant _BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1;

    uint256 private constant _BITMASK_ADDRESS = (1 << 160) - 1;

    uint256 private constant _MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000;

    bytes32 private constant _TRANSFER_EVENT_SIGNATURE =
        0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;

    uint256 private _currentIndex;

    uint256 private _burnCounter;

    string private _name;

    string private _symbol;

    mapping(uint256 => uint256) private _packedOwnerships;

    mapping(address => uint256) private _packedAddressData;

    mapping(uint256 => TokenApprovalRef) private _tokenApprovals;

    mapping(address => mapping(address => bool)) private _operatorApprovals;

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

    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    function _nextTokenId() internal view virtual returns (uint256) {
        return _currentIndex;
    }

    function totalSupply() public view virtual override returns (uint256) {

        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    function _totalMinted() internal view virtual returns (uint256) {

        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    function _totalBurned() internal view virtual returns (uint256) {
        return _burnCounter;
    }

    function balanceOf(address owner) public view virtual override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_MINTED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberBurned(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> _BITPOS_NUMBER_BURNED) & _BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _getAux(address owner) internal view returns (uint64) {
        return uint64(_packedAddressData[owner] >> _BITPOS_AUX);
    }

    function _setAux(address owner, uint64 aux) internal virtual {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        // Cast `aux` with assembly to avoid redundant masking.
        assembly {
            auxCasted := aux
        }
        packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }


    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {

        return
            interfaceId == 0x01ffc9a7 || 
            interfaceId == 0x80ac58cd || 
            interfaceId == 0x5b5e139f; 
    }

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

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

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : '';
    }

    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

    function _ownershipOf(uint256 tokenId) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

    function _ownershipAt(uint256 index) internal view virtual returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    function _initializeOwnershipAt(uint256 index) internal virtual {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }
// Attention! Official web https://elgatos.us
// Official Twitter https://twitter.com/ElGatosClub

    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];

                    if (packed & _BITMASK_BURNED == 0) {

                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        return packed;
                    }
                }
        }
        revert OwnerQueryForNonexistentToken();
    }

    function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) {
        ownership.addr = address(uint160(packed));
        ownership.startTimestamp = uint64(packed >> _BITPOS_START_TIMESTAMP);
        ownership.burned = packed & _BITMASK_BURNED != 0;
        ownership.extraData = uint24(packed >> _BITPOS_EXTRA_DATA);
    }

    function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) {
        assembly {
            // Mask `owner` to the lower 160 bits, in case the upper bits somehow aren't clean.
            owner := and(owner, _BITMASK_ADDRESS)
            // `owner | (block.timestamp << _BITPOS_START_TIMESTAMP) | flags`.
            result := or(owner, or(shl(_BITPOS_START_TIMESTAMP, timestamp()), flags))
        }
    }

    function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
        // For branchless setting of the `nextInitialized` flag.
        assembly {
            // `(quantity == 1) << _BITPOS_NEXT_INITIALIZED`.
            result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
        }
    }

    function approve(address to, uint256 tokenId) public payable virtual override {
        address owner = ownerOf(tokenId);

        if (_msgSenderERC721A() != owner)
            if (!isApprovedForAll(owner, _msgSenderERC721A())) {
                revert ApprovalCallerNotOwnerNorApproved();
            }

        _tokenApprovals[tokenId].value = to;
        emit Approval(owner, to, tokenId);
    }

    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId].value;
    }
// Attention! Official web https://elgatos.us
// Official Twitter https://twitter.com/ElGatosClub

    function setApprovalForAll(address operator, bool approved) public virtual override {
        _operatorApprovals[_msgSenderERC721A()][operator] = approved;
        emit ApprovalForAll(_msgSenderERC721A(), operator, approved);
    }

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

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex && // If within bounds | elgatos.us,
            _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; // and not burned | elgatos.us.
    }

    function _isSenderApprovedOrOwner(
        address approvedAddress,
        address owner,
        address msgSender
    ) private pure returns (bool result) {
        assembly {

            owner := and(owner, _BITMASK_ADDRESS)

            msgSender := and(msgSender, _BITMASK_ADDRESS)

            result := or(eq(msgSender, owner), eq(msgSender, approvedAddress))
        }
    }

    function _getApprovedSlotAndAddress(uint256 tokenId)
        private
        view
        returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId];

        assembly {
            approvedAddressSlot := tokenApproval.slot
            approvedAddress := sload(approvedAddressSlot)
        }
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public payable virtual override {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId);

        if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A()))
            if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();

        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        assembly {
            if approvedAddress {

                sstore(approvedAddressSlot, 0)
            }
        }

        unchecked {

            --_packedAddressData[from]; 
            ++_packedAddressData[to]; 

            _packedOwnerships[tokenId] = _packOwnershipData(
                to,
                _BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked)
            );

            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;

                if (_packedOwnerships[nextTokenId] == 0) {

                    if (nextTokenId != _currentIndex) {

                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public payable virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public payable virtual override {
        transferFrom(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }

    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    function _checkContractOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private returns (bool) {
        try ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns (
            bytes4 retval
        ) {
            return retval == ERC721A__IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) {
                revert TransferToNonERC721ReceiverImplementer();
            } else {
                assembly {
                    revert(add(32, reason), mload(reason))
                }
            }
        }
    }

    function _mint(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        unchecked {

            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            uint256 toMasked;
            uint256 end = startTokenId + quantity;

            assembly {

                toMasked := and(to, _BITMASK_ADDRESS)

                log4(
                    0, 
                    0, 
                    _TRANSFER_EVENT_SIGNATURE, 
                    0, 
                    toMasked, 
                    startTokenId 
                )

                for {
                    let tokenId := add(startTokenId, 1)
                } iszero(eq(tokenId, end)) {
                    tokenId := add(tokenId, 1)
                } {

                    log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId)
                }
            }
            if (toMasked == 0) revert MintToZeroAddress();

            _currentIndex = end;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }
// Attention! Official web https://elgatos.us
// Official Twitter https://twitter.com/ElGatosClub

    function _mintERC2309(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();
        if (quantity > _MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        unchecked {

            _packedAddressData[to] += quantity * ((1 << _BITPOS_NUMBER_MINTED) | 1);

            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );

            emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to);

            _currentIndex = startTokenId + quantity;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal virtual {
        _mint(to, quantity);

        unchecked {
            if (to.code.length != 0) {
                uint256 end = _currentIndex;
                uint256 index = end - quantity;
                do {
                    if (!_checkContractOnERC721Received(address(0), to, index++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (index < end);
                // Reentrancy protection.
                if (_currentIndex != end) revert();
            }
        }
    }

    function _safeMint(address to, uint256 quantity) internal virtual {
        _safeMint(to, quantity, '');
    }

    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        address from = address(uint160(prevOwnershipPacked));

        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedSlotAndAddress(tokenId);

        if (approvalCheck) {
            
            if (!_isSenderApprovedOrOwner(approvedAddress, from, _msgSenderERC721A()))
                if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

        assembly {
            if approvedAddress {
                
                sstore(approvedAddressSlot, 0)
            }
        }

        unchecked {

            _packedAddressData[from] += (1 << _BITPOS_NUMBER_BURNED) - 1;

            _packedOwnerships[tokenId] = _packOwnershipData(
                from,
                (_BITMASK_BURNED | _BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked)
            );

            if (prevOwnershipPacked & _BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;

                if (_packedOwnerships[nextTokenId] == 0) {

                    if (nextTokenId != _currentIndex) {

                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        unchecked {
            _burnCounter++;
        }
    }

    function _setExtraDataAt(uint256 index, uint24 extraData) internal virtual {
        uint256 packed = _packedOwnerships[index];
        if (packed == 0) revert OwnershipNotInitializedForExtraData();
        uint256 extraDataCasted;
        assembly {
            extraDataCasted := extraData
        }
        packed = (packed & _BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << _BITPOS_EXTRA_DATA);
        _packedOwnerships[index] = packed;
    }

    function _extraData(
        address from,
        address to,
        uint24 previousExtraData
    ) internal view virtual returns (uint24) {}

    function _nextExtraData(
        address from,
        address to,
        uint256 prevOwnershipPacked
    ) private view returns (uint256) {
        uint24 extraData = uint24(prevOwnershipPacked >> _BITPOS_EXTRA_DATA);
        return uint256(_extraData(from, to, extraData)) << _BITPOS_EXTRA_DATA;
    }

    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    function _toString(uint256 value) internal pure virtual returns (string memory str) {
        assembly {

            let m := add(mload(0x40), 0xa0)

            mstore(0x40, m)

            str := sub(m, 0x20)

            mstore(str, 0)

            let end := str

            for { let temp := value } 1 {} {
                str := sub(str, 1)

                mstore8(str, add(48, mod(temp, 10)))

                temp := div(temp, 10)

                if iszero(temp) { break }
            }

            let length := sub(end, str)

            str := sub(str, 0x20)

            mstore(str, length)
        }
    }
}

pragma solidity ^0.8.13;

// Attention! Official web https://elgatos.us
// Official Twitter https://twitter.com/ElGatosClub

contract OperatorFilterer {
    error OperatorNotAllowed(address operator);

    IOperatorFilterRegistry constant operatorFilterRegistry =
        IOperatorFilterRegistry(0x000000000000AAeB6D7670E522A718067333cd4E);

    constructor(address subscriptionOrRegistrantToCopy, bool subscribe) {

        if (address(operatorFilterRegistry).code.length > 0) {
            if (subscribe) {
                operatorFilterRegistry.registerAndSubscribe(address(this), subscriptionOrRegistrantToCopy);
            } else {
                if (subscriptionOrRegistrantToCopy != address(0)) {
                    operatorFilterRegistry.registerAndCopyEntries(address(this), subscriptionOrRegistrantToCopy);
                } else {
                    operatorFilterRegistry.register(address(this));
                }
            }
        }
    }

    modifier onlyAllowedOperator() virtual {

        if (address(operatorFilterRegistry).code.length > 0) {
            if (!operatorFilterRegistry.isOperatorAllowed(address(this), msg.sender)) {
                revert OperatorNotAllowed(msg.sender);
            }
        }
        _;
    }
}

pragma solidity ^0.8.13;

contract DefaultOperatorFilterer is OperatorFilterer {
    address constant DEFAULT_SUBSCRIPTION = address(0x3cc6CddA760b79bAfa08dF41ECFA224f810dCeB6);

    constructor() OperatorFilterer(DEFAULT_SUBSCRIPTION, true) {}
}

pragma solidity ^0.8.13;

interface IOperatorFilterRegistry {
    function isOperatorAllowed(address registrant, address operator) external returns (bool);
    function register(address registrant) external;
    function registerAndSubscribe(address registrant, address subscription) external;
    function registerAndCopyEntries(address registrant, address registrantToCopy) external;
    function updateOperator(address registrant, address operator, bool filtered) external;
    function updateOperators(address registrant, address[] calldata operators, bool filtered) external;
    function updateCodeHash(address registrant, bytes32 codehash, bool filtered) external;
    function updateCodeHashes(address registrant, bytes32[] calldata codeHashes, bool filtered) external;
    function subscribe(address registrant, address registrantToSubscribe) external;
    function unsubscribe(address registrant, bool copyExistingEntries) external;
    function subscriptionOf(address addr) external returns (address registrant);
    function subscribers(address registrant) external returns (address[] memory);
    function subscriberAt(address registrant, uint256 index) external returns (address);
    function copyEntriesOf(address registrant, address registrantToCopy) external;
    function isOperatorFiltered(address registrant, address operator) external returns (bool);
    function isCodeHashOfFiltered(address registrant, address operatorWithCode) external returns (bool);
    function isCodeHashFiltered(address registrant, bytes32 codeHash) external returns (bool);
    function filteredOperators(address addr) external returns (address[] memory);
    function filteredCodeHashes(address addr) external returns (bytes32[] memory);
    function filteredOperatorAt(address registrant, uint256 index) external returns (address);
    function filteredCodeHashAt(address registrant, uint256 index) external returns (bytes32);
    function isRegistered(address addr) external returns (bool);
    function codeHashOf(address addr) external returns (bytes32);
}

pragma solidity ^0.8.4;

interface IERC721ABurnable is IERC721A {

    function burn(uint256 tokenId) external;
}

pragma solidity ^0.8.4;
abstract contract ERC721ABurnable is ERC721A, IERC721ABurnable {
    function burn(uint256 tokenId) public virtual override {
        _burn(tokenId, true);
    }
}


pragma solidity ^0.8.16;
contract ElGatosClub is Ownable, ERC721A, ReentrancyGuard, ERC721ABurnable, DefaultOperatorFilterer{
string public CONTRACT_URI = "";
mapping(address => uint) public userHasMinted;
bool public REVEALED;
string public UNREVEALED_URI = "";
string public BASE_URI = "";
bool public isPublicMintEnabled = false;
uint public COLLECTION_SIZE = 3333; 
uint public MINT_PRICE = 0.006 ether; 
uint public MAX_BATCH_SIZE = 25;
uint public SUPPLY_PER_WALLET = 25;
uint public FREE_SUPPLY_PER_WALLET = 2;
constructor() ERC721A("El Gatos Cartel", "GATOS") {}
// Powered by $PATAS Coin

    function Airdrop (uint256 quantity, address receiver) public onlyOwner {
        require(
            totalSupply() + quantity <= COLLECTION_SIZE,
            "No more gatos in stock!"
        );
        
        _safeMint(receiver, quantity);
    }

    modifier callerIsUser() {
        require(tx.origin == msg.sender, "The caller is another contract | elgatos.us");
        _;
    }

    function getPrice(uint quantity) public view returns(uint){
        uint price;
        uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender];
        if (quantity >= free) {
            price = (MINT_PRICE) * (quantity - free);
        } else {
            price = 0;
        }
        return price;
    }

    function mint(uint quantity)
        external
        payable
        callerIsUser 
        nonReentrant
    {
        uint price;
        uint free = FREE_SUPPLY_PER_WALLET - userHasMinted[msg.sender];
        if (quantity >= free) {
            price = (MINT_PRICE) * (quantity - free);
            userHasMinted[msg.sender] = userHasMinted[msg.sender] + free;
        } else {
            price = 0;
            userHasMinted[msg.sender] = userHasMinted[msg.sender] + quantity;
        }

        require(isPublicMintEnabled, "Gatos not ready yet!");
        require(totalSupply() + quantity <= COLLECTION_SIZE, "No more gatos left! | elgatos.us");

        require(balanceOf(msg.sender) + quantity <= SUPPLY_PER_WALLET, "Tried to mint gatos over over limit | elgatos.us");

        require(quantity <= MAX_BATCH_SIZE, "Tried to mint gatos over limit, retry with reduced quantity | elgatos.us");
        require(msg.value >= price, "Must send more eth | elgatos.us!");

        _safeMint(msg.sender, quantity);

        if (msg.value > price) {
            payable(msg.sender).transfer(msg.value - price);
        }
    }
    function setPublicMintEnabled() public onlyOwner {
        isPublicMintEnabled = !isPublicMintEnabled;
    }

    function withdrawFunds() external onlyOwner nonReentrant {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }

    function CollectionUrI(bool _revealed, string memory _baseURI) public onlyOwner {
        BASE_URI = _baseURI;
        REVEALED = _revealed;
    }

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

    function setContract(string memory _contractURI) public onlyOwner {
        CONTRACT_URI = _contractURI;
    }

    function ChangeCollectionSupply(uint256 _new) external onlyOwner {
        COLLECTION_SIZE = _new;
    }

    function ChangePrice(uint256 _newPrice) external onlyOwner {
        MINT_PRICE = _newPrice;
    }

    function ChangeFreePerWallet(uint256 _new) external onlyOwner {
        FREE_SUPPLY_PER_WALLET = _new;
    }

    function ChangeSupplyPerWallet(uint256 _new) external onlyOwner {
        SUPPLY_PER_WALLET = _new;
    }

    function SetMaxBatchSize(uint256 _new) external onlyOwner {
        MAX_BATCH_SIZE = _new;
    }

    function transferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A, IERC721A) onlyAllowedOperator { // elgatos.us
        super.transferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId) public payable override (ERC721A, IERC721A) onlyAllowedOperator {
        super.safeTransferFrom(from, to, tokenId);
    }

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data)
        public payable
        override (ERC721A, IERC721A)
        onlyAllowedOperator
    {
        super.safeTransferFrom(from, to, tokenId, data);
    }

    function tokenURI(uint256 _tokenId)
        public
        view
        override (ERC721A, IERC721A)
        returns (string memory)
    {
        if (REVEALED) {
            return
                string(abi.encodePacked(BASE_URI, Strings.toString(_tokenId)));
        } else {
            return UNREVEALED_URI;
        }
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"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":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"Airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"BASE_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"COLLECTION_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CONTRACT_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeCollectionSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeFreePerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"ChangePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"ChangeSupplyPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_revealed","type":"bool"},{"internalType":"string","name":"_baseURI","type":"string"}],"name":"CollectionUrI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"FREE_SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BATCH_SIZE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REVEALED","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPLY_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_new","type":"uint256"}],"name":"SetMaxBatchSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"UNREVEALED_URI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","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":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractURI","type":"string"}],"name":"setContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setPublicMintEnabled","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":"totalSupply","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":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userHasMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600a9081620000249190620006df565b5060405180602001604052806000815250600d9081620000459190620006df565b5060405180602001604052806000815250600e9081620000669190620006df565b506000600f60006101000a81548160ff021916908315150217905550610d05601055661550f7dca70000601155601960125560196013556002601455348015620000af57600080fd5b50733cc6cdda760b79bafa08df41ecfa224f810dceb660016040518060400160405280600f81526020017f456c204761746f732043617274656c00000000000000000000000000000000008152506040518060400160405280600581526020017f4741544f5300000000000000000000000000000000000000000000000000000081525062000153620001476200039460201b60201c565b6200039c60201b60201c565b8160039081620001649190620006df565b508060049081620001769190620006df565b50620001876200046060201b60201c565b6001819055505050600160098190555060006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156200038c57801562000252576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16637d3e3dbe30846040518363ffffffff1660e01b8152600401620002189291906200080b565b600060405180830381600087803b1580156200023357600080fd5b505af115801562000248573d6000803e3d6000fd5b505050506200038b565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146200030c576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663a0af290330846040518363ffffffff1660e01b8152600401620002d29291906200080b565b600060405180830381600087803b158015620002ed57600080fd5b505af115801562000302573d6000803e3d6000fd5b505050506200038a565b6daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff16634420e486306040518263ffffffff1660e01b815260040162000355919062000838565b600060405180830381600087803b1580156200037057600080fd5b505af115801562000385573d6000803e3d6000fd5b505050505b5b5b505062000855565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004e757607f821691505b602082108103620004fd57620004fc6200049f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005677fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000528565b62000573868362000528565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620005c0620005ba620005b4846200058b565b62000595565b6200058b565b9050919050565b6000819050919050565b620005dc836200059f565b620005f4620005eb82620005c7565b84845462000535565b825550505050565b600090565b6200060b620005fc565b62000618818484620005d1565b505050565b5b8181101562000640576200063460008262000601565b6001810190506200061e565b5050565b601f8211156200068f57620006598162000503565b620006648462000518565b8101602085101562000674578190505b6200068c620006838562000518565b8301826200061d565b50505b505050565b600082821c905092915050565b6000620006b46000198460080262000694565b1980831691505092915050565b6000620006cf8383620006a1565b9150826002028217905092915050565b620006ea8262000465565b67ffffffffffffffff81111562000706576200070562000470565b5b620007128254620004ce565b6200071f82828562000644565b600060209050601f83116001811462000757576000841562000742578287015190505b6200074e8582620006c1565b865550620007be565b601f198416620007678662000503565b60005b8281101562000791578489015182556001820191506020850194506020810190506200076a565b86831015620007b15784890151620007ad601f891682620006a1565b8355505b6001600288020188555050505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007f382620007c6565b9050919050565b6200080581620007e6565b82525050565b6000604082019050620008226000830185620007fa565b620008316020830184620007fa565b9392505050565b60006020820190506200084f6000830184620007fa565b92915050565b6140d580620008656000396000f3fe6080604052600436106102515760003560e01c80637871e15411610139578063c144a4ba116100b6578063e75722301161007a578063e757223014610837578063e8a3d48514610874578063e985e9c51461089f578063f2fde38b146108dc578063f814943d14610905578063fb92488b1461092e57610251565b8063c144a4ba14610750578063c87b56dd14610779578063cfdbf254146107b6578063d8258d95146107e1578063dbddb26a1461080c57610251565b8063a22cb465116100fd578063a22cb4651461069e578063a4cdd719146106c7578063a76a9587146106de578063b88d4fde14610709578063c002d23d1461072557610251565b80637871e154146105da5780638da5cb5b1461060357806395d89b411461062e578063a0712d6814610659578063a1db246e1461067557610251565b806342842e0e116101d25780635fe75587116101965780635fe75587146104cc5780636352211e146104f757806370a0823114610534578063715018a6146105715780637304ff6c1461058857806375b64471146105b157610251565b806342842e0e1461040857806342966c6814610424578063507862d11461044d57806356b48d631461047857806356b4f673146104a157610251565b80631422374f116102195780631422374f1461034257806318160ddd1461036d5780631d9857781461039857806323b872dd146103d557806324600fc3146103f157610251565b80630116bc2d1461025657806301ffc9a71461028157806306fdde03146102be578063081812fc146102e9578063095ea7b314610326575b600080fd5b34801561026257600080fd5b5061026b610957565b6040516102789190612c96565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190612d1d565b61096a565b6040516102b59190612c96565b60405180910390f35b3480156102ca57600080fd5b506102d36109fc565b6040516102e09190612dda565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190612e32565b610a8e565b60405161031d9190612ea0565b60405180910390f35b610340600480360381019061033b9190612ee7565b610b0d565b005b34801561034e57600080fd5b50610357610c51565b6040516103649190612f36565b60405180910390f35b34801561037957600080fd5b50610382610c57565b60405161038f9190612f36565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190612f51565b610c6e565b6040516103cc9190612f36565b60405180910390f35b6103ef60048036038101906103ea9190612f7e565b610c86565b005b3480156103fd57600080fd5b50610406610d92565b005b610422600480360381019061041d9190612f7e565b610e9e565b005b34801561043057600080fd5b5061044b60048036038101906104469190612e32565b610faa565b005b34801561045957600080fd5b50610462610fb8565b60405161046f9190612dda565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190613106565b611046565b005b3480156104ad57600080fd5b506104b6611061565b6040516104c39190612dda565b60405180910390f35b3480156104d857600080fd5b506104e16110ef565b6040516104ee9190612f36565b60405180910390f35b34801561050357600080fd5b5061051e60048036038101906105199190612e32565b6110f5565b60405161052b9190612ea0565b60405180910390f35b34801561054057600080fd5b5061055b60048036038101906105569190612f51565b611107565b6040516105689190612f36565b60405180910390f35b34801561057d57600080fd5b506105866111bf565b005b34801561059457600080fd5b506105af60048036038101906105aa919061317b565b6111d3565b005b3480156105bd57600080fd5b506105d860048036038101906105d39190612e32565b611209565b005b3480156105e657600080fd5b5061060160048036038101906105fc91906131d7565b61121b565b005b34801561060f57600080fd5b50610618611288565b6040516106259190612ea0565b60405180910390f35b34801561063a57600080fd5b506106436112b1565b6040516106509190612dda565b60405180910390f35b610673600480360381019061066e9190612e32565b611343565b005b34801561068157600080fd5b5061069c60048036038101906106979190612e32565b611790565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190613217565b6117a2565b005b3480156106d357600080fd5b506106dc6118ad565b005b3480156106ea57600080fd5b506106f36118e1565b6040516107009190612c96565b60405180910390f35b610723600480360381019061071e91906132f8565b6118f4565b005b34801561073157600080fd5b5061073a611a02565b6040516107479190612f36565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190612e32565b611a08565b005b34801561078557600080fd5b506107a0600480360381019061079b9190612e32565b611a1a565b6040516107ad9190612dda565b60405180910390f35b3480156107c257600080fd5b506107cb611af6565b6040516107d89190612f36565b60405180910390f35b3480156107ed57600080fd5b506107f6611afc565b6040516108039190612f36565b60405180910390f35b34801561081857600080fd5b50610821611b02565b60405161082e9190612dda565b60405180910390f35b34801561084357600080fd5b5061085e60048036038101906108599190612e32565b611b90565b60405161086b9190612f36565b60405180910390f35b34801561088057600080fd5b50610889611c1a565b6040516108969190612dda565b60405180910390f35b3480156108ab57600080fd5b506108c660048036038101906108c1919061337b565b611cac565b6040516108d39190612c96565b60405180910390f35b3480156108e857600080fd5b5061090360048036038101906108fe9190612f51565b611d40565b005b34801561091157600080fd5b5061092c60048036038101906109279190612e32565b611dc3565b005b34801561093a57600080fd5b5061095560048036038101906109509190612e32565b611dd5565b005b600f60009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c557506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f55750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610a0b906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610a37906133ea565b8015610a845780601f10610a5957610100808354040283529160200191610a84565b820191906000526020600020905b815481529060010190602001808311610a6757829003601f168201915b5050505050905090565b6000610a9982611de7565b610acf576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b18826110f5565b90508073ffffffffffffffffffffffffffffffffffffffff16610b39611e46565b73ffffffffffffffffffffffffffffffffffffffff1614610b9c57610b6581610b60611e46565b611cac565b610b9b576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60145481565b6000610c61611e4e565b6002546001540303905090565b600b6020528060005260406000206000915090505481565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610d82576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610cfd92919061341b565b6020604051808303816000875af1158015610d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d409190613459565b610d8157336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d789190612ea0565b60405180910390fd5b5b610d8d838383611e53565b505050565b610d9a612175565b600260095403610ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd6906134f8565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610e0d90613549565b60006040518083038185875af1925050503d8060008114610e4a576040519150601f19603f3d011682016040523d82523d6000602084013e610e4f565b606091505b5050905080610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a906135aa565b60405180910390fd5b506001600981905550565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610f9a576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f1592919061341b565b6020604051808303816000875af1158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f589190613459565b610f9957336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610f909190612ea0565b60405180910390fd5b5b610fa58383836121f3565b505050565b610fb5816001612213565b50565b600d8054610fc5906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff1906133ea565b801561103e5780601f106110135761010080835404028352916020019161103e565b820191906000526020600020905b81548152906001019060200180831161102157829003601f168201915b505050505081565b61104e612175565b80600a908161105d9190613776565b5050565b600a805461106e906133ea565b80601f016020809104026020016040519081016040528092919081815260200182805461109a906133ea565b80156110e75780601f106110bc576101008083540402835291602001916110e7565b820191906000526020600020905b8154815290600101906020018083116110ca57829003601f168201915b505050505081565b60135481565b600061110082612465565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361116e576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6111c7612175565b6111d16000612531565b565b6111db612175565b80600e90816111ea9190613776565b5081600c60006101000a81548160ff0219169083151502179055505050565b611211612175565b8060108190555050565b611223612175565b6010548261122f610c57565b6112399190613877565b111561127a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611271906138f7565b60405180910390fd5b61128481836125f5565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112c0906133ea565b80601f01602080910402602001604051908101604052809291908181526020018280546112ec906133ea565b80156113395780601f1061130e57610100808354040283529160200191611339565b820191906000526020600020905b81548152906001019060200180831161131c57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a890613989565b60405180910390fd5b6002600954036113f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ed906134f8565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460145461144e91906139a9565b905080831061150557808361146391906139a9565b60115461147091906139dd565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114bd9190613877565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611598565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115549190613877565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff166115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de90613a6b565b60405180910390fd5b601054836115f3610c57565b6115fd9190613877565b111561163e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163590613ad7565b60405180910390fd5b6013548361164b33611107565b6116559190613877565b1115611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d90613b69565b60405180910390fd5b6012548311156116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d290613c21565b60405180910390fd5b8134101561171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171590613c8d565b60405180910390fd5b61172833846125f5565b81341115611783573373ffffffffffffffffffffffffffffffffffffffff166108fc833461175691906139a9565b9081150290604051600060405180830381858888f19350505050158015611781573d6000803e3d6000fd5b505b5050600160098190555050565b611798612175565b8060148190555050565b80600860006117af611e46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661185c611e46565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118a19190612c96565b60405180910390a35050565b6118b5612175565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff1681565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156119f0576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b815260040161196b92919061341b565b6020604051808303816000875af115801561198a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ae9190613459565b6119ef57336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016119e69190612ea0565b60405180910390fd5b5b6119fc84848484612613565b50505050565b60115481565b611a10612175565b8060128190555050565b6060600c60009054906101000a900460ff1615611a6357600e611a3c83612686565b604051602001611a4d929190613d6c565b6040516020818303038152906040529050611af1565b600d8054611a70906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9c906133ea565b8015611ae95780601f10611abe57610100808354040283529160200191611ae9565b820191906000526020600020905b815481529060010190602001808311611acc57829003601f168201915b505050505090505b919050565b60125481565b60105481565b600e8054611b0f906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3b906133ea565b8015611b885780601f10611b5d57610100808354040283529160200191611b88565b820191906000526020600020905b815481529060010190602001808311611b6b57829003601f168201915b505050505081565b6000806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601454611be291906139a9565b9050808410611c0b578084611bf791906139a9565b601154611c0491906139dd565b9150611c10565b600091505b8192505050919050565b6060600a8054611c29906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611c55906133ea565b8015611ca25780601f10611c7757610100808354040283529160200191611ca2565b820191906000526020600020905b815481529060010190602001808311611c8557829003601f168201915b5050505050905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d48612175565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dae90613e02565b60405180910390fd5b611dc081612531565b50565b611dcb612175565b8060138190555050565b611ddd612175565b8060118190555050565b600081611df2611e4e565b11158015611e01575060015482105b8015611e3f575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b6000611e5e82612465565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ec5576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611ed1846127e6565b91509150611ee78187611ee2611e46565b61280d565b611f3357611efc86611ef7611e46565b611cac565b611f32576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611f99576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fa68686866001612851565b8015611fb157600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061207f8561205b888887612857565b7c02000000000000000000000000000000000000000000000000000000001761287f565b600560008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036121055760006001850190506000600560008381526020019081526020016000205403612103576001548114612102578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461216d86868660016128aa565b505050505050565b61217d6128b0565b73ffffffffffffffffffffffffffffffffffffffff1661219b611288565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890613e94565b60405180910390fd5b565b61220e838383604051806020016040528060008152506118f4565b505050565b600061221e83612465565b90506000819050600080612231866127e6565b91509150841561229a5761224d8184612248611e46565b61280d565b612299576122628361225d611e46565b611cac565b612298576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b6122a8836000886001612851565b80156122b357600082555b600160806001901b03600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061235b8361231885600088612857565b7c02000000000000000000000000000000000000000000000000000000007c0100000000000000000000000000000000000000000000000000000000171761287f565b600560008881526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008516036123e157600060018701905060006005600083815260200190815260200160002054036123df5760015481146123de578460056000838152602001908152602001600020819055505b5b505b85600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461244b8360008860016128aa565b600260008154809291906001019190505550505050505050565b60008082905080612474611e4e565b116124fa576001548110156124f95760006005600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216036124f7575b600081036124ed5760056000836001900393508381526020019081526020016000205490506124c3565b809250505061252c565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61260f8282604051806020016040528060008152506128b8565b5050565b61261e848484610c86565b60008373ffffffffffffffffffffffffffffffffffffffff163b146126805761264984848484612956565b61267f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600082036126cd576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127e1565b600082905060005b600082146126ff5780806126e890613eb4565b915050600a826126f89190613f2b565b91506126d5565b60008167ffffffffffffffff81111561271b5761271a612fdb565b5b6040519080825280601f01601f19166020018201604052801561274d5781602001600182028036833780820191505090505b5090505b600085146127da5760018261276691906139a9565b9150600a856127759190613f5c565b60306127819190613877565b60f81b81838151811061279757612796613f8d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127d39190613f2b565b9450612751565b8093505050505b919050565b60008060006007600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e861286e868684612aa6565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b6128c28383612aaf565b60008373ffffffffffffffffffffffffffffffffffffffff163b146129515760006001549050600083820390505b6129036000868380600101945086612956565b612939576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106128f057816001541461294e57600080fd5b50505b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261297c611e46565b8786866040518563ffffffff1660e01b815260040161299e9493929190614011565b6020604051808303816000875af19250505080156129da57506040513d601f19601f820116820180604052508101906129d79190614072565b60015b612a53573d8060008114612a0a576040519150601f19603f3d011682016040523d82523d6000602084013e612a0f565b606091505b506000815103612a4b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60009392505050565b6000600154905060008203612af0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612afd6000848385612851565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612b7483612b656000866000612857565b612b6e85612c6b565b1761287f565b6005600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b818114612c1557808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612bda565b5060008203612c50576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001819055505050612c6660008483856128aa565b505050565b60006001821460e11b9050919050565b60008115159050919050565b612c9081612c7b565b82525050565b6000602082019050612cab6000830184612c87565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cfa81612cc5565b8114612d0557600080fd5b50565b600081359050612d1781612cf1565b92915050565b600060208284031215612d3357612d32612cbb565b5b6000612d4184828501612d08565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d84578082015181840152602081019050612d69565b60008484015250505050565b6000601f19601f8301169050919050565b6000612dac82612d4a565b612db68185612d55565b9350612dc6818560208601612d66565b612dcf81612d90565b840191505092915050565b60006020820190508181036000830152612df48184612da1565b905092915050565b6000819050919050565b612e0f81612dfc565b8114612e1a57600080fd5b50565b600081359050612e2c81612e06565b92915050565b600060208284031215612e4857612e47612cbb565b5b6000612e5684828501612e1d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8a82612e5f565b9050919050565b612e9a81612e7f565b82525050565b6000602082019050612eb56000830184612e91565b92915050565b612ec481612e7f565b8114612ecf57600080fd5b50565b600081359050612ee181612ebb565b92915050565b60008060408385031215612efe57612efd612cbb565b5b6000612f0c85828601612ed2565b9250506020612f1d85828601612e1d565b9150509250929050565b612f3081612dfc565b82525050565b6000602082019050612f4b6000830184612f27565b92915050565b600060208284031215612f6757612f66612cbb565b5b6000612f7584828501612ed2565b91505092915050565b600080600060608486031215612f9757612f96612cbb565b5b6000612fa586828701612ed2565b9350506020612fb686828701612ed2565b9250506040612fc786828701612e1d565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61301382612d90565b810181811067ffffffffffffffff8211171561303257613031612fdb565b5b80604052505050565b6000613045612cb1565b9050613051828261300a565b919050565b600067ffffffffffffffff82111561307157613070612fdb565b5b61307a82612d90565b9050602081019050919050565b82818337600083830152505050565b60006130a96130a484613056565b61303b565b9050828152602081018484840111156130c5576130c4612fd6565b5b6130d0848285613087565b509392505050565b600082601f8301126130ed576130ec612fd1565b5b81356130fd848260208601613096565b91505092915050565b60006020828403121561311c5761311b612cbb565b5b600082013567ffffffffffffffff81111561313a57613139612cc0565b5b613146848285016130d8565b91505092915050565b61315881612c7b565b811461316357600080fd5b50565b6000813590506131758161314f565b92915050565b6000806040838503121561319257613191612cbb565b5b60006131a085828601613166565b925050602083013567ffffffffffffffff8111156131c1576131c0612cc0565b5b6131cd858286016130d8565b9150509250929050565b600080604083850312156131ee576131ed612cbb565b5b60006131fc85828601612e1d565b925050602061320d85828601612ed2565b9150509250929050565b6000806040838503121561322e5761322d612cbb565b5b600061323c85828601612ed2565b925050602061324d85828601613166565b9150509250929050565b600067ffffffffffffffff82111561327257613271612fdb565b5b61327b82612d90565b9050602081019050919050565b600061329b61329684613257565b61303b565b9050828152602081018484840111156132b7576132b6612fd6565b5b6132c2848285613087565b509392505050565b600082601f8301126132df576132de612fd1565b5b81356132ef848260208601613288565b91505092915050565b6000806000806080858703121561331257613311612cbb565b5b600061332087828801612ed2565b945050602061333187828801612ed2565b935050604061334287828801612e1d565b925050606085013567ffffffffffffffff81111561336357613362612cc0565b5b61336f878288016132ca565b91505092959194509250565b6000806040838503121561339257613391612cbb565b5b60006133a085828601612ed2565b92505060206133b185828601612ed2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061340257607f821691505b602082108103613415576134146133bb565b5b50919050565b60006040820190506134306000830185612e91565b61343d6020830184612e91565b9392505050565b6000815190506134538161314f565b92915050565b60006020828403121561346f5761346e612cbb565b5b600061347d84828501613444565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c2060008201527f7c2040456c4761746f73436c7562000000000000000000000000000000000000602082015250565b60006134e2602e83612d55565b91506134ed82613486565b604082019050919050565b60006020820190508181036000830152613511816134d5565b9050919050565b600081905092915050565b50565b6000613533600083613518565b915061353e82613523565b600082019050919050565b600061355482613526565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613594601083612d55565b915061359f8261355e565b602082019050919050565b600060208201905081810360008301526135c381613587565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261362c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826135ef565b61363686836135ef565b95508019841693508086168417925050509392505050565b6000819050919050565b600061367361366e61366984612dfc565b61364e565b612dfc565b9050919050565b6000819050919050565b61368d83613658565b6136a16136998261367a565b8484546135fc565b825550505050565b600090565b6136b66136a9565b6136c1818484613684565b505050565b5b818110156136e5576136da6000826136ae565b6001810190506136c7565b5050565b601f82111561372a576136fb816135ca565b613704846135df565b81016020851015613713578190505b61372761371f856135df565b8301826136c6565b50505b505050565b600082821c905092915050565b600061374d6000198460080261372f565b1980831691505092915050565b6000613766838361373c565b9150826002028217905092915050565b61377f82612d4a565b67ffffffffffffffff81111561379857613797612fdb565b5b6137a282546133ea565b6137ad8282856136e9565b600060209050601f8311600181146137e057600084156137ce578287015190505b6137d8858261375a565b865550613840565b601f1984166137ee866135ca565b60005b82811015613816578489015182556001820191506020850194506020810190506137f1565b86831015613833578489015161382f601f89168261373c565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061388282612dfc565b915061388d83612dfc565b92508282019050808211156138a5576138a4613848565b5b92915050565b7f4e6f206d6f7265206761746f7320696e2073746f636b21000000000000000000600082015250565b60006138e1601783612d55565b91506138ec826138ab565b602082019050919050565b60006020820190508181036000830152613910816138d4565b9050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e7472616374207c60008201527f20656c6761746f732e7573000000000000000000000000000000000000000000602082015250565b6000613973602b83612d55565b915061397e82613917565b604082019050919050565b600060208201905081810360008301526139a281613966565b9050919050565b60006139b482612dfc565b91506139bf83612dfc565b92508282039050818111156139d7576139d6613848565b5b92915050565b60006139e882612dfc565b91506139f383612dfc565b9250828202613a0181612dfc565b91508282048414831517613a1857613a17613848565b5b5092915050565b7f4761746f73206e6f742072656164792079657421000000000000000000000000600082015250565b6000613a55601483612d55565b9150613a6082613a1f565b602082019050919050565b60006020820190508181036000830152613a8481613a48565b9050919050565b7f4e6f206d6f7265206761746f73206c65667421207c20656c6761746f732e7573600082015250565b6000613ac1602083612d55565b9150613acc82613a8b565b602082019050919050565b60006020820190508181036000830152613af081613ab4565b9050919050565b7f547269656420746f206d696e74206761746f73206f766572206f766572206c6960008201527f6d6974207c20656c6761746f732e757300000000000000000000000000000000602082015250565b6000613b53603083612d55565b9150613b5e82613af7565b604082019050919050565b60006020820190508181036000830152613b8281613b46565b9050919050565b7f547269656420746f206d696e74206761746f73206f766572206c696d69742c2060008201527f726574727920776974682072656475636564207175616e74697479207c20656c60208201527f6761746f732e7573000000000000000000000000000000000000000000000000604082015250565b6000613c0b604883612d55565b9150613c1682613b89565b606082019050919050565b60006020820190508181036000830152613c3a81613bfe565b9050919050565b7f4d7573742073656e64206d6f726520657468207c20656c6761746f732e757321600082015250565b6000613c77602083612d55565b9150613c8282613c41565b602082019050919050565b60006020820190508181036000830152613ca681613c6a565b9050919050565b600081905092915050565b60008154613cc5816133ea565b613ccf8186613cad565b94506001821660008114613cea5760018114613cff57613d32565b60ff1983168652811515820286019350613d32565b613d08856135ca565b60005b83811015613d2a57815481890152600182019150602081019050613d0b565b838801955050505b50505092915050565b6000613d4682612d4a565b613d508185613cad565b9350613d60818560208601612d66565b80840191505092915050565b6000613d788285613cb8565b9150613d848284613d3b565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f646472657373207c20656c6761746f732e757300000000000000000000000000602082015250565b6000613dec603383612d55565b9150613df782613d90565b604082019050919050565b60006020820190508181036000830152613e1b81613ddf565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260008201527f207c20656c6761746f732e757300000000000000000000000000000000000000602082015250565b6000613e7e602d83612d55565b9150613e8982613e22565b604082019050919050565b60006020820190508181036000830152613ead81613e71565b9050919050565b6000613ebf82612dfc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ef157613ef0613848565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f3682612dfc565b9150613f4183612dfc565b925082613f5157613f50613efc565b5b828204905092915050565b6000613f6782612dfc565b9150613f7283612dfc565b925082613f8257613f81613efc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000613fe382613fbc565b613fed8185613fc7565b9350613ffd818560208601612d66565b61400681612d90565b840191505092915050565b60006080820190506140266000830187612e91565b6140336020830186612e91565b6140406040830185612f27565b81810360608301526140528184613fd8565b905095945050505050565b60008151905061406c81612cf1565b92915050565b60006020828403121561408857614087612cbb565b5b60006140968482850161405d565b9150509291505056fea264697066735822122028b3ff8e18eaea874aaff26484ed1e179f336ba5028a08109e55e582ade1026964736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102515760003560e01c80637871e15411610139578063c144a4ba116100b6578063e75722301161007a578063e757223014610837578063e8a3d48514610874578063e985e9c51461089f578063f2fde38b146108dc578063f814943d14610905578063fb92488b1461092e57610251565b8063c144a4ba14610750578063c87b56dd14610779578063cfdbf254146107b6578063d8258d95146107e1578063dbddb26a1461080c57610251565b8063a22cb465116100fd578063a22cb4651461069e578063a4cdd719146106c7578063a76a9587146106de578063b88d4fde14610709578063c002d23d1461072557610251565b80637871e154146105da5780638da5cb5b1461060357806395d89b411461062e578063a0712d6814610659578063a1db246e1461067557610251565b806342842e0e116101d25780635fe75587116101965780635fe75587146104cc5780636352211e146104f757806370a0823114610534578063715018a6146105715780637304ff6c1461058857806375b64471146105b157610251565b806342842e0e1461040857806342966c6814610424578063507862d11461044d57806356b48d631461047857806356b4f673146104a157610251565b80631422374f116102195780631422374f1461034257806318160ddd1461036d5780631d9857781461039857806323b872dd146103d557806324600fc3146103f157610251565b80630116bc2d1461025657806301ffc9a71461028157806306fdde03146102be578063081812fc146102e9578063095ea7b314610326575b600080fd5b34801561026257600080fd5b5061026b610957565b6040516102789190612c96565b60405180910390f35b34801561028d57600080fd5b506102a860048036038101906102a39190612d1d565b61096a565b6040516102b59190612c96565b60405180910390f35b3480156102ca57600080fd5b506102d36109fc565b6040516102e09190612dda565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190612e32565b610a8e565b60405161031d9190612ea0565b60405180910390f35b610340600480360381019061033b9190612ee7565b610b0d565b005b34801561034e57600080fd5b50610357610c51565b6040516103649190612f36565b60405180910390f35b34801561037957600080fd5b50610382610c57565b60405161038f9190612f36565b60405180910390f35b3480156103a457600080fd5b506103bf60048036038101906103ba9190612f51565b610c6e565b6040516103cc9190612f36565b60405180910390f35b6103ef60048036038101906103ea9190612f7e565b610c86565b005b3480156103fd57600080fd5b50610406610d92565b005b610422600480360381019061041d9190612f7e565b610e9e565b005b34801561043057600080fd5b5061044b60048036038101906104469190612e32565b610faa565b005b34801561045957600080fd5b50610462610fb8565b60405161046f9190612dda565b60405180910390f35b34801561048457600080fd5b5061049f600480360381019061049a9190613106565b611046565b005b3480156104ad57600080fd5b506104b6611061565b6040516104c39190612dda565b60405180910390f35b3480156104d857600080fd5b506104e16110ef565b6040516104ee9190612f36565b60405180910390f35b34801561050357600080fd5b5061051e60048036038101906105199190612e32565b6110f5565b60405161052b9190612ea0565b60405180910390f35b34801561054057600080fd5b5061055b60048036038101906105569190612f51565b611107565b6040516105689190612f36565b60405180910390f35b34801561057d57600080fd5b506105866111bf565b005b34801561059457600080fd5b506105af60048036038101906105aa919061317b565b6111d3565b005b3480156105bd57600080fd5b506105d860048036038101906105d39190612e32565b611209565b005b3480156105e657600080fd5b5061060160048036038101906105fc91906131d7565b61121b565b005b34801561060f57600080fd5b50610618611288565b6040516106259190612ea0565b60405180910390f35b34801561063a57600080fd5b506106436112b1565b6040516106509190612dda565b60405180910390f35b610673600480360381019061066e9190612e32565b611343565b005b34801561068157600080fd5b5061069c60048036038101906106979190612e32565b611790565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190613217565b6117a2565b005b3480156106d357600080fd5b506106dc6118ad565b005b3480156106ea57600080fd5b506106f36118e1565b6040516107009190612c96565b60405180910390f35b610723600480360381019061071e91906132f8565b6118f4565b005b34801561073157600080fd5b5061073a611a02565b6040516107479190612f36565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190612e32565b611a08565b005b34801561078557600080fd5b506107a0600480360381019061079b9190612e32565b611a1a565b6040516107ad9190612dda565b60405180910390f35b3480156107c257600080fd5b506107cb611af6565b6040516107d89190612f36565b60405180910390f35b3480156107ed57600080fd5b506107f6611afc565b6040516108039190612f36565b60405180910390f35b34801561081857600080fd5b50610821611b02565b60405161082e9190612dda565b60405180910390f35b34801561084357600080fd5b5061085e60048036038101906108599190612e32565b611b90565b60405161086b9190612f36565b60405180910390f35b34801561088057600080fd5b50610889611c1a565b6040516108969190612dda565b60405180910390f35b3480156108ab57600080fd5b506108c660048036038101906108c1919061337b565b611cac565b6040516108d39190612c96565b60405180910390f35b3480156108e857600080fd5b5061090360048036038101906108fe9190612f51565b611d40565b005b34801561091157600080fd5b5061092c60048036038101906109279190612e32565b611dc3565b005b34801561093a57600080fd5b5061095560048036038101906109509190612e32565b611dd5565b005b600f60009054906101000a900460ff1681565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c557506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109f55750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b606060038054610a0b906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610a37906133ea565b8015610a845780601f10610a5957610100808354040283529160200191610a84565b820191906000526020600020905b815481529060010190602001808311610a6757829003601f168201915b5050505050905090565b6000610a9982611de7565b610acf576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b18826110f5565b90508073ffffffffffffffffffffffffffffffffffffffff16610b39611e46565b73ffffffffffffffffffffffffffffffffffffffff1614610b9c57610b6581610b60611e46565b611cac565b610b9b576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826007600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60145481565b6000610c61611e4e565b6002546001540303905090565b600b6020528060005260406000206000915090505481565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610d82576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610cfd92919061341b565b6020604051808303816000875af1158015610d1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d409190613459565b610d8157336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610d789190612ea0565b60405180910390fd5b5b610d8d838383611e53565b505050565b610d9a612175565b600260095403610ddf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd6906134f8565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610e0d90613549565b60006040518083038185875af1925050503d8060008114610e4a576040519150601f19603f3d011682016040523d82523d6000602084013e610e4f565b606091505b5050905080610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a906135aa565b60405180910390fd5b506001600981905550565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b1115610f9a576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b8152600401610f1592919061341b565b6020604051808303816000875af1158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f589190613459565b610f9957336040517fede71dcc000000000000000000000000000000000000000000000000000000008152600401610f909190612ea0565b60405180910390fd5b5b610fa58383836121f3565b505050565b610fb5816001612213565b50565b600d8054610fc5906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff1906133ea565b801561103e5780601f106110135761010080835404028352916020019161103e565b820191906000526020600020905b81548152906001019060200180831161102157829003601f168201915b505050505081565b61104e612175565b80600a908161105d9190613776565b5050565b600a805461106e906133ea565b80601f016020809104026020016040519081016040528092919081815260200182805461109a906133ea565b80156110e75780601f106110bc576101008083540402835291602001916110e7565b820191906000526020600020905b8154815290600101906020018083116110ca57829003601f168201915b505050505081565b60135481565b600061110082612465565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361116e576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6111c7612175565b6111d16000612531565b565b6111db612175565b80600e90816111ea9190613776565b5081600c60006101000a81548160ff0219169083151502179055505050565b611211612175565b8060108190555050565b611223612175565b6010548261122f610c57565b6112399190613877565b111561127a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611271906138f7565b60405180910390fd5b61128481836125f5565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112c0906133ea565b80601f01602080910402602001604051908101604052809291908181526020018280546112ec906133ea565b80156113395780601f1061130e57610100808354040283529160200191611339565b820191906000526020600020905b81548152906001019060200180831161131c57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a890613989565b60405180910390fd5b6002600954036113f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ed906134f8565b60405180910390fd5b6002600981905550600080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460145461144e91906139a9565b905080831061150557808361146391906139a9565b60115461147091906139dd565b915080600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114bd9190613877565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611598565b6000915082600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115549190613877565b600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff166115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de90613a6b565b60405180910390fd5b601054836115f3610c57565b6115fd9190613877565b111561163e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163590613ad7565b60405180910390fd5b6013548361164b33611107565b6116559190613877565b1115611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d90613b69565b60405180910390fd5b6012548311156116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d290613c21565b60405180910390fd5b8134101561171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171590613c8d565b60405180910390fd5b61172833846125f5565b81341115611783573373ffffffffffffffffffffffffffffffffffffffff166108fc833461175691906139a9565b9081150290604051600060405180830381858888f19350505050158015611781573d6000803e3d6000fd5b505b5050600160098190555050565b611798612175565b8060148190555050565b80600860006117af611e46565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661185c611e46565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118a19190612c96565b60405180910390a35050565b6118b5612175565b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600c60009054906101000a900460ff1681565b60006daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff163b11156119f0576daaeb6d7670e522a718067333cd4e73ffffffffffffffffffffffffffffffffffffffff1663c617113430336040518363ffffffff1660e01b815260040161196b92919061341b565b6020604051808303816000875af115801561198a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ae9190613459565b6119ef57336040517fede71dcc0000000000000000000000000000000000000000000000000000000081526004016119e69190612ea0565b60405180910390fd5b5b6119fc84848484612613565b50505050565b60115481565b611a10612175565b8060128190555050565b6060600c60009054906101000a900460ff1615611a6357600e611a3c83612686565b604051602001611a4d929190613d6c565b6040516020818303038152906040529050611af1565b600d8054611a70906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9c906133ea565b8015611ae95780601f10611abe57610100808354040283529160200191611ae9565b820191906000526020600020905b815481529060010190602001808311611acc57829003601f168201915b505050505090505b919050565b60125481565b60105481565b600e8054611b0f906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3b906133ea565b8015611b885780601f10611b5d57610100808354040283529160200191611b88565b820191906000526020600020905b815481529060010190602001808311611b6b57829003601f168201915b505050505081565b6000806000600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601454611be291906139a9565b9050808410611c0b578084611bf791906139a9565b601154611c0491906139dd565b9150611c10565b600091505b8192505050919050565b6060600a8054611c29906133ea565b80601f0160208091040260200160405190810160405280929190818152602001828054611c55906133ea565b8015611ca25780601f10611c7757610100808354040283529160200191611ca2565b820191906000526020600020905b815481529060010190602001808311611c8557829003601f168201915b5050505050905090565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611d48612175565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dae90613e02565b60405180910390fd5b611dc081612531565b50565b611dcb612175565b8060138190555050565b611ddd612175565b8060118190555050565b600081611df2611e4e565b11158015611e01575060015482105b8015611e3f575060007c0100000000000000000000000000000000000000000000000000000000600560008581526020019081526020016000205416145b9050919050565b600033905090565b600090565b6000611e5e82612465565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ec5576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080611ed1846127e6565b91509150611ee78187611ee2611e46565b61280d565b611f3357611efc86611ef7611e46565b611cac565b611f32576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611f99576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611fa68686866001612851565b8015611fb157600082555b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001019190508190555061207f8561205b888887612857565b7c02000000000000000000000000000000000000000000000000000000001761287f565b600560008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416036121055760006001850190506000600560008381526020019081526020016000205403612103576001548114612102578360056000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461216d86868660016128aa565b505050505050565b61217d6128b0565b73ffffffffffffffffffffffffffffffffffffffff1661219b611288565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890613e94565b60405180910390fd5b565b61220e838383604051806020016040528060008152506118f4565b505050565b600061221e83612465565b90506000819050600080612231866127e6565b91509150841561229a5761224d8184612248611e46565b61280d565b612299576122628361225d611e46565b611cac565b612298576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b5b6122a8836000886001612851565b80156122b357600082555b600160806001901b03600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555061235b8361231885600088612857565b7c02000000000000000000000000000000000000000000000000000000007c0100000000000000000000000000000000000000000000000000000000171761287f565b600560008881526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008516036123e157600060018701905060006005600083815260200190815260200160002054036123df5760015481146123de578460056000838152602001908152602001600020819055505b5b505b85600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461244b8360008860016128aa565b600260008154809291906001019190505550505050505050565b60008082905080612474611e4e565b116124fa576001548110156124f95760006005600083815260200190815260200160002054905060007c01000000000000000000000000000000000000000000000000000000008216036124f7575b600081036124ed5760056000836001900393508381526020019081526020016000205490506124c3565b809250505061252c565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61260f8282604051806020016040528060008152506128b8565b5050565b61261e848484610c86565b60008373ffffffffffffffffffffffffffffffffffffffff163b146126805761264984848484612956565b61267f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6060600082036126cd576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127e1565b600082905060005b600082146126ff5780806126e890613eb4565b915050600a826126f89190613f2b565b91506126d5565b60008167ffffffffffffffff81111561271b5761271a612fdb565b5b6040519080825280601f01601f19166020018201604052801561274d5781602001600182028036833780820191505090505b5090505b600085146127da5760018261276691906139a9565b9150600a856127759190613f5c565b60306127819190613877565b60f81b81838151811061279757612796613f8d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127d39190613f2b565b9450612751565b8093505050505b919050565b60008060006007600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e861286e868684612aa6565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b6128c28383612aaf565b60008373ffffffffffffffffffffffffffffffffffffffff163b146129515760006001549050600083820390505b6129036000868380600101945086612956565b612939576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106128f057816001541461294e57600080fd5b50505b505050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261297c611e46565b8786866040518563ffffffff1660e01b815260040161299e9493929190614011565b6020604051808303816000875af19250505080156129da57506040513d601f19601f820116820180604052508101906129d79190614072565b60015b612a53573d8060008114612a0a576040519150601f19603f3d011682016040523d82523d6000602084013e612a0f565b606091505b506000815103612a4b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60009392505050565b6000600154905060008203612af0576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612afd6000848385612851565b600160406001901b178202600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612b7483612b656000866000612857565b612b6e85612c6b565b1761287f565b6005600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b818114612c1557808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600181019050612bda565b5060008203612c50576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806001819055505050612c6660008483856128aa565b505050565b60006001821460e11b9050919050565b60008115159050919050565b612c9081612c7b565b82525050565b6000602082019050612cab6000830184612c87565b92915050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cfa81612cc5565b8114612d0557600080fd5b50565b600081359050612d1781612cf1565b92915050565b600060208284031215612d3357612d32612cbb565b5b6000612d4184828501612d08565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d84578082015181840152602081019050612d69565b60008484015250505050565b6000601f19601f8301169050919050565b6000612dac82612d4a565b612db68185612d55565b9350612dc6818560208601612d66565b612dcf81612d90565b840191505092915050565b60006020820190508181036000830152612df48184612da1565b905092915050565b6000819050919050565b612e0f81612dfc565b8114612e1a57600080fd5b50565b600081359050612e2c81612e06565b92915050565b600060208284031215612e4857612e47612cbb565b5b6000612e5684828501612e1d565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8a82612e5f565b9050919050565b612e9a81612e7f565b82525050565b6000602082019050612eb56000830184612e91565b92915050565b612ec481612e7f565b8114612ecf57600080fd5b50565b600081359050612ee181612ebb565b92915050565b60008060408385031215612efe57612efd612cbb565b5b6000612f0c85828601612ed2565b9250506020612f1d85828601612e1d565b9150509250929050565b612f3081612dfc565b82525050565b6000602082019050612f4b6000830184612f27565b92915050565b600060208284031215612f6757612f66612cbb565b5b6000612f7584828501612ed2565b91505092915050565b600080600060608486031215612f9757612f96612cbb565b5b6000612fa586828701612ed2565b9350506020612fb686828701612ed2565b9250506040612fc786828701612e1d565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61301382612d90565b810181811067ffffffffffffffff8211171561303257613031612fdb565b5b80604052505050565b6000613045612cb1565b9050613051828261300a565b919050565b600067ffffffffffffffff82111561307157613070612fdb565b5b61307a82612d90565b9050602081019050919050565b82818337600083830152505050565b60006130a96130a484613056565b61303b565b9050828152602081018484840111156130c5576130c4612fd6565b5b6130d0848285613087565b509392505050565b600082601f8301126130ed576130ec612fd1565b5b81356130fd848260208601613096565b91505092915050565b60006020828403121561311c5761311b612cbb565b5b600082013567ffffffffffffffff81111561313a57613139612cc0565b5b613146848285016130d8565b91505092915050565b61315881612c7b565b811461316357600080fd5b50565b6000813590506131758161314f565b92915050565b6000806040838503121561319257613191612cbb565b5b60006131a085828601613166565b925050602083013567ffffffffffffffff8111156131c1576131c0612cc0565b5b6131cd858286016130d8565b9150509250929050565b600080604083850312156131ee576131ed612cbb565b5b60006131fc85828601612e1d565b925050602061320d85828601612ed2565b9150509250929050565b6000806040838503121561322e5761322d612cbb565b5b600061323c85828601612ed2565b925050602061324d85828601613166565b9150509250929050565b600067ffffffffffffffff82111561327257613271612fdb565b5b61327b82612d90565b9050602081019050919050565b600061329b61329684613257565b61303b565b9050828152602081018484840111156132b7576132b6612fd6565b5b6132c2848285613087565b509392505050565b600082601f8301126132df576132de612fd1565b5b81356132ef848260208601613288565b91505092915050565b6000806000806080858703121561331257613311612cbb565b5b600061332087828801612ed2565b945050602061333187828801612ed2565b935050604061334287828801612e1d565b925050606085013567ffffffffffffffff81111561336357613362612cc0565b5b61336f878288016132ca565b91505092959194509250565b6000806040838503121561339257613391612cbb565b5b60006133a085828601612ed2565b92505060206133b185828601612ed2565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061340257607f821691505b602082108103613415576134146133bb565b5b50919050565b60006040820190506134306000830185612e91565b61343d6020830184612e91565b9392505050565b6000815190506134538161314f565b92915050565b60006020828403121561346f5761346e612cbb565b5b600061347d84828501613444565b91505092915050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c2060008201527f7c2040456c4761746f73436c7562000000000000000000000000000000000000602082015250565b60006134e2602e83612d55565b91506134ed82613486565b604082019050919050565b60006020820190508181036000830152613511816134d5565b9050919050565b600081905092915050565b50565b6000613533600083613518565b915061353e82613523565b600082019050919050565b600061355482613526565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613594601083612d55565b915061359f8261355e565b602082019050919050565b600060208201905081810360008301526135c381613587565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261362c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826135ef565b61363686836135ef565b95508019841693508086168417925050509392505050565b6000819050919050565b600061367361366e61366984612dfc565b61364e565b612dfc565b9050919050565b6000819050919050565b61368d83613658565b6136a16136998261367a565b8484546135fc565b825550505050565b600090565b6136b66136a9565b6136c1818484613684565b505050565b5b818110156136e5576136da6000826136ae565b6001810190506136c7565b5050565b601f82111561372a576136fb816135ca565b613704846135df565b81016020851015613713578190505b61372761371f856135df565b8301826136c6565b50505b505050565b600082821c905092915050565b600061374d6000198460080261372f565b1980831691505092915050565b6000613766838361373c565b9150826002028217905092915050565b61377f82612d4a565b67ffffffffffffffff81111561379857613797612fdb565b5b6137a282546133ea565b6137ad8282856136e9565b600060209050601f8311600181146137e057600084156137ce578287015190505b6137d8858261375a565b865550613840565b601f1984166137ee866135ca565b60005b82811015613816578489015182556001820191506020850194506020810190506137f1565b86831015613833578489015161382f601f89168261373c565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061388282612dfc565b915061388d83612dfc565b92508282019050808211156138a5576138a4613848565b5b92915050565b7f4e6f206d6f7265206761746f7320696e2073746f636b21000000000000000000600082015250565b60006138e1601783612d55565b91506138ec826138ab565b602082019050919050565b60006020820190508181036000830152613910816138d4565b9050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e7472616374207c60008201527f20656c6761746f732e7573000000000000000000000000000000000000000000602082015250565b6000613973602b83612d55565b915061397e82613917565b604082019050919050565b600060208201905081810360008301526139a281613966565b9050919050565b60006139b482612dfc565b91506139bf83612dfc565b92508282039050818111156139d7576139d6613848565b5b92915050565b60006139e882612dfc565b91506139f383612dfc565b9250828202613a0181612dfc565b91508282048414831517613a1857613a17613848565b5b5092915050565b7f4761746f73206e6f742072656164792079657421000000000000000000000000600082015250565b6000613a55601483612d55565b9150613a6082613a1f565b602082019050919050565b60006020820190508181036000830152613a8481613a48565b9050919050565b7f4e6f206d6f7265206761746f73206c65667421207c20656c6761746f732e7573600082015250565b6000613ac1602083612d55565b9150613acc82613a8b565b602082019050919050565b60006020820190508181036000830152613af081613ab4565b9050919050565b7f547269656420746f206d696e74206761746f73206f766572206f766572206c6960008201527f6d6974207c20656c6761746f732e757300000000000000000000000000000000602082015250565b6000613b53603083612d55565b9150613b5e82613af7565b604082019050919050565b60006020820190508181036000830152613b8281613b46565b9050919050565b7f547269656420746f206d696e74206761746f73206f766572206c696d69742c2060008201527f726574727920776974682072656475636564207175616e74697479207c20656c60208201527f6761746f732e7573000000000000000000000000000000000000000000000000604082015250565b6000613c0b604883612d55565b9150613c1682613b89565b606082019050919050565b60006020820190508181036000830152613c3a81613bfe565b9050919050565b7f4d7573742073656e64206d6f726520657468207c20656c6761746f732e757321600082015250565b6000613c77602083612d55565b9150613c8282613c41565b602082019050919050565b60006020820190508181036000830152613ca681613c6a565b9050919050565b600081905092915050565b60008154613cc5816133ea565b613ccf8186613cad565b94506001821660008114613cea5760018114613cff57613d32565b60ff1983168652811515820286019350613d32565b613d08856135ca565b60005b83811015613d2a57815481890152600182019150602081019050613d0b565b838801955050505b50505092915050565b6000613d4682612d4a565b613d508185613cad565b9350613d60818560208601612d66565b80840191505092915050565b6000613d788285613cb8565b9150613d848284613d3b565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f646472657373207c20656c6761746f732e757300000000000000000000000000602082015250565b6000613dec603383612d55565b9150613df782613d90565b604082019050919050565b60006020820190508181036000830152613e1b81613ddf565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260008201527f207c20656c6761746f732e757300000000000000000000000000000000000000602082015250565b6000613e7e602d83612d55565b9150613e8982613e22565b604082019050919050565b60006020820190508181036000830152613ead81613e71565b9050919050565b6000613ebf82612dfc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613ef157613ef0613848565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613f3682612dfc565b9150613f4183612dfc565b925082613f5157613f50613efc565b5b828204905092915050565b6000613f6782612dfc565b9150613f7283612dfc565b925082613f8257613f81613efc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000613fe382613fbc565b613fed8185613fc7565b9350613ffd818560208601612d66565b61400681612d90565b840191505092915050565b60006080820190506140266000830187612e91565b6140336020830186612e91565b6140406040830185612f27565b81810360608301526140528184613fd8565b905095945050505050565b60008151905061406c81612cf1565b92915050565b60006020828403121561408857614087612cbb565b5b60006140968482850161405d565b9150509291505056fea264697066735822122028b3ff8e18eaea874aaff26484ed1e179f336ba5028a08109e55e582ade1026964736f6c63430008120033

Deployed Bytecode Sourcemap

39489:4761:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39762:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19556:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19808:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23484:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23068:408;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39953:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17919:180;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39625:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43238:199;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42096:191;;;;;;;;;;;;;:::i;:::-;;43445:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39360:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39696:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42557:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39591:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39916:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20456:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18384:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5841:103;;;;;;;;;;;;;:::i;:::-;;42295:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42677:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40081:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5593:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19916:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40819:1153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42899:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23810:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41978:110;;;;;;;;;;;;;:::i;:::-;;39673:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43646:250;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39842:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43132:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43904:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39882:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39804:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39732:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40487:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42452:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24052:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5954:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43017:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42791:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39762:39;;;;;;;;;;;;;:::o;19556:244::-;19641:4;19695:10;19680:25;;:11;:25;;;;:68;;;;19738:10;19723:25;;:11;:25;;;;19680:68;:111;;;;19781:10;19766:25;;:11;:25;;;;19680:111;19660:131;;19556:244;;;:::o;19808:100::-;19862:13;19895:5;19888:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19808:100;:::o;23484:218::-;23560:7;23585:16;23593:7;23585;:16::i;:::-;23580:64;;23610:34;;;;;;;;;;;;;;23580:64;23664:15;:24;23680:7;23664:24;;;;;;;;;;;:30;;;;;;;;;;;;23657:37;;23484:218;;;:::o;23068:408::-;23157:13;23173:16;23181:7;23173;:16::i;:::-;23157:32;;23229:5;23206:28;;:19;:17;:19::i;:::-;:28;;;23202:175;;23254:44;23271:5;23278:19;:17;:19::i;:::-;23254:16;:44::i;:::-;23249:128;;23326:35;;;;;;;;;;;;;;23249:128;23202:175;23422:2;23389:15;:24;23405:7;23389:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;23460:7;23456:2;23440:28;;23449:5;23440:28;;;;;;;;;;;;23146:330;23068:408;;:::o;39953:38::-;;;;:::o;17919:180::-;17980:7;18065:15;:13;:15::i;:::-;18050:12;;18034:13;;:28;:46;18027:53;;17919:180;:::o;39625:45::-;;;;;;;;;;;;;;;;;:::o;43238:199::-;36596:1;35807:42;36550:43;;;:47;36546:225;;;35807:42;36619:40;;;36668:4;36675:10;36619:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36614:146;;36733:10;36714:30;;;;;;;;;;;:::i;:::-;;;;;;;;36614:146;36546:225;43392:37:::1;43411:4;43417:2;43421:7;43392:18;:37::i;:::-;43238:199:::0;;;:::o;42096:191::-;5552:13;:11;:13::i;:::-;6528:1:::1;6686:7;;:19:::0;6678:78:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6528:1;6769:7;:18;;;;42165:12:::2;42183:10;:15;;42206:21;42183:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42164:68;;;42251:7;42243:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;42153:134;6484:1:::1;6814:7;:22;;;;42096:191::o:0;43445:193::-;36596:1;35807:42;36550:43;;;:47;36546:225;;;35807:42;36619:40;;;36668:4;36675:10;36619:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36614:146;;36733:10;36714:30;;;;;;;;;;;:::i;:::-;;;;;;;;36614:146;36546:225;43589:41:::1;43612:4;43618:2;43622:7;43589:22;:41::i;:::-;43445:193:::0;;;:::o;39360:94::-;39426:20;39432:7;39441:4;39426:5;:20::i;:::-;39360:94;:::o;39696:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;42557:112::-;5552:13;:11;:13::i;:::-;42649:12:::1;42634;:27;;;;;;:::i;:::-;;42557:112:::0;:::o;39591:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;39916:34::-;;;;:::o;20456:152::-;20528:7;20571:27;20590:7;20571:18;:27::i;:::-;20548:52;;20456:152;;;:::o;18384:233::-;18456:7;18497:1;18480:19;;:5;:19;;;18476:60;;18508:28;;;;;;;;;;;;;;18476:60;16192:13;18554:18;:25;18573:5;18554:25;;;;;;;;;;;;;;;;:55;18547:62;;18384:233;;;:::o;5841:103::-;5552:13;:11;:13::i;:::-;5906:30:::1;5933:1;5906:18;:30::i;:::-;5841:103::o:0;42295:149::-;5552:13;:11;:13::i;:::-;42397:8:::1;42386;:19;;;;;;:::i;:::-;;42427:9;42416:8;;:20;;;;;;;;;;;;;;;;;;42295:149:::0;;:::o;42677:106::-;5552:13;:11;:13::i;:::-;42771:4:::1;42753:15;:22;;;;42677:106:::0;:::o;40081:256::-;5552:13;:11;:13::i;:::-;40213:15:::1;;40201:8;40185:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;40163:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;40300:29;40310:8;40320;40300:9;:29::i;:::-;40081:256:::0;;:::o;5593:87::-;5639:7;5666:6;;;;;;;;;;;5659:13;;5593:87;:::o;19916:104::-;19972:13;20005:7;19998:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19916:104;:::o;40819:1153::-;40401:10;40388:23;;:9;:23;;;40380:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;6528:1:::1;6686:7;;:19:::0;6678:78:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6528:1;6769:7;:18;;;;40944:10:::2;40965:9:::0;41002:13:::2;:25;41016:10;41002:25;;;;;;;;;;;;;;;;40977:22;;:50;;;;:::i;:::-;40965:62;;41054:4;41042:8;:16;41038:285;;41110:4;41099:8;:15;;;;:::i;:::-;41084:10;;41083:32;;;;:::i;:::-;41075:40;;41186:4;41158:13;:25;41172:10;41158:25;;;;;;;;;;;;;;;;:32;;;;:::i;:::-;41130:13;:25;41144:10;41130:25;;;;;;;;;;;;;;;:60;;;;41038:285;;;41231:1;41223:9;;41303:8;41275:13;:25;41289:10;41275:25;;;;;;;;;;;;;;;;:36;;;;:::i;:::-;41247:13;:25;41261:10;41247:25;;;;;;;;;;;;;;;:64;;;;41038:285;41343:19;;;;;;;;;;;41335:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;41434:15;;41422:8;41406:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:43;;41398:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;41543:17;;41531:8;41507:21;41517:10;41507:9;:21::i;:::-;:32;;;;:::i;:::-;:53;;41499:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;41646:14;;41634:8;:26;;41626:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;41769:5;41756:9;:18;;41748:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;41824:31;41834:10;41846:8;41824:9;:31::i;:::-;41884:5;41872:9;:17;41868:97;;;41914:10;41906:28;;:47;41947:5;41935:9;:17;;;;:::i;:::-;41906:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;41868:97;40933:1039;;6484:1:::1;6814:7;:22;;;;40819:1153:::0;:::o;42899:110::-;5552:13;:11;:13::i;:::-;42997:4:::1;42972:22;:29;;;;42899:110:::0;:::o;23810:234::-;23957:8;23905:18;:39;23924:19;:17;:19::i;:::-;23905:39;;;;;;;;;;;;;;;:49;23945:8;23905:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;24017:8;23981:55;;23996:19;:17;:19::i;:::-;23981:55;;;24027:8;23981:55;;;;;;:::i;:::-;;;;;;;;23810:234;;:::o;41978:110::-;5552:13;:11;:13::i;:::-;42061:19:::1;;;;;;;;;;;42060:20;42038:19;;:42;;;;;;;;;;;;;;;;;;41978:110::o:0;39673:20::-;;;;;;;;;;;;;:::o;43646:250::-;36596:1;35807:42;36550:43;;;:47;36546:225;;;35807:42;36619:40;;;36668:4;36675:10;36619:67;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36614:146;;36733:10;36714:30;;;;;;;;;;;:::i;:::-;;;;;;;;36614:146;36546:225;43841:47:::1;43864:4;43870:2;43874:7;43883:4;43841:22;:47::i;:::-;43646:250:::0;;;;:::o;39842:36::-;;;;:::o;43132:98::-;5552:13;:11;:13::i;:::-;43218:4:::1;43201:14;:21;;;;43132:98:::0;:::o;43904:341::-;44026:13;44061:8;;;;;;;;;;;44057:181;;;44134:8;44144:26;44161:8;44144:16;:26::i;:::-;44117:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44086:86;;;;44057:181;44212:14;44205:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43904:341;;;;:::o;39882:31::-;;;;:::o;39804:34::-;;;;:::o;39732:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40487:324::-;40540:4;40556:10;40577:9;40614:13;:25;40628:10;40614:25;;;;;;;;;;;;;;;;40589:22;;:50;;;;:::i;:::-;40577:62;;40666:4;40654:8;:16;40650:131;;40722:4;40711:8;:15;;;;:::i;:::-;40696:10;;40695:32;;;;:::i;:::-;40687:40;;40650:131;;;40768:1;40760:9;;40650:131;40798:5;40791:12;;;;40487:324;;;:::o;42452:97::-;42496:13;42529:12;42522:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42452:97;:::o;24052:164::-;24149:4;24173:18;:25;24192:5;24173:25;;;;;;;;;;;;;;;:35;24199:8;24173:35;;;;;;;;;;;;;;;;;;;;;;;;;24166:42;;24052:164;;;;:::o;5954:214::-;5552:13;:11;:13::i;:::-;6063:1:::1;6043:22;;:8;:22;;::::0;6035:86:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6132:28;6151:8;6132:18;:28::i;:::-;5954:214:::0;:::o;43017:107::-;5552:13;:11;:13::i;:::-;43112:4:::1;43092:17;:24;;;;43017:107:::0;:::o;42791:100::-;5552:13;:11;:13::i;:::-;42874:9:::1;42861:10;:22;;;;42791:100:::0;:::o;24224:308::-;24289:4;24345:7;24326:15;:13;:15::i;:::-;:26;;:66;;;;;24379:13;;24369:7;:23;24326:66;:166;;;;;24491:1;16566:8;24443:17;:26;24461:7;24443:26;;;;;;;;;;;;:44;:49;24326:166;24306:186;;24224:308;;;:::o;34730:105::-;34790:7;34817:10;34810:17;;34730:105;:::o;17708:92::-;17764:7;17708:92;:::o;25345:1651::-;25487:27;25517;25536:7;25517:18;:27::i;:::-;25487:57;;25602:4;25561:45;;25577:19;25561:45;;;25557:86;;25615:28;;;;;;;;;;;;;;25557:86;25657:27;25686:23;25713:35;25740:7;25713:26;:35::i;:::-;25656:92;;;;25766:68;25791:15;25808:4;25814:19;:17;:19::i;:::-;25766:24;:68::i;:::-;25761:180;;25854:43;25871:4;25877:19;:17;:19::i;:::-;25854:16;:43::i;:::-;25849:92;;25906:35;;;;;;;;;;;;;;25849:92;25761:180;25972:1;25958:16;;:2;:16;;;25954:52;;25983:23;;;;;;;;;;;;;;25954:52;26019:43;26041:4;26047:2;26051:7;26060:1;26019:21;:43::i;:::-;26102:15;26099:85;;;26167:1;26146:19;26139:30;26099:85;26236:18;:24;26255:4;26236:24;;;;;;;;;;;;;;;;26234:26;;;;;;;;;;;;26278:18;:22;26297:2;26278:22;;;;;;;;;;;;;;;;26276:24;;;;;;;;;;;26347:146;26384:2;26433:45;26448:4;26454:2;26458:19;26433:14;:45::i;:::-;16700:8;26405:73;26347:18;:146::i;:::-;26318:17;:26;26336:7;26318:26;;;;;;;;;;;:175;;;;26565:1;16700:8;26514:19;:47;:52;26510:370;;26587:19;26619:1;26609:7;:11;26587:33;;26679:1;26645:17;:30;26663:11;26645:30;;;;;;;;;;;;:35;26641:224;;26726:13;;26711:11;:28;26707:139;;26803:19;26770:17;:30;26788:11;26770:30;;;;;;;;;;;:52;;;;26707:139;26641:224;26568:312;26510:370;26927:7;26923:2;26908:27;;26917:4;26908:27;;;;;;;;;;;;26946:42;26967:4;26973:2;26977:7;26986:1;26946:20;:42::i;:::-;25476:1520;;;25345:1651;;;:::o;5688:145::-;5763:12;:10;:12::i;:::-;5752:23;;:7;:5;:7::i;:::-;:23;;;5744:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;5688:145::o;27004:193::-;27150:39;27167:4;27173:2;27177:7;27150:39;;;;;;;;;;;;:16;:39::i;:::-;27004:193;;;:::o;32100:1679::-;32180:27;32210;32229:7;32210:18;:27::i;:::-;32180:57;;32250:12;32281:19;32250:52;;32316:27;32345:23;32372:35;32399:7;32372:26;:35::i;:::-;32315:92;;;;32424:13;32420:244;;;32473:68;32498:15;32515:4;32521:19;:17;:19::i;:::-;32473:24;:68::i;:::-;32468:184;;32565:43;32582:4;32588:19;:17;:19::i;:::-;32565:16;:43::i;:::-;32560:92;;32617:35;;;;;;;;;;;;;;32560:92;32468:184;32420:244;32676:51;32698:4;32712:1;32716:7;32725:1;32676:21;:51::i;:::-;32767:15;32764:101;;;32848:1;32827:19;32820:30;32764:101;32974:1;16323:3;32944:1;:26;;32943:32;32915:18;:24;32934:4;32915:24;;;;;;;;;;;;;;;;:60;;;;;;;;;;;33021:176;33058:4;33129:53;33144:4;33158:1;33162:19;33129:14;:53::i;:::-;16700:8;16566;33082:43;33081:101;33021:18;:176::i;:::-;32992:17;:26;33010:7;32992:26;;;;;;;;;;;:205;;;;33269:1;16700:8;33218:19;:47;:52;33214:370;;33291:19;33323:1;33313:7;:11;33291:33;;33383:1;33349:17;:30;33367:11;33349:30;;;;;;;;;;;;:35;33345:224;;33430:13;;33415:11;:28;33411:139;;33507:19;33474:17;:30;33492:11;33474:30;;;;;;;;;;;:52;;;;33411:139;33345:224;33272:312;33214:370;33639:7;33635:1;33612:35;;33621:4;33612:35;;;;;;;;;;;;33658:50;33679:4;33693:1;33697:7;33706:1;33658:20;:50::i;:::-;33746:12;;:14;;;;;;;;;;;;;32169:1610;;;;32100:1679;;:::o;21263:633::-;21330:7;21350:12;21365:7;21350:22;;21433:4;21414:15;:13;:15::i;:::-;:23;21410:419;;21467:13;;21460:4;:20;21456:373;;;21505:14;21522:17;:23;21540:4;21522:23;;;;;;;;;;;;21505:40;;21602:1;16566:8;21574:6;:24;:29;21570:240;;21634:113;21651:1;21641:6;:11;21634:113;;21694:17;:25;21712:6;;;;;;;21694:25;;;;;;;;;;;;21685:34;;21634:113;;;21780:6;21773:13;;;;;;21570:240;21482:347;21456:373;21410:419;21857:31;;;;;;;;;;;;;;21263:633;;;;:::o;6176:191::-;6250:16;6269:6;;;;;;;;;;;6250:25;;6295:8;6286:6;;:17;;;;;;;;;;;;;;;;;;6350:8;6319:40;;6340:8;6319:40;;;;;;;;;;;;6239:128;6176:191;:::o;31883:112::-;31960:27;31970:2;31974:8;31960:27;;;;;;;;;;;;:9;:27::i;:::-;31883:112;;:::o;27205:407::-;27380:31;27393:4;27399:2;27403:7;27380:12;:31::i;:::-;27444:1;27426:2;:14;;;:19;27422:183;;27465:56;27496:4;27502:2;27506:7;27515:5;27465:30;:56::i;:::-;27460:145;;27549:40;;;;;;;;;;;;;;27460:145;27422:183;27205:407;;;;:::o;7018:534::-;7074:13;7115:1;7106:5;:10;7102:53;;7133:10;;;;;;;;;;;;;;;;;;;;;7102:53;7165:12;7180:5;7165:20;;7196:14;7221:78;7236:1;7228:4;:9;7221:78;;7254:8;;;;;:::i;:::-;;;;7285:2;7277:10;;;;;:::i;:::-;;;7221:78;;;7309:19;7341:6;7331:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7309:39;;7359:154;7375:1;7366:5;:10;7359:154;;7403:1;7393:11;;;;;:::i;:::-;;;7470:2;7462:5;:10;;;;:::i;:::-;7449:2;:24;;;;:::i;:::-;7436:39;;7419:6;7426;7419:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;7499:2;7490:11;;;;;:::i;:::-;;;7359:154;;;7537:6;7523:21;;;;;7018:534;;;;:::o;24945:392::-;25047:27;25076:23;25117:38;25158:15;:24;25174:7;25158:24;;;;;;;;;;;25117:65;;25242:18;25219:41;;25299:19;25293:26;25274:45;;25204:126;24945:392;;;:::o;24540:397::-;24689:11;24759:16;24752:5;24748:28;24739:37;;24820:16;24809:9;24805:32;24792:45;;24902:15;24891:9;24888:30;24880:5;24869:9;24866:20;24863:56;24853:66;;24540:397;;;;;:::o;27620:159::-;;;;;:::o;34411:311::-;34546:7;34566:16;16763:3;34592:19;:41;;34566:68;;16763:3;34660:31;34671:4;34677:2;34681:9;34660:10;:31::i;:::-;34652:40;;:62;;34645:69;;;34411:311;;;;;:::o;22278:450::-;22358:14;22526:16;22519:5;22515:28;22506:37;;22703:5;22689:11;22664:23;22660:41;22657:52;22650:5;22647:63;22637:73;;22278:450;;;;:::o;27787:158::-;;;;;:::o;5041:98::-;5094:7;5121:10;5114:17;;5041:98;:::o;31186:689::-;31317:19;31323:2;31327:8;31317:5;:19::i;:::-;31396:1;31378:2;:14;;;:19;31374:483;;31418:11;31432:13;;31418:27;;31464:13;31486:8;31480:3;:14;31464:30;;31513:233;31544:62;31583:1;31587:2;31591:7;;;;;;31600:5;31544:30;:62::i;:::-;31539:167;;31642:40;;;;;;;;;;;;;;31539:167;31741:3;31733:5;:11;31513:233;;31828:3;31811:13;;:20;31807:34;;31833:8;;;31807:34;31399:458;;31374:483;31186:689;;;:::o;27953:716::-;28116:4;28162:2;28137:45;;;28183:19;:17;:19::i;:::-;28204:4;28210:7;28219:5;28137:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;28133:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28437:1;28420:6;:13;:18;28416:235;;28466:40;;;;;;;;;;;;;;28416:235;28609:6;28603:13;28594:6;28590:2;28586:15;28579:38;28133:529;28306:54;;;28296:64;;;:6;:64;;;;28289:71;;;27953:716;;;;;;:::o;34256:147::-;34393:6;34256:147;;;;;:::o;28677:1442::-;28750:20;28773:13;;28750:36;;28813:1;28801:8;:13;28797:44;;28823:18;;;;;;;;;;;;;;28797:44;28854:61;28884:1;28888:2;28892:12;28906:8;28854:21;:61::i;:::-;29024:1;16263:2;28994:1;:26;;28993:32;28981:8;:45;28955:18;:22;28974:2;28955:22;;;;;;;;;;;;;;;;:71;;;;;;;;;;;29077:139;29114:2;29168:33;29191:1;29195:2;29199:1;29168:14;:33::i;:::-;29135:30;29156:8;29135:20;:30::i;:::-;:66;29077:18;:139::i;:::-;29043:17;:31;29061:12;29043:31;;;;;;;;;;;:173;;;;29233:16;29264:11;29293:8;29278:12;:23;29264:37;;29368:16;29364:2;29360:25;29348:37;;29588:12;29556:8;29531:1;29482:25;29457:1;29432;29405:215;29700:1;29686:12;29682:20;29640:279;29741:3;29732:7;29729:16;29640:279;;29892:7;29882:8;29879:1;29852:25;29849:1;29846;29841:59;29794:1;29785:7;29781:15;29770:26;;29640:279;;;29644:77;29964:1;29952:8;:13;29948:45;;29974:19;;;;;;;;;;;;;;29948:45;30026:3;30010:13;:19;;;;28928:1113;;30051:60;30080:1;30084:2;30088:12;30102:8;30051:20;:60::i;:::-;28739:1380;28677:1442;;:::o;22736:324::-;22806:14;23039:1;23029:8;23026:15;23000:24;22996:46;22986:56;;22736:324;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:75::-;467:6;500:2;494:9;484:19;;434:75;:::o;515:117::-;624:1;621;614:12;638:117;747:1;744;737:12;761:149;797:7;837:66;830:5;826:78;815:89;;761:149;;;:::o;916:120::-;988:23;1005:5;988:23;:::i;:::-;981:5;978:34;968:62;;1026:1;1023;1016:12;968:62;916:120;:::o;1042:137::-;1087:5;1125:6;1112:20;1103:29;;1141:32;1167:5;1141:32;:::i;:::-;1042:137;;;;:::o;1185:327::-;1243:6;1292:2;1280:9;1271:7;1267:23;1263:32;1260:119;;;1298:79;;:::i;:::-;1260:119;1418:1;1443:52;1487:7;1478:6;1467:9;1463:22;1443:52;:::i;:::-;1433:62;;1389:116;1185:327;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:329::-;5301:6;5350:2;5338:9;5329:7;5325:23;5321:32;5318:119;;;5356:79;;:::i;:::-;5318:119;5476:1;5501:53;5546:7;5537:6;5526:9;5522:22;5501:53;:::i;:::-;5491:63;;5447:117;5242:329;;;;:::o;5577:619::-;5654:6;5662;5670;5719:2;5707:9;5698:7;5694:23;5690:32;5687:119;;;5725:79;;:::i;:::-;5687:119;5845:1;5870:53;5915:7;5906:6;5895:9;5891:22;5870:53;:::i;:::-;5860:63;;5816:117;5972:2;5998:53;6043:7;6034:6;6023:9;6019:22;5998:53;:::i;:::-;5988:63;;5943:118;6100:2;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6071:118;5577:619;;;;;:::o;6202:117::-;6311:1;6308;6301:12;6325:117;6434:1;6431;6424:12;6448:180;6496:77;6493:1;6486:88;6593:4;6590:1;6583:15;6617:4;6614:1;6607:15;6634:281;6717:27;6739:4;6717:27;:::i;:::-;6709:6;6705:40;6847:6;6835:10;6832:22;6811:18;6799:10;6796:34;6793:62;6790:88;;;6858:18;;:::i;:::-;6790:88;6898:10;6894:2;6887:22;6677:238;6634:281;;:::o;6921:129::-;6955:6;6982:20;;:::i;:::-;6972:30;;7011:33;7039:4;7031:6;7011:33;:::i;:::-;6921:129;;;:::o;7056:308::-;7118:4;7208:18;7200:6;7197:30;7194:56;;;7230:18;;:::i;:::-;7194:56;7268:29;7290:6;7268:29;:::i;:::-;7260:37;;7352:4;7346;7342:15;7334:23;;7056:308;;;:::o;7370:146::-;7467:6;7462:3;7457;7444:30;7508:1;7499:6;7494:3;7490:16;7483:27;7370:146;;;:::o;7522:425::-;7600:5;7625:66;7641:49;7683:6;7641:49;:::i;:::-;7625:66;:::i;:::-;7616:75;;7714:6;7707:5;7700:21;7752:4;7745:5;7741:16;7790:3;7781:6;7776:3;7772:16;7769:25;7766:112;;;7797:79;;:::i;:::-;7766:112;7887:54;7934:6;7929:3;7924;7887:54;:::i;:::-;7606:341;7522:425;;;;;:::o;7967:340::-;8023:5;8072:3;8065:4;8057:6;8053:17;8049:27;8039:122;;8080:79;;:::i;:::-;8039:122;8197:6;8184:20;8222:79;8297:3;8289:6;8282:4;8274:6;8270:17;8222:79;:::i;:::-;8213:88;;8029:278;7967:340;;;;:::o;8313:509::-;8382:6;8431:2;8419:9;8410:7;8406:23;8402:32;8399:119;;;8437:79;;:::i;:::-;8399:119;8585:1;8574:9;8570:17;8557:31;8615:18;8607:6;8604:30;8601:117;;;8637:79;;:::i;:::-;8601:117;8742:63;8797:7;8788:6;8777:9;8773:22;8742:63;:::i;:::-;8732:73;;8528:287;8313:509;;;;:::o;8828:116::-;8898:21;8913:5;8898:21;:::i;:::-;8891:5;8888:32;8878:60;;8934:1;8931;8924:12;8878:60;8828:116;:::o;8950:133::-;8993:5;9031:6;9018:20;9009:29;;9047:30;9071:5;9047:30;:::i;:::-;8950:133;;;;:::o;9089:648::-;9164:6;9172;9221:2;9209:9;9200:7;9196:23;9192:32;9189:119;;;9227:79;;:::i;:::-;9189:119;9347:1;9372:50;9414:7;9405:6;9394:9;9390:22;9372:50;:::i;:::-;9362:60;;9318:114;9499:2;9488:9;9484:18;9471:32;9530:18;9522:6;9519:30;9516:117;;;9552:79;;:::i;:::-;9516:117;9657:63;9712:7;9703:6;9692:9;9688:22;9657:63;:::i;:::-;9647:73;;9442:288;9089:648;;;;;:::o;9743:474::-;9811:6;9819;9868:2;9856:9;9847:7;9843:23;9839:32;9836:119;;;9874:79;;:::i;:::-;9836:119;9994:1;10019:53;10064:7;10055:6;10044:9;10040:22;10019:53;:::i;:::-;10009:63;;9965:117;10121:2;10147:53;10192:7;10183:6;10172:9;10168:22;10147:53;:::i;:::-;10137:63;;10092:118;9743:474;;;;;:::o;10223:468::-;10288:6;10296;10345:2;10333:9;10324:7;10320:23;10316:32;10313:119;;;10351:79;;:::i;:::-;10313:119;10471:1;10496:53;10541:7;10532:6;10521:9;10517:22;10496:53;:::i;:::-;10486:63;;10442:117;10598:2;10624:50;10666:7;10657:6;10646:9;10642:22;10624:50;:::i;:::-;10614:60;;10569:115;10223:468;;;;;:::o;10697:307::-;10758:4;10848:18;10840:6;10837:30;10834:56;;;10870:18;;:::i;:::-;10834:56;10908:29;10930:6;10908:29;:::i;:::-;10900:37;;10992:4;10986;10982:15;10974:23;;10697:307;;;:::o;11010:423::-;11087:5;11112:65;11128:48;11169:6;11128:48;:::i;:::-;11112:65;:::i;:::-;11103:74;;11200:6;11193:5;11186:21;11238:4;11231:5;11227:16;11276:3;11267:6;11262:3;11258:16;11255:25;11252:112;;;11283:79;;:::i;:::-;11252:112;11373:54;11420:6;11415:3;11410;11373:54;:::i;:::-;11093:340;11010:423;;;;;:::o;11452:338::-;11507:5;11556:3;11549:4;11541:6;11537:17;11533:27;11523:122;;11564:79;;:::i;:::-;11523:122;11681:6;11668:20;11706:78;11780:3;11772:6;11765:4;11757:6;11753:17;11706:78;:::i;:::-;11697:87;;11513:277;11452:338;;;;:::o;11796:943::-;11891:6;11899;11907;11915;11964:3;11952:9;11943:7;11939:23;11935:33;11932:120;;;11971:79;;:::i;:::-;11932:120;12091:1;12116:53;12161:7;12152:6;12141:9;12137:22;12116:53;:::i;:::-;12106:63;;12062:117;12218:2;12244:53;12289:7;12280:6;12269:9;12265:22;12244:53;:::i;:::-;12234:63;;12189:118;12346:2;12372:53;12417:7;12408:6;12397:9;12393:22;12372:53;:::i;:::-;12362:63;;12317:118;12502:2;12491:9;12487:18;12474:32;12533:18;12525:6;12522:30;12519:117;;;12555:79;;:::i;:::-;12519:117;12660:62;12714:7;12705:6;12694:9;12690:22;12660:62;:::i;:::-;12650:72;;12445:287;11796:943;;;;;;;:::o;12745:474::-;12813:6;12821;12870:2;12858:9;12849:7;12845:23;12841:32;12838:119;;;12876:79;;:::i;:::-;12838:119;12996:1;13021:53;13066:7;13057:6;13046:9;13042:22;13021:53;:::i;:::-;13011:63;;12967:117;13123:2;13149:53;13194:7;13185:6;13174:9;13170:22;13149:53;:::i;:::-;13139:63;;13094:118;12745:474;;;;;:::o;13225:180::-;13273:77;13270:1;13263:88;13370:4;13367:1;13360:15;13394:4;13391:1;13384:15;13411:320;13455:6;13492:1;13486:4;13482:12;13472:22;;13539:1;13533:4;13529:12;13560:18;13550:81;;13616:4;13608:6;13604:17;13594:27;;13550:81;13678:2;13670:6;13667:14;13647:18;13644:38;13641:84;;13697:18;;:::i;:::-;13641:84;13462:269;13411:320;;;:::o;13737:332::-;13858:4;13896:2;13885:9;13881:18;13873:26;;13909:71;13977:1;13966:9;13962:17;13953:6;13909:71;:::i;:::-;13990:72;14058:2;14047:9;14043:18;14034:6;13990:72;:::i;:::-;13737:332;;;;;:::o;14075:137::-;14129:5;14160:6;14154:13;14145:22;;14176:30;14200:5;14176:30;:::i;:::-;14075:137;;;;:::o;14218:345::-;14285:6;14334:2;14322:9;14313:7;14309:23;14305:32;14302:119;;;14340:79;;:::i;:::-;14302:119;14460:1;14485:61;14538:7;14529:6;14518:9;14514:22;14485:61;:::i;:::-;14475:71;;14431:125;14218:345;;;;:::o;14569:233::-;14709:34;14705:1;14697:6;14693:14;14686:58;14778:16;14773:2;14765:6;14761:15;14754:41;14569:233;:::o;14808:366::-;14950:3;14971:67;15035:2;15030:3;14971:67;:::i;:::-;14964:74;;15047:93;15136:3;15047:93;:::i;:::-;15165:2;15160:3;15156:12;15149:19;;14808:366;;;:::o;15180:419::-;15346:4;15384:2;15373:9;15369:18;15361:26;;15433:9;15427:4;15423:20;15419:1;15408:9;15404:17;15397:47;15461:131;15587:4;15461:131;:::i;:::-;15453:139;;15180:419;;;:::o;15605:147::-;15706:11;15743:3;15728:18;;15605:147;;;;:::o;15758:114::-;;:::o;15878:398::-;16037:3;16058:83;16139:1;16134:3;16058:83;:::i;:::-;16051:90;;16150:93;16239:3;16150:93;:::i;:::-;16268:1;16263:3;16259:11;16252:18;;15878:398;;;:::o;16282:379::-;16466:3;16488:147;16631:3;16488:147;:::i;:::-;16481:154;;16652:3;16645:10;;16282:379;;;:::o;16667:166::-;16807:18;16803:1;16795:6;16791:14;16784:42;16667:166;:::o;16839:366::-;16981:3;17002:67;17066:2;17061:3;17002:67;:::i;:::-;16995:74;;17078:93;17167:3;17078:93;:::i;:::-;17196:2;17191:3;17187:12;17180:19;;16839:366;;;:::o;17211:419::-;17377:4;17415:2;17404:9;17400:18;17392:26;;17464:9;17458:4;17454:20;17450:1;17439:9;17435:17;17428:47;17492:131;17618:4;17492:131;:::i;:::-;17484:139;;17211:419;;;:::o;17636:141::-;17685:4;17708:3;17700:11;;17731:3;17728:1;17721:14;17765:4;17762:1;17752:18;17744:26;;17636:141;;;:::o;17783:93::-;17820:6;17867:2;17862;17855:5;17851:14;17847:23;17837:33;;17783:93;;;:::o;17882:107::-;17926:8;17976:5;17970:4;17966:16;17945:37;;17882:107;;;;:::o;17995:393::-;18064:6;18114:1;18102:10;18098:18;18137:97;18167:66;18156:9;18137:97;:::i;:::-;18255:39;18285:8;18274:9;18255:39;:::i;:::-;18243:51;;18327:4;18323:9;18316:5;18312:21;18303:30;;18376:4;18366:8;18362:19;18355:5;18352:30;18342:40;;18071:317;;17995:393;;;;;:::o;18394:60::-;18422:3;18443:5;18436:12;;18394:60;;;:::o;18460:142::-;18510:9;18543:53;18561:34;18570:24;18588:5;18570:24;:::i;:::-;18561:34;:::i;:::-;18543:53;:::i;:::-;18530:66;;18460:142;;;:::o;18608:75::-;18651:3;18672:5;18665:12;;18608:75;;;:::o;18689:269::-;18799:39;18830:7;18799:39;:::i;:::-;18860:91;18909:41;18933:16;18909:41;:::i;:::-;18901:6;18894:4;18888:11;18860:91;:::i;:::-;18854:4;18847:105;18765:193;18689:269;;;:::o;18964:73::-;19009:3;18964:73;:::o;19043:189::-;19120:32;;:::i;:::-;19161:65;19219:6;19211;19205:4;19161:65;:::i;:::-;19096:136;19043:189;;:::o;19238:186::-;19298:120;19315:3;19308:5;19305:14;19298:120;;;19369:39;19406:1;19399:5;19369:39;:::i;:::-;19342:1;19335:5;19331:13;19322:22;;19298:120;;;19238:186;;:::o;19430:543::-;19531:2;19526:3;19523:11;19520:446;;;19565:38;19597:5;19565:38;:::i;:::-;19649:29;19667:10;19649:29;:::i;:::-;19639:8;19635:44;19832:2;19820:10;19817:18;19814:49;;;19853:8;19838:23;;19814:49;19876:80;19932:22;19950:3;19932:22;:::i;:::-;19922:8;19918:37;19905:11;19876:80;:::i;:::-;19535:431;;19520:446;19430:543;;;:::o;19979:117::-;20033:8;20083:5;20077:4;20073:16;20052:37;;19979:117;;;;:::o;20102:169::-;20146:6;20179:51;20227:1;20223:6;20215:5;20212:1;20208:13;20179:51;:::i;:::-;20175:56;20260:4;20254;20250:15;20240:25;;20153:118;20102:169;;;;:::o;20276:295::-;20352:4;20498:29;20523:3;20517:4;20498:29;:::i;:::-;20490:37;;20560:3;20557:1;20553:11;20547:4;20544:21;20536:29;;20276:295;;;;:::o;20576:1395::-;20693:37;20726:3;20693:37;:::i;:::-;20795:18;20787:6;20784:30;20781:56;;;20817:18;;:::i;:::-;20781:56;20861:38;20893:4;20887:11;20861:38;:::i;:::-;20946:67;21006:6;20998;20992:4;20946:67;:::i;:::-;21040:1;21064:4;21051:17;;21096:2;21088:6;21085:14;21113:1;21108:618;;;;21770:1;21787:6;21784:77;;;21836:9;21831:3;21827:19;21821:26;21812:35;;21784:77;21887:67;21947:6;21940:5;21887:67;:::i;:::-;21881:4;21874:81;21743:222;21078:887;;21108:618;21160:4;21156:9;21148:6;21144:22;21194:37;21226:4;21194:37;:::i;:::-;21253:1;21267:208;21281:7;21278:1;21275:14;21267:208;;;21360:9;21355:3;21351:19;21345:26;21337:6;21330:42;21411:1;21403:6;21399:14;21389:24;;21458:2;21447:9;21443:18;21430:31;;21304:4;21301:1;21297:12;21292:17;;21267:208;;;21503:6;21494:7;21491:19;21488:179;;;21561:9;21556:3;21552:19;21546:26;21604:48;21646:4;21638:6;21634:17;21623:9;21604:48;:::i;:::-;21596:6;21589:64;21511:156;21488:179;21713:1;21709;21701:6;21697:14;21693:22;21687:4;21680:36;21115:611;;;21078:887;;20668:1303;;;20576:1395;;:::o;21977:180::-;22025:77;22022:1;22015:88;22122:4;22119:1;22112:15;22146:4;22143:1;22136:15;22163:191;22203:3;22222:20;22240:1;22222:20;:::i;:::-;22217:25;;22256:20;22274:1;22256:20;:::i;:::-;22251:25;;22299:1;22296;22292:9;22285:16;;22320:3;22317:1;22314:10;22311:36;;;22327:18;;:::i;:::-;22311:36;22163:191;;;;:::o;22360:173::-;22500:25;22496:1;22488:6;22484:14;22477:49;22360:173;:::o;22539:366::-;22681:3;22702:67;22766:2;22761:3;22702:67;:::i;:::-;22695:74;;22778:93;22867:3;22778:93;:::i;:::-;22896:2;22891:3;22887:12;22880:19;;22539:366;;;:::o;22911:419::-;23077:4;23115:2;23104:9;23100:18;23092:26;;23164:9;23158:4;23154:20;23150:1;23139:9;23135:17;23128:47;23192:131;23318:4;23192:131;:::i;:::-;23184:139;;22911:419;;;:::o;23336:230::-;23476:34;23472:1;23464:6;23460:14;23453:58;23545:13;23540:2;23532:6;23528:15;23521:38;23336:230;:::o;23572:366::-;23714:3;23735:67;23799:2;23794:3;23735:67;:::i;:::-;23728:74;;23811:93;23900:3;23811:93;:::i;:::-;23929:2;23924:3;23920:12;23913:19;;23572:366;;;:::o;23944:419::-;24110:4;24148:2;24137:9;24133:18;24125:26;;24197:9;24191:4;24187:20;24183:1;24172:9;24168:17;24161:47;24225:131;24351:4;24225:131;:::i;:::-;24217:139;;23944:419;;;:::o;24369:194::-;24409:4;24429:20;24447:1;24429:20;:::i;:::-;24424:25;;24463:20;24481:1;24463:20;:::i;:::-;24458:25;;24507:1;24504;24500:9;24492:17;;24531:1;24525:4;24522:11;24519:37;;;24536:18;;:::i;:::-;24519:37;24369:194;;;;:::o;24569:410::-;24609:7;24632:20;24650:1;24632:20;:::i;:::-;24627:25;;24666:20;24684:1;24666:20;:::i;:::-;24661:25;;24721:1;24718;24714:9;24743:30;24761:11;24743:30;:::i;:::-;24732:41;;24922:1;24913:7;24909:15;24906:1;24903:22;24883:1;24876:9;24856:83;24833:139;;24952:18;;:::i;:::-;24833:139;24617:362;24569:410;;;;:::o;24985:170::-;25125:22;25121:1;25113:6;25109:14;25102:46;24985:170;:::o;25161:366::-;25303:3;25324:67;25388:2;25383:3;25324:67;:::i;:::-;25317:74;;25400:93;25489:3;25400:93;:::i;:::-;25518:2;25513:3;25509:12;25502:19;;25161:366;;;:::o;25533:419::-;25699:4;25737:2;25726:9;25722:18;25714:26;;25786:9;25780:4;25776:20;25772:1;25761:9;25757:17;25750:47;25814:131;25940:4;25814:131;:::i;:::-;25806:139;;25533:419;;;:::o;25958:182::-;26098:34;26094:1;26086:6;26082:14;26075:58;25958:182;:::o;26146:366::-;26288:3;26309:67;26373:2;26368:3;26309:67;:::i;:::-;26302:74;;26385:93;26474:3;26385:93;:::i;:::-;26503:2;26498:3;26494:12;26487:19;;26146:366;;;:::o;26518:419::-;26684:4;26722:2;26711:9;26707:18;26699:26;;26771:9;26765:4;26761:20;26757:1;26746:9;26742:17;26735:47;26799:131;26925:4;26799:131;:::i;:::-;26791:139;;26518:419;;;:::o;26943:235::-;27083:34;27079:1;27071:6;27067:14;27060:58;27152:18;27147:2;27139:6;27135:15;27128:43;26943:235;:::o;27184:366::-;27326:3;27347:67;27411:2;27406:3;27347:67;:::i;:::-;27340:74;;27423:93;27512:3;27423:93;:::i;:::-;27541:2;27536:3;27532:12;27525:19;;27184:366;;;:::o;27556:419::-;27722:4;27760:2;27749:9;27745:18;27737:26;;27809:9;27803:4;27799:20;27795:1;27784:9;27780:17;27773:47;27837:131;27963:4;27837:131;:::i;:::-;27829:139;;27556:419;;;:::o;27981:296::-;28121:34;28117:1;28109:6;28105:14;28098:58;28190:34;28185:2;28177:6;28173:15;28166:59;28259:10;28254:2;28246:6;28242:15;28235:35;27981:296;:::o;28283:366::-;28425:3;28446:67;28510:2;28505:3;28446:67;:::i;:::-;28439:74;;28522:93;28611:3;28522:93;:::i;:::-;28640:2;28635:3;28631:12;28624:19;;28283:366;;;:::o;28655:419::-;28821:4;28859:2;28848:9;28844:18;28836:26;;28908:9;28902:4;28898:20;28894:1;28883:9;28879:17;28872:47;28936:131;29062:4;28936:131;:::i;:::-;28928:139;;28655:419;;;:::o;29080:182::-;29220:34;29216:1;29208:6;29204:14;29197:58;29080:182;:::o;29268:366::-;29410:3;29431:67;29495:2;29490:3;29431:67;:::i;:::-;29424:74;;29507:93;29596:3;29507:93;:::i;:::-;29625:2;29620:3;29616:12;29609:19;;29268:366;;;:::o;29640:419::-;29806:4;29844:2;29833:9;29829:18;29821:26;;29893:9;29887:4;29883:20;29879:1;29868:9;29864:17;29857:47;29921:131;30047:4;29921:131;:::i;:::-;29913:139;;29640:419;;;:::o;30065:148::-;30167:11;30204:3;30189:18;;30065:148;;;;:::o;30243:874::-;30346:3;30383:5;30377:12;30412:36;30438:9;30412:36;:::i;:::-;30464:89;30546:6;30541:3;30464:89;:::i;:::-;30457:96;;30584:1;30573:9;30569:17;30600:1;30595:166;;;;30775:1;30770:341;;;;30562:549;;30595:166;30679:4;30675:9;30664;30660:25;30655:3;30648:38;30741:6;30734:14;30727:22;30719:6;30715:35;30710:3;30706:45;30699:52;;30595:166;;30770:341;30837:38;30869:5;30837:38;:::i;:::-;30897:1;30911:154;30925:6;30922:1;30919:13;30911:154;;;30999:7;30993:14;30989:1;30984:3;30980:11;30973:35;31049:1;31040:7;31036:15;31025:26;;30947:4;30944:1;30940:12;30935:17;;30911:154;;;31094:6;31089:3;31085:16;31078:23;;30777:334;;30562:549;;30350:767;;30243:874;;;;:::o;31123:390::-;31229:3;31257:39;31290:5;31257:39;:::i;:::-;31312:89;31394:6;31389:3;31312:89;:::i;:::-;31305:96;;31410:65;31468:6;31463:3;31456:4;31449:5;31445:16;31410:65;:::i;:::-;31500:6;31495:3;31491:16;31484:23;;31233:280;31123:390;;;;:::o;31519:429::-;31696:3;31718:92;31806:3;31797:6;31718:92;:::i;:::-;31711:99;;31827:95;31918:3;31909:6;31827:95;:::i;:::-;31820:102;;31939:3;31932:10;;31519:429;;;;;:::o;31954:238::-;32094:34;32090:1;32082:6;32078:14;32071:58;32163:21;32158:2;32150:6;32146:15;32139:46;31954:238;:::o;32198:366::-;32340:3;32361:67;32425:2;32420:3;32361:67;:::i;:::-;32354:74;;32437:93;32526:3;32437:93;:::i;:::-;32555:2;32550:3;32546:12;32539:19;;32198:366;;;:::o;32570:419::-;32736:4;32774:2;32763:9;32759:18;32751:26;;32823:9;32817:4;32813:20;32809:1;32798:9;32794:17;32787:47;32851:131;32977:4;32851:131;:::i;:::-;32843:139;;32570:419;;;:::o;32995:232::-;33135:34;33131:1;33123:6;33119:14;33112:58;33204:15;33199:2;33191:6;33187:15;33180:40;32995:232;:::o;33233:366::-;33375:3;33396:67;33460:2;33455:3;33396:67;:::i;:::-;33389:74;;33472:93;33561:3;33472:93;:::i;:::-;33590:2;33585:3;33581:12;33574:19;;33233:366;;;:::o;33605:419::-;33771:4;33809:2;33798:9;33794:18;33786:26;;33858:9;33852:4;33848:20;33844:1;33833:9;33829:17;33822:47;33886:131;34012:4;33886:131;:::i;:::-;33878:139;;33605:419;;;:::o;34030:233::-;34069:3;34092:24;34110:5;34092:24;:::i;:::-;34083:33;;34138:66;34131:5;34128:77;34125:103;;34208:18;;:::i;:::-;34125:103;34255:1;34248:5;34244:13;34237:20;;34030:233;;;:::o;34269:180::-;34317:77;34314:1;34307:88;34414:4;34411:1;34404:15;34438:4;34435:1;34428:15;34455:185;34495:1;34512:20;34530:1;34512:20;:::i;:::-;34507:25;;34546:20;34564:1;34546:20;:::i;:::-;34541:25;;34585:1;34575:35;;34590:18;;:::i;:::-;34575:35;34632:1;34629;34625:9;34620:14;;34455:185;;;;:::o;34646:176::-;34678:1;34695:20;34713:1;34695:20;:::i;:::-;34690:25;;34729:20;34747:1;34729:20;:::i;:::-;34724:25;;34768:1;34758:35;;34773:18;;:::i;:::-;34758:35;34814:1;34811;34807:9;34802:14;;34646:176;;;;:::o;34828:180::-;34876:77;34873:1;34866:88;34973:4;34970:1;34963:15;34997:4;34994:1;34987:15;35014:98;35065:6;35099:5;35093:12;35083:22;;35014:98;;;:::o;35118:168::-;35201:11;35235:6;35230:3;35223:19;35275:4;35270:3;35266:14;35251:29;;35118:168;;;;:::o;35292:373::-;35378:3;35406:38;35438:5;35406:38;:::i;:::-;35460:70;35523:6;35518:3;35460:70;:::i;:::-;35453:77;;35539:65;35597:6;35592:3;35585:4;35578:5;35574:16;35539:65;:::i;:::-;35629:29;35651:6;35629:29;:::i;:::-;35624:3;35620:39;35613:46;;35382:283;35292:373;;;;:::o;35671:640::-;35866:4;35904:3;35893:9;35889:19;35881:27;;35918:71;35986:1;35975:9;35971:17;35962:6;35918:71;:::i;:::-;35999:72;36067:2;36056:9;36052:18;36043:6;35999:72;:::i;:::-;36081;36149:2;36138:9;36134:18;36125:6;36081:72;:::i;:::-;36200:9;36194:4;36190:20;36185:2;36174:9;36170:18;36163:48;36228:76;36299:4;36290:6;36228:76;:::i;:::-;36220:84;;35671:640;;;;;;;:::o;36317:141::-;36373:5;36404:6;36398:13;36389:22;;36420:32;36446:5;36420:32;:::i;:::-;36317:141;;;;:::o;36464:349::-;36533:6;36582:2;36570:9;36561:7;36557:23;36553:32;36550:119;;;36588:79;;:::i;:::-;36550:119;36708:1;36733:63;36788:7;36779:6;36768:9;36764:22;36733:63;:::i;:::-;36723:73;;36679:127;36464:349;;;;:::o

Swarm Source

ipfs://28b3ff8e18eaea874aaff26484ed1e179f336ba5028a08109e55e582ade10269
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.