ETH Price: $2,609.06 (-4.18%)

Token

BeeMatrix (BEEX)
 

Overview

Max Total Supply

1,000,000,000 BEEX

Holders

1,443

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
180,000 BEEX

Value
$0.00
0x7dd1d6731e4e37ce44b32faa29986d736c5219d3
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:
BeeMatrix

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-12-10
*/

/**
 *Submitted for verification at Etherscan.io on 2024-11-05
*/

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

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

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

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
library StringUtils {
    function toString(bytes32 data) internal pure returns (string memory) {
        bytes memory bytesString = new bytes(64);
        for (uint256 i = 0; i < 32; i++) {
            bytesString[i * 2] = _char(bytes1(uint8(data[i]) >> 4));
            bytesString[1 + i * 2] = _char(bytes1(uint8(data[i]) & 0x0f));
        }
        return string(bytesString);
    }

    function _char(bytes1 b) internal pure returns (bytes1 c) {
        if (uint8(b) < 10) {
            return bytes1(uint8(b) + 0x30);
        } else {
            return bytes1(uint8(b) + 0x57);
        }
    }

    function substring(string memory str, uint startIndex, uint endIndex) internal pure returns (string memory) {
        bytes memory strBytes = bytes(str);
        bytes memory result = new bytes(endIndex - startIndex);
        for (uint i = startIndex; i < endIndex; i++) {
            result[i - startIndex] = strBytes[i];
        }
        return string(result);
    }
}
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
   
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

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

        (bool success, ) = recipient.call{value: amount}("");
        return success;
    }
}

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) internal _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;


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

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

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
            unchecked {
                _approve(sender, _msgSender(), currentAllowance - amount);
            }
        }

        _transfer(sender, recipient, amount);

        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    /*
    * @notice Creates new tokens and adds them to the specified account.
    * @dev The function creates a specified amount of tokens and adds them to the specified account, increasing the total supply accordingly.
    * @param account The account to which the tokens will be minted.
    * @param amount The amount of tokens to be minted.
    * @return It emits a Transfer event indicating the minting of tokens from the zero address to the specified account.
    */ 
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /*
    * @notice Burns a specific amount of tokens from the specified account.
    * @dev The function reduces the balance of the specified account by the specified amount and decreases the total supply accordingly.
    * @param account The account from which the tokens will be burned.
    * @param amount The amount of tokens to be burned.
    * @return It emits a Transfer event indicating the burning of tokens from the account to the zero address.
    */ 
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }


    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    /*
    * @notice Hook that is called before transferring tokens.
    * @dev This function is called before transferring tokens from one account to another.
    * @param from The account from which the tokens are being transferred.
    * @param to The account to which the tokens are being transferred.
    * @param amount The amount of tokens being transferred.
    */ 
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

interface IBeeMatrixNFT{
    function mint(address to, uint256 quantity, uint8 level) external;
}

