ETH Price: $2,969.59 (-2.68%)
Gas: 2 Gwei

Token

SOWTEN (Agent)
 

Overview

Max Total Supply

10,000 Agent

Holders

452

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 Agent
0xd408bb21aa1ccaac9afb75685253957968a4c3bd
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:
SowtenNFTv3

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 6 : SowtenNFTv3.sol
//SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;

import "contracts/token/ERC721A/ERC721A.sol";
import '@openzeppelin/contracts/access/Ownable.sol';
import "contracts/utils/Strings.sol";

// inspired by Azuki, TheStripesNFT
// https://github.com/chiru-labs/ERC721A-Upgradeable
// https://github.com/The-Stripes-NFT/the-stripes-nft-contract
contract SowtenNFTv3 is ERC721A, Ownable {
    using Strings for uint256;
    
    string public baseURI;
    string public baseExtension = ".json";
    uint256 public maxSupply = 10000;
    uint256 public maxMintAmount = 50;  // enable num to mint(MAX)
    uint256 public salePeriod = 1;      // 1:PREMINT, 2:WL1, 3:WL2, ..., 0:public
    uint256 public publicPrice = 0.08 ether;
    bool public paused = false;
    /* mint num on salePeriod */
    mapping(address => uint[10]) public whitelisted;    // enable num to mint per whitelisted/salePeriod (0: unable)
    mapping(address => uint[10]) public mintAmount;     // mint count per whitelisted/salePeriod
    /* presale price on salePeriod */
    mapping(uint => uint256) public price;      // uint: 1:presale, 2:2nd presale, ..., 0:public
    mapping(uint => uint256) public totalSupplyOnPeriod;      // uint: 1:presale, 2:2nd presale, ..., 0:public
    mapping(uint => uint256) public maxSupplyOnPeriod;      // uint: 1:presale, 2:2nd presale, ..., 0:public
    mapping(uint => bool) public anyoneCanMint;  // public on mint site(anyone can mint).

    constructor() ERC721A("SOWTEN", "Agent") {
        price[0] = publicPrice;
        price[1] = 0.05 ether;  // PREMINT(salePeriod = 1)
        price[2] = 0.055 ether; // WL1
        price[3] = 0.06 ether;  // WL2
        maxSupplyOnPeriod[0] = maxSupply;
        maxSupplyOnPeriod[1] = 200; // PREMINT(salePeriod = 1)
        maxSupplyOnPeriod[2] = 400; // WL1
        maxSupplyOnPeriod[3] = 600; // WL2
        anyoneCanMint[0] = true;
        anyoneCanMint[1] = false;
        anyoneCanMint[2] = false;
        anyoneCanMint[3] = false;
        mintOnPeriod(msg.sender, 1, 0);  // salePeriod = 0
    }

    /* internal */
    function _baseURI() internal view virtual override returns (string memory) {
        return baseURI;
    }

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

    /* public */
    function mint(address _to, uint256 _mintAmount) public payable {
        mintOnPeriod(_to, _mintAmount, 0);
    }

    function mintOnPeriod(address _to, uint256 _mintAmount, uint256 _salePeriod) public payable {
        uint256 supply = totalSupply();
        require(!paused);
        require(_mintAmount > 0);
        require(supply + _mintAmount <= maxSupply);

        if (msg.sender != owner()) {
            require(_mintAmount <= maxMintAmount, "The mint num has been exceeded.(Total)");
            require(totalSupplyOnPeriod[_salePeriod] + _mintAmount <= maxSupplyOnPeriod[_salePeriod], "The mint num has been exceeded.(On Period)");
            require(msg.value >= price[_salePeriod] * _mintAmount, "The price is incorrect."); // price
            if((_salePeriod != 0) && (anyoneCanMint[_salePeriod] == false) && (whitelisted[msg.sender][_salePeriod] == 0)) {
                revert("Not permitted to mint during this sales period.");
            }
            if((_salePeriod != 0) && (_mintAmount + mintAmount[msg.sender][_salePeriod] > whitelisted[msg.sender][_salePeriod])) {
                revert("Exceeded the number of mints permitted for this sales period.");
            }
        }

        // Mint Method (ERC721A)
        _mint(_to, _mintAmount);
        mintAmount[_to][_salePeriod] = mintAmount[_to][_salePeriod] + _mintAmount;
        totalSupplyOnPeriod[_salePeriod] = totalSupplyOnPeriod[_salePeriod] + _mintAmount;
    }

    function tokenURI(uint256 tokenId)
        public
        view
        virtual
        override
        returns (string memory)
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI query for nonexistent token"
        );

        string memory currentBaseURI = _baseURI();
        return
            bytes(currentBaseURI).length > 0
                ? string(
                    abi.encodePacked(
                        currentBaseURI,
                        tokenId.toString(),
                        baseExtension
                    )
                )
                : "";
    }

    function getPriceOnPeriod(uint256 _salePeriod) public view returns(uint256){
        return price[_salePeriod];
    }

    function getWhitelistUserOnPeriod(address _user, uint256 _salePeriod) public view returns(uint256) {
        return whitelisted[_user][_salePeriod];
    }

    function getMintAmountOnPeriod(address _user, uint256 _salePeriod) public view returns(uint256) {
        return mintAmount[_user][_salePeriod];
    }

    function getTotalSupplyOnPeriod(uint256 _salePeriod) public view returns(uint256) {
        return totalSupplyOnPeriod[_salePeriod];
    }

    function getMaxSupplyOnPeriod(uint256 _salePeriod) public view returns(uint256) {
        return maxSupplyOnPeriod[_salePeriod];
    }

    function getAnyoneCanMint(uint256 _salePeriod) public view returns(bool) {
        return anyoneCanMint[_salePeriod];
    }

    /* only owner */
    function setBaseURI(string memory _newBaseURI) public onlyOwner {
        baseURI = _newBaseURI;
    }

    function setBaseExtension(string memory _newBaseExtension)
        public
        onlyOwner
    {
        baseExtension = _newBaseExtension;
    }

    function pause(bool _state) public onlyOwner {
        paused = _state;
    }

    function setSalePeriod(uint256 _salePeriod) public onlyOwner {
        salePeriod = _salePeriod;
    }

    function setPriceOnPeriod(uint256 _salePeriod, uint256 _price) public onlyOwner {
        price[_salePeriod] = _price;
    }

    function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
        maxMintAmount = _newmaxMintAmount;
    }

    function setMaxSupplyOnPeriod(uint256 _salePeriod, uint256 _maxSupplyOnPeriod) public onlyOwner {
        maxSupplyOnPeriod[_salePeriod] = _maxSupplyOnPeriod;
    }

    function setAnyoneCanMint(uint256 _salePeriod, bool _anyoneCanMint) public onlyOwner {
        anyoneCanMint[_salePeriod] = _anyoneCanMint;
    }

    function addWhitelistUserOnPeriod(address _user, uint256 _mintNum, uint256 _salePeriod) public onlyOwner {
        whitelisted[_user][_salePeriod] = _mintNum;
    }

    function addWhitelistUserOnPeriodBulk(address[] memory _users, uint256 _mintNum, uint256 _salePeriod) public onlyOwner {
        for (uint256 i = 0; i < _users.length; i++) {
            whitelisted[_users[i]][_salePeriod] = _mintNum;
        }
    }

    function removeWhitelistUserOnPeriod(address _user, uint256 _salePeriod) public onlyOwner {
        whitelisted[_user][_salePeriod] = 0;
    }

    function airdropNfts(address[] calldata wAddresses) public onlyOwner {
        for (uint i = 0; i < wAddresses.length; i++) {
            _mint(wAddresses[i], 1);
        }
        totalSupplyOnPeriod[0] = totalSupplyOnPeriod[0] + wAddresses.length;
    }

    function withdraw() public payable onlyOwner {
        (bool success, ) = payable(msg.sender).call{
            value: address(this).balance
        }("");
        require(success);
    }
}

File 2 of 6 : ERC721A.sol
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.0.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;

import './IERC721A.sol';

/**
 * @dev ERC721 token receiver interface.
 */
interface ERC721A__IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is IERC721A {
    // Mask of an entry in packed address data.
    uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    // The bit position of `numberMinted` in packed address data.
    uint256 private constant BITPOS_NUMBER_MINTED = 64;

    // The bit position of `numberBurned` in packed address data.
    uint256 private constant BITPOS_NUMBER_BURNED = 128;

    // The bit position of `aux` in packed address data.
    uint256 private constant BITPOS_AUX = 192;

    // Mask of all 256 bits in packed address data except the 64 bits for `aux`.
    uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    // The bit position of `startTimestamp` in packed ownership.
    uint256 private constant BITPOS_START_TIMESTAMP = 160;

    // The bit mask of the `burned` bit in packed ownership.
    uint256 private constant BITMASK_BURNED = 1 << 224;

    // The bit position of the `nextInitialized` bit in packed ownership.
    uint256 private constant BITPOS_NEXT_INITIALIZED = 225;

    // The bit mask of the `nextInitialized` bit in packed ownership.
    uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225;

    // The tokenId of the next token to be minted.
    uint256 private _currentIndex;

    // The number of tokens burned.
    uint256 private _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned.
    // See `_packedOwnershipOf` implementation for details.
    //
    // Bits Layout:
    // - [0..159]   `addr`
    // - [160..223] `startTimestamp`
    // - [224]      `burned`
    // - [225]      `nextInitialized`
    mapping(uint256 => uint256) private _packedOwnerships;

    // Mapping owner address to address data.
    //
    // Bits Layout:
    // - [0..63]    `balance`
    // - [64..127]  `numberMinted`
    // - [128..191] `numberBurned`
    // - [192..255] `aux`
    mapping(address => uint256) private _packedAddressData;

    // Mapping from token ID to approved address.
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

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

    /**
     * @dev Returns the starting token ID.
     * To change the starting token ID, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Returns the next token ID to be minted.
     */
    function _nextTokenId() internal view returns (uint256) {
        return _currentIndex;
    }

    /**
     * @dev Returns the total number of tokens in existence.
     * Burned tokens will reduce the count.
     * To get the total number of tokens minted, please see `_totalMinted`.
     */
    function totalSupply() public view override returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than `_currentIndex - _startTokenId()` times.
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * @dev Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to `_startTokenId()`
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    /**
     * @dev Returns the total number of tokens burned.
     */
    function _totalBurned() internal view returns (uint256) {
        return _burnCounter;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        // The interface IDs are constants representing the first 4 bytes of the XOR of
        // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165
        // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)`
        return
            interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165.
            interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721.
            interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (_addressToUint256(owner) == 0) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> BITPOS_NUMBER_BURNED) & BITMASK_ADDRESS_DATA_ENTRY;
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return uint64(_packedAddressData[owner] >> BITPOS_AUX);
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        assembly { // Cast aux without masking.
            auxCasted := aux
        }
        packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }

    /**
     * Returns the packed ownership data of `tokenId`.
     */
    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];
                    // If not burned.
                    if (packed & BITMASK_BURNED == 0) {
                        // Invariant:
                        // There will always be an ownership that has an address and is not burned
                        // before an ownership that does not have an address and is not burned.
                        // Hence, curr will not underflow.
                        //
                        // We can directly compare the packed value.
                        // If the address is zero, packed is zero.
                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        return packed;
                    }
                }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * Returns the unpacked `TokenOwnership` struct from `packed`.
     */
    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;
    }

    /**
     * Returns the unpacked `TokenOwnership` struct at `index`.
     */
    function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    /**
     * @dev Initializes the ownership slot minted at `index` for efficiency purposes.
     */
    function _initializeOwnershipAt(uint256 index) internal {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    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))) : '';
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    /**
     * @dev Casts the address to uint256 without masking.
     */
    function _addressToUint256(address value) private pure returns (uint256 result) {
        assembly {
            result := value
        }
    }

    /**
     * @dev Casts the boolean to uint256 without branching.
     */
    function _boolToUint256(bool value) private pure returns (uint256 result) {
        assembly {
            result := value
        }
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = address(uint160(_packedOwnershipOf(tokenId)));
        if (to == owner) revert ApprovalToCurrentOwner();

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

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

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSenderERC721A()) revert ApproveToCaller();

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

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, '');
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex && // If within bounds,
            _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not burned.
    }

    /**
     * @dev Equivalent to `_safeMint(to, quantity, '')`.
     */
    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement
     *   {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (_addressToUint256(to) == 0) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the balance and number minted.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (to.code.length != 0) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex < end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex < end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (_addressToUint256(to) == 0) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

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

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the balance and number minted.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            do {
                emit Transfer(address(0), to, updatedIndex++);
            } while (updatedIndex < end);

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

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

        address approvedAddress = _tokenApprovals[tokenId];

        bool isApprovedOrOwner = (_msgSenderERC721A() == from ||
            isApprovedForAll(from, _msgSenderERC721A()) ||
            approvedAddress == _msgSenderERC721A());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (_addressToUint256(to) == 0) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner.
        if (_addressToUint256(approvedAddress) != 0) {
            delete _tokenApprovals[tokenId];
        }

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            // We can directly increment and decrement the balances.
            --_packedAddressData[from]; // Updates: `balance -= 1`.
            ++_packedAddressData[to]; // Updates: `balance += 1`.

            // Updates:
            // - `address` to the next owner.
            // - `startTimestamp` to the timestamp of transfering.
            // - `burned` to `false`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                BITMASK_NEXT_INITIALIZED;

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

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

    /**
     * @dev Equivalent to `_burn(tokenId, false)`.
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        address from = address(uint160(prevOwnershipPacked));
        address approvedAddress = _tokenApprovals[tokenId];

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSenderERC721A() == from ||
                isApprovedForAll(from, _msgSenderERC721A()) ||
                approvedAddress == _msgSenderERC721A());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

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

        // Clear approvals from the previous owner.
        if (_addressToUint256(approvedAddress) != 0) {
            delete _tokenApprovals[tokenId];
        }

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            // Updates:
            // - `balance -= 1`.
            // - `numberBurned += 1`.
            //
            // We can directly decrement the balance, and increment the number burned.
            // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`.
            _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1;

            // Updates:
            // - `address` to the last owner.
            // - `startTimestamp` to the timestamp of burning.
            // - `burned` to `true`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] =
                _addressToUint256(from) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                BITMASK_BURNED |
                BITMASK_NEXT_INITIALIZED;

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

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

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    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))
                }
            }
        }
    }

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Returns the message sender (defaults to `msg.sender`).
     *
     * If you are writing GSN compatible contracts, you need to override this function.
     */
    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function _toString(uint256 value) internal pure returns (string memory ptr) {
        assembly {
            // The maximum value of a uint256 contains 78 digits (1 byte per digit),
            // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged.
            // We will need 1 32-byte word to store the length,
            // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128.
            ptr := add(mload(0x40), 128)
            // Update the free memory pointer to allocate.
            mstore(0x40, ptr)

            // Cache the end of the memory to calculate the length later.
            let end := ptr

            // We write the string from the rightmost digit to the leftmost digit.
            // The following is essentially a do-while loop that also handles the zero case.
            // Costs a bit more than early returning for the zero case,
            // but cheaper in terms of deployment and overall runtime costs.
            for {
                // Initialize and perform the first pass without check.
                let temp := value
                // Move the pointer 1 byte leftwards to point to an empty character slot.
                ptr := sub(ptr, 1)
                // Write the character to the pointer. 48 is the ASCII index of '0'.
                mstore8(ptr, add(48, mod(temp, 10)))
                temp := div(temp, 10)
            } temp {
                // Keep dividing `temp` until zero.
                temp := div(temp, 10)
            } { // Body of the for loop.
                ptr := sub(ptr, 1)
                mstore8(ptr, add(48, mod(temp, 10)))
            }

            let length := sub(end, ptr)
            // Move the pointer 32 bytes leftwards to make room for the length.
            ptr := sub(ptr, 32)
            // Store the length.
            mstore(ptr, length)
        }
    }
}

