ETH Price: $3,460.88 (+1.55%)
Gas: 7 Gwei

Token

The Americans Scroll (TAs-S)
 

Overview

Max Total Supply

7,047 TAs-S

Holders

1,519

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
firerus.eth
Balance
5 TAs-S
0xb6ed0d1b01e577a7e02f9a084e54aafc6ab38d20
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:
TheAmericansScroll

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-18
*/

// SPDX-License-Identifier: MIT
/**
 * @title TheAmericans Scroll
 * @author DevAmerican
 * @type ERC721A
 * @version v1.0.0
 * @dev Used for Ethereum projects compatible with OpenSea
 */

pragma solidity ^0.8.4;
library Address {
    function isContract(address account) internal view returns (bool) {
        return account.code.length > 0;
    }

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

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

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

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

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

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

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

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

pragma solidity ^0.8.0;
interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

pragma solidity ^0.8.0;
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

pragma solidity ^0.8.0;
interface IERC721 is IERC165 {
    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );
    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );
    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

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

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

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

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

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

    function approve(address to, uint256 tokenId) external;

    function setApprovalForAll(address operator, bool _approved) external;

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

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

pragma solidity ^0.8.0;
interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);

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

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

pragma solidity ^0.8.4;
interface IERC721A is IERC721, IERC721Metadata {
    error ApprovalCallerNotOwnerNorApproved();
    error ApprovalQueryForNonexistentToken();
    error ApproveToCaller();
    error ApprovalToCurrentOwner();
    error BalanceQueryForZeroAddress();
    error MintToZeroAddress();
    error MintZeroQuantity();
    error OwnerQueryForNonexistentToken();
    error TransferCallerNotOwnerNorApproved();
    error TransferFromIncorrectOwner();
    error TransferToNonERC721ReceiverImplementer();
    error TransferToZeroAddress();
    error URIQueryForNonexistentToken();

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
        bool burned;
    }

    struct AddressData {
        uint64 balance;
        uint64 numberMinted;
        uint64 numberBurned;
        uint64 aux;
    }

    function totalSupply() external view returns (uint256);
}

pragma solidity ^0.8.0;
interface IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);

    function tokenOfOwnerByIndex(address owner, uint256 index)
        external
        view
        returns (uint256);

    function tokenByIndex(uint256 index) external view returns (uint256);
}

pragma solidity ^0.8.0;
abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

pragma solidity ^0.8.0;
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pragma solidity ^0.8.0;
abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

        _status = _ENTERED;

        _;

        _status = _NOT_ENTERED;
    }
}

pragma solidity ^0.8.4;
contract ERC721A is Context, ERC165, IERC721A {
    using Address for address;
    using Strings for uint256;

    uint256 internal _currentIndex;

    uint256 internal _burnCounter;

    string private _name;

    string private _symbol;

    mapping(uint256 => TokenOwnership) internal _ownerships;

    mapping(address => AddressData) private _addressData;

    mapping(uint256 => address) private _tokenApprovals;

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

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

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

    function totalSupply() public view override returns (uint256) {
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    function _totalMinted() internal view returns (uint256) {
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC165, IERC165)
        returns (bool)
    {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    function _ownershipOf(uint256 tokenId)
        internal
        view
        returns (TokenOwnership memory)
    {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    TokenOwnership memory ownership = _ownerships[curr];
                    if (!ownership.burned) {
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                        while (true) {
                            curr--;
                            ownership = _ownerships[curr];
                            if (ownership.addr != address(0)) {
                                return ownership;
                            }
                        }
                    }
                }
        }
        revert OwnerQueryForNonexistentToken();
    }

    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

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

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

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

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

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

    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        if (operator == _msgSender()) revert ApproveToCaller();

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

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

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        _transfer(from, to, tokenId);
    }

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.isContract())
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }

    function _exists(uint256 tokenId) internal view returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex &&
            !_ownerships[tokenId].burned;
    }

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

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

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

        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

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

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

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

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

        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

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

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

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

        _beforeTokenTransfers(from, to, tokenId, 1);

        _approve(address(0), tokenId, from);

        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

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

    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

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

        _approve(address(0), tokenId, from);

        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

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

        unchecked {
            _burnCounter++;
        }
    }

    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

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

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

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

pragma solidity ^0.8.0;
interface IAccessControl {
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
    function hasRole(bytes32 role, address account) external view returns (bool);
    function getRoleAdmin(bytes32 role) external view returns (bytes32);
    function grantRole(bytes32 role, address account) external;
    function revokeRole(bytes32 role, address account) external;
    function renounceRole(bytes32 role, address account) external;
}

pragma solidity ^0.8.0;
abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }
    mapping(bytes32 => RoleData) private _roles;
    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
    modifier onlyRole(bytes32 role) {
        _checkRole(role);
        _;
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
    }
    function hasRole(bytes32 role, address account) public view virtual override returns (bool) {
        return _roles[role].members[account];
    }
    function _checkRole(bytes32 role) internal view virtual {
        _checkRole(role, _msgSender());
    }
    function _checkRole(bytes32 role, address account) internal view virtual {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }
    function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {
        return _roles[role].adminRole;
    }
    function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }
    function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }
    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }
    function _grantRole(bytes32 role, address account) internal virtual {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }
    function _revokeRole(bytes32 role, address account) internal virtual {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

pragma solidity ^0.8.0;
interface IERC2981 is IERC165 {
    function royaltyInfo(uint256 tokenId, uint256 salePrice) external view returns (address receiver, uint256 royaltyAmount);
}

pragma solidity ^0.8.0;
abstract contract ERC2981 is IERC2981, ERC165 {
    struct RoyaltyInfo {
        address receiver;
        uint96 royaltyFraction;
    }
    RoyaltyInfo private _defaultRoyaltyInfo;
    mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo;
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) {
        return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId);
    }
    function royaltyInfo(uint256 _tokenId, uint256 _salePrice) public view virtual override returns (address, uint256) {
        RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId];

        if (royalty.receiver == address(0)) {
            royalty = _defaultRoyaltyInfo;
        }

        uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator();

        return (royalty.receiver, royaltyAmount);
    }
    function _feeDenominator() internal pure virtual returns (uint96) {
        return 10000;
    }
    function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual {
        require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
        require(receiver != address(0), "ERC2981: invalid receiver");

        _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator);
    }
    function _deleteDefaultRoyalty() internal virtual {
        delete _defaultRoyaltyInfo;
    }
    function _setTokenRoyalty(
        uint256 tokenId,
        address receiver,
        uint96 feeNumerator
    ) internal virtual {
        require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
        require(receiver != address(0), "ERC2981: Invalid parameters");

        _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator);
    }
    function _resetTokenRoyalty(uint256 tokenId) internal virtual {
        delete _tokenRoyaltyInfo[tokenId];
    }
}

pragma solidity ^0.8.4;
interface ITheAmericanStake {
    function getStakedAmericans(address staker) external view returns (uint256[] memory);
}

