ETH Price: $2,385.26 (+2.03%)

Token

Praeter Substantiam (PRAER)
 

Overview

Max Total Supply

250 PRAER

Holders

1

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0xf0304a2f55487539f7db6c799ecb8b0a5cacc6a7
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:
PraerSeriesOne

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
File 1 of 14 : PraerSeriesOne.sol
// SPDX-License-Identifier: MIT
/*
                                                                         .
                                                                        @88>
 .d``            .u    .                             .u    .            %8P          u.
 @8Ne.   .u    .d88B :@8c        u          .u     .d88B :@8c            .     ...ue888b
 %8888:u@88N  ="8888f8888r    us888u.    ud8888.  ="8888f8888r         .@88u   888R Y888r
  `888I  888.   4888>'88"  .@88 "8888" :888'8888.   4888>'88"         ''888E`  888R I888>
   888I  888I   4888> '    9888  9888  d888 '88%"   4888> '             888E   888R I888>
   888I  888I   4888>      9888  9888  8888.+"      4888>               888E   888R I888>
 uW888L  888'  .d888L .+   9888  9888  8888L       .d888L .+      .     888E  u8888cJ888
'*88888Nu88P   ^"8888*"    9888  9888  '8888c. .+  ^"8888*"     .@8c    888&   "*888*P"
~ '88888F`        "Y"      "888*""888"  "88888%       "Y"      '%888"   R888"    'Y"
   888 ^                    ^Y"   ^Y'     "YP'                   ^*      ""
   *8E
   '8>
    "
*/
pragma solidity ^0.8.9;

import "@openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol";
import "@openzeppelin/contracts/token/common/ERC2981.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/security/ReentrancyGuard.sol";


contract PraerSeriesOne is ERC1155Supply, ERC2981, Ownable, ReentrancyGuard {

    string public name;
    string public symbol;

    uint256 public constant ELECTION = 0;
    uint256 public constant WILLKOMM = 1;
    uint256 public constant WRTSAME = 2;
    uint256 public constant PEGASUS = 3;
    uint256 public constant SHUSH = 4;

    uint256 public constant MAX_TOKEN_SUPPLY = 2000;
    uint256 public constant TOKEN_PRICE = 0.05 ether;
    uint256 public constant COLLECTION_PRICE = 0.2 ether;
    uint96 public constant ROYALTY = 600; // 6%

    bool public pausedTokenMint;
    mapping (uint256 => string) public tokenURI;

    constructor(
        string memory defaultUri,
        string memory ELECTIONUri,
        string memory WILLKOMMUri,
        string memory WRTSAMEUri,
        string memory PEGASUSUri,
        string memory SHUSHUri,
        uint[] memory ids,
        uint[] memory amounts

    ) ERC1155(defaultUri) {

        name = "Praeter Substantiam";
        symbol = "PRAER";

        tokenURI[ELECTION] = ELECTIONUri;
        tokenURI[WILLKOMM] = WILLKOMMUri;
        tokenURI[WRTSAME] = WRTSAMEUri;
        tokenURI[PEGASUS] = PEGASUSUri;
        tokenURI[SHUSH] = SHUSHUri;

        _setDefaultRoyalty(owner(), ROYALTY);
        mintInitial(ids, amounts);
        pausedTokenMint = true;
    }

    // URI

    function uri(uint256 tokenId) public view override returns (string memory) {
        if (bytes(tokenURI[tokenId]).length == 0) {
            return super.uri(tokenId);
        }
        return tokenURI[tokenId];
    }

    function setURI(uint256 tokenId, string memory newTokenURI) public onlyOwner {
        tokenURI[tokenId] = newTokenURI;
    }

    function contractURI() public view returns (string memory) {
        return super.uri(0);
    }

    // MINTING

    function mintItem(uint256 id, uint256 amount) public payable notPausedTokenMint {
        require(msg.value >= (TOKEN_PRICE * amount), "INSUFFICIENT_FUNDS");
        require(totalSupply(id) + amount <= MAX_TOKEN_SUPPLY, "TOKEN_SUPPLY_REACHED");
        _mint(msg.sender, id, amount, "");
    }

    function mintBatch(uint256[] memory ids, uint256[] memory amounts) public payable notPausedTokenMint {
        require(msg.value >= (TOKEN_PRICE * sumArray(amounts)), "INSUFFICIENT_FUNDS");

        for (uint256 index = 0; index < ids.length; index++) {
            require(totalSupply(ids[index]) + amounts[index] <= MAX_TOKEN_SUPPLY, "DEFICIENT_SUPPLY");
        }
        _mintBatch(msg.sender, ids, amounts, "");
    }

    function mintCollection() public payable notPausedTokenMint {
        require(msg.value >= COLLECTION_PRICE, "INSUFFICIENT_FUNDS");

        uint256[] memory collection = new uint256[](5);
        uint[] memory amounts = new uint256[](5);

        for (uint256 index = 0; index < 5; index++) {
            require(totalSupply(index) + 1 <= MAX_TOKEN_SUPPLY, "DEFICIENT_COLLECTION");
            collection[index] = index;
            amounts[index] = 1;
        }
        _mintBatch(msg.sender, collection, amounts, "");
    }

    function mintInitial(uint256[] memory ids, uint256[] memory amounts) public onlyOwner {
        for (uint256 index = 0; index < ids.length; index++) {
            require(totalSupply(ids[index]) + amounts[index] <= MAX_TOKEN_SUPPLY, "DEFICIENT_SUPPLY");
        }
        _mintBatch(owner(), ids, amounts, "");
    }

    // CONTRACT MANAGEMENT

    function pauseTokenMint() public onlyOwner {
        pausedTokenMint = true;
    }

    function unpauseTokenMint() public onlyOwner {
        pausedTokenMint = false;
    }

    function getAllTokenSupply() external view returns(uint256[] memory) {
        uint[] memory result = new uint[](5);
        for(uint i = 0; i < 5; i++) {
            result[i] = totalSupply(i);
        }
        return result;
    }

    function withdraw(uint256 value) external onlyOwner nonReentrant{
        require(address(this).balance > value, "INSUFFICIENT_BALANCE");
        bool sent;
        if (value == 0) {
            (sent, /*bytes memory data*/) = owner().call{value: (address(this).balance)}("");
        } else {
            (sent, /*bytes memory data*/) = owner().call{value: value}("");
        }
        require(sent, "FAILED_WITHDRAW");
    }

    // MODIFIER

    modifier notPausedTokenMint() {
        require(pausedTokenMint == false, "PAUSED_TOKEN_MINT");
        _;
    }

    // UTIL

    function sumArray(uint256[] memory array) internal pure returns (uint256) {
        uint256 sum = 0;
        for (uint256 index = 0; index < array.length; index++) {
            sum += array[index];
        }
        return sum;
    }

    // OVERRIDES

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

    function renounceOwnership() public view override onlyOwner {
        revert();
    }

}

File 2 of 14 : ReentrancyGuard.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

File 3 of 14 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

File 4 of 14 : ERC2981.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/common/ERC2981.sol)

pragma solidity ^0.8.0;

import "../../interfaces/IERC2981.sol";
import "../../utils/introspection/ERC165.sol";

/**
 * @dev Implementation of the NFT Royalty Standard, a standardized way to retrieve royalty payment information.
 *
 * Royalty information can be specified globally for all token ids via {_setDefaultRoyalty}, and/or individually for
 * specific token ids via {_setTokenRoyalty}. The latter takes precedence over the first.
 *
 * Royalty is specified as a fraction of sale price. {_feeDenominator} is overridable but defaults to 10000, meaning the
 * fee is specified in basis points by default.
 *
 * IMPORTANT: ERC-2981 only specifies a way to signal royalty information and does not enforce its payment. See
 * https://eips.ethereum.org/EIPS/eip-2981#optional-royalty-payments[Rationale] in the EIP. Marketplaces are expected to
 * voluntarily pay royalties together with sales, but note that this standard is not yet widely supported.
 *
 * _Available since v4.5._
 */
abstract contract ERC2981 is IERC2981, ERC165 {
    struct RoyaltyInfo {
        address receiver;
        uint96 royaltyFraction;
    }

    RoyaltyInfo private _defaultRoyaltyInfo;
    mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC165) returns (bool) {
        return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId);
    }

    /**
     * @inheritdoc IERC2981
     */
    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);
    }

    /**
     * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a
     * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an
     * override.
     */
    function _feeDenominator() internal pure virtual returns (uint96) {
        return 10000;
    }

    /**
     * @dev Sets the royalty information that all ids in this contract will default to.
     *
     * Requirements:
     *
     * - `receiver` cannot be the zero address.
     * - `feeNumerator` cannot be greater than the fee denominator.
     */
    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);
    }

    /**
     * @dev Removes default royalty information.
     */
    function _deleteDefaultRoyalty() internal virtual {
        delete _defaultRoyaltyInfo;
    }

    /**
     * @dev Sets the royalty information for a specific token id, overriding the global default.
     *
     * Requirements:
     *
     * - `tokenId` must be already minted.
     * - `receiver` cannot be the zero address.
     * - `feeNumerator` cannot be greater than the fee denominator.
     */
    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);
    }

    /**
     * @dev Resets royalty information for the token id back to the global default.
     */
    function _resetTokenRoyalty(uint256 tokenId) internal virtual {
        delete _tokenRoyaltyInfo[tokenId];
    }
}

File 5 of 14 : ERC1155Supply.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol)

pragma solidity ^0.8.0;

import "../ERC1155.sol";

/**
 * @dev Extension of ERC1155 that adds tracking of total supply per id.
 *
 * Useful for scenarios where Fungible and Non-fungible tokens have to be
 * clearly identified. Note: While a totalSupply of 1 might mean the
 * corresponding is an NFT, there is no guarantees that no other token with the
 * same id are not going to be minted.
 */
abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                uint256 id = ids[i];
                uint256 amount = amounts[i];
                uint256 supply = _totalSupply[id];
                require(supply >= amount, "ERC1155: burn amount exceeds totalSupply");
                unchecked {
                    _totalSupply[id] = supply - amount;
                }
            }
        }
    }
}

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

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

File 7 of 14 : IERC2981.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (interfaces/IERC2981.sol)

pragma solidity ^0.8.0;

import "../utils/introspection/IERC165.sol";

/**
 * @dev Interface for the NFT Royalty Standard.
 *
 * A standardized way to retrieve royalty payment information for non-fungible tokens (NFTs) to enable universal
 * support for royalty payments across all NFT marketplaces and ecosystem participants.
 *
 * _Available since v4.5._
 */
interface IERC2981 is IERC165 {
    /**
     * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
     * exchange. The royalty amount is denominated and should be paid in that same unit of exchange.
     */
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}

File 8 of 14 : ERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;

import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./extensions/IERC1155MetadataURI.sol";
import "../../utils/Address.sol";
import "../../utils/Context.sol";
import "../../utils/introspection/ERC165.sol";

/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

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

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

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

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

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

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

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

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

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

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

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

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

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

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

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

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

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

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

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

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

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

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

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

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

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

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

        return array;
    }
}

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

pragma solidity ^0.8.0;

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

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

File 10 of 14 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

File 11 of 14 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    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);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

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

File 12 of 14 : IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;

import "../IERC1155.sol";

/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

File 13 of 14 : IERC1155Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