File 3 of 6 : Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    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);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed 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");
        return string(buffer);
    }
}

File 4 of 6 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 5 of 6 : IERC721A.sol
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.0.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;

/**
 * @dev Interface of an ERC721A compliant contract.
 */
interface IERC721A {
    /**
     * The caller must own the token or be an approved operator.
     */
    error ApprovalCallerNotOwnerNorApproved();

    /**
     * The token does not exist.
     */
    error ApprovalQueryForNonexistentToken();

    /**
     * The caller cannot approve to their own address.
     */
    error ApproveToCaller();

    /**
     * The caller cannot approve to the current owner.
     */
    error ApprovalToCurrentOwner();

    /**
     * Cannot query the balance for the zero address.
     */
    error BalanceQueryForZeroAddress();

    /**
     * Cannot mint to the zero address.
     */
    error MintToZeroAddress();

    /**
     * The quantity of tokens minted must be more than zero.
     */
    error MintZeroQuantity();

    /**
     * The token does not exist.
     */
    error OwnerQueryForNonexistentToken();

    /**
     * The caller must own the token or be an approved operator.
     */
    error TransferCallerNotOwnerNorApproved();

    /**
     * The token must be owned by `from`.
     */
    error TransferFromIncorrectOwner();

    /**
     * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface.
     */
    error TransferToNonERC721ReceiverImplementer();

    /**
     * Cannot transfer to the zero address.
     */
    error TransferToZeroAddress();

    /**
     * The token does not exist.
     */
    error URIQueryForNonexistentToken();

    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     *
     * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens.
     */
    function totalSupply() external view returns (uint256);

    // ==============================
    //            IERC165
    // ==============================

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