contract BeeMatrix is ERC20, Ownable {
    using SafeMath for uint256;
    uint256 private  mintAmount = 5000 * 10**uint256(decimals());
    uint256 private constant mintETHAmount = 0.05 ether;
    bool public publicSaleEnabled = false;
    mapping(address => uint256) private userETHDeposits; // Record the accumulated amount of ETH deposited by users

    uint256[] private rewardThresholds = [5 ether, 10 ether, 20 ether, 30 ether]; // reward threshold
    uint256[] private rewardAmounts = [50000, 100000, 300000, 500000]; // Corresponding number of reward tokens
    mapping(address => uint256) private claimedRewards; // Record the total amount of rewards that the user has received
    // User reward collection record: User address -> Reward level -> Whether it has been received
    mapping(address => mapping(uint8 => bool)) private rewardMinted;
    IBeeMatrixNFT public beeMatrixNFTContract;

    constructor () ERC20("BeeMatrix", "BEEX") 
    {   
        _mint(address(this), 1e9 * (10 ** decimals()));
    }

    receive() external payable {}


    function nectarRich() external payable {
        require(!publicSaleEnabled, "Public sale has ended");
        require(owner() != address(0), "Owner address is zero, operation not allowed");
        require(msg.value >= mintETHAmount, "Insufficient ETH sent");

        // Dynamically calculate the number of tokens a user deserves
        uint256 mintQuantity = msg.value.mul(mintAmount).div(mintETHAmount);
        address contractAddress = address(this);
        require(balanceOf(contractAddress) >= mintQuantity, "Owner does not have enough tokens");
        // Transfer tokens from owner to user
        super._transfer(contractAddress, msg.sender, mintQuantity);

        // Update the user's cumulative deposit amount
        userETHDeposits[msg.sender] = userETHDeposits[msg.sender].add(msg.value);
        // Check whether the reward threshold is reached and issue the reward
        checkAndReward(msg.sender);
    }

    function checkAndReward(address user) internal {
        uint256 totalReward = 0; // Total token rewards currently due
        uint256 userDeposit = userETHDeposits[user]; // Accumulated deposits of users
        // Traverse reward levels
        for (uint8 level = 1; level <= 4; level++) {
            uint256 threshold = rewardThresholds[level - 1];
            uint256 reward = rewardAmounts[level - 1] * (10**decimals());
            // Check if the reward level is reached
            if (userDeposit >= threshold) {
                // Update token rewards
                totalReward = reward;
                // Check if mint method needs to be called
                if (address(beeMatrixNFTContract) != address(0)) {
                    if (!rewardMinted[user][level]) {
                        rewardMinted[user][level] = true; // Mark the reward for this level as received
                        beeMatrixNFTContract.mint(user, 1, level); // Call NFT mint method
                    }
                }
            } else {
                break; // User deposit is not enough to reach the next level
            }
        }

        // Check the total amount of token rewards claimed
        uint256 claimedReward = claimedRewards[user];

        // If the total token reward is greater than the received reward, the difference will be reissued
        if (totalReward > claimedReward) {
            address contractAddress = address(this);
            uint256 rewardToSend = totalReward - claimedReward; // Calculate the difference
            require(balanceOf(contractAddress) >= rewardToSend, "Owner does not have enough tokens for rewards");
            claimedRewards[user] = totalReward; // Update the total amount of rewards claimed
            super._transfer(contractAddress, user, rewardToSend); // Issue token rewards
        }
    }


    function setNftContract(address _contract) external onlyOwner {
        beeMatrixNFTContract = IBeeMatrixNFT(_contract);
    }

    
    function sendAirdrops(address[] memory recipients, uint256 amount) external onlyOwner{
        require(owner() != address(0), "Owner address is zero, operation not allowed");
        for (uint i = 0; i < recipients.length; i++) {
            super._transfer(address(this), recipients[i], amount);
        }
    }

    function endedPublicSaleEnabled() external onlyOwner{
        require(!publicSaleEnabled, "Public sale has ended");
        publicSaleEnabled = true;
    }

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

    function _transfer(address from,address to,uint256 amount) internal  override {
        require(from != address(0), "ERC20: transfer from the zero address");
        
        if (isContract(to) && (from != owner() && !publicSaleEnabled)) {
            revert("Only the owner can add liquidity before public sale ends.");
        }

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        super._transfer(from, to, amount);
    }
   
    function claimStuckTokens(address token, uint256 amount) external onlyOwner {
        require(token != address(this), "Owner cannot claim contract's balance of its own tokens");
        
        if (token == address(0)) {
            require(amount <= address(this).balance, "Insufficient contract balance");
            payable(msg.sender).transfer(amount);
            return;
        }

        IERC20 ERC20token = IERC20(token);
        uint256 contractBalance = ERC20token.balanceOf(address(this));
        require(amount <= contractBalance, "Insufficient token balance in contract");
        ERC20token.transfer(msg.sender, amount);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beeMatrixNFTContract","outputs":[{"internalType":"contract IBeeMatrixNFT","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endedPublicSaleEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nectarRich","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendAirdrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_contract","type":"address"}],"name":"setNftContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261001261029e60201b60201c565b60ff16600a6100219190610644565b61138861002e919061068e565b6006555f60075f6101000a81548160ff0219169083151502179055506040518060800160405280674563918244f4000068ffffffffffffffffff168152602001678ac7230489e8000068ffffffffffffffffff1681526020016801158e460913d0000068ffffffffffffffffff1681526020016801a055690d9db8000068ffffffffffffffffff1681525060099060046100c992919061041a565b50604051806080016040528061c35062ffffff168152602001620186a062ffffff168152602001620493e062ffffff1681526020016207a12062ffffff16815250600a90600461011a929190610472565b50348015610126575f80fd5b506040518060400160405280600981526020017f4265654d617472697800000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f424545580000000000000000000000000000000000000000000000000000000081525081600390816101a29190610900565b5080600490816101b29190610900565b5050505f6101c46102a660201b60201c565b90508060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506102993061027361029e60201b60201c565b600a61027f91906109db565b633b9aca0061028e919061068e565b6102ad60201b60201c565b610af8565b5f6012905090565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361031b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161031290610a7f565b60405180910390fd5b61032c5f838361041060201b60201c565b8060025f82825461033d9190610a9d565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461038f9190610a9d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516103f39190610adf565b60405180910390a361040c5f838361041560201b60201c565b5050565b505050565b505050565b828054828255905f5260205f20908101928215610461579160200282015b82811115610460578251829068ffffffffffffffffff16905591602001919060010190610438565b5b50905061046e91906104c4565b5090565b828054828255905f5260205f209081019282156104b3579160200282015b828111156104b2578251829062ffffff16905591602001919060010190610490565b5b5090506104c091906104c4565b5090565b5b808211156104db575f815f9055506001016104c5565b5090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b60018511156105615780860481111561053d5761053c6104df565b5b600185161561054c5780820291505b808102905061055a8561050c565b9450610521565b94509492505050565b5f826105795760019050610634565b81610586575f9050610634565b816001811461059c57600281146105a6576105d5565b6001915050610634565b60ff8411156105b8576105b76104df565b5b8360020a9150848211156105cf576105ce6104df565b5b50610634565b5060208310610133831016604e8410600b841016171561060a5782820a905083811115610605576106046104df565b5b610634565b6106178484846001610518565b9250905081840481111561062e5761062d6104df565b5b81810290505b9392505050565b5f819050919050565b5f61064e8261063b565b91506106598361063b565b92506106867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461056a565b905092915050565b5f6106988261063b565b91506106a38361063b565b92508282026106b18161063b565b915082820484148315176106c8576106c76104df565b5b5092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061074a57607f821691505b60208210810361075d5761075c610706565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026107bf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610784565b6107c98683610784565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6108046107ff6107fa8461063b565b6107e1565b61063b565b9050919050565b5f819050919050565b61081d836107ea565b6108316108298261080b565b848454610790565b825550505050565b5f90565b610845610839565b610850818484610814565b505050565b5b81811015610873576108685f8261083d565b600181019050610856565b5050565b601f8211156108b85761088981610763565b61089284610775565b810160208510156108a1578190505b6108b56108ad85610775565b830182610855565b50505b505050565b5f82821c905092915050565b5f6108d85f19846008026108bd565b1980831691505092915050565b5f6108f083836108c9565b9150826002028217905092915050565b610909826106cf565b67ffffffffffffffff811115610922576109216106d9565b5b61092c8254610733565b610937828285610877565b5f60209050601f831160018114610968575f8415610956578287015190505b61096085826108e5565b8655506109c7565b601f19841661097686610763565b5f5b8281101561099d57848901518255600182019150602085019450602081019050610978565b868310156109ba57848901516109b6601f8916826108c9565b8355505b6001600288020188555050505b505050505050565b5f60ff82169050919050565b5f6109e58261063b565b91506109f0836109cf565b9250610a1d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461056a565b905092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610a69601f83610a25565b9150610a7482610a35565b602082019050919050565b5f6020820190508181035f830152610a9681610a5d565b9050919050565b5f610aa78261063b565b9150610ab28361063b565b9250828201905080821115610aca57610ac96104df565b5b92915050565b610ad98161063b565b82525050565b5f602082019050610af25f830184610ad0565b92915050565b61324480610b055f395ff3fe60806040526004361061012d575f3560e01c8063715018a6116100aa578063a9059cbb1161006e578063a9059cbb146103d2578063b26baf441461040e578063bc66a72d14610436578063c6acc77a1461044c578063dd62ed3e14610474578063f2fde38b146104b057610134565b8063715018a6146103025780637201c1c1146103185780638da5cb5b1461034257806395d89b411461036c578063a457c2d71461039657610134565b80632ab91bba116100f15780632ab91bba1461020e578063313ce56714610238578063395093511461026257806352f5ad771461029e57806370a08231146102c657610134565b806306fdde0314610138578063095ea7b3146101625780630dcd0b1b1461019e57806318160ddd146101a857806323b872dd146101d257610134565b3661013457005b5f80fd5b348015610143575f80fd5b5061014c6104d8565b6040516101599190611f77565b60405180910390f35b34801561016d575f80fd5b5061018860048036038101906101839190612035565b610568565b604051610195919061208d565b60405180910390f35b6101a6610585565b005b3480156101b3575f80fd5b506101bc6107bc565b6040516101c991906120b5565b60405180910390f35b3480156101dd575f80fd5b506101f860048036038101906101f391906120ce565b6107c5565b604051610205919061208d565b60405180910390f35b348015610219575f80fd5b506102226108df565b60405161022f919061208d565b60405180910390f35b348015610243575f80fd5b5061024c6108f1565b6040516102599190612139565b60405180910390f35b34801561026d575f80fd5b5061028860048036038101906102839190612035565b6108f9565b604051610295919061208d565b60405180910390f35b3480156102a9575f80fd5b506102c460048036038101906102bf9190612152565b6109a0565b005b3480156102d1575f80fd5b506102ec60048036038101906102e79190612152565b610a79565b6040516102f991906120b5565b60405180910390f35b34801561030d575f80fd5b50610316610abe565b005b348015610323575f80fd5b5061032c610c11565b60405161033991906121d8565b60405180910390f35b34801561034d575f80fd5b50610356610c36565b6040516103639190612200565b60405180910390f35b348015610377575f80fd5b50610380610c5e565b60405161038d9190611f77565b60405180910390f35b3480156103a1575f80fd5b506103bc60048036038101906103b79190612035565b610cee565b6040516103c9919061208d565b60405180910390f35b3480156103dd575f80fd5b506103f860048036038101906103f39190612035565b610dd4565b604051610405919061208d565b60405180910390f35b348015610419575f80fd5b50610434600480360381019061042f9190612359565b610df1565b005b348015610441575f80fd5b5061044a610f3e565b005b348015610457575f80fd5b50610472600480360381019061046d9190612035565b61103f565b005b34801561047f575f80fd5b5061049a600480360381019061049591906123b3565b611347565b6040516104a791906120b5565b60405180910390f35b3480156104bb575f80fd5b506104d660048036038101906104d19190612152565b6113c9565b005b6060600380546104e79061241e565b80601f01602080910402602001604051908101604052809291908181526020018280546105139061241e565b801561055e5780601f106105355761010080835404028352916020019161055e565b820191905f5260205f20905b81548152906001019060200180831161054157829003601f168201915b5050505050905090565b5f61057b61057461158b565b8484611592565b6001905092915050565b60075f9054906101000a900460ff16156105d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105cb90612498565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff166105f3610c36565b73ffffffffffffffffffffffffffffffffffffffff1603610649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064090612526565b60405180910390fd5b66b1a2bc2ec50000341015610693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068a9061258e565b60405180910390fd5b5f6106c266b1a2bc2ec500006106b46006543461175590919063ffffffff16565b61176a90919063ffffffff16565b90505f309050816106d282610a79565b1015610713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070a9061261c565b60405180910390fd5b61071e81338461177f565b61076e3460085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546119f490919063ffffffff16565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506107b833611a09565b5050565b5f600254905090565b5f8060015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61080d61158b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108c857828110156108b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108aa906126aa565b60405180910390fd5b6108c7856108bf61158b565b858403611592565b5b6108d3858585611db0565b60019150509392505050565b60075f9054906101000a900460ff1681565b5f6012905090565b5f61099661090561158b565b848460015f61091261158b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461099191906126f5565b611592565b6001905092915050565b6109a861158b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2d90612772565b60405180910390fd5b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ac661158b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b90612772565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c6d9061241e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c999061241e565b8015610ce45780601f10610cbb57610100808354040283529160200191610ce4565b820191905f5260205f20905b815481529060010190602001808311610cc757829003601f168201915b5050505050905090565b5f8060015f610cfb61158b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac90612800565b60405180910390fd5b610dc9610dc061158b565b85858403611592565b600191505092915050565b5f610de7610de061158b565b8484611db0565b6001905092915050565b610df961158b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e90612772565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16610ea6610c36565b73ffffffffffffffffffffffffffffffffffffffff1603610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef390612526565b60405180910390fd5b5f5b8251811015610f3957610f2c30848381518110610f1e57610f1d61281e565b5b60200260200101518461177f565b8080600101915050610efe565b505050565b610f4661158b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90612772565b60405180910390fd5b60075f9054906101000a900460ff1615611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90612498565b60405180910390fd5b600160075f6101000a81548160ff021916908315150217905550565b61104761158b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cc90612772565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113a906128bb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361120257478111156111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090612923565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156111fc573d5f803e3d5ffd5b50611343565b5f8290505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112409190612200565b602060405180830381865afa15801561125b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061127f9190612955565b9050808311156112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb906129f0565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b81526004016112ff929190612a0e565b6020604051808303815f875af115801561131b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061133f9190612a5f565b5050505b5050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6113d161158b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461145f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145690612772565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c490612afa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f790612b88565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361166e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166590612c16565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161174891906120b5565b60405180910390a3505050565b5f81836117629190612c34565b905092915050565b5f81836117779190612ca2565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490612d42565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361185b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185290612dd0565b60405180910390fd5b611866838383611ee6565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090612e5e565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461197791906126f5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119db91906120b5565b60405180910390a36119ee848484611eeb565b50505050565b5f8183611a0191906126f5565b905092915050565b5f8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f600190505b60048160ff1611611cb2575f6009600183611a6c9190612e7c565b60ff1681548110611a8057611a7f61281e565b5b905f5260205f20015490505f611a946108f1565b600a611aa09190612fdf565b600a600185611aaf9190612e7c565b60ff1681548110611ac357611ac261281e565b5b905f5260205f200154611ad69190612c34565b9050818410611c96578094505f73ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9157600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8460ff1660ff1681526020019081526020015f205f9054906101000a900460ff16611c90576001600c5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8560ff1660ff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636112e8ac876001866040518463ffffffff1660e01b8152600401611c6293929190613062565b5f604051808303815f87803b158015611c79575f80fd5b505af1158015611c8b573d5f803e3d5ffd5b505050505b5b611c9d565b5050611cb2565b50508080611caa90613097565b915050611a51565b505f600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905080831115611daa575f3090505f8285611d0d91906130bf565b905080611d1983610a79565b1015611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5190613162565b60405180910390fd5b84600b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611da782878361177f565b50505b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1590612d42565b60405180910390fd5b611e2782611ef0565b8015611e7e5750611e36610c36565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611e7d575060075f9054906101000a900460ff16155b5b15611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb5906131f0565b60405180910390fd5b5f8103611ed557611ed083835f61177f565b611ee1565b611ee083838361177f565b5b505050565b505050565b505050565b5f80823b90505f8163ffffffff1611915050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611f4982611f07565b611f538185611f11565b9350611f63818560208601611f21565b611f6c81611f2f565b840191505092915050565b5f6020820190508181035f830152611f8f8184611f3f565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611fd182611fa8565b9050919050565b611fe181611fc7565b8114611feb575f80fd5b50565b5f81359050611ffc81611fd8565b92915050565b5f819050919050565b61201481612002565b811461201e575f80fd5b50565b5f8135905061202f8161200b565b92915050565b5f806040838503121561204b5761204a611fa0565b5b5f61205885828601611fee565b925050602061206985828601612021565b9150509250929050565b5f8115159050919050565b61208781612073565b82525050565b5f6020820190506120a05f83018461207e565b92915050565b6120af81612002565b82525050565b5f6020820190506120c85f8301846120a6565b92915050565b5f805f606084860312156120e5576120e4611fa0565b5b5f6120f286828701611fee565b935050602061210386828701611fee565b925050604061211486828701612021565b9150509250925092565b5f60ff82169050919050565b6121338161211e565b82525050565b5f60208201905061214c5f83018461212a565b92915050565b5f6020828403121561216757612166611fa0565b5b5f61217484828501611fee565b91505092915050565b5f819050919050565b5f6121a061219b61219684611fa8565b61217d565b611fa8565b9050919050565b5f6121b182612186565b9050919050565b5f6121c2826121a7565b9050919050565b6121d2816121b8565b82525050565b5f6020820190506121eb5f8301846121c9565b92915050565b6121fa81611fc7565b82525050565b5f6020820190506122135f8301846121f1565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61225382611f2f565b810181811067ffffffffffffffff821117156122725761227161221d565b5b80604052505050565b5f612284611f97565b9050612290828261224a565b919050565b5f67ffffffffffffffff8211156122af576122ae61221d565b5b602082029050602081019050919050565b5f80fd5b5f6122d66122d184612295565b61227b565b905080838252602082019050602084028301858111156122f9576122f86122c0565b5b835b81811015612322578061230e8882611fee565b8452602084019350506020810190506122fb565b5050509392505050565b5f82601f8301126123405761233f612219565b5b81356123508482602086016122c4565b91505092915050565b5f806040838503121561236f5761236e611fa0565b5b5f83013567ffffffffffffffff81111561238c5761238b611fa4565b5b6123988582860161232c565b92505060206123a985828601612021565b9150509250929050565b5f80604083850312156123c9576123c8611fa0565b5b5f6123d685828601611fee565b92505060206123e785828601611fee565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061243557607f821691505b602082108103612448576124476123f1565b5b50919050565b7f5075626c69632073616c652068617320656e64656400000000000000000000005f82015250565b5f612482601583611f11565b915061248d8261244e565b602082019050919050565b5f6020820190508181035f8301526124af81612476565b9050919050565b7f4f776e65722061646472657373206973207a65726f2c206f7065726174696f6e5f8201527f206e6f7420616c6c6f7765640000000000000000000000000000000000000000602082015250565b5f612510602c83611f11565b915061251b826124b6565b604082019050919050565b5f6020820190508181035f83015261253d81612504565b9050919050565b7f496e73756666696369656e74204554482073656e7400000000000000000000005f82015250565b5f612578601583611f11565b915061258382612544565b602082019050919050565b5f6020820190508181035f8301526125a58161256c565b9050919050565b7f4f776e657220646f6573206e6f74206861766520656e6f75676820746f6b656e5f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f612606602183611f11565b9150612611826125ac565b604082019050919050565b5f6020820190508181035f830152612633816125fa565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f612694602883611f11565b915061269f8261263a565b604082019050919050565b5f6020820190508181035f8301526126c181612688565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6126ff82612002565b915061270a83612002565b9250828201905080821115612722576127216126c8565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61275c602083611f11565b915061276782612728565b602082019050919050565b5f6020820190508181035f83015261278981612750565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6127ea602583611f11565b91506127f582612790565b604082019050919050565b5f6020820190508181035f830152612817816127de565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f776e65722063616e6e6f7420636c61696d20636f6e747261637427732062615f8201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b5f6128a5603783611f11565b91506128b08261284b565b604082019050919050565b5f6020820190508181035f8301526128d281612899565b9050919050565b7f496e73756666696369656e7420636f6e74726163742062616c616e63650000005f82015250565b5f61290d601d83611f11565b9150612918826128d9565b602082019050919050565b5f6020820190508181035f83015261293a81612901565b9050919050565b5f8151905061294f8161200b565b92915050565b5f6020828403121561296a57612969611fa0565b5b5f61297784828501612941565b91505092915050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f5f8201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b5f6129da602683611f11565b91506129e582612980565b604082019050919050565b5f6020820190508181035f830152612a07816129ce565b9050919050565b5f604082019050612a215f8301856121f1565b612a2e60208301846120a6565b9392505050565b612a3e81612073565b8114612a48575f80fd5b50565b5f81519050612a5981612a35565b92915050565b5f60208284031215612a7457612a73611fa0565b5b5f612a8184828501612a4b565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612ae4602683611f11565b9150612aef82612a8a565b604082019050919050565b5f6020820190508181035f830152612b1181612ad8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612b72602483611f11565b9150612b7d82612b18565b604082019050919050565b5f6020820190508181035f830152612b9f81612b66565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612c00602283611f11565b9150612c0b82612ba6565b604082019050919050565b5f6020820190508181035f830152612c2d81612bf4565b9050919050565b5f612c3e82612002565b9150612c4983612002565b9250828202612c5781612002565b91508282048414831517612c6e57612c6d6126c8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612cac82612002565b9150612cb783612002565b925082612cc757612cc6612c75565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612d2c602583611f11565b9150612d3782612cd2565b604082019050919050565b5f6020820190508181035f830152612d5981612d20565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612dba602383611f11565b9150612dc582612d60565b604082019050919050565b5f6020820190508181035f830152612de781612dae565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612e48602683611f11565b9150612e5382612dee565b604082019050919050565b5f6020820190508181035f830152612e7581612e3c565b9050919050565b5f612e868261211e565b9150612e918361211e565b9250828203905060ff811115612eaa57612ea96126c8565b5b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115612f0557808604811115612ee157612ee06126c8565b5b6001851615612ef05780820291505b8081029050612efe85612eb0565b9450612ec5565b94509492505050565b5f82612f1d5760019050612fd8565b81612f2a575f9050612fd8565b8160018114612f405760028114612f4a57612f79565b6001915050612fd8565b60ff841115612f5c57612f5b6126c8565b5b8360020a915084821115612f7357612f726126c8565b5b50612fd8565b5060208310610133831016604e8410600b8410161715612fae5782820a905083811115612fa957612fa86126c8565b5b612fd8565b612fbb8484846001612ebc565b92509050818404811115612fd257612fd16126c8565b5b81810290505b9392505050565b5f612fe982612002565b9150612ff48361211e565b92506130217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612f0e565b905092915050565b5f819050919050565b5f61304c61304761304284613029565b61217d565b612002565b9050919050565b61305c81613032565b82525050565b5f6060820190506130755f8301866121f1565b6130826020830185613053565b61308f604083018461212a565b949350505050565b5f6130a18261211e565b915060ff82036130b4576130b36126c8565b5b600182019050919050565b5f6130c982612002565b91506130d483612002565b92508282039050818111156130ec576130eb6126c8565b5b92915050565b7f4f776e657220646f6573206e6f74206861766520656e6f75676820746f6b656e5f8201527f7320666f72207265776172647300000000000000000000000000000000000000602082015250565b5f61314c602d83611f11565b9150613157826130f2565b604082019050919050565b5f6020820190508181035f83015261317981613140565b9050919050565b7f4f6e6c7920746865206f776e65722063616e20616464206c69717569646974795f8201527f206265666f7265207075626c69632073616c6520656e64732e00000000000000602082015250565b5f6131da603983611f11565b91506131e582613180565b604082019050919050565b5f6020820190508181035f830152613207816131ce565b905091905056fea26469706673582212207226da0fcd9f7e28555f61f0fbe207d5633374a1f46381428c647124b4ee32c064736f6c634300081a0033

Deployed Bytecode

0x60806040526004361061012d575f3560e01c8063715018a6116100aa578063a9059cbb1161006e578063a9059cbb146103d2578063b26baf441461040e578063bc66a72d14610436578063c6acc77a1461044c578063dd62ed3e14610474578063f2fde38b146104b057610134565b8063715018a6146103025780637201c1c1146103185780638da5cb5b1461034257806395d89b411461036c578063a457c2d71461039657610134565b80632ab91bba116100f15780632ab91bba1461020e578063313ce56714610238578063395093511461026257806352f5ad771461029e57806370a08231146102c657610134565b806306fdde0314610138578063095ea7b3146101625780630dcd0b1b1461019e57806318160ddd146101a857806323b872dd146101d257610134565b3661013457005b5f80fd5b348015610143575f80fd5b5061014c6104d8565b6040516101599190611f77565b60405180910390f35b34801561016d575f80fd5b5061018860048036038101906101839190612035565b610568565b604051610195919061208d565b60405180910390f35b6101a6610585565b005b3480156101b3575f80fd5b506101bc6107bc565b6040516101c991906120b5565b60405180910390f35b3480156101dd575f80fd5b506101f860048036038101906101f391906120ce565b6107c5565b604051610205919061208d565b60405180910390f35b348015610219575f80fd5b506102226108df565b60405161022f919061208d565b60405180910390f35b348015610243575f80fd5b5061024c6108f1565b6040516102599190612139565b60405180910390f35b34801561026d575f80fd5b5061028860048036038101906102839190612035565b6108f9565b604051610295919061208d565b60405180910390f35b3480156102a9575f80fd5b506102c460048036038101906102bf9190612152565b6109a0565b005b3480156102d1575f80fd5b506102ec60048036038101906102e79190612152565b610a79565b6040516102f991906120b5565b60405180910390f35b34801561030d575f80fd5b50610316610abe565b005b348015610323575f80fd5b5061032c610c11565b60405161033991906121d8565b60405180910390f35b34801561034d575f80fd5b50610356610c36565b6040516103639190612200565b60405180910390f35b348015610377575f80fd5b50610380610c5e565b60405161038d9190611f77565b60405180910390f35b3480156103a1575f80fd5b506103bc60048036038101906103b79190612035565b610cee565b6040516103c9919061208d565b60405180910390f35b3480156103dd575f80fd5b506103f860048036038101906103f39190612035565b610dd4565b604051610405919061208d565b60405180910390f35b348015610419575f80fd5b50610434600480360381019061042f9190612359565b610df1565b005b348015610441575f80fd5b5061044a610f3e565b005b348015610457575f80fd5b50610472600480360381019061046d9190612035565b61103f565b005b34801561047f575f80fd5b5061049a600480360381019061049591906123b3565b611347565b6040516104a791906120b5565b60405180910390f35b3480156104bb575f80fd5b506104d660048036038101906104d19190612152565b6113c9565b005b6060600380546104e79061241e565b80601f01602080910402602001604051908101604052809291908181526020018280546105139061241e565b801561055e5780601f106105355761010080835404028352916020019161055e565b820191905f5260205f20905b81548152906001019060200180831161054157829003601f168201915b5050505050905090565b5f61057b61057461158b565b8484611592565b6001905092915050565b60075f9054906101000a900460ff16156105d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105cb90612498565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff166105f3610c36565b73ffffffffffffffffffffffffffffffffffffffff1603610649576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064090612526565b60405180910390fd5b66b1a2bc2ec50000341015610693576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161068a9061258e565b60405180910390fd5b5f6106c266b1a2bc2ec500006106b46006543461175590919063ffffffff16565b61176a90919063ffffffff16565b90505f309050816106d282610a79565b1015610713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070a9061261c565b60405180910390fd5b61071e81338461177f565b61076e3460085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546119f490919063ffffffff16565b60085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506107b833611a09565b5050565b5f600254905090565b5f8060015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61080d61158b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146108c857828110156108b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108aa906126aa565b60405180910390fd5b6108c7856108bf61158b565b858403611592565b5b6108d3858585611db0565b60019150509392505050565b60075f9054906101000a900460ff1681565b5f6012905090565b5f61099661090561158b565b848460015f61091261158b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461099191906126f5565b611592565b6001905092915050565b6109a861158b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2d90612772565b60405180910390fd5b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610ac661158b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4b90612772565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c6d9061241e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c999061241e565b8015610ce45780601f10610cbb57610100808354040283529160200191610ce4565b820191905f5260205f20905b815481529060010190602001808311610cc757829003601f168201915b5050505050905090565b5f8060015f610cfb61158b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac90612800565b60405180910390fd5b610dc9610dc061158b565b85858403611592565b600191505092915050565b5f610de7610de061158b565b8484611db0565b6001905092915050565b610df961158b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7e90612772565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff16610ea6610c36565b73ffffffffffffffffffffffffffffffffffffffff1603610efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef390612526565b60405180910390fd5b5f5b8251811015610f3957610f2c30848381518110610f1e57610f1d61281e565b5b60200260200101518461177f565b8080600101915050610efe565b505050565b610f4661158b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcb90612772565b60405180910390fd5b60075f9054906101000a900460ff1615611023576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101a90612498565b60405180910390fd5b600160075f6101000a81548160ff021916908315150217905550565b61104761158b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cc90612772565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113a906128bb565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361120257478111156111b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b090612923565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156111fc573d5f803e3d5ffd5b50611343565b5f8290505f8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112409190612200565b602060405180830381865afa15801561125b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061127f9190612955565b9050808311156112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb906129f0565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b81526004016112ff929190612a0e565b6020604051808303815f875af115801561131b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061133f9190612a5f565b5050505b5050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6113d161158b565b73ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461145f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145690612772565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c490612afa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a38060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611600576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f790612b88565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361166e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166590612c16565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161174891906120b5565b60405180910390a3505050565b5f81836117629190612c34565b905092915050565b5f81836117779190612ca2565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e490612d42565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361185b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185290612dd0565b60405180910390fd5b611866838383611ee6565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156118e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e090612e5e565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461197791906126f5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516119db91906120b5565b60405180910390a36119ee848484611eeb565b50505050565b5f8183611a0191906126f5565b905092915050565b5f8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f600190505b60048160ff1611611cb2575f6009600183611a6c9190612e7c565b60ff1681548110611a8057611a7f61281e565b5b905f5260205f20015490505f611a946108f1565b600a611aa09190612fdf565b600a600185611aaf9190612e7c565b60ff1681548110611ac357611ac261281e565b5b905f5260205f200154611ad69190612c34565b9050818410611c96578094505f73ffffffffffffffffffffffffffffffffffffffff16600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9157600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8460ff1660ff1681526020019081526020015f205f9054906101000a900460ff16611c90576001600c5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8560ff1660ff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636112e8ac876001866040518463ffffffff1660e01b8152600401611c6293929190613062565b5f604051808303815f87803b158015611c79575f80fd5b505af1158015611c8b573d5f803e3d5ffd5b505050505b5b611c9d565b5050611cb2565b50508080611caa90613097565b915050611a51565b505f600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905080831115611daa575f3090505f8285611d0d91906130bf565b905080611d1983610a79565b1015611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5190613162565b60405180910390fd5b84600b5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611da782878361177f565b50505b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1590612d42565b60405180910390fd5b611e2782611ef0565b8015611e7e5750611e36610c36565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611e7d575060075f9054906101000a900460ff16155b5b15611ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eb5906131f0565b60405180910390fd5b5f8103611ed557611ed083835f61177f565b611ee1565b611ee083838361177f565b5b505050565b505050565b505050565b5f80823b90505f8163ffffffff1611915050919050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f611f4982611f07565b611f538185611f11565b9350611f63818560208601611f21565b611f6c81611f2f565b840191505092915050565b5f6020820190508181035f830152611f8f8184611f3f565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611fd182611fa8565b9050919050565b611fe181611fc7565b8114611feb575f80fd5b50565b5f81359050611ffc81611fd8565b92915050565b5f819050919050565b61201481612002565b811461201e575f80fd5b50565b5f8135905061202f8161200b565b92915050565b5f806040838503121561204b5761204a611fa0565b5b5f61205885828601611fee565b925050602061206985828601612021565b9150509250929050565b5f8115159050919050565b61208781612073565b82525050565b5f6020820190506120a05f83018461207e565b92915050565b6120af81612002565b82525050565b5f6020820190506120c85f8301846120a6565b92915050565b5f805f606084860312156120e5576120e4611fa0565b5b5f6120f286828701611fee565b935050602061210386828701611fee565b925050604061211486828701612021565b9150509250925092565b5f60ff82169050919050565b6121338161211e565b82525050565b5f60208201905061214c5f83018461212a565b92915050565b5f6020828403121561216757612166611fa0565b5b5f61217484828501611fee565b91505092915050565b5f819050919050565b5f6121a061219b61219684611fa8565b61217d565b611fa8565b9050919050565b5f6121b182612186565b9050919050565b5f6121c2826121a7565b9050919050565b6121d2816121b8565b82525050565b5f6020820190506121eb5f8301846121c9565b92915050565b6121fa81611fc7565b82525050565b5f6020820190506122135f8301846121f1565b92915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61225382611f2f565b810181811067ffffffffffffffff821117156122725761227161221d565b5b80604052505050565b5f612284611f97565b9050612290828261224a565b919050565b5f67ffffffffffffffff8211156122af576122ae61221d565b5b602082029050602081019050919050565b5f80fd5b5f6122d66122d184612295565b61227b565b905080838252602082019050602084028301858111156122f9576122f86122c0565b5b835b81811015612322578061230e8882611fee565b8452602084019350506020810190506122fb565b5050509392505050565b5f82601f8301126123405761233f612219565b5b81356123508482602086016122c4565b91505092915050565b5f806040838503121561236f5761236e611fa0565b5b5f83013567ffffffffffffffff81111561238c5761238b611fa4565b5b6123988582860161232c565b92505060206123a985828601612021565b9150509250929050565b5f80604083850312156123c9576123c8611fa0565b5b5f6123d685828601611fee565b92505060206123e785828601611fee565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061243557607f821691505b602082108103612448576124476123f1565b5b50919050565b7f5075626c69632073616c652068617320656e64656400000000000000000000005f82015250565b5f612482601583611f11565b915061248d8261244e565b602082019050919050565b5f6020820190508181035f8301526124af81612476565b9050919050565b7f4f776e65722061646472657373206973207a65726f2c206f7065726174696f6e5f8201527f206e6f7420616c6c6f7765640000000000000000000000000000000000000000602082015250565b5f612510602c83611f11565b915061251b826124b6565b604082019050919050565b5f6020820190508181035f83015261253d81612504565b9050919050565b7f496e73756666696369656e74204554482073656e7400000000000000000000005f82015250565b5f612578601583611f11565b915061258382612544565b602082019050919050565b5f6020820190508181035f8301526125a58161256c565b9050919050565b7f4f776e657220646f6573206e6f74206861766520656e6f75676820746f6b656e5f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f612606602183611f11565b9150612611826125ac565b604082019050919050565b5f6020820190508181035f830152612633816125fa565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f612694602883611f11565b915061269f8261263a565b604082019050919050565b5f6020820190508181035f8301526126c181612688565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6126ff82612002565b915061270a83612002565b9250828201905080821115612722576127216126c8565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61275c602083611f11565b915061276782612728565b602082019050919050565b5f6020820190508181035f83015261278981612750565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6127ea602583611f11565b91506127f582612790565b604082019050919050565b5f6020820190508181035f830152612817816127de565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4f776e65722063616e6e6f7420636c61696d20636f6e747261637427732062615f8201527f6c616e6365206f6620697473206f776e20746f6b656e73000000000000000000602082015250565b5f6128a5603783611f11565b91506128b08261284b565b604082019050919050565b5f6020820190508181035f8301526128d281612899565b9050919050565b7f496e73756666696369656e7420636f6e74726163742062616c616e63650000005f82015250565b5f61290d601d83611f11565b9150612918826128d9565b602082019050919050565b5f6020820190508181035f83015261293a81612901565b9050919050565b5f8151905061294f8161200b565b92915050565b5f6020828403121561296a57612969611fa0565b5b5f61297784828501612941565b91505092915050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f5f8201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b5f6129da602683611f11565b91506129e582612980565b604082019050919050565b5f6020820190508181035f830152612a07816129ce565b9050919050565b5f604082019050612a215f8301856121f1565b612a2e60208301846120a6565b9392505050565b612a3e81612073565b8114612a48575f80fd5b50565b5f81519050612a5981612a35565b92915050565b5f60208284031215612a7457612a73611fa0565b5b5f612a8184828501612a4b565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612ae4602683611f11565b9150612aef82612a8a565b604082019050919050565b5f6020820190508181035f830152612b1181612ad8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612b72602483611f11565b9150612b7d82612b18565b604082019050919050565b5f6020820190508181035f830152612b9f81612b66565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612c00602283611f11565b9150612c0b82612ba6565b604082019050919050565b5f6020820190508181035f830152612c2d81612bf4565b9050919050565b5f612c3e82612002565b9150612c4983612002565b9250828202612c5781612002565b91508282048414831517612c6e57612c6d6126c8565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612cac82612002565b9150612cb783612002565b925082612cc757612cc6612c75565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612d2c602583611f11565b9150612d3782612cd2565b604082019050919050565b5f6020820190508181035f830152612d5981612d20565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f612dba602383611f11565b9150612dc582612d60565b604082019050919050565b5f6020820190508181035f830152612de781612dae565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f612e48602683611f11565b9150612e5382612dee565b604082019050919050565b5f6020820190508181035f830152612e7581612e3c565b9050919050565b5f612e868261211e565b9150612e918361211e565b9250828203905060ff811115612eaa57612ea96126c8565b5b92915050565b5f8160011c9050919050565b5f808291508390505b6001851115612f0557808604811115612ee157612ee06126c8565b5b6001851615612ef05780820291505b8081029050612efe85612eb0565b9450612ec5565b94509492505050565b5f82612f1d5760019050612fd8565b81612f2a575f9050612fd8565b8160018114612f405760028114612f4a57612f79565b6001915050612fd8565b60ff841115612f5c57612f5b6126c8565b5b8360020a915084821115612f7357612f726126c8565b5b50612fd8565b5060208310610133831016604e8410600b8410161715612fae5782820a905083811115612fa957612fa86126c8565b5b612fd8565b612fbb8484846001612ebc565b92509050818404811115612fd257612fd16126c8565b5b81810290505b9392505050565b5f612fe982612002565b9150612ff48361211e565b92506130217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612f0e565b905092915050565b5f819050919050565b5f61304c61304761304284613029565b61217d565b612002565b9050919050565b61305c81613032565b82525050565b5f6060820190506130755f8301866121f1565b6130826020830185613053565b61308f604083018461212a565b949350505050565b5f6130a18261211e565b915060ff82036130b4576130b36126c8565b5b600182019050919050565b5f6130c982612002565b91506130d483612002565b92508282039050818111156130ec576130eb6126c8565b5b92915050565b7f4f776e657220646f6573206e6f74206861766520656e6f75676820746f6b656e5f8201527f7320666f72207265776172647300000000000000000000000000000000000000602082015250565b5f61314c602d83611f11565b9150613157826130f2565b604082019050919050565b5f6020820190508181035f83015261317981613140565b9050919050565b7f4f6e6c7920746865206f776e65722063616e20616464206c69717569646974795f8201527f206265666f7265207075626c69632073616c6520656e64732e00000000000000602082015250565b5f6131da603983611f11565b91506131e582613180565b604082019050919050565b5f6020820190508181035f830152613207816131ce565b905091905056fea26469706673582212207226da0fcd9f7e28555f61f0fbe207d5633374a1f46381428c647124b4ee32c064736f6c634300081a0033

Deployed Bytecode Sourcemap

12684:5944:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6519:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7433:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13770:943;;;:::i;:::-;;6840:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7610:573;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12886:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6739:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8191:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16624:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6956:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5703:148;;;;;;;;;;;;;:::i;:::-;;13557:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5489:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6627:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8414:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7091:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16766:317;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17091:158;;;;;;;;;;;;;:::i;:::-;;17962:657;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7274:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5859:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6519:100;6573:13;6606:5;6599:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6519:100;:::o;7433:169::-;7516:4;7533:39;7542:12;:10;:12::i;:::-;7556:7;7565:6;7533:8;:39::i;:::-;7590:4;7583:11;;7433:169;;;;:::o;13770:943::-;13829:17;;;;;;;;;;;13828:18;13820:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;13910:1;13891:21;;:7;:5;:7::i;:::-;:21;;;13883:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;12869:10;13980:9;:26;;13972:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;14116:20;14139:44;12869:10;14139:25;14153:10;;14139:9;:13;;:25;;;;:::i;:::-;:29;;:44;;;;:::i;:::-;14116:67;;14194:23;14228:4;14194:39;;14282:12;14252:26;14262:15;14252:9;:26::i;:::-;:42;;14244:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;14390:58;14406:15;14423:10;14435:12;14390:15;:58::i;:::-;14547:42;14579:9;14547:15;:27;14563:10;14547:27;;;;;;;;;;;;;;;;:31;;:42;;;;:::i;:::-;14517:15;:27;14533:10;14517:27;;;;;;;;;;;;;;;:72;;;;14679:26;14694:10;14679:14;:26::i;:::-;13809:904;;13770:943::o;6840:108::-;6901:7;6928:12;;6921:19;;6840:108;:::o;7610:573::-;7750:4;7767:24;7794:11;:19;7806:6;7794:19;;;;;;;;;;;;;;;:33;7814:12;:10;:12::i;:::-;7794:33;;;;;;;;;;;;;;;;7767:60;;7862:17;7842:16;:37;7838:265;;7924:6;7904:16;:26;;7896:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8019:57;8028:6;8036:12;:10;:12::i;:::-;8069:6;8050:16;:25;8019:8;:57::i;:::-;7838:265;8115:36;8125:6;8133:9;8144:6;8115:9;:36::i;:::-;8171:4;8164:11;;;7610:573;;;;;:::o;12886:37::-;;;;;;;;;;;;;:::o;6739:93::-;6797:5;6822:2;6815:9;;6739:93;:::o;8191:215::-;8279:4;8296:80;8305:12;:10;:12::i;:::-;8319:7;8365:10;8328:11;:25;8340:12;:10;:12::i;:::-;8328:25;;;;;;;;;;;;;;;:34;8354:7;8328:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;8296:8;:80::i;:::-;8394:4;8387:11;;8191:215;;;;:::o;16624:128::-;5626:12;:10;:12::i;:::-;5616:22;;:6;;;;;;;;;;;:22;;;5608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16734:9:::1;16697:20;;:47;;;;;;;;;;;;;;;;;;16624:128:::0;:::o;6956:127::-;7030:7;7057:9;:18;7067:7;7057:18;;;;;;;;;;;;;;;;7050:25;;6956:127;;;:::o;5703:148::-;5626:12;:10;:12::i;:::-;5616:22;;:6;;;;;;;;;;;:22;;;5608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5810:1:::1;5773:40;;5794:6;;;;;;;;;;;5773:40;;;;;;;;;;;;5841:1;5824:6;;:19;;;;;;;;;;;;;;;;;;5703:148::o:0;13557:41::-;;;;;;;;;;;;;:::o;5489:79::-;5527:7;5554:6;;;;;;;;;;;5547:13;;5489:79;:::o;6627:104::-;6683:13;6716:7;6709:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6627:104;:::o;8414:413::-;8507:4;8524:24;8551:11;:25;8563:12;:10;:12::i;:::-;8551:25;;;;;;;;;;;;;;;:34;8577:7;8551:34;;;;;;;;;;;;;;;;8524:61;;8624:15;8604:16;:35;;8596:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;8717:67;8726:12;:10;:12::i;:::-;8740:7;8768:15;8749:16;:34;8717:8;:67::i;:::-;8815:4;8808:11;;;8414:413;;;;:::o;7091:175::-;7177:4;7194:42;7204:12;:10;:12::i;:::-;7218:9;7229:6;7194:9;:42::i;:::-;7254:4;7247:11;;7091:175;;;;:::o;16766:317::-;5626:12;:10;:12::i;:::-;5616:22;;:6;;;;;;;;;;;:22;;;5608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16889:1:::1;16870:21;;:7;:5;:7::i;:::-;:21;;::::0;16862:78:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16956:6;16951:125;16972:10;:17;16968:1;:21;16951:125;;;17011:53;17035:4;17042:10;17053:1;17042:13;;;;;;;;:::i;:::-;;;;;;;;17057:6;17011:15;:53::i;:::-;16991:3;;;;;;;16951:125;;;;16766:317:::0;;:::o;17091:158::-;5626:12;:10;:12::i;:::-;5616:22;;:6;;;;;;;;;;;:22;;;5608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17163:17:::1;;;;;;;;;;;17162:18;17154:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;17237:4;17217:17;;:24;;;;;;;;;;;;;;;;;;17091:158::o:0;17962:657::-;5626:12;:10;:12::i;:::-;5616:22;;:6;;;;;;;;;;;:22;;;5608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18074:4:::1;18057:22;;:5;:22;;::::0;18049:90:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18181:1;18164:19;;:5;:19;;::::0;18160:197:::1;;18218:21;18208:6;:31;;18200:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18296:10;18288:28;;:36;18317:6;18288:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;18339:7;;18160:197;18369:17;18396:5;18369:33;;18413:23;18439:10;:20;;;18468:4;18439:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18413:61;;18503:15;18493:6;:25;;18485:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;18572:10;:19;;;18592:10;18604:6;18572:39;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18038:581;;5686:1;17962:657:::0;;:::o;7274:151::-;7363:7;7390:11;:18;7402:5;7390:18;;;;;;;;;;;;;;;:27;7409:7;7390:27;;;;;;;;;;;;;;;;7383:34;;7274:151;;;;:::o;5859:244::-;5626:12;:10;:12::i;:::-;5616:22;;:6;;;;;;;;;;;:22;;;5608:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5968:1:::1;5948:22;;:8;:22;;::::0;5940:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6058:8;6029:38;;6050:6;;;;;;;;;;;6029:38;;;;;;;;;;;;6087:8;6078:6;;:17;;;;;;;;;;;;;;;;;;5859:244:::0;:::o;4812:98::-;4865:7;4892:10;4885:17;;4812:98;:::o;11538:390::-;11691:1;11674:19;;:5;:19;;;11666:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11772:1;11753:21;;:7;:21;;;11745:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11866:6;11836:11;:18;11848:5;11836:18;;;;;;;;;;;;;;;:27;11855:7;11836:27;;;;;;;;;;;;;;;:36;;;;11904:7;11888:32;;11897:5;11888:32;;;11913:6;11888:32;;;;;;:::i;:::-;;;;;;;;11538:390;;;:::o;1483:98::-;1541:7;1572:1;1568;:5;;;;:::i;:::-;1561:12;;1483:98;;;;:::o;1589:::-;1647:7;1678:1;1674;:5;;;;:::i;:::-;1667:12;;1589:98;;;;:::o;8835:733::-;8993:1;8975:20;;:6;:20;;;8967:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9077:1;9056:23;;:9;:23;;;9048:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;9132:47;9153:6;9161:9;9172:6;9132:20;:47::i;:::-;9192:21;9216:9;:17;9226:6;9216:17;;;;;;;;;;;;;;;;9192:41;;9269:6;9252:13;:23;;9244:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;9390:6;9374:13;:22;9354:9;:17;9364:6;9354:17;;;;;;;;;;;;;;;:42;;;;9442:6;9418:9;:20;9428:9;9418:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;9483:9;9466:35;;9475:6;9466:35;;;9494:6;9466:35;;;;;;:::i;:::-;;;;;;;;9514:46;9534:6;9542:9;9553:6;9514:19;:46::i;:::-;8956:612;8835:733;;;:::o;1271:98::-;1329:7;1360:1;1356;:5;;;;:::i;:::-;1349:12;;1271:98;;;;:::o;14721:1893::-;14779:19;14850;14872:15;:21;14888:4;14872:21;;;;;;;;;;;;;;;;14850:43;;14977:11;14991:1;14977:15;;14972:907;15003:1;14994:5;:10;;;14972:907;;15030:17;15050:16;15075:1;15067:5;:9;;;;:::i;:::-;15050:27;;;;;;;;;;:::i;:::-;;;;;;;;;;15030:47;;15092:14;15141:10;:8;:10::i;:::-;15137:2;:14;;;;:::i;:::-;15109:13;15131:1;15123:5;:9;;;;:::i;:::-;15109:24;;;;;;;;;;:::i;:::-;;;;;;;;;;:43;;;;:::i;:::-;15092:60;;15239:9;15224:11;:24;15220:648;;15324:6;15310:20;;15454:1;15413:43;;15421:20;;;;;;;;;;;15413:43;;;15409:344;;15486:12;:18;15499:4;15486:18;;;;;;;;;;;;;;;:25;15505:5;15486:25;;;;;;;;;;;;;;;;;;;;;;;;;15481:253;;15568:4;15540:12;:18;15553:4;15540:18;;;;;;;;;;;;;;;:25;15559:5;15540:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;15645:20;;;;;;;;;;;:25;;;15671:4;15677:1;15680:5;15645:41;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15481:253;15409:344;15220:648;;;15793:5;;;;15220:648;15015:864;;15006:7;;;;;:::i;:::-;;;;14972:907;;;;15951:21;15975:14;:20;15990:4;15975:20;;;;;;;;;;;;;;;;15951:44;;16133:13;16119:11;:27;16115:492;;;16163:23;16197:4;16163:39;;16217:20;16254:13;16240:11;:27;;;;:::i;:::-;16217:50;;16348:12;16318:26;16328:15;16318:9;:26::i;:::-;:42;;16310:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;16448:11;16425:14;:20;16440:4;16425:20;;;;;;;;;;;;;;;:34;;;;16520:52;16536:15;16553:4;16559:12;16520:15;:52::i;:::-;16148:459;;16115:492;14768:1846;;;14721:1893;:::o;17458:493::-;17571:1;17555:18;;:4;:18;;;17547:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17640:14;17651:2;17640:10;:14::i;:::-;:57;;;;;17667:7;:5;:7::i;:::-;17659:15;;:4;:15;;;;:37;;;;;17679:17;;;;;;;;;;;17678:18;17659:37;17640:57;17636:157;;;17714:67;;;;;;;;;;:::i;:::-;;;;;;;;17636:157;17819:1;17809:6;:11;17805:93;;17837:28;17853:4;17859:2;17863:1;17837:15;:28::i;:::-;17880:7;;17805:93;17910:33;17926:4;17932:2;17936:6;17910:15;:33::i;:::-;17458:493;;;;:::o;12317:125::-;;;;:::o;12450:124::-;;;;:::o;17257:193::-;17315:4;17332:11;17398:5;17386:18;17378:26;;17440:1;17433:4;:8;;;17425:17;;;17257:193;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1242:75::-;1275:6;1308:2;1302:9;1292:19;;1242:75;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:118::-;3426:24;3444:5;3426:24;:::i;:::-;3421:3;3414:37;3339:118;;:::o;3463:222::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3607:71;3675:1;3664:9;3660:17;3651:6;3607:71;:::i;:::-;3463:222;;;;:::o;3691:619::-;3768:6;3776;3784;3833:2;3821:9;3812:7;3808:23;3804:32;3801:119;;;3839:79;;:::i;:::-;3801:119;3959:1;3984:53;4029:7;4020:6;4009:9;4005:22;3984:53;:::i;:::-;3974:63;;3930:117;4086:2;4112:53;4157:7;4148:6;4137:9;4133:22;4112:53;:::i;:::-;4102:63;;4057:118;4214:2;4240:53;4285:7;4276:6;4265:9;4261:22;4240:53;:::i;:::-;4230:63;;4185:118;3691:619;;;;;:::o;4316:86::-;4351:7;4391:4;4384:5;4380:16;4369:27;;4316:86;;;:::o;4408:112::-;4491:22;4507:5;4491:22;:::i;:::-;4486:3;4479:35;4408:112;;:::o;4526:214::-;4615:4;4653:2;4642:9;4638:18;4630:26;;4666:67;4730:1;4719:9;4715:17;4706:6;4666:67;:::i;:::-;4526:214;;;;:::o;4746:329::-;4805:6;4854:2;4842:9;4833:7;4829:23;4825:32;4822:119;;;4860:79;;:::i;:::-;4822:119;4980:1;5005:53;5050:7;5041:6;5030:9;5026:22;5005:53;:::i;:::-;4995:63;;4951:117;4746:329;;;;:::o;5081:60::-;5109:3;5130:5;5123:12;;5081:60;;;:::o;5147:142::-;5197:9;5230:53;5248:34;5257:24;5275:5;5257:24;:::i;:::-;5248:34;:::i;:::-;5230:53;:::i;:::-;5217:66;;5147:142;;;:::o;5295:126::-;5345:9;5378:37;5409:5;5378:37;:::i;:::-;5365:50;;5295:126;;;:::o;5427:148::-;5499:9;5532:37;5563:5;5532:37;:::i;:::-;5519:50;;5427:148;;;:::o;5581:175::-;5690:59;5743:5;5690:59;:::i;:::-;5685:3;5678:72;5581:175;;:::o;5762:266::-;5877:4;5915:2;5904:9;5900:18;5892:26;;5928:93;6018:1;6007:9;6003:17;5994:6;5928:93;:::i;:::-;5762:266;;;;:::o;6034:118::-;6121:24;6139:5;6121:24;:::i;:::-;6116:3;6109:37;6034:118;;:::o;6158:222::-;6251:4;6289:2;6278:9;6274:18;6266:26;;6302:71;6370:1;6359:9;6355:17;6346:6;6302:71;:::i;:::-;6158:222;;;;:::o;6386:117::-;6495:1;6492;6485:12;6509:180;6557:77;6554:1;6547:88;6654:4;6651:1;6644:15;6678:4;6675:1;6668:15;6695:281;6778:27;6800:4;6778:27;:::i;:::-;6770:6;6766:40;6908:6;6896:10;6893:22;6872:18;6860:10;6857:34;6854:62;6851:88;;;6919:18;;:::i;:::-;6851:88;6959:10;6955:2;6948:22;6738:238;6695:281;;:::o;6982:129::-;7016:6;7043:20;;:::i;:::-;7033:30;;7072:33;7100:4;7092:6;7072:33;:::i;:::-;6982:129;;;:::o;7117:311::-;7194:4;7284:18;7276:6;7273:30;7270:56;;;7306:18;;:::i;:::-;7270:56;7356:4;7348:6;7344:17;7336:25;;7416:4;7410;7406:15;7398:23;;7117:311;;;:::o;7434:117::-;7543:1;7540;7533:12;7574:710;7670:5;7695:81;7711:64;7768:6;7711:64;:::i;:::-;7695:81;:::i;:::-;7686:90;;7796:5;7825:6;7818:5;7811:21;7859:4;7852:5;7848:16;7841:23;;7912:4;7904:6;7900:17;7892:6;7888:30;7941:3;7933:6;7930:15;7927:122;;;7960:79;;:::i;:::-;7927:122;8075:6;8058:220;8092:6;8087:3;8084:15;8058:220;;;8167:3;8196:37;8229:3;8217:10;8196:37;:::i;:::-;8191:3;8184:50;8263:4;8258:3;8254:14;8247:21;;8134:144;8118:4;8113:3;8109:14;8102:21;;8058:220;;;8062:21;7676:608;;7574:710;;;;;:::o;8307:370::-;8378:5;8427:3;8420:4;8412:6;8408:17;8404:27;8394:122;;8435:79;;:::i;:::-;8394:122;8552:6;8539:20;8577:94;8667:3;8659:6;8652:4;8644:6;8640:17;8577:94;:::i;:::-;8568:103;;8384:293;8307:370;;;;:::o;8683:684::-;8776:6;8784;8833:2;8821:9;8812:7;8808:23;8804:32;8801:119;;;8839:79;;:::i;:::-;8801:119;8987:1;8976:9;8972:17;8959:31;9017:18;9009:6;9006:30;9003:117;;;9039:79;;:::i;:::-;9003:117;9144:78;9214:7;9205:6;9194:9;9190:22;9144:78;:::i;:::-;9134:88;;8930:302;9271:2;9297:53;9342:7;9333:6;9322:9;9318:22;9297:53;:::i;:::-;9287:63;;9242:118;8683:684;;;;;:::o;9373:474::-;9441:6;9449;9498:2;9486:9;9477:7;9473:23;9469:32;9466:119;;;9504:79;;:::i;:::-;9466:119;9624:1;9649:53;9694:7;9685:6;9674:9;9670:22;9649:53;:::i;:::-;9639:63;;9595:117;9751:2;9777:53;9822:7;9813:6;9802:9;9798:22;9777:53;:::i;:::-;9767:63;;9722:118;9373:474;;;;;:::o;9853:180::-;9901:77;9898:1;9891:88;9998:4;9995:1;9988:15;10022:4;10019:1;10012:15;10039:320;10083:6;10120:1;10114:4;10110:12;10100:22;;10167:1;10161:4;10157:12;10188:18;10178:81;;10244:4;10236:6;10232:17;10222:27;;10178:81;10306:2;10298:6;10295:14;10275:18;10272:38;10269:84;;10325:18;;:::i;:::-;10269:84;10090:269;10039:320;;;:::o;10365:171::-;10505:23;10501:1;10493:6;10489:14;10482:47;10365:171;:::o;10542:366::-;10684:3;10705:67;10769:2;10764:3;10705:67;:::i;:::-;10698:74;;10781:93;10870:3;10781:93;:::i;:::-;10899:2;10894:3;10890:12;10883:19;;10542:366;;;:::o;10914:419::-;11080:4;11118:2;11107:9;11103:18;11095:26;;11167:9;11161:4;11157:20;11153:1;11142:9;11138:17;11131:47;11195:131;11321:4;11195:131;:::i;:::-;11187:139;;10914:419;;;:::o;11339:231::-;11479:34;11475:1;11467:6;11463:14;11456:58;11548:14;11543:2;11535:6;11531:15;11524:39;11339:231;:::o;11576:366::-;11718:3;11739:67;11803:2;11798:3;11739:67;:::i;:::-;11732:74;;11815:93;11904:3;11815:93;:::i;:::-;11933:2;11928:3;11924:12;11917:19;;11576:366;;;:::o;11948:419::-;12114:4;12152:2;12141:9;12137:18;12129:26;;12201:9;12195:4;12191:20;12187:1;12176:9;12172:17;12165:47;12229:131;12355:4;12229:131;:::i;:::-;12221:139;;11948:419;;;:::o;12373:171::-;12513:23;12509:1;12501:6;12497:14;12490:47;12373:171;:::o;12550:366::-;12692:3;12713:67;12777:2;12772:3;12713:67;:::i;:::-;12706:74;;12789:93;12878:3;12789:93;:::i;:::-;12907:2;12902:3;12898:12;12891:19;;12550:366;;;:::o;12922:419::-;13088:4;13126:2;13115:9;13111:18;13103:26;;13175:9;13169:4;13165:20;13161:1;13150:9;13146:17;13139:47;13203:131;13329:4;13203:131;:::i;:::-;13195:139;;12922:419;;;:::o;13347:220::-;13487:34;13483:1;13475:6;13471:14;13464:58;13556:3;13551:2;13543:6;13539:15;13532:28;13347:220;:::o;13573:366::-;13715:3;13736:67;13800:2;13795:3;13736:67;:::i;:::-;13729:74;;13812:93;13901:3;13812:93;:::i;:::-;13930:2;13925:3;13921:12;13914:19;;13573:366;;;:::o;13945:419::-;14111:4;14149:2;14138:9;14134:18;14126:26;;14198:9;14192:4;14188:20;14184:1;14173:9;14169:17;14162:47;14226:131;14352:4;14226:131;:::i;:::-;14218:139;;13945:419;;;:::o;14370:227::-;14510:34;14506:1;14498:6;14494:14;14487:58;14579:10;14574:2;14566:6;14562:15;14555:35;14370:227;:::o;14603:366::-;14745:3;14766:67;14830:2;14825:3;14766:67;:::i;:::-;14759:74;;14842:93;14931:3;14842:93;:::i;:::-;14960:2;14955:3;14951:12;14944:19;;14603:366;;;:::o;14975:419::-;15141:4;15179:2;15168:9;15164:18;15156:26;;15228:9;15222:4;15218:20;15214:1;15203:9;15199:17;15192:47;15256:131;15382:4;15256:131;:::i;:::-;15248:139;;14975:419;;;:::o;15400:180::-;15448:77;15445:1;15438:88;15545:4;15542:1;15535:15;15569:4;15566:1;15559:15;15586:191;15626:3;15645:20;15663:1;15645:20;:::i;:::-;15640:25;;15679:20;15697:1;15679:20;:::i;:::-;15674:25;;15722:1;15719;15715:9;15708:16;;15743:3;15740:1;15737:10;15734:36;;;15750:18;;:::i;:::-;15734:36;15586:191;;;;:::o;15783:182::-;15923:34;15919:1;15911:6;15907:14;15900:58;15783:182;:::o;15971:366::-;16113:3;16134:67;16198:2;16193:3;16134:67;:::i;:::-;16127:74;;16210:93;16299:3;16210:93;:::i;:::-;16328:2;16323:3;16319:12;16312:19;;15971:366;;;:::o;16343:419::-;16509:4;16547:2;16536:9;16532:18;16524:26;;16596:9;16590:4;16586:20;16582:1;16571:9;16567:17;16560:47;16624:131;16750:4;16624:131;:::i;:::-;16616:139;;16343:419;;;:::o;16768:224::-;16908:34;16904:1;16896:6;16892:14;16885:58;16977:7;16972:2;16964:6;16960:15;16953:32;16768:224;:::o;16998:366::-;17140:3;17161:67;17225:2;17220:3;17161:67;:::i;:::-;17154:74;;17237:93;17326:3;17237:93;:::i;:::-;17355:2;17350:3;17346:12;17339:19;;16998:366;;;:::o;17370:419::-;17536:4;17574:2;17563:9;17559:18;17551:26;;17623:9;17617:4;17613:20;17609:1;17598:9;17594:17;17587:47;17651:131;17777:4;17651:131;:::i;:::-;17643:139;;17370:419;;;:::o;17795:180::-;17843:77;17840:1;17833:88;17940:4;17937:1;17930:15;17964:4;17961:1;17954:15;17981:242;18121:34;18117:1;18109:6;18105:14;18098:58;18190:25;18185:2;18177:6;18173:15;18166:50;17981:242;:::o;18229:366::-;18371:3;18392:67;18456:2;18451:3;18392:67;:::i;:::-;18385:74;;18468:93;18557:3;18468:93;:::i;:::-;18586:2;18581:3;18577:12;18570:19;;18229:366;;;:::o;18601:419::-;18767:4;18805:2;18794:9;18790:18;18782:26;;18854:9;18848:4;18844:20;18840:1;18829:9;18825:17;18818:47;18882:131;19008:4;18882:131;:::i;:::-;18874:139;;18601:419;;;:::o;19026:179::-;19166:31;19162:1;19154:6;19150:14;19143:55;19026:179;:::o;19211:366::-;19353:3;19374:67;19438:2;19433:3;19374:67;:::i;:::-;19367:74;;19450:93;19539:3;19450:93;:::i;:::-;19568:2;19563:3;19559:12;19552:19;;19211:366;;;:::o;19583:419::-;19749:4;19787:2;19776:9;19772:18;19764:26;;19836:9;19830:4;19826:20;19822:1;19811:9;19807:17;19800:47;19864:131;19990:4;19864:131;:::i;:::-;19856:139;;19583:419;;;:::o;20008:143::-;20065:5;20096:6;20090:13;20081:22;;20112:33;20139:5;20112:33;:::i;:::-;20008:143;;;;:::o;20157:351::-;20227:6;20276:2;20264:9;20255:7;20251:23;20247:32;20244:119;;;20282:79;;:::i;:::-;20244:119;20402:1;20427:64;20483:7;20474:6;20463:9;20459:22;20427:64;:::i;:::-;20417:74;;20373:128;20157:351;;;;:::o;20514:225::-;20654:34;20650:1;20642:6;20638:14;20631:58;20723:8;20718:2;20710:6;20706:15;20699:33;20514:225;:::o;20745:366::-;20887:3;20908:67;20972:2;20967:3;20908:67;:::i;:::-;20901:74;;20984:93;21073:3;20984:93;:::i;:::-;21102:2;21097:3;21093:12;21086:19;;20745:366;;;:::o;21117:419::-;21283:4;21321:2;21310:9;21306:18;21298:26;;21370:9;21364:4;21360:20;21356:1;21345:9;21341:17;21334:47;21398:131;21524:4;21398:131;:::i;:::-;21390:139;;21117:419;;;:::o;21542:332::-;21663:4;21701:2;21690:9;21686:18;21678:26;;21714:71;21782:1;21771:9;21767:17;21758:6;21714:71;:::i;:::-;21795:72;21863:2;21852:9;21848:18;21839:6;21795:72;:::i;:::-;21542:332;;;;;:::o;21880:116::-;21950:21;21965:5;21950:21;:::i;:::-;21943:5;21940:32;21930:60;;21986:1;21983;21976:12;21930:60;21880:116;:::o;22002:137::-;22056:5;22087:6;22081:13;22072:22;;22103:30;22127:5;22103:30;:::i;:::-;22002:137;;;;:::o;22145:345::-;22212:6;22261:2;22249:9;22240:7;22236:23;22232:32;22229:119;;;22267:79;;:::i;:::-;22229:119;22387:1;22412:61;22465:7;22456:6;22445:9;22441:22;22412:61;:::i;:::-;22402:71;;22358:125;22145:345;;;;:::o;22496:225::-;22636:34;22632:1;22624:6;22620:14;22613:58;22705:8;22700:2;22692:6;22688:15;22681:33;22496:225;:::o;22727:366::-;22869:3;22890:67;22954:2;22949:3;22890:67;:::i;:::-;22883:74;;22966:93;23055:3;22966:93;:::i;:::-;23084:2;23079:3;23075:12;23068:19;;22727:366;;;:::o;23099:419::-;23265:4;23303:2;23292:9;23288:18;23280:26;;23352:9;23346:4;23342:20;23338:1;23327:9;23323:17;23316:47;23380:131;23506:4;23380:131;:::i;:::-;23372:139;;23099:419;;;:::o;23524:223::-;23664:34;23660:1;23652:6;23648:14;23641:58;23733:6;23728:2;23720:6;23716:15;23709:31;23524:223;:::o;23753:366::-;23895:3;23916:67;23980:2;23975:3;23916:67;:::i;:::-;23909:74;;23992:93;24081:3;23992:93;:::i;:::-;24110:2;24105:3;24101:12;24094:19;;23753:366;;;:::o;24125:419::-;24291:4;24329:2;24318:9;24314:18;24306:26;;24378:9;24372:4;24368:20;24364:1;24353:9;24349:17;24342:47;24406:131;24532:4;24406:131;:::i;:::-;24398:139;;24125:419;;;:::o;24550:221::-;24690:34;24686:1;24678:6;24674:14;24667:58;24759:4;24754:2;24746:6;24742:15;24735:29;24550:221;:::o;24777:366::-;24919:3;24940:67;25004:2;24999:3;24940:67;:::i;:::-;24933:74;;25016:93;25105:3;25016:93;:::i;:::-;25134:2;25129:3;25125:12;25118:19;;24777:366;;;:::o;25149:419::-;25315:4;25353:2;25342:9;25338:18;25330:26;;25402:9;25396:4;25392:20;25388:1;25377:9;25373:17;25366:47;25430:131;25556:4;25430:131;:::i;:::-;25422:139;;25149:419;;;:::o;25574:410::-;25614:7;25637:20;25655:1;25637:20;:::i;:::-;25632:25;;25671:20;25689:1;25671:20;:::i;:::-;25666:25;;25726:1;25723;25719:9;25748:30;25766:11;25748:30;:::i;:::-;25737:41;;25927:1;25918:7;25914:15;25911:1;25908:22;25888:1;25881:9;25861:83;25838:139;;25957:18;;:::i;:::-;25838:139;25622:362;25574:410;;;;:::o;25990:180::-;26038:77;26035:1;26028:88;26135:4;26132:1;26125:15;26159:4;26156:1;26149:15;26176:185;26216:1;26233:20;26251:1;26233:20;:::i;:::-;26228:25;;26267:20;26285:1;26267:20;:::i;:::-;26262:25;;26306:1;26296:35;;26311:18;;:::i;:::-;26296:35;26353:1;26350;26346:9;26341:14;;26176:185;;;;:::o;26367:224::-;26507:34;26503:1;26495:6;26491:14;26484:58;26576:7;26571:2;26563:6;26559:15;26552:32;26367:224;:::o;26597:366::-;26739:3;26760:67;26824:2;26819:3;26760:67;:::i;:::-;26753:74;;26836:93;26925:3;26836:93;:::i;:::-;26954:2;26949:3;26945:12;26938:19;;26597:366;;;:::o;26969:419::-;27135:4;27173:2;27162:9;27158:18;27150:26;;27222:9;27216:4;27212:20;27208:1;27197:9;27193:17;27186:47;27250:131;27376:4;27250:131;:::i;:::-;27242:139;;26969:419;;;:::o;27394:222::-;27534:34;27530:1;27522:6;27518:14;27511:58;27603:5;27598:2;27590:6;27586:15;27579:30;27394:222;:::o;27622:366::-;27764:3;27785:67;27849:2;27844:3;27785:67;:::i;:::-;27778:74;;27861:93;27950:3;27861:93;:::i;:::-;27979:2;27974:3;27970:12;27963:19;;27622:366;;;:::o;27994:419::-;28160:4;28198:2;28187:9;28183:18;28175:26;;28247:9;28241:4;28237:20;28233:1;28222:9;28218:17;28211:47;28275:131;28401:4;28275:131;:::i;:::-;28267:139;;27994:419;;;:::o;28419:225::-;28559:34;28555:1;28547:6;28543:14;28536:58;28628:8;28623:2;28615:6;28611:15;28604:33;28419:225;:::o;28650:366::-;28792:3;28813:67;28877:2;28872:3;28813:67;:::i;:::-;28806:74;;28889:93;28978:3;28889:93;:::i;:::-;29007:2;29002:3;28998:12;28991:19;;28650:366;;;:::o;29022:419::-;29188:4;29226:2;29215:9;29211:18;29203:26;;29275:9;29269:4;29265:20;29261:1;29250:9;29246:17;29239:47;29303:131;29429:4;29303:131;:::i;:::-;29295:139;;29022:419;;;:::o;29447:191::-;29485:4;29505:18;29521:1;29505:18;:::i;:::-;29500:23;;29537:18;29553:1;29537:18;:::i;:::-;29532:23;;29579:1;29576;29572:9;29564:17;;29603:4;29597;29594:14;29591:40;;;29611:18;;:::i;:::-;29591:40;29447:191;;;;:::o;29644:102::-;29686:8;29733:5;29730:1;29726:13;29705:34;;29644:102;;;:::o;29752:848::-;29813:5;29820:4;29844:6;29835:15;;29868:5;29859:14;;29882:712;29903:1;29893:8;29890:15;29882:712;;;29998:4;29993:3;29989:14;29983:4;29980:24;29977:50;;;30007:18;;:::i;:::-;29977:50;30057:1;30047:8;30043:16;30040:451;;;30472:4;30465:5;30461:16;30452:25;;30040:451;30522:4;30516;30512:15;30504:23;;30552:32;30575:8;30552:32;:::i;:::-;30540:44;;29882:712;;;29752:848;;;;;;;:::o;30606:1073::-;30660:5;30851:8;30841:40;;30872:1;30863:10;;30874:5;;30841:40;30900:4;30890:36;;30917:1;30908:10;;30919:5;;30890:36;30986:4;31034:1;31029:27;;;;31070:1;31065:191;;;;30979:277;;31029:27;31047:1;31038:10;;31049:5;;;31065:191;31110:3;31100:8;31097:17;31094:43;;;31117:18;;:::i;:::-;31094:43;31166:8;31163:1;31159:16;31150:25;;31201:3;31194:5;31191:14;31188:40;;;31208:18;;:::i;:::-;31188:40;31241:5;;;30979:277;;31365:2;31355:8;31352:16;31346:3;31340:4;31337:13;31333:36;31315:2;31305:8;31302:16;31297:2;31291:4;31288:12;31284:35;31268:111;31265:246;;;31421:8;31415:4;31411:19;31402:28;;31456:3;31449:5;31446:14;31443:40;;;31463:18;;:::i;:::-;31443:40;31496:5;;31265:246;31536:42;31574:3;31564:8;31558:4;31555:1;31536:42;:::i;:::-;31521:57;;;;31610:4;31605:3;31601:14;31594:5;31591:25;31588:51;;;31619:18;;:::i;:::-;31588:51;31668:4;31661:5;31657:16;31648:25;;30606:1073;;;;;;:::o;31685:281::-;31743:5;31767:23;31785:4;31767:23;:::i;:::-;31759:31;;31811:25;31827:8;31811:25;:::i;:::-;31799:37;;31855:104;31892:66;31882:8;31876:4;31855:104;:::i;:::-;31846:113;;31685:281;;;;:::o;31972:85::-;32017:7;32046:5;32035:16;;31972:85;;;:::o;32063:158::-;32121:9;32154:61;32172:42;32181:32;32207:5;32181:32;:::i;:::-;32172:42;:::i;:::-;32154:61;:::i;:::-;32141:74;;32063:158;;;:::o;32227:147::-;32322:45;32361:5;32322:45;:::i;:::-;32317:3;32310:58;32227:147;;:::o;32380:450::-;32533:4;32571:2;32560:9;32556:18;32548:26;;32584:71;32652:1;32641:9;32637:17;32628:6;32584:71;:::i;:::-;32665:80;32741:2;32730:9;32726:18;32717:6;32665:80;:::i;:::-;32755:68;32819:2;32808:9;32804:18;32795:6;32755:68;:::i;:::-;32380:450;;;;;;:::o;32836:167::-;32873:3;32896:22;32912:5;32896:22;:::i;:::-;32887:31;;32940:4;32933:5;32930:15;32927:41;;32948:18;;:::i;:::-;32927:41;32995:1;32988:5;32984:13;32977:20;;32836:167;;;:::o;33009:194::-;33049:4;33069:20;33087:1;33069:20;:::i;:::-;33064:25;;33103:20;33121:1;33103:20;:::i;:::-;33098:25;;33147:1;33144;33140:9;33132:17;;33171:1;33165:4;33162:11;33159:37;;;33176:18;;:::i;:::-;33159:37;33009:194;;;;:::o;33209:232::-;33349:34;33345:1;33337:6;33333:14;33326:58;33418:15;33413:2;33405:6;33401:15;33394:40;33209:232;:::o;33447:366::-;33589:3;33610:67;33674:2;33669:3;33610:67;:::i;:::-;33603:74;;33686:93;33775:3;33686:93;:::i;:::-;33804:2;33799:3;33795:12;33788:19;;33447:366;;;:::o;33819:419::-;33985:4;34023:2;34012:9;34008:18;34000:26;;34072:9;34066:4;34062:20;34058:1;34047:9;34043:17;34036:47;34100:131;34226:4;34100:131;:::i;:::-;34092:139;;33819:419;;;:::o;34244:244::-;34384:34;34380:1;34372:6;34368:14;34361:58;34453:27;34448:2;34440:6;34436:15;34429:52;34244:244;:::o;34494:366::-;34636:3;34657:67;34721:2;34716:3;34657:67;:::i;:::-;34650:74;;34733:93;34822:3;34733:93;:::i;:::-;34851:2;34846:3;34842:12;34835:19;;34494:366;;;:::o;34866:419::-;35032:4;35070:2;35059:9;35055:18;35047:26;;35119:9;35113:4;35109:20;35105:1;35094:9;35090:17;35083:47;35147:131;35273:4;35147:131;:::i;:::-;35139:139;;34866:419;;;:::o

Swarm Source

ipfs://7226da0fcd9f7e28555f61f0fbe207d5633374a1f46381428c647124b4ee32c0
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.