File 14 of 14 : IERC1155.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"defaultUri","type":"string"},{"internalType":"string","name":"ELECTIONUri","type":"string"},{"internalType":"string","name":"WILLKOMMUri","type":"string"},{"internalType":"string","name":"WRTSAMEUri","type":"string"},{"internalType":"string","name":"PEGASUSUri","type":"string"},{"internalType":"string","name":"SHUSHUri","type":"string"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"COLLECTION_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ELECTION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKEN_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PEGASUS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROYALTY","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SHUSH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOKEN_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WILLKOMM","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WRTSAME","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllTokenSupply","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintCollection","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintInitial","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mintItem","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseTokenMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pausedTokenMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"view","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":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"newTokenURI","type":"string"}],"name":"setURI","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":"","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseTokenMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b5060405162006b6b38038062006b6b83398181016040528101906200003791906200108f565b8762000049816200024260201b60201c565b506200006a6200005e6200025e60201b60201c565b6200026660201b60201c565b60016007819055506040518060400160405280601381526020017f50726165746572205375627374616e7469616d0000000000000000000000000081525060089080519060200190620000bf92919062000d2c565b506040518060400160405280600581526020017f5052414552000000000000000000000000000000000000000000000000000000815250600990805190602001906200010d92919062000d2c565b5086600b600080815260200190815260200160002090805190602001906200013792919062000d2c565b5085600b60006001815260200190815260200160002090805190602001906200016292919062000d2c565b5084600b60006002815260200190815260200160002090805190602001906200018d92919062000d2c565b5083600b6000600381526020019081526020016000209080519060200190620001b892919062000d2c565b5082600b6000600481526020019081526020016000209080519060200190620001e392919062000d2c565b5062000207620001f86200032c60201b60201c565b6102586200035660201b60201c565b620002198282620004f960201b60201c565b6001600a60006101000a81548160ff021916908315150217905550505050505050505062001c9c565b80600290805190602001906200025a92919062000d2c565b5050565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620003666200068160201b60201c565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff161115620003c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003be90620012d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000439576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004309062001349565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600460008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b620005096200025e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200052f6200032c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000588576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200057f90620013bb565b60405180910390fd5b60005b82518110156200064a576107d0828281518110620005ae57620005ad620013dd565b5b6020026020010151620005e4858481518110620005d057620005cf620013dd565b5b60200260200101516200068b60201b60201c565b620005f091906200143b565b111562000634576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200062b90620014e8565b60405180910390fd5b808062000641906200150a565b9150506200058b565b506200067d6200065f6200032c60201b60201c565b838360405180602001604052806000815250620006a860201b60201c565b5050565b6000612710905090565b600060036000838152602001908152602001600020549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036200071a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200071190620015cd565b60405180910390fd5b815183511462000761576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007589062001665565b60405180910390fd5b6000620007736200025e60201b60201c565b90506200078c816000878787876200090860201b60201c565b60005b84518110156200085157838181518110620007af57620007ae620013dd565b5b6020026020010151600080878481518110620007d057620007cf620013dd565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200083491906200143b565b92505081905550808062000848906200150a565b9150506200078f565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051620008cb92919062001755565b60405180910390a4620008ea8160008787878762000b0060201b60201c565b620009018160008787878762000b0860201b60201c565b5050505050565b6200092386868686868662000d0160201b62001dcd1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603620009e15760005b8351811015620009df578281815181106200097b576200097a620013dd565b5b6020026020010151600360008684815181106200099d576200099c620013dd565b5b602002602001015181526020019081526020016000206000828254620009c491906200143b565b9250508190555080620009d7906200150a565b90506200095b565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362000af85760005b835181101562000af657600084828151811062000a3b5762000a3a620013dd565b5b60200260200101519050600084838151811062000a5d5762000a5c620013dd565b5b602002602001015190506000600360008481526020019081526020016000205490508181101562000ac5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000abc9062001806565b60405180910390fd5b81810360036000858152602001908152602001600020819055505050508062000aee906200150a565b905062000a19565b505b505050505050565b505050505050565b62000b348473ffffffffffffffffffffffffffffffffffffffff1662000d0960201b62001dd51760201c565b1562000cf9578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040162000b7d959493929190620018ca565b6020604051808303816000875af192505050801562000bbc57506040513d601f19601f8201168201806040525081019062000bb9919062001999565b60015b62000c6d5762000bcb620019d8565b806308c379a00362000c2e575062000be2620019fd565b8062000bef575062000c30565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c25919062001ae4565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c649062001b7e565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161462000cf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cee9062001c16565b60405180910390fd5b505b505050505050565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805462000d3a9062001c67565b90600052602060002090601f01602090048101928262000d5e576000855562000daa565b82601f1062000d7957805160ff191683800117855562000daa565b8280016001018555821562000daa579182015b8281111562000da957825182559160200191906001019062000d8c565b5b50905062000db9919062000dbd565b5090565b5b8082111562000dd857600081600090555060010162000dbe565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b62000e458262000dfa565b810181811067ffffffffffffffff8211171562000e675762000e6662000e0b565b5b80604052505050565b600062000e7c62000ddc565b905062000e8a828262000e3a565b919050565b600067ffffffffffffffff82111562000ead5762000eac62000e0b565b5b62000eb88262000dfa565b9050602081019050919050565b60005b8381101562000ee557808201518184015260208101905062000ec8565b8381111562000ef5576000848401525b50505050565b600062000f1262000f0c8462000e8f565b62000e70565b90508281526020810184848401111562000f315762000f3062000df5565b5b62000f3e84828562000ec5565b509392505050565b600082601f83011262000f5e5762000f5d62000df0565b5b815162000f7084826020860162000efb565b91505092915050565b600067ffffffffffffffff82111562000f975762000f9662000e0b565b5b602082029050602081019050919050565b600080fd5b6000819050919050565b62000fc28162000fad565b811462000fce57600080fd5b50565b60008151905062000fe28162000fb7565b92915050565b600062000fff62000ff98462000f79565b62000e70565b9050808382526020820190506020840283018581111562001025576200102462000fa8565b5b835b818110156200105257806200103d888262000fd1565b84526020840193505060208101905062001027565b5050509392505050565b600082601f83011262001074576200107362000df0565b5b81516200108684826020860162000fe8565b91505092915050565b600080600080600080600080610100898b031215620010b357620010b262000de6565b5b600089015167ffffffffffffffff811115620010d457620010d362000deb565b5b620010e28b828c0162000f46565b985050602089015167ffffffffffffffff81111562001106576200110562000deb565b5b620011148b828c0162000f46565b975050604089015167ffffffffffffffff81111562001138576200113762000deb565b5b620011468b828c0162000f46565b965050606089015167ffffffffffffffff8111156200116a576200116962000deb565b5b620011788b828c0162000f46565b955050608089015167ffffffffffffffff8111156200119c576200119b62000deb565b5b620011aa8b828c0162000f46565b94505060a089015167ffffffffffffffff811115620011ce57620011cd62000deb565b5b620011dc8b828c0162000f46565b93505060c089015167ffffffffffffffff8111156200120057620011ff62000deb565b5b6200120e8b828c016200105c565b92505060e089015167ffffffffffffffff81111562001232576200123162000deb565b5b620012408b828c016200105c565b9150509295985092959890939650565b600082825260208201905092915050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b6000620012bf602a8362001250565b9150620012cc8262001261565b604082019050919050565b60006020820190508181036000830152620012f281620012b0565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b60006200133160198362001250565b91506200133e82620012f9565b602082019050919050565b60006020820190508181036000830152620013648162001322565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620013a360208362001250565b9150620013b0826200136b565b602082019050919050565b60006020820190508181036000830152620013d68162001394565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620014488262000fad565b9150620014558362000fad565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200148d576200148c6200140c565b5b828201905092915050565b7f444546494349454e545f535550504c5900000000000000000000000000000000600082015250565b6000620014d060108362001250565b9150620014dd8262001498565b602082019050919050565b600060208201905081810360008301526200150381620014c1565b9050919050565b6000620015178262000fad565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036200154c576200154b6200140c565b5b600182019050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000620015b560218362001250565b9150620015c28262001557565b604082019050919050565b60006020820190508181036000830152620015e881620015a6565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006200164d60288362001250565b91506200165a82620015ef565b604082019050919050565b6000602082019050818103600083015262001680816200163e565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b620016be8162000fad565b82525050565b6000620016d28383620016b3565b60208301905092915050565b6000602082019050919050565b6000620016f88262001687565b62001704818562001692565b93506200171183620016a3565b8060005b83811015620017485781516200172c8882620016c4565b97506200173983620016de565b92505060018101905062001715565b5085935050505092915050565b60006040820190508181036000830152620017718185620016eb565b90508181036020830152620017878184620016eb565b90509392505050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000620017ee60288362001250565b9150620017fb8262001790565b604082019050919050565b600060208201905081810360008301526200182181620017df565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620018558262001828565b9050919050565b620018678162001848565b82525050565b600081519050919050565b600082825260208201905092915050565b600062001896826200186d565b620018a2818562001878565b9350620018b481856020860162000ec5565b620018bf8162000dfa565b840191505092915050565b600060a082019050620018e160008301886200185c565b620018f060208301876200185c565b8181036040830152620019048186620016eb565b905081810360608301526200191a8185620016eb565b9050818103608083015262001930818462001889565b90509695505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b62001973816200193c565b81146200197f57600080fd5b50565b600081519050620019938162001968565b92915050565b600060208284031215620019b257620019b162000de6565b5b6000620019c28482850162001982565b91505092915050565b60008160e01c9050919050565b600060033d1115620019fa5760046000803e620019f7600051620019cb565b90505b90565b600060443d1062001a955762001a1262000ddc565b60043d036004823e80513d602482011167ffffffffffffffff8211171562001a3c57505062001a95565b808201805167ffffffffffffffff81111562001a5c575050505062001a95565b80602083010160043d03850181111562001a7b57505050505062001a95565b62001a8c8260200185018662000e3a565b82955050505050505b90565b600081519050919050565b600062001ab08262001a98565b62001abc818562001250565b935062001ace81856020860162000ec5565b62001ad98162000dfa565b840191505092915050565b6000602082019050818103600083015262001b00818462001aa3565b905092915050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b600062001b6660348362001250565b915062001b738262001b08565b604082019050919050565b6000602082019050818103600083015262001b998162001b57565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600062001bfe60288362001250565b915062001c0b8262001ba0565b604082019050919050565b6000602082019050818103600083015262001c318162001bef565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062001c8057607f821691505b60208210810362001c965762001c9562001c38565b5b50919050565b614ebf8062001cac6000396000f3fe6080604052600436106102195760003560e01c806381cb308211610123578063bd85b039116100ab578063e489d5101161006f578063e489d5101461078a578063e8a3d485146107b5578063e985e9c5146107e0578063f242432a1461081d578063f2fde38b1461084657610219565b8063bd85b0391461069e578063c3cb6bc0146106db578063c87b56dd14610706578063d2d8cb6714610743578063d351cfdc1461076e57610219565b806395d89b41116100f257806395d89b41146105f15780639a93e0b31461061c5780639c5ad6a114610633578063a22cb4651461065e578063a5821a341461068757610219565b806381cb308214610568578063862440e2146105725780638704a2081461059b5780638da5cb5b146105c657610219565b80632e1a7d4d116101a65780634e1273f4116101755780634e1273f4146104815780634f558e79146104be5780635b1dc304146104fb57806361259b6814610526578063715018a61461055157610219565b80632e1a7d4d146103e85780632eb2c2d614610411578063449de7791461043a57806345d4fbc31461045657610219565b80630f32e534116101ed5780630f32e5341461030057806322b951be1461032b5780632a55205a146103565780632a652215146103945780632c3cf014146103bd57610219565b8062fdd58e1461021e57806301ffc9a71461025b57806306fdde03146102985780630e89341c146102c3575b600080fd5b34801561022a57600080fd5b50610245600480360381019061024091906133d1565b61086f565b6040516102529190613420565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613493565b610937565b60405161028f91906134db565b60405180910390f35b3480156102a457600080fd5b506102ad610949565b6040516102ba919061358f565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906135b1565b6109d7565b6040516102f7919061358f565b60405180910390f35b34801561030c57600080fd5b50610315610ab4565b6040516103229190613420565b60405180910390f35b34801561033757600080fd5b50610340610ac0565b60405161034d9190613420565b60405180910390f35b34801561036257600080fd5b5061037d600480360381019061037891906135de565b610ac5565b60405161038b92919061362d565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b6919061379e565b610caf565b005b3480156103c957600080fd5b506103d2610dfd565b6040516103df9190613420565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a91906135b1565b610e02565b005b34801561041d57600080fd5b50610438600480360381019061043391906138cb565b61104e565b005b610454600480360381019061044f91906135de565b6110ef565b005b34801561046257600080fd5b5061046b611211565b6040516104789190613420565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190613a5d565b611216565b6040516104b59190613b93565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e091906135b1565b61132f565b6040516104f291906134db565b60405180910390f35b34801561050757600080fd5b50610510611343565b60405161051d9190613420565b60405180910390f35b34801561053257600080fd5b5061053b611348565b6040516105489190613420565b60405180910390f35b34801561055d57600080fd5b5061056661134d565b005b6105706113ce565b005b34801561057e57600080fd5b5061059960048036038101906105949190613c56565b6115e4565b005b3480156105a757600080fd5b506105b061168c565b6040516105bd9190613cd9565b60405180910390f35b3480156105d257600080fd5b506105db611692565b6040516105e89190613cf4565b60405180910390f35b3480156105fd57600080fd5b506106066116bc565b604051610613919061358f565b60405180910390f35b34801561062857600080fd5b5061063161174a565b005b34801561063f57600080fd5b506106486117e3565b6040516106559190613b93565b60405180910390f35b34801561066a57600080fd5b5061068560048036038101906106809190613d3b565b611882565b005b34801561069357600080fd5b5061069c611898565b005b3480156106aa57600080fd5b506106c560048036038101906106c091906135b1565b611931565b6040516106d29190613420565b60405180910390f35b3480156106e757600080fd5b506106f061194e565b6040516106fd91906134db565b60405180910390f35b34801561071257600080fd5b5061072d600480360381019061072891906135b1565b611961565b60405161073a919061358f565b60405180910390f35b34801561074f57600080fd5b50610758611a01565b6040516107659190613420565b60405180910390f35b6107886004803603810190610783919061379e565b611a0c565b005b34801561079657600080fd5b5061079f611b8a565b6040516107ac9190613420565b60405180910390f35b3480156107c157600080fd5b506107ca611b90565b6040516107d7919061358f565b60405180910390f35b3480156107ec57600080fd5b5061080760048036038101906108029190613d7b565b611ba1565b60405161081491906134db565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f9190613dbb565b611c35565b005b34801561085257600080fd5b5061086d60048036038101906108689190613e52565b611cd6565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d690613ef1565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061094282611df8565b9050919050565b6008805461095690613f40565b80601f016020809104026020016040519081016040528092919081815260200182805461098290613f40565b80156109cf5780601f106109a4576101008083540402835291602001916109cf565b820191906000526020600020905b8154815290600101906020018083116109b257829003601f168201915b505050505081565b60606000600b600084815260200190815260200160002080546109f990613f40565b905003610a1057610a0982611e72565b9050610aaf565b600b60008381526020019081526020016000208054610a2e90613f40565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5a90613f40565b8015610aa75780601f10610a7c57610100808354040283529160200191610aa7565b820191906000526020600020905b815481529060010190602001808311610a8a57829003601f168201915b505050505090505b919050565b6702c68af0bb14000081565b600281565b6000806000600560008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610c5a5760046040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610c64611f06565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610c909190613fa0565b610c9a9190614029565b90508160000151819350935050509250929050565b610cb7611f10565b73ffffffffffffffffffffffffffffffffffffffff16610cd5611692565b73ffffffffffffffffffffffffffffffffffffffff1614610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d22906140a6565b60405180910390fd5b60005b8251811015610dd6576107d0828281518110610d4d57610d4c6140c6565b5b6020026020010151610d78858481518110610d6b57610d6a6140c6565b5b6020026020010151611931565b610d8291906140f5565b1115610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba90614197565b60405180910390fd5b8080610dce906141b7565b915050610d2e565b50610df9610de2611692565b838360405180602001604052806000815250611f18565b5050565b600381565b610e0a611f10565b73ffffffffffffffffffffffffffffffffffffffff16610e28611692565b73ffffffffffffffffffffffffffffffffffffffff1614610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e75906140a6565b60405180910390fd5b600260075403610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba9061424b565b60405180910390fd5b6002600781905550804711610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f04906142b7565b60405180910390fd5b6000808203610f8e57610f1e611692565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f4190614308565b60006040518083038185875af1925050503d8060008114610f7e576040519150601f19603f3d011682016040523d82523d6000602084013e610f83565b606091505b505080915050611002565b610f96611692565b73ffffffffffffffffffffffffffffffffffffffff1682604051610fb990614308565b60006040518083038185875af1925050503d8060008114610ff6576040519150601f19603f3d011682016040523d82523d6000602084013e610ffb565b606091505b5050809150505b80611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990614369565b60405180910390fd5b50600160078190555050565b611056611f10565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061109c575061109b85611096611f10565b611ba1565b5b6110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d2906143fb565b60405180910390fd5b6110e88585858585612144565b5050505050565b60001515600a60009054906101000a900460ff16151514611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614467565b60405180910390fd5b8066b1a2bc2ec500006111589190613fa0565b34101561119a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611191906144d3565b60405180910390fd5b6107d0816111a784611931565b6111b191906140f5565b11156111f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e99061453f565b60405180910390fd5b61120d33838360405180602001604052806000815250612465565b5050565b600081565b6060815183511461125c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611253906145d1565b60405180910390fd5b6000835167ffffffffffffffff8111156112795761127861365b565b5b6040519080825280602002602001820160405280156112a75781602001602082028036833780820191505090505b50905060005b8451811015611324576112f48582815181106112cc576112cb6140c6565b5b60200260200101518583815181106112e7576112e66140c6565b5b602002602001015161086f565b828281518110611307576113066140c6565b5b6020026020010181815250508061131d906141b7565b90506112ad565b508091505092915050565b60008061133b83611931565b119050919050565b600481565b600181565b611355611f10565b73ffffffffffffffffffffffffffffffffffffffff16611373611692565b73ffffffffffffffffffffffffffffffffffffffff16146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c0906140a6565b60405180910390fd5b600080fd5b60001515600a60009054906101000a900460ff16151514611424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141b90614467565b60405180910390fd5b6702c68af0bb14000034101561146f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611466906144d3565b60405180910390fd5b6000600567ffffffffffffffff81111561148c5761148b61365b565b5b6040519080825280602002602001820160405280156114ba5781602001602082028036833780820191505090505b5090506000600567ffffffffffffffff8111156114da576114d961365b565b5b6040519080825280602002602001820160405280156115085781602001602082028036833780820191505090505b50905060005b60058110156115c4576107d0600161152583611931565b61152f91906140f5565b1115611570576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115679061463d565b60405180910390fd5b80838281518110611584576115836140c6565b5b60200260200101818152505060018282815181106115a5576115a46140c6565b5b60200260200101818152505080806115bc906141b7565b91505061150e565b506115e033838360405180602001604052806000815250611f18565b5050565b6115ec611f10565b73ffffffffffffffffffffffffffffffffffffffff1661160a611692565b73ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611657906140a6565b60405180910390fd5b80600b60008481526020019081526020016000209080519060200190611687929190613286565b505050565b61025881565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600980546116c990613f40565b80601f01602080910402602001604051908101604052809291908181526020018280546116f590613f40565b80156117425780601f1061171757610100808354040283529160200191611742565b820191906000526020600020905b81548152906001019060200180831161172557829003601f168201915b505050505081565b611752611f10565b73ffffffffffffffffffffffffffffffffffffffff16611770611692565b73ffffffffffffffffffffffffffffffffffffffff16146117c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bd906140a6565b60405180910390fd5b6000600a60006101000a81548160ff021916908315150217905550565b60606000600567ffffffffffffffff8111156118025761180161365b565b5b6040519080825280602002602001820160405280156118305781602001602082028036833780820191505090505b50905060005b600581101561187a5761184881611931565b82828151811061185b5761185a6140c6565b5b6020026020010181815250508080611872906141b7565b915050611836565b508091505090565b61189461188d611f10565b8383612615565b5050565b6118a0611f10565b73ffffffffffffffffffffffffffffffffffffffff166118be611692565b73ffffffffffffffffffffffffffffffffffffffff1614611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b906140a6565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b600060036000838152602001908152602001600020549050919050565b600a60009054906101000a900460ff1681565b600b602052806000526040600020600091509050805461198090613f40565b80601f01602080910402602001604051908101604052809291908181526020018280546119ac90613f40565b80156119f95780601f106119ce576101008083540402835291602001916119f9565b820191906000526020600020905b8154815290600101906020018083116119dc57829003601f168201915b505050505081565b66b1a2bc2ec5000081565b60001515600a60009054906101000a900460ff16151514611a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5990614467565b60405180910390fd5b611a6b81612781565b66b1a2bc2ec50000611a7d9190613fa0565b341015611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab6906144d3565b60405180910390fd5b60005b8251811015611b6a576107d0828281518110611ae157611ae06140c6565b5b6020026020010151611b0c858481518110611aff57611afe6140c6565b5b6020026020010151611931565b611b1691906140f5565b1115611b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4e90614197565b60405180910390fd5b8080611b62906141b7565b915050611ac2565b50611b8633838360405180602001604052806000815250611f18565b5050565b6107d081565b6060611b9c6000611e72565b905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c3d611f10565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611c835750611c8285611c7d611f10565b611ba1565b5b611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb9906146cf565b60405180910390fd5b611ccf85858585856127d9565b5050505050565b611cde611f10565b73ffffffffffffffffffffffffffffffffffffffff16611cfc611692565b73ffffffffffffffffffffffffffffffffffffffff1614611d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d49906140a6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db890614761565b60405180910390fd5b611dca81612a74565b50565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e6b5750611e6a82612b3a565b5b9050919050565b606060028054611e8190613f40565b80601f0160208091040260200160405190810160405280929190818152602001828054611ead90613f40565b8015611efa5780601f10611ecf57610100808354040283529160200191611efa565b820191906000526020600020905b815481529060010190602001808311611edd57829003601f168201915b50505050509050919050565b6000612710905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e906147f3565b60405180910390fd5b8151835114611fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc290614885565b60405180910390fd5b6000611fd5611f10565b9050611fe681600087878787612c1c565b60005b845181101561209f57838181518110612005576120046140c6565b5b6020026020010151600080878481518110612023576120226140c6565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461208591906140f5565b925050819055508080612097906141b7565b915050611fe9565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516121179291906148a5565b60405180910390a461212e81600087878787612dec565b61213d81600087878787612df4565b5050505050565b8151835114612188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217f90614885565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee9061494e565b60405180910390fd5b6000612201611f10565b9050612211818787878787612c1c565b60005b84518110156123c2576000858281518110612232576122316140c6565b5b602002602001015190506000858381518110612251576122506140c6565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156122f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e9906149e0565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123a791906140f5565b92505081905550505050806123bb906141b7565b9050612214565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516124399291906148a5565b60405180910390a461244f818787878787612dec565b61245d818787878787612df4565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036124d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cb906147f3565b60405180910390fd5b60006124de611f10565b905060006124eb85612fcb565b905060006124f885612fcb565b905061250983600089858589612c1c565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256891906140f5565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516125e6929190614a00565b60405180910390a46125fd83600089858589612dec565b61260c83600089898989613045565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267a90614a9b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161277491906134db565b60405180910390a3505050565b6000806000905060005b83518110156127cf578381815181106127a7576127a66140c6565b5b6020026020010151826127ba91906140f5565b915080806127c7906141b7565b91505061278b565b5080915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283f9061494e565b60405180910390fd5b6000612852611f10565b9050600061285f85612fcb565b9050600061286c85612fcb565b905061287c838989858589612c1c565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290a906149e0565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129c891906140f5565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612a45929190614a00565b60405180910390a4612a5b848a8a86868a612dec565b612a69848a8a8a8a8a613045565b505050505050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c0557507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612c155750612c148261321c565b5b9050919050565b612c2a868686868686611dcd565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612cdb5760005b8351811015612cd957828181518110612c7d57612c7c6140c6565b5b602002602001015160036000868481518110612c9c57612c9b6140c6565b5b602002602001015181526020019081526020016000206000828254612cc191906140f5565b9250508190555080612cd2906141b7565b9050612c61565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612de45760005b8351811015612de2576000848281518110612d3057612d2f6140c6565b5b602002602001015190506000848381518110612d4f57612d4e6140c6565b5b6020026020010151905060006003600084815260200190815260200160002054905081811015612db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dab90614b2d565b60405180910390fd5b818103600360008581526020019081526020016000208190555050505080612ddb906141b7565b9050612d12565b505b505050505050565b505050505050565b612e138473ffffffffffffffffffffffffffffffffffffffff16611dd5565b15612fc3578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612e59959493929190614ba2565b6020604051808303816000875af1925050508015612e9557506040513d601f19601f82011682018060405250810190612e929190614c1f565b60015b612f3a57612ea1614c59565b806308c379a003612efd5750612eb5614c7b565b80612ec05750612eff565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef4919061358f565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3190614d7d565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb890614e0f565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612fea57612fe961365b565b5b6040519080825280602002602001820160405280156130185781602001602082028036833780820191505090505b50905082816000815181106130305761302f6140c6565b5b60200260200101818152505080915050919050565b6130648473ffffffffffffffffffffffffffffffffffffffff16611dd5565b15613214578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016130aa959493929190614e2f565b6020604051808303816000875af19250505080156130e657506040513d601f19601f820116820180604052508101906130e39190614c1f565b60015b61318b576130f2614c59565b806308c379a00361314e5750613106614c7b565b806131115750613150565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613145919061358f565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318290614d7d565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320990614e0f565b60405180910390fd5b505b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b82805461329290613f40565b90600052602060002090601f0160209004810192826132b457600085556132fb565b82601f106132cd57805160ff19168380011785556132fb565b828001600101855582156132fb579182015b828111156132fa5782518255916020019190600101906132df565b5b509050613308919061330c565b5090565b5b8082111561332557600081600090555060010161330d565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133688261333d565b9050919050565b6133788161335d565b811461338357600080fd5b50565b6000813590506133958161336f565b92915050565b6000819050919050565b6133ae8161339b565b81146133b957600080fd5b50565b6000813590506133cb816133a5565b92915050565b600080604083850312156133e8576133e7613333565b5b60006133f685828601613386565b9250506020613407858286016133bc565b9150509250929050565b61341a8161339b565b82525050565b60006020820190506134356000830184613411565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6134708161343b565b811461347b57600080fd5b50565b60008135905061348d81613467565b92915050565b6000602082840312156134a9576134a8613333565b5b60006134b78482850161347e565b91505092915050565b60008115159050919050565b6134d5816134c0565b82525050565b60006020820190506134f060008301846134cc565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613530578082015181840152602081019050613515565b8381111561353f576000848401525b50505050565b6000601f19601f8301169050919050565b6000613561826134f6565b61356b8185613501565b935061357b818560208601613512565b61358481613545565b840191505092915050565b600060208201905081810360008301526135a98184613556565b905092915050565b6000602082840312156135c7576135c6613333565b5b60006135d5848285016133bc565b91505092915050565b600080604083850312156135f5576135f4613333565b5b6000613603858286016133bc565b9250506020613614858286016133bc565b9150509250929050565b6136278161335d565b82525050565b6000604082019050613642600083018561361e565b61364f6020830184613411565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61369382613545565b810181811067ffffffffffffffff821117156136b2576136b161365b565b5b80604052505050565b60006136c5613329565b90506136d1828261368a565b919050565b600067ffffffffffffffff8211156136f1576136f061365b565b5b602082029050602081019050919050565b600080fd5b600061371a613715846136d6565b6136bb565b9050808382526020820190506020840283018581111561373d5761373c613702565b5b835b81811015613766578061375288826133bc565b84526020840193505060208101905061373f565b5050509392505050565b600082601f83011261378557613784613656565b5b8135613795848260208601613707565b91505092915050565b600080604083850312156137b5576137b4613333565b5b600083013567ffffffffffffffff8111156137d3576137d2613338565b5b6137df85828601613770565b925050602083013567ffffffffffffffff811115613800576137ff613338565b5b61380c85828601613770565b9150509250929050565b600080fd5b600067ffffffffffffffff8211156138365761383561365b565b5b61383f82613545565b9050602081019050919050565b82818337600083830152505050565b600061386e6138698461381b565b6136bb565b90508281526020810184848401111561388a57613889613816565b5b61389584828561384c565b509392505050565b600082601f8301126138b2576138b1613656565b5b81356138c284826020860161385b565b91505092915050565b600080600080600060a086880312156138e7576138e6613333565b5b60006138f588828901613386565b955050602061390688828901613386565b945050604086013567ffffffffffffffff81111561392757613926613338565b5b61393388828901613770565b935050606086013567ffffffffffffffff81111561395457613953613338565b5b61396088828901613770565b925050608086013567ffffffffffffffff81111561398157613980613338565b5b61398d8882890161389d565b9150509295509295909350565b600067ffffffffffffffff8211156139b5576139b461365b565b5b602082029050602081019050919050565b60006139d96139d48461399a565b6136bb565b905080838252602082019050602084028301858111156139fc576139fb613702565b5b835b81811015613a255780613a118882613386565b8452602084019350506020810190506139fe565b5050509392505050565b600082601f830112613a4457613a43613656565b5b8135613a548482602086016139c6565b91505092915050565b60008060408385031215613a7457613a73613333565b5b600083013567ffffffffffffffff811115613a9257613a91613338565b5b613a9e85828601613a2f565b925050602083013567ffffffffffffffff811115613abf57613abe613338565b5b613acb85828601613770565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b0a8161339b565b82525050565b6000613b1c8383613b01565b60208301905092915050565b6000602082019050919050565b6000613b4082613ad5565b613b4a8185613ae0565b9350613b5583613af1565b8060005b83811015613b86578151613b6d8882613b10565b9750613b7883613b28565b925050600181019050613b59565b5085935050505092915050565b60006020820190508181036000830152613bad8184613b35565b905092915050565b600067ffffffffffffffff821115613bd057613bcf61365b565b5b613bd982613545565b9050602081019050919050565b6000613bf9613bf484613bb5565b6136bb565b905082815260208101848484011115613c1557613c14613816565b5b613c2084828561384c565b509392505050565b600082601f830112613c3d57613c3c613656565b5b8135613c4d848260208601613be6565b91505092915050565b60008060408385031215613c6d57613c6c613333565b5b6000613c7b858286016133bc565b925050602083013567ffffffffffffffff811115613c9c57613c9b613338565b5b613ca885828601613c28565b9150509250929050565b60006bffffffffffffffffffffffff82169050919050565b613cd381613cb2565b82525050565b6000602082019050613cee6000830184613cca565b92915050565b6000602082019050613d09600083018461361e565b92915050565b613d18816134c0565b8114613d2357600080fd5b50565b600081359050613d3581613d0f565b92915050565b60008060408385031215613d5257613d51613333565b5b6000613d6085828601613386565b9250506020613d7185828601613d26565b9150509250929050565b60008060408385031215613d9257613d91613333565b5b6000613da085828601613386565b9250506020613db185828601613386565b9150509250929050565b600080600080600060a08688031215613dd757613dd6613333565b5b6000613de588828901613386565b9550506020613df688828901613386565b9450506040613e07888289016133bc565b9350506060613e18888289016133bc565b925050608086013567ffffffffffffffff811115613e3957613e38613338565b5b613e458882890161389d565b9150509295509295909350565b600060208284031215613e6857613e67613333565b5b6000613e7684828501613386565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613edb602b83613501565b9150613ee682613e7f565b604082019050919050565b60006020820190508181036000830152613f0a81613ece565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f5857607f821691505b602082108103613f6b57613f6a613f11565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613fab8261339b565b9150613fb68361339b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fef57613fee613f71565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140348261339b565b915061403f8361339b565b92508261404f5761404e613ffa565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614090602083613501565b915061409b8261405a565b602082019050919050565b600060208201905081810360008301526140bf81614083565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006141008261339b565b915061410b8361339b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141405761413f613f71565b5b828201905092915050565b7f444546494349454e545f535550504c5900000000000000000000000000000000600082015250565b6000614181601083613501565b915061418c8261414b565b602082019050919050565b600060208201905081810360008301526141b081614174565b9050919050565b60006141c28261339b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036141f4576141f3613f71565b5b600182019050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614235601f83613501565b9150614240826141ff565b602082019050919050565b6000602082019050818103600083015261426481614228565b9050919050565b7f494e53554646494349454e545f42414c414e4345000000000000000000000000600082015250565b60006142a1601483613501565b91506142ac8261426b565b602082019050919050565b600060208201905081810360008301526142d081614294565b9050919050565b600081905092915050565b50565b60006142f26000836142d7565b91506142fd826142e2565b600082019050919050565b6000614313826142e5565b9150819050919050565b7f4641494c45445f57495448445241570000000000000000000000000000000000600082015250565b6000614353600f83613501565b915061435e8261431d565b602082019050919050565b6000602082019050818103600083015261438281614346565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006143e5603283613501565b91506143f082614389565b604082019050919050565b60006020820190508181036000830152614414816143d8565b9050919050565b7f5041555345445f544f4b454e5f4d494e54000000000000000000000000000000600082015250565b6000614451601183613501565b915061445c8261441b565b602082019050919050565b6000602082019050818103600083015261448081614444565b9050919050565b7f494e53554646494349454e545f46554e44530000000000000000000000000000600082015250565b60006144bd601283613501565b91506144c882614487565b602082019050919050565b600060208201905081810360008301526144ec816144b0565b9050919050565b7f544f4b454e5f535550504c595f52454143484544000000000000000000000000600082015250565b6000614529601483613501565b9150614534826144f3565b602082019050919050565b600060208201905081810360008301526145588161451c565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006145bb602983613501565b91506145c68261455f565b604082019050919050565b600060208201905081810360008301526145ea816145ae565b9050919050565b7f444546494349454e545f434f4c4c454354494f4e000000000000000000000000600082015250565b6000614627601483613501565b9150614632826145f1565b602082019050919050565b600060208201905081810360008301526146568161461a565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006146b9602983613501565b91506146c48261465d565b604082019050919050565b600060208201905081810360008301526146e8816146ac565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061474b602683613501565b9150614756826146ef565b604082019050919050565b6000602082019050818103600083015261477a8161473e565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006147dd602183613501565b91506147e882614781565b604082019050919050565b6000602082019050818103600083015261480c816147d0565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061486f602883613501565b915061487a82614813565b604082019050919050565b6000602082019050818103600083015261489e81614862565b9050919050565b600060408201905081810360008301526148bf8185613b35565b905081810360208301526148d38184613b35565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614938602583613501565b9150614943826148dc565b604082019050919050565b600060208201905081810360008301526149678161492b565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006149ca602a83613501565b91506149d58261496e565b604082019050919050565b600060208201905081810360008301526149f9816149bd565b9050919050565b6000604082019050614a156000830185613411565b614a226020830184613411565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614a85602983613501565b9150614a9082614a29565b604082019050919050565b60006020820190508181036000830152614ab481614a78565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000614b17602883613501565b9150614b2282614abb565b604082019050919050565b60006020820190508181036000830152614b4681614b0a565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614b7482614b4d565b614b7e8185614b58565b9350614b8e818560208601613512565b614b9781613545565b840191505092915050565b600060a082019050614bb7600083018861361e565b614bc4602083018761361e565b8181036040830152614bd68186613b35565b90508181036060830152614bea8185613b35565b90508181036080830152614bfe8184614b69565b90509695505050505050565b600081519050614c1981613467565b92915050565b600060208284031215614c3557614c34613333565b5b6000614c4384828501614c0a565b91505092915050565b60008160e01c9050919050565b600060033d1115614c785760046000803e614c75600051614c4c565b90505b90565b600060443d10614d0857614c8d613329565b60043d036004823e80513d602482011167ffffffffffffffff82111715614cb5575050614d08565b808201805167ffffffffffffffff811115614cd35750505050614d08565b80602083010160043d038501811115614cf0575050505050614d08565b614cff8260200185018661368a565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614d67603483613501565b9150614d7282614d0b565b604082019050919050565b60006020820190508181036000830152614d9681614d5a565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614df9602883613501565b9150614e0482614d9d565b604082019050919050565b60006020820190508181036000830152614e2881614dec565b9050919050565b600060a082019050614e44600083018861361e565b614e51602083018761361e565b614e5e6040830186613411565b614e6b6060830185613411565b8181036080830152614e7d8184614b69565b9050969550505050505056fea26469706673582212200730040687f813f2c08aa42cfe89fb713460e452fae1121ddd154c23f083be2964736f6c634300080e00330000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f3650356237327a4a503570634b706b61714968344971393539726838685772576349494f546273306c6f5500000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f7a47784244466376725875654b38375069307a662d70713166467245597157696937556f454f56616a437700000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f66457353495679665a655334674e5f4e615333725f6935354a516757794d3845307242744a617a7730614500000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f6d505375415751336342794e3864454b44755a46626862364b59445562426158634479326c596a6f4f5f4900000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f66676773455533444d68513465787254433075725f664a7964535665313476326b4b6e5835414a6935414500000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f504555757137685038524a47526a3544565333786a4f744734427454344d6762306e684b6f42706f34726b00000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032

Deployed Bytecode

0x6080604052600436106102195760003560e01c806381cb308211610123578063bd85b039116100ab578063e489d5101161006f578063e489d5101461078a578063e8a3d485146107b5578063e985e9c5146107e0578063f242432a1461081d578063f2fde38b1461084657610219565b8063bd85b0391461069e578063c3cb6bc0146106db578063c87b56dd14610706578063d2d8cb6714610743578063d351cfdc1461076e57610219565b806395d89b41116100f257806395d89b41146105f15780639a93e0b31461061c5780639c5ad6a114610633578063a22cb4651461065e578063a5821a341461068757610219565b806381cb308214610568578063862440e2146105725780638704a2081461059b5780638da5cb5b146105c657610219565b80632e1a7d4d116101a65780634e1273f4116101755780634e1273f4146104815780634f558e79146104be5780635b1dc304146104fb57806361259b6814610526578063715018a61461055157610219565b80632e1a7d4d146103e85780632eb2c2d614610411578063449de7791461043a57806345d4fbc31461045657610219565b80630f32e534116101ed5780630f32e5341461030057806322b951be1461032b5780632a55205a146103565780632a652215146103945780632c3cf014146103bd57610219565b8062fdd58e1461021e57806301ffc9a71461025b57806306fdde03146102985780630e89341c146102c3575b600080fd5b34801561022a57600080fd5b50610245600480360381019061024091906133d1565b61086f565b6040516102529190613420565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613493565b610937565b60405161028f91906134db565b60405180910390f35b3480156102a457600080fd5b506102ad610949565b6040516102ba919061358f565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e591906135b1565b6109d7565b6040516102f7919061358f565b60405180910390f35b34801561030c57600080fd5b50610315610ab4565b6040516103229190613420565b60405180910390f35b34801561033757600080fd5b50610340610ac0565b60405161034d9190613420565b60405180910390f35b34801561036257600080fd5b5061037d600480360381019061037891906135de565b610ac5565b60405161038b92919061362d565b60405180910390f35b3480156103a057600080fd5b506103bb60048036038101906103b6919061379e565b610caf565b005b3480156103c957600080fd5b506103d2610dfd565b6040516103df9190613420565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a91906135b1565b610e02565b005b34801561041d57600080fd5b50610438600480360381019061043391906138cb565b61104e565b005b610454600480360381019061044f91906135de565b6110ef565b005b34801561046257600080fd5b5061046b611211565b6040516104789190613420565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190613a5d565b611216565b6040516104b59190613b93565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e091906135b1565b61132f565b6040516104f291906134db565b60405180910390f35b34801561050757600080fd5b50610510611343565b60405161051d9190613420565b60405180910390f35b34801561053257600080fd5b5061053b611348565b6040516105489190613420565b60405180910390f35b34801561055d57600080fd5b5061056661134d565b005b6105706113ce565b005b34801561057e57600080fd5b5061059960048036038101906105949190613c56565b6115e4565b005b3480156105a757600080fd5b506105b061168c565b6040516105bd9190613cd9565b60405180910390f35b3480156105d257600080fd5b506105db611692565b6040516105e89190613cf4565b60405180910390f35b3480156105fd57600080fd5b506106066116bc565b604051610613919061358f565b60405180910390f35b34801561062857600080fd5b5061063161174a565b005b34801561063f57600080fd5b506106486117e3565b6040516106559190613b93565b60405180910390f35b34801561066a57600080fd5b5061068560048036038101906106809190613d3b565b611882565b005b34801561069357600080fd5b5061069c611898565b005b3480156106aa57600080fd5b506106c560048036038101906106c091906135b1565b611931565b6040516106d29190613420565b60405180910390f35b3480156106e757600080fd5b506106f061194e565b6040516106fd91906134db565b60405180910390f35b34801561071257600080fd5b5061072d600480360381019061072891906135b1565b611961565b60405161073a919061358f565b60405180910390f35b34801561074f57600080fd5b50610758611a01565b6040516107659190613420565b60405180910390f35b6107886004803603810190610783919061379e565b611a0c565b005b34801561079657600080fd5b5061079f611b8a565b6040516107ac9190613420565b60405180910390f35b3480156107c157600080fd5b506107ca611b90565b6040516107d7919061358f565b60405180910390f35b3480156107ec57600080fd5b5061080760048036038101906108029190613d7b565b611ba1565b60405161081491906134db565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f9190613dbb565b611c35565b005b34801561085257600080fd5b5061086d60048036038101906108689190613e52565b611cd6565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036108df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d690613ef1565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061094282611df8565b9050919050565b6008805461095690613f40565b80601f016020809104026020016040519081016040528092919081815260200182805461098290613f40565b80156109cf5780601f106109a4576101008083540402835291602001916109cf565b820191906000526020600020905b8154815290600101906020018083116109b257829003601f168201915b505050505081565b60606000600b600084815260200190815260200160002080546109f990613f40565b905003610a1057610a0982611e72565b9050610aaf565b600b60008381526020019081526020016000208054610a2e90613f40565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5a90613f40565b8015610aa75780601f10610a7c57610100808354040283529160200191610aa7565b820191906000526020600020905b815481529060010190602001808311610a8a57829003601f168201915b505050505090505b919050565b6702c68af0bb14000081565b600281565b6000806000600560008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610c5a5760046040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610c64611f06565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610c909190613fa0565b610c9a9190614029565b90508160000151819350935050509250929050565b610cb7611f10565b73ffffffffffffffffffffffffffffffffffffffff16610cd5611692565b73ffffffffffffffffffffffffffffffffffffffff1614610d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d22906140a6565b60405180910390fd5b60005b8251811015610dd6576107d0828281518110610d4d57610d4c6140c6565b5b6020026020010151610d78858481518110610d6b57610d6a6140c6565b5b6020026020010151611931565b610d8291906140f5565b1115610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba90614197565b60405180910390fd5b8080610dce906141b7565b915050610d2e565b50610df9610de2611692565b838360405180602001604052806000815250611f18565b5050565b600381565b610e0a611f10565b73ffffffffffffffffffffffffffffffffffffffff16610e28611692565b73ffffffffffffffffffffffffffffffffffffffff1614610e7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e75906140a6565b60405180910390fd5b600260075403610ec3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eba9061424b565b60405180910390fd5b6002600781905550804711610f0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f04906142b7565b60405180910390fd5b6000808203610f8e57610f1e611692565b73ffffffffffffffffffffffffffffffffffffffff1647604051610f4190614308565b60006040518083038185875af1925050503d8060008114610f7e576040519150601f19603f3d011682016040523d82523d6000602084013e610f83565b606091505b505080915050611002565b610f96611692565b73ffffffffffffffffffffffffffffffffffffffff1682604051610fb990614308565b60006040518083038185875af1925050503d8060008114610ff6576040519150601f19603f3d011682016040523d82523d6000602084013e610ffb565b606091505b5050809150505b80611042576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103990614369565b60405180910390fd5b50600160078190555050565b611056611f10565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061109c575061109b85611096611f10565b611ba1565b5b6110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d2906143fb565b60405180910390fd5b6110e88585858585612144565b5050505050565b60001515600a60009054906101000a900460ff16151514611145576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113c90614467565b60405180910390fd5b8066b1a2bc2ec500006111589190613fa0565b34101561119a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611191906144d3565b60405180910390fd5b6107d0816111a784611931565b6111b191906140f5565b11156111f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e99061453f565b60405180910390fd5b61120d33838360405180602001604052806000815250612465565b5050565b600081565b6060815183511461125c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611253906145d1565b60405180910390fd5b6000835167ffffffffffffffff8111156112795761127861365b565b5b6040519080825280602002602001820160405280156112a75781602001602082028036833780820191505090505b50905060005b8451811015611324576112f48582815181106112cc576112cb6140c6565b5b60200260200101518583815181106112e7576112e66140c6565b5b602002602001015161086f565b828281518110611307576113066140c6565b5b6020026020010181815250508061131d906141b7565b90506112ad565b508091505092915050565b60008061133b83611931565b119050919050565b600481565b600181565b611355611f10565b73ffffffffffffffffffffffffffffffffffffffff16611373611692565b73ffffffffffffffffffffffffffffffffffffffff16146113c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c0906140a6565b60405180910390fd5b600080fd5b60001515600a60009054906101000a900460ff16151514611424576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141b90614467565b60405180910390fd5b6702c68af0bb14000034101561146f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611466906144d3565b60405180910390fd5b6000600567ffffffffffffffff81111561148c5761148b61365b565b5b6040519080825280602002602001820160405280156114ba5781602001602082028036833780820191505090505b5090506000600567ffffffffffffffff8111156114da576114d961365b565b5b6040519080825280602002602001820160405280156115085781602001602082028036833780820191505090505b50905060005b60058110156115c4576107d0600161152583611931565b61152f91906140f5565b1115611570576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115679061463d565b60405180910390fd5b80838281518110611584576115836140c6565b5b60200260200101818152505060018282815181106115a5576115a46140c6565b5b60200260200101818152505080806115bc906141b7565b91505061150e565b506115e033838360405180602001604052806000815250611f18565b5050565b6115ec611f10565b73ffffffffffffffffffffffffffffffffffffffff1661160a611692565b73ffffffffffffffffffffffffffffffffffffffff1614611660576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611657906140a6565b60405180910390fd5b80600b60008481526020019081526020016000209080519060200190611687929190613286565b505050565b61025881565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600980546116c990613f40565b80601f01602080910402602001604051908101604052809291908181526020018280546116f590613f40565b80156117425780601f1061171757610100808354040283529160200191611742565b820191906000526020600020905b81548152906001019060200180831161172557829003601f168201915b505050505081565b611752611f10565b73ffffffffffffffffffffffffffffffffffffffff16611770611692565b73ffffffffffffffffffffffffffffffffffffffff16146117c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117bd906140a6565b60405180910390fd5b6000600a60006101000a81548160ff021916908315150217905550565b60606000600567ffffffffffffffff8111156118025761180161365b565b5b6040519080825280602002602001820160405280156118305781602001602082028036833780820191505090505b50905060005b600581101561187a5761184881611931565b82828151811061185b5761185a6140c6565b5b6020026020010181815250508080611872906141b7565b915050611836565b508091505090565b61189461188d611f10565b8383612615565b5050565b6118a0611f10565b73ffffffffffffffffffffffffffffffffffffffff166118be611692565b73ffffffffffffffffffffffffffffffffffffffff1614611914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190b906140a6565b60405180910390fd5b6001600a60006101000a81548160ff021916908315150217905550565b600060036000838152602001908152602001600020549050919050565b600a60009054906101000a900460ff1681565b600b602052806000526040600020600091509050805461198090613f40565b80601f01602080910402602001604051908101604052809291908181526020018280546119ac90613f40565b80156119f95780601f106119ce576101008083540402835291602001916119f9565b820191906000526020600020905b8154815290600101906020018083116119dc57829003601f168201915b505050505081565b66b1a2bc2ec5000081565b60001515600a60009054906101000a900460ff16151514611a62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5990614467565b60405180910390fd5b611a6b81612781565b66b1a2bc2ec50000611a7d9190613fa0565b341015611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab6906144d3565b60405180910390fd5b60005b8251811015611b6a576107d0828281518110611ae157611ae06140c6565b5b6020026020010151611b0c858481518110611aff57611afe6140c6565b5b6020026020010151611931565b611b1691906140f5565b1115611b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4e90614197565b60405180910390fd5b8080611b62906141b7565b915050611ac2565b50611b8633838360405180602001604052806000815250611f18565b5050565b6107d081565b6060611b9c6000611e72565b905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c3d611f10565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611c835750611c8285611c7d611f10565b611ba1565b5b611cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb9906146cf565b60405180910390fd5b611ccf85858585856127d9565b5050505050565b611cde611f10565b73ffffffffffffffffffffffffffffffffffffffff16611cfc611692565b73ffffffffffffffffffffffffffffffffffffffff1614611d52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d49906140a6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db890614761565b60405180910390fd5b611dca81612a74565b50565b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611e6b5750611e6a82612b3a565b5b9050919050565b606060028054611e8190613f40565b80601f0160208091040260200160405190810160405280929190818152602001828054611ead90613f40565b8015611efa5780601f10611ecf57610100808354040283529160200191611efa565b820191906000526020600020905b815481529060010190602001808311611edd57829003601f168201915b50505050509050919050565b6000612710905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7e906147f3565b60405180910390fd5b8151835114611fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc290614885565b60405180910390fd5b6000611fd5611f10565b9050611fe681600087878787612c1c565b60005b845181101561209f57838181518110612005576120046140c6565b5b6020026020010151600080878481518110612023576120226140c6565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461208591906140f5565b925050819055508080612097906141b7565b915050611fe9565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516121179291906148a5565b60405180910390a461212e81600087878787612dec565b61213d81600087878787612df4565b5050505050565b8151835114612188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217f90614885565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee9061494e565b60405180910390fd5b6000612201611f10565b9050612211818787878787612c1c565b60005b84518110156123c2576000858281518110612232576122316140c6565b5b602002602001015190506000858381518110612251576122506140c6565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156122f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e9906149e0565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123a791906140f5565b92505081905550505050806123bb906141b7565b9050612214565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516124399291906148a5565b60405180910390a461244f818787878787612dec565b61245d818787878787612df4565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036124d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cb906147f3565b60405180910390fd5b60006124de611f10565b905060006124eb85612fcb565b905060006124f885612fcb565b905061250983600089858589612c1c565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461256891906140f5565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516125e6929190614a00565b60405180910390a46125fd83600089858589612dec565b61260c83600089898989613045565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267a90614a9b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161277491906134db565b60405180910390a3505050565b6000806000905060005b83518110156127cf578381815181106127a7576127a66140c6565b5b6020026020010151826127ba91906140f5565b915080806127c7906141b7565b91505061278b565b5080915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283f9061494e565b60405180910390fd5b6000612852611f10565b9050600061285f85612fcb565b9050600061286c85612fcb565b905061287c838989858589612c1c565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290a906149e0565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129c891906140f5565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051612a45929190614a00565b60405180910390a4612a5b848a8a86868a612dec565b612a69848a8a8a8a8a613045565b505050505050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c0557507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612c155750612c148261321c565b5b9050919050565b612c2a868686868686611dcd565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612cdb5760005b8351811015612cd957828181518110612c7d57612c7c6140c6565b5b602002602001015160036000868481518110612c9c57612c9b6140c6565b5b602002602001015181526020019081526020016000206000828254612cc191906140f5565b9250508190555080612cd2906141b7565b9050612c61565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612de45760005b8351811015612de2576000848281518110612d3057612d2f6140c6565b5b602002602001015190506000848381518110612d4f57612d4e6140c6565b5b6020026020010151905060006003600084815260200190815260200160002054905081811015612db4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dab90614b2d565b60405180910390fd5b818103600360008581526020019081526020016000208190555050505080612ddb906141b7565b9050612d12565b505b505050505050565b505050505050565b612e138473ffffffffffffffffffffffffffffffffffffffff16611dd5565b15612fc3578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612e59959493929190614ba2565b6020604051808303816000875af1925050508015612e9557506040513d601f19601f82011682018060405250810190612e929190614c1f565b60015b612f3a57612ea1614c59565b806308c379a003612efd5750612eb5614c7b565b80612ec05750612eff565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef4919061358f565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3190614d7d565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb890614e0f565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff811115612fea57612fe961365b565b5b6040519080825280602002602001820160405280156130185781602001602082028036833780820191505090505b50905082816000815181106130305761302f6140c6565b5b60200260200101818152505080915050919050565b6130648473ffffffffffffffffffffffffffffffffffffffff16611dd5565b15613214578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016130aa959493929190614e2f565b6020604051808303816000875af19250505080156130e657506040513d601f19601f820116820180604052508101906130e39190614c1f565b60015b61318b576130f2614c59565b806308c379a00361314e5750613106614c7b565b806131115750613150565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613145919061358f565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161318290614d7d565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613212576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161320990614e0f565b60405180910390fd5b505b505050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b82805461329290613f40565b90600052602060002090601f0160209004810192826132b457600085556132fb565b82601f106132cd57805160ff19168380011785556132fb565b828001600101855582156132fb579182015b828111156132fa5782518255916020019190600101906132df565b5b509050613308919061330c565b5090565b5b8082111561332557600081600090555060010161330d565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006133688261333d565b9050919050565b6133788161335d565b811461338357600080fd5b50565b6000813590506133958161336f565b92915050565b6000819050919050565b6133ae8161339b565b81146133b957600080fd5b50565b6000813590506133cb816133a5565b92915050565b600080604083850312156133e8576133e7613333565b5b60006133f685828601613386565b9250506020613407858286016133bc565b9150509250929050565b61341a8161339b565b82525050565b60006020820190506134356000830184613411565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6134708161343b565b811461347b57600080fd5b50565b60008135905061348d81613467565b92915050565b6000602082840312156134a9576134a8613333565b5b60006134b78482850161347e565b91505092915050565b60008115159050919050565b6134d5816134c0565b82525050565b60006020820190506134f060008301846134cc565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613530578082015181840152602081019050613515565b8381111561353f576000848401525b50505050565b6000601f19601f8301169050919050565b6000613561826134f6565b61356b8185613501565b935061357b818560208601613512565b61358481613545565b840191505092915050565b600060208201905081810360008301526135a98184613556565b905092915050565b6000602082840312156135c7576135c6613333565b5b60006135d5848285016133bc565b91505092915050565b600080604083850312156135f5576135f4613333565b5b6000613603858286016133bc565b9250506020613614858286016133bc565b9150509250929050565b6136278161335d565b82525050565b6000604082019050613642600083018561361e565b61364f6020830184613411565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61369382613545565b810181811067ffffffffffffffff821117156136b2576136b161365b565b5b80604052505050565b60006136c5613329565b90506136d1828261368a565b919050565b600067ffffffffffffffff8211156136f1576136f061365b565b5b602082029050602081019050919050565b600080fd5b600061371a613715846136d6565b6136bb565b9050808382526020820190506020840283018581111561373d5761373c613702565b5b835b81811015613766578061375288826133bc565b84526020840193505060208101905061373f565b5050509392505050565b600082601f83011261378557613784613656565b5b8135613795848260208601613707565b91505092915050565b600080604083850312156137b5576137b4613333565b5b600083013567ffffffffffffffff8111156137d3576137d2613338565b5b6137df85828601613770565b925050602083013567ffffffffffffffff811115613800576137ff613338565b5b61380c85828601613770565b9150509250929050565b600080fd5b600067ffffffffffffffff8211156138365761383561365b565b5b61383f82613545565b9050602081019050919050565b82818337600083830152505050565b600061386e6138698461381b565b6136bb565b90508281526020810184848401111561388a57613889613816565b5b61389584828561384c565b509392505050565b600082601f8301126138b2576138b1613656565b5b81356138c284826020860161385b565b91505092915050565b600080600080600060a086880312156138e7576138e6613333565b5b60006138f588828901613386565b955050602061390688828901613386565b945050604086013567ffffffffffffffff81111561392757613926613338565b5b61393388828901613770565b935050606086013567ffffffffffffffff81111561395457613953613338565b5b61396088828901613770565b925050608086013567ffffffffffffffff81111561398157613980613338565b5b61398d8882890161389d565b9150509295509295909350565b600067ffffffffffffffff8211156139b5576139b461365b565b5b602082029050602081019050919050565b60006139d96139d48461399a565b6136bb565b905080838252602082019050602084028301858111156139fc576139fb613702565b5b835b81811015613a255780613a118882613386565b8452602084019350506020810190506139fe565b5050509392505050565b600082601f830112613a4457613a43613656565b5b8135613a548482602086016139c6565b91505092915050565b60008060408385031215613a7457613a73613333565b5b600083013567ffffffffffffffff811115613a9257613a91613338565b5b613a9e85828601613a2f565b925050602083013567ffffffffffffffff811115613abf57613abe613338565b5b613acb85828601613770565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613b0a8161339b565b82525050565b6000613b1c8383613b01565b60208301905092915050565b6000602082019050919050565b6000613b4082613ad5565b613b4a8185613ae0565b9350613b5583613af1565b8060005b83811015613b86578151613b6d8882613b10565b9750613b7883613b28565b925050600181019050613b59565b5085935050505092915050565b60006020820190508181036000830152613bad8184613b35565b905092915050565b600067ffffffffffffffff821115613bd057613bcf61365b565b5b613bd982613545565b9050602081019050919050565b6000613bf9613bf484613bb5565b6136bb565b905082815260208101848484011115613c1557613c14613816565b5b613c2084828561384c565b509392505050565b600082601f830112613c3d57613c3c613656565b5b8135613c4d848260208601613be6565b91505092915050565b60008060408385031215613c6d57613c6c613333565b5b6000613c7b858286016133bc565b925050602083013567ffffffffffffffff811115613c9c57613c9b613338565b5b613ca885828601613c28565b9150509250929050565b60006bffffffffffffffffffffffff82169050919050565b613cd381613cb2565b82525050565b6000602082019050613cee6000830184613cca565b92915050565b6000602082019050613d09600083018461361e565b92915050565b613d18816134c0565b8114613d2357600080fd5b50565b600081359050613d3581613d0f565b92915050565b60008060408385031215613d5257613d51613333565b5b6000613d6085828601613386565b9250506020613d7185828601613d26565b9150509250929050565b60008060408385031215613d9257613d91613333565b5b6000613da085828601613386565b9250506020613db185828601613386565b9150509250929050565b600080600080600060a08688031215613dd757613dd6613333565b5b6000613de588828901613386565b9550506020613df688828901613386565b9450506040613e07888289016133bc565b9350506060613e18888289016133bc565b925050608086013567ffffffffffffffff811115613e3957613e38613338565b5b613e458882890161389d565b9150509295509295909350565b600060208284031215613e6857613e67613333565b5b6000613e7684828501613386565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000613edb602b83613501565b9150613ee682613e7f565b604082019050919050565b60006020820190508181036000830152613f0a81613ece565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613f5857607f821691505b602082108103613f6b57613f6a613f11565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613fab8261339b565b9150613fb68361339b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fef57613fee613f71565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140348261339b565b915061403f8361339b565b92508261404f5761404e613ffa565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614090602083613501565b915061409b8261405a565b602082019050919050565b600060208201905081810360008301526140bf81614083565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006141008261339b565b915061410b8361339b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141405761413f613f71565b5b828201905092915050565b7f444546494349454e545f535550504c5900000000000000000000000000000000600082015250565b6000614181601083613501565b915061418c8261414b565b602082019050919050565b600060208201905081810360008301526141b081614174565b9050919050565b60006141c28261339b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036141f4576141f3613f71565b5b600182019050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614235601f83613501565b9150614240826141ff565b602082019050919050565b6000602082019050818103600083015261426481614228565b9050919050565b7f494e53554646494349454e545f42414c414e4345000000000000000000000000600082015250565b60006142a1601483613501565b91506142ac8261426b565b602082019050919050565b600060208201905081810360008301526142d081614294565b9050919050565b600081905092915050565b50565b60006142f26000836142d7565b91506142fd826142e2565b600082019050919050565b6000614313826142e5565b9150819050919050565b7f4641494c45445f57495448445241570000000000000000000000000000000000600082015250565b6000614353600f83613501565b915061435e8261431d565b602082019050919050565b6000602082019050818103600083015261438281614346565b9050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006143e5603283613501565b91506143f082614389565b604082019050919050565b60006020820190508181036000830152614414816143d8565b9050919050565b7f5041555345445f544f4b454e5f4d494e54000000000000000000000000000000600082015250565b6000614451601183613501565b915061445c8261441b565b602082019050919050565b6000602082019050818103600083015261448081614444565b9050919050565b7f494e53554646494349454e545f46554e44530000000000000000000000000000600082015250565b60006144bd601283613501565b91506144c882614487565b602082019050919050565b600060208201905081810360008301526144ec816144b0565b9050919050565b7f544f4b454e5f535550504c595f52454143484544000000000000000000000000600082015250565b6000614529601483613501565b9150614534826144f3565b602082019050919050565b600060208201905081810360008301526145588161451c565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b60006145bb602983613501565b91506145c68261455f565b604082019050919050565b600060208201905081810360008301526145ea816145ae565b9050919050565b7f444546494349454e545f434f4c4c454354494f4e000000000000000000000000600082015250565b6000614627601483613501565b9150614632826145f1565b602082019050919050565b600060208201905081810360008301526146568161461a565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006146b9602983613501565b91506146c48261465d565b604082019050919050565b600060208201905081810360008301526146e8816146ac565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061474b602683613501565b9150614756826146ef565b604082019050919050565b6000602082019050818103600083015261477a8161473e565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006147dd602183613501565b91506147e882614781565b604082019050919050565b6000602082019050818103600083015261480c816147d0565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061486f602883613501565b915061487a82614813565b604082019050919050565b6000602082019050818103600083015261489e81614862565b9050919050565b600060408201905081810360008301526148bf8185613b35565b905081810360208301526148d38184613b35565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614938602583613501565b9150614943826148dc565b604082019050919050565b600060208201905081810360008301526149678161492b565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006149ca602a83613501565b91506149d58261496e565b604082019050919050565b600060208201905081810360008301526149f9816149bd565b9050919050565b6000604082019050614a156000830185613411565b614a226020830184613411565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614a85602983613501565b9150614a9082614a29565b604082019050919050565b60006020820190508181036000830152614ab481614a78565b9050919050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b6000614b17602883613501565b9150614b2282614abb565b604082019050919050565b60006020820190508181036000830152614b4681614b0a565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000614b7482614b4d565b614b7e8185614b58565b9350614b8e818560208601613512565b614b9781613545565b840191505092915050565b600060a082019050614bb7600083018861361e565b614bc4602083018761361e565b8181036040830152614bd68186613b35565b90508181036060830152614bea8185613b35565b90508181036080830152614bfe8184614b69565b90509695505050505050565b600081519050614c1981613467565b92915050565b600060208284031215614c3557614c34613333565b5b6000614c4384828501614c0a565b91505092915050565b60008160e01c9050919050565b600060033d1115614c785760046000803e614c75600051614c4c565b90505b90565b600060443d10614d0857614c8d613329565b60043d036004823e80513d602482011167ffffffffffffffff82111715614cb5575050614d08565b808201805167ffffffffffffffff811115614cd35750505050614d08565b80602083010160043d038501811115614cf0575050505050614d08565b614cff8260200185018661368a565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000614d67603483613501565b9150614d7282614d0b565b604082019050919050565b60006020820190508181036000830152614d9681614d5a565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000614df9602883613501565b9150614e0482614d9d565b604082019050919050565b60006020820190508181036000830152614e2881614dec565b9050919050565b600060a082019050614e44600083018861361e565b614e51602083018761361e565b614e5e6040830186613411565b614e6b6060830185613411565b8181036080830152614e7d8184614b69565b9050969550505050505056fea26469706673582212200730040687f813f2c08aa42cfe89fb713460e452fae1121ddd154c23f083be2964736f6c634300080e0033

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

0000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000000000000000000000000000000000000000028000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000000000000000000000000000000000000000003400000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f3650356237327a4a503570634b706b61714968344971393539726838685772576349494f546273306c6f5500000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f7a47784244466376725875654b38375069307a662d70713166467245597157696937556f454f56616a437700000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f66457353495679665a655334674e5f4e615333725f6935354a516757794d3845307242744a617a7730614500000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f6d505375415751336342794e3864454b44755a46626862364b59445562426158634479326c596a6f4f5f4900000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f66676773455533444d68513465787254433075725f664a7964535665313476326b4b6e5835414a6935414500000000000000000000000000000000000000000000000000000000000000003f68747470733a2f2f617277656176652e6e65742f504555757137685038524a47526a3544565333786a4f744734427454344d6762306e684b6f42706f34726b00000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000030000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000500000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000000032

-----Decoded View---------------
Arg [0] : defaultUri (string): https://arweave.net/6P5b72zJP5pcKpkaqIh4Iq959rh8hWrWcIIOTbs0loU
Arg [1] : ELECTIONUri (string): https://arweave.net/zGxBDFcvrXueK87Pi0zf-pq1fFrEYqWii7UoEOVajCw
Arg [2] : WILLKOMMUri (string): https://arweave.net/fEsSIVyfZeS4gN_NaS3r_i55JQgWyM8E0rBtJazw0aE
Arg [3] : WRTSAMEUri (string): https://arweave.net/mPSuAWQ3cByN8dEKDuZFbhb6KYDUbBaXcDy2lYjoO_I
Arg [4] : PEGASUSUri (string): https://arweave.net/fggsEU3DMhQ4exrTC0ur_fJydSVe14v2kKnX5AJi5AE
Arg [5] : SHUSHUri (string): https://arweave.net/PEUuq7hP8RJGRj5DVS3xjOtG4BtT4Mgb0nhKoBpo4rk
Arg [6] : ids (uint256[]): 0,1,2,3,4
Arg [7] : amounts (uint256[]): 50,50,50,50,50

-----Encoded View---------------
38 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000160
Arg [2] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000220
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000280
Arg [5] : 00000000000000000000000000000000000000000000000000000000000002e0
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000340
Arg [7] : 0000000000000000000000000000000000000000000000000000000000000400
Arg [8] : 000000000000000000000000000000000000000000000000000000000000003f
Arg [9] : 68747470733a2f2f617277656176652e6e65742f3650356237327a4a50357063
Arg [10] : 4b706b61714968344971393539726838685772576349494f546273306c6f5500
Arg [11] : 000000000000000000000000000000000000000000000000000000000000003f
Arg [12] : 68747470733a2f2f617277656176652e6e65742f7a4778424446637672587565
Arg [13] : 4b38375069307a662d70713166467245597157696937556f454f56616a437700
Arg [14] : 000000000000000000000000000000000000000000000000000000000000003f
Arg [15] : 68747470733a2f2f617277656176652e6e65742f66457353495679665a655334
Arg [16] : 674e5f4e615333725f6935354a516757794d3845307242744a617a7730614500
Arg [17] : 000000000000000000000000000000000000000000000000000000000000003f
Arg [18] : 68747470733a2f2f617277656176652e6e65742f6d505375415751336342794e
Arg [19] : 3864454b44755a46626862364b59445562426158634479326c596a6f4f5f4900
Arg [20] : 000000000000000000000000000000000000000000000000000000000000003f
Arg [21] : 68747470733a2f2f617277656176652e6e65742f66676773455533444d685134
Arg [22] : 65787254433075725f664a7964535665313476326b4b6e5835414a6935414500
Arg [23] : 000000000000000000000000000000000000000000000000000000000000003f
Arg [24] : 68747470733a2f2f617277656176652e6e65742f504555757137685038524a47
Arg [25] : 526a3544565333786a4f744734427454344d6762306e684b6f42706f34726b00
Arg [26] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [27] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [28] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [29] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [30] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [31] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [32] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [33] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [34] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [35] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [36] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [37] : 0000000000000000000000000000000000000000000000000000000000000032


Deployed Bytecode Sourcemap

1390:5099:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2185:228:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6218:171:13;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1475:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2780:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1850:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1615:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1671:432:8;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;4556:321:13;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1657:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5349:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4060:430:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3268:297:13;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1529:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2570:508:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;901:120:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1699:33:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1572:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6397:87;;;;;;;;;;;;;:::i;:::-;;4010:538;;;:::i;:::-;;3010:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1909:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1036:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1500:20:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5007:87;;;;;;;;;;;;;:::i;:::-;;5102:239;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3146:153:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4915:84:13;;;;;;;;;;;;;:::i;:::-;;697:111:6;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1960:27:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1994:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1795:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3573:429;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1741:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3145:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3366:166:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3599:389;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1918:198:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2185:228:3;2271:7;2317:1;2298:21;;:7;:21;;;2290:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;2384:9;:13;2394:2;2384:13;;;;;;;;;;;:22;2398:7;2384:22;;;;;;;;;;;;;;;;2377:29;;2185:228;;;;:::o;6218:171:13:-;6321:4;6345:36;6369:11;6345:23;:36::i;:::-;6338:43;;6218:171;;;:::o;1475:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2780:222::-;2840:13;2905:1;2876:8;:17;2885:7;2876:17;;;;;;;;;;;2870:31;;;;;:::i;:::-;;;:36;2866:94;;2930:18;2940:7;2930:9;:18::i;:::-;2923:25;;;;2866:94;2977:8;:17;2986:7;2977:17;;;;;;;;;;;2970:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2780:222;;;;:::o;1850:52::-;1893:9;1850:52;:::o;1615:35::-;1649:1;1615:35;:::o;1671:432:8:-;1768:7;1777;1796:26;1825:17;:27;1843:8;1825:27;;;;;;;;;;;1796:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1895:1;1867:30;;:7;:16;;;:30;;;1863:90;;1923:19;1913:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1863:90;1963:21;2028:17;:15;:17::i;:::-;1987:58;;2001:7;:23;;;1988:36;;:10;:36;;;;:::i;:::-;1987:58;;;;:::i;:::-;1963:82;;2064:7;:16;;;2082:13;2056:40;;;;;;1671:432;;;;;:::o;4556:321:13:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4658:13:13::1;4653:169;4685:3;:10;4677:5;:18;4653:169;;;1784:4;4755:7;4763:5;4755:14;;;;;;;;:::i;:::-;;;;;;;;4729:23;4741:3;4745:5;4741:10;;;;;;;;:::i;:::-;;;;;;;;4729:11;:23::i;:::-;:40;;;;:::i;:::-;:60;;4721:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;4697:7;;;;;:::i;:::-;;;;4653:169;;;;4832:37;4843:7;:5;:7::i;:::-;4852:3;4857:7;4832:37;;;;;;;;;;;::::0;:10:::1;:37::i;:::-;4556:321:::0;;:::o;1657:35::-;1691:1;1657:35;:::o;5349:436::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1:2::1;2325:7;;:19:::0;2317:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1744:1;2455:7;:18;;;;5456:5:13::2;5432:21;:29;5424:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;5497:9;5530:1:::0;5521:5:::2;:10:::0;5517:218:::2;;5580:7;:5;:7::i;:::-;:12;;5601:21;5580:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5548:80;;;;;5517:218;;;5693:7;:5;:7::i;:::-;:12;;5713:5;5693:30;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5661:62;;;;;5517:218;5753:4;5745:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;5413:372;1701:1:2::1;2628:7;:22;;;;5349:436:13::0;:::o;4060:430:3:-;4293:12;:10;:12::i;:::-;4285:20;;:4;:20;;;:60;;;;4309:36;4326:4;4332:12;:10;:12::i;:::-;4309:16;:36::i;:::-;4285:60;4264:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;4431:52;4454:4;4460:2;4464:3;4469:7;4478:4;4431:22;:52::i;:::-;4060:430;;;;;:::o;3268:297:13:-;5880:5;5861:24;;:15;;;;;;;;;;;:24;;;5853:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;3395:6:::1;1833:10;3381:20;;;;:::i;:::-;3367:9;:35;;3359:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;1784:4;3462:6;3444:15;3456:2;3444:11;:15::i;:::-;:24;;;;:::i;:::-;:44;;3436:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;3524:33;3530:10;3542:2;3546:6;3524:33;;;;;;;;;;;::::0;:5:::1;:33::i;:::-;3268:297:::0;;:::o;1529:36::-;1564:1;1529:36;:::o;2570:508:3:-;2721:16;2780:3;:10;2761:8;:15;:29;2753:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;2847:30;2894:8;:15;2880:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2847:63;;2926:9;2921:120;2945:8;:15;2941:1;:19;2921:120;;;3000:30;3010:8;3019:1;3010:11;;;;;;;;:::i;:::-;;;;;;;;3023:3;3027:1;3023:6;;;;;;;;:::i;:::-;;;;;;;;3000:9;:30::i;:::-;2981:13;2995:1;2981:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;2962:3;;;;:::i;:::-;;;2921:120;;;;3058:13;3051:20;;;2570:508;;;;:::o;901:120:6:-;958:4;1013:1;981:29;1007:2;981:25;:29::i;:::-;:33;974:40;;901:120;;;:::o;1699:33:13:-;1731:1;1699:33;:::o;1572:36::-;1607:1;1572:36;:::o;6397:87::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6468:8:13::1;::::0;::::1;4010:538:::0;5880:5;5861:24;;:15;;;;;;;;;;;:24;;;5853:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;1893:9:::1;4089;:29;;4081:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;4154:27;4198:1;4184:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4154:46;;4211:21;4249:1;4235:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4211:40;;4269:13;4264:219;4296:1;4288:5;:9;4264:219;;;1784:4;4352:1;4331:18;4343:5;4331:11;:18::i;:::-;:22;;;;:::i;:::-;:42;;4323:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;4433:5;4413:10;4424:5;4413:17;;;;;;;;:::i;:::-;;;;;;;:25;;;::::0;::::1;4470:1;4453:7;4461:5;4453:14;;;;;;;;:::i;:::-;;;;;;;:18;;;::::0;::::1;4299:7;;;;;:::i;:::-;;;;4264:219;;;;4493:47;4504:10;4516;4528:7;4493:47;;;;;;;;;;;::::0;:10:::1;:47::i;:::-;4070:478;;4010:538::o:0;3010:127::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3118:11:13::1;3098:8;:17;3107:7;3098:17;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;3010:127:::0;;:::o;1909:36::-;1942:3;1909:36;:::o;1036:85:0:-;1082:7;1108:6;;;;;;;;;;;1101:13;;1036:85;:::o;1500:20:13:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5007:87::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5081:5:13::1;5063:15;;:23;;;;;;;;;;;;;;;;;;5007:87::o:0;5102:239::-;5153:16;5182:20;5216:1;5205:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5182:36;;5233:6;5229:81;5249:1;5245;:5;5229:81;;;5284:14;5296:1;5284:11;:14::i;:::-;5272:6;5279:1;5272:9;;;;;;;;:::i;:::-;;;;;;;:26;;;;;5252:3;;;;;:::i;:::-;;;;5229:81;;;;5327:6;5320:13;;;5102:239;:::o;3146:153:3:-;3240:52;3259:12;:10;:12::i;:::-;3273:8;3283;3240:18;:52::i;:::-;3146:153;;:::o;4915:84:13:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4987:4:13::1;4969:15;;:22;;;;;;;;;;;;;;;;;;4915:84::o:0;697:111:6:-;759:7;785:12;:16;798:2;785:16;;;;;;;;;;;;778:23;;697:111;;;:::o;1960:27:13:-;;;;;;;;;;;;;:::o;1994:43::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1795:48::-;1833:10;1795:48;:::o;3573:429::-;5880:5;5861:24;;:15;;;;;;;;;;;:24;;;5853:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;3721:17:::1;3730:7;3721:8;:17::i;:::-;1833:10;3707:31;;;;:::i;:::-;3693:9;:46;;3685:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;3780:13;3775:169;3807:3;:10;3799:5;:18;3775:169;;;1784:4;3877:7;3885:5;3877:14;;;;;;;;:::i;:::-;;;;;;;;3851:23;3863:3;3867:5;3863:10;;;;;;;;:::i;:::-;;;;;;;;3851:11;:23::i;:::-;:40;;;;:::i;:::-;:60;;3843:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;3819:7;;;;;:::i;:::-;;;;3775:169;;;;3954:40;3965:10;3977:3;3982:7;3954:40;;;;;;;;;;;::::0;:10:::1;:40::i;:::-;3573:429:::0;;:::o;1741:47::-;1784:4;1741:47;:::o;3145:97::-;3189:13;3222:12;3232:1;3222:9;:12::i;:::-;3215:19;;3145:97;:::o;3366:166:3:-;3465:4;3488:18;:27;3507:7;3488:27;;;;;;;;;;;;;;;:37;3516:8;3488:37;;;;;;;;;;;;;;;;;;;;;;;;;3481:44;;3366:166;;;;:::o;3599:389::-;3807:12;:10;:12::i;:::-;3799:20;;:4;:20;;;:60;;;;3823:36;3840:4;3846:12;:10;:12::i;:::-;3823:16;:36::i;:::-;3799:60;3778:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;3936:45;3954:4;3960:2;3964;3968:6;3976:4;3936:17;:45::i;:::-;3599:389;;;;;:::o;1918:198:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2026:1:::1;2006:22;;:8;:22;;::::0;1998:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;14030:214:3:-;;;;;;;:::o;1175:320:9:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;1408:213:8:-;1510:4;1548:26;1533:41;;;:11;:41;;;;:81;;;;1578:36;1602:11;1578:23;:36::i;:::-;1533:81;1526:88;;1408:213;;;:::o;1940:103:3:-;2000:13;2032:4;2025:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1940:103;;;:::o;2378:95:8:-;2436:6;2461:5;2454:12;;2378:95;:::o;640:96:10:-;693:7;719:10;712:17;;640:96;:::o;9684:791:3:-;9870:1;9856:16;;:2;:16;;;9848:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;9942:7;:14;9928:3;:10;:28;9920:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10012:16;10031:12;:10;:12::i;:::-;10012:31;;10054:66;10075:8;10093:1;10097:2;10101:3;10106:7;10115:4;10054:20;:66::i;:::-;10136:9;10131:101;10155:3;:10;10151:1;:14;10131:101;;;10211:7;10219:1;10211:10;;;;;;;;:::i;:::-;;;;;;;;10186:9;:17;10196:3;10200:1;10196:6;;;;;;;;:::i;:::-;;;;;;;;10186:17;;;;;;;;;;;:21;10204:2;10186:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;10167:3;;;;;:::i;:::-;;;;10131:101;;;;10283:2;10247:53;;10279:1;10247:53;;10261:8;10247:53;;;10287:3;10292:7;10247:53;;;;;;;:::i;:::-;;;;;;;;10311:65;10331:8;10349:1;10353:2;10357:3;10362:7;10371:4;10311:19;:65::i;:::-;10387:81;10423:8;10441:1;10445:2;10449:3;10454:7;10463:4;10387:35;:81::i;:::-;9838:637;9684:791;;;;:::o;6233:1115::-;6453:7;:14;6439:3;:10;:28;6431:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;6544:1;6530:16;;:2;:16;;;6522:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6599:16;6618:12;:10;:12::i;:::-;6599:31;;6641:60;6662:8;6672:4;6678:2;6682:3;6687:7;6696:4;6641:20;:60::i;:::-;6717:9;6712:411;6736:3;:10;6732:1;:14;6712:411;;;6767:10;6780:3;6784:1;6780:6;;;;;;;;:::i;:::-;;;;;;;;6767:19;;6800:14;6817:7;6825:1;6817:10;;;;;;;;:::i;:::-;;;;;;;;6800:27;;6842:19;6864:9;:13;6874:2;6864:13;;;;;;;;;;;:19;6878:4;6864:19;;;;;;;;;;;;;;;;6842:41;;6920:6;6905:11;:21;;6897:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;7051:6;7037:11;:20;7015:9;:13;7025:2;7015:13;;;;;;;;;;;:19;7029:4;7015:19;;;;;;;;;;;;;;;:42;;;;7106:6;7085:9;:13;7095:2;7085:13;;;;;;;;;;;:17;7099:2;7085:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;6753:370;;;6748:3;;;;:::i;:::-;;;6712:411;;;;7168:2;7138:47;;7162:4;7138:47;;7152:8;7138:47;;;7172:3;7177:7;7138:47;;;;;;;:::i;:::-;;;;;;;;7196:59;7216:8;7226:4;7232:2;7236:3;7241:7;7250:4;7196:19;:59::i;:::-;7266:75;7302:8;7312:4;7318:2;7322:3;7327:7;7336:4;7266:35;:75::i;:::-;6421:927;6233:1115;;;;;:::o;8630:709::-;8791:1;8777:16;;:2;:16;;;8769:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;8842:16;8861:12;:10;:12::i;:::-;8842:31;;8883:20;8906:21;8924:2;8906:17;:21::i;:::-;8883:44;;8937:24;8964:25;8982:6;8964:17;:25::i;:::-;8937:52;;9000:66;9021:8;9039:1;9043:2;9047:3;9052:7;9061:4;9000:20;:66::i;:::-;9098:6;9077:9;:13;9087:2;9077:13;;;;;;;;;;;:17;9091:2;9077:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;9156:2;9119:52;;9152:1;9119:52;;9134:8;9119:52;;;9160:2;9164:6;9119:52;;;;;;;:::i;:::-;;;;;;;;9182:65;9202:8;9220:1;9224:2;9228:3;9233:7;9242:4;9182:19;:65::i;:::-;9258:74;9289:8;9307:1;9311:2;9315;9319:6;9327:4;9258:30;:74::i;:::-;8759:580;;;8630:709;;;;:::o;12773:323::-;12923:8;12914:17;;:5;:17;;;12906:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13025:8;12987:18;:25;13006:5;12987:25;;;;;;;;;;;;;;;:35;13013:8;12987:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;13070:8;13048:41;;13063:5;13048:41;;;13080:8;13048:41;;;;;;:::i;:::-;;;;;;;;12773:323;;;:::o;5950:240:13:-;6015:7;6035:11;6049:1;6035:15;;6066:13;6061:101;6093:5;:12;6085:5;:20;6061:101;;;6138:5;6144;6138:12;;;;;;;;:::i;:::-;;;;;;;;6131:19;;;;;:::i;:::-;;;6107:7;;;;;:::i;:::-;;;;6061:101;;;;6179:3;6172:10;;;5950:240;;;:::o;4940:947:3:-;5135:1;5121:16;;:2;:16;;;5113:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5190:16;5209:12;:10;:12::i;:::-;5190:31;;5231:20;5254:21;5272:2;5254:17;:21::i;:::-;5231:44;;5285:24;5312:25;5330:6;5312:17;:25::i;:::-;5285:52;;5348:60;5369:8;5379:4;5385:2;5389:3;5394:7;5403:4;5348:20;:60::i;:::-;5419:19;5441:9;:13;5451:2;5441:13;;;;;;;;;;;:19;5455:4;5441:19;;;;;;;;;;;;;;;;5419:41;;5493:6;5478:11;:21;;5470:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5616:6;5602:11;:20;5580:9;:13;5590:2;5580:13;;;;;;;;;;;:19;5594:4;5580:19;;;;;;;;;;;;;;;:42;;;;5663:6;5642:9;:13;5652:2;5642:13;;;;;;;;;;;:17;5656:2;5642:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;5716:2;5685:46;;5710:4;5685:46;;5700:8;5685:46;;;5720:2;5724:6;5685:46;;;;;;;:::i;:::-;;;;;;;;5742:59;5762:8;5772:4;5778:2;5782:3;5787:7;5796:4;5742:19;:59::i;:::-;5812:68;5843:8;5853:4;5859:2;5863;5867:6;5875:4;5812:30;:68::i;:::-;5103:784;;;;4940:947;;;;;:::o;2270:187:0:-;2343:16;2362:6;;;;;;;;;;;2343:25;;2387:8;2378:6;;:17;;;;;;;;;;;;;;;;;;2441:8;2410:40;;2431:8;2410:40;;;;;;;;;;;;2333:124;2270:187;:::o;1236:305:3:-;1338:4;1388:26;1373:41;;;:11;:41;;;;:109;;;;1445:37;1430:52;;;:11;:52;;;;1373:109;:161;;;;1498:36;1522:11;1498:23;:36::i;:::-;1373:161;1354:180;;1236:305;;;:::o;1091:904:6:-;1322:66;1349:8;1359:4;1365:2;1369:3;1374:7;1383:4;1322:26;:66::i;:::-;1419:1;1403:18;;:4;:18;;;1399:156;;1442:9;1437:108;1461:3;:10;1457:1;:14;1437:108;;;1520:7;1528:1;1520:10;;;;;;;;:::i;:::-;;;;;;;;1496:12;:20;1509:3;1513:1;1509:6;;;;;;;;:::i;:::-;;;;;;;;1496:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;1473:3;;;;:::i;:::-;;;1437:108;;;;1399:156;1583:1;1569:16;;:2;:16;;;1565:424;;1606:9;1601:378;1625:3;:10;1621:1;:14;1601:378;;;1660:10;1673:3;1677:1;1673:6;;;;;;;;:::i;:::-;;;;;;;;1660:19;;1697:14;1714:7;1722:1;1714:10;;;;;;;;:::i;:::-;;;;;;;;1697:27;;1742:14;1759:12;:16;1772:2;1759:16;;;;;;;;;;;;1742:33;;1811:6;1801;:16;;1793:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;1940:6;1931;:15;1912:12;:16;1925:2;1912:16;;;;;;;;;;;:34;;;;1642:337;;;1637:3;;;;:::i;:::-;;;1601:378;;;;1565:424;1091:904;;;;;;:::o;15177:213:3:-;;;;;;;:::o;16127:792::-;16359:15;:2;:13;;;:15::i;:::-;16355:558;;;16411:2;16394:43;;;16438:8;16448:4;16454:3;16459:7;16468:4;16394:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;16390:513;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;16779:6;16772:14;;;;;;;;;;;:::i;:::-;;;;;;;;16390:513;;;16826:62;;;;;;;;;;:::i;:::-;;;;;;;;16390:513;16564:48;;;16552:60;;;:8;:60;;;;16548:157;;16636:50;;;;;;;;;;:::i;:::-;;;;;;;;16548:157;16474:245;16355:558;16127:792;;;;;;:::o;16925:193::-;16991:16;17019:22;17058:1;17044:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17019:41;;17081:7;17070:5;17076:1;17070:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;17106:5;17099:12;;;16925:193;;;:::o;15396:725::-;15603:15;:2;:13;;;:15::i;:::-;15599:516;;;15655:2;15638:38;;;15677:8;15687:4;15693:2;15697:6;15705:4;15638:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;15634:471;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;15981:6;15974:14;;;;;;;;;;;:::i;:::-;;;;;;;;15634:471;;;16028:62;;;;;;;;;;:::i;:::-;;;;;;;;15634:471;15771:43;;;15759:55;;;:8;:55;;;;15755:152;;15838:50;;;;;;;;;;:::i;:::-;;;;;;;;15755:152;15711:210;15599:516;15396:725;;;;;;:::o;829:155:11:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:14:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:307::-;3561:1;3571:113;3585:6;3582:1;3579:13;3571:113;;;3670:1;3665:3;3661:11;3655:18;3651:1;3646:3;3642:11;3635:39;3607:2;3604:1;3600:10;3595:15;;3571:113;;;3702:6;3699:1;3696:13;3693:101;;;3782:1;3773:6;3768:3;3764:16;3757:27;3693:101;3542:258;3493:307;;;:::o;3806:102::-;3847:6;3898:2;3894:7;3889:2;3882:5;3878:14;3874:28;3864:38;;3806:102;;;:::o;3914:364::-;4002:3;4030:39;4063:5;4030:39;:::i;:::-;4085:71;4149:6;4144:3;4085:71;:::i;:::-;4078:78;;4165:52;4210:6;4205:3;4198:4;4191:5;4187:16;4165:52;:::i;:::-;4242:29;4264:6;4242:29;:::i;:::-;4237:3;4233:39;4226:46;;4006:272;3914:364;;;;:::o;4284:313::-;4397:4;4435:2;4424:9;4420:18;4412:26;;4484:9;4478:4;4474:20;4470:1;4459:9;4455:17;4448:47;4512:78;4585:4;4576:6;4512:78;:::i;:::-;4504:86;;4284:313;;;;:::o;4603:329::-;4662:6;4711:2;4699:9;4690:7;4686:23;4682:32;4679:119;;;4717:79;;:::i;:::-;4679:119;4837:1;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4808:117;4603:329;;;;:::o;4938:474::-;5006:6;5014;5063:2;5051:9;5042:7;5038:23;5034:32;5031:119;;;5069:79;;:::i;:::-;5031:119;5189:1;5214:53;5259:7;5250:6;5239:9;5235:22;5214:53;:::i;:::-;5204:63;;5160:117;5316:2;5342:53;5387:7;5378:6;5367:9;5363:22;5342:53;:::i;:::-;5332:63;;5287:118;4938:474;;;;;:::o;5418:118::-;5505:24;5523:5;5505:24;:::i;:::-;5500:3;5493:37;5418:118;;:::o;5542:332::-;5663:4;5701:2;5690:9;5686:18;5678:26;;5714:71;5782:1;5771:9;5767:17;5758:6;5714:71;:::i;:::-;5795:72;5863:2;5852:9;5848:18;5839:6;5795:72;:::i;:::-;5542:332;;;;;:::o;5880:117::-;5989:1;5986;5979:12;6003:180;6051:77;6048:1;6041:88;6148:4;6145:1;6138:15;6172:4;6169:1;6162:15;6189:281;6272:27;6294:4;6272:27;:::i;:::-;6264:6;6260:40;6402:6;6390:10;6387:22;6366:18;6354:10;6351:34;6348:62;6345:88;;;6413:18;;:::i;:::-;6345:88;6453:10;6449:2;6442:22;6232:238;6189:281;;:::o;6476:129::-;6510:6;6537:20;;:::i;:::-;6527:30;;6566:33;6594:4;6586:6;6566:33;:::i;:::-;6476:129;;;:::o;6611:311::-;6688:4;6778:18;6770:6;6767:30;6764:56;;;6800:18;;:::i;:::-;6764:56;6850:4;6842:6;6838:17;6830:25;;6910:4;6904;6900:15;6892:23;;6611:311;;;:::o;6928:117::-;7037:1;7034;7027:12;7068:710;7164:5;7189:81;7205:64;7262:6;7205:64;:::i;:::-;7189:81;:::i;:::-;7180:90;;7290:5;7319:6;7312:5;7305:21;7353:4;7346:5;7342:16;7335:23;;7406:4;7398:6;7394:17;7386:6;7382:30;7435:3;7427:6;7424:15;7421:122;;;7454:79;;:::i;:::-;7421:122;7569:6;7552:220;7586:6;7581:3;7578:15;7552:220;;;7661:3;7690:37;7723:3;7711:10;7690:37;:::i;:::-;7685:3;7678:50;7757:4;7752:3;7748:14;7741:21;;7628:144;7612:4;7607:3;7603:14;7596:21;;7552:220;;;7556:21;7170:608;;7068:710;;;;;:::o;7801:370::-;7872:5;7921:3;7914:4;7906:6;7902:17;7898:27;7888:122;;7929:79;;:::i;:::-;7888:122;8046:6;8033:20;8071:94;8161:3;8153:6;8146:4;8138:6;8134:17;8071:94;:::i;:::-;8062:103;;7878:293;7801:370;;;;:::o;8177:894::-;8295:6;8303;8352:2;8340:9;8331:7;8327:23;8323:32;8320:119;;;8358:79;;:::i;:::-;8320:119;8506:1;8495:9;8491:17;8478:31;8536:18;8528:6;8525:30;8522:117;;;8558:79;;:::i;:::-;8522:117;8663:78;8733:7;8724:6;8713:9;8709:22;8663:78;:::i;:::-;8653:88;;8449:302;8818:2;8807:9;8803:18;8790:32;8849:18;8841:6;8838:30;8835:117;;;8871:79;;:::i;:::-;8835:117;8976:78;9046:7;9037:6;9026:9;9022:22;8976:78;:::i;:::-;8966:88;;8761:303;8177:894;;;;;:::o;9077:117::-;9186:1;9183;9176:12;9200:307;9261:4;9351:18;9343:6;9340:30;9337:56;;;9373:18;;:::i;:::-;9337:56;9411:29;9433:6;9411:29;:::i;:::-;9403:37;;9495:4;9489;9485:15;9477:23;;9200:307;;;:::o;9513:154::-;9597:6;9592:3;9587;9574:30;9659:1;9650:6;9645:3;9641:16;9634:27;9513:154;;;:::o;9673:410::-;9750:5;9775:65;9791:48;9832:6;9791:48;:::i;:::-;9775:65;:::i;:::-;9766:74;;9863:6;9856:5;9849:21;9901:4;9894:5;9890:16;9939:3;9930:6;9925:3;9921:16;9918:25;9915:112;;;9946:79;;:::i;:::-;9915:112;10036:41;10070:6;10065:3;10060;10036:41;:::i;:::-;9756:327;9673:410;;;;;:::o;10102:338::-;10157:5;10206:3;10199:4;10191:6;10187:17;10183:27;10173:122;;10214:79;;:::i;:::-;10173:122;10331:6;10318:20;10356:78;10430:3;10422:6;10415:4;10407:6;10403:17;10356:78;:::i;:::-;10347:87;;10163:277;10102:338;;;;:::o;10446:1509::-;10600:6;10608;10616;10624;10632;10681:3;10669:9;10660:7;10656:23;10652:33;10649:120;;;10688:79;;:::i;:::-;10649:120;10808:1;10833:53;10878:7;10869:6;10858:9;10854:22;10833:53;:::i;:::-;10823:63;;10779:117;10935:2;10961:53;11006:7;10997:6;10986:9;10982:22;10961:53;:::i;:::-;10951:63;;10906:118;11091:2;11080:9;11076:18;11063:32;11122:18;11114:6;11111:30;11108:117;;;11144:79;;:::i;:::-;11108:117;11249:78;11319:7;11310:6;11299:9;11295:22;11249:78;:::i;:::-;11239:88;;11034:303;11404:2;11393:9;11389:18;11376:32;11435:18;11427:6;11424:30;11421:117;;;11457:79;;:::i;:::-;11421:117;11562:78;11632:7;11623:6;11612:9;11608:22;11562:78;:::i;:::-;11552:88;;11347:303;11717:3;11706:9;11702:19;11689:33;11749:18;11741:6;11738:30;11735:117;;;11771:79;;:::i;:::-;11735:117;11876:62;11930:7;11921:6;11910:9;11906:22;11876:62;:::i;:::-;11866:72;;11660:288;10446:1509;;;;;;;;:::o;11961:311::-;12038:4;12128:18;12120:6;12117:30;12114:56;;;12150:18;;:::i;:::-;12114:56;12200:4;12192:6;12188:17;12180:25;;12260:4;12254;12250:15;12242:23;;11961:311;;;:::o;12295:710::-;12391:5;12416:81;12432:64;12489:6;12432:64;:::i;:::-;12416:81;:::i;:::-;12407:90;;12517:5;12546:6;12539:5;12532:21;12580:4;12573:5;12569:16;12562:23;;12633:4;12625:6;12621:17;12613:6;12609:30;12662:3;12654:6;12651:15;12648:122;;;12681:79;;:::i;:::-;12648:122;12796:6;12779:220;12813:6;12808:3;12805:15;12779:220;;;12888:3;12917:37;12950:3;12938:10;12917:37;:::i;:::-;12912:3;12905:50;12984:4;12979:3;12975:14;12968:21;;12855:144;12839:4;12834:3;12830:14;12823:21;;12779:220;;;12783:21;12397:608;;12295:710;;;;;:::o;13028:370::-;13099:5;13148:3;13141:4;13133:6;13129:17;13125:27;13115:122;;13156:79;;:::i;:::-;13115:122;13273:6;13260:20;13298:94;13388:3;13380:6;13373:4;13365:6;13361:17;13298:94;:::i;:::-;13289:103;;13105:293;13028:370;;;;:::o;13404:894::-;13522:6;13530;13579:2;13567:9;13558:7;13554:23;13550:32;13547:119;;;13585:79;;:::i;:::-;13547:119;13733:1;13722:9;13718:17;13705:31;13763:18;13755:6;13752:30;13749:117;;;13785:79;;:::i;:::-;13749:117;13890:78;13960:7;13951:6;13940:9;13936:22;13890:78;:::i;:::-;13880:88;;13676:302;14045:2;14034:9;14030:18;14017:32;14076:18;14068:6;14065:30;14062:117;;;14098:79;;:::i;:::-;14062:117;14203:78;14273:7;14264:6;14253:9;14249:22;14203:78;:::i;:::-;14193:88;;13988:303;13404:894;;;;;:::o;14304:114::-;14371:6;14405:5;14399:12;14389:22;;14304:114;;;:::o;14424:184::-;14523:11;14557:6;14552:3;14545:19;14597:4;14592:3;14588:14;14573:29;;14424:184;;;;:::o;14614:132::-;14681:4;14704:3;14696:11;;14734:4;14729:3;14725:14;14717:22;;14614:132;;;:::o;14752:108::-;14829:24;14847:5;14829:24;:::i;:::-;14824:3;14817:37;14752:108;;:::o;14866:179::-;14935:10;14956:46;14998:3;14990:6;14956:46;:::i;:::-;15034:4;15029:3;15025:14;15011:28;;14866:179;;;;:::o;15051:113::-;15121:4;15153;15148:3;15144:14;15136:22;;15051:113;;;:::o;15200:732::-;15319:3;15348:54;15396:5;15348:54;:::i;:::-;15418:86;15497:6;15492:3;15418:86;:::i;:::-;15411:93;;15528:56;15578:5;15528:56;:::i;:::-;15607:7;15638:1;15623:284;15648:6;15645:1;15642:13;15623:284;;;15724:6;15718:13;15751:63;15810:3;15795:13;15751:63;:::i;:::-;15744:70;;15837:60;15890:6;15837:60;:::i;:::-;15827:70;;15683:224;15670:1;15667;15663:9;15658:14;;15623:284;;;15627:14;15923:3;15916:10;;15324:608;;;15200:732;;;;:::o;15938:373::-;16081:4;16119:2;16108:9;16104:18;16096:26;;16168:9;16162:4;16158:20;16154:1;16143:9;16139:17;16132:47;16196:108;16299:4;16290:6;16196:108;:::i;:::-;16188:116;;15938:373;;;;:::o;16317:308::-;16379:4;16469:18;16461:6;16458:30;16455:56;;;16491:18;;:::i;:::-;16455:56;16529:29;16551:6;16529:29;:::i;:::-;16521:37;;16613:4;16607;16603:15;16595:23;;16317:308;;;:::o;16631:412::-;16709:5;16734:66;16750:49;16792:6;16750:49;:::i;:::-;16734:66;:::i;:::-;16725:75;;16823:6;16816:5;16809:21;16861:4;16854:5;16850:16;16899:3;16890:6;16885:3;16881:16;16878:25;16875:112;;;16906:79;;:::i;:::-;16875:112;16996:41;17030:6;17025:3;17020;16996:41;:::i;:::-;16715:328;16631:412;;;;;:::o;17063:340::-;17119:5;17168:3;17161:4;17153:6;17149:17;17145:27;17135:122;;17176:79;;:::i;:::-;17135:122;17293:6;17280:20;17318:79;17393:3;17385:6;17378:4;17370:6;17366:17;17318:79;:::i;:::-;17309:88;;17125:278;17063:340;;;;:::o;17409:654::-;17487:6;17495;17544:2;17532:9;17523:7;17519:23;17515:32;17512:119;;;17550:79;;:::i;:::-;17512:119;17670:1;17695:53;17740:7;17731:6;17720:9;17716:22;17695:53;:::i;:::-;17685:63;;17641:117;17825:2;17814:9;17810:18;17797:32;17856:18;17848:6;17845:30;17842:117;;;17878:79;;:::i;:::-;17842:117;17983:63;18038:7;18029:6;18018:9;18014:22;17983:63;:::i;:::-;17973:73;;17768:288;17409:654;;;;;:::o;18069:109::-;18105:7;18145:26;18138:5;18134:38;18123:49;;18069:109;;;:::o;18184:115::-;18269:23;18286:5;18269:23;:::i;:::-;18264:3;18257:36;18184:115;;:::o;18305:218::-;18396:4;18434:2;18423:9;18419:18;18411:26;;18447:69;18513:1;18502:9;18498:17;18489:6;18447:69;:::i;:::-;18305:218;;;;:::o;18529:222::-;18622:4;18660:2;18649:9;18645:18;18637:26;;18673:71;18741:1;18730:9;18726:17;18717:6;18673:71;:::i;:::-;18529:222;;;;:::o;18757:116::-;18827:21;18842:5;18827:21;:::i;:::-;18820:5;18817:32;18807:60;;18863:1;18860;18853:12;18807:60;18757:116;:::o;18879:133::-;18922:5;18960:6;18947:20;18938:29;;18976:30;19000:5;18976:30;:::i;:::-;18879:133;;;;:::o;19018:468::-;19083:6;19091;19140:2;19128:9;19119:7;19115:23;19111:32;19108:119;;;19146:79;;:::i;:::-;19108:119;19266:1;19291:53;19336:7;19327:6;19316:9;19312:22;19291:53;:::i;:::-;19281:63;;19237:117;19393:2;19419:50;19461:7;19452:6;19441:9;19437:22;19419:50;:::i;:::-;19409:60;;19364:115;19018:468;;;;;:::o;19492:474::-;19560:6;19568;19617:2;19605:9;19596:7;19592:23;19588:32;19585:119;;;19623:79;;:::i;:::-;19585:119;19743:1;19768:53;19813:7;19804:6;19793:9;19789:22;19768:53;:::i;:::-;19758:63;;19714:117;19870:2;19896:53;19941:7;19932:6;19921:9;19917:22;19896:53;:::i;:::-;19886:63;;19841:118;19492:474;;;;;:::o;19972:1089::-;20076:6;20084;20092;20100;20108;20157:3;20145:9;20136:7;20132:23;20128:33;20125:120;;;20164:79;;:::i;:::-;20125:120;20284:1;20309:53;20354:7;20345:6;20334:9;20330:22;20309:53;:::i;:::-;20299:63;;20255:117;20411:2;20437:53;20482:7;20473:6;20462:9;20458:22;20437:53;:::i;:::-;20427:63;;20382:118;20539:2;20565:53;20610:7;20601:6;20590:9;20586:22;20565:53;:::i;:::-;20555:63;;20510:118;20667:2;20693:53;20738:7;20729:6;20718:9;20714:22;20693:53;:::i;:::-;20683:63;;20638:118;20823:3;20812:9;20808:19;20795:33;20855:18;20847:6;20844:30;20841:117;;;20877:79;;:::i;:::-;20841:117;20982:62;21036:7;21027:6;21016:9;21012:22;20982:62;:::i;:::-;20972:72;;20766:288;19972:1089;;;;;;;;:::o;21067:329::-;21126:6;21175:2;21163:9;21154:7;21150:23;21146:32;21143:119;;;21181:79;;:::i;:::-;21143:119;21301:1;21326:53;21371:7;21362:6;21351:9;21347:22;21326:53;:::i;:::-;21316:63;;21272:117;21067:329;;;;:::o;21402:230::-;21542:34;21538:1;21530:6;21526:14;21519:58;21611:13;21606:2;21598:6;21594:15;21587:38;21402:230;:::o;21638:366::-;21780:3;21801:67;21865:2;21860:3;21801:67;:::i;:::-;21794:74;;21877:93;21966:3;21877:93;:::i;:::-;21995:2;21990:3;21986:12;21979:19;;21638:366;;;:::o;22010:419::-;22176:4;22214:2;22203:9;22199:18;22191:26;;22263:9;22257:4;22253:20;22249:1;22238:9;22234:17;22227:47;22291:131;22417:4;22291:131;:::i;:::-;22283:139;;22010:419;;;:::o;22435:180::-;22483:77;22480:1;22473:88;22580:4;22577:1;22570:15;22604:4;22601:1;22594:15;22621:320;22665:6;22702:1;22696:4;22692:12;22682:22;;22749:1;22743:4;22739:12;22770:18;22760:81;;22826:4;22818:6;22814:17;22804:27;;22760:81;22888:2;22880:6;22877:14;22857:18;22854:38;22851:84;;22907:18;;:::i;:::-;22851:84;22672:269;22621:320;;;:::o;22947:180::-;22995:77;22992:1;22985:88;23092:4;23089:1;23082:15;23116:4;23113:1;23106:15;23133:348;23173:7;23196:20;23214:1;23196:20;:::i;:::-;23191:25;;23230:20;23248:1;23230:20;:::i;:::-;23225:25;;23418:1;23350:66;23346:74;23343:1;23340:81;23335:1;23328:9;23321:17;23317:105;23314:131;;;23425:18;;:::i;:::-;23314:131;23473:1;23470;23466:9;23455:20;;23133:348;;;;:::o;23487:180::-;23535:77;23532:1;23525:88;23632:4;23629:1;23622:15;23656:4;23653:1;23646:15;23673:185;23713:1;23730:20;23748:1;23730:20;:::i;:::-;23725:25;;23764:20;23782:1;23764:20;:::i;:::-;23759:25;;23803:1;23793:35;;23808:18;;:::i;:::-;23793:35;23850:1;23847;23843:9;23838:14;;23673:185;;;;:::o;23864:182::-;24004:34;24000:1;23992:6;23988:14;23981:58;23864:182;:::o;24052:366::-;24194:3;24215:67;24279:2;24274:3;24215:67;:::i;:::-;24208:74;;24291:93;24380:3;24291:93;:::i;:::-;24409:2;24404:3;24400:12;24393:19;;24052:366;;;:::o;24424:419::-;24590:4;24628:2;24617:9;24613:18;24605:26;;24677:9;24671:4;24667:20;24663:1;24652:9;24648:17;24641:47;24705:131;24831:4;24705:131;:::i;:::-;24697:139;;24424:419;;;:::o;24849:180::-;24897:77;24894:1;24887:88;24994:4;24991:1;24984:15;25018:4;25015:1;25008:15;25035:305;25075:3;25094:20;25112:1;25094:20;:::i;:::-;25089:25;;25128:20;25146:1;25128:20;:::i;:::-;25123:25;;25282:1;25214:66;25210:74;25207:1;25204:81;25201:107;;;25288:18;;:::i;:::-;25201:107;25332:1;25329;25325:9;25318:16;;25035:305;;;;:::o;25346:166::-;25486:18;25482:1;25474:6;25470:14;25463:42;25346:166;:::o;25518:366::-;25660:3;25681:67;25745:2;25740:3;25681:67;:::i;:::-;25674:74;;25757:93;25846:3;25757:93;:::i;:::-;25875:2;25870:3;25866:12;25859:19;;25518:366;;;:::o;25890:419::-;26056:4;26094:2;26083:9;26079:18;26071:26;;26143:9;26137:4;26133:20;26129:1;26118:9;26114:17;26107:47;26171:131;26297:4;26171:131;:::i;:::-;26163:139;;25890:419;;;:::o;26315:233::-;26354:3;26377:24;26395:5;26377:24;:::i;:::-;26368:33;;26423:66;26416:5;26413:77;26410:103;;26493:18;;:::i;:::-;26410:103;26540:1;26533:5;26529:13;26522:20;;26315:233;;;:::o;26554:181::-;26694:33;26690:1;26682:6;26678:14;26671:57;26554:181;:::o;26741:366::-;26883:3;26904:67;26968:2;26963:3;26904:67;:::i;:::-;26897:74;;26980:93;27069:3;26980:93;:::i;:::-;27098:2;27093:3;27089:12;27082:19;;26741:366;;;:::o;27113:419::-;27279:4;27317:2;27306:9;27302:18;27294:26;;27366:9;27360:4;27356:20;27352:1;27341:9;27337:17;27330:47;27394:131;27520:4;27394:131;:::i;:::-;27386:139;;27113:419;;;:::o;27538:170::-;27678:22;27674:1;27666:6;27662:14;27655:46;27538:170;:::o;27714:366::-;27856:3;27877:67;27941:2;27936:3;27877:67;:::i;:::-;27870:74;;27953:93;28042:3;27953:93;:::i;:::-;28071:2;28066:3;28062:12;28055:19;;27714:366;;;:::o;28086:419::-;28252:4;28290:2;28279:9;28275:18;28267:26;;28339:9;28333:4;28329:20;28325:1;28314:9;28310:17;28303:47;28367:131;28493:4;28367:131;:::i;:::-;28359:139;;28086:419;;;:::o;28511:147::-;28612:11;28649:3;28634:18;;28511:147;;;;:::o;28664:114::-;;:::o;28784:398::-;28943:3;28964:83;29045:1;29040:3;28964:83;:::i;:::-;28957:90;;29056:93;29145:3;29056:93;:::i;:::-;29174:1;29169:3;29165:11;29158:18;;28784:398;;;:::o;29188:379::-;29372:3;29394:147;29537:3;29394:147;:::i;:::-;29387:154;;29558:3;29551:10;;29188:379;;;:::o;29573:165::-;29713:17;29709:1;29701:6;29697:14;29690:41;29573:165;:::o;29744:366::-;29886:3;29907:67;29971:2;29966:3;29907:67;:::i;:::-;29900:74;;29983:93;30072:3;29983:93;:::i;:::-;30101:2;30096:3;30092:12;30085:19;;29744:366;;;:::o;30116:419::-;30282:4;30320:2;30309:9;30305:18;30297:26;;30369:9;30363:4;30359:20;30355:1;30344:9;30340:17;30333:47;30397:131;30523:4;30397:131;:::i;:::-;30389:139;;30116:419;;;:::o;30541:237::-;30681:34;30677:1;30669:6;30665:14;30658:58;30750:20;30745:2;30737:6;30733:15;30726:45;30541:237;:::o;30784:366::-;30926:3;30947:67;31011:2;31006:3;30947:67;:::i;:::-;30940:74;;31023:93;31112:3;31023:93;:::i;:::-;31141:2;31136:3;31132:12;31125:19;;30784:366;;;:::o;31156:419::-;31322:4;31360:2;31349:9;31345:18;31337:26;;31409:9;31403:4;31399:20;31395:1;31384:9;31380:17;31373:47;31437:131;31563:4;31437:131;:::i;:::-;31429:139;;31156:419;;;:::o;31581:167::-;31721:19;31717:1;31709:6;31705:14;31698:43;31581:167;:::o;31754:366::-;31896:3;31917:67;31981:2;31976:3;31917:67;:::i;:::-;31910:74;;31993:93;32082:3;31993:93;:::i;:::-;32111:2;32106:3;32102:12;32095:19;;31754:366;;;:::o;32126:419::-;32292:4;32330:2;32319:9;32315:18;32307:26;;32379:9;32373:4;32369:20;32365:1;32354:9;32350:17;32343:47;32407:131;32533:4;32407:131;:::i;:::-;32399:139;;32126:419;;;:::o;32551:168::-;32691:20;32687:1;32679:6;32675:14;32668:44;32551:168;:::o;32725:366::-;32867:3;32888:67;32952:2;32947:3;32888:67;:::i;:::-;32881:74;;32964:93;33053:3;32964:93;:::i;:::-;33082:2;33077:3;33073:12;33066:19;;32725:366;;;:::o;33097:419::-;33263:4;33301:2;33290:9;33286:18;33278:26;;33350:9;33344:4;33340:20;33336:1;33325:9;33321:17;33314:47;33378:131;33504:4;33378:131;:::i;:::-;33370:139;;33097:419;;;:::o;33522:170::-;33662:22;33658:1;33650:6;33646:14;33639:46;33522:170;:::o;33698:366::-;33840:3;33861:67;33925:2;33920:3;33861:67;:::i;:::-;33854:74;;33937:93;34026:3;33937:93;:::i;:::-;34055:2;34050:3;34046:12;34039:19;;33698:366;;;:::o;34070:419::-;34236:4;34274:2;34263:9;34259:18;34251:26;;34323:9;34317:4;34313:20;34309:1;34298:9;34294:17;34287:47;34351:131;34477:4;34351:131;:::i;:::-;34343:139;;34070:419;;;:::o;34495:228::-;34635:34;34631:1;34623:6;34619:14;34612:58;34704:11;34699:2;34691:6;34687:15;34680:36;34495:228;:::o;34729:366::-;34871:3;34892:67;34956:2;34951:3;34892:67;:::i;:::-;34885:74;;34968:93;35057:3;34968:93;:::i;:::-;35086:2;35081:3;35077:12;35070:19;;34729:366;;;:::o;35101:419::-;35267:4;35305:2;35294:9;35290:18;35282:26;;35354:9;35348:4;35344:20;35340:1;35329:9;35325:17;35318:47;35382:131;35508:4;35382:131;:::i;:::-;35374:139;;35101:419;;;:::o;35526:170::-;35666:22;35662:1;35654:6;35650:14;35643:46;35526:170;:::o;35702:366::-;35844:3;35865:67;35929:2;35924:3;35865:67;:::i;:::-;35858:74;;35941:93;36030:3;35941:93;:::i;:::-;36059:2;36054:3;36050:12;36043:19;;35702:366;;;:::o;36074:419::-;36240:4;36278:2;36267:9;36263:18;36255:26;;36327:9;36321:4;36317:20;36313:1;36302:9;36298:17;36291:47;36355:131;36481:4;36355:131;:::i;:::-;36347:139;;36074:419;;;:::o;36499:228::-;36639:34;36635:1;36627:6;36623:14;36616:58;36708:11;36703:2;36695:6;36691:15;36684:36;36499:228;:::o;36733:366::-;36875:3;36896:67;36960:2;36955:3;36896:67;:::i;:::-;36889:74;;36972:93;37061:3;36972:93;:::i;:::-;37090:2;37085:3;37081:12;37074:19;;36733:366;;;:::o;37105:419::-;37271:4;37309:2;37298:9;37294:18;37286:26;;37358:9;37352:4;37348:20;37344:1;37333:9;37329:17;37322:47;37386:131;37512:4;37386:131;:::i;:::-;37378:139;;37105:419;;;:::o;37530:225::-;37670:34;37666:1;37658:6;37654:14;37647:58;37739:8;37734:2;37726:6;37722:15;37715:33;37530:225;:::o;37761:366::-;37903:3;37924:67;37988:2;37983:3;37924:67;:::i;:::-;37917:74;;38000:93;38089:3;38000:93;:::i;:::-;38118:2;38113:3;38109:12;38102:19;;37761:366;;;:::o;38133:419::-;38299:4;38337:2;38326:9;38322:18;38314:26;;38386:9;38380:4;38376:20;38372:1;38361:9;38357:17;38350:47;38414:131;38540:4;38414:131;:::i;:::-;38406:139;;38133:419;;;:::o;38558:220::-;38698:34;38694:1;38686:6;38682:14;38675:58;38767:3;38762:2;38754:6;38750:15;38743:28;38558:220;:::o;38784:366::-;38926:3;38947:67;39011:2;39006:3;38947:67;:::i;:::-;38940:74;;39023:93;39112:3;39023:93;:::i;:::-;39141:2;39136:3;39132:12;39125:19;;38784:366;;;:::o;39156:419::-;39322:4;39360:2;39349:9;39345:18;39337:26;;39409:9;39403:4;39399:20;39395:1;39384:9;39380:17;39373:47;39437:131;39563:4;39437:131;:::i;:::-;39429:139;;39156:419;;;:::o;39581:227::-;39721:34;39717:1;39709:6;39705:14;39698:58;39790:10;39785:2;39777:6;39773:15;39766:35;39581:227;:::o;39814:366::-;39956:3;39977:67;40041:2;40036:3;39977:67;:::i;:::-;39970:74;;40053:93;40142:3;40053:93;:::i;:::-;40171:2;40166:3;40162:12;40155:19;;39814:366;;;:::o;40186:419::-;40352:4;40390:2;40379:9;40375:18;40367:26;;40439:9;40433:4;40429:20;40425:1;40414:9;40410:17;40403:47;40467:131;40593:4;40467:131;:::i;:::-;40459:139;;40186:419;;;:::o;40611:634::-;40832:4;40870:2;40859:9;40855:18;40847:26;;40919:9;40913:4;40909:20;40905:1;40894:9;40890:17;40883:47;40947:108;41050:4;41041:6;40947:108;:::i;:::-;40939:116;;41102:9;41096:4;41092:20;41087:2;41076:9;41072:18;41065:48;41130:108;41233:4;41224:6;41130:108;:::i;:::-;41122:116;;40611:634;;;;;:::o;41251:224::-;41391:34;41387:1;41379:6;41375:14;41368:58;41460:7;41455:2;41447:6;41443:15;41436:32;41251:224;:::o;41481:366::-;41623:3;41644:67;41708:2;41703:3;41644:67;:::i;:::-;41637:74;;41720:93;41809:3;41720:93;:::i;:::-;41838:2;41833:3;41829:12;41822:19;;41481:366;;;:::o;41853:419::-;42019:4;42057:2;42046:9;42042:18;42034:26;;42106:9;42100:4;42096:20;42092:1;42081:9;42077:17;42070:47;42134:131;42260:4;42134:131;:::i;:::-;42126:139;;41853:419;;;:::o;42278:229::-;42418:34;42414:1;42406:6;42402:14;42395:58;42487:12;42482:2;42474:6;42470:15;42463:37;42278:229;:::o;42513:366::-;42655:3;42676:67;42740:2;42735:3;42676:67;:::i;:::-;42669:74;;42752:93;42841:3;42752:93;:::i;:::-;42870:2;42865:3;42861:12;42854:19;;42513:366;;;:::o;42885:419::-;43051:4;43089:2;43078:9;43074:18;43066:26;;43138:9;43132:4;43128:20;43124:1;43113:9;43109:17;43102:47;43166:131;43292:4;43166:131;:::i;:::-;43158:139;;42885:419;;;:::o;43310:332::-;43431:4;43469:2;43458:9;43454:18;43446:26;;43482:71;43550:1;43539:9;43535:17;43526:6;43482:71;:::i;:::-;43563:72;43631:2;43620:9;43616:18;43607:6;43563:72;:::i;:::-;43310:332;;;;;:::o;43648:228::-;43788:34;43784:1;43776:6;43772:14;43765:58;43857:11;43852:2;43844:6;43840:15;43833:36;43648:228;:::o;43882:366::-;44024:3;44045:67;44109:2;44104:3;44045:67;:::i;:::-;44038:74;;44121:93;44210:3;44121:93;:::i;:::-;44239:2;44234:3;44230:12;44223:19;;43882:366;;;:::o;44254:419::-;44420:4;44458:2;44447:9;44443:18;44435:26;;44507:9;44501:4;44497:20;44493:1;44482:9;44478:17;44471:47;44535:131;44661:4;44535:131;:::i;:::-;44527:139;;44254:419;;;:::o;44679:227::-;44819:34;44815:1;44807:6;44803:14;44796:58;44888:10;44883:2;44875:6;44871:15;44864:35;44679:227;:::o;44912:366::-;45054:3;45075:67;45139:2;45134:3;45075:67;:::i;:::-;45068:74;;45151:93;45240:3;45151:93;:::i;:::-;45269:2;45264:3;45260:12;45253:19;;44912:366;;;:::o;45284:419::-;45450:4;45488:2;45477:9;45473:18;45465:26;;45537:9;45531:4;45527:20;45523:1;45512:9;45508:17;45501:47;45565:131;45691:4;45565:131;:::i;:::-;45557:139;;45284:419;;;:::o;45709:98::-;45760:6;45794:5;45788:12;45778:22;;45709:98;;;:::o;45813:168::-;45896:11;45930:6;45925:3;45918:19;45970:4;45965:3;45961:14;45946:29;;45813:168;;;;:::o;45987:360::-;46073:3;46101:38;46133:5;46101:38;:::i;:::-;46155:70;46218:6;46213:3;46155:70;:::i;:::-;46148:77;;46234:52;46279:6;46274:3;46267:4;46260:5;46256:16;46234:52;:::i;:::-;46311:29;46333:6;46311:29;:::i;:::-;46306:3;46302:39;46295:46;;46077:270;45987:360;;;;:::o;46353:1053::-;46676:4;46714:3;46703:9;46699:19;46691:27;;46728:71;46796:1;46785:9;46781:17;46772:6;46728:71;:::i;:::-;46809:72;46877:2;46866:9;46862:18;46853:6;46809:72;:::i;:::-;46928:9;46922:4;46918:20;46913:2;46902:9;46898:18;46891:48;46956:108;47059:4;47050:6;46956:108;:::i;:::-;46948:116;;47111:9;47105:4;47101:20;47096:2;47085:9;47081:18;47074:48;47139:108;47242:4;47233:6;47139:108;:::i;:::-;47131:116;;47295:9;47289:4;47285:20;47279:3;47268:9;47264:19;47257:49;47323:76;47394:4;47385:6;47323:76;:::i;:::-;47315:84;;46353:1053;;;;;;;;:::o;47412:141::-;47468:5;47499:6;47493:13;47484:22;;47515:32;47541:5;47515:32;:::i;:::-;47412:141;;;;:::o;47559:349::-;47628:6;47677:2;47665:9;47656:7;47652:23;47648:32;47645:119;;;47683:79;;:::i;:::-;47645:119;47803:1;47828:63;47883:7;47874:6;47863:9;47859:22;47828:63;:::i;:::-;47818:73;;47774:127;47559:349;;;;:::o;47914:106::-;47958:8;48007:5;48002:3;47998:15;47977:36;;47914:106;;;:::o;48026:183::-;48061:3;48099:1;48081:16;48078:23;48075:128;;;48137:1;48134;48131;48116:23;48159:34;48190:1;48184:8;48159:34;:::i;:::-;48152:41;;48075:128;48026:183;:::o;48215:711::-;48254:3;48292:4;48274:16;48271:26;48300:5;48268:39;48329:20;;:::i;:::-;48404:1;48386:16;48382:24;48379:1;48373:4;48358:49;48437:4;48431:11;48536:16;48529:4;48521:6;48517:17;48514:39;48481:18;48473:6;48470:30;48454:113;48451:146;;;48582:5;;;;48451:146;48628:6;48622:4;48618:17;48664:3;48658:10;48691:18;48683:6;48680:30;48677:43;;;48713:5;;;;;;48677:43;48761:6;48754:4;48749:3;48745:14;48741:27;48820:1;48802:16;48798:24;48792:4;48788:35;48783:3;48780:44;48777:57;;;48827:5;;;;;;;48777:57;48844;48892:6;48886:4;48882:17;48874:6;48870:30;48864:4;48844:57;:::i;:::-;48917:3;48910:10;;48258:668;;;;;48215:711;;:::o;48932:239::-;49072:34;49068:1;49060:6;49056:14;49049:58;49141:22;49136:2;49128:6;49124:15;49117:47;48932:239;:::o;49177:366::-;49319:3;49340:67;49404:2;49399:3;49340:67;:::i;:::-;49333:74;;49416:93;49505:3;49416:93;:::i;:::-;49534:2;49529:3;49525:12;49518:19;;49177:366;;;:::o;49549:419::-;49715:4;49753:2;49742:9;49738:18;49730:26;;49802:9;49796:4;49792:20;49788:1;49777:9;49773:17;49766:47;49830:131;49956:4;49830:131;:::i;:::-;49822:139;;49549:419;;;:::o;49974:227::-;50114:34;50110:1;50102:6;50098:14;50091:58;50183:10;50178:2;50170:6;50166:15;50159:35;49974:227;:::o;50207:366::-;50349:3;50370:67;50434:2;50429:3;50370:67;:::i;:::-;50363:74;;50446:93;50535:3;50446:93;:::i;:::-;50564:2;50559:3;50555:12;50548:19;;50207:366;;;:::o;50579:419::-;50745:4;50783:2;50772:9;50768:18;50760:26;;50832:9;50826:4;50822:20;50818:1;50807:9;50803:17;50796:47;50860:131;50986:4;50860:131;:::i;:::-;50852:139;;50579:419;;;:::o;51004:751::-;51227:4;51265:3;51254:9;51250:19;51242:27;;51279:71;51347:1;51336:9;51332:17;51323:6;51279:71;:::i;:::-;51360:72;51428:2;51417:9;51413:18;51404:6;51360:72;:::i;:::-;51442;51510:2;51499:9;51495:18;51486:6;51442:72;:::i;:::-;51524;51592:2;51581:9;51577:18;51568:6;51524:72;:::i;:::-;51644:9;51638:4;51634:20;51628:3;51617:9;51613:19;51606:49;51672:76;51743:4;51734:6;51672:76;:::i;:::-;51664:84;;51004:751;;;;;;;;:::o

Swarm Source

ipfs://0730040687f813f2c08aa42cfe89fb713460e452fae1121ddd154c23f083be29
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.