    // ==============================
    //            IERC721
    // ==============================

    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    // ==============================
    //        IERC721Metadata
    // ==============================

    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

File 6 of 6 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","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":"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":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_mintNum","type":"uint256"},{"internalType":"uint256","name":"_salePeriod","type":"uint256"}],"name":"addWhitelistUserOnPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"},{"internalType":"uint256","name":"_mintNum","type":"uint256"},{"internalType":"uint256","name":"_salePeriod","type":"uint256"}],"name":"addWhitelistUserOnPeriodBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wAddresses","type":"address[]"}],"name":"airdropNfts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"anyoneCanMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_salePeriod","type":"uint256"}],"name":"getAnyoneCanMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_salePeriod","type":"uint256"}],"name":"getMaxSupplyOnPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_salePeriod","type":"uint256"}],"name":"getMintAmountOnPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_salePeriod","type":"uint256"}],"name":"getPriceOnPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_salePeriod","type":"uint256"}],"name":"getTotalSupplyOnPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_salePeriod","type":"uint256"}],"name":"getWhitelistUserOnPeriod","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":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"maxSupplyOnPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"mintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"uint256","name":"_salePeriod","type":"uint256"}],"name":"mintOnPeriod","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":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"_salePeriod","type":"uint256"}],"name":"removeWhitelistUserOnPeriod","outputs":[],"stateMutability":"nonpayable","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":"nonpayable","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":"nonpayable","type":"function"},{"inputs":[],"name":"salePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_salePeriod","type":"uint256"},{"internalType":"bool","name":"_anyoneCanMint","type":"bool"}],"name":"setAnyoneCanMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_salePeriod","type":"uint256"},{"internalType":"uint256","name":"_maxSupplyOnPeriod","type":"uint256"}],"name":"setMaxSupplyOnPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_salePeriod","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPriceOnPeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_salePeriod","type":"uint256"}],"name":"setSalePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":"uint256","name":"","type":"uint256"}],"name":"totalSupplyOnPeriod","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":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelisted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600a90805190602001906200005192919062000af1565b50612710600b556032600c556001600d5567011c37937e080000600e556000600f60006101000a81548160ff0219169083151502179055503480156200009657600080fd5b506040518060400160405280600681526020017f534f5754454e00000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4167656e7400000000000000000000000000000000000000000000000000000081525081600290805190602001906200011b92919062000af1565b5080600390805190602001906200013492919062000af1565b50620001456200031f60201b60201c565b60008190555050506200016d620001616200032860201b60201c565b6200033060201b60201c565b600e54601260008081526020019081526020016000208190555066b1a2bc2ec5000060126000600181526020019081526020016000208190555066c3663566a5800060126000600281526020019081526020016000208190555066d529ae9e860000601260006003815260200190815260200160002081905550600b54601460008081526020019081526020016000208190555060c860146000600181526020019081526020016000208190555061019060146000600281526020019081526020016000208190555061025860146000600381526020019081526020016000208190555060016015600080815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601560006001815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601560006002815260200190815260200160002060006101000a81548160ff0219169083151502179055506000601560006003815260200190815260200160002060006101000a81548160ff021916908315150217905550620003193360016000620003f660201b60201c565b6200100f565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600062000408620008ad60201b60201c565b9050600f60009054906101000a900460ff16156200042557600080fd5b600083116200043357600080fd5b600b54838262000444919062000d1f565b11156200045057600080fd5b62000460620008cc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620007a157600c54831115620004db576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004d29062000cec565b60405180910390fd5b601460008381526020019081526020016000205483601360008581526020019081526020016000205462000510919062000d1f565b111562000554576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200054b9062000cca565b60405180910390fd5b82601260008481526020019081526020016000205462000575919062000d7c565b341015620005ba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005b19062000ca8565b60405180910390fd5b60008214158015620005f05750600015156015600084815260200190815260200160002060009054906101000a900460ff161515145b80156200065257506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083600a81106200064e576200064d62000e7b565b5b0154145b1562000695576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200068c9062000c64565b60405180910390fd5b600082141580156200075d5750601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082600a8110620006f657620006f562000e7b565b5b0154601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083600a81106200074c576200074b62000e7b565b5b0154846200075b919062000d1f565b115b15620007a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007979062000c86565b60405180910390fd5b5b620007b38484620008f660201b60201c565b82601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083600a811062000808576200080762000e7b565b5b015462000816919062000d1f565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083600a81106200086a576200086962000e7b565b5b018190555082601360008481526020019081526020016000205462000890919062000d1f565b601360008481526020019081526020016000208190555050505050565b6000620008bf6200031f60201b60201c565b6001546000540303905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008054905060006200090f8462000ad160201b60201c565b141562000948576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082141562000984576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62000999600084838562000adb60201b60201c565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e162000a066001841462000ae160201b60201c565b901b60a042901b62000a1e8562000ad160201b60201c565b171760046000838152602001908152602001600020819055506000819050600083820190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821062000a445781600081905550505062000acc600084838562000aeb60201b60201c565b505050565b6000819050919050565b50505050565b6000819050919050565b50505050565b82805462000aff9062000de7565b90600052602060002090601f01602090048101928262000b23576000855562000b6f565b82601f1062000b3e57805160ff191683800117855562000b6f565b8280016001018555821562000b6f579182015b8281111562000b6e57825182559160200191906001019062000b51565b5b50905062000b7e919062000b82565b5090565b5b8082111562000b9d57600081600090555060010162000b83565b5090565b600062000bb0602f8362000d0e565b915062000bbd8262000eaa565b604082019050919050565b600062000bd7603d8362000d0e565b915062000be48262000ef9565b604082019050919050565b600062000bfe60178362000d0e565b915062000c0b8262000f48565b602082019050919050565b600062000c25602a8362000d0e565b915062000c328262000f71565b604082019050919050565b600062000c4c60268362000d0e565b915062000c598262000fc0565b604082019050919050565b6000602082019050818103600083015262000c7f8162000ba1565b9050919050565b6000602082019050818103600083015262000ca18162000bc8565b9050919050565b6000602082019050818103600083015262000cc38162000bef565b9050919050565b6000602082019050818103600083015262000ce58162000c16565b9050919050565b6000602082019050818103600083015262000d078162000c3d565b9050919050565b600082825260208201905092915050565b600062000d2c8262000ddd565b915062000d398362000ddd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d715762000d7062000e1d565b5b828201905092915050565b600062000d898262000ddd565b915062000d968362000ddd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000dd25762000dd162000e1d565b5b828202905092915050565b6000819050919050565b6000600282049050600182168062000e0057607f821691505b6020821081141562000e175762000e1662000e4c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e6f74207065726d697474656420746f206d696e7420647572696e672074686960008201527f732073616c657320706572696f642e0000000000000000000000000000000000602082015250565b7f457863656564656420746865206e756d626572206f66206d696e74732070657260008201527f6d697474656420666f7220746869732073616c657320706572696f642e000000602082015250565b7f54686520707269636520697320696e636f72726563742e000000000000000000600082015250565b7f546865206d696e74206e756d20686173206265656e2065786365656465642e2860008201527f4f6e20506572696f642900000000000000000000000000000000000000000000602082015250565b7f546865206d696e74206e756d20686173206265656e2065786365656465642e2860008201527f546f74616c290000000000000000000000000000000000000000000000000000602082015250565b613f09806200101f6000396000f3fe6080604052600436106102e45760003560e01c8063715018a611610190578063c6682862116100dc578063db8963a511610095578063e0205ce41161006f578063e0205ce414610b8f578063e985e9c514610bb8578063f2fde38b14610bf5578063f356749d14610c1e576102e4565b8063db8963a514610b14578063dd72ea5b14610b3d578063de75135814610b66576102e4565b8063c6682862146109de578063c87b56dd14610a09578063c89cc5ce14610a46578063d5abeb0114610a83578063d8d7a56114610aae578063da3ef23f14610aeb576102e4565b80639821f06511610149578063a36cd80b11610123578063a36cd80b14610910578063a3e0a7d71461094d578063a945bf801461098a578063b88d4fde146109b5576102e4565b80639821f065146108935780639ed5c84c146108bc578063a22cb465146108e7576102e4565b8063715018a6146107835780637f00c7a61461079a5780638491fdd3146107c357806384dd1883146108005780638da5cb5b1461083d57806395d89b4114610868576102e4565b80633ccfd60b1161024f5780635c975abb11610208578063640488cc116101e2578063640488cc146106b55780636c0360eb146106de5780636c1cac4a1461070957806370a0823114610746576102e4565b80635c975abb14610631578063606b63371461065c5780636352211e14610678576102e4565b80633ccfd60b1461053f57806340c10f191461054957806342842e0e1461056557806349f1f86d1461058e5780634eacf369146105cb57806355f804b314610608576102e4565b8063159fe94a116102a1578063159fe94a1461041d57806318160ddd14610446578063239c70ae1461047157806323b872dd1461049c57806326a49e37146104c55780632bd341f514610502576102e4565b806301ffc9a7146102e957806302329a291461032657806306fdde031461034f578063081812fc1461037a578063095ea7b3146103b75780630e583dd2146103e0575b600080fd5b3480156102f557600080fd5b50610310600480360381019061030b9190613191565b610c47565b60405161031d9190613618565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613164565b610cd9565b005b34801561035b57600080fd5b50610364610cfe565b6040516103719190613633565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190613234565b610d90565b6040516103ae91906135b1565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190613015565b610e0c565b005b3480156103ec57600080fd5b5061040760048036038101906104029190613015565b610fb3565b6040516104149190613755565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190613015565b610fdb565b005b34801561045257600080fd5b5061045b61103f565b6040516104689190613755565b60405180910390f35b34801561047d57600080fd5b50610486611056565b6040516104939190613755565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be9190612eff565b61105c565b005b3480156104d157600080fd5b506104ec60048036038101906104e79190613234565b61106c565b6040516104f99190613755565b60405180910390f35b34801561050e57600080fd5b5061052960048036038101906105249190613234565b611084565b6040516105369190613618565b60405180910390f35b6105476110a4565b005b610563600480360381019061055e9190613015565b611125565b005b34801561057157600080fd5b5061058c60048036038101906105879190612eff565b611135565b005b34801561059a57600080fd5b506105b560048036038101906105b09190613234565b611155565b6040516105c29190613755565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed9190613234565b611172565b6040516105ff9190613755565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a91906131eb565b61118a565b005b34801561063d57600080fd5b506106466111ac565b6040516106539190613618565b60405180910390f35b61067660048036038101906106719190613055565b6111bf565b005b34801561068457600080fd5b5061069f600480360381019061069a9190613234565b61162d565b6040516106ac91906135b1565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d79190613261565b61163f565b005b3480156106ea57600080fd5b506106f3611676565b6040516107009190613633565b60405180910390f35b34801561071557600080fd5b50610730600480360381019061072b9190613015565b611704565b60405161073d9190613755565b60405180910390f35b34801561075257600080fd5b5061076d60048036038101906107689190612e92565b61172c565b60405161077a9190613755565b60405180910390f35b34801561078f57600080fd5b506107986117c1565b005b3480156107a657600080fd5b506107c160048036038101906107bc9190613234565b6117d5565b005b3480156107cf57600080fd5b506107ea60048036038101906107e59190613015565b6117e7565b6040516107f79190613755565b60405180910390f35b34801561080c57600080fd5b5061082760048036038101906108229190613234565b611844565b6040516108349190613755565b60405180910390f35b34801561084957600080fd5b50610852611861565b60405161085f91906135b1565b60405180910390f35b34801561087457600080fd5b5061087d61188b565b60405161088a9190613633565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190613234565b61191d565b005b3480156108c857600080fd5b506108d161192f565b6040516108de9190613755565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190612fd5565b611935565b005b34801561091c57600080fd5b5061093760048036038101906109329190613015565b611aad565b6040516109449190613755565b60405180910390f35b34801561095957600080fd5b50610974600480360381019061096f9190613234565b611b0a565b6040516109819190613755565b60405180910390f35b34801561099657600080fd5b5061099f611b22565b6040516109ac9190613755565b60405180910390f35b3480156109c157600080fd5b506109dc60048036038101906109d79190612f52565b611b28565b005b3480156109ea57600080fd5b506109f3611b9b565b604051610a009190613633565b60405180910390f35b348015610a1557600080fd5b50610a306004803603810190610a2b9190613234565b611c29565b604051610a3d9190613633565b60405180910390f35b348015610a5257600080fd5b50610a6d6004803603810190610a689190613234565b611cd3565b604051610a7a9190613618565b60405180910390f35b348015610a8f57600080fd5b50610a98611cfd565b604051610aa59190613755565b60405180910390f35b348015610aba57600080fd5b50610ad56004803603810190610ad09190613234565b611d03565b604051610ae29190613755565b60405180910390f35b348015610af757600080fd5b50610b126004803603810190610b0d91906131eb565b611d20565b005b348015610b2057600080fd5b50610b3b6004803603810190610b3691906132a1565b611d42565b005b348015610b4957600080fd5b50610b646004803603810190610b5f9190613055565b611d66565b005b348015610b7257600080fd5b50610b8d6004803603810190610b8891906130f5565b611dca565b005b348015610b9b57600080fd5b50610bb66004803603810190610bb191906132a1565b611e68565b005b348015610bc457600080fd5b50610bdf6004803603810190610bda9190612ebf565b611e8c565b604051610bec9190613618565b60405180910390f35b348015610c0157600080fd5b50610c1c6004803603810190610c179190612e92565b611f20565b005b348015610c2a57600080fd5b50610c456004803603810190610c4091906130a8565b611fa4565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ca257506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610cd25750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b610ce161203d565b80600f60006101000a81548160ff02191690831515021790555050565b606060028054610d0d90613a51565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3990613a51565b8015610d865780601f10610d5b57610100808354040283529160200191610d86565b820191906000526020600020905b815481529060010190602001808311610d6957829003601f168201915b5050505050905090565b6000610d9b826120bb565b610dd1576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e178261211a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e7f576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e9e6121e8565b73ffffffffffffffffffffffffffffffffffffffff1614610f0157610eca81610ec56121e8565b611e8c565b610f00576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b601160205281600052604060002081600a8110610fcf57600080fd5b01600091509150505481565b610fe361203d565b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082600a811061103657611035613bbb565b5b01819055505050565b60006110496121f0565b6001546000540303905090565b600c5481565b6110678383836121f9565b505050565b60126020528060005260406000206000915090505481565b60156020528060005260406000206000915054906101000a900460ff1681565b6110ac61203d565b60003373ffffffffffffffffffffffffffffffffffffffff16476040516110d29061359c565b60006040518083038185875af1925050503d806000811461110f576040519150601f19603f3d011682016040523d82523d6000602084013e611114565b606091505b505090508061112257600080fd5b50565b611131828260006111bf565b5050565b61115083838360405180602001604052806000815250611b28565b505050565b600060136000838152602001908152602001600020549050919050565b60146020528060005260406000206000915090505481565b61119261203d565b80600990805190602001906111a8929190612bb2565b5050565b600f60009054906101000a900460ff1681565b60006111c961103f565b9050600f60009054906101000a900460ff16156111e557600080fd5b600083116111f257600080fd5b600b5483826112019190613886565b111561120c57600080fd5b611214611861565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461153357600c5483111561128b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128290613735565b60405180910390fd5b60146000838152602001908152602001600020548360136000858152602001908152602001600020546112be9190613886565b11156112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690613715565b60405180910390fd5b82601260008481526020019081526020016000205461131e919061390d565b341015611360576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611357906136f5565b60405180910390fd5b600082141580156113955750600015156015600084815260200190815260200160002060009054906101000a900460ff161515145b80156113f357506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083600a81106113ef576113ee613bbb565b5b0154145b15611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a90613675565b60405180910390fd5b600082141580156114f25750601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082600a81106114905761148f613bbb565b5b0154601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083600a81106114e3576114e2613bbb565b5b0154846114f09190613886565b115b15611532576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611529906136b5565b60405180910390fd5b5b61153d84846125c1565b82601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083600a811061158f5761158e613bbb565b5b015461159b9190613886565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083600a81106115ec576115eb613bbb565b5b01819055508260136000848152602001908152602001600020546116109190613886565b601360008481526020019081526020016000208190555050505050565b60006116388261211a565b9050919050565b61164761203d565b806015600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6009805461168390613a51565b80601f01602080910402602001604051908101604052809291908181526020018280546116af90613a51565b80156116fc5780601f106116d1576101008083540402835291602001916116fc565b820191906000526020600020905b8154815290600101906020018083116116df57829003601f168201915b505050505081565b601060205281600052604060002081600a811061172057600080fd5b01600091509150505481565b60008061173883612771565b1415611770576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6117c961203d565b6117d3600061277b565b565b6117dd61203d565b80600c8190555050565b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082600a811061183a57611839613bbb565b5b0154905092915050565b600060126000838152602001908152602001600020549050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461189a90613a51565b80601f01602080910402602001604051908101604052809291908181526020018280546118c690613a51565b80156119135780601f106118e857610100808354040283529160200191611913565b820191906000526020600020905b8154815290600101906020018083116118f657829003601f168201915b5050505050905090565b61192561203d565b80600d8190555050565b600d5481565b61193d6121e8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119a2576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006119af6121e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a5c6121e8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611aa19190613618565b60405180910390a35050565b6000601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082600a8110611b0057611aff613bbb565b5b0154905092915050565b60136020528060005260406000206000915090505481565b600e5481565b611b338484846121f9565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611b9557611b5e84848484612841565b611b94576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b600a8054611ba890613a51565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd490613a51565b8015611c215780601f10611bf657610100808354040283529160200191611c21565b820191906000526020600020905b815481529060010190602001808311611c0457829003601f168201915b505050505081565b6060611c34826120bb565b611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a906136d5565b60405180910390fd5b6000611c7d6129a1565b90506000815111611c9d5760405180602001604052806000815250611ccb565b80611ca784612a33565b600a604051602001611cbb9392919061356b565b6040516020818303038152906040525b915050919050565b60006015600083815260200190815260200160002060009054906101000a900460ff169050919050565b600b5481565b600060146000838152602001908152602001600020549050919050565b611d2861203d565b80600a9080519060200190611d3e929190612bb2565b5050565b611d4a61203d565b8060126000848152602001908152602001600020819055505050565b611d6e61203d565b81601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082600a8110611dc057611dbf613bbb565b5b0181905550505050565b611dd261203d565b60005b8351811015611e62578260106000868481518110611df657611df5613bbb565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083600a8110611e4a57611e49613bbb565b5b01819055508080611e5a90613ab4565b915050611dd5565b50505050565b611e7061203d565b8060146000848152602001908152602001600020819055505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f2861203d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8f90613655565b60405180910390fd5b611fa18161277b565b50565b611fac61203d565b60005b82829050811015611fff57611fec838383818110611fd057611fcf613bbb565b5b9050602002016020810190611fe59190612e92565b60016125c1565b8080611ff790613ab4565b915050611faf565b508181905060136000808152602001908152602001600020546120229190613886565b60136000808152602001908152602001600020819055505050565b612045612b94565b73ffffffffffffffffffffffffffffffffffffffff16612063611861565b73ffffffffffffffffffffffffffffffffffffffff16146120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090613695565b60405180910390fd5b565b6000816120c66121f0565b111580156120d5575060005482105b8015612113575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600080829050806121296121f0565b116121b1576000548110156121b05760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821614156121ae575b60008114156121a4576004600083600190039350838152602001908152602001600020549050612179565b80925050506121e3565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b60006001905090565b60006122048261211a565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461226b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008573ffffffffffffffffffffffffffffffffffffffff166122c46121e8565b73ffffffffffffffffffffffffffffffffffffffff1614806122f357506122f2866122ed6121e8565b611e8c565b5b8061233057506123016121e8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905080612369576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061237486612771565b14156123ac576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123b98686866001612b9c565b60006123c483612771565b14612400576006600085815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b6124c787612771565b1717600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416141561255157600060018501905060006004600083815260200190815260200160002054141561254f57600054811461254e578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125b98686866001612ba2565b505050505050565b60008054905060006125d284612771565b141561260a576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000821415612645576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126526000848385612b9c565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e16126b760018414612ba8565b901b60a042901b6126c785612771565b171760046000838152602001908152602001600020819055506000819050600083820190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106126ed5781600081905550505061276c6000848385612ba2565b505050565b6000819050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128676121e8565b8786866040518563ffffffff1660e01b815260040161288994939291906135cc565b602060405180830381600087803b1580156128a357600080fd5b505af19250505080156128d457506040513d601f19601f820116820180604052508101906128d191906131be565b60015b61294e573d8060008114612904576040519150601f19603f3d011682016040523d82523d6000602084013e612909565b606091505b50600081511415612946576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600980546129b090613a51565b80601f01602080910402602001604051908101604052809291908181526020018280546129dc90613a51565b8015612a295780601f106129fe57610100808354040283529160200191612a29565b820191906000526020600020905b815481529060010190602001808311612a0c57829003601f168201915b5050505050905090565b60606000821415612a7b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b8f565b600082905060005b60008214612aad578080612a9690613ab4565b915050600a82612aa691906138dc565b9150612a83565b60008167ffffffffffffffff811115612ac957612ac8613bea565b5b6040519080825280601f01601f191660200182016040528015612afb5781602001600182028036833780820191505090505b5090505b60008514612b8857600182612b149190613967565b9150600a85612b239190613afd565b6030612b2f9190613886565b60f81b818381518110612b4557612b44613bbb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b8191906138dc565b9450612aff565b8093505050505b919050565b600033905090565b50505050565b50505050565b6000819050919050565b828054612bbe90613a51565b90600052602060002090601f016020900481019282612be05760008555612c27565b82601f10612bf957805160ff1916838001178555612c27565b82800160010185558215612c27579182015b82811115612c26578251825591602001919060010190612c0b565b5b509050612c349190612c38565b5090565b5b80821115612c51576000816000905550600101612c39565b5090565b6000612c68612c6384613795565b613770565b90508083825260208201905082856020860282011115612c8b57612c8a613c23565b5b60005b85811015612cbb5781612ca18882612d49565b845260208401935060208301925050600181019050612c8e565b5050509392505050565b6000612cd8612cd3846137c1565b613770565b905082815260208101848484011115612cf457612cf3613c28565b5b612cff848285613a0f565b509392505050565b6000612d1a612d15846137f2565b613770565b905082815260208101848484011115612d3657612d35613c28565b5b612d41848285613a0f565b509392505050565b600081359050612d5881613e77565b92915050565b60008083601f840112612d7457612d73613c1e565b5b8235905067ffffffffffffffff811115612d9157612d90613c19565b5b602083019150836020820283011115612dad57612dac613c23565b5b9250929050565b600082601f830112612dc957612dc8613c1e565b5b8135612dd9848260208601612c55565b91505092915050565b600081359050612df181613e8e565b92915050565b600081359050612e0681613ea5565b92915050565b600081519050612e1b81613ea5565b92915050565b600082601f830112612e3657612e35613c1e565b5b8135612e46848260208601612cc5565b91505092915050565b600082601f830112612e6457612e63613c1e565b5b8135612e74848260208601612d07565b91505092915050565b600081359050612e8c81613ebc565b92915050565b600060208284031215612ea857612ea7613c32565b5b6000612eb684828501612d49565b91505092915050565b60008060408385031215612ed657612ed5613c32565b5b6000612ee485828601612d49565b9250506020612ef585828601612d49565b9150509250929050565b600080600060608486031215612f1857612f17613c32565b5b6000612f2686828701612d49565b9350506020612f3786828701612d49565b9250506040612f4886828701612e7d565b9150509250925092565b60008060008060808587031215612f6c57612f6b613c32565b5b6000612f7a87828801612d49565b9450506020612f8b87828801612d49565b9350506040612f9c87828801612e7d565b925050606085013567ffffffffffffffff811115612fbd57612fbc613c2d565b5b612fc987828801612e21565b91505092959194509250565b60008060408385031215612fec57612feb613c32565b5b6000612ffa85828601612d49565b925050602061300b85828601612de2565b9150509250929050565b6000806040838503121561302c5761302b613c32565b5b600061303a85828601612d49565b925050602061304b85828601612e7d565b9150509250929050565b60008060006060848603121561306e5761306d613c32565b5b600061307c86828701612d49565b935050602061308d86828701612e7d565b925050604061309e86828701612e7d565b9150509250925092565b600080602083850312156130bf576130be613c32565b5b600083013567ffffffffffffffff8111156130dd576130dc613c2d565b5b6130e985828601612d5e565b92509250509250929050565b60008060006060848603121561310e5761310d613c32565b5b600084013567ffffffffffffffff81111561312c5761312b613c2d565b5b61313886828701612db4565b935050602061314986828701612e7d565b925050604061315a86828701612e7d565b9150509250925092565b60006020828403121561317a57613179613c32565b5b600061318884828501612de2565b91505092915050565b6000602082840312156131a7576131a6613c32565b5b60006131b584828501612df7565b91505092915050565b6000602082840312156131d4576131d3613c32565b5b60006131e284828501612e0c565b91505092915050565b60006020828403121561320157613200613c32565b5b600082013567ffffffffffffffff81111561321f5761321e613c2d565b5b61322b84828501612e4f565b91505092915050565b60006020828403121561324a57613249613c32565b5b600061325884828501612e7d565b91505092915050565b6000806040838503121561327857613277613c32565b5b600061328685828601612e7d565b925050602061329785828601612de2565b9150509250929050565b600080604083850312156132b8576132b7613c32565b5b60006132c685828601612e7d565b92505060206132d785828601612e7d565b9150509250929050565b6132ea8161399b565b82525050565b6132f9816139ad565b82525050565b600061330a82613838565b613314818561384e565b9350613324818560208601613a1e565b61332d81613c37565b840191505092915050565b600061334382613843565b61334d818561386a565b935061335d818560208601613a1e565b61336681613c37565b840191505092915050565b600061337c82613843565b613386818561387b565b9350613396818560208601613a1e565b80840191505092915050565b600081546133af81613a51565b6133b9818661387b565b945060018216600081146133d457600181146133e557613418565b60ff19831686528186019350613418565b6133ee85613823565b60005b83811015613410578154818901526001820191506020810190506133f1565b838801955050505b50505092915050565b600061342e60268361386a565b915061343982613c48565b604082019050919050565b6000613451602f8361386a565b915061345c82613c97565b604082019050919050565b600061347460208361386a565b915061347f82613ce6565b602082019050919050565b6000613497603d8361386a565b91506134a282613d0f565b604082019050919050565b60006134ba602f8361386a565b91506134c582613d5e565b604082019050919050565b60006134dd60178361386a565b91506134e882613dad565b602082019050919050565b600061350060008361385f565b915061350b82613dd6565b600082019050919050565b6000613523602a8361386a565b915061352e82613dd9565b604082019050919050565b600061354660268361386a565b915061355182613e28565b604082019050919050565b61356581613a05565b82525050565b60006135778286613371565b91506135838285613371565b915061358f82846133a2565b9150819050949350505050565b60006135a7826134f3565b9150819050919050565b60006020820190506135c660008301846132e1565b92915050565b60006080820190506135e160008301876132e1565b6135ee60208301866132e1565b6135fb604083018561355c565b818103606083015261360d81846132ff565b905095945050505050565b600060208201905061362d60008301846132f0565b92915050565b6000602082019050818103600083015261364d8184613338565b905092915050565b6000602082019050818103600083015261366e81613421565b9050919050565b6000602082019050818103600083015261368e81613444565b9050919050565b600060208201905081810360008301526136ae81613467565b9050919050565b600060208201905081810360008301526136ce8161348a565b9050919050565b600060208201905081810360008301526136ee816134ad565b9050919050565b6000602082019050818103600083015261370e816134d0565b9050919050565b6000602082019050818103600083015261372e81613516565b9050919050565b6000602082019050818103600083015261374e81613539565b9050919050565b600060208201905061376a600083018461355c565b92915050565b600061377a61378b565b90506137868282613a83565b919050565b6000604051905090565b600067ffffffffffffffff8211156137b0576137af613bea565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156137dc576137db613bea565b5b6137e582613c37565b9050602081019050919050565b600067ffffffffffffffff82111561380d5761380c613bea565b5b61381682613c37565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061389182613a05565b915061389c83613a05565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138d1576138d0613b2e565b5b828201905092915050565b60006138e782613a05565b91506138f283613a05565b92508261390257613901613b5d565b5b828204905092915050565b600061391882613a05565b915061392383613a05565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561395c5761395b613b2e565b5b828202905092915050565b600061397282613a05565b915061397d83613a05565b9250828210156139905761398f613b2e565b5b828203905092915050565b60006139a6826139e5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a3c578082015181840152602081019050613a21565b83811115613a4b576000848401525b50505050565b60006002820490506001821680613a6957607f821691505b60208210811415613a7d57613a7c613b8c565b5b50919050565b613a8c82613c37565b810181811067ffffffffffffffff82111715613aab57613aaa613bea565b5b80604052505050565b6000613abf82613a05565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613af257613af1613b2e565b5b600182019050919050565b6000613b0882613a05565b9150613b1383613a05565b925082613b2357613b22613b5d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e6f74207065726d697474656420746f206d696e7420647572696e672074686960008201527f732073616c657320706572696f642e0000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f457863656564656420746865206e756d626572206f66206d696e74732070657260008201527f6d697474656420666f7220746869732073616c657320706572696f642e000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f54686520707269636520697320696e636f72726563742e000000000000000000600082015250565b50565b7f546865206d696e74206e756d20686173206265656e2065786365656465642e2860008201527f4f6e20506572696f642900000000000000000000000000000000000000000000602082015250565b7f546865206d696e74206e756d20686173206265656e2065786365656465642e2860008201527f546f74616c290000000000000000000000000000000000000000000000000000602082015250565b613e808161399b565b8114613e8b57600080fd5b50565b613e97816139ad565b8114613ea257600080fd5b50565b613eae816139b9565b8114613eb957600080fd5b50565b613ec581613a05565b8114613ed057600080fd5b5056fea264697066735822122086435d36f29db06585e3c60574616fd50636f1698de6c8f1780079b6efc5ce7464736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102e45760003560e01c8063715018a611610190578063c6682862116100dc578063db8963a511610095578063e0205ce41161006f578063e0205ce414610b8f578063e985e9c514610bb8578063f2fde38b14610bf5578063f356749d14610c1e576102e4565b8063db8963a514610b14578063dd72ea5b14610b3d578063de75135814610b66576102e4565b8063c6682862146109de578063c87b56dd14610a09578063c89cc5ce14610a46578063d5abeb0114610a83578063d8d7a56114610aae578063da3ef23f14610aeb576102e4565b80639821f06511610149578063a36cd80b11610123578063a36cd80b14610910578063a3e0a7d71461094d578063a945bf801461098a578063b88d4fde146109b5576102e4565b80639821f065146108935780639ed5c84c146108bc578063a22cb465146108e7576102e4565b8063715018a6146107835780637f00c7a61461079a5780638491fdd3146107c357806384dd1883146108005780638da5cb5b1461083d57806395d89b4114610868576102e4565b80633ccfd60b1161024f5780635c975abb11610208578063640488cc116101e2578063640488cc146106b55780636c0360eb146106de5780636c1cac4a1461070957806370a0823114610746576102e4565b80635c975abb14610631578063606b63371461065c5780636352211e14610678576102e4565b80633ccfd60b1461053f57806340c10f191461054957806342842e0e1461056557806349f1f86d1461058e5780634eacf369146105cb57806355f804b314610608576102e4565b8063159fe94a116102a1578063159fe94a1461041d57806318160ddd14610446578063239c70ae1461047157806323b872dd1461049c57806326a49e37146104c55780632bd341f514610502576102e4565b806301ffc9a7146102e957806302329a291461032657806306fdde031461034f578063081812fc1461037a578063095ea7b3146103b75780630e583dd2146103e0575b600080fd5b3480156102f557600080fd5b50610310600480360381019061030b9190613191565b610c47565b60405161031d9190613618565b60405180910390f35b34801561033257600080fd5b5061034d60048036038101906103489190613164565b610cd9565b005b34801561035b57600080fd5b50610364610cfe565b6040516103719190613633565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190613234565b610d90565b6040516103ae91906135b1565b60405180910390f35b3480156103c357600080fd5b506103de60048036038101906103d99190613015565b610e0c565b005b3480156103ec57600080fd5b5061040760048036038101906104029190613015565b610fb3565b6040516104149190613755565b60405180910390f35b34801561042957600080fd5b50610444600480360381019061043f9190613015565b610fdb565b005b34801561045257600080fd5b5061045b61103f565b6040516104689190613755565b60405180910390f35b34801561047d57600080fd5b50610486611056565b6040516104939190613755565b60405180910390f35b3480156104a857600080fd5b506104c360048036038101906104be9190612eff565b61105c565b005b3480156104d157600080fd5b506104ec60048036038101906104e79190613234565b61106c565b6040516104f99190613755565b60405180910390f35b34801561050e57600080fd5b5061052960048036038101906105249190613234565b611084565b6040516105369190613618565b60405180910390f35b6105476110a4565b005b610563600480360381019061055e9190613015565b611125565b005b34801561057157600080fd5b5061058c60048036038101906105879190612eff565b611135565b005b34801561059a57600080fd5b506105b560048036038101906105b09190613234565b611155565b6040516105c29190613755565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed9190613234565b611172565b6040516105ff9190613755565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a91906131eb565b61118a565b005b34801561063d57600080fd5b506106466111ac565b6040516106539190613618565b60405180910390f35b61067660048036038101906106719190613055565b6111bf565b005b34801561068457600080fd5b5061069f600480360381019061069a9190613234565b61162d565b6040516106ac91906135b1565b60405180910390f35b3480156106c157600080fd5b506106dc60048036038101906106d79190613261565b61163f565b005b3480156106ea57600080fd5b506106f3611676565b6040516107009190613633565b60405180910390f35b34801561071557600080fd5b50610730600480360381019061072b9190613015565b611704565b60405161073d9190613755565b60405180910390f35b34801561075257600080fd5b5061076d60048036038101906107689190612e92565b61172c565b60405161077a9190613755565b60405180910390f35b34801561078f57600080fd5b506107986117c1565b005b3480156107a657600080fd5b506107c160048036038101906107bc9190613234565b6117d5565b005b3480156107cf57600080fd5b506107ea60048036038101906107e59190613015565b6117e7565b6040516107f79190613755565b60405180910390f35b34801561080c57600080fd5b5061082760048036038101906108229190613234565b611844565b6040516108349190613755565b60405180910390f35b34801561084957600080fd5b50610852611861565b60405161085f91906135b1565b60405180910390f35b34801561087457600080fd5b5061087d61188b565b60405161088a9190613633565b60405180910390f35b34801561089f57600080fd5b506108ba60048036038101906108b59190613234565b61191d565b005b3480156108c857600080fd5b506108d161192f565b6040516108de9190613755565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190612fd5565b611935565b005b34801561091c57600080fd5b5061093760048036038101906109329190613015565b611aad565b6040516109449190613755565b60405180910390f35b34801561095957600080fd5b50610974600480360381019061096f9190613234565b611b0a565b6040516109819190613755565b60405180910390f35b34801561099657600080fd5b5061099f611b22565b6040516109ac9190613755565b60405180910390f35b3480156109c157600080fd5b506109dc60048036038101906109d79190612f52565b611b28565b005b3480156109ea57600080fd5b506109f3611b9b565b604051610a009190613633565b60405180910390f35b348015610a1557600080fd5b50610a306004803603810190610a2b9190613234565b611c29565b604051610a3d9190613633565b60405180910390f35b348015610a5257600080fd5b50610a6d6004803603810190610a689190613234565b611cd3565b604051610a7a9190613618565b60405180910390f35b348015610a8f57600080fd5b50610a98611cfd565b604051610aa59190613755565b60405180910390f35b348015610aba57600080fd5b50610ad56004803603810190610ad09190613234565b611d03565b604051610ae29190613755565b60405180910390f35b348015610af757600080fd5b50610b126004803603810190610b0d91906131eb565b611d20565b005b348015610b2057600080fd5b50610b3b6004803603810190610b3691906132a1565b611d42565b005b348015610b4957600080fd5b50610b646004803603810190610b5f9190613055565b611d66565b005b348015610b7257600080fd5b50610b8d6004803603810190610b8891906130f5565b611dca565b005b348015610b9b57600080fd5b50610bb66004803603810190610bb191906132a1565b611e68565b005b348015610bc457600080fd5b50610bdf6004803603810190610bda9190612ebf565b611e8c565b604051610bec9190613618565b60405180910390f35b348015610c0157600080fd5b50610c1c6004803603810190610c179190612e92565b611f20565b005b348015610c2a57600080fd5b50610c456004803603810190610c4091906130a8565b611fa4565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610ca257506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610cd25750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b610ce161203d565b80600f60006101000a81548160ff02191690831515021790555050565b606060028054610d0d90613a51565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3990613a51565b8015610d865780601f10610d5b57610100808354040283529160200191610d86565b820191906000526020600020905b815481529060010190602001808311610d6957829003601f168201915b5050505050905090565b6000610d9b826120bb565b610dd1576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610e178261211a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e7f576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610e9e6121e8565b73ffffffffffffffffffffffffffffffffffffffff1614610f0157610eca81610ec56121e8565b611e8c565b610f00576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b601160205281600052604060002081600a8110610fcf57600080fd5b01600091509150505481565b610fe361203d565b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082600a811061103657611035613bbb565b5b01819055505050565b60006110496121f0565b6001546000540303905090565b600c5481565b6110678383836121f9565b505050565b60126020528060005260406000206000915090505481565b60156020528060005260406000206000915054906101000a900460ff1681565b6110ac61203d565b60003373ffffffffffffffffffffffffffffffffffffffff16476040516110d29061359c565b60006040518083038185875af1925050503d806000811461110f576040519150601f19603f3d011682016040523d82523d6000602084013e611114565b606091505b505090508061112257600080fd5b50565b611131828260006111bf565b5050565b61115083838360405180602001604052806000815250611b28565b505050565b600060136000838152602001908152602001600020549050919050565b60146020528060005260406000206000915090505481565b61119261203d565b80600990805190602001906111a8929190612bb2565b5050565b600f60009054906101000a900460ff1681565b60006111c961103f565b9050600f60009054906101000a900460ff16156111e557600080fd5b600083116111f257600080fd5b600b5483826112019190613886565b111561120c57600080fd5b611214611861565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461153357600c5483111561128b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128290613735565b60405180910390fd5b60146000838152602001908152602001600020548360136000858152602001908152602001600020546112be9190613886565b11156112ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f690613715565b60405180910390fd5b82601260008481526020019081526020016000205461131e919061390d565b341015611360576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611357906136f5565b60405180910390fd5b600082141580156113955750600015156015600084815260200190815260200160002060009054906101000a900460ff161515145b80156113f357506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083600a81106113ef576113ee613bbb565b5b0154145b15611433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142a90613675565b60405180910390fd5b600082141580156114f25750601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082600a81106114905761148f613bbb565b5b0154601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083600a81106114e3576114e2613bbb565b5b0154846114f09190613886565b115b15611532576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611529906136b5565b60405180910390fd5b5b61153d84846125c1565b82601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083600a811061158f5761158e613bbb565b5b015461159b9190613886565b601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083600a81106115ec576115eb613bbb565b5b01819055508260136000848152602001908152602001600020546116109190613886565b601360008481526020019081526020016000208190555050505050565b60006116388261211a565b9050919050565b61164761203d565b806015600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6009805461168390613a51565b80601f01602080910402602001604051908101604052809291908181526020018280546116af90613a51565b80156116fc5780601f106116d1576101008083540402835291602001916116fc565b820191906000526020600020905b8154815290600101906020018083116116df57829003601f168201915b505050505081565b601060205281600052604060002081600a811061172057600080fd5b01600091509150505481565b60008061173883612771565b1415611770576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6117c961203d565b6117d3600061277b565b565b6117dd61203d565b80600c8190555050565b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082600a811061183a57611839613bbb565b5b0154905092915050565b600060126000838152602001908152602001600020549050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461189a90613a51565b80601f01602080910402602001604051908101604052809291908181526020018280546118c690613a51565b80156119135780601f106118e857610100808354040283529160200191611913565b820191906000526020600020905b8154815290600101906020018083116118f657829003601f168201915b5050505050905090565b61192561203d565b80600d8190555050565b600d5481565b61193d6121e8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119a2576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006119af6121e8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611a5c6121e8565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611aa19190613618565b60405180910390a35050565b6000601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082600a8110611b0057611aff613bbb565b5b0154905092915050565b60136020528060005260406000206000915090505481565b600e5481565b611b338484846121f9565b60008373ffffffffffffffffffffffffffffffffffffffff163b14611b9557611b5e84848484612841565b611b94576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b600a8054611ba890613a51565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd490613a51565b8015611c215780601f10611bf657610100808354040283529160200191611c21565b820191906000526020600020905b815481529060010190602001808311611c0457829003601f168201915b505050505081565b6060611c34826120bb565b611c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6a906136d5565b60405180910390fd5b6000611c7d6129a1565b90506000815111611c9d5760405180602001604052806000815250611ccb565b80611ca784612a33565b600a604051602001611cbb9392919061356b565b6040516020818303038152906040525b915050919050565b60006015600083815260200190815260200160002060009054906101000a900460ff169050919050565b600b5481565b600060146000838152602001908152602001600020549050919050565b611d2861203d565b80600a9080519060200190611d3e929190612bb2565b5050565b611d4a61203d565b8060126000848152602001908152602001600020819055505050565b611d6e61203d565b81601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082600a8110611dc057611dbf613bbb565b5b0181905550505050565b611dd261203d565b60005b8351811015611e62578260106000868481518110611df657611df5613bbb565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083600a8110611e4a57611e49613bbb565b5b01819055508080611e5a90613ab4565b915050611dd5565b50505050565b611e7061203d565b8060146000848152602001908152602001600020819055505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f2861203d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8f90613655565b60405180910390fd5b611fa18161277b565b50565b611fac61203d565b60005b82829050811015611fff57611fec838383818110611fd057611fcf613bbb565b5b9050602002016020810190611fe59190612e92565b60016125c1565b8080611ff790613ab4565b915050611faf565b508181905060136000808152602001908152602001600020546120229190613886565b60136000808152602001908152602001600020819055505050565b612045612b94565b73ffffffffffffffffffffffffffffffffffffffff16612063611861565b73ffffffffffffffffffffffffffffffffffffffff16146120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090613695565b60405180910390fd5b565b6000816120c66121f0565b111580156120d5575060005482105b8015612113575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600080829050806121296121f0565b116121b1576000548110156121b05760006004600083815260200190815260200160002054905060007c0100000000000000000000000000000000000000000000000000000000821614156121ae575b60008114156121a4576004600083600190039350838152602001908152602001600020549050612179565b80925050506121e3565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b60006001905090565b60006122048261211a565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461226b576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008573ffffffffffffffffffffffffffffffffffffffff166122c46121e8565b73ffffffffffffffffffffffffffffffffffffffff1614806122f357506122f2866122ed6121e8565b611e8c565b5b8061233057506123016121e8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905080612369576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061237486612771565b14156123ac576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6123b98686866001612b9c565b60006123c483612771565b14612400576006600085815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b6124c787612771565b1717600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416141561255157600060018501905060006004600083815260200190815260200160002054141561254f57600054811461254e578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125b98686866001612ba2565b505050505050565b60008054905060006125d284612771565b141561260a576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000821415612645576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6126526000848385612b9c565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e16126b760018414612ba8565b901b60a042901b6126c785612771565b171760046000838152602001908152602001600020819055506000819050600083820190505b818060010192508573ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106126ed5781600081905550505061276c6000848385612ba2565b505050565b6000819050919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026128676121e8565b8786866040518563ffffffff1660e01b815260040161288994939291906135cc565b602060405180830381600087803b1580156128a357600080fd5b505af19250505080156128d457506040513d601f19601f820116820180604052508101906128d191906131be565b60015b61294e573d8060008114612904576040519150601f19603f3d011682016040523d82523d6000602084013e612909565b606091505b50600081511415612946576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600980546129b090613a51565b80601f01602080910402602001604051908101604052809291908181526020018280546129dc90613a51565b8015612a295780601f106129fe57610100808354040283529160200191612a29565b820191906000526020600020905b815481529060010190602001808311612a0c57829003601f168201915b5050505050905090565b60606000821415612a7b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b8f565b600082905060005b60008214612aad578080612a9690613ab4565b915050600a82612aa691906138dc565b9150612a83565b60008167ffffffffffffffff811115612ac957612ac8613bea565b5b6040519080825280601f01601f191660200182016040528015612afb5781602001600182028036833780820191505090505b5090505b60008514612b8857600182612b149190613967565b9150600a85612b239190613afd565b6030612b2f9190613886565b60f81b818381518110612b4557612b44613bbb565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b8191906138dc565b9450612aff565b8093505050505b919050565b600033905090565b50505050565b50505050565b6000819050919050565b828054612bbe90613a51565b90600052602060002090601f016020900481019282612be05760008555612c27565b82601f10612bf957805160ff1916838001178555612c27565b82800160010185558215612c27579182015b82811115612c26578251825591602001919060010190612c0b565b5b509050612c349190612c38565b5090565b5b80821115612c51576000816000905550600101612c39565b5090565b6000612c68612c6384613795565b613770565b90508083825260208201905082856020860282011115612c8b57612c8a613c23565b5b60005b85811015612cbb5781612ca18882612d49565b845260208401935060208301925050600181019050612c8e565b5050509392505050565b6000612cd8612cd3846137c1565b613770565b905082815260208101848484011115612cf457612cf3613c28565b5b612cff848285613a0f565b509392505050565b6000612d1a612d15846137f2565b613770565b905082815260208101848484011115612d3657612d35613c28565b5b612d41848285613a0f565b509392505050565b600081359050612d5881613e77565b92915050565b60008083601f840112612d7457612d73613c1e565b5b8235905067ffffffffffffffff811115612d9157612d90613c19565b5b602083019150836020820283011115612dad57612dac613c23565b5b9250929050565b600082601f830112612dc957612dc8613c1e565b5b8135612dd9848260208601612c55565b91505092915050565b600081359050612df181613e8e565b92915050565b600081359050612e0681613ea5565b92915050565b600081519050612e1b81613ea5565b92915050565b600082601f830112612e3657612e35613c1e565b5b8135612e46848260208601612cc5565b91505092915050565b600082601f830112612e6457612e63613c1e565b5b8135612e74848260208601612d07565b91505092915050565b600081359050612e8c81613ebc565b92915050565b600060208284031215612ea857612ea7613c32565b5b6000612eb684828501612d49565b91505092915050565b60008060408385031215612ed657612ed5613c32565b5b6000612ee485828601612d49565b9250506020612ef585828601612d49565b9150509250929050565b600080600060608486031215612f1857612f17613c32565b5b6000612f2686828701612d49565b9350506020612f3786828701612d49565b9250506040612f4886828701612e7d565b9150509250925092565b60008060008060808587031215612f6c57612f6b613c32565b5b6000612f7a87828801612d49565b9450506020612f8b87828801612d49565b9350506040612f9c87828801612e7d565b925050606085013567ffffffffffffffff811115612fbd57612fbc613c2d565b5b612fc987828801612e21565b91505092959194509250565b60008060408385031215612fec57612feb613c32565b5b6000612ffa85828601612d49565b925050602061300b85828601612de2565b9150509250929050565b6000806040838503121561302c5761302b613c32565b5b600061303a85828601612d49565b925050602061304b85828601612e7d565b9150509250929050565b60008060006060848603121561306e5761306d613c32565b5b600061307c86828701612d49565b935050602061308d86828701612e7d565b925050604061309e86828701612e7d565b9150509250925092565b600080602083850312156130bf576130be613c32565b5b600083013567ffffffffffffffff8111156130dd576130dc613c2d565b5b6130e985828601612d5e565b92509250509250929050565b60008060006060848603121561310e5761310d613c32565b5b600084013567ffffffffffffffff81111561312c5761312b613c2d565b5b61313886828701612db4565b935050602061314986828701612e7d565b925050604061315a86828701612e7d565b9150509250925092565b60006020828403121561317a57613179613c32565b5b600061318884828501612de2565b91505092915050565b6000602082840312156131a7576131a6613c32565b5b60006131b584828501612df7565b91505092915050565b6000602082840312156131d4576131d3613c32565b5b60006131e284828501612e0c565b91505092915050565b60006020828403121561320157613200613c32565b5b600082013567ffffffffffffffff81111561321f5761321e613c2d565b5b61322b84828501612e4f565b91505092915050565b60006020828403121561324a57613249613c32565b5b600061325884828501612e7d565b91505092915050565b6000806040838503121561327857613277613c32565b5b600061328685828601612e7d565b925050602061329785828601612de2565b9150509250929050565b600080604083850312156132b8576132b7613c32565b5b60006132c685828601612e7d565b92505060206132d785828601612e7d565b9150509250929050565b6132ea8161399b565b82525050565b6132f9816139ad565b82525050565b600061330a82613838565b613314818561384e565b9350613324818560208601613a1e565b61332d81613c37565b840191505092915050565b600061334382613843565b61334d818561386a565b935061335d818560208601613a1e565b61336681613c37565b840191505092915050565b600061337c82613843565b613386818561387b565b9350613396818560208601613a1e565b80840191505092915050565b600081546133af81613a51565b6133b9818661387b565b945060018216600081146133d457600181146133e557613418565b60ff19831686528186019350613418565b6133ee85613823565b60005b83811015613410578154818901526001820191506020810190506133f1565b838801955050505b50505092915050565b600061342e60268361386a565b915061343982613c48565b604082019050919050565b6000613451602f8361386a565b915061345c82613c97565b604082019050919050565b600061347460208361386a565b915061347f82613ce6565b602082019050919050565b6000613497603d8361386a565b91506134a282613d0f565b604082019050919050565b60006134ba602f8361386a565b91506134c582613d5e565b604082019050919050565b60006134dd60178361386a565b91506134e882613dad565b602082019050919050565b600061350060008361385f565b915061350b82613dd6565b600082019050919050565b6000613523602a8361386a565b915061352e82613dd9565b604082019050919050565b600061354660268361386a565b915061355182613e28565b604082019050919050565b61356581613a05565b82525050565b60006135778286613371565b91506135838285613371565b915061358f82846133a2565b9150819050949350505050565b60006135a7826134f3565b9150819050919050565b60006020820190506135c660008301846132e1565b92915050565b60006080820190506135e160008301876132e1565b6135ee60208301866132e1565b6135fb604083018561355c565b818103606083015261360d81846132ff565b905095945050505050565b600060208201905061362d60008301846132f0565b92915050565b6000602082019050818103600083015261364d8184613338565b905092915050565b6000602082019050818103600083015261366e81613421565b9050919050565b6000602082019050818103600083015261368e81613444565b9050919050565b600060208201905081810360008301526136ae81613467565b9050919050565b600060208201905081810360008301526136ce8161348a565b9050919050565b600060208201905081810360008301526136ee816134ad565b9050919050565b6000602082019050818103600083015261370e816134d0565b9050919050565b6000602082019050818103600083015261372e81613516565b9050919050565b6000602082019050818103600083015261374e81613539565b9050919050565b600060208201905061376a600083018461355c565b92915050565b600061377a61378b565b90506137868282613a83565b919050565b6000604051905090565b600067ffffffffffffffff8211156137b0576137af613bea565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156137dc576137db613bea565b5b6137e582613c37565b9050602081019050919050565b600067ffffffffffffffff82111561380d5761380c613bea565b5b61381682613c37565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061389182613a05565b915061389c83613a05565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156138d1576138d0613b2e565b5b828201905092915050565b60006138e782613a05565b91506138f283613a05565b92508261390257613901613b5d565b5b828204905092915050565b600061391882613a05565b915061392383613a05565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561395c5761395b613b2e565b5b828202905092915050565b600061397282613a05565b915061397d83613a05565b9250828210156139905761398f613b2e565b5b828203905092915050565b60006139a6826139e5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613a3c578082015181840152602081019050613a21565b83811115613a4b576000848401525b50505050565b60006002820490506001821680613a6957607f821691505b60208210811415613a7d57613a7c613b8c565b5b50919050565b613a8c82613c37565b810181811067ffffffffffffffff82111715613aab57613aaa613bea565b5b80604052505050565b6000613abf82613a05565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613af257613af1613b2e565b5b600182019050919050565b6000613b0882613a05565b9150613b1383613a05565b925082613b2357613b22613b5d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4e6f74207065726d697474656420746f206d696e7420647572696e672074686960008201527f732073616c657320706572696f642e0000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f457863656564656420746865206e756d626572206f66206d696e74732070657260008201527f6d697474656420666f7220746869732073616c657320706572696f642e000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f54686520707269636520697320696e636f72726563742e000000000000000000600082015250565b50565b7f546865206d696e74206e756d20686173206265656e2065786365656465642e2860008201527f4f6e20506572696f642900000000000000000000000000000000000000000000602082015250565b7f546865206d696e74206e756d20686173206265656e2065786365656465642e2860008201527f546f74616c290000000000000000000000000000000000000000000000000000602082015250565b613e808161399b565b8114613e8b57600080fd5b50565b613e97816139ad565b8114613ea257600080fd5b50565b613eae816139b9565b8114613eb957600080fd5b50565b613ec581613a05565b8114613ed057600080fd5b5056fea264697066735822122086435d36f29db06585e3c60574616fd50636f1698de6c8f1780079b6efc5ce7464736f6c63430008070033