pragma solidity ^0.8.4;
contract TheAmericansScroll is ERC721A, ReentrancyGuard, Ownable, ERC2981, AccessControl{
    bytes32 public constant SUPPORT_ROLE = keccak256("SUPPORT");

    string private _baseURIExtended;
    bool public claimActive;

    bytes32 public merkleRoots;

    mapping(address => bool) public isClaimed;

    constructor(string memory _name, string memory _symbol)
        ERC721A(_name, _symbol) {
        _setupRole(DEFAULT_ADMIN_ROLE, msg.sender);
        _setupRole(SUPPORT_ROLE, msg.sender);
    }

    function _leafFromAddressAndNumTokens(address _a, uint256 _n) private pure returns (bytes32){
        return keccak256(abi.encodePacked(_a, _n));
    }

    function _checkProof(bytes32[] calldata proof, bytes32 _hash) private view returns (bool) {
        bytes32 el;
        bytes32 h = _hash;
        for (uint256 i = 0; i < proof.length; i += 1) {
            el = proof[i];
            if (h < el) {
                h = keccak256(abi.encodePacked(h, el));
            } else {
                h = keccak256(abi.encodePacked(el, h));
            }
        }
        return h == merkleRoots;
    }

    function mint(bytes32[] calldata _proof, uint256 _quantity) external nonReentrant {
        require(claimActive, "AIRDROP_NOT_YET_STARTED");
        require(isClaimed[msg.sender] != true, "CLAIMED_ALREADY");
        require(_quantity > 0, "INVALID_QUANTITY");
        require(_checkProof(_proof, _leafFromAddressAndNumTokens(msg.sender, _quantity)), "WRONG_PROOF");
        isClaimed[msg.sender] = true;
        _safeMint(msg.sender, _quantity);
    }

    function burn(uint256 tokenId) external {
        _burn(tokenId, true);
    }

    function setBaseURI(string memory baseURI_) external onlyOwner {
        _baseURIExtended = baseURI_;
    }

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

    function supportsInterface(bytes4 interfaceId) public view virtual override(AccessControl, ERC721A, ERC2981) returns (bool) {
        return super.supportsInterface(interfaceId);
    }

    function setClaimActive() external onlyOwner {
        claimActive = !claimActive;
    }

    function setDefaultRoyalty(address receiver, uint96 feeNumerator) external onlyRole(SUPPORT_ROLE) {
        _setDefaultRoyalty(receiver, feeNumerator);
    }

    function deleteDefaultRoyalty() external onlyRole(SUPPORT_ROLE) {
        _deleteDefaultRoyalty();
    }

    function setTokenRoyalty(uint256 tokenId, address receiver, uint96 feeNumerator) external onlyRole(SUPPORT_ROLE) {
        _setTokenRoyalty(tokenId, receiver, feeNumerator);
    }

    function resetTokenRoyalty(uint256 tokenId) external onlyRole(SUPPORT_ROLE) {
        _resetTokenRoyalty(tokenId);
    }

    function setAirdropRoot(bytes32 _merkleRoot) external onlyOwner {
        merkleRoots = _merkleRoot;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"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":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SUPPORT_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deleteDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"isClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"merkleRoots","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"},{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"resetTokenRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"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":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setAirdropRoot","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":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setClaimActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"setDefaultRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"},{"internalType":"uint96","name":"feeNumerator","type":"uint96"}],"name":"setTokenRoyalty","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200530b3803806200530b833981810160405281019062000037919062000462565b818181600290805190602001906200005192919062000340565b5080600390805190602001906200006a92919062000340565b506200007b620000fa60201b60201c565b60008190555050506001600881905550620000ab6200009f620000ff60201b60201c565b6200010760201b60201c565b620000c06000801b33620001cd60201b60201c565b620000f27fd8acb51ff3d48f690a25887aaf234c4ae5a66ab9839243cd8e2b639cade0663b33620001cd60201b60201c565b505062000645565b600090565b600033905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620001df8282620001e360201b60201c565b5050565b620001f58282620002d560201b60201c565b620002d1576001600c600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000276620000ff60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000600c600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b8280546200034e906200056a565b90600052602060002090601f016020900481019282620003725760008555620003be565b82601f106200038d57805160ff1916838001178555620003be565b82800160010185558215620003be579182015b82811115620003bd578251825591602001919060010190620003a0565b5b509050620003cd9190620003d1565b5090565b5b80821115620003ec576000816000905550600101620003d2565b5090565b6000620004076200040184620004fe565b620004d5565b9050828152602081018484840111156200042057600080fd5b6200042d84828562000534565b509392505050565b600082601f8301126200044757600080fd5b815162000459848260208601620003f0565b91505092915050565b600080604083850312156200047657600080fd5b600083015167ffffffffffffffff8111156200049157600080fd5b6200049f8582860162000435565b925050602083015167ffffffffffffffff811115620004bd57600080fd5b620004cb8582860162000435565b9150509250929050565b6000620004e1620004f4565b9050620004ef8282620005a0565b919050565b6000604051905090565b600067ffffffffffffffff8211156200051c576200051b62000605565b5b620005278262000634565b9050602081019050919050565b60005b838110156200055457808201518184015260208101905062000537565b8381111562000564576000848401525b50505050565b600060028204905060018216806200058357607f821691505b602082108114156200059a5762000599620005d6565b5b50919050565b620005ab8262000634565b810181811067ffffffffffffffff82111715620005cd57620005cc62000605565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b614cb680620006556000396000f3fe608060405234801561001057600080fd5b50600436106102275760003560e01c80636352211e116101305780639d9e7a99116100b8578063c87b56dd1161007c578063c87b56dd14610625578063d4a6a2fd14610655578063d547741f14610673578063e985e9c51461068f578063f2fde38b146106bf57610227565b80639d9e7a99146105a9578063a217fddf146105c5578063a22cb465146105e3578063aa1b103f146105ff578063b88d4fde1461060957610227565b80638cc08025116100ff5780638cc08025146104ef5780638da5cb5b1461051f57806391d148541461053d57806394b059ab1461056d57806395d89b411461058b57610227565b80636352211e1461046957806370a0823114610499578063715018a6146104c95780638a616bc0146104d357610227565b80632a55205a116101b357806342966c681161018257806342966c68146103ef57806345de0d9b1461040b5780634c0524d01461042757806355f804b3146104315780635944c7531461044d57610227565b80632a55205a1461036a5780632f2ff15d1461039b57806336568abe146103b757806342842e0e146103d357610227565b8063095ea7b3116101fa578063095ea7b3146102c657806318160ddd146102e257806323b872dd14610300578063248a9ca31461031c5780632730fda31461034c57610227565b806301ffc9a71461022c57806304634d8d1461025c57806306fdde0314610278578063081812fc14610296575b600080fd5b61024660048036038101906102419190613ce8565b6106db565b6040516102539190614283565b60405180910390f35b61027660048036038101906102719190613bef565b6106ed565b005b610280610726565b60405161028d91906142b9565b60405180910390f35b6102b060048036038101906102ab9190613d7b565b6107b8565b6040516102bd91906141f3565b60405180910390f35b6102e060048036038101906102db9190613bb3565b610834565b005b6102ea610939565b6040516102f7919061445b565b60405180910390f35b61031a60048036038101906103159190613aad565b610950565b005b61033660048036038101906103319190613c83565b610960565b604051610343919061429e565b60405180910390f35b610354610980565b604051610361919061429e565b60405180910390f35b610384600480360381019061037f9190613df3565b610986565b60405161039292919061425a565b60405180910390f35b6103b560048036038101906103b09190613cac565b610b71565b005b6103d160048036038101906103cc9190613cac565b610b92565b005b6103ed60048036038101906103e89190613aad565b610c15565b005b61040960048036038101906104049190613d7b565b610c35565b005b61042560048036038101906104209190613c2b565b610c43565b005b61042f610e79565b005b61044b60048036038101906104469190613d3a565b610ead565b005b61046760048036038101906104629190613da4565b610ecf565b005b610483600480360381019061047e9190613d7b565b610f0a565b60405161049091906141f3565b60405180910390f35b6104b360048036038101906104ae9190613a48565b610f20565b6040516104c0919061445b565b60405180910390f35b6104d1610ff0565b005b6104ed60048036038101906104e89190613d7b565b611004565b005b61050960048036038101906105049190613a48565b61103b565b6040516105169190614283565b60405180910390f35b61052761105b565b60405161053491906141f3565b60405180910390f35b61055760048036038101906105529190613cac565b611085565b6040516105649190614283565b60405180910390f35b6105756110f0565b604051610582919061429e565b60405180910390f35b610593611114565b6040516105a091906142b9565b60405180910390f35b6105c360048036038101906105be9190613c83565b6111a6565b005b6105cd6111b8565b6040516105da919061429e565b60405180910390f35b6105fd60048036038101906105f89190613b77565b6111bf565b005b610607611337565b005b610623600480360381019061061e9190613afc565b61136c565b005b61063f600480360381019061063a9190613d7b565b6113e4565b60405161064c91906142b9565b60405180910390f35b61065d611483565b60405161066a9190614283565b60405180910390f35b61068d60048036038101906106889190613cac565b611496565b005b6106a960048036038101906106a49190613a71565b6114b7565b6040516106b69190614283565b60405180910390f35b6106d960048036038101906106d49190613a48565b61154b565b005b60006106e6826115cf565b9050919050565b7fd8acb51ff3d48f690a25887aaf234c4ae5a66ab9839243cd8e2b639cade0663b61071781611649565b610721838361165d565b505050565b60606002805461073590614757565b80601f016020809104026020016040519081016040528092919081815260200182805461076190614757565b80156107ae5780601f10610783576101008083540402835291602001916107ae565b820191906000526020600020905b81548152906001019060200180831161079157829003601f168201915b5050505050905090565b60006107c3826117f3565b6107f9576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061083f82610f0a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108a7576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108c6611841565b73ffffffffffffffffffffffffffffffffffffffff1614610929576108f2816108ed611841565b6114b7565b610928576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610934838383611849565b505050565b60006109436118fb565b6001546000540303905090565b61095b838383611900565b505050565b6000600c6000838152602001908152602001600020600101549050919050565b600f5481565b6000806000600b60008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161415610b1c57600a6040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610b26611db6565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610b5291906145c7565b610b5c9190614596565b90508160000151819350935050509250929050565b610b7a82610960565b610b8381611649565b610b8d8383611dc0565b505050565b610b9a611841565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe9061443b565b60405180910390fd5b610c118282611ea1565b5050565b610c308383836040518060200160405280600081525061136c565b505050565b610c40816001611f83565b50565b60026008541415610c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c80906143fb565b60405180910390fd5b6002600881905550600e60009054906101000a900460ff16610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd79061431b565b60405180910390fd5b60011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415610d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b9061437b565b60405180910390fd5b60008111610db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dae906143db565b60405180910390fd5b610dcb8383610dc63385612373565b6123a6565b610e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e019061433b565b60405180910390fd5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610e6c3382612487565b6001600881905550505050565b610e816124a5565b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b610eb56124a5565b80600d9080519060200190610ecb9291906137b5565b5050565b7fd8acb51ff3d48f690a25887aaf234c4ae5a66ab9839243cd8e2b639cade0663b610ef981611649565b610f04848484612523565b50505050565b6000610f15826126cb565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f88576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610ff86124a5565b6110026000612956565b565b7fd8acb51ff3d48f690a25887aaf234c4ae5a66ab9839243cd8e2b639cade0663b61102e81611649565b61103782612a1c565b5050565b60106020528060005260406000206000915054906101000a900460ff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600c600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b7fd8acb51ff3d48f690a25887aaf234c4ae5a66ab9839243cd8e2b639cade0663b81565b60606003805461112390614757565b80601f016020809104026020016040519081016040528092919081815260200182805461114f90614757565b801561119c5780601f106111715761010080835404028352916020019161119c565b820191906000526020600020905b81548152906001019060200180831161117f57829003601f168201915b5050505050905090565b6111ae6124a5565b80600f8190555050565b6000801b81565b6111c7611841565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561122c576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611239611841565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166112e6611841565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161132b9190614283565b60405180910390a35050565b7fd8acb51ff3d48f690a25887aaf234c4ae5a66ab9839243cd8e2b639cade0663b61136181611649565b611369612a7b565b50565b611377848484611900565b6113968373ffffffffffffffffffffffffffffffffffffffff16612ac8565b156113de576113a784848484612aeb565b6113dd576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60606113ef826117f3565b611425576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061142f612c4b565b9050600081511415611450576040518060200160405280600081525061147b565b8061145a84612cdd565b60405160200161146b929190614195565b6040516020818303038152906040525b915050919050565b600e60009054906101000a900460ff1681565b61149f82610960565b6114a881611649565b6114b28383611ea1565b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115536124a5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ba906142fb565b60405180910390fd5b6115cc81612956565b50565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611642575061164182612e8a565b5b9050919050565b61165a81611655611841565b612f04565b50565b611665611db6565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156116c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ba906143bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a9061441b565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600a60008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6000816117fe6118fb565b1115801561180d575060005482105b801561183a575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061190b826126cb565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611976576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611997611841565b73ffffffffffffffffffffffffffffffffffffffff1614806119c657506119c5856119c0611841565b6114b7565b5b80611a0b57506119d4611841565b73ffffffffffffffffffffffffffffffffffffffff166119f3846107b8565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611a44576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611aab576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ab88585856001612fa1565b611ac460008487611849565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611d44576000548214611d4357878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611daf8585856001612fa7565b5050505050565b6000612710905090565b611dca8282611085565b611e9d576001600c600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611e42611841565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b611eab8282611085565b15611f7f576000600c600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611f24611841565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000611f8e836126cb565b9050600081600001519050821561206f5760008173ffffffffffffffffffffffffffffffffffffffff16611fc0611841565b73ffffffffffffffffffffffffffffffffffffffff161480611fef5750611fee82611fe9611841565b6114b7565b5b806120345750611ffd611841565b73ffffffffffffffffffffffffffffffffffffffff1661201c866107b8565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061206d576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b61207d816000866001612fa1565b61208960008583611849565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156122ed5760005482146122ec57848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461235b816000866001612fa7565b60016000815480929190600101919050555050505050565b6000828260405160200161238892919061413d565b60405160208183030381529060405280519060200120905092915050565b600080600083905060005b86869050811015612476578686828181106123f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135925082821015612436578183604051602001612419929190614169565b604051602081830303815290604052805190602001209150612462565b8282604051602001612449929190614169565b6040516020818303038152906040528051906020012091505b60018161246f9190614540565b90506123b1565b50600f548114925050509392505050565b6124a1828260405180602001604052806000815250612fad565b5050565b6124ad611841565b73ffffffffffffffffffffffffffffffffffffffff166124cb61105b565b73ffffffffffffffffffffffffffffffffffffffff1614612521576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125189061435b565b60405180910390fd5b565b61252b611db6565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115612589576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612580906143bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f09061439b565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600b600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b6126d361383b565b6000829050806126e16118fb565b1161291f5760005481101561291e576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161291c57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612800578092505050612951565b5b60011561291b57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612916578092505050612951565b612801565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600b6000828152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff0219169055505050565b600a600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff02191690555050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b11611841565b8786866040518563ffffffff1660e01b8152600401612b33949392919061420e565b602060405180830381600087803b158015612b4d57600080fd5b505af1925050508015612b7e57506040513d601f19601f82011682018060405250810190612b7b9190613d11565b60015b612bf8573d8060008114612bae576040519150601f19603f3d011682016040523d82523d6000602084013e612bb3565b606091505b50600081511415612bf0576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600d8054612c5a90614757565b80601f0160208091040260200160405190810160405280929190818152602001828054612c8690614757565b8015612cd35780601f10612ca857610100808354040283529160200191612cd3565b820191906000526020600020905b815481529060010190602001808311612cb657829003601f168201915b5050505050905090565b60606000821415612d25576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e85565b600082905060005b60008214612d57578080612d40906147ba565b915050600a82612d509190614596565b9150612d2d565b60008167ffffffffffffffff811115612d99577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612dcb5781602001600182028036833780820191505090505b5090505b60008514612e7e57600182612de49190614621565b9150600a85612df3919061483b565b6030612dff9190614540565b60f81b818381518110612e3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e779190614596565b9450612dcf565b8093505050505b919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612efd5750612efc8261336f565b5b9050919050565b612f0e8282611085565b612f9d57612f338173ffffffffffffffffffffffffffffffffffffffff166014613451565b612f418360001c6020613451565b604051602001612f529291906141b9565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9491906142b9565b60405180910390fd5b5050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561301a576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415613055576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130626000858386612fa1565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506132238673ffffffffffffffffffffffffffffffffffffffff16612ac8565b156132e8575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46132986000878480600101955087612aeb565b6132ce576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106132295782600054146132e357600080fd5b613353565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106132e9575b8160008190555050506133696000858386612fa7565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061343a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061344a57506134498261374b565b5b9050919050565b60606000600283600261346491906145c7565b61346e9190614540565b67ffffffffffffffff8111156134ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156134df5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061353d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106135c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261360791906145c7565b6136119190614540565b90505b60018111156136fd577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110613679577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b8282815181106136b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806136f69061472d565b9050613614565b5060008414613741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613738906142db565b60405180910390fd5b8091505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b8280546137c190614757565b90600052602060002090601f0160209004810192826137e3576000855561382a565b82601f106137fc57805160ff191683800117855561382a565b8280016001018555821561382a579182015b8281111561382957825182559160200191906001019061380e565b5b509050613837919061387e565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561389757600081600090555060010161387f565b5090565b60006138ae6138a98461449b565b614476565b9050828152602081018484840111156138c657600080fd5b6138d18482856146eb565b509392505050565b60006138ec6138e7846144cc565b614476565b90508281526020810184848401111561390457600080fd5b61390f8482856146eb565b509392505050565b60008135905061392681614bf6565b92915050565b60008083601f84011261393e57600080fd5b8235905067ffffffffffffffff81111561395757600080fd5b60208301915083602082028301111561396f57600080fd5b9250929050565b60008135905061398581614c0d565b92915050565b60008135905061399a81614c24565b92915050565b6000813590506139af81614c3b565b92915050565b6000815190506139c481614c3b565b92915050565b600082601f8301126139db57600080fd5b81356139eb84826020860161389b565b91505092915050565b600082601f830112613a0557600080fd5b8135613a158482602086016138d9565b91505092915050565b600081359050613a2d81614c52565b92915050565b600081359050613a4281614c69565b92915050565b600060208284031215613a5a57600080fd5b6000613a6884828501613917565b91505092915050565b60008060408385031215613a8457600080fd5b6000613a9285828601613917565b9250506020613aa385828601613917565b9150509250929050565b600080600060608486031215613ac257600080fd5b6000613ad086828701613917565b9350506020613ae186828701613917565b9250506040613af286828701613a1e565b9150509250925092565b60008060008060808587031215613b1257600080fd5b6000613b2087828801613917565b9450506020613b3187828801613917565b9350506040613b4287828801613a1e565b925050606085013567ffffffffffffffff811115613b5f57600080fd5b613b6b878288016139ca565b91505092959194509250565b60008060408385031215613b8a57600080fd5b6000613b9885828601613917565b9250506020613ba985828601613976565b9150509250929050565b60008060408385031215613bc657600080fd5b6000613bd485828601613917565b9250506020613be585828601613a1e565b9150509250929050565b60008060408385031215613c0257600080fd5b6000613c1085828601613917565b9250506020613c2185828601613a33565b9150509250929050565b600080600060408486031215613c4057600080fd5b600084013567ffffffffffffffff811115613c5a57600080fd5b613c668682870161392c565b93509350506020613c7986828701613a1e565b9150509250925092565b600060208284031215613c9557600080fd5b6000613ca38482850161398b565b91505092915050565b60008060408385031215613cbf57600080fd5b6000613ccd8582860161398b565b9250506020613cde85828601613917565b9150509250929050565b600060208284031215613cfa57600080fd5b6000613d08848285016139a0565b91505092915050565b600060208284031215613d2357600080fd5b6000613d31848285016139b5565b91505092915050565b600060208284031215613d4c57600080fd5b600082013567ffffffffffffffff811115613d6657600080fd5b613d72848285016139f4565b91505092915050565b600060208284031215613d8d57600080fd5b6000613d9b84828501613a1e565b91505092915050565b600080600060608486031215613db957600080fd5b6000613dc786828701613a1e565b9350506020613dd886828701613917565b9250506040613de986828701613a33565b9150509250925092565b60008060408385031215613e0657600080fd5b6000613e1485828601613a1e565b9250506020613e2585828601613a1e565b9150509250929050565b613e3881614655565b82525050565b613e4f613e4a82614655565b614803565b82525050565b613e5e81614667565b82525050565b613e6d81614673565b82525050565b613e84613e7f82614673565b614815565b82525050565b6000613e95826144fd565b613e9f8185614513565b9350613eaf8185602086016146fa565b613eb881614928565b840191505092915050565b6000613ece82614508565b613ed88185614524565b9350613ee88185602086016146fa565b613ef181614928565b840191505092915050565b6000613f0782614508565b613f118185614535565b9350613f218185602086016146fa565b80840191505092915050565b6000613f3a602083614524565b9150613f4582614946565b602082019050919050565b6000613f5d602683614524565b9150613f688261496f565b604082019050919050565b6000613f80601783614524565b9150613f8b826149be565b602082019050919050565b6000613fa3600b83614524565b9150613fae826149e7565b602082019050919050565b6000613fc6602083614524565b9150613fd182614a10565b602082019050919050565b6000613fe9600f83614524565b9150613ff482614a39565b602082019050919050565b600061400c601b83614524565b915061401782614a62565b602082019050919050565b600061402f601783614535565b915061403a82614a8b565b601782019050919050565b6000614052602a83614524565b915061405d82614ab4565b604082019050919050565b6000614075601083614524565b915061408082614b03565b602082019050919050565b6000614098601f83614524565b91506140a382614b2c565b602082019050919050565b60006140bb601983614524565b91506140c682614b55565b602082019050919050565b60006140de601183614535565b91506140e982614b7e565b601182019050919050565b6000614101602f83614524565b915061410c82614ba7565b604082019050919050565b614120816146c9565b82525050565b614137614132826146c9565b614831565b82525050565b60006141498285613e3e565b6014820191506141598284614126565b6020820191508190509392505050565b60006141758285613e73565b6020820191506141858284613e73565b6020820191508190509392505050565b60006141a18285613efc565b91506141ad8284613efc565b91508190509392505050565b60006141c482614022565b91506141d08285613efc565b91506141db826140d1565b91506141e78284613efc565b91508190509392505050565b60006020820190506142086000830184613e2f565b92915050565b60006080820190506142236000830187613e2f565b6142306020830186613e2f565b61423d6040830185614117565b818103606083015261424f8184613e8a565b905095945050505050565b600060408201905061426f6000830185613e2f565b61427c6020830184614117565b9392505050565b60006020820190506142986000830184613e55565b92915050565b60006020820190506142b36000830184613e64565b92915050565b600060208201905081810360008301526142d38184613ec3565b905092915050565b600060208201905081810360008301526142f481613f2d565b9050919050565b6000602082019050818103600083015261431481613f50565b9050919050565b6000602082019050818103600083015261433481613f73565b9050919050565b6000602082019050818103600083015261435481613f96565b9050919050565b6000602082019050818103600083015261437481613fb9565b9050919050565b6000602082019050818103600083015261439481613fdc565b9050919050565b600060208201905081810360008301526143b481613fff565b9050919050565b600060208201905081810360008301526143d481614045565b9050919050565b600060208201905081810360008301526143f481614068565b9050919050565b600060208201905081810360008301526144148161408b565b9050919050565b60006020820190508181036000830152614434816140ae565b9050919050565b60006020820190508181036000830152614454816140f4565b9050919050565b60006020820190506144706000830184614117565b92915050565b6000614480614491565b905061448c8282614789565b919050565b6000604051905090565b600067ffffffffffffffff8211156144b6576144b56148f9565b5b6144bf82614928565b9050602081019050919050565b600067ffffffffffffffff8211156144e7576144e66148f9565b5b6144f082614928565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061454b826146c9565b9150614556836146c9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561458b5761458a61486c565b5b828201905092915050565b60006145a1826146c9565b91506145ac836146c9565b9250826145bc576145bb61489b565b5b828204905092915050565b60006145d2826146c9565b91506145dd836146c9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146165761461561486c565b5b828202905092915050565b600061462c826146c9565b9150614637836146c9565b92508282101561464a5761464961486c565b5b828203905092915050565b6000614660826146a9565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156147185780820151818401526020810190506146fd565b83811115614727576000848401525b50505050565b6000614738826146c9565b9150600082141561474c5761474b61486c565b5b600182039050919050565b6000600282049050600182168061476f57607f821691505b60208210811415614783576147826148ca565b5b50919050565b61479282614928565b810181811067ffffffffffffffff821117156147b1576147b06148f9565b5b80604052505050565b60006147c5826146c9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147f8576147f761486c565b5b600182019050919050565b600061480e8261481f565b9050919050565b6000819050919050565b600061482a82614939565b9050919050565b6000819050919050565b6000614846826146c9565b9150614851836146c9565b9250826148615761486061489b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f41495244524f505f4e4f545f5945545f53544152544544000000000000000000600082015250565b7f57524f4e475f50524f4f46000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f434c41494d45445f414c52454144590000000000000000000000000000000000600082015250565b7f455243323938313a20496e76616c696420706172616d65746572730000000000600082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f494e56414c49445f5155414e5449545900000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b614bff81614655565b8114614c0a57600080fd5b50565b614c1681614667565b8114614c2157600080fd5b50565b614c2d81614673565b8114614c3857600080fd5b50565b614c448161467d565b8114614c4f57600080fd5b50565b614c5b816146c9565b8114614c6657600080fd5b50565b614c72816146d3565b8114614c7d57600080fd5b5056fea264697066735822122040e825bedc50d18a29f773e7fbbec5c4bb5cfed5e19869562133fb3177cbffc364736f6c6343000804003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001454686520416d65726963616e73205363726f6c6c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000055441732d53000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102275760003560e01c80636352211e116101305780639d9e7a99116100b8578063c87b56dd1161007c578063c87b56dd14610625578063d4a6a2fd14610655578063d547741f14610673578063e985e9c51461068f578063f2fde38b146106bf57610227565b80639d9e7a99146105a9578063a217fddf146105c5578063a22cb465146105e3578063aa1b103f146105ff578063b88d4fde1461060957610227565b80638cc08025116100ff5780638cc08025146104ef5780638da5cb5b1461051f57806391d148541461053d57806394b059ab1461056d57806395d89b411461058b57610227565b80636352211e1461046957806370a0823114610499578063715018a6146104c95780638a616bc0146104d357610227565b80632a55205a116101b357806342966c681161018257806342966c68146103ef57806345de0d9b1461040b5780634c0524d01461042757806355f804b3146104315780635944c7531461044d57610227565b80632a55205a1461036a5780632f2ff15d1461039b57806336568abe146103b757806342842e0e146103d357610227565b8063095ea7b3116101fa578063095ea7b3146102c657806318160ddd146102e257806323b872dd14610300578063248a9ca31461031c5780632730fda31461034c57610227565b806301ffc9a71461022c57806304634d8d1461025c57806306fdde0314610278578063081812fc14610296575b600080fd5b61024660048036038101906102419190613ce8565b6106db565b6040516102539190614283565b60405180910390f35b61027660048036038101906102719190613bef565b6106ed565b005b610280610726565b60405161028d91906142b9565b60405180910390f35b6102b060048036038101906102ab9190613d7b565b6107b8565b6040516102bd91906141f3565b60405180910390f35b6102e060048036038101906102db9190613bb3565b610834565b005b6102ea610939565b6040516102f7919061445b565b60405180910390f35b61031a60048036038101906103159190613aad565b610950565b005b61033660048036038101906103319190613c83565b610960565b604051610343919061429e565b60405180910390f35b610354610980565b604051610361919061429e565b60405180910390f35b610384600480360381019061037f9190613df3565b610986565b60405161039292919061425a565b60405180910390f35b6103b560048036038101906103b09190613cac565b610b71565b005b6103d160048036038101906103cc9190613cac565b610b92565b005b6103ed60048036038101906103e89190613aad565b610c15565b005b61040960048036038101906104049190613d7b565b610c35565b005b61042560048036038101906104209190613c2b565b610c43565b005b61042f610e79565b005b61044b60048036038101906104469190613d3a565b610ead565b005b61046760048036038101906104629190613da4565b610ecf565b005b610483600480360381019061047e9190613d7b565b610f0a565b60405161049091906141f3565b60405180910390f35b6104b360048036038101906104ae9190613a48565b610f20565b6040516104c0919061445b565b60405180910390f35b6104d1610ff0565b005b6104ed60048036038101906104e89190613d7b565b611004565b005b61050960048036038101906105049190613a48565b61103b565b6040516105169190614283565b60405180910390f35b61052761105b565b60405161053491906141f3565b60405180910390f35b61055760048036038101906105529190613cac565b611085565b6040516105649190614283565b60405180910390f35b6105756110f0565b604051610582919061429e565b60405180910390f35b610593611114565b6040516105a091906142b9565b60405180910390f35b6105c360048036038101906105be9190613c83565b6111a6565b005b6105cd6111b8565b6040516105da919061429e565b60405180910390f35b6105fd60048036038101906105f89190613b77565b6111bf565b005b610607611337565b005b610623600480360381019061061e9190613afc565b61136c565b005b61063f600480360381019061063a9190613d7b565b6113e4565b60405161064c91906142b9565b60405180910390f35b61065d611483565b60405161066a9190614283565b60405180910390f35b61068d60048036038101906106889190613cac565b611496565b005b6106a960048036038101906106a49190613a71565b6114b7565b6040516106b69190614283565b60405180910390f35b6106d960048036038101906106d49190613a48565b61154b565b005b60006106e6826115cf565b9050919050565b7fd8acb51ff3d48f690a25887aaf234c4ae5a66ab9839243cd8e2b639cade0663b61071781611649565b610721838361165d565b505050565b60606002805461073590614757565b80601f016020809104026020016040519081016040528092919081815260200182805461076190614757565b80156107ae5780601f10610783576101008083540402835291602001916107ae565b820191906000526020600020905b81548152906001019060200180831161079157829003601f168201915b5050505050905090565b60006107c3826117f3565b6107f9576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061083f82610f0a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108a7576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108c6611841565b73ffffffffffffffffffffffffffffffffffffffff1614610929576108f2816108ed611841565b6114b7565b610928576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610934838383611849565b505050565b60006109436118fb565b6001546000540303905090565b61095b838383611900565b505050565b6000600c6000838152602001908152602001600020600101549050919050565b600f5481565b6000806000600b60008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff161415610b1c57600a6040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610b26611db6565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610b5291906145c7565b610b5c9190614596565b90508160000151819350935050509250929050565b610b7a82610960565b610b8381611649565b610b8d8383611dc0565b505050565b610b9a611841565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfe9061443b565b60405180910390fd5b610c118282611ea1565b5050565b610c308383836040518060200160405280600081525061136c565b505050565b610c40816001611f83565b50565b60026008541415610c89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c80906143fb565b60405180910390fd5b6002600881905550600e60009054906101000a900460ff16610ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd79061431b565b60405180910390fd5b60011515601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151415610d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6b9061437b565b60405180910390fd5b60008111610db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dae906143db565b60405180910390fd5b610dcb8383610dc63385612373565b6123a6565b610e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e019061433b565b60405180910390fd5b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550610e6c3382612487565b6001600881905550505050565b610e816124a5565b600e60009054906101000a900460ff1615600e60006101000a81548160ff021916908315150217905550565b610eb56124a5565b80600d9080519060200190610ecb9291906137b5565b5050565b7fd8acb51ff3d48f690a25887aaf234c4ae5a66ab9839243cd8e2b639cade0663b610ef981611649565b610f04848484612523565b50505050565b6000610f15826126cb565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f88576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610ff86124a5565b6110026000612956565b565b7fd8acb51ff3d48f690a25887aaf234c4ae5a66ab9839243cd8e2b639cade0663b61102e81611649565b61103782612a1c565b5050565b60106020528060005260406000206000915054906101000a900460ff1681565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600c600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b7fd8acb51ff3d48f690a25887aaf234c4ae5a66ab9839243cd8e2b639cade0663b81565b60606003805461112390614757565b80601f016020809104026020016040519081016040528092919081815260200182805461114f90614757565b801561119c5780601f106111715761010080835404028352916020019161119c565b820191906000526020600020905b81548152906001019060200180831161117f57829003601f168201915b5050505050905090565b6111ae6124a5565b80600f8190555050565b6000801b81565b6111c7611841565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561122c576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611239611841565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166112e6611841565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161132b9190614283565b60405180910390a35050565b7fd8acb51ff3d48f690a25887aaf234c4ae5a66ab9839243cd8e2b639cade0663b61136181611649565b611369612a7b565b50565b611377848484611900565b6113968373ffffffffffffffffffffffffffffffffffffffff16612ac8565b156113de576113a784848484612aeb565b6113dd576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60606113ef826117f3565b611425576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061142f612c4b565b9050600081511415611450576040518060200160405280600081525061147b565b8061145a84612cdd565b60405160200161146b929190614195565b6040516020818303038152906040525b915050919050565b600e60009054906101000a900460ff1681565b61149f82610960565b6114a881611649565b6114b28383611ea1565b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115536124a5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ba906142fb565b60405180910390fd5b6115cc81612956565b50565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611642575061164182612e8a565b5b9050919050565b61165a81611655611841565b612f04565b50565b611665611db6565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156116c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ba906143bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611733576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172a9061441b565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600a60008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b6000816117fe6118fb565b1115801561180d575060005482105b801561183a575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b600061190b826126cb565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611976576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611997611841565b73ffffffffffffffffffffffffffffffffffffffff1614806119c657506119c5856119c0611841565b6114b7565b5b80611a0b57506119d4611841565b73ffffffffffffffffffffffffffffffffffffffff166119f3846107b8565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611a44576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611aab576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ab88585856001612fa1565b611ac460008487611849565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611d44576000548214611d4357878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611daf8585856001612fa7565b5050505050565b6000612710905090565b611dca8282611085565b611e9d576001600c600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611e42611841565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b611eab8282611085565b15611f7f576000600c600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611f24611841565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6000611f8e836126cb565b9050600081600001519050821561206f5760008173ffffffffffffffffffffffffffffffffffffffff16611fc0611841565b73ffffffffffffffffffffffffffffffffffffffff161480611fef5750611fee82611fe9611841565b6114b7565b5b806120345750611ffd611841565b73ffffffffffffffffffffffffffffffffffffffff1661201c866107b8565b73ffffffffffffffffffffffffffffffffffffffff16145b90508061206d576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b61207d816000866001612fa1565b61208960008583611849565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060018160000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060018160000160108282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008781526020019081526020016000209050828160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600181600001601c6101000a81548160ff02191690831515021790555060006001870190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156122ed5760005482146122ec57848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555085602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b5050505083600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461235b816000866001612fa7565b60016000815480929190600101919050555050505050565b6000828260405160200161238892919061413d565b60405160208183030381529060405280519060200120905092915050565b600080600083905060005b86869050811015612476578686828181106123f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020135925082821015612436578183604051602001612419929190614169565b604051602081830303815290604052805190602001209150612462565b8282604051602001612449929190614169565b6040516020818303038152906040528051906020012091505b60018161246f9190614540565b90506123b1565b50600f548114925050509392505050565b6124a1828260405180602001604052806000815250612fad565b5050565b6124ad611841565b73ffffffffffffffffffffffffffffffffffffffff166124cb61105b565b73ffffffffffffffffffffffffffffffffffffffff1614612521576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125189061435b565b60405180910390fd5b565b61252b611db6565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115612589576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612580906143bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f09061439b565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600b600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b6126d361383b565b6000829050806126e16118fb565b1161291f5760005481101561291e576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161291c57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612800578092505050612951565b5b60011561291b57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614612916578092505050612951565b612801565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600b6000828152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff0219169055505050565b600a600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff02191690555050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b11611841565b8786866040518563ffffffff1660e01b8152600401612b33949392919061420e565b602060405180830381600087803b158015612b4d57600080fd5b505af1925050508015612b7e57506040513d601f19601f82011682018060405250810190612b7b9190613d11565b60015b612bf8573d8060008114612bae576040519150601f19603f3d011682016040523d82523d6000602084013e612bb3565b606091505b50600081511415612bf0576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600d8054612c5a90614757565b80601f0160208091040260200160405190810160405280929190818152602001828054612c8690614757565b8015612cd35780601f10612ca857610100808354040283529160200191612cd3565b820191906000526020600020905b815481529060010190602001808311612cb657829003601f168201915b5050505050905090565b60606000821415612d25576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e85565b600082905060005b60008214612d57578080612d40906147ba565b915050600a82612d509190614596565b9150612d2d565b60008167ffffffffffffffff811115612d99577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612dcb5781602001600182028036833780820191505090505b5090505b60008514612e7e57600182612de49190614621565b9150600a85612df3919061483b565b6030612dff9190614540565b60f81b818381518110612e3b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e779190614596565b9450612dcf565b8093505050505b919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612efd5750612efc8261336f565b5b9050919050565b612f0e8282611085565b612f9d57612f338173ffffffffffffffffffffffffffffffffffffffff166014613451565b612f418360001c6020613451565b604051602001612f529291906141b9565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9491906142b9565b60405180910390fd5b5050565b50505050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561301a576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831415613055576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130626000858386612fa1565b82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000819050600084820190506132238673ffffffffffffffffffffffffffffffffffffffff16612ac8565b156132e8575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46132986000878480600101955087612aeb565b6132ce576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106132295782600054146132e357600080fd5b613353565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106132e9575b8160008190555050506133696000858386612fa7565b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061343a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061344a57506134498261374b565b5b9050919050565b60606000600283600261346491906145c7565b61346e9190614540565b67ffffffffffffffff8111156134ad577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156134df5781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811061353d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106135c7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261360791906145c7565b6136119190614540565b90505b60018111156136fd577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110613679577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b8282815181106136b6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c9450806136f69061472d565b9050613614565b5060008414613741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613738906142db565b60405180910390fd5b8091505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b8280546137c190614757565b90600052602060002090601f0160209004810192826137e3576000855561382a565b82601f106137fc57805160ff191683800117855561382a565b8280016001018555821561382a579182015b8281111561382957825182559160200191906001019061380e565b5b509050613837919061387e565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b8082111561389757600081600090555060010161387f565b5090565b60006138ae6138a98461449b565b614476565b9050828152602081018484840111156138c657600080fd5b6138d18482856146eb565b509392505050565b60006138ec6138e7846144cc565b614476565b90508281526020810184848401111561390457600080fd5b61390f8482856146eb565b509392505050565b60008135905061392681614bf6565b92915050565b60008083601f84011261393e57600080fd5b8235905067ffffffffffffffff81111561395757600080fd5b60208301915083602082028301111561396f57600080fd5b9250929050565b60008135905061398581614c0d565b92915050565b60008135905061399a81614c24565b92915050565b6000813590506139af81614c3b565b92915050565b6000815190506139c481614c3b565b92915050565b600082601f8301126139db57600080fd5b81356139eb84826020860161389b565b91505092915050565b600082601f830112613a0557600080fd5b8135613a158482602086016138d9565b91505092915050565b600081359050613a2d81614c52565b92915050565b600081359050613a4281614c69565b92915050565b600060208284031215613a5a57600080fd5b6000613a6884828501613917565b91505092915050565b60008060408385031215613a8457600080fd5b6000613a9285828601613917565b9250506020613aa385828601613917565b9150509250929050565b600080600060608486031215613ac257600080fd5b6000613ad086828701613917565b9350506020613ae186828701613917565b9250506040613af286828701613a1e565b9150509250925092565b60008060008060808587031215613b1257600080fd5b6000613b2087828801613917565b9450506020613b3187828801613917565b9350506040613b4287828801613a1e565b925050606085013567ffffffffffffffff811115613b5f57600080fd5b613b6b878288016139ca565b91505092959194509250565b60008060408385031215613b8a57600080fd5b6000613b9885828601613917565b9250506020613ba985828601613976565b9150509250929050565b60008060408385031215613bc657600080fd5b6000613bd485828601613917565b9250506020613be585828601613a1e565b9150509250929050565b60008060408385031215613c0257600080fd5b6000613c1085828601613917565b9250506020613c2185828601613a33565b9150509250929050565b600080600060408486031215613c4057600080fd5b600084013567ffffffffffffffff811115613c5a57600080fd5b613c668682870161392c565b93509350506020613c7986828701613a1e565b9150509250925092565b600060208284031215613c9557600080fd5b6000613ca38482850161398b565b91505092915050565b60008060408385031215613cbf57600080fd5b6000613ccd8582860161398b565b9250506020613cde85828601613917565b9150509250929050565b600060208284031215613cfa57600080fd5b6000613d08848285016139a0565b91505092915050565b600060208284031215613d2357600080fd5b6000613d31848285016139b5565b91505092915050565b600060208284031215613d4c57600080fd5b600082013567ffffffffffffffff811115613d6657600080fd5b613d72848285016139f4565b91505092915050565b600060208284031215613d8d57600080fd5b6000613d9b84828501613a1e565b91505092915050565b600080600060608486031215613db957600080fd5b6000613dc786828701613a1e565b9350506020613dd886828701613917565b9250506040613de986828701613a33565b9150509250925092565b60008060408385031215613e0657600080fd5b6000613e1485828601613a1e565b9250506020613e2585828601613a1e565b9150509250929050565b613e3881614655565b82525050565b613e4f613e4a82614655565b614803565b82525050565b613e5e81614667565b82525050565b613e6d81614673565b82525050565b613e84613e7f82614673565b614815565b82525050565b6000613e95826144fd565b613e9f8185614513565b9350613eaf8185602086016146fa565b613eb881614928565b840191505092915050565b6000613ece82614508565b613ed88185614524565b9350613ee88185602086016146fa565b613ef181614928565b840191505092915050565b6000613f0782614508565b613f118185614535565b9350613f218185602086016146fa565b80840191505092915050565b6000613f3a602083614524565b9150613f4582614946565b602082019050919050565b6000613f5d602683614524565b9150613f688261496f565b604082019050919050565b6000613f80601783614524565b9150613f8b826149be565b602082019050919050565b6000613fa3600b83614524565b9150613fae826149e7565b602082019050919050565b6000613fc6602083614524565b9150613fd182614a10565b602082019050919050565b6000613fe9600f83614524565b9150613ff482614a39565b602082019050919050565b600061400c601b83614524565b915061401782614a62565b602082019050919050565b600061402f601783614535565b915061403a82614a8b565b601782019050919050565b6000614052602a83614524565b915061405d82614ab4565b604082019050919050565b6000614075601083614524565b915061408082614b03565b602082019050919050565b6000614098601f83614524565b91506140a382614b2c565b602082019050919050565b60006140bb601983614524565b91506140c682614b55565b602082019050919050565b60006140de601183614535565b91506140e982614b7e565b601182019050919050565b6000614101602f83614524565b915061410c82614ba7565b604082019050919050565b614120816146c9565b82525050565b614137614132826146c9565b614831565b82525050565b60006141498285613e3e565b6014820191506141598284614126565b6020820191508190509392505050565b60006141758285613e73565b6020820191506141858284613e73565b6020820191508190509392505050565b60006141a18285613efc565b91506141ad8284613efc565b91508190509392505050565b60006141c482614022565b91506141d08285613efc565b91506141db826140d1565b91506141e78284613efc565b91508190509392505050565b60006020820190506142086000830184613e2f565b92915050565b60006080820190506142236000830187613e2f565b6142306020830186613e2f565b61423d6040830185614117565b818103606083015261424f8184613e8a565b905095945050505050565b600060408201905061426f6000830185613e2f565b61427c6020830184614117565b9392505050565b60006020820190506142986000830184613e55565b92915050565b60006020820190506142b36000830184613e64565b92915050565b600060208201905081810360008301526142d38184613ec3565b905092915050565b600060208201905081810360008301526142f481613f2d565b9050919050565b6000602082019050818103600083015261431481613f50565b9050919050565b6000602082019050818103600083015261433481613f73565b9050919050565b6000602082019050818103600083015261435481613f96565b9050919050565b6000602082019050818103600083015261437481613fb9565b9050919050565b6000602082019050818103600083015261439481613fdc565b9050919050565b600060208201905081810360008301526143b481613fff565b9050919050565b600060208201905081810360008301526143d481614045565b9050919050565b600060208201905081810360008301526143f481614068565b9050919050565b600060208201905081810360008301526144148161408b565b9050919050565b60006020820190508181036000830152614434816140ae565b9050919050565b60006020820190508181036000830152614454816140f4565b9050919050565b60006020820190506144706000830184614117565b92915050565b6000614480614491565b905061448c8282614789565b919050565b6000604051905090565b600067ffffffffffffffff8211156144b6576144b56148f9565b5b6144bf82614928565b9050602081019050919050565b600067ffffffffffffffff8211156144e7576144e66148f9565b5b6144f082614928565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061454b826146c9565b9150614556836146c9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561458b5761458a61486c565b5b828201905092915050565b60006145a1826146c9565b91506145ac836146c9565b9250826145bc576145bb61489b565b5b828204905092915050565b60006145d2826146c9565b91506145dd836146c9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156146165761461561486c565b5b828202905092915050565b600061462c826146c9565b9150614637836146c9565b92508282101561464a5761464961486c565b5b828203905092915050565b6000614660826146a9565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156147185780820151818401526020810190506146fd565b83811115614727576000848401525b50505050565b6000614738826146c9565b9150600082141561474c5761474b61486c565b5b600182039050919050565b6000600282049050600182168061476f57607f821691505b60208210811415614783576147826148ca565b5b50919050565b61479282614928565b810181811067ffffffffffffffff821117156147b1576147b06148f9565b5b80604052505050565b60006147c5826146c9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156147f8576147f761486c565b5b600182019050919050565b600061480e8261481f565b9050919050565b6000819050919050565b600061482a82614939565b9050919050565b6000819050919050565b6000614846826146c9565b9150614851836146c9565b9250826148615761486061489b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f41495244524f505f4e4f545f5945545f53544152544544000000000000000000600082015250565b7f57524f4e475f50524f4f46000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f434c41494d45445f414c52454144590000000000000000000000000000000000600082015250565b7f455243323938313a20496e76616c696420706172616d65746572730000000000600082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b7f494e56414c49445f5155414e5449545900000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b614bff81614655565b8114614c0a57600080fd5b50565b614c1681614667565b8114614c2157600080fd5b50565b614c2d81614673565b8114614c3857600080fd5b50565b614c448161467d565b8114614c4f57600080fd5b50565b614c5b816146c9565b8114614c6657600080fd5b50565b614c72816146d3565b8114614c7d57600080fd5b5056fea264697066735822122040e825bedc50d18a29f773e7fbbec5c4bb5cfed5e19869562133fb3177cbffc364736f6c63430008040033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000001454686520416d65726963616e73205363726f6c6c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000055441732d53000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): The Americans Scroll
Arg [1] : _symbol (string): TAs-S

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000014
Arg [3] : 54686520416d65726963616e73205363726f6c6c000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 5441732d53000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

30632:2947:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32574:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32866:159;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14540:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15687:245;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15285:394;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12032:170;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16489;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26722:131;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30865:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28948:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;26859:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27167:218;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16667:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32245:79;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31779:458;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32768:90;;;:::i;:::-;;32332:109;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33147:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14407:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12730:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10217:103;;;:::i;:::-;;33336:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30900:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9982:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25947:147;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30727:59;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14648:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33466:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25596:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15940:319;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33033:106;;;:::i;:::-;;16860:392;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14760:415;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30833:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27012:149;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16267:214;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10328:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32574:186;32692:4;32716:36;32740:11;32716:23;:36::i;:::-;32709:43;;32574:186;;;:::o;32866:159::-;30766:20;25695:16;25706:4;25695:10;:16::i;:::-;32975:42:::1;32994:8;33004:12;32975:18;:42::i;:::-;32866:159:::0;;;:::o;14540:100::-;14594:13;14627:5;14620:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14540:100;:::o;15687:245::-;15791:7;15821:16;15829:7;15821;:16::i;:::-;15816:64;;15846:34;;;;;;;;;;;;;;15816:64;15900:15;:24;15916:7;15900:24;;;;;;;;;;;;;;;;;;;;;15893:31;;15687:245;;;:::o;15285:394::-;15358:13;15374:24;15390:7;15374:15;:24::i;:::-;15358:40;;15419:5;15413:11;;:2;:11;;;15409:48;;;15433:24;;;;;;;;;;;;;;15409:48;15490:5;15474:21;;:12;:10;:12::i;:::-;:21;;;15470:161;;15515:37;15532:5;15539:12;:10;:12::i;:::-;15515:16;:37::i;:::-;15510:121;;15580:35;;;;;;;;;;;;;;15510:121;15470:161;15643:28;15652:2;15656:7;15665:5;15643:8;:28::i;:::-;15285:394;;;:::o;12032:170::-;12085:7;12168:15;:13;:15::i;:::-;12153:12;;12137:13;;:28;:46;12130:53;;12032:170;:::o;16489:::-;16623:28;16633:4;16639:2;16643:7;16623:9;:28::i;:::-;16489:170;;;:::o;26722:131::-;26796:7;26823:6;:12;26830:4;26823:12;;;;;;;;;;;:22;;;26816:29;;26722:131;;;:::o;30865:26::-;;;;:::o;28948:442::-;29045:7;29054;29074:26;29103:17;:27;29121:8;29103:27;;;;;;;;;;;29074:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29175:1;29147:30;;:7;:16;;;:30;;;29143:92;;;29204:19;29194:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29143:92;29247:21;29312:17;:15;:17::i;:::-;29271:58;;29285:7;:23;;;29272:36;;:10;:36;;;;:::i;:::-;29271:58;;;;:::i;:::-;29247:82;;29350:7;:16;;;29368:13;29342:40;;;;;;28948:442;;;;;:::o;26859:147::-;26942:18;26955:4;26942:12;:18::i;:::-;25695:16;25706:4;25695:10;:16::i;:::-;26973:25:::1;26984:4;26990:7;26973:10;:25::i;:::-;26859:147:::0;;;:::o;27167:218::-;27274:12;:10;:12::i;:::-;27263:23;;:7;:23;;;27255:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;27351:26;27363:4;27369:7;27351:11;:26::i;:::-;27167:218;;:::o;16667:185::-;16805:39;16822:4;16828:2;16832:7;16805:39;;;;;;;;;;;;:16;:39::i;:::-;16667:185;;;:::o;32245:79::-;32296:20;32302:7;32311:4;32296:5;:20::i;:::-;32245:79;:::o;31779:458::-;10922:1;11070:7;;:19;;11062:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;10922:1;11138:7;:18;;;;31880:11:::1;;;;;;;;;;;31872:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;31963:4;31938:29;;:9;:21;31948:10;31938:21;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;;31930:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32018:1;32006:9;:13;31998:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;32059:72;32071:6;;32079:51;32108:10;32120:9;32079:28;:51::i;:::-;32059:11;:72::i;:::-;32051:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;32182:4;32158:9;:21;32168:10;32158:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;32197:32;32207:10;32219:9;32197;:32::i;:::-;10878:1:::0;11183:7;:22;;;;31779:458;;;:::o;32768:90::-;9941:13;:11;:13::i;:::-;32839:11:::1;;;;;;;;;;;32838:12;32824:11;;:26;;;;;;;;;;;;;;;;;;32768:90::o:0;32332:109::-;9941:13;:11;:13::i;:::-;32425:8:::1;32406:16;:27;;;;;;;;;;;;:::i;:::-;;32332:109:::0;:::o;33147:181::-;30766:20;25695:16;25706:4;25695:10;:16::i;:::-;33271:49:::1;33288:7;33297:8;33307:12;33271:16;:49::i;:::-;33147:181:::0;;;;:::o;14407:125::-;14471:7;14498:21;14511:7;14498:12;:21::i;:::-;:26;;;14491:33;;14407:125;;;:::o;12730:206::-;12794:7;12835:1;12818:19;;:5;:19;;;12814:60;;;12846:28;;;;;;;;;;;;;;12814:60;12900:12;:19;12913:5;12900:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;12892:36;;12885:43;;12730:206;;;:::o;10217:103::-;9941:13;:11;:13::i;:::-;10282:30:::1;10309:1;10282:18;:30::i;:::-;10217:103::o:0;33336:122::-;30766:20;25695:16;25706:4;25695:10;:16::i;:::-;33423:27:::1;33442:7;33423:18;:27::i;:::-;33336:122:::0;;:::o;30900:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;9982:87::-;10028:7;10055:6;;;;;;;;;;;10048:13;;9982:87;:::o;25947:147::-;26033:4;26057:6;:12;26064:4;26057:12;;;;;;;;;;;:20;;:29;26078:7;26057:29;;;;;;;;;;;;;;;;;;;;;;;;;26050:36;;25947:147;;;;:::o;30727:59::-;30766:20;30727:59;:::o;14648:104::-;14704:13;14737:7;14730:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14648:104;:::o;33466:108::-;9941:13;:11;:13::i;:::-;33555:11:::1;33541;:25;;;;33466:108:::0;:::o;25596:49::-;25641:4;25596:49;;;:::o;15940:319::-;16083:12;:10;:12::i;:::-;16071:24;;:8;:24;;;16067:54;;;16104:17;;;;;;;;;;;;;;16067:54;16179:8;16134:18;:32;16153:12;:10;:12::i;:::-;16134:32;;;;;;;;;;;;;;;:42;16167:8;16134:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;16232:8;16203:48;;16218:12;:10;:12::i;:::-;16203:48;;;16242:8;16203:48;;;;;;:::i;:::-;;;;;;;;15940:319;;:::o;33033:106::-;30766:20;25695:16;25706:4;25695:10;:16::i;:::-;33108:23:::1;:21;:23::i;:::-;33033:106:::0;:::o;16860:392::-;17027:28;17037:4;17043:2;17047:7;17027:9;:28::i;:::-;17070:15;:2;:13;;;:15::i;:::-;17066:179;;;17105:56;17136:4;17142:2;17146:7;17155:5;17105:30;:56::i;:::-;17100:145;;17189:40;;;;;;;;;;;;;;17100:145;17066:179;16860:392;;;;:::o;14760:415::-;14878:13;14914:16;14922:7;14914;:16::i;:::-;14909:59;;14939:29;;;;;;;;;;;;;;14909:59;14981:21;15005:10;:8;:10::i;:::-;14981:34;;15071:1;15052:7;15046:21;:26;;:121;;;;;;;;;;;;;;;;;15116:7;15125:18;:7;:16;:18::i;:::-;15099:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15046:121;15026:141;;;14760:415;;;:::o;30833:23::-;;;;;;;;;;;;;:::o;27012:149::-;27096:18;27109:4;27096:12;:18::i;:::-;25695:16;25706:4;25695:10;:16::i;:::-;27127:26:::1;27139:4;27145:7;27127:11;:26::i;:::-;27012:149:::0;;;:::o;16267:214::-;16409:4;16438:18;:25;16457:5;16438:25;;;;;;;;;;;;;;;:35;16464:8;16438:35;;;;;;;;;;;;;;;;;;;;;;;;;16431:42;;16267:214;;;;:::o;10328:238::-;9941:13;:11;:13::i;:::-;10451:1:::1;10431:22;;:8;:22;;;;10409:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;10530:28;10549:8;10530:18;:28::i;:::-;10328:238:::0;:::o;25737:204::-;25822:4;25861:32;25846:47;;;:11;:47;;;;:87;;;;25897:36;25921:11;25897:23;:36::i;:::-;25846:87;25839:94;;25737:204;;;:::o;26100:105::-;26167:30;26178:4;26184:12;:10;:12::i;:::-;26167:10;:30::i;:::-;26100:105;:::o;29499:332::-;29618:17;:15;:17::i;:::-;29602:33;;:12;:33;;;;29594:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;29721:1;29701:22;;:8;:22;;;;29693:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29788:35;;;;;;;;29800:8;29788:35;;;;;;29810:12;29788:35;;;;;29766:19;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29499:332;;:::o;17260:213::-;17317:4;17373:7;17354:15;:13;:15::i;:::-;:26;;:66;;;;;17407:13;;17397:7;:23;17354:66;:111;;;;;17438:11;:20;17450:7;17438:20;;;;;;;;;;;:27;;;;;;;;;;;;17437:28;17354:111;17334:131;;17260:213;;;:::o;9405:98::-;9458:7;9485:10;9478:17;;9405:98;:::o;23310:196::-;23452:2;23425:15;:24;23441:7;23425:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;23490:7;23486:2;23470:28;;23479:5;23470:28;;;;;;;;;;;;23310:196;;;:::o;11932:92::-;11988:7;11932:92;:::o;20202:1442::-;20317:35;20355:21;20368:7;20355:12;:21::i;:::-;20317:59;;20415:4;20393:26;;:13;:18;;;:26;;;20389:67;;20428:28;;;;;;;;;;;;;;20389:67;20469:22;20511:4;20495:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;20532:36;20549:4;20555:12;:10;:12::i;:::-;20532:16;:36::i;:::-;20495:73;:126;;;;20609:12;:10;:12::i;:::-;20585:36;;:20;20597:7;20585:11;:20::i;:::-;:36;;;20495:126;20469:153;;20640:17;20635:66;;20666:35;;;;;;;;;;;;;;20635:66;20730:1;20716:16;;:2;:16;;;20712:52;;;20741:23;;;;;;;;;;;;;;20712:52;20777:43;20799:4;20805:2;20809:7;20818:1;20777:21;:43::i;:::-;20833:35;20850:1;20854:7;20863:4;20833:8;:35::i;:::-;20936:1;20906:12;:18;20919:4;20906:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20980:1;20952:12;:16;20965:2;20952:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20998:31;21032:11;:20;21044:7;21032:20;;;;;;;;;;;20998:54;;21083:2;21067:8;:13;;;:18;;;;;;;;;;;;;;;;;;21133:15;21100:8;:23;;;:49;;;;;;;;;;;;;;;;;;21166:19;21198:1;21188:7;:11;21166:33;;21214:31;21248:11;:24;21260:11;21248:24;;;;;;;;;;;21214:58;;21316:1;21291:27;;:8;:13;;;;;;;;;;;;:27;;;21287:241;;;21358:13;;21343:11;:28;21339:174;;21412:4;21396:8;:13;;;:20;;;;;;;;;;;;;;;;;;21465:13;:28;;;21439:8;:23;;;:54;;;;;;;;;;;;;;;;;;21339:174;21287:241;20202:1442;;;21575:7;21571:2;21556:27;;21565:4;21556:27;;;;;;;;;;;;21594:42;21615:4;21621:2;21625:7;21634:1;21594:20;:42::i;:::-;20202:1442;;;;;:::o;29396:97::-;29454:6;29480:5;29473:12;;29396:97;:::o;27766:238::-;27850:22;27858:4;27864:7;27850;:22::i;:::-;27845:152;;27921:4;27889:6;:12;27896:4;27889:12;;;;;;;;;;;:20;;:29;27910:7;27889:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;27972:12;:10;:12::i;:::-;27945:40;;27963:7;27945:40;;27957:4;27945:40;;;;;;;;;;27845:152;27766:238;;:::o;28010:239::-;28094:22;28102:4;28108:7;28094;:22::i;:::-;28090:152;;;28165:5;28133:6;:12;28140:4;28133:12;;;;;;;;;;;:20;;:29;28154:7;28133:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;28217:12;:10;:12::i;:::-;28190:40;;28208:7;28190:40;;28202:4;28190:40;;;;;;;;;;28090:152;28010:239;;:::o;21749:1553::-;21829:35;21867:21;21880:7;21867:12;:21::i;:::-;21829:59;;21901:12;21916:13;:18;;;21901:33;;21951:13;21947:290;;;21981:22;22023:4;22007:20;;:12;:10;:12::i;:::-;:20;;;:77;;;;22048:36;22065:4;22071:12;:10;:12::i;:::-;22048:16;:36::i;:::-;22007:77;:134;;;;22129:12;:10;:12::i;:::-;22105:36;;:20;22117:7;22105:11;:20::i;:::-;:36;;;22007:134;21981:161;;22164:17;22159:66;;22190:35;;;;;;;;;;;;;;22159:66;21947:290;;22249:51;22271:4;22285:1;22289:7;22298:1;22249:21;:51::i;:::-;22313:35;22330:1;22334:7;22343:4;22313:8;:35::i;:::-;22386:31;22420:12;:18;22433:4;22420:18;;;;;;;;;;;;;;;22386:52;;22476:1;22453:11;:19;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22520:1;22492:11;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22538:31;22572:11;:20;22584:7;22572:20;;;;;;;;;;;22538:54;;22623:4;22607:8;:13;;;:20;;;;;;;;;;;;;;;;;;22675:15;22642:8;:23;;;:49;;;;;;;;;;;;;;;;;;22724:4;22706:8;:15;;;:22;;;;;;;;;;;;;;;;;;22745:19;22777:1;22767:7;:11;22745:33;;22793:31;22827:11;:24;22839:11;22827:24;;;;;;;;;;;22793:58;;22895:1;22870:27;;:8;:13;;;;;;;;;;;;:27;;;22866:241;;;22937:13;;22922:11;:28;22918:174;;22991:4;22975:8;:13;;;:20;;;;;;;;;;;;;;;;;;23044:13;:28;;;23018:8;:23;;;:54;;;;;;;;;;;;;;;;;;22918:174;22866:241;21749:1553;;;;23162:7;23158:1;23135:35;;23144:4;23135:35;;;;;;;;;;;;23181:50;23202:4;23216:1;23220:7;23229:1;23181:20;:50::i;:::-;23269:12;;:14;;;;;;;;;;;;;21749:1553;;;;:::o;31155:153::-;31239:7;31292:2;31296;31275:24;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31265:35;;;;;;31258:42;;31155:153;;;;:::o;31316:455::-;31400:4;31417:10;31438:9;31450:5;31438:17;;31471:9;31466:264;31490:5;;:12;;31486:1;:16;31466:264;;;31532:5;;31538:1;31532:8;;;;;;;;;;;;;;;;;;;;;31527:13;;31563:2;31559:1;:6;31555:164;;;31617:1;31620:2;31600:23;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31590:34;;;;;;31586:38;;31555:164;;;31696:2;31700:1;31679:23;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31669:34;;;;;;31665:38;;31555:164;31509:1;31504:6;;;;;:::i;:::-;;;31466:264;;;;31752:11;;31747:1;:16;31740:23;;;;31316:455;;;;;:::o;17481:104::-;17550:27;17560:2;17564:8;17550:27;;;;;;;;;;;;:9;:27::i;:::-;17481:104;;:::o;10077:132::-;10152:12;:10;:12::i;:::-;10141:23;;:7;:5;:7::i;:::-;:23;;;10133:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10077:132::o;29938:390::-;30106:17;:15;:17::i;:::-;30090:33;;:12;:33;;;;30082:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;30209:1;30189:22;;:8;:22;;;;30181:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30285:35;;;;;;;;30297:8;30285:35;;;;;;30307:12;30285:35;;;;;30256:17;:26;30274:7;30256:26;;;;;;;;;;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29938:390;;;:::o;13463:936::-;13552:21;;:::i;:::-;13591:12;13606:7;13591:22;;13674:4;13655:15;:13;:15::i;:::-;:23;13651:681;;13708:13;;13701:4;:20;13697:635;;;13746:31;13780:11;:17;13792:4;13780:17;;;;;;;;;;;13746:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13825:9;:16;;;13820:493;;13900:1;13874:28;;:9;:14;;;:28;;;13870:109;;13942:9;13935:16;;;;;;13870:109;14005:285;14012:4;14005:285;;;14049:6;;;;;;;;14098:11;:17;14110:4;14098:17;;;;;;;;;;;14086:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14176:1;14150:28;;:9;:14;;;:28;;;14146:117;;14222:9;14215:16;;;;;;14146:117;14005:285;;;13820:493;13697:635;;13651:681;14360:31;;;;;;;;;;;;;;13463:936;;;;:::o;10574:191::-;10648:16;10667:6;;;;;;;;;;;10648:25;;10693:8;10684:6;;:17;;;;;;;;;;;;;;;;;;10748:8;10717:40;;10738:8;10717:40;;;;;;;;;;;;10574:191;;:::o;30334:114::-;30414:17;:26;30432:7;30414:26;;;;;;;;;;;;30407:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30334:114;:::o;29837:95::-;29905:19;;29898:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29837:95::o;246:115::-;306:4;352:1;330:7;:19;;;:23;323:30;;246:115;;;:::o;23514:772::-;23677:4;23727:2;23711:36;;;23766:12;:10;:12::i;:::-;23797:4;23820:7;23846:5;23711:155;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;23694:585;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24054:1;24037:6;:13;:18;24033:235;;;24083:40;;;;;;;;;;;;;;24033:235;24226:6;24220:13;24211:6;24207:2;24203:15;24196:38;23694:585;23932:45;;;23922:55;;;:6;:55;;;;23915:62;;;23514:772;;;;;;:::o;32449:117::-;32509:13;32542:16;32535:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32449:117;:::o;7810:532::-;7866:13;7905:1;7896:5;:10;7892:53;;;7923:10;;;;;;;;;;;;;;;;;;;;;7892:53;7955:12;7970:5;7955:20;;7986:14;8011:78;8026:1;8018:4;:9;8011:78;;8044:8;;;;;:::i;:::-;;;;8075:2;8067:10;;;;;:::i;:::-;;;8011:78;;;8099:19;8131:6;8121:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8099:39;;8149:154;8165:1;8156:5;:10;8149:154;;8193:1;8183:11;;;;;:::i;:::-;;;8260:2;8252:5;:10;;;;:::i;:::-;8239:2;:24;;;;:::i;:::-;8226:39;;8209:6;8216;8209:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;8289:2;8280:11;;;;;:::i;:::-;;;8149:154;;;8327:6;8313:21;;;;;7810:532;;;;:::o;28727:215::-;28829:4;28868:26;28853:41;;;:11;:41;;;;:81;;;;28898:36;28922:11;28898:23;:36::i;:::-;28853:81;28846:88;;28727:215;;;:::o;26211:505::-;26300:22;26308:4;26314:7;26300;:22::i;:::-;26295:414;;26488:41;26516:7;26488:41;;26526:2;26488:19;:41::i;:::-;26602:38;26630:4;26622:13;;26637:2;26602:19;:38::i;:::-;26393:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26339:358;;;;;;;;;;;:::i;:::-;;;;;;;;26295:414;26211:505;;:::o;24294:159::-;;;;;:::o;24461:158::-;;;;;:::o;17593:1659::-;17716:20;17739:13;;17716:36;;17781:1;17767:16;;:2;:16;;;17763:48;;;17792:19;;;;;;;;;;;;;;17763:48;17838:1;17826:8;:13;17822:44;;;17848:18;;;;;;;;;;;;;;17822:44;17879:61;17909:1;17913:2;17917:12;17931:8;17879:21;:61::i;:::-;18013:8;17978:12;:16;17991:2;17978:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18077:8;18037:12;:16;18050:2;18037:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18136:2;18103:11;:25;18115:12;18103:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;18203:15;18153:11;:25;18165:12;18153:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;18236:20;18259:12;18236:35;;18286:11;18315:8;18300:12;:23;18286:37;;18344:15;:2;:13;;;:15::i;:::-;18340:780;;;18380:504;18436:12;18432:2;18411:38;;18428:1;18411:38;;;;;;;;;;;;18503:212;18572:1;18605:2;18638:14;;;;;;18683:5;18503:30;:212::i;:::-;18472:365;;18773:40;;;;;;;;;;;;;;18472:365;18879:3;18864:12;:18;18380:504;;18923:12;18906:13;;:29;18902:43;;18937:8;;;18902:43;18340:780;;;18986:119;19042:14;;;;;;19038:2;19017:40;;19034:1;19017:40;;;;;;;;;;;;19100:3;19085:12;:18;18986:119;;18340:780;19150:12;19134:13;:28;;;;17593:1659;;19184:60;19213:1;19217:2;19221:12;19235:8;19184:20;:60::i;:::-;17593:1659;;;;:::o;12367:355::-;12514:4;12571:25;12556:40;;;:11;:40;;;;:105;;;;12628:33;12613:48;;;:11;:48;;;;12556:105;:158;;;;12678:36;12702:11;12678:23;:36::i;:::-;12556:158;12536:178;;12367:355;;;:::o;8698:483::-;8800:13;8831:19;8876:1;8867:6;8863:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;8853:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8831:47;;8889:15;:6;8896:1;8889:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;8915;:6;8922:1;8915:9;;;;;;;;;;;;;;;;;;;:15;;;;;;;;;;;8946:9;8971:1;8962:6;8958:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;8946:26;;8941:135;8978:1;8974;:5;8941:135;;;9013:12;9034:3;9026:5;:11;9013:25;;;;;;;;;;;;;;;;;;9001:6;9008:1;9001:9;;;;;;;;;;;;;;;;;;;:37;;;;;;;;;;;9063:1;9053:11;;;;;8981:3;;;;:::i;:::-;;;8941:135;;;;9103:1;9094:5;:10;9086:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;9166:6;9152:21;;;8698:483;;;;:::o;7481:157::-;7566:4;7605:25;7590:40;;;:11;:40;;;;7583:47;;7481:157;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;869:367::-;942:8;952:6;1002:3;995:4;987:6;983:17;979:27;969:2;;1020:1;1017;1010:12;969:2;1056:6;1043:20;1033:30;;1086:18;1078:6;1075:30;1072:2;;;1118:1;1115;1108:12;1072:2;1155:4;1147:6;1143:17;1131:29;;1209:3;1201:4;1193:6;1189:17;1179:8;1175:32;1172:41;1169:2;;;1226:1;1223;1216:12;1169:2;959:277;;;;;:::o;1242:133::-;1285:5;1323:6;1310:20;1301:29;;1339:30;1363:5;1339:30;:::i;:::-;1291:84;;;;:::o;1381:139::-;1427:5;1465:6;1452:20;1443:29;;1481:33;1508:5;1481:33;:::i;:::-;1433:87;;;;:::o;1526:137::-;1571:5;1609:6;1596:20;1587:29;;1625:32;1651:5;1625:32;:::i;:::-;1577:86;;;;:::o;1669:141::-;1725:5;1756:6;1750:13;1741:22;;1772:32;1798:5;1772:32;:::i;:::-;1731:79;;;;:::o;1829:271::-;1884:5;1933:3;1926:4;1918:6;1914:17;1910:27;1900:2;;1951:1;1948;1941:12;1900:2;1991:6;1978:20;2016:78;2090:3;2082:6;2075:4;2067:6;2063:17;2016:78;:::i;:::-;2007:87;;1890:210;;;;;:::o;2120:273::-;2176:5;2225:3;2218:4;2210:6;2206:17;2202:27;2192:2;;2243:1;2240;2233:12;2192:2;2283:6;2270:20;2308:79;2383:3;2375:6;2368:4;2360:6;2356:17;2308:79;:::i;:::-;2299:88;;2182:211;;;;;:::o;2399:139::-;2445:5;2483:6;2470:20;2461:29;;2499:33;2526:5;2499:33;:::i;:::-;2451:87;;;;:::o;2544:137::-;2589:5;2627:6;2614:20;2605:29;;2643:32;2669:5;2643:32;:::i;:::-;2595:86;;;;:::o;2687:262::-;2746:6;2795:2;2783:9;2774:7;2770:23;2766:32;2763:2;;;2811:1;2808;2801:12;2763:2;2854:1;2879:53;2924:7;2915:6;2904:9;2900:22;2879:53;:::i;:::-;2869:63;;2825:117;2753:196;;;;:::o;2955:407::-;3023:6;3031;3080:2;3068:9;3059:7;3055:23;3051:32;3048:2;;;3096:1;3093;3086:12;3048:2;3139:1;3164:53;3209:7;3200:6;3189:9;3185:22;3164:53;:::i;:::-;3154:63;;3110:117;3266:2;3292:53;3337:7;3328:6;3317:9;3313:22;3292:53;:::i;:::-;3282:63;;3237:118;3038:324;;;;;:::o;3368:552::-;3445:6;3453;3461;3510:2;3498:9;3489:7;3485:23;3481:32;3478:2;;;3526:1;3523;3516:12;3478:2;3569:1;3594:53;3639:7;3630:6;3619:9;3615:22;3594:53;:::i;:::-;3584:63;;3540:117;3696:2;3722:53;3767:7;3758:6;3747:9;3743:22;3722:53;:::i;:::-;3712:63;;3667:118;3824:2;3850:53;3895:7;3886:6;3875:9;3871:22;3850:53;:::i;:::-;3840:63;;3795:118;3468:452;;;;;:::o;3926:809::-;4021:6;4029;4037;4045;4094:3;4082:9;4073:7;4069:23;4065:33;4062:2;;;4111:1;4108;4101:12;4062:2;4154:1;4179:53;4224:7;4215:6;4204:9;4200:22;4179:53;:::i;:::-;4169:63;;4125:117;4281:2;4307:53;4352:7;4343:6;4332:9;4328:22;4307:53;:::i;:::-;4297:63;;4252:118;4409:2;4435:53;4480:7;4471:6;4460:9;4456:22;4435:53;:::i;:::-;4425:63;;4380:118;4565:2;4554:9;4550:18;4537:32;4596:18;4588:6;4585:30;4582:2;;;4628:1;4625;4618:12;4582:2;4656:62;4710:7;4701:6;4690:9;4686:22;4656:62;:::i;:::-;4646:72;;4508:220;4052:683;;;;;;;:::o;4741:401::-;4806:6;4814;4863:2;4851:9;4842:7;4838:23;4834:32;4831:2;;;4879:1;4876;4869:12;4831:2;4922:1;4947:53;4992:7;4983:6;4972:9;4968:22;4947:53;:::i;:::-;4937:63;;4893:117;5049:2;5075:50;5117:7;5108:6;5097:9;5093:22;5075:50;:::i;:::-;5065:60;;5020:115;4821:321;;;;;:::o;5148:407::-;5216:6;5224;5273:2;5261:9;5252:7;5248:23;5244:32;5241:2;;;5289:1;5286;5279:12;5241:2;5332:1;5357:53;5402:7;5393:6;5382:9;5378:22;5357:53;:::i;:::-;5347:63;;5303:117;5459:2;5485:53;5530:7;5521:6;5510:9;5506:22;5485:53;:::i;:::-;5475:63;;5430:118;5231:324;;;;;:::o;5561:405::-;5628:6;5636;5685:2;5673:9;5664:7;5660:23;5656:32;5653:2;;;5701:1;5698;5691:12;5653:2;5744:1;5769:53;5814:7;5805:6;5794:9;5790:22;5769:53;:::i;:::-;5759:63;;5715:117;5871:2;5897:52;5941:7;5932:6;5921:9;5917:22;5897:52;:::i;:::-;5887:62;;5842:117;5643:323;;;;;:::o;5972:570::-;6067:6;6075;6083;6132:2;6120:9;6111:7;6107:23;6103:32;6100:2;;;6148:1;6145;6138:12;6100:2;6219:1;6208:9;6204:17;6191:31;6249:18;6241:6;6238:30;6235:2;;;6281:1;6278;6271:12;6235:2;6317:80;6389:7;6380:6;6369:9;6365:22;6317:80;:::i;:::-;6299:98;;;;6162:245;6446:2;6472:53;6517:7;6508:6;6497:9;6493:22;6472:53;:::i;:::-;6462:63;;6417:118;6090:452;;;;;:::o;6548:262::-;6607:6;6656:2;6644:9;6635:7;6631:23;6627:32;6624:2;;;6672:1;6669;6662:12;6624:2;6715:1;6740:53;6785:7;6776:6;6765:9;6761:22;6740:53;:::i;:::-;6730:63;;6686:117;6614:196;;;;:::o;6816:407::-;6884:6;6892;6941:2;6929:9;6920:7;6916:23;6912:32;6909:2;;;6957:1;6954;6947:12;6909:2;7000:1;7025:53;7070:7;7061:6;7050:9;7046:22;7025:53;:::i;:::-;7015:63;;6971:117;7127:2;7153:53;7198:7;7189:6;7178:9;7174:22;7153:53;:::i;:::-;7143:63;;7098:118;6899:324;;;;;:::o;7229:260::-;7287:6;7336:2;7324:9;7315:7;7311:23;7307:32;7304:2;;;7352:1;7349;7342:12;7304:2;7395:1;7420:52;7464:7;7455:6;7444:9;7440:22;7420:52;:::i;:::-;7410:62;;7366:116;7294:195;;;;:::o;7495:282::-;7564:6;7613:2;7601:9;7592:7;7588:23;7584:32;7581:2;;;7629:1;7626;7619:12;7581:2;7672:1;7697:63;7752:7;7743:6;7732:9;7728:22;7697:63;:::i;:::-;7687:73;;7643:127;7571:206;;;;:::o;7783:375::-;7852:6;7901:2;7889:9;7880:7;7876:23;7872:32;7869:2;;;7917:1;7914;7907:12;7869:2;7988:1;7977:9;7973:17;7960:31;8018:18;8010:6;8007:30;8004:2;;;8050:1;8047;8040:12;8004:2;8078:63;8133:7;8124:6;8113:9;8109:22;8078:63;:::i;:::-;8068:73;;7931:220;7859:299;;;;:::o;8164:262::-;8223:6;8272:2;8260:9;8251:7;8247:23;8243:32;8240:2;;;8288:1;8285;8278:12;8240:2;8331:1;8356:53;8401:7;8392:6;8381:9;8377:22;8356:53;:::i;:::-;8346:63;;8302:117;8230:196;;;;:::o;8432:550::-;8508:6;8516;8524;8573:2;8561:9;8552:7;8548:23;8544:32;8541:2;;;8589:1;8586;8579:12;8541:2;8632:1;8657:53;8702:7;8693:6;8682:9;8678:22;8657:53;:::i;:::-;8647:63;;8603:117;8759:2;8785:53;8830:7;8821:6;8810:9;8806:22;8785:53;:::i;:::-;8775:63;;8730:118;8887:2;8913:52;8957:7;8948:6;8937:9;8933:22;8913:52;:::i;:::-;8903:62;;8858:117;8531:451;;;;;:::o;8988:407::-;9056:6;9064;9113:2;9101:9;9092:7;9088:23;9084:32;9081:2;;;9129:1;9126;9119:12;9081:2;9172:1;9197:53;9242:7;9233:6;9222:9;9218:22;9197:53;:::i;:::-;9187:63;;9143:117;9299:2;9325:53;9370:7;9361:6;9350:9;9346:22;9325:53;:::i;:::-;9315:63;;9270:118;9071:324;;;;;:::o;9401:118::-;9488:24;9506:5;9488:24;:::i;:::-;9483:3;9476:37;9466:53;;:::o;9525:157::-;9630:45;9650:24;9668:5;9650:24;:::i;:::-;9630:45;:::i;:::-;9625:3;9618:58;9608:74;;:::o;9688:109::-;9769:21;9784:5;9769:21;:::i;:::-;9764:3;9757:34;9747:50;;:::o;9803:118::-;9890:24;9908:5;9890:24;:::i;:::-;9885:3;9878:37;9868:53;;:::o;9927:157::-;10032:45;10052:24;10070:5;10052:24;:::i;:::-;10032:45;:::i;:::-;10027:3;10020:58;10010:74;;:::o;10090:360::-;10176:3;10204:38;10236:5;10204:38;:::i;:::-;10258:70;10321:6;10316:3;10258:70;:::i;:::-;10251:77;;10337:52;10382:6;10377:3;10370:4;10363:5;10359:16;10337:52;:::i;:::-;10414:29;10436:6;10414:29;:::i;:::-;10409:3;10405:39;10398:46;;10180:270;;;;;:::o;10456:364::-;10544:3;10572:39;10605:5;10572:39;:::i;:::-;10627:71;10691:6;10686:3;10627:71;:::i;:::-;10620:78;;10707:52;10752:6;10747:3;10740:4;10733:5;10729:16;10707:52;:::i;:::-;10784:29;10806:6;10784:29;:::i;:::-;10779:3;10775:39;10768:46;;10548:272;;;;;:::o;10826:377::-;10932:3;10960:39;10993:5;10960:39;:::i;:::-;11015:89;11097:6;11092:3;11015:89;:::i;:::-;11008:96;;11113:52;11158:6;11153:3;11146:4;11139:5;11135:16;11113:52;:::i;:::-;11190:6;11185:3;11181:16;11174:23;;10936:267;;;;;:::o;11209:366::-;11351:3;11372:67;11436:2;11431:3;11372:67;:::i;:::-;11365:74;;11448:93;11537:3;11448:93;:::i;:::-;11566:2;11561:3;11557:12;11550:19;;11355:220;;;:::o;11581:366::-;11723:3;11744:67;11808:2;11803:3;11744:67;:::i;:::-;11737:74;;11820:93;11909:3;11820:93;:::i;:::-;11938:2;11933:3;11929:12;11922:19;;11727:220;;;:::o;11953:366::-;12095:3;12116:67;12180:2;12175:3;12116:67;:::i;:::-;12109:74;;12192:93;12281:3;12192:93;:::i;:::-;12310:2;12305:3;12301:12;12294:19;;12099:220;;;:::o;12325:366::-;12467:3;12488:67;12552:2;12547:3;12488:67;:::i;:::-;12481:74;;12564:93;12653:3;12564:93;:::i;:::-;12682:2;12677:3;12673:12;12666:19;;12471:220;;;:::o;12697:366::-;12839:3;12860:67;12924:2;12919:3;12860:67;:::i;:::-;12853:74;;12936:93;13025:3;12936:93;:::i;:::-;13054:2;13049:3;13045:12;13038:19;;12843:220;;;:::o;13069:366::-;13211:3;13232:67;13296:2;13291:3;13232:67;:::i;:::-;13225:74;;13308:93;13397:3;13308:93;:::i;:::-;13426:2;13421:3;13417:12;13410:19;;13215:220;;;:::o;13441:366::-;13583:3;13604:67;13668:2;13663:3;13604:67;:::i;:::-;13597:74;;13680:93;13769:3;13680:93;:::i;:::-;13798:2;13793:3;13789:12;13782:19;;13587:220;;;:::o;13813:402::-;13973:3;13994:85;14076:2;14071:3;13994:85;:::i;:::-;13987:92;;14088:93;14177:3;14088:93;:::i;:::-;14206:2;14201:3;14197:12;14190:19;;13977:238;;;:::o;14221:366::-;14363:3;14384:67;14448:2;14443:3;14384:67;:::i;:::-;14377:74;;14460:93;14549:3;14460:93;:::i;:::-;14578:2;14573:3;14569:12;14562:19;;14367:220;;;:::o;14593:366::-;14735:3;14756:67;14820:2;14815:3;14756:67;:::i;:::-;14749:74;;14832:93;14921:3;14832:93;:::i;:::-;14950:2;14945:3;14941:12;14934:19;;14739:220;;;:::o;14965:366::-;15107:3;15128:67;15192:2;15187:3;15128:67;:::i;:::-;15121:74;;15204:93;15293:3;15204:93;:::i;:::-;15322:2;15317:3;15313:12;15306:19;;15111:220;;;:::o;15337:366::-;15479:3;15500:67;15564:2;15559:3;15500:67;:::i;:::-;15493:74;;15576:93;15665:3;15576:93;:::i;:::-;15694:2;15689:3;15685:12;15678:19;;15483:220;;;:::o;15709:402::-;15869:3;15890:85;15972:2;15967:3;15890:85;:::i;:::-;15883:92;;15984:93;16073:3;15984:93;:::i;:::-;16102:2;16097:3;16093:12;16086:19;;15873:238;;;:::o;16117:366::-;16259:3;16280:67;16344:2;16339:3;16280:67;:::i;:::-;16273:74;;16356:93;16445:3;16356:93;:::i;:::-;16474:2;16469:3;16465:12;16458:19;;16263:220;;;:::o;16489:118::-;16576:24;16594:5;16576:24;:::i;:::-;16571:3;16564:37;16554:53;;:::o;16613:157::-;16718:45;16738:24;16756:5;16738:24;:::i;:::-;16718:45;:::i;:::-;16713:3;16706:58;16696:74;;:::o;16776:397::-;16916:3;16931:75;17002:3;16993:6;16931:75;:::i;:::-;17031:2;17026:3;17022:12;17015:19;;17044:75;17115:3;17106:6;17044:75;:::i;:::-;17144:2;17139:3;17135:12;17128:19;;17164:3;17157:10;;16920:253;;;;;:::o;17179:397::-;17319:3;17334:75;17405:3;17396:6;17334:75;:::i;:::-;17434:2;17429:3;17425:12;17418:19;;17447:75;17518:3;17509:6;17447:75;:::i;:::-;17547:2;17542:3;17538:12;17531:19;;17567:3;17560:10;;17323:253;;;;;:::o;17582:435::-;17762:3;17784:95;17875:3;17866:6;17784:95;:::i;:::-;17777:102;;17896:95;17987:3;17978:6;17896:95;:::i;:::-;17889:102;;18008:3;18001:10;;17766:251;;;;;:::o;18023:967::-;18405:3;18427:148;18571:3;18427:148;:::i;:::-;18420:155;;18592:95;18683:3;18674:6;18592:95;:::i;:::-;18585:102;;18704:148;18848:3;18704:148;:::i;:::-;18697:155;;18869:95;18960:3;18951:6;18869:95;:::i;:::-;18862:102;;18981:3;18974:10;;18409:581;;;;;:::o;18996:222::-;19089:4;19127:2;19116:9;19112:18;19104:26;;19140:71;19208:1;19197:9;19193:17;19184:6;19140:71;:::i;:::-;19094:124;;;;:::o;19224:640::-;19419:4;19457:3;19446:9;19442:19;19434:27;;19471:71;19539:1;19528:9;19524:17;19515:6;19471:71;:::i;:::-;19552:72;19620:2;19609:9;19605:18;19596:6;19552:72;:::i;:::-;19634;19702:2;19691:9;19687:18;19678:6;19634:72;:::i;:::-;19753:9;19747:4;19743:20;19738:2;19727:9;19723:18;19716:48;19781:76;19852:4;19843:6;19781:76;:::i;:::-;19773:84;;19424:440;;;;;;;:::o;19870:332::-;19991:4;20029:2;20018:9;20014:18;20006:26;;20042:71;20110:1;20099:9;20095:17;20086:6;20042:71;:::i;:::-;20123:72;20191:2;20180:9;20176:18;20167:6;20123:72;:::i;:::-;19996:206;;;;;:::o;20208:210::-;20295:4;20333:2;20322:9;20318:18;20310:26;;20346:65;20408:1;20397:9;20393:17;20384:6;20346:65;:::i;:::-;20300:118;;;;:::o;20424:222::-;20517:4;20555:2;20544:9;20540:18;20532:26;;20568:71;20636:1;20625:9;20621:17;20612:6;20568:71;:::i;:::-;20522:124;;;;:::o;20652:313::-;20765:4;20803:2;20792:9;20788:18;20780:26;;20852:9;20846:4;20842:20;20838:1;20827:9;20823:17;20816:47;20880:78;20953:4;20944:6;20880:78;:::i;:::-;20872:86;;20770:195;;;;:::o;20971:419::-;21137:4;21175:2;21164:9;21160:18;21152:26;;21224:9;21218:4;21214:20;21210:1;21199:9;21195:17;21188:47;21252:131;21378:4;21252:131;:::i;:::-;21244:139;;21142:248;;;:::o;21396:419::-;21562:4;21600:2;21589:9;21585:18;21577:26;;21649:9;21643:4;21639:20;21635:1;21624:9;21620:17;21613:47;21677:131;21803:4;21677:131;:::i;:::-;21669:139;;21567:248;;;:::o;21821:419::-;21987:4;22025:2;22014:9;22010:18;22002:26;;22074:9;22068:4;22064:20;22060:1;22049:9;22045:17;22038:47;22102:131;22228:4;22102:131;:::i;:::-;22094:139;;21992:248;;;:::o;22246:419::-;22412:4;22450:2;22439:9;22435:18;22427:26;;22499:9;22493:4;22489:20;22485:1;22474:9;22470:17;22463:47;22527:131;22653:4;22527:131;:::i;:::-;22519:139;;22417:248;;;:::o;22671:419::-;22837:4;22875:2;22864:9;22860:18;22852:26;;22924:9;22918:4;22914:20;22910:1;22899:9;22895:17;22888:47;22952:131;23078:4;22952:131;:::i;:::-;22944:139;;22842:248;;;:::o;23096:419::-;23262:4;23300:2;23289:9;23285:18;23277:26;;23349:9;23343:4;23339:20;23335:1;23324:9;23320:17;23313:47;23377:131;23503:4;23377:131;:::i;:::-;23369:139;;23267:248;;;:::o;23521:419::-;23687:4;23725:2;23714:9;23710:18;23702:26;;23774:9;23768:4;23764:20;23760:1;23749:9;23745:17;23738:47;23802:131;23928:4;23802:131;:::i;:::-;23794:139;;23692:248;;;:::o;23946:419::-;24112:4;24150:2;24139:9;24135:18;24127:26;;24199:9;24193:4;24189:20;24185:1;24174:9;24170:17;24163:47;24227:131;24353:4;24227:131;:::i;:::-;24219:139;;24117:248;;;:::o;24371:419::-;24537:4;24575:2;24564:9;24560:18;24552:26;;24624:9;24618:4;24614:20;24610:1;24599:9;24595:17;24588:47;24652:131;24778:4;24652:131;:::i;:::-;24644:139;;24542:248;;;:::o;24796:419::-;24962:4;25000:2;24989:9;24985:18;24977:26;;25049:9;25043:4;25039:20;25035:1;25024:9;25020:17;25013:47;25077:131;25203:4;25077:131;:::i;:::-;25069:139;;24967:248;;;:::o;25221:419::-;25387:4;25425:2;25414:9;25410:18;25402:26;;25474:9;25468:4;25464:20;25460:1;25449:9;25445:17;25438:47;25502:131;25628:4;25502:131;:::i;:::-;25494:139;;25392:248;;;:::o;25646:419::-;25812:4;25850:2;25839:9;25835:18;25827:26;;25899:9;25893:4;25889:20;25885:1;25874:9;25870:17;25863:47;25927:131;26053:4;25927:131;:::i;:::-;25919:139;;25817:248;;;:::o;26071:222::-;26164:4;26202:2;26191:9;26187:18;26179:26;;26215:71;26283:1;26272:9;26268:17;26259:6;26215:71;:::i;:::-;26169:124;;;;:::o;26299:129::-;26333:6;26360:20;;:::i;:::-;26350:30;;26389:33;26417:4;26409:6;26389:33;:::i;:::-;26340:88;;;:::o;26434:75::-;26467:6;26500:2;26494:9;26484:19;;26474:35;:::o;26515:307::-;26576:4;26666:18;26658:6;26655:30;26652:2;;;26688:18;;:::i;:::-;26652:2;26726:29;26748:6;26726:29;:::i;:::-;26718:37;;26810:4;26804;26800:15;26792:23;;26581:241;;;:::o;26828:308::-;26890:4;26980:18;26972:6;26969:30;26966:2;;;27002:18;;:::i;:::-;26966:2;27040:29;27062:6;27040:29;:::i;:::-;27032:37;;27124:4;27118;27114:15;27106:23;;26895:241;;;:::o;27142:98::-;27193:6;27227:5;27221:12;27211:22;;27200:40;;;:::o;27246:99::-;27298:6;27332:5;27326:12;27316:22;;27305:40;;;:::o;27351:168::-;27434:11;27468:6;27463:3;27456:19;27508:4;27503:3;27499:14;27484:29;;27446:73;;;;:::o;27525:169::-;27609:11;27643:6;27638:3;27631:19;27683:4;27678:3;27674:14;27659:29;;27621:73;;;;:::o;27700:148::-;27802:11;27839:3;27824:18;;27814:34;;;;:::o;27854:305::-;27894:3;27913:20;27931:1;27913:20;:::i;:::-;27908:25;;27947:20;27965:1;27947:20;:::i;:::-;27942:25;;28101:1;28033:66;28029:74;28026:1;28023:81;28020:2;;;28107:18;;:::i;:::-;28020:2;28151:1;28148;28144:9;28137:16;;27898:261;;;;:::o;28165:185::-;28205:1;28222:20;28240:1;28222:20;:::i;:::-;28217:25;;28256:20;28274:1;28256:20;:::i;:::-;28251:25;;28295:1;28285:2;;28300:18;;:::i;:::-;28285:2;28342:1;28339;28335:9;28330:14;;28207:143;;;;:::o;28356:348::-;28396:7;28419:20;28437:1;28419:20;:::i;:::-;28414:25;;28453:20;28471:1;28453:20;:::i;:::-;28448:25;;28641:1;28573:66;28569:74;28566:1;28563:81;28558:1;28551:9;28544:17;28540:105;28537:2;;;28648:18;;:::i;:::-;28537:2;28696:1;28693;28689:9;28678:20;;28404:300;;;;:::o;28710:191::-;28750:4;28770:20;28788:1;28770:20;:::i;:::-;28765:25;;28804:20;28822:1;28804:20;:::i;:::-;28799:25;;28843:1;28840;28837:8;28834:2;;;28848:18;;:::i;:::-;28834:2;28893:1;28890;28886:9;28878:17;;28755:146;;;;:::o;28907:96::-;28944:7;28973:24;28991:5;28973:24;:::i;:::-;28962:35;;28952:51;;;:::o;29009:90::-;29043:7;29086:5;29079:13;29072:21;29061:32;;29051:48;;;:::o;29105:77::-;29142:7;29171:5;29160:16;;29150:32;;;:::o;29188:149::-;29224:7;29264:66;29257:5;29253:78;29242:89;;29232:105;;;:::o;29343:126::-;29380:7;29420:42;29413:5;29409:54;29398:65;;29388:81;;;:::o;29475:77::-;29512:7;29541:5;29530:16;;29520:32;;;:::o;29558:109::-;29594:7;29634:26;29627:5;29623:38;29612:49;;29602:65;;;:::o;29673:154::-;29757:6;29752:3;29747;29734:30;29819:1;29810:6;29805:3;29801:16;29794:27;29724:103;;;:::o;29833:307::-;29901:1;29911:113;29925:6;29922:1;29919:13;29911:113;;;30010:1;30005:3;30001:11;29995:18;29991:1;29986:3;29982:11;29975:39;29947:2;29944:1;29940:10;29935:15;;29911:113;;;30042:6;30039:1;30036:13;30033:2;;;30122:1;30113:6;30108:3;30104:16;30097:27;30033:2;29882:258;;;;:::o;30146:171::-;30185:3;30208:24;30226:5;30208:24;:::i;:::-;30199:33;;30254:4;30247:5;30244:15;30241:2;;;30262:18;;:::i;:::-;30241:2;30309:1;30302:5;30298:13;30291:20;;30189:128;;;:::o;30323:320::-;30367:6;30404:1;30398:4;30394:12;30384:22;;30451:1;30445:4;30441:12;30472:18;30462:2;;30528:4;30520:6;30516:17;30506:27;;30462:2;30590;30582:6;30579:14;30559:18;30556:38;30553:2;;;30609:18;;:::i;:::-;30553:2;30374:269;;;;:::o;30649:281::-;30732:27;30754:4;30732:27;:::i;:::-;30724:6;30720:40;30862:6;30850:10;30847:22;30826:18;30814:10;30811:34;30808:62;30805:2;;;30873:18;;:::i;:::-;30805:2;30913:10;30909:2;30902:22;30692:238;;;:::o;30936:233::-;30975:3;30998:24;31016:5;30998:24;:::i;:::-;30989:33;;31044:66;31037:5;31034:77;31031:2;;;31114:18;;:::i;:::-;31031:2;31161:1;31154:5;31150:13;31143:20;;30979:190;;;:::o;31175:100::-;31214:7;31243:26;31263:5;31243:26;:::i;:::-;31232:37;;31222:53;;;:::o;31281:79::-;31320:7;31349:5;31338:16;;31328:32;;;:::o;31366:94::-;31405:7;31434:20;31448:5;31434:20;:::i;:::-;31423:31;;31413:47;;;:::o;31466:79::-;31505:7;31534:5;31523:16;;31513:32;;;:::o;31551:176::-;31583:1;31600:20;31618:1;31600:20;:::i;:::-;31595:25;;31634:20;31652:1;31634:20;:::i;:::-;31629:25;;31673:1;31663:2;;31678:18;;:::i;:::-;31663:2;31719:1;31716;31712:9;31707:14;;31585:142;;;;:::o;31733:180::-;31781:77;31778:1;31771:88;31878:4;31875:1;31868:15;31902:4;31899:1;31892:15;31919:180;31967:77;31964:1;31957:88;32064:4;32061:1;32054:15;32088:4;32085:1;32078:15;32105:180;32153:77;32150:1;32143:88;32250:4;32247:1;32240:15;32274:4;32271:1;32264:15;32291:180;32339:77;32336:1;32329:88;32436:4;32433:1;32426:15;32460:4;32457:1;32450:15;32477:102;32518:6;32569:2;32565:7;32560:2;32553:5;32549:14;32545:28;32535:38;;32525:54;;;:::o;32585:94::-;32618:8;32666:5;32662:2;32658:14;32637:35;;32627:52;;;:::o;32685:182::-;32825:34;32821:1;32813:6;32809:14;32802:58;32791:76;:::o;32873:225::-;33013:34;33009:1;33001:6;32997:14;32990:58;33082:8;33077:2;33069:6;33065:15;33058:33;32979:119;:::o;33104:173::-;33244:25;33240:1;33232:6;33228:14;33221:49;33210:67;:::o;33283:161::-;33423:13;33419:1;33411:6;33407:14;33400:37;33389:55;:::o;33450:182::-;33590:34;33586:1;33578:6;33574:14;33567:58;33556:76;:::o;33638:165::-;33778:17;33774:1;33766:6;33762:14;33755:41;33744:59;:::o;33809:177::-;33949:29;33945:1;33937:6;33933:14;33926:53;33915:71;:::o;33992:173::-;34132:25;34128:1;34120:6;34116:14;34109:49;34098:67;:::o;34171:229::-;34311:34;34307:1;34299:6;34295:14;34288:58;34380:12;34375:2;34367:6;34363:15;34356:37;34277:123;:::o;34406:166::-;34546:18;34542:1;34534:6;34530:14;34523:42;34512:60;:::o;34578:181::-;34718:33;34714:1;34706:6;34702:14;34695:57;34684:75;:::o;34765:175::-;34905:27;34901:1;34893:6;34889:14;34882:51;34871:69;:::o;34946:167::-;35086:19;35082:1;35074:6;35070:14;35063:43;35052:61;:::o;35119:234::-;35259:34;35255:1;35247:6;35243:14;35236:58;35328:17;35323:2;35315:6;35311:15;35304:42;35225:128;:::o;35359:122::-;35432:24;35450:5;35432:24;:::i;:::-;35425:5;35422:35;35412:2;;35471:1;35468;35461:12;35412:2;35402:79;:::o;35487:116::-;35557:21;35572:5;35557:21;:::i;:::-;35550:5;35547:32;35537:2;;35593:1;35590;35583:12;35537:2;35527:76;:::o;35609:122::-;35682:24;35700:5;35682:24;:::i;:::-;35675:5;35672:35;35662:2;;35721:1;35718;35711:12;35662:2;35652:79;:::o;35737:120::-;35809:23;35826:5;35809:23;:::i;:::-;35802:5;35799:34;35789:2;;35847:1;35844;35837:12;35789:2;35779:78;:::o;35863:122::-;35936:24;35954:5;35936:24;:::i;:::-;35929:5;35926:35;35916:2;;35975:1;35972;35965:12;35916:2;35906:79;:::o;35991:120::-;36063:23;36080:5;36063:23;:::i;:::-;36056:5;36053:34;36043:2;;36101:1;36098;36091:12;36043:2;36033:78;:::o

Swarm Source

ipfs://40e825bedc50d18a29f773e7fbbec5c4bb5cfed5e19869562133fb3177cbffc3
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.