Deployed Bytecode Sourcemap

346:6980:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4874:607:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5534:77:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9772:98:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11773:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11249:463;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;913:46:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6728:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3957:309:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;537:33:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12633:164:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1048:37:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1365:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7137:187;;;:::i;:::-;;2317:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12863:179:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4840:138:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1256:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5274:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;731:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2436:1334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9568:142:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6151:145:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;429:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;796:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5540:231:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1831:101:0;;;;;;;;;;;;;:::i;:::-;;5855:120:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4524:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4401:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1201:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9934:102:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5617::2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;604:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12040:303:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4684:150:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1145:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;686:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13108:385:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;456:37:2;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3776:619;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5124:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;499:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4984:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5382:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5725:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6302:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6472:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5981:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12409:162:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2081:198:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6876:255:2;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4874:607:3;4959:4;5269:10;5254:25;;:11;:25;;;;:101;;;;5345:10;5330:25;;:11;:25;;;;5254:101;:177;;;;5421:10;5406:25;;:11;:25;;;;5254:177;5235:196;;4874:607;;;:::o;5534:77:2:-;1094:13:0;:11;:13::i;:::-;5598:6:2::1;5589;;:15;;;;;;;;;;;;;;;;;;5534:77:::0;:::o;9772:98:3:-;9826:13;9858:5;9851:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9772:98;:::o;11773:200::-;11841:7;11865:16;11873:7;11865;:16::i;:::-;11860:64;;11890:34;;;;;;;;;;;;;;11860:64;11942:15;:24;11958:7;11942:24;;;;;;;;;;;;;;;;;;;;;11935:31;;11773:200;;;:::o;11249:463::-;11321:13;11353:27;11372:7;11353:18;:27::i;:::-;11321:61;;11402:5;11396:11;;:2;:11;;;11392:48;;;11416:24;;;;;;;;;;;;;;11392:48;11478:5;11455:28;;:19;:17;:19::i;:::-;:28;;;11451:172;;11502:44;11519:5;11526:19;:17;:19::i;:::-;11502:16;:44::i;:::-;11497:126;;11573:35;;;;;;;;;;;;;;11497:126;11451:172;11660:2;11633:15;:24;11649:7;11633:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11697:7;11693:2;11677:28;;11686:5;11677:28;;;;;;;;;;;;11311:401;11249:463;;:::o;913:46:2:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6728:142::-;1094:13:0;:11;:13::i;:::-;6862:1:2::1;6828:11;:18;6840:5;6828:18;;;;;;;;;;;;;;;6847:11;6828:31;;;;;;;:::i;:::-;;;:35;;;;6728:142:::0;;:::o;3957:309:3:-;4010:7;4234:15;:13;:15::i;:::-;4219:12;;4203:13;;:28;:46;4196:53;;3957:309;:::o;537:33:2:-;;;;:::o;12633:164:3:-;12762:28;12772:4;12778:2;12782:7;12762:9;:28::i;:::-;12633:164;;;:::o;1048:37:2:-;;;;;;;;;;;;;;;;;:::o;1365:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;7137:187::-;1094:13:0;:11;:13::i;:::-;7193:12:2::1;7219:10;7211:24;;7256:21;7211:80;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7192:99;;;7309:7;7301:16;;;::::0;::::1;;7182:142;7137:187::o:0;2317:113::-;2390:33;2403:3;2408:11;2421:1;2390:12;:33::i;:::-;2317:113;;:::o;12863:179:3:-;12996:39;13013:4;13019:2;13023:7;12996:39;;;;;;;;;;;;:16;:39::i;:::-;12863:179;;;:::o;4840:138:2:-;4913:7;4939:19;:32;4959:11;4939:32;;;;;;;;;;;;4932:39;;4840:138;;;:::o;1256:49::-;;;;;;;;;;;;;;;;;:::o;5274:102::-;1094:13:0;:11;:13::i;:::-;5358:11:2::1;5348:7;:21;;;;;;;;;;;;:::i;:::-;;5274:102:::0;:::o;731:26::-;;;;;;;;;;;;;:::o;2436:1334::-;2538:14;2555:13;:11;:13::i;:::-;2538:30;;2587:6;;;;;;;;;;;2586:7;2578:16;;;;;;2626:1;2612:11;:15;2604:24;;;;;;2670:9;;2655:11;2646:6;:20;;;;:::i;:::-;:33;;2638:42;;;;;;2709:7;:5;:7::i;:::-;2695:21;;:10;:21;;;2691:832;;2755:13;;2740:11;:28;;2732:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;2883:17;:30;2901:11;2883:30;;;;;;;;;;;;2868:11;2833:19;:32;2853:11;2833:32;;;;;;;;;;;;:46;;;;:::i;:::-;:80;;2825:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;3016:11;2995:5;:18;3001:11;2995:18;;;;;;;;;;;;:32;;;;:::i;:::-;2982:9;:45;;2974:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;3097:1;3082:11;:16;;3081:59;;;;;3134:5;3104:35;;:13;:26;3118:11;3104:26;;;;;;;;;;;;;;;;;;;;;:35;;;3081:59;:106;;;;;3185:1;3145:11;:23;3157:10;3145:23;;;;;;;;;;;;;;;3169:11;3145:36;;;;;;;:::i;:::-;;;;:41;3081:106;3078:201;;;3207:57;;;;;;;;;;:::i;:::-;;;;;;;;3078:201;3311:1;3296:11;:16;;3295:112;;;;;3370:11;:23;3382:10;3370:23;;;;;;;;;;;;;;;3394:11;3370:36;;;;;;;:::i;:::-;;;;3332:10;:22;3343:10;3332:22;;;;;;;;;;;;;;;3355:11;3332:35;;;;;;;:::i;:::-;;;;3318:11;:49;;;;:::i;:::-;:88;3295:112;3292:221;;;3427:71;;;;;;;;;;:::i;:::-;;;;;;;;3292:221;2691:832;3566:23;3572:3;3577:11;3566:5;:23::i;:::-;3661:11;3630:10;:15;3641:3;3630:15;;;;;;;;;;;;;;;3646:11;3630:28;;;;;;;:::i;:::-;;;;:42;;;;:::i;:::-;3599:10;:15;3610:3;3599:15;;;;;;;;;;;;;;;3615:11;3599:28;;;;;;;:::i;:::-;;;:73;;;;3752:11;3717:19;:32;3737:11;3717:32;;;;;;;;;;;;:46;;;;:::i;:::-;3682:19;:32;3702:11;3682:32;;;;;;;;;;;:81;;;;2528:1242;2436:1334;;;:::o;9568:142:3:-;9632:7;9674:27;9693:7;9674:18;:27::i;:::-;9651:52;;9568:142;;;:::o;6151:145:2:-;1094:13:0;:11;:13::i;:::-;6275:14:2::1;6246:13;:26;6260:11;6246:26;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;6151:145:::0;;:::o;429:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;796:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5540:231:3:-;5604:7;5655:1;5627:24;5645:5;5627:17;:24::i;:::-;:29;5623:70;;;5665:28;;;;;;;;;;;;;;5623:70;1017:13;5710:18;:25;5729:5;5710:25;;;;;;;;;;;;;;;;:54;5703:61;;5540:231;;;:::o;1831:101:0:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;5855:120:2:-;1094:13:0;:11;:13::i;:::-;5951:17:2::1;5935:13;:33;;;;5855:120:::0;:::o;4524:154::-;4614:7;4640:11;:18;4652:5;4640:18;;;;;;;;;;;;;;;4659:11;4640:31;;;;;;;:::i;:::-;;;;4633:38;;4524:154;;;;:::o;4401:117::-;4468:7;4493:5;:18;4499:11;4493:18;;;;;;;;;;;;4486:25;;4401:117;;;:::o;1201:85:0:-;1247:7;1273:6;;;;;;;;;;;1266:13;;1201:85;:::o;9934:102:3:-;9990:13;10022:7;10015:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9934:102;:::o;5617::2:-;1094:13:0;:11;:13::i;:::-;5701:11:2::1;5688:10;:24;;;;5617:102:::0;:::o;604:29::-;;;;:::o;12040:303:3:-;12150:19;:17;:19::i;:::-;12138:31;;:8;:31;;;12134:61;;;12178:17;;;;;;;;;;;;;;12134:61;12258:8;12206:18;:39;12225:19;:17;:19::i;:::-;12206:39;;;;;;;;;;;;;;;:49;12246:8;12206:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;12317:8;12281:55;;12296:19;:17;:19::i;:::-;12281:55;;;12327:8;12281:55;;;;;;:::i;:::-;;;;;;;;12040:303;;:::o;4684:150:2:-;4771:7;4797:10;:17;4808:5;4797:17;;;;;;;;;;;;;;;4815:11;4797:30;;;;;;;:::i;:::-;;;;4790:37;;4684:150;;;;:::o;1145:51::-;;;;;;;;;;;;;;;;;:::o;686:39::-;;;;:::o;13108:385:3:-;13269:28;13279:4;13285:2;13289:7;13269:9;:28::i;:::-;13329:1;13311:2;:14;;;:19;13307:180;;13349:56;13380:4;13386:2;13390:7;13399:5;13349:30;:56::i;:::-;13344:143;;13432:40;;;;;;;;;;;;;;13344:143;13307:180;13108:385;;;;:::o;456:37:2:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3776:619::-;3889:13;3939:16;3947:7;3939;:16::i;:::-;3918:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;4039:28;4070:10;:8;:10::i;:::-;4039:41;;4140:1;4115:14;4109:28;:32;:279;;;;;;;;;;;;;;;;;4230:14;4270:18;:7;:16;:18::i;:::-;4314:13;4188:161;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4109:279;4090:298;;;3776:619;;;:::o;5124:123::-;5191:4;5214:13;:26;5228:11;5214:26;;;;;;;;;;;;;;;;;;;;;5207:33;;5124:123;;;:::o;499:32::-;;;;:::o;4984:134::-;5055:7;5081:17;:30;5099:11;5081:30;;;;;;;;;;;;5074:37;;4984:134;;;:::o;5382:146::-;1094:13:0;:11;:13::i;:::-;5504:17:2::1;5488:13;:33;;;;;;;;;;;;:::i;:::-;;5382:146:::0;:::o;5725:124::-;1094:13:0;:11;:13::i;:::-;5836:6:2::1;5815:5;:18;5821:11;5815:18;;;;;;;;;;;:27;;;;5725:124:::0;;:::o;6302:164::-;1094:13:0;:11;:13::i;:::-;6451:8:2::1;6417:11;:18;6429:5;6417:18;;;;;;;;;;;;;;;6436:11;6417:31;;;;;;;:::i;:::-;;;:42;;;;6302:164:::0;;;:::o;6472:250::-;1094:13:0;:11;:13::i;:::-;6606:9:2::1;6601:115;6625:6;:13;6621:1;:17;6601:115;;;6697:8;6659:11;:22;6671:6;6678:1;6671:9;;;;;;;;:::i;:::-;;;;;;;;6659:22;;;;;;;;;;;;;;;6682:11;6659:35;;;;;;;:::i;:::-;;;:46;;;;6640:3;;;;;:::i;:::-;;;;6601:115;;;;6472:250:::0;;;:::o;5981:164::-;1094:13:0;:11;:13::i;:::-;6120:18:2::1;6087:17;:30;6105:11;6087:30;;;;;;;;;;;:51;;;;5981:164:::0;;:::o;12409:162:3:-;12506:4;12529:18;:25;12548:5;12529:25;;;;;;;;;;;;;;;:35;12555:8;12529:35;;;;;;;;;;;;;;;;;;;;;;;;;12522:42;;12409:162;;;;:::o;2081:198:0:-;1094:13;:11;:13::i;:::-;2189:1:::1;2169:22;;:8;:22;;;;2161:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2244:28;2263:8;2244:18;:28::i;:::-;2081:198:::0;:::o;6876:255:2:-;1094:13:0;:11;:13::i;:::-;6960:6:2::1;6955:93;6976:10;;:17;;6972:1;:21;6955:93;;;7014:23;7020:10;;7031:1;7020:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;7035:1;7014:5;:23::i;:::-;6995:3;;;;;:::i;:::-;;;;6955:93;;;;7107:10;;:17;;7082:19;:22;7102:1:::0;7082:22:::1;;;;;;;;;;;;:42;;;;:::i;:::-;7057:19;:22;7077:1:::0;7057:22:::1;;;;;;;;;;;:67;;;;6876:255:::0;;:::o;1359:130:0:-;1433:12;:10;:12::i;:::-;1422:23;;:7;:5;:7::i;:::-;:23;;;1414:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1359:130::o;13739:268:3:-;13796:4;13850:7;13831:15;:13;:15::i;:::-;:26;;:65;;;;;13883:13;;13873:7;:23;13831:65;:150;;;;;13980:1;1769:8;13933:17;:26;13951:7;13933:26;;;;;;;;;;;;:43;:48;13831:150;13812:169;;13739:268;;;:::o;7145:1105::-;7212:7;7231:12;7246:7;7231:22;;7311:4;7292:15;:13;:15::i;:::-;:23;7288:898;;7344:13;;7337:4;:20;7333:853;;;7381:14;7398:17;:23;7416:4;7398:23;;;;;;;;;;;;7381:40;;7512:1;1769:8;7485:6;:23;:28;7481:687;;;7996:111;8013:1;8003:6;:11;7996:111;;;8055:17;:25;8073:6;;;;;;;8055:25;;;;;;;;;;;;8046:34;;7996:111;;;8139:6;8132:13;;;;;;7481:687;7359:827;7333:853;7288:898;8212:31;;;;;;;;;;;;;;7145:1105;;;;:::o;27642:103::-;27702:7;27728:10;27721:17;;27642:103;:::o;2195:99:2:-;2260:7;2286:1;2279:8;;2195:99;:::o;18859:2595:3:-;18969:27;18999;19018:7;18999:18;:27::i;:::-;18969:57;;19082:4;19041:45;;19057:19;19041:45;;;19037:86;;19095:28;;;;;;;;;;;;;;19037:86;19134:23;19160:15;:24;19176:7;19160:24;;;;;;;;;;;;;;;;;;;;;19134:50;;19195:22;19244:4;19221:27;;:19;:17;:19::i;:::-;:27;;;:86;;;;19264:43;19281:4;19287:19;:17;:19::i;:::-;19264:16;:43::i;:::-;19221:86;:140;;;;19342:19;:17;:19::i;:::-;19323:38;;:15;:38;;;19221:140;19195:167;;19378:17;19373:66;;19404:35;;;;;;;;;;;;;;19373:66;19478:1;19453:21;19471:2;19453:17;:21::i;:::-;:26;19449:62;;;19488:23;;;;;;;;;;;;;;19449:62;19522:43;19544:4;19550:2;19554:7;19563:1;19522:21;:43::i;:::-;19670:1;19632:34;19650:15;19632:17;:34::i;:::-;:39;19628:101;;19694:15;:24;19710:7;19694:24;;;;;;;;;;;;19687:31;;;;;;;;;;;19628:101;20089:18;:24;20108:4;20089:24;;;;;;;;;;;;;;;;20087:26;;;;;;;;;;;;20157:18;:22;20176:2;20157:22;;;;;;;;;;;;;;;;20155:24;;;;;;;;;;;2041:8;1656:3;20529:15;:41;;20488:21;20506:2;20488:17;:21::i;:::-;:83;:126;20443:17;:26;20461:7;20443:26;;;;;;;;;;;:171;;;;20781:1;2041:8;20731:19;:46;:51;20727:616;;;20802:19;20834:1;20824:7;:11;20802:33;;20989:1;20955:17;:30;20973:11;20955:30;;;;;;;;;;;;:35;20951:378;;;21091:13;;21076:11;:28;21072:239;;21269:19;21236:17;:30;21254:11;21236:30;;;;;;;;;;;:52;;;;21072:239;20951:378;20784:559;20727:616;21387:7;21383:2;21368:27;;21377:4;21368:27;;;;;;;;;;;;21405:42;21426:4;21432:2;21436:7;21445:1;21405:20;:42::i;:::-;18959:2495;;;18859:2595;;;:::o;16989:1628::-;17053:20;17076:13;;17053:36;;17128:1;17103:21;17121:2;17103:17;:21::i;:::-;:26;17099:58;;;17138:19;;;;;;;;;;;;;;17099:58;17183:1;17171:8;:13;17167:44;;;17193:18;;;;;;;;;;;;;;17167:44;17222:61;17252:1;17256:2;17260:12;17274:8;17222:21;:61::i;:::-;17815:1;1151:2;17786:1;:25;;17785:31;17773:8;:44;17747:18;:22;17766:2;17747:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;1909:3;18206:29;18233:1;18221:8;:13;18206:14;:29::i;:::-;:56;;1656:3;18144:15;:41;;18103:21;18121:2;18103:17;:21::i;:::-;:83;:160;18053:17;:31;18071:12;18053:31;;;;;;;;;;;:210;;;;18278:20;18301:12;18278:35;;18327:11;18356:8;18341:12;:23;18327:37;;18379:109;18430:14;;;;;;18426:2;18405:40;;18422:1;18405:40;;;;;;;;;;;;18483:3;18468:12;:18;18379:109;;18518:12;18502:13;:28;;;;17530:1011;;18550:60;18579:1;18583:2;18587:12;18601:8;18550:20;:60::i;:::-;17043:1574;16989:1628;;:::o;10828:144::-;10892:14;10951:5;10941:15;;10828:144;;;:::o;2433:187:0:-;2506:16;2525:6;;;;;;;;;;;2506:25;;2550:8;2541:6;;:17;;;;;;;;;;;;;;;;;;2604:8;2573:40;;2594:8;2573:40;;;;;;;;;;;;2496:124;2433:187;:::o;25182:697:3:-;25340:4;25385:2;25360:45;;;25406:19;:17;:19::i;:::-;25427:4;25433:7;25442:5;25360:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25356:517;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25655:1;25638:6;:13;:18;25634:229;;;25683:40;;;;;;;;;;;;;;25634:229;25823:6;25817:13;25808:6;25804:2;25800:15;25793:38;25356:517;25526:54;;;25516:64;;;:6;:64;;;;25509:71;;;25182:697;;;;;;:::o;2083:106:2:-;2143:13;2175:7;2168:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2083:106;:::o;275:703:5:-;331:13;557:1;548:5;:10;544:51;;;574:10;;;;;;;;;;;;;;;;;;;;;544:51;604:12;619:5;604:20;;634:14;658:75;673:1;665:4;:9;658:75;;690:8;;;;;:::i;:::-;;;;720:2;712:10;;;;;:::i;:::-;;;658:75;;;742:19;774:6;764:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;742:39;;791:150;807:1;798:5;:10;791:150;;834:1;824:11;;;;;:::i;:::-;;;900:2;892:5;:10;;;;:::i;:::-;879:2;:24;;;;:::i;:::-;866:39;;849:6;856;849:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;928:2;919:11;;;;;:::i;:::-;;;791:150;;;964:6;950:21;;;;;275:703;;;;:::o;640:96:1:-;693:7;719:10;712:17;;640:96;:::o;26510:154:3:-;;;;;:::o;27305:153::-;;;;;:::o;11054:138::-;11112:14;11171:5;11161:15;;11054:138;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:6:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:568::-;1821:8;1831:6;1881:3;1874:4;1866:6;1862:17;1858:27;1848:122;;1889:79;;:::i;:::-;1848:122;2002:6;1989:20;1979:30;;2032:18;2024:6;2021:30;2018:117;;;2054:79;;:::i;:::-;2018:117;2168:4;2160:6;2156:17;2144:29;;2222:3;2214:4;2206:6;2202:17;2192:8;2188:32;2185:41;2182:128;;;2229:79;;:::i;:::-;2182:128;1748:568;;;;;:::o;2339:370::-;2410:5;2459:3;2452:4;2444:6;2440:17;2436:27;2426:122;;2467:79;;:::i;:::-;2426:122;2584:6;2571:20;2609:94;2699:3;2691:6;2684:4;2676:6;2672:17;2609:94;:::i;:::-;2600:103;;2416:293;2339:370;;;;:::o;2715:133::-;2758:5;2796:6;2783:20;2774:29;;2812:30;2836:5;2812:30;:::i;:::-;2715:133;;;;:::o;2854:137::-;2899:5;2937:6;2924:20;2915:29;;2953:32;2979:5;2953:32;:::i;:::-;2854:137;;;;:::o;2997:141::-;3053:5;3084:6;3078:13;3069:22;;3100:32;3126:5;3100:32;:::i;:::-;2997:141;;;;:::o;3157:338::-;3212:5;3261:3;3254:4;3246:6;3242:17;3238:27;3228:122;;3269:79;;:::i;:::-;3228:122;3386:6;3373:20;3411:78;3485:3;3477:6;3470:4;3462:6;3458:17;3411:78;:::i;:::-;3402:87;;3218:277;3157:338;;;;:::o;3515:340::-;3571:5;3620:3;3613:4;3605:6;3601:17;3597:27;3587:122;;3628:79;;:::i;:::-;3587:122;3745:6;3732:20;3770:79;3845:3;3837:6;3830:4;3822:6;3818:17;3770:79;:::i;:::-;3761:88;;3577:278;3515:340;;;;:::o;3861:139::-;3907:5;3945:6;3932:20;3923:29;;3961:33;3988:5;3961:33;:::i;:::-;3861:139;;;;:::o;4006:329::-;4065:6;4114:2;4102:9;4093:7;4089:23;4085:32;4082:119;;;4120:79;;:::i;:::-;4082:119;4240:1;4265:53;4310:7;4301:6;4290:9;4286:22;4265:53;:::i;:::-;4255:63;;4211:117;4006:329;;;;:::o;4341:474::-;4409:6;4417;4466:2;4454:9;4445:7;4441:23;4437:32;4434:119;;;4472:79;;:::i;:::-;4434:119;4592:1;4617:53;4662:7;4653:6;4642:9;4638:22;4617:53;:::i;:::-;4607:63;;4563:117;4719:2;4745:53;4790:7;4781:6;4770:9;4766:22;4745:53;:::i;:::-;4735:63;;4690:118;4341:474;;;;;:::o;4821:619::-;4898:6;4906;4914;4963:2;4951:9;4942:7;4938:23;4934:32;4931:119;;;4969:79;;:::i;:::-;4931:119;5089:1;5114:53;5159:7;5150:6;5139:9;5135:22;5114:53;:::i;:::-;5104:63;;5060:117;5216:2;5242:53;5287:7;5278:6;5267:9;5263:22;5242:53;:::i;:::-;5232:63;;5187:118;5344:2;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5315:118;4821:619;;;;;:::o;5446:943::-;5541:6;5549;5557;5565;5614:3;5602:9;5593:7;5589:23;5585:33;5582:120;;;5621:79;;:::i;:::-;5582:120;5741:1;5766:53;5811:7;5802:6;5791:9;5787:22;5766:53;:::i;:::-;5756:63;;5712:117;5868:2;5894:53;5939:7;5930:6;5919:9;5915:22;5894:53;:::i;:::-;5884:63;;5839:118;5996:2;6022:53;6067:7;6058:6;6047:9;6043:22;6022:53;:::i;:::-;6012:63;;5967:118;6152:2;6141:9;6137:18;6124:32;6183:18;6175:6;6172:30;6169:117;;;6205:79;;:::i;:::-;6169:117;6310:62;6364:7;6355:6;6344:9;6340:22;6310:62;:::i;:::-;6300:72;;6095:287;5446:943;;;;;;;:::o;6395:468::-;6460:6;6468;6517:2;6505:9;6496:7;6492:23;6488:32;6485:119;;;6523:79;;:::i;:::-;6485:119;6643:1;6668:53;6713:7;6704:6;6693:9;6689:22;6668:53;:::i;:::-;6658:63;;6614:117;6770:2;6796:50;6838:7;6829:6;6818:9;6814:22;6796:50;:::i;:::-;6786:60;;6741:115;6395:468;;;;;:::o;6869:474::-;6937:6;6945;6994:2;6982:9;6973:7;6969:23;6965:32;6962:119;;;7000:79;;:::i;:::-;6962:119;7120:1;7145:53;7190:7;7181:6;7170:9;7166:22;7145:53;:::i;:::-;7135:63;;7091:117;7247:2;7273:53;7318:7;7309:6;7298:9;7294:22;7273:53;:::i;:::-;7263:63;;7218:118;6869:474;;;;;:::o;7349:619::-;7426:6;7434;7442;7491:2;7479:9;7470:7;7466:23;7462:32;7459:119;;;7497:79;;:::i;:::-;7459:119;7617:1;7642:53;7687:7;7678:6;7667:9;7663:22;7642:53;:::i;:::-;7632:63;;7588:117;7744:2;7770:53;7815:7;7806:6;7795:9;7791:22;7770:53;:::i;:::-;7760:63;;7715:118;7872:2;7898:53;7943:7;7934:6;7923:9;7919:22;7898:53;:::i;:::-;7888:63;;7843:118;7349:619;;;;;:::o;7974:559::-;8060:6;8068;8117:2;8105:9;8096:7;8092:23;8088:32;8085:119;;;8123:79;;:::i;:::-;8085:119;8271:1;8260:9;8256:17;8243:31;8301:18;8293:6;8290:30;8287:117;;;8323:79;;:::i;:::-;8287:117;8436:80;8508:7;8499:6;8488:9;8484:22;8436:80;:::i;:::-;8418:98;;;;8214:312;7974:559;;;;;:::o;8539:829::-;8641:6;8649;8657;8706:2;8694:9;8685:7;8681:23;8677:32;8674:119;;;8712:79;;:::i;:::-;8674:119;8860:1;8849:9;8845:17;8832:31;8890:18;8882:6;8879:30;8876:117;;;8912:79;;:::i;:::-;8876:117;9017:78;9087:7;9078:6;9067:9;9063:22;9017:78;:::i;:::-;9007:88;;8803:302;9144:2;9170:53;9215:7;9206:6;9195:9;9191:22;9170:53;:::i;:::-;9160:63;;9115:118;9272:2;9298:53;9343:7;9334:6;9323:9;9319:22;9298:53;:::i;:::-;9288:63;;9243:118;8539:829;;;;;:::o;9374:323::-;9430:6;9479:2;9467:9;9458:7;9454:23;9450:32;9447:119;;;9485:79;;:::i;:::-;9447:119;9605:1;9630:50;9672:7;9663:6;9652:9;9648:22;9630:50;:::i;:::-;9620:60;;9576:114;9374:323;;;;:::o;9703:327::-;9761:6;9810:2;9798:9;9789:7;9785:23;9781:32;9778:119;;;9816:79;;:::i;:::-;9778:119;9936:1;9961:52;10005:7;9996:6;9985:9;9981:22;9961:52;:::i;:::-;9951:62;;9907:116;9703:327;;;;:::o;10036:349::-;10105:6;10154:2;10142:9;10133:7;10129:23;10125:32;10122:119;;;10160:79;;:::i;:::-;10122:119;10280:1;10305:63;10360:7;10351:6;10340:9;10336:22;10305:63;:::i;:::-;10295:73;;10251:127;10036:349;;;;:::o;10391:509::-;10460:6;10509:2;10497:9;10488:7;10484:23;10480:32;10477:119;;;10515:79;;:::i;:::-;10477:119;10663:1;10652:9;10648:17;10635:31;10693:18;10685:6;10682:30;10679:117;;;10715:79;;:::i;:::-;10679:117;10820:63;10875:7;10866:6;10855:9;10851:22;10820:63;:::i;:::-;10810:73;;10606:287;10391:509;;;;:::o;10906:329::-;10965:6;11014:2;11002:9;10993:7;10989:23;10985:32;10982:119;;;11020:79;;:::i;:::-;10982:119;11140:1;11165:53;11210:7;11201:6;11190:9;11186:22;11165:53;:::i;:::-;11155:63;;11111:117;10906:329;;;;:::o;11241:468::-;11306:6;11314;11363:2;11351:9;11342:7;11338:23;11334:32;11331:119;;;11369:79;;:::i;:::-;11331:119;11489:1;11514:53;11559:7;11550:6;11539:9;11535:22;11514:53;:::i;:::-;11504:63;;11460:117;11616:2;11642:50;11684:7;11675:6;11664:9;11660:22;11642:50;:::i;:::-;11632:60;;11587:115;11241:468;;;;;:::o;11715:474::-;11783:6;11791;11840:2;11828:9;11819:7;11815:23;11811:32;11808:119;;;11846:79;;:::i;:::-;11808:119;11966:1;11991:53;12036:7;12027:6;12016:9;12012:22;11991:53;:::i;:::-;11981:63;;11937:117;12093:2;12119:53;12164:7;12155:6;12144:9;12140:22;12119:53;:::i;:::-;12109:63;;12064:118;11715:474;;;;;:::o;12195:118::-;12282:24;12300:5;12282:24;:::i;:::-;12277:3;12270:37;12195:118;;:::o;12319:109::-;12400:21;12415:5;12400:21;:::i;:::-;12395:3;12388:34;12319:109;;:::o;12434:360::-;12520:3;12548:38;12580:5;12548:38;:::i;:::-;12602:70;12665:6;12660:3;12602:70;:::i;:::-;12595:77;;12681:52;12726:6;12721:3;12714:4;12707:5;12703:16;12681:52;:::i;:::-;12758:29;12780:6;12758:29;:::i;:::-;12753:3;12749:39;12742:46;;12524:270;12434:360;;;;:::o;12800:364::-;12888:3;12916:39;12949:5;12916:39;:::i;:::-;12971:71;13035:6;13030:3;12971:71;:::i;:::-;12964:78;;13051:52;13096:6;13091:3;13084:4;13077:5;13073:16;13051:52;:::i;:::-;13128:29;13150:6;13128:29;:::i;:::-;13123:3;13119:39;13112:46;;12892:272;12800:364;;;;:::o;13170:377::-;13276:3;13304:39;13337:5;13304:39;:::i;:::-;13359:89;13441:6;13436:3;13359:89;:::i;:::-;13352:96;;13457:52;13502:6;13497:3;13490:4;13483:5;13479:16;13457:52;:::i;:::-;13534:6;13529:3;13525:16;13518:23;;13280:267;13170:377;;;;:::o;13577:845::-;13680:3;13717:5;13711:12;13746:36;13772:9;13746:36;:::i;:::-;13798:89;13880:6;13875:3;13798:89;:::i;:::-;13791:96;;13918:1;13907:9;13903:17;13934:1;13929:137;;;;14080:1;14075:341;;;;13896:520;;13929:137;14013:4;14009:9;13998;13994:25;13989:3;13982:38;14049:6;14044:3;14040:16;14033:23;;13929:137;;14075:341;14142:38;14174:5;14142:38;:::i;:::-;14202:1;14216:154;14230:6;14227:1;14224:13;14216:154;;;14304:7;14298:14;14294:1;14289:3;14285:11;14278:35;14354:1;14345:7;14341:15;14330:26;;14252:4;14249:1;14245:12;14240:17;;14216:154;;;14399:6;14394:3;14390:16;14383:23;;14082:334;;13896:520;;13684:738;;13577:845;;;;:::o;14428:366::-;14570:3;14591:67;14655:2;14650:3;14591:67;:::i;:::-;14584:74;;14667:93;14756:3;14667:93;:::i;:::-;14785:2;14780:3;14776:12;14769:19;;14428:366;;;:::o;14800:::-;14942:3;14963:67;15027:2;15022:3;14963:67;:::i;:::-;14956:74;;15039:93;15128:3;15039:93;:::i;:::-;15157:2;15152:3;15148:12;15141:19;;14800:366;;;:::o;15172:::-;15314:3;15335:67;15399:2;15394:3;15335:67;:::i;:::-;15328:74;;15411:93;15500:3;15411:93;:::i;:::-;15529:2;15524:3;15520:12;15513:19;;15172:366;;;:::o;15544:::-;15686:3;15707:67;15771:2;15766:3;15707:67;:::i;:::-;15700:74;;15783:93;15872:3;15783:93;:::i;:::-;15901:2;15896:3;15892:12;15885:19;;15544:366;;;:::o;15916:::-;16058:3;16079:67;16143:2;16138:3;16079:67;:::i;:::-;16072:74;;16155:93;16244:3;16155:93;:::i;:::-;16273:2;16268:3;16264:12;16257:19;;15916:366;;;:::o;16288:::-;16430:3;16451:67;16515:2;16510:3;16451:67;:::i;:::-;16444:74;;16527:93;16616:3;16527:93;:::i;:::-;16645:2;16640:3;16636:12;16629:19;;16288:366;;;:::o;16660:398::-;16819:3;16840:83;16921:1;16916:3;16840:83;:::i;:::-;16833:90;;16932:93;17021:3;16932:93;:::i;:::-;17050:1;17045:3;17041:11;17034:18;;16660:398;;;:::o;17064:366::-;17206:3;17227:67;17291:2;17286:3;17227:67;:::i;:::-;17220:74;;17303:93;17392:3;17303:93;:::i;:::-;17421:2;17416:3;17412:12;17405:19;;17064:366;;;:::o;17436:::-;17578:3;17599:67;17663:2;17658:3;17599:67;:::i;:::-;17592:74;;17675:93;17764:3;17675:93;:::i;:::-;17793:2;17788:3;17784:12;17777:19;;17436:366;;;:::o;17808:118::-;17895:24;17913:5;17895:24;:::i;:::-;17890:3;17883:37;17808:118;;:::o;17932:589::-;18157:3;18179:95;18270:3;18261:6;18179:95;:::i;:::-;18172:102;;18291:95;18382:3;18373:6;18291:95;:::i;:::-;18284:102;;18403:92;18491:3;18482:6;18403:92;:::i;:::-;18396:99;;18512:3;18505:10;;17932:589;;;;;;:::o;18527:379::-;18711:3;18733:147;18876:3;18733:147;:::i;:::-;18726:154;;18897:3;18890:10;;18527:379;;;:::o;18912:222::-;19005:4;19043:2;19032:9;19028:18;19020:26;;19056:71;19124:1;19113:9;19109:17;19100:6;19056:71;:::i;:::-;18912:222;;;;:::o;19140:640::-;19335:4;19373:3;19362:9;19358:19;19350:27;;19387:71;19455:1;19444:9;19440:17;19431:6;19387:71;:::i;:::-;19468:72;19536:2;19525:9;19521:18;19512:6;19468:72;:::i;:::-;19550;19618:2;19607:9;19603:18;19594:6;19550:72;:::i;:::-;19669:9;19663:4;19659:20;19654:2;19643:9;19639:18;19632:48;19697:76;19768:4;19759:6;19697:76;:::i;:::-;19689:84;;19140:640;;;;;;;:::o;19786:210::-;19873:4;19911:2;19900:9;19896:18;19888:26;;19924:65;19986:1;19975:9;19971:17;19962:6;19924:65;:::i;:::-;19786:210;;;;:::o;20002:313::-;20115:4;20153:2;20142:9;20138:18;20130:26;;20202:9;20196:4;20192:20;20188:1;20177:9;20173:17;20166:47;20230:78;20303:4;20294:6;20230:78;:::i;:::-;20222:86;;20002:313;;;;:::o;20321:419::-;20487:4;20525:2;20514:9;20510:18;20502:26;;20574:9;20568:4;20564:20;20560:1;20549:9;20545:17;20538:47;20602:131;20728:4;20602:131;:::i;:::-;20594:139;;20321:419;;;:::o;20746:::-;20912:4;20950:2;20939:9;20935:18;20927:26;;20999:9;20993:4;20989:20;20985:1;20974:9;20970:17;20963:47;21027:131;21153:4;21027:131;:::i;:::-;21019:139;;20746:419;;;:::o;21171:::-;21337:4;21375:2;21364:9;21360:18;21352:26;;21424:9;21418:4;21414:20;21410:1;21399:9;21395:17;21388:47;21452:131;21578:4;21452:131;:::i;:::-;21444:139;;21171:419;;;:::o;21596:::-;21762:4;21800:2;21789:9;21785:18;21777:26;;21849:9;21843:4;21839:20;21835:1;21824:9;21820:17;21813:47;21877:131;22003:4;21877:131;:::i;:::-;21869:139;;21596:419;;;:::o;22021:::-;22187:4;22225:2;22214:9;22210:18;22202:26;;22274:9;22268:4;22264:20;22260:1;22249:9;22245:17;22238:47;22302:131;22428:4;22302:131;:::i;:::-;22294:139;;22021:419;;;:::o;22446:::-;22612:4;22650:2;22639:9;22635:18;22627:26;;22699:9;22693:4;22689:20;22685:1;22674:9;22670:17;22663:47;22727:131;22853:4;22727:131;:::i;:::-;22719:139;;22446:419;;;:::o;22871:::-;23037:4;23075:2;23064:9;23060:18;23052:26;;23124:9;23118:4;23114:20;23110:1;23099:9;23095:17;23088:47;23152:131;23278:4;23152:131;:::i;:::-;23144:139;;22871:419;;;:::o;23296:::-;23462:4;23500:2;23489:9;23485:18;23477:26;;23549:9;23543:4;23539:20;23535:1;23524:9;23520:17;23513:47;23577:131;23703:4;23577:131;:::i;:::-;23569:139;;23296:419;;;:::o;23721:222::-;23814:4;23852:2;23841:9;23837:18;23829:26;;23865:71;23933:1;23922:9;23918:17;23909:6;23865:71;:::i;:::-;23721:222;;;;:::o;23949:129::-;23983:6;24010:20;;:::i;:::-;24000:30;;24039:33;24067:4;24059:6;24039:33;:::i;:::-;23949:129;;;:::o;24084:75::-;24117:6;24150:2;24144:9;24134:19;;24084:75;:::o;24165:311::-;24242:4;24332:18;24324:6;24321:30;24318:56;;;24354:18;;:::i;:::-;24318:56;24404:4;24396:6;24392:17;24384:25;;24464:4;24458;24454:15;24446:23;;24165:311;;;:::o;24482:307::-;24543:4;24633:18;24625:6;24622:30;24619:56;;;24655:18;;:::i;:::-;24619:56;24693:29;24715:6;24693:29;:::i;:::-;24685:37;;24777:4;24771;24767:15;24759:23;;24482:307;;;:::o;24795:308::-;24857:4;24947:18;24939:6;24936:30;24933:56;;;24969:18;;:::i;:::-;24933:56;25007:29;25029:6;25007:29;:::i;:::-;24999:37;;25091:4;25085;25081:15;25073:23;;24795:308;;;:::o;25109:141::-;25158:4;25181:3;25173:11;;25204:3;25201:1;25194:14;25238:4;25235:1;25225:18;25217:26;;25109:141;;;:::o;25256:98::-;25307:6;25341:5;25335:12;25325:22;;25256:98;;;:::o;25360:99::-;25412:6;25446:5;25440:12;25430:22;;25360:99;;;:::o;25465:168::-;25548:11;25582:6;25577:3;25570:19;25622:4;25617:3;25613:14;25598:29;;25465:168;;;;:::o;25639:147::-;25740:11;25777:3;25762:18;;25639:147;;;;:::o;25792:169::-;25876:11;25910:6;25905:3;25898:19;25950:4;25945:3;25941:14;25926:29;;25792:169;;;;:::o;25967:148::-;26069:11;26106:3;26091:18;;25967:148;;;;:::o;26121:305::-;26161:3;26180:20;26198:1;26180:20;:::i;:::-;26175:25;;26214:20;26232:1;26214:20;:::i;:::-;26209:25;;26368:1;26300:66;26296:74;26293:1;26290:81;26287:107;;;26374:18;;:::i;:::-;26287:107;26418:1;26415;26411:9;26404:16;;26121:305;;;;:::o;26432:185::-;26472:1;26489:20;26507:1;26489:20;:::i;:::-;26484:25;;26523:20;26541:1;26523:20;:::i;:::-;26518:25;;26562:1;26552:35;;26567:18;;:::i;:::-;26552:35;26609:1;26606;26602:9;26597:14;;26432:185;;;;:::o;26623:348::-;26663:7;26686:20;26704:1;26686:20;:::i;:::-;26681:25;;26720:20;26738:1;26720:20;:::i;:::-;26715:25;;26908:1;26840:66;26836:74;26833:1;26830:81;26825:1;26818:9;26811:17;26807:105;26804:131;;;26915:18;;:::i;:::-;26804:131;26963:1;26960;26956:9;26945:20;;26623:348;;;;:::o;26977:191::-;27017:4;27037:20;27055:1;27037:20;:::i;:::-;27032:25;;27071:20;27089:1;27071:20;:::i;:::-;27066:25;;27110:1;27107;27104:8;27101:34;;;27115:18;;:::i;:::-;27101:34;27160:1;27157;27153:9;27145:17;;26977:191;;;;:::o;27174:96::-;27211:7;27240:24;27258:5;27240:24;:::i;:::-;27229:35;;27174:96;;;:::o;27276:90::-;27310:7;27353:5;27346:13;27339:21;27328:32;;27276:90;;;:::o;27372:149::-;27408:7;27448:66;27441:5;27437:78;27426:89;;27372:149;;;:::o;27527:126::-;27564:7;27604:42;27597:5;27593:54;27582:65;;27527:126;;;:::o;27659:77::-;27696:7;27725:5;27714:16;;27659:77;;;:::o;27742:154::-;27826:6;27821:3;27816;27803:30;27888:1;27879:6;27874:3;27870:16;27863:27;27742:154;;;:::o;27902:307::-;27970:1;27980:113;27994:6;27991:1;27988:13;27980:113;;;28079:1;28074:3;28070:11;28064:18;28060:1;28055:3;28051:11;28044:39;28016:2;28013:1;28009:10;28004:15;;27980:113;;;28111:6;28108:1;28105:13;28102:101;;;28191:1;28182:6;28177:3;28173:16;28166:27;28102:101;27951:258;27902:307;;;:::o;28215:320::-;28259:6;28296:1;28290:4;28286:12;28276:22;;28343:1;28337:4;28333:12;28364:18;28354:81;;28420:4;28412:6;28408:17;28398:27;;28354:81;28482:2;28474:6;28471:14;28451:18;28448:38;28445:84;;;28501:18;;:::i;:::-;28445:84;28266:269;28215:320;;;:::o;28541:281::-;28624:27;28646:4;28624:27;:::i;:::-;28616:6;28612:40;28754:6;28742:10;28739:22;28718:18;28706:10;28703:34;28700:62;28697:88;;;28765:18;;:::i;:::-;28697:88;28805:10;28801:2;28794:22;28584:238;28541:281;;:::o;28828:233::-;28867:3;28890:24;28908:5;28890:24;:::i;:::-;28881:33;;28936:66;28929:5;28926:77;28923:103;;;29006:18;;:::i;:::-;28923:103;29053:1;29046:5;29042:13;29035:20;;28828:233;;;:::o;29067:176::-;29099:1;29116:20;29134:1;29116:20;:::i;:::-;29111:25;;29150:20;29168:1;29150:20;:::i;:::-;29145:25;;29189:1;29179:35;;29194:18;;:::i;:::-;29179:35;29235:1;29232;29228:9;29223:14;;29067:176;;;;:::o;29249:180::-;29297:77;29294:1;29287:88;29394:4;29391:1;29384:15;29418:4;29415:1;29408:15;29435:180;29483:77;29480:1;29473:88;29580:4;29577:1;29570:15;29604:4;29601:1;29594:15;29621:180;29669:77;29666:1;29659:88;29766:4;29763:1;29756:15;29790:4;29787:1;29780:15;29807:180;29855:77;29852:1;29845:88;29952:4;29949:1;29942:15;29976:4;29973:1;29966:15;29993:180;30041:77;30038:1;30031:88;30138:4;30135:1;30128:15;30162:4;30159:1;30152:15;30179:117;30288:1;30285;30278:12;30302:117;30411:1;30408;30401:12;30425:117;30534:1;30531;30524:12;30548:117;30657:1;30654;30647:12;30671:117;30780:1;30777;30770:12;30794:117;30903:1;30900;30893:12;30917:102;30958:6;31009:2;31005:7;31000:2;30993:5;30989:14;30985:28;30975:38;;30917:102;;;:::o;31025:225::-;31165:34;31161:1;31153:6;31149:14;31142:58;31234:8;31229:2;31221:6;31217:15;31210:33;31025:225;:::o;31256:234::-;31396:34;31392:1;31384:6;31380:14;31373:58;31465:17;31460:2;31452:6;31448:15;31441:42;31256:234;:::o;31496:182::-;31636:34;31632:1;31624:6;31620:14;31613:58;31496:182;:::o;31684:248::-;31824:34;31820:1;31812:6;31808:14;31801:58;31893:31;31888:2;31880:6;31876:15;31869:56;31684:248;:::o;31938:234::-;32078:34;32074:1;32066:6;32062:14;32055:58;32147:17;32142:2;32134:6;32130:15;32123:42;31938:234;:::o;32178:173::-;32318:25;32314:1;32306:6;32302:14;32295:49;32178:173;:::o;32357:114::-;;:::o;32477:229::-;32617:34;32613:1;32605:6;32601:14;32594:58;32686:12;32681:2;32673:6;32669:15;32662:37;32477:229;:::o;32712:225::-;32852:34;32848:1;32840:6;32836:14;32829:58;32921:8;32916:2;32908:6;32904:15;32897:33;32712:225;:::o;32943:122::-;33016:24;33034:5;33016:24;:::i;:::-;33009:5;33006:35;32996:63;;33055:1;33052;33045:12;32996:63;32943:122;:::o;33071:116::-;33141:21;33156:5;33141:21;:::i;:::-;33134:5;33131:32;33121:60;;33177:1;33174;33167:12;33121:60;33071:116;:::o;33193:120::-;33265:23;33282:5;33265:23;:::i;:::-;33258:5;33255:34;33245:62;;33303:1;33300;33293:12;33245:62;33193:120;:::o;33319:122::-;33392:24;33410:5;33392:24;:::i;:::-;33385:5;33382:35;33372:63;;33431:1;33428;33421:12;33372:63;33319:122;:::o

Swarm Source

ipfs://86435d36f29db06585e3c60574616fd50636f1698de6c8f1780079b6efc5ce74
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.