ETH Price: $3,812.98 (+4.36%)

Token

ERC-20: Computronium Coin (CPTM)
 

Overview

Max Total Supply

1,000,000,000 CPTM

Holders

15

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
586.78183126636282577 CPTM

Value
$0.00
0x000000fee13a103a10d593b9ae06b3e05f2e7e1c
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:
ComputroniumCoin

Compiler Version
v0.8.24+commit.e11b9ed9

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-contracts/v4.8.0/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-contracts/v4.8.0/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-contracts/v4.8.0/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

// File: https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-contracts/v4.8.0/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    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;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    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;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: https://raw.githubusercontent.com/OpenZeppelin/openzeppelin-contracts/v4.8.0/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

// File: contracts/ComputroniumCoin.sol


pragma solidity ^0.8.24;

// Import OpenZeppelin contracts



// Interface for Layer 2 bridge
interface ILayer2Bridge {
    function depositToLayer2(address user, uint256 amount) external;
    function withdrawFromLayer2(address user, uint256 amount) external;
}

contract ComputroniumCoin is ERC20, Ownable {
    uint256 public constant INITIAL_SUPPLY = 1_000_000_000 * 10 ** 18; // 1 billion tokens
    ILayer2Bridge public layer2Bridge;

    // Define Structs
    struct Stake {
        uint256 amount;      // The amount of tokens staked
        uint256 startTime;   // The timestamp when staking started
    }

    struct Proposal {
        uint id;
        string description;
        uint votesFor;
        uint votesAgainst;
        bool executed;
        address proposer;
    }

    struct TrainingSession {
        uint sessionId;
        address requester;
        uint256 tokensSpent;
        uint256 computationalPowerUsed;
        string modelDescription;
        bool completed;
    }

    struct DataTransaction {
        uint transactionId;
        address buyer;
        address seller;
        uint256 price;
        string dataDescription;
        bool completed;
    }

    struct ResourcePool {
        uint poolId;
        address[] contributors;
        mapping(address => uint256) contributions;
        uint256 totalTokens;
        bool active;
    }

    // Mappings and Counters
    mapping(uint => Proposal) public proposals;
    uint public proposalCount;

    mapping(address => Stake) public stakes;
    mapping(address => uint256) public reputation;

    mapping(uint => TrainingSession) public trainingSessions;
    uint public trainingSessionCount;

    mapping(uint => DataTransaction) public dataTransactions;
    uint public dataTransactionCount;

    mapping(uint => ResourcePool) public resourcePools;
    uint public resourcePoolCount;

    // Events
    event Staked(address indexed user, uint256 amount);
    event Unstaked(address indexed user, uint256 amount);
    event DataPurchased(address indexed buyer, string dataDescription);
    event DepositedToLayer2(address indexed user, uint256 amount);
    event WithdrawnFromLayer2(address indexed user, uint256 amount);
    event ProposalCreated(uint proposalId, string description, address proposer);
    event Voted(uint proposalId, address voter, bool support, uint weight);
    event ProposalExecuted(uint proposalId, bool success);
    event TrainingSessionStarted(uint sessionId, address requester, uint256 tokensSpent, string modelDescription);
    event TrainingSessionCompleted(uint sessionId, uint256 computationalPowerUsed);
    event DataTransactionCreated(uint transactionId, address buyer, address seller, uint256 price, string dataDescription);
    event ResourcePoolCreated(uint poolId, address[] contributors, uint256 totalTokens);
    event ResourcePoolDistributed(uint poolId);

    // Constructor
    constructor(address _layer2BridgeAddress) ERC20("Computronium Coin", "CPTM") {
        _mint(msg.sender, INITIAL_SUPPLY); // Mint all tokens to the deployer
        layer2Bridge = ILayer2Bridge(_layer2BridgeAddress); // Initialize Layer 2 Bridge address
    }

    // Stake tokens to earn rewards and enhance reputation
    function stakeTokens(uint256 _amount) external {
        require(_amount > 0, "Cannot stake zero tokens");
        require(balanceOf(msg.sender) >= _amount, "Insufficient balance to stake");
        require(stakes[msg.sender].amount == 0, "Already staking"); // Prevent multiple stakes

        _transfer(msg.sender, address(this), _amount);
        stakes[msg.sender] = Stake(_amount, block.timestamp);
        reputation[msg.sender] += _amount / 1e18; // Simple reputation calculation

        emit Staked(msg.sender, _amount);
    }

    // Unstake tokens and withdraw rewards
    function unstakeTokens() external {
        Stake storage userStake = stakes[msg.sender];
        require(userStake.amount > 0, "No tokens staked");

        uint256 stakedAmount = userStake.amount;
        uint256 stakingDuration = block.timestamp - userStake.startTime;
        uint256 reward = calculateReward(stakedAmount, stakingDuration);

        // Reset stake before external calls to prevent reentrancy
        userStake.amount = 0;
        userStake.startTime = 0;

        _mint(msg.sender, reward); // Mint rewards to the user
        _transfer(address(this), msg.sender, stakedAmount); // Return staked tokens

        emit Unstaked(msg.sender, stakedAmount);
    }

    // Calculate staking rewards based on staked amount and duration
    function calculateReward(uint256 _amount, uint256 _duration) internal pure returns (uint256) {
        uint256 rewardRate = 10; // Example reward rate of 10% annually
        return (_amount * rewardRate * _duration) / (365 days * 100);
    }

    // Voting Functions
    function createProposal(string memory description) public {
        require(bytes(description).length > 0, "Description cannot be empty");
        proposals[proposalCount] = Proposal(proposalCount, description, 0, 0, false, msg.sender);
        emit ProposalCreated(proposalCount, description, msg.sender);
        proposalCount++;
    }

    function vote(uint proposalId, bool support) public {
        require(proposalId < proposalCount, "Invalid proposal ID");
        require(balanceOf(msg.sender) > 0, "Must hold tokens to vote");

        Proposal storage proposal = proposals[proposalId];
        require(!proposal.executed, "Proposal already executed");

        uint voteWeight = balanceOf(msg.sender);
        if (support) {
            proposal.votesFor += voteWeight;
        } else {
            proposal.votesAgainst += voteWeight;
        }

        emit Voted(proposalId, msg.sender, support, voteWeight);
    }

    function executeProposal(uint proposalId) public {
        require(proposalId < proposalCount, "Invalid proposal ID");

        Proposal storage proposal = proposals[proposalId];
        require(!proposal.executed, "Proposal already executed");
        require(proposal.votesFor > proposal.votesAgainst, "Proposal rejected");

        proposal.executed = true;

        emit ProposalExecuted(proposalId, true);

        // Add execution logic here (e.g., fund transfers or DAO actions)
    }

    // AI Model Training
    function startTrainingSession(string memory modelDescription, uint256 tokens) external {
        require(tokens > 0, "Tokens must be greater than zero");
        require(balanceOf(msg.sender) >= tokens, "Insufficient balance to start training session");

        _transfer(msg.sender, address(this), tokens);

        trainingSessions[trainingSessionCount] = TrainingSession({
            sessionId: trainingSessionCount,
            requester: msg.sender,
            tokensSpent: tokens,
            computationalPowerUsed: 0,
            modelDescription: modelDescription,
            completed: false
        });

        emit TrainingSessionStarted(trainingSessionCount, msg.sender, tokens, modelDescription);

        trainingSessionCount++;
    }

    // Data Exchange
    function createDataTransaction(address seller, uint256 price, string memory dataDescription) external {
        require(price > 0, "Price must be greater than zero");
        require(balanceOf(msg.sender) >= price, "Insufficient balance to purchase data");

        _transfer(msg.sender, seller, price);

        dataTransactions[dataTransactionCount] = DataTransaction({
            transactionId: dataTransactionCount,
            buyer: msg.sender,
            seller: seller,
            price: price,
            dataDescription: dataDescription,
            completed: true
        });

        emit DataTransactionCreated(dataTransactionCount, msg.sender, seller, price, dataDescription);

        dataTransactionCount++;
    }

    // Burn tokens
    function burnTokens(uint256 _amount) external {
        require(balanceOf(msg.sender) >= _amount, "Insufficient balance to burn tokens");
        _burn(msg.sender, _amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_layer2BridgeAddress","type":"address"}],"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":"buyer","type":"address"},{"indexed":false,"internalType":"string","name":"dataDescription","type":"string"}],"name":"DataPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"transactionId","type":"uint256"},{"indexed":false,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"address","name":"seller","type":"address"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"},{"indexed":false,"internalType":"string","name":"dataDescription","type":"string"}],"name":"DataTransactionCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DepositedToLayer2","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":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"string","name":"description","type":"string"},{"indexed":false,"internalType":"address","name":"proposer","type":"address"}],"name":"ProposalCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"ProposalExecuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"contributors","type":"address[]"},{"indexed":false,"internalType":"uint256","name":"totalTokens","type":"uint256"}],"name":"ResourcePoolCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"poolId","type":"uint256"}],"name":"ResourcePoolDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sessionId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"computationalPowerUsed","type":"uint256"}],"name":"TrainingSessionCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sessionId","type":"uint256"},{"indexed":false,"internalType":"address","name":"requester","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensSpent","type":"uint256"},{"indexed":false,"internalType":"string","name":"modelDescription","type":"string"}],"name":"TrainingSessionStarted","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Unstaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"proposalId","type":"uint256"},{"indexed":false,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"bool","name":"support","type":"bool"},{"indexed":false,"internalType":"uint256","name":"weight","type":"uint256"}],"name":"Voted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawnFromLayer2","type":"event"},{"inputs":[],"name":"INITIAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"string","name":"dataDescription","type":"string"}],"name":"createDataTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"description","type":"string"}],"name":"createProposal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dataTransactionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"dataTransactions","outputs":[{"internalType":"uint256","name":"transactionId","type":"uint256"},{"internalType":"address","name":"buyer","type":"address"},{"internalType":"address","name":"seller","type":"address"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"string","name":"dataDescription","type":"string"},{"internalType":"bool","name":"completed","type":"bool"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"proposalId","type":"uint256"}],"name":"executeProposal","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":"layer2Bridge","outputs":[{"internalType":"contract ILayer2Bridge","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"proposalCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"proposals","outputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"string","name":"description","type":"string"},{"internalType":"uint256","name":"votesFor","type":"uint256"},{"internalType":"uint256","name":"votesAgainst","type":"uint256"},{"internalType":"bool","name":"executed","type":"bool"},{"internalType":"address","name":"proposer","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reputation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"resourcePoolCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"resourcePools","outputs":[{"internalType":"uint256","name":"poolId","type":"uint256"},{"internalType":"uint256","name":"totalTokens","type":"uint256"},{"internalType":"bool","name":"active","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"stakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakes","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"modelDescription","type":"string"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"startTrainingSession","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":[],"name":"trainingSessionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"trainingSessions","outputs":[{"internalType":"uint256","name":"sessionId","type":"uint256"},{"internalType":"address","name":"requester","type":"address"},{"internalType":"uint256","name":"tokensSpent","type":"uint256"},{"internalType":"uint256","name":"computationalPowerUsed","type":"uint256"},{"internalType":"string","name":"modelDescription","type":"string"},{"internalType":"bool","name":"completed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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"},{"inputs":[],"name":"unstakeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"proposalId","type":"uint256"},{"internalType":"bool","name":"support","type":"bool"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801562000010575f80fd5b5060405162004604380380620046048339818101604052810190620000369190620003eb565b6040518060400160405280601181526020017f436f6d707574726f6e69756d20436f696e0000000000000000000000000000008152506040518060400160405280600481526020017f4350544d000000000000000000000000000000000000000000000000000000008152508160039081620000b391906200067f565b508060049081620000c591906200067f565b505050620000e8620000dc6200014d60201b60201c565b6200015460201b60201c565b62000106336b033b2e3c9fd0803ce80000006200021760201b60201c565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000874565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000288576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200027f90620007c1565b60405180910390fd5b6200029b5f83836200037c60201b60201c565b8060025f828254620002ae91906200080e565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200035d919062000859565b60405180910390a3620003785f83836200038160201b60201c565b5050565b505050565b505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620003b5826200038a565b9050919050565b620003c781620003a9565b8114620003d2575f80fd5b50565b5f81519050620003e581620003bc565b92915050565b5f6020828403121562000403576200040262000386565b5b5f6200041284828501620003d5565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200049757607f821691505b602082108103620004ad57620004ac62000452565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620005117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004d4565b6200051d8683620004d4565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000567620005616200055b8462000535565b6200053e565b62000535565b9050919050565b5f819050919050565b620005828362000547565b6200059a62000591826200056e565b848454620004e0565b825550505050565b5f90565b620005b0620005a2565b620005bd81848462000577565b505050565b5b81811015620005e457620005d85f82620005a6565b600181019050620005c3565b5050565b601f8211156200063357620005fd81620004b3565b6200060884620004c5565b8101602085101562000618578190505b620006306200062785620004c5565b830182620005c2565b50505b505050565b5f82821c905092915050565b5f620006555f198460080262000638565b1980831691505092915050565b5f6200066f838362000644565b9150826002028217905092915050565b6200068a826200041b565b67ffffffffffffffff811115620006a657620006a562000425565b5b620006b282546200047f565b620006bf828285620005e8565b5f60209050601f831160018114620006f5575f8415620006e0578287015190505b620006ec858262000662565b8655506200075b565b601f1984166200070586620004b3565b5f5b828110156200072e5784890151825560018201915060208501945060208101905062000707565b868310156200074e57848901516200074a601f89168262000644565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620007a9601f8362000763565b9150620007b68262000773565b602082019050919050565b5f6020820190508181035f830152620007da816200079b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200081a8262000535565b9150620008278362000535565b9250828201905080821115620008425762000841620007e1565b5b92915050565b620008538162000535565b82525050565b5f6020820190506200086e5f83018462000848565b92915050565b613d8280620008825f395ff3fe608060405234801561000f575f80fd5b5060043610610204575f3560e01c8063715018a611610118578063a9059cbb116100ab578063da35c6641161007a578063da35c664146105f7578063dd62ed3e14610615578063ece0977914610645578063f2fde38b1461067a578063fae6db631461069657610204565b8063a9059cbb1461055d578063b9f794511461058d578063c9d27afe146105bd578063cb5643c1146105d957610204565b80638da5cb5b116100e75780638da5cb5b146104e757806395d89b4114610505578063a457c2d714610523578063a5ce413b1461055357610204565b8063715018a6146104875780637447a5ca14610491578063746ea75a146104ad5780637547c7a3146104cb57610204565b80632ff2e9dc1161019b57806349c2a1a61161016a57806349c2a1a6146103e35780634cb6c677146103ff5780636c4438311461041d5780636d1b229d1461043b57806370a082311461045757610204565b80632ff2e9dc14610342578063313ce56714610360578063395093511461037e5780633b444a77146103ae57610204565b806316934fc4116101d757806316934fc4146102a757806318160ddd146102d857806323b872dd146102f6578063296fcfb71461032657610204565b8063013cf08b1461020857806306fdde031461023d578063095ea7b31461025b5780630d61b5191461028b575b5f80fd5b610222600480360381019061021d91906123f4565b6106c8565b60405161023496959493929190612511565b60405180910390f35b6102456107b2565b6040516102529190612577565b60405180910390f35b610275600480360381019061027091906125c1565b610842565b60405161028291906125ff565b60405180910390f35b6102a560048036038101906102a091906123f4565b610864565b005b6102c160048036038101906102bc9190612618565b6109b1565b6040516102cf929190612643565b60405180910390f35b6102e06109d1565b6040516102ed919061266a565b60405180910390f35b610310600480360381019061030b9190612683565b6109da565b60405161031d91906125ff565b60405180910390f35b610340600480360381019061033b91906127ff565b610a08565b005b61034a610c44565b604051610357919061266a565b60405180910390f35b610368610c54565b6040516103759190612886565b60405180910390f35b610398600480360381019061039391906125c1565b610c5c565b6040516103a591906125ff565b60405180910390f35b6103c860048036038101906103c391906123f4565b610c92565b6040516103da9695949392919061289f565b60405180910390f35b6103fd60048036038101906103f89190612905565b610d9a565b005b610407610f29565b604051610414919061266a565b60405180910390f35b610425610f2f565b604051610432919061266a565b60405180910390f35b610455600480360381019061045091906123f4565b610f35565b005b610471600480360381019061046c9190612618565b610f8d565b60405161047e919061266a565b60405180910390f35b61048f610fd2565b005b6104ab60048036038101906104a6919061294c565b610fe5565b005b6104b56111cb565b6040516104c29190612a01565b60405180910390f35b6104e560048036038101906104e091906123f4565b6111f0565b005b6104ef611427565b6040516104fc9190612a1a565b60405180910390f35b61050d61144f565b60405161051a9190612577565b60405180910390f35b61053d600480360381019061053891906125c1565b6114df565b60405161054a91906125ff565b60405180910390f35b61055b611554565b005b610577600480360381019061057291906125c1565b61167a565b60405161058491906125ff565b60405180910390f35b6105a760048036038101906105a29190612618565b61169c565b6040516105b4919061266a565b60405180910390f35b6105d760048036038101906105d29190612a5d565b6116b1565b005b6105e1611833565b6040516105ee919061266a565b60405180910390f35b6105ff611839565b60405161060c919061266a565b60405180910390f35b61062f600480360381019061062a9190612a9b565b61183f565b60405161063c919061266a565b60405180910390f35b61065f600480360381019061065a91906123f4565b6118c1565b60405161067196959493929190612ad9565b60405180910390f35b610694600480360381019061068f9190612618565b6119aa565b005b6106b060048036038101906106ab91906123f4565b611a2c565b6040516106bf93929190612b3f565b60405180910390f35b6007602052805f5260405f205f91509050805f0154908060010180546106ed90612ba1565b80601f016020809104026020016040519081016040528092919081815260200182805461071990612ba1565b80156107645780601f1061073b57610100808354040283529160200191610764565b820191905f5260205f20905b81548152906001019060200180831161074757829003601f168201915b505050505090806002015490806003015490806004015f9054906101000a900460ff16908060040160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905086565b6060600380546107c190612ba1565b80601f01602080910402602001604051908101604052809291908181526020018280546107ed90612ba1565b80156108385780601f1061080f57610100808354040283529160200191610838565b820191905f5260205f20905b81548152906001019060200180831161081b57829003601f168201915b5050505050905090565b5f8061084c611a5e565b9050610859818585611a65565b600191505092915050565b60085481106108a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089f90612c1b565b60405180910390fd5b5f60075f8381526020019081526020015f209050806004015f9054906101000a900460ff161561090d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090490612c83565b60405180910390fd5b8060030154816002015411610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e90612ceb565b60405180910390fd5b6001816004015f6101000a81548160ff0219169083151502179055507f948f4a9cd986f1118c3fbd459f7a22b23c0693e1ca3ef06a6a8be5aa7d39cc038260016040516109a5929190612d09565b60405180910390a15050565b6009602052805f5260405f205f91509050805f0154908060010154905082565b5f600254905090565b5f806109e4611a5e565b90506109f1858285611c28565b6109fc858585611cb3565b60019150509392505050565b5f8211610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190612d7a565b60405180910390fd5b81610a5433610f8d565b1015610a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8c90612e08565b60405180910390fd5b610aa0338484611cb3565b6040518060c00160405280600e5481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200160011515815250600d5f600e5481526020019081526020015f205f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004019081610bc49190612fba565b5060a0820151816005015f6101000a81548160ff0219169083151502179055509050507f48152baa82ce7c3f6550439782304b18fe4d4d7f4ba96e73d10bb71d2a5843b9600e5433858585604051610c20959493929190613089565b60405180910390a1600e5f815480929190610c3a9061310e565b9190505550505050565b6b033b2e3c9fd0803ce800000081565b5f6012905090565b5f80610c66611a5e565b9050610c87818585610c78858961183f565b610c829190613155565b611a65565b600191505092915050565b600d602052805f5260405f205f91509050805f015490806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806004018054610d0790612ba1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3390612ba1565b8015610d7e5780601f10610d5557610100808354040283529160200191610d7e565b820191905f5260205f20905b815481529060010190602001808311610d6157829003601f168201915b505050505090806005015f9054906101000a900460ff16905086565b5f815111610ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd4906131d2565b60405180910390fd5b6040518060c0016040528060085481526020018281526020015f81526020015f81526020015f151581526020013373ffffffffffffffffffffffffffffffffffffffff1681525060075f60085481526020019081526020015f205f820151815f01556020820151816001019081610e549190612fba565b5060408201518160020155606082015181600301556080820151816004015f6101000a81548160ff02191690831515021790555060a08201518160040160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fc8c078bfee58e5822588f08b4509ed1eb5058e03f666cca84dd2d44bf5c288a86008548233604051610f07939291906131f0565b60405180910390a160085f815480929190610f219061310e565b919050555050565b60105481565b600c5481565b80610f3f33610f8d565b1015610f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f779061329c565b60405180910390fd5b610f8a3382611f1f565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610fda6120e2565b610fe35f612160565b565b5f8111611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e90613304565b60405180910390fd5b8061103133610f8d565b1015611072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106990613392565b60405180910390fd5b61107d333083611cb3565b6040518060c00160405280600c5481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020015f81526020018381526020015f1515815250600b5f600c5481526020019081526020015f205f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030155608082015181600401908161114e9190612fba565b5060a0820151816005015f6101000a81548160ff0219169083151502179055509050507f9d3346b8fc754582d3b3dd3a9469f8e715f2be08802b30fa32575704903c252a600c543383856040516111a894939291906133b0565b60405180910390a1600c5f8154809291906111c29061310e565b91905055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8111611232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122990613444565b60405180910390fd5b8061123c33610f8d565b101561127d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611274906134ac565b60405180910390fd5b5f60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154146112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590613514565b60405180910390fd5b611309333083611cb3565b60405180604001604052808281526020014281525060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015560208201518160010155905050670de0b6b3a764000081611384919061355f565b600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546113cf9190613155565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d8260405161141c919061266a565b60405180910390a250565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461145e90612ba1565b80601f016020809104026020016040519081016040528092919081815260200182805461148a90612ba1565b80156114d55780601f106114ac576101008083540402835291602001916114d5565b820191905f5260205f20905b8154815290600101906020018083116114b857829003601f168201915b5050505050905090565b5f806114e9611a5e565b90505f6114f6828661183f565b90508381101561153b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611532906135ff565b60405180910390fd5b6115488286868403611a65565b60019250505092915050565b5f60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f815f0154116115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d090613667565b60405180910390fd5b5f815f015490505f8260010154426115f19190613685565b90505f6115fe8383612223565b90505f845f01819055505f846001018190555061161b3382612258565b611626303385611cb3565b3373ffffffffffffffffffffffffffffffffffffffff167f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f758460405161166c919061266a565b60405180910390a250505050565b5f80611684611a5e565b9050611691818585611cb3565b600191505092915050565b600a602052805f5260405f205f915090505481565b60085482106116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90612c1b565b60405180910390fd5b5f6116ff33610f8d565b1161173f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173690613702565b60405180910390fd5b5f60075f8481526020019081526020015f209050806004015f9054906101000a900460ff16156117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b90612c83565b60405180910390fd5b5f6117ae33610f8d565b905082156117d55780826002015f8282546117c99190613155565b925050819055506117f0565b80826003015f8282546117e89190613155565b925050819055505b7f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b5843385846040516118259493929190613720565b60405180910390a150505050565b600e5481565b60085481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b602052805f5260405f205f91509050805f015490806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201549080600301549080600401805461191790612ba1565b80601f016020809104026020016040519081016040528092919081815260200182805461194390612ba1565b801561198e5780601f106119655761010080835404028352916020019161198e565b820191905f5260205f20905b81548152906001019060200180831161197157829003601f168201915b505050505090806005015f9054906101000a900460ff16905086565b6119b26120e2565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a17906137d3565b60405180910390fd5b611a2981612160565b50565b600f602052805f5260405f205f91509050805f015490806003015490806004015f9054906101000a900460ff16905083565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aca90613861565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b38906138ef565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c1b919061266a565b60405180910390a3505050565b5f611c33848461183f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611cad5781811015611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9690613957565b60405180910390fd5b611cac8484848403611a65565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d18906139e5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8690613a73565b60405180910390fd5b611d9a8383836123a6565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1490613b01565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f06919061266a565b60405180910390a3611f198484846123ab565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8490613b8f565b60405180910390fd5b611f98825f836123a6565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561201b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201290613c1d565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120ca919061266a565b60405180910390a36120dd835f846123ab565b505050565b6120ea611a5e565b73ffffffffffffffffffffffffffffffffffffffff16612108611427565b73ffffffffffffffffffffffffffffffffffffffff161461215e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215590613c85565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80600a905063bbf81e0083828661223b9190613ca3565b6122459190613ca3565b61224f919061355f565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd90613d2e565b60405180910390fd5b6122d15f83836123a6565b8060025f8282546122e29190613155565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161238f919061266a565b60405180910390a36123a25f83836123ab565b5050565b505050565b505050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b6123d3816123c1565b81146123dd575f80fd5b50565b5f813590506123ee816123ca565b92915050565b5f60208284031215612409576124086123b9565b5b5f612416848285016123e0565b91505092915050565b612428816123c1565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561246557808201518184015260208101905061244a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61248a8261242e565b6124948185612438565b93506124a4818560208601612448565b6124ad81612470565b840191505092915050565b5f8115159050919050565b6124cc816124b8565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124fb826124d2565b9050919050565b61250b816124f1565b82525050565b5f60c0820190506125245f83018961241f565b81810360208301526125368188612480565b9050612545604083018761241f565b612552606083018661241f565b61255f60808301856124c3565b61256c60a0830184612502565b979650505050505050565b5f6020820190508181035f83015261258f8184612480565b905092915050565b6125a0816124f1565b81146125aa575f80fd5b50565b5f813590506125bb81612597565b92915050565b5f80604083850312156125d7576125d66123b9565b5b5f6125e4858286016125ad565b92505060206125f5858286016123e0565b9150509250929050565b5f6020820190506126125f8301846124c3565b92915050565b5f6020828403121561262d5761262c6123b9565b5b5f61263a848285016125ad565b91505092915050565b5f6040820190506126565f83018561241f565b612663602083018461241f565b9392505050565b5f60208201905061267d5f83018461241f565b92915050565b5f805f6060848603121561269a576126996123b9565b5b5f6126a7868287016125ad565b93505060206126b8868287016125ad565b92505060406126c9868287016123e0565b9150509250925092565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61271182612470565b810181811067ffffffffffffffff821117156127305761272f6126db565b5b80604052505050565b5f6127426123b0565b905061274e8282612708565b919050565b5f67ffffffffffffffff82111561276d5761276c6126db565b5b61277682612470565b9050602081019050919050565b828183375f83830152505050565b5f6127a361279e84612753565b612739565b9050828152602081018484840111156127bf576127be6126d7565b5b6127ca848285612783565b509392505050565b5f82601f8301126127e6576127e56126d3565b5b81356127f6848260208601612791565b91505092915050565b5f805f60608486031215612816576128156123b9565b5b5f612823868287016125ad565b9350506020612834868287016123e0565b925050604084013567ffffffffffffffff811115612855576128546123bd565b5b612861868287016127d2565b9150509250925092565b5f60ff82169050919050565b6128808161286b565b82525050565b5f6020820190506128995f830184612877565b92915050565b5f60c0820190506128b25f83018961241f565b6128bf6020830188612502565b6128cc6040830187612502565b6128d9606083018661241f565b81810360808301526128eb8185612480565b90506128fa60a08301846124c3565b979650505050505050565b5f6020828403121561291a576129196123b9565b5b5f82013567ffffffffffffffff811115612937576129366123bd565b5b612943848285016127d2565b91505092915050565b5f8060408385031215612962576129616123b9565b5b5f83013567ffffffffffffffff81111561297f5761297e6123bd565b5b61298b858286016127d2565b925050602061299c858286016123e0565b9150509250929050565b5f819050919050565b5f6129c96129c46129bf846124d2565b6129a6565b6124d2565b9050919050565b5f6129da826129af565b9050919050565b5f6129eb826129d0565b9050919050565b6129fb816129e1565b82525050565b5f602082019050612a145f8301846129f2565b92915050565b5f602082019050612a2d5f830184612502565b92915050565b612a3c816124b8565b8114612a46575f80fd5b50565b5f81359050612a5781612a33565b92915050565b5f8060408385031215612a7357612a726123b9565b5b5f612a80858286016123e0565b9250506020612a9185828601612a49565b9150509250929050565b5f8060408385031215612ab157612ab06123b9565b5b5f612abe858286016125ad565b9250506020612acf858286016125ad565b9150509250929050565b5f60c082019050612aec5f83018961241f565b612af96020830188612502565b612b06604083018761241f565b612b13606083018661241f565b8181036080830152612b258185612480565b9050612b3460a08301846124c3565b979650505050505050565b5f606082019050612b525f83018661241f565b612b5f602083018561241f565b612b6c60408301846124c3565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612bb857607f821691505b602082108103612bcb57612bca612b74565b5b50919050565b7f496e76616c69642070726f706f73616c204944000000000000000000000000005f82015250565b5f612c05601383612438565b9150612c1082612bd1565b602082019050919050565b5f6020820190508181035f830152612c3281612bf9565b9050919050565b7f50726f706f73616c20616c7265616479206578656375746564000000000000005f82015250565b5f612c6d601983612438565b9150612c7882612c39565b602082019050919050565b5f6020820190508181035f830152612c9a81612c61565b9050919050565b7f50726f706f73616c2072656a65637465640000000000000000000000000000005f82015250565b5f612cd5601183612438565b9150612ce082612ca1565b602082019050919050565b5f6020820190508181035f830152612d0281612cc9565b9050919050565b5f604082019050612d1c5f83018561241f565b612d2960208301846124c3565b9392505050565b7f5072696365206d7573742062652067726561746572207468616e207a65726f005f82015250565b5f612d64601f83612438565b9150612d6f82612d30565b602082019050919050565b5f6020820190508181035f830152612d9181612d58565b9050919050565b7f496e73756666696369656e742062616c616e636520746f2070757263686173655f8201527f2064617461000000000000000000000000000000000000000000000000000000602082015250565b5f612df2602583612438565b9150612dfd82612d98565b604082019050919050565b5f6020820190508181035f830152612e1f81612de6565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612e827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612e47565b612e8c8683612e47565b95508019841693508086168417925050509392505050565b5f612ebe612eb9612eb4846123c1565b6129a6565b6123c1565b9050919050565b5f819050919050565b612ed783612ea4565b612eeb612ee382612ec5565b848454612e53565b825550505050565b5f90565b612eff612ef3565b612f0a818484612ece565b505050565b5b81811015612f2d57612f225f82612ef7565b600181019050612f10565b5050565b601f821115612f7257612f4381612e26565b612f4c84612e38565b81016020851015612f5b578190505b612f6f612f6785612e38565b830182612f0f565b50505b505050565b5f82821c905092915050565b5f612f925f1984600802612f77565b1980831691505092915050565b5f612faa8383612f83565b9150826002028217905092915050565b612fc38261242e565b67ffffffffffffffff811115612fdc57612fdb6126db565b5b612fe68254612ba1565b612ff1828285612f31565b5f60209050601f831160018114613022575f8415613010578287015190505b61301a8582612f9f565b865550613081565b601f19841661303086612e26565b5f5b8281101561305757848901518255600182019150602085019450602081019050613032565b868310156130745784890151613070601f891682612f83565b8355505b6001600288020188555050505b505050505050565b5f60a08201905061309c5f83018861241f565b6130a96020830187612502565b6130b66040830186612502565b6130c3606083018561241f565b81810360808301526130d58184612480565b90509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613118826123c1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361314a576131496130e1565b5b600182019050919050565b5f61315f826123c1565b915061316a836123c1565b9250828201905080821115613182576131816130e1565b5b92915050565b7f4465736372697074696f6e2063616e6e6f7420626520656d70747900000000005f82015250565b5f6131bc601b83612438565b91506131c782613188565b602082019050919050565b5f6020820190508181035f8301526131e9816131b0565b9050919050565b5f6060820190506132035f83018661241f565b81810360208301526132158185612480565b90506132246040830184612502565b949350505050565b7f496e73756666696369656e742062616c616e636520746f206275726e20746f6b5f8201527f656e730000000000000000000000000000000000000000000000000000000000602082015250565b5f613286602383612438565b91506132918261322c565b604082019050919050565b5f6020820190508181035f8301526132b38161327a565b9050919050565b7f546f6b656e73206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f6132ee602083612438565b91506132f9826132ba565b602082019050919050565b5f6020820190508181035f83015261331b816132e2565b9050919050565b7f496e73756666696369656e742062616c616e636520746f2073746172742074725f8201527f61696e696e672073657373696f6e000000000000000000000000000000000000602082015250565b5f61337c602e83612438565b915061338782613322565b604082019050919050565b5f6020820190508181035f8301526133a981613370565b9050919050565b5f6080820190506133c35f83018761241f565b6133d06020830186612502565b6133dd604083018561241f565b81810360608301526133ef8184612480565b905095945050505050565b7f43616e6e6f74207374616b65207a65726f20746f6b656e7300000000000000005f82015250565b5f61342e601883612438565b9150613439826133fa565b602082019050919050565b5f6020820190508181035f83015261345b81613422565b9050919050565b7f496e73756666696369656e742062616c616e636520746f207374616b650000005f82015250565b5f613496601d83612438565b91506134a182613462565b602082019050919050565b5f6020820190508181035f8301526134c38161348a565b9050919050565b7f416c7265616479207374616b696e6700000000000000000000000000000000005f82015250565b5f6134fe600f83612438565b9150613509826134ca565b602082019050919050565b5f6020820190508181035f83015261352b816134f2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613569826123c1565b9150613574836123c1565b92508261358457613583613532565b5b828204905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6135e9602583612438565b91506135f48261358f565b604082019050919050565b5f6020820190508181035f830152613616816135dd565b9050919050565b7f4e6f20746f6b656e73207374616b6564000000000000000000000000000000005f82015250565b5f613651601083612438565b915061365c8261361d565b602082019050919050565b5f6020820190508181035f83015261367e81613645565b9050919050565b5f61368f826123c1565b915061369a836123c1565b92508282039050818111156136b2576136b16130e1565b5b92915050565b7f4d75737420686f6c6420746f6b656e7320746f20766f746500000000000000005f82015250565b5f6136ec601883612438565b91506136f7826136b8565b602082019050919050565b5f6020820190508181035f830152613719816136e0565b9050919050565b5f6080820190506137335f83018761241f565b6137406020830186612502565b61374d60408301856124c3565b61375a606083018461241f565b95945050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6137bd602683612438565b91506137c882613763565b604082019050919050565b5f6020820190508181035f8301526137ea816137b1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61384b602483612438565b9150613856826137f1565b604082019050919050565b5f6020820190508181035f8301526138788161383f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6138d9602283612438565b91506138e48261387f565b604082019050919050565b5f6020820190508181035f830152613906816138cd565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613941601d83612438565b915061394c8261390d565b602082019050919050565b5f6020820190508181035f83015261396e81613935565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6139cf602583612438565b91506139da82613975565b604082019050919050565b5f6020820190508181035f8301526139fc816139c3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613a5d602383612438565b9150613a6882613a03565b604082019050919050565b5f6020820190508181035f830152613a8a81613a51565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613aeb602683612438565b9150613af682613a91565b604082019050919050565b5f6020820190508181035f830152613b1881613adf565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b79602183612438565b9150613b8482613b1f565b604082019050919050565b5f6020820190508181035f830152613ba681613b6d565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613c07602283612438565b9150613c1282613bad565b604082019050919050565b5f6020820190508181035f830152613c3481613bfb565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c6f602083612438565b9150613c7a82613c3b565b602082019050919050565b5f6020820190508181035f830152613c9c81613c63565b9050919050565b5f613cad826123c1565b9150613cb8836123c1565b9250828202613cc6816123c1565b91508282048414831517613cdd57613cdc6130e1565b5b5092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f613d18601f83612438565b9150613d2382613ce4565b602082019050919050565b5f6020820190508181035f830152613d4581613d0c565b905091905056fea264697066735822122014571edeac2ffbf194e3a67063a6a107a6f9446761d257ba2d1d4c14f51a76a764736f6c63430008180033000000000000000000000000e12e7131b3af3c090a9282439a8443e4c66ccddb

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610204575f3560e01c8063715018a611610118578063a9059cbb116100ab578063da35c6641161007a578063da35c664146105f7578063dd62ed3e14610615578063ece0977914610645578063f2fde38b1461067a578063fae6db631461069657610204565b8063a9059cbb1461055d578063b9f794511461058d578063c9d27afe146105bd578063cb5643c1146105d957610204565b80638da5cb5b116100e75780638da5cb5b146104e757806395d89b4114610505578063a457c2d714610523578063a5ce413b1461055357610204565b8063715018a6146104875780637447a5ca14610491578063746ea75a146104ad5780637547c7a3146104cb57610204565b80632ff2e9dc1161019b57806349c2a1a61161016a57806349c2a1a6146103e35780634cb6c677146103ff5780636c4438311461041d5780636d1b229d1461043b57806370a082311461045757610204565b80632ff2e9dc14610342578063313ce56714610360578063395093511461037e5780633b444a77146103ae57610204565b806316934fc4116101d757806316934fc4146102a757806318160ddd146102d857806323b872dd146102f6578063296fcfb71461032657610204565b8063013cf08b1461020857806306fdde031461023d578063095ea7b31461025b5780630d61b5191461028b575b5f80fd5b610222600480360381019061021d91906123f4565b6106c8565b60405161023496959493929190612511565b60405180910390f35b6102456107b2565b6040516102529190612577565b60405180910390f35b610275600480360381019061027091906125c1565b610842565b60405161028291906125ff565b60405180910390f35b6102a560048036038101906102a091906123f4565b610864565b005b6102c160048036038101906102bc9190612618565b6109b1565b6040516102cf929190612643565b60405180910390f35b6102e06109d1565b6040516102ed919061266a565b60405180910390f35b610310600480360381019061030b9190612683565b6109da565b60405161031d91906125ff565b60405180910390f35b610340600480360381019061033b91906127ff565b610a08565b005b61034a610c44565b604051610357919061266a565b60405180910390f35b610368610c54565b6040516103759190612886565b60405180910390f35b610398600480360381019061039391906125c1565b610c5c565b6040516103a591906125ff565b60405180910390f35b6103c860048036038101906103c391906123f4565b610c92565b6040516103da9695949392919061289f565b60405180910390f35b6103fd60048036038101906103f89190612905565b610d9a565b005b610407610f29565b604051610414919061266a565b60405180910390f35b610425610f2f565b604051610432919061266a565b60405180910390f35b610455600480360381019061045091906123f4565b610f35565b005b610471600480360381019061046c9190612618565b610f8d565b60405161047e919061266a565b60405180910390f35b61048f610fd2565b005b6104ab60048036038101906104a6919061294c565b610fe5565b005b6104b56111cb565b6040516104c29190612a01565b60405180910390f35b6104e560048036038101906104e091906123f4565b6111f0565b005b6104ef611427565b6040516104fc9190612a1a565b60405180910390f35b61050d61144f565b60405161051a9190612577565b60405180910390f35b61053d600480360381019061053891906125c1565b6114df565b60405161054a91906125ff565b60405180910390f35b61055b611554565b005b610577600480360381019061057291906125c1565b61167a565b60405161058491906125ff565b60405180910390f35b6105a760048036038101906105a29190612618565b61169c565b6040516105b4919061266a565b60405180910390f35b6105d760048036038101906105d29190612a5d565b6116b1565b005b6105e1611833565b6040516105ee919061266a565b60405180910390f35b6105ff611839565b60405161060c919061266a565b60405180910390f35b61062f600480360381019061062a9190612a9b565b61183f565b60405161063c919061266a565b60405180910390f35b61065f600480360381019061065a91906123f4565b6118c1565b60405161067196959493929190612ad9565b60405180910390f35b610694600480360381019061068f9190612618565b6119aa565b005b6106b060048036038101906106ab91906123f4565b611a2c565b6040516106bf93929190612b3f565b60405180910390f35b6007602052805f5260405f205f91509050805f0154908060010180546106ed90612ba1565b80601f016020809104026020016040519081016040528092919081815260200182805461071990612ba1565b80156107645780601f1061073b57610100808354040283529160200191610764565b820191905f5260205f20905b81548152906001019060200180831161074757829003601f168201915b505050505090806002015490806003015490806004015f9054906101000a900460ff16908060040160019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905086565b6060600380546107c190612ba1565b80601f01602080910402602001604051908101604052809291908181526020018280546107ed90612ba1565b80156108385780601f1061080f57610100808354040283529160200191610838565b820191905f5260205f20905b81548152906001019060200180831161081b57829003601f168201915b5050505050905090565b5f8061084c611a5e565b9050610859818585611a65565b600191505092915050565b60085481106108a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089f90612c1b565b60405180910390fd5b5f60075f8381526020019081526020015f209050806004015f9054906101000a900460ff161561090d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090490612c83565b60405180910390fd5b8060030154816002015411610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e90612ceb565b60405180910390fd5b6001816004015f6101000a81548160ff0219169083151502179055507f948f4a9cd986f1118c3fbd459f7a22b23c0693e1ca3ef06a6a8be5aa7d39cc038260016040516109a5929190612d09565b60405180910390a15050565b6009602052805f5260405f205f91509050805f0154908060010154905082565b5f600254905090565b5f806109e4611a5e565b90506109f1858285611c28565b6109fc858585611cb3565b60019150509392505050565b5f8211610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4190612d7a565b60405180910390fd5b81610a5433610f8d565b1015610a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8c90612e08565b60405180910390fd5b610aa0338484611cb3565b6040518060c00160405280600e5481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200182815260200160011515815250600d5f600e5481526020019081526020015f205f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550606082015181600301556080820151816004019081610bc49190612fba565b5060a0820151816005015f6101000a81548160ff0219169083151502179055509050507f48152baa82ce7c3f6550439782304b18fe4d4d7f4ba96e73d10bb71d2a5843b9600e5433858585604051610c20959493929190613089565b60405180910390a1600e5f815480929190610c3a9061310e565b9190505550505050565b6b033b2e3c9fd0803ce800000081565b5f6012905090565b5f80610c66611a5e565b9050610c87818585610c78858961183f565b610c829190613155565b611a65565b600191505092915050565b600d602052805f5260405f205f91509050805f015490806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806002015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806003015490806004018054610d0790612ba1565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3390612ba1565b8015610d7e5780601f10610d5557610100808354040283529160200191610d7e565b820191905f5260205f20905b815481529060010190602001808311610d6157829003601f168201915b505050505090806005015f9054906101000a900460ff16905086565b5f815111610ddd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd4906131d2565b60405180910390fd5b6040518060c0016040528060085481526020018281526020015f81526020015f81526020015f151581526020013373ffffffffffffffffffffffffffffffffffffffff1681525060075f60085481526020019081526020015f205f820151815f01556020820151816001019081610e549190612fba565b5060408201518160020155606082015181600301556080820151816004015f6101000a81548160ff02191690831515021790555060a08201518160040160016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509050507fc8c078bfee58e5822588f08b4509ed1eb5058e03f666cca84dd2d44bf5c288a86008548233604051610f07939291906131f0565b60405180910390a160085f815480929190610f219061310e565b919050555050565b60105481565b600c5481565b80610f3f33610f8d565b1015610f80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f779061329c565b60405180910390fd5b610f8a3382611f1f565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610fda6120e2565b610fe35f612160565b565b5f8111611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e90613304565b60405180910390fd5b8061103133610f8d565b1015611072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106990613392565b60405180910390fd5b61107d333083611cb3565b6040518060c00160405280600c5481526020013373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020015f81526020018381526020015f1515815250600b5f600c5481526020019081526020015f205f820151815f01556020820151816001015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040820151816002015560608201518160030155608082015181600401908161114e9190612fba565b5060a0820151816005015f6101000a81548160ff0219169083151502179055509050507f9d3346b8fc754582d3b3dd3a9469f8e715f2be08802b30fa32575704903c252a600c543383856040516111a894939291906133b0565b60405180910390a1600c5f8154809291906111c29061310e565b91905055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f8111611232576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122990613444565b60405180910390fd5b8061123c33610f8d565b101561127d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611274906134ac565b60405180910390fd5b5f60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154146112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590613514565b60405180910390fd5b611309333083611cb3565b60405180604001604052808281526020014281525060095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f820151815f015560208201518160010155905050670de0b6b3a764000081611384919061355f565b600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546113cf9190613155565b925050819055503373ffffffffffffffffffffffffffffffffffffffff167f9e71bc8eea02a63969f509818f2dafb9254532904319f9dbda79b67bd34a5f3d8260405161141c919061266a565b60405180910390a250565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461145e90612ba1565b80601f016020809104026020016040519081016040528092919081815260200182805461148a90612ba1565b80156114d55780601f106114ac576101008083540402835291602001916114d5565b820191905f5260205f20905b8154815290600101906020018083116114b857829003601f168201915b5050505050905090565b5f806114e9611a5e565b90505f6114f6828661183f565b90508381101561153b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611532906135ff565b60405180910390fd5b6115488286868403611a65565b60019250505092915050565b5f60095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2090505f815f0154116115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d090613667565b60405180910390fd5b5f815f015490505f8260010154426115f19190613685565b90505f6115fe8383612223565b90505f845f01819055505f846001018190555061161b3382612258565b611626303385611cb3565b3373ffffffffffffffffffffffffffffffffffffffff167f0f5bb82176feb1b5e747e28471aa92156a04d9f3ab9f45f28e2d704232b93f758460405161166c919061266a565b60405180910390a250505050565b5f80611684611a5e565b9050611691818585611cb3565b600191505092915050565b600a602052805f5260405f205f915090505481565b60085482106116f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ec90612c1b565b60405180910390fd5b5f6116ff33610f8d565b1161173f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173690613702565b60405180910390fd5b5f60075f8481526020019081526020015f209050806004015f9054906101000a900460ff16156117a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179b90612c83565b60405180910390fd5b5f6117ae33610f8d565b905082156117d55780826002015f8282546117c99190613155565b925050819055506117f0565b80826003015f8282546117e89190613155565b925050819055505b7f7c2de587c00d75474a0c6c6fa96fd3b45dc974cd4e8a75f712bb84c950dce1b5843385846040516118259493929190613720565b60405180910390a150505050565b600e5481565b60085481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600b602052805f5260405f205f91509050805f015490806001015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169080600201549080600301549080600401805461191790612ba1565b80601f016020809104026020016040519081016040528092919081815260200182805461194390612ba1565b801561198e5780601f106119655761010080835404028352916020019161198e565b820191905f5260205f20905b81548152906001019060200180831161197157829003601f168201915b505050505090806005015f9054906101000a900460ff16905086565b6119b26120e2565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a17906137d3565b60405180910390fd5b611a2981612160565b50565b600f602052805f5260405f205f91509050805f015490806003015490806004015f9054906101000a900460ff16905083565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aca90613861565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b38906138ef565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c1b919061266a565b60405180910390a3505050565b5f611c33848461183f565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611cad5781811015611c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9690613957565b60405180910390fd5b611cac8484848403611a65565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d18906139e5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8690613a73565b60405180910390fd5b611d9a8383836123a6565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1490613b01565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611f06919061266a565b60405180910390a3611f198484846123ab565b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8490613b8f565b60405180910390fd5b611f98825f836123a6565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561201b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201290613c1d565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120ca919061266a565b60405180910390a36120dd835f846123ab565b505050565b6120ea611a5e565b73ffffffffffffffffffffffffffffffffffffffff16612108611427565b73ffffffffffffffffffffffffffffffffffffffff161461215e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215590613c85565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f80600a905063bbf81e0083828661223b9190613ca3565b6122459190613ca3565b61224f919061355f565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bd90613d2e565b60405180910390fd5b6122d15f83836123a6565b8060025f8282546122e29190613155565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161238f919061266a565b60405180910390a36123a25f83836123ab565b5050565b505050565b505050565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b6123d3816123c1565b81146123dd575f80fd5b50565b5f813590506123ee816123ca565b92915050565b5f60208284031215612409576124086123b9565b5b5f612416848285016123e0565b91505092915050565b612428816123c1565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561246557808201518184015260208101905061244a565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61248a8261242e565b6124948185612438565b93506124a4818560208601612448565b6124ad81612470565b840191505092915050565b5f8115159050919050565b6124cc816124b8565b82525050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124fb826124d2565b9050919050565b61250b816124f1565b82525050565b5f60c0820190506125245f83018961241f565b81810360208301526125368188612480565b9050612545604083018761241f565b612552606083018661241f565b61255f60808301856124c3565b61256c60a0830184612502565b979650505050505050565b5f6020820190508181035f83015261258f8184612480565b905092915050565b6125a0816124f1565b81146125aa575f80fd5b50565b5f813590506125bb81612597565b92915050565b5f80604083850312156125d7576125d66123b9565b5b5f6125e4858286016125ad565b92505060206125f5858286016123e0565b9150509250929050565b5f6020820190506126125f8301846124c3565b92915050565b5f6020828403121561262d5761262c6123b9565b5b5f61263a848285016125ad565b91505092915050565b5f6040820190506126565f83018561241f565b612663602083018461241f565b9392505050565b5f60208201905061267d5f83018461241f565b92915050565b5f805f6060848603121561269a576126996123b9565b5b5f6126a7868287016125ad565b93505060206126b8868287016125ad565b92505060406126c9868287016123e0565b9150509250925092565b5f80fd5b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61271182612470565b810181811067ffffffffffffffff821117156127305761272f6126db565b5b80604052505050565b5f6127426123b0565b905061274e8282612708565b919050565b5f67ffffffffffffffff82111561276d5761276c6126db565b5b61277682612470565b9050602081019050919050565b828183375f83830152505050565b5f6127a361279e84612753565b612739565b9050828152602081018484840111156127bf576127be6126d7565b5b6127ca848285612783565b509392505050565b5f82601f8301126127e6576127e56126d3565b5b81356127f6848260208601612791565b91505092915050565b5f805f60608486031215612816576128156123b9565b5b5f612823868287016125ad565b9350506020612834868287016123e0565b925050604084013567ffffffffffffffff811115612855576128546123bd565b5b612861868287016127d2565b9150509250925092565b5f60ff82169050919050565b6128808161286b565b82525050565b5f6020820190506128995f830184612877565b92915050565b5f60c0820190506128b25f83018961241f565b6128bf6020830188612502565b6128cc6040830187612502565b6128d9606083018661241f565b81810360808301526128eb8185612480565b90506128fa60a08301846124c3565b979650505050505050565b5f6020828403121561291a576129196123b9565b5b5f82013567ffffffffffffffff811115612937576129366123bd565b5b612943848285016127d2565b91505092915050565b5f8060408385031215612962576129616123b9565b5b5f83013567ffffffffffffffff81111561297f5761297e6123bd565b5b61298b858286016127d2565b925050602061299c858286016123e0565b9150509250929050565b5f819050919050565b5f6129c96129c46129bf846124d2565b6129a6565b6124d2565b9050919050565b5f6129da826129af565b9050919050565b5f6129eb826129d0565b9050919050565b6129fb816129e1565b82525050565b5f602082019050612a145f8301846129f2565b92915050565b5f602082019050612a2d5f830184612502565b92915050565b612a3c816124b8565b8114612a46575f80fd5b50565b5f81359050612a5781612a33565b92915050565b5f8060408385031215612a7357612a726123b9565b5b5f612a80858286016123e0565b9250506020612a9185828601612a49565b9150509250929050565b5f8060408385031215612ab157612ab06123b9565b5b5f612abe858286016125ad565b9250506020612acf858286016125ad565b9150509250929050565b5f60c082019050612aec5f83018961241f565b612af96020830188612502565b612b06604083018761241f565b612b13606083018661241f565b8181036080830152612b258185612480565b9050612b3460a08301846124c3565b979650505050505050565b5f606082019050612b525f83018661241f565b612b5f602083018561241f565b612b6c60408301846124c3565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612bb857607f821691505b602082108103612bcb57612bca612b74565b5b50919050565b7f496e76616c69642070726f706f73616c204944000000000000000000000000005f82015250565b5f612c05601383612438565b9150612c1082612bd1565b602082019050919050565b5f6020820190508181035f830152612c3281612bf9565b9050919050565b7f50726f706f73616c20616c7265616479206578656375746564000000000000005f82015250565b5f612c6d601983612438565b9150612c7882612c39565b602082019050919050565b5f6020820190508181035f830152612c9a81612c61565b9050919050565b7f50726f706f73616c2072656a65637465640000000000000000000000000000005f82015250565b5f612cd5601183612438565b9150612ce082612ca1565b602082019050919050565b5f6020820190508181035f830152612d0281612cc9565b9050919050565b5f604082019050612d1c5f83018561241f565b612d2960208301846124c3565b9392505050565b7f5072696365206d7573742062652067726561746572207468616e207a65726f005f82015250565b5f612d64601f83612438565b9150612d6f82612d30565b602082019050919050565b5f6020820190508181035f830152612d9181612d58565b9050919050565b7f496e73756666696369656e742062616c616e636520746f2070757263686173655f8201527f2064617461000000000000000000000000000000000000000000000000000000602082015250565b5f612df2602583612438565b9150612dfd82612d98565b604082019050919050565b5f6020820190508181035f830152612e1f81612de6565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612e827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612e47565b612e8c8683612e47565b95508019841693508086168417925050509392505050565b5f612ebe612eb9612eb4846123c1565b6129a6565b6123c1565b9050919050565b5f819050919050565b612ed783612ea4565b612eeb612ee382612ec5565b848454612e53565b825550505050565b5f90565b612eff612ef3565b612f0a818484612ece565b505050565b5b81811015612f2d57612f225f82612ef7565b600181019050612f10565b5050565b601f821115612f7257612f4381612e26565b612f4c84612e38565b81016020851015612f5b578190505b612f6f612f6785612e38565b830182612f0f565b50505b505050565b5f82821c905092915050565b5f612f925f1984600802612f77565b1980831691505092915050565b5f612faa8383612f83565b9150826002028217905092915050565b612fc38261242e565b67ffffffffffffffff811115612fdc57612fdb6126db565b5b612fe68254612ba1565b612ff1828285612f31565b5f60209050601f831160018114613022575f8415613010578287015190505b61301a8582612f9f565b865550613081565b601f19841661303086612e26565b5f5b8281101561305757848901518255600182019150602085019450602081019050613032565b868310156130745784890151613070601f891682612f83565b8355505b6001600288020188555050505b505050505050565b5f60a08201905061309c5f83018861241f565b6130a96020830187612502565b6130b66040830186612502565b6130c3606083018561241f565b81810360808301526130d58184612480565b90509695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613118826123c1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361314a576131496130e1565b5b600182019050919050565b5f61315f826123c1565b915061316a836123c1565b9250828201905080821115613182576131816130e1565b5b92915050565b7f4465736372697074696f6e2063616e6e6f7420626520656d70747900000000005f82015250565b5f6131bc601b83612438565b91506131c782613188565b602082019050919050565b5f6020820190508181035f8301526131e9816131b0565b9050919050565b5f6060820190506132035f83018661241f565b81810360208301526132158185612480565b90506132246040830184612502565b949350505050565b7f496e73756666696369656e742062616c616e636520746f206275726e20746f6b5f8201527f656e730000000000000000000000000000000000000000000000000000000000602082015250565b5f613286602383612438565b91506132918261322c565b604082019050919050565b5f6020820190508181035f8301526132b38161327a565b9050919050565b7f546f6b656e73206d7573742062652067726561746572207468616e207a65726f5f82015250565b5f6132ee602083612438565b91506132f9826132ba565b602082019050919050565b5f6020820190508181035f83015261331b816132e2565b9050919050565b7f496e73756666696369656e742062616c616e636520746f2073746172742074725f8201527f61696e696e672073657373696f6e000000000000000000000000000000000000602082015250565b5f61337c602e83612438565b915061338782613322565b604082019050919050565b5f6020820190508181035f8301526133a981613370565b9050919050565b5f6080820190506133c35f83018761241f565b6133d06020830186612502565b6133dd604083018561241f565b81810360608301526133ef8184612480565b905095945050505050565b7f43616e6e6f74207374616b65207a65726f20746f6b656e7300000000000000005f82015250565b5f61342e601883612438565b9150613439826133fa565b602082019050919050565b5f6020820190508181035f83015261345b81613422565b9050919050565b7f496e73756666696369656e742062616c616e636520746f207374616b650000005f82015250565b5f613496601d83612438565b91506134a182613462565b602082019050919050565b5f6020820190508181035f8301526134c38161348a565b9050919050565b7f416c7265616479207374616b696e6700000000000000000000000000000000005f82015250565b5f6134fe600f83612438565b9150613509826134ca565b602082019050919050565b5f6020820190508181035f83015261352b816134f2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613569826123c1565b9150613574836123c1565b92508261358457613583613532565b5b828204905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6135e9602583612438565b91506135f48261358f565b604082019050919050565b5f6020820190508181035f830152613616816135dd565b9050919050565b7f4e6f20746f6b656e73207374616b6564000000000000000000000000000000005f82015250565b5f613651601083612438565b915061365c8261361d565b602082019050919050565b5f6020820190508181035f83015261367e81613645565b9050919050565b5f61368f826123c1565b915061369a836123c1565b92508282039050818111156136b2576136b16130e1565b5b92915050565b7f4d75737420686f6c6420746f6b656e7320746f20766f746500000000000000005f82015250565b5f6136ec601883612438565b91506136f7826136b8565b602082019050919050565b5f6020820190508181035f830152613719816136e0565b9050919050565b5f6080820190506137335f83018761241f565b6137406020830186612502565b61374d60408301856124c3565b61375a606083018461241f565b95945050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6137bd602683612438565b91506137c882613763565b604082019050919050565b5f6020820190508181035f8301526137ea816137b1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61384b602483612438565b9150613856826137f1565b604082019050919050565b5f6020820190508181035f8301526138788161383f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6138d9602283612438565b91506138e48261387f565b604082019050919050565b5f6020820190508181035f830152613906816138cd565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f613941601d83612438565b915061394c8261390d565b602082019050919050565b5f6020820190508181035f83015261396e81613935565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6139cf602583612438565b91506139da82613975565b604082019050919050565b5f6020820190508181035f8301526139fc816139c3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613a5d602383612438565b9150613a6882613a03565b604082019050919050565b5f6020820190508181035f830152613a8a81613a51565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613aeb602683612438565b9150613af682613a91565b604082019050919050565b5f6020820190508181035f830152613b1881613adf565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f613b79602183612438565b9150613b8482613b1f565b604082019050919050565b5f6020820190508181035f830152613ba681613b6d565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613c07602283612438565b9150613c1282613bad565b604082019050919050565b5f6020820190508181035f830152613c3481613bfb565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613c6f602083612438565b9150613c7a82613c3b565b602082019050919050565b5f6020820190508181035f830152613c9c81613c63565b9050919050565b5f613cad826123c1565b9150613cb8836123c1565b9250828202613cc6816123c1565b91508282048414831517613cdd57613cdc6130e1565b5b5092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f613d18601f83612438565b9150613d2382613ce4565b602082019050919050565b5f6020820190508181035f830152613d4581613d0c565b905091905056fea264697066735822122014571edeac2ffbf194e3a67063a6a107a6f9446761d257ba2d1d4c14f51a76a764736f6c63430008180033

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

000000000000000000000000e12e7131b3af3c090a9282439a8443e4c66ccddb

-----Decoded View---------------
Arg [0] : _layer2BridgeAddress (address): 0xE12E7131B3af3c090A9282439A8443E4C66cCDDb

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000e12e7131b3af3c090a9282439a8443e4c66ccddb


Deployed Bytecode Sourcemap

21175:7969:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22369:42;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;6903:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9254:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26840:503;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22452:39;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;8023:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10035:295;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28179:752;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21226:65;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7865:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10739:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22656:56;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;25882:342;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22817:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22615:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28959:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8194:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20037:103;;;:::i;:::-;;27377:772;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21318:33;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24234:545;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19389:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7122:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11480:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24831:695;;;:::i;:::-;;8527:193;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22498:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26232:600;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22719:32;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22418:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8783:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22552:56;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;20295:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22760:50;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;22369:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6903:100::-;6957:13;6990:5;6983:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6903:100;:::o;9254:201::-;9337:4;9354:13;9370:12;:10;:12::i;:::-;9354:28;;9393:32;9402:5;9409:7;9418:6;9393:8;:32::i;:::-;9443:4;9436:11;;;9254:201;;;;:::o;26840:503::-;26921:13;;26908:10;:26;26900:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26971:25;26999:9;:21;27009:10;26999:21;;;;;;;;;;;26971:49;;27040:8;:17;;;;;;;;;;;;27039:18;27031:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;27126:8;:21;;;27106:8;:17;;;:41;27098:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;27202:4;27182:8;:17;;;:24;;;;;;;;;;;;;;;;;;27224:34;27241:10;27253:4;27224:34;;;;;;;:::i;:::-;;;;;;;;26889:454;26840:503;:::o;22452:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8023:108::-;8084:7;8111:12;;8104:19;;8023:108;:::o;10035:295::-;10166:4;10183:15;10201:12;:10;:12::i;:::-;10183:30;;10224:38;10240:4;10246:7;10255:6;10224:15;:38::i;:::-;10273:27;10283:4;10289:2;10293:6;10273:9;:27::i;:::-;10318:4;10311:11;;;10035:295;;;;;:::o;28179:752::-;28308:1;28300:5;:9;28292:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;28389:5;28364:21;28374:10;28364:9;:21::i;:::-;:30;;28356:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;28449:36;28459:10;28471:6;28479:5;28449:9;:36::i;:::-;28539:243;;;;;;;;28585:20;;28539:243;;;;28627:10;28539:243;;;;;;28660:6;28539:243;;;;;;28688:5;28539:243;;;;28725:15;28539:243;;;;28766:4;28539:243;;;;;28498:16;:38;28515:20;;28498:38;;;;;;;;;;;:284;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28800:88;28823:20;;28845:10;28857:6;28865:5;28872:15;28800:88;;;;;;;;;;:::i;:::-;;;;;;;;28901:20;;:22;;;;;;;;;:::i;:::-;;;;;;28179:752;;;:::o;21226:65::-;21267:24;21226:65;:::o;7865:93::-;7923:5;7948:2;7941:9;;7865:93;:::o;10739:238::-;10827:4;10844:13;10860:12;:10;:12::i;:::-;10844:28;;10883:64;10892:5;10899:7;10936:10;10908:25;10918:5;10925:7;10908:9;:25::i;:::-;:38;;;;:::i;:::-;10883:8;:64::i;:::-;10965:4;10958:11;;;10739:238;;;;:::o;22656:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25882:342::-;25987:1;25965:11;25959:25;:29;25951:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;26058:61;;;;;;;;26067:13;;26058:61;;;;26082:11;26058:61;;;;26095:1;26058:61;;;;26098:1;26058:61;;;;26101:5;26058:61;;;;;;26108:10;26058:61;;;;;26031:9;:24;26041:13;;26031:24;;;;;;;;;;;:88;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26135:55;26151:13;;26166:11;26179:10;26135:55;;;;;;;;:::i;:::-;;;;;;;;26201:13;;:15;;;;;;;;;:::i;:::-;;;;;;25882:342;:::o;22817:29::-;;;;:::o;22615:32::-;;;;:::o;28959:182::-;29049:7;29024:21;29034:10;29024:9;:21::i;:::-;:32;;29016:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;29107:26;29113:10;29125:7;29107:5;:26::i;:::-;28959:182;:::o;8194:127::-;8268:7;8295:9;:18;8305:7;8295:18;;;;;;;;;;;;;;;;8288:25;;8194:127;;;:::o;20037:103::-;19275:13;:11;:13::i;:::-;20102:30:::1;20129:1;20102:18;:30::i;:::-;20037:103::o:0;27377:772::-;27492:1;27483:6;:10;27475:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;27574:6;27549:21;27559:10;27549:9;:21::i;:::-;:31;;27541:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;27644:44;27654:10;27674:4;27681:6;27644:9;:44::i;:::-;27742:264;;;;;;;;27784:20;;27742:264;;;;27830:10;27742:264;;;;;;27868:6;27742:264;;;;27913:1;27742:264;;;;27947:16;27742:264;;;;27989:5;27742:264;;;;;27701:16;:38;27718:20;;27701:38;;;;;;;;;;;:305;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28024:82;28047:20;;28069:10;28081:6;28089:16;28024:82;;;;;;;;;:::i;:::-;;;;;;;;28119:20;;:22;;;;;;;;;:::i;:::-;;;;;;27377:772;;:::o;21318:33::-;;;;;;;;;;;;;:::o;24234:545::-;24310:1;24300:7;:11;24292:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24384:7;24359:21;24369:10;24359:9;:21::i;:::-;:32;;24351:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;24473:1;24444:6;:18;24451:10;24444:18;;;;;;;;;;;;;;;:25;;;:30;24436:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;24534:45;24544:10;24564:4;24571:7;24534:9;:45::i;:::-;24611:31;;;;;;;;24617:7;24611:31;;;;24626:15;24611:31;;;24590:6;:18;24597:10;24590:18;;;;;;;;;;;;;;;:52;;;;;;;;;;;;;;;;;;;24689:4;24679:7;:14;;;;:::i;:::-;24653:10;:22;24664:10;24653:22;;;;;;;;;;;;;;;;:40;;;;;;;:::i;:::-;;;;;;;;24751:10;24744:27;;;24763:7;24744:27;;;;;;:::i;:::-;;;;;;;;24234:545;:::o;19389:87::-;19435:7;19462:6;;;;;;;;;;;19455:13;;19389:87;:::o;7122:104::-;7178:13;7211:7;7204:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7122:104;:::o;11480:436::-;11573:4;11590:13;11606:12;:10;:12::i;:::-;11590:28;;11629:24;11656:25;11666:5;11673:7;11656:9;:25::i;:::-;11629:52;;11720:15;11700:16;:35;;11692:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11813:60;11822:5;11829:7;11857:15;11838:16;:34;11813:8;:60::i;:::-;11904:4;11897:11;;;;11480:436;;;;:::o;24831:695::-;24876:23;24902:6;:18;24909:10;24902:18;;;;;;;;;;;;;;;24876:44;;24958:1;24939:9;:16;;;:20;24931:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;24993:20;25016:9;:16;;;24993:39;;25043:23;25087:9;:19;;;25069:15;:37;;;;:::i;:::-;25043:63;;25117:14;25134:46;25150:12;25164:15;25134;:46::i;:::-;25117:63;;25280:1;25261:9;:16;;:20;;;;25314:1;25292:9;:19;;:23;;;;25328:25;25334:10;25346:6;25328:5;:25::i;:::-;25392:50;25410:4;25417:10;25429:12;25392:9;:50::i;:::-;25493:10;25484:34;;;25505:12;25484:34;;;;;;:::i;:::-;;;;;;;;24865:661;;;;24831:695::o;8527:193::-;8606:4;8623:13;8639:12;:10;:12::i;:::-;8623:28;;8662;8672:5;8679:2;8683:6;8662:9;:28::i;:::-;8708:4;8701:11;;;8527:193;;;;:::o;22498:45::-;;;;;;;;;;;;;;;;;:::o;26232:600::-;26316:13;;26303:10;:26;26295:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;26396:1;26372:21;26382:10;26372:9;:21::i;:::-;:25;26364:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26439:25;26467:9;:21;26477:10;26467:21;;;;;;;;;;;26439:49;;26508:8;:17;;;;;;;;;;;;26507:18;26499:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;26568:15;26586:21;26596:10;26586:9;:21::i;:::-;26568:39;;26622:7;26618:139;;;26667:10;26646:8;:17;;;:31;;;;;;;:::i;:::-;;;;;;;;26618:139;;;26735:10;26710:8;:21;;;:35;;;;;;;:::i;:::-;;;;;;;;26618:139;26774:50;26780:10;26792;26804:7;26813:10;26774:50;;;;;;;;;:::i;:::-;;;;;;;;26284:548;;26232:600;;:::o;22719:32::-;;;;:::o;22418:25::-;;;;:::o;8783:151::-;8872:7;8899:11;:18;8911:5;8899:18;;;;;;;;;;;;;;;:27;8918:7;8899:27;;;;;;;;;;;;;;;;8892:34;;8783:151;;;;:::o;22552:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20295:201::-;19275:13;:11;:13::i;:::-;20404:1:::1;20384:22;;:8;:22;;::::0;20376:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20460:28;20479:8;20460:18;:28::i;:::-;20295:201:::0;:::o;22760:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4482:98::-;4535:7;4562:10;4555:17;;4482:98;:::o;15507:380::-;15660:1;15643:19;;:5;:19;;;15635:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15741:1;15722:21;;:7;:21;;;15714:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15825:6;15795:11;:18;15807:5;15795:18;;;;;;;;;;;;;;;:27;15814:7;15795:27;;;;;;;;;;;;;;;:36;;;;15863:7;15847:32;;15856:5;15847:32;;;15872:6;15847:32;;;;;;:::i;:::-;;;;;;;;15507:380;;;:::o;16178:453::-;16313:24;16340:25;16350:5;16357:7;16340:9;:25::i;:::-;16313:52;;16400:17;16380:16;:37;16376:248;;16462:6;16442:16;:26;;16434:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16546:51;16555:5;16562:7;16590:6;16571:16;:25;16546:8;:51::i;:::-;16376:248;16302:329;16178:453;;;:::o;12386:840::-;12533:1;12517:18;;:4;:18;;;12509:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12610:1;12596:16;;:2;:16;;;12588:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12665:38;12686:4;12692:2;12696:6;12665:20;:38::i;:::-;12716:19;12738:9;:15;12748:4;12738:15;;;;;;;;;;;;;;;;12716:37;;12787:6;12772:11;:21;;12764:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;12904:6;12890:11;:20;12872:9;:15;12882:4;12872:15;;;;;;;;;;;;;;;:38;;;;13107:6;13090:9;:13;13100:2;13090:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;13157:2;13142:26;;13151:4;13142:26;;;13161:6;13142:26;;;;;;:::i;:::-;;;;;;;;13181:37;13201:4;13207:2;13211:6;13181:19;:37::i;:::-;12498:728;12386:840;;;:::o;14394:675::-;14497:1;14478:21;;:7;:21;;;14470:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14550:49;14571:7;14588:1;14592:6;14550:20;:49::i;:::-;14612:22;14637:9;:18;14647:7;14637:18;;;;;;;;;;;;;;;;14612:43;;14692:6;14674:14;:24;;14666:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14811:6;14794:14;:23;14773:9;:18;14783:7;14773:18;;;;;;;;;;;;;;;:44;;;;14928:6;14912:12;;:22;;;;;;;;;;;14989:1;14963:37;;14972:7;14963:37;;;14993:6;14963:37;;;;;;:::i;:::-;;;;;;;;15013:48;15033:7;15050:1;15054:6;15013:19;:48::i;:::-;14459:610;14394:675;;:::o;19554:132::-;19629:12;:10;:12::i;:::-;19618:23;;:7;:5;:7::i;:::-;:23;;;19610:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19554:132::o;20656:191::-;20730:16;20749:6;;;;;;;;;;;20730:25;;20775:8;20766:6;;:17;;;;;;;;;;;;;;;;;;20830:8;20799:40;;20820:8;20799:40;;;;;;;;;;;;20719:128;20656:191;:::o;25604:245::-;25688:7;25708:18;25729:2;25708:23;;25826:14;25812:9;25799:10;25789:7;:20;;;;:::i;:::-;:32;;;;:::i;:::-;25788:53;;;;:::i;:::-;25781:60;;;25604:245;;;;:::o;13513:548::-;13616:1;13597:21;;:7;:21;;;13589:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;13667:49;13696:1;13700:7;13709:6;13667:20;:49::i;:::-;13745:6;13729:12;;:22;;;;;;;:::i;:::-;;;;;;;;13922:6;13900:9;:18;13910:7;13900:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;13976:7;13955:37;;13972:1;13955:37;;;13985:6;13955:37;;;;;;:::i;:::-;;;;;;;;14005:48;14033:1;14037:7;14046:6;14005:19;:48::i;:::-;13513:548;;:::o;17231:125::-;;;;:::o;17960:124::-;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:118::-;1112:24;1130:5;1112:24;:::i;:::-;1107:3;1100:37;1025:118;;:::o;1149:99::-;1201:6;1235:5;1229:12;1219:22;;1149:99;;;:::o;1254:169::-;1338:11;1372:6;1367:3;1360:19;1412:4;1407:3;1403:14;1388:29;;1254:169;;;;:::o;1429:246::-;1510:1;1520:113;1534:6;1531:1;1528:13;1520:113;;;1619:1;1614:3;1610:11;1604:18;1600:1;1595:3;1591:11;1584:39;1556:2;1553:1;1549:10;1544:15;;1520:113;;;1667:1;1658:6;1653:3;1649:16;1642:27;1491:184;1429:246;;;:::o;1681:102::-;1722:6;1773:2;1769:7;1764:2;1757:5;1753:14;1749:28;1739:38;;1681:102;;;:::o;1789:377::-;1877:3;1905:39;1938:5;1905:39;:::i;:::-;1960:71;2024:6;2019:3;1960:71;:::i;:::-;1953:78;;2040:65;2098:6;2093:3;2086:4;2079:5;2075:16;2040:65;:::i;:::-;2130:29;2152:6;2130:29;:::i;:::-;2125:3;2121:39;2114:46;;1881:285;1789:377;;;;:::o;2172:90::-;2206:7;2249:5;2242:13;2235:21;2224:32;;2172:90;;;:::o;2268:109::-;2349:21;2364:5;2349:21;:::i;:::-;2344:3;2337:34;2268:109;;:::o;2383:126::-;2420:7;2460:42;2453:5;2449:54;2438:65;;2383:126;;;:::o;2515:96::-;2552:7;2581:24;2599:5;2581:24;:::i;:::-;2570:35;;2515:96;;;:::o;2617:118::-;2704:24;2722:5;2704:24;:::i;:::-;2699:3;2692:37;2617:118;;:::o;2741:854::-;2988:4;3026:3;3015:9;3011:19;3003:27;;3040:71;3108:1;3097:9;3093:17;3084:6;3040:71;:::i;:::-;3158:9;3152:4;3148:20;3143:2;3132:9;3128:18;3121:48;3186:78;3259:4;3250:6;3186:78;:::i;:::-;3178:86;;3274:72;3342:2;3331:9;3327:18;3318:6;3274:72;:::i;:::-;3356;3424:2;3413:9;3409:18;3400:6;3356:72;:::i;:::-;3438:67;3500:3;3489:9;3485:19;3476:6;3438:67;:::i;:::-;3515:73;3583:3;3572:9;3568:19;3559:6;3515:73;:::i;:::-;2741:854;;;;;;;;;:::o;3601:313::-;3714:4;3752:2;3741:9;3737:18;3729:26;;3801:9;3795:4;3791:20;3787:1;3776:9;3772:17;3765:47;3829:78;3902:4;3893:6;3829:78;:::i;:::-;3821:86;;3601:313;;;;:::o;3920:122::-;3993:24;4011:5;3993:24;:::i;:::-;3986:5;3983:35;3973:63;;4032:1;4029;4022:12;3973:63;3920:122;:::o;4048:139::-;4094:5;4132:6;4119:20;4110:29;;4148:33;4175:5;4148:33;:::i;:::-;4048:139;;;;:::o;4193:474::-;4261:6;4269;4318:2;4306:9;4297:7;4293:23;4289:32;4286:119;;;4324:79;;:::i;:::-;4286:119;4444:1;4469:53;4514:7;4505:6;4494:9;4490:22;4469:53;:::i;:::-;4459:63;;4415:117;4571:2;4597:53;4642:7;4633:6;4622:9;4618:22;4597:53;:::i;:::-;4587:63;;4542:118;4193:474;;;;;:::o;4673:210::-;4760:4;4798:2;4787:9;4783:18;4775:26;;4811:65;4873:1;4862:9;4858:17;4849:6;4811:65;:::i;:::-;4673:210;;;;:::o;4889:329::-;4948:6;4997:2;4985:9;4976:7;4972:23;4968:32;4965:119;;;5003:79;;:::i;:::-;4965:119;5123:1;5148:53;5193:7;5184:6;5173:9;5169:22;5148:53;:::i;:::-;5138:63;;5094:117;4889:329;;;;:::o;5224:332::-;5345:4;5383:2;5372:9;5368:18;5360:26;;5396:71;5464:1;5453:9;5449:17;5440:6;5396:71;:::i;:::-;5477:72;5545:2;5534:9;5530:18;5521:6;5477:72;:::i;:::-;5224:332;;;;;:::o;5562:222::-;5655:4;5693:2;5682:9;5678:18;5670:26;;5706:71;5774:1;5763:9;5759:17;5750:6;5706:71;:::i;:::-;5562:222;;;;:::o;5790:619::-;5867:6;5875;5883;5932:2;5920:9;5911:7;5907:23;5903:32;5900:119;;;5938:79;;:::i;:::-;5900:119;6058:1;6083:53;6128:7;6119:6;6108:9;6104:22;6083:53;:::i;:::-;6073:63;;6029:117;6185:2;6211:53;6256:7;6247:6;6236:9;6232:22;6211:53;:::i;:::-;6201:63;;6156:118;6313:2;6339:53;6384:7;6375:6;6364:9;6360:22;6339:53;:::i;:::-;6329:63;;6284:118;5790:619;;;;;:::o;6415:117::-;6524:1;6521;6514:12;6538:117;6647:1;6644;6637:12;6661:180;6709:77;6706:1;6699:88;6806:4;6803:1;6796:15;6830:4;6827:1;6820:15;6847:281;6930:27;6952:4;6930:27;:::i;:::-;6922:6;6918:40;7060:6;7048:10;7045:22;7024:18;7012:10;7009:34;7006:62;7003:88;;;7071:18;;:::i;:::-;7003:88;7111:10;7107:2;7100:22;6890:238;6847:281;;:::o;7134:129::-;7168:6;7195:20;;:::i;:::-;7185:30;;7224:33;7252:4;7244:6;7224:33;:::i;:::-;7134:129;;;:::o;7269:308::-;7331:4;7421:18;7413:6;7410:30;7407:56;;;7443:18;;:::i;:::-;7407:56;7481:29;7503:6;7481:29;:::i;:::-;7473:37;;7565:4;7559;7555:15;7547:23;;7269:308;;;:::o;7583:146::-;7680:6;7675:3;7670;7657:30;7721:1;7712:6;7707:3;7703:16;7696:27;7583:146;;;:::o;7735:425::-;7813:5;7838:66;7854:49;7896:6;7854:49;:::i;:::-;7838:66;:::i;:::-;7829:75;;7927:6;7920:5;7913:21;7965:4;7958:5;7954:16;8003:3;7994:6;7989:3;7985:16;7982:25;7979:112;;;8010:79;;:::i;:::-;7979:112;8100:54;8147:6;8142:3;8137;8100:54;:::i;:::-;7819:341;7735:425;;;;;:::o;8180:340::-;8236:5;8285:3;8278:4;8270:6;8266:17;8262:27;8252:122;;8293:79;;:::i;:::-;8252:122;8410:6;8397:20;8435:79;8510:3;8502:6;8495:4;8487:6;8483:17;8435:79;:::i;:::-;8426:88;;8242:278;8180:340;;;;:::o;8526:799::-;8613:6;8621;8629;8678:2;8666:9;8657:7;8653:23;8649:32;8646:119;;;8684:79;;:::i;:::-;8646:119;8804:1;8829:53;8874:7;8865:6;8854:9;8850:22;8829:53;:::i;:::-;8819:63;;8775:117;8931:2;8957:53;9002:7;8993:6;8982:9;8978:22;8957:53;:::i;:::-;8947:63;;8902:118;9087:2;9076:9;9072:18;9059:32;9118:18;9110:6;9107:30;9104:117;;;9140:79;;:::i;:::-;9104:117;9245:63;9300:7;9291:6;9280:9;9276:22;9245:63;:::i;:::-;9235:73;;9030:288;8526:799;;;;;:::o;9331:86::-;9366:7;9406:4;9399:5;9395:16;9384:27;;9331:86;;;:::o;9423:112::-;9506:22;9522:5;9506:22;:::i;:::-;9501:3;9494:35;9423:112;;:::o;9541:214::-;9630:4;9668:2;9657:9;9653:18;9645:26;;9681:67;9745:1;9734:9;9730:17;9721:6;9681:67;:::i;:::-;9541:214;;;;:::o;9761:854::-;10008:4;10046:3;10035:9;10031:19;10023:27;;10060:71;10128:1;10117:9;10113:17;10104:6;10060:71;:::i;:::-;10141:72;10209:2;10198:9;10194:18;10185:6;10141:72;:::i;:::-;10223;10291:2;10280:9;10276:18;10267:6;10223:72;:::i;:::-;10305;10373:2;10362:9;10358:18;10349:6;10305:72;:::i;:::-;10425:9;10419:4;10415:20;10409:3;10398:9;10394:19;10387:49;10453:78;10526:4;10517:6;10453:78;:::i;:::-;10445:86;;10541:67;10603:3;10592:9;10588:19;10579:6;10541:67;:::i;:::-;9761:854;;;;;;;;;:::o;10621:509::-;10690:6;10739:2;10727:9;10718:7;10714:23;10710:32;10707:119;;;10745:79;;:::i;:::-;10707:119;10893:1;10882:9;10878:17;10865:31;10923:18;10915:6;10912:30;10909:117;;;10945:79;;:::i;:::-;10909:117;11050:63;11105:7;11096:6;11085:9;11081:22;11050:63;:::i;:::-;11040:73;;10836:287;10621:509;;;;:::o;11136:654::-;11214:6;11222;11271:2;11259:9;11250:7;11246:23;11242:32;11239:119;;;11277:79;;:::i;:::-;11239:119;11425:1;11414:9;11410:17;11397:31;11455:18;11447:6;11444:30;11441:117;;;11477:79;;:::i;:::-;11441:117;11582:63;11637:7;11628:6;11617:9;11613:22;11582:63;:::i;:::-;11572:73;;11368:287;11694:2;11720:53;11765:7;11756:6;11745:9;11741:22;11720:53;:::i;:::-;11710:63;;11665:118;11136:654;;;;;:::o;11796:60::-;11824:3;11845:5;11838:12;;11796:60;;;:::o;11862:142::-;11912:9;11945:53;11963:34;11972:24;11990:5;11972:24;:::i;:::-;11963:34;:::i;:::-;11945:53;:::i;:::-;11932:66;;11862:142;;;:::o;12010:126::-;12060:9;12093:37;12124:5;12093:37;:::i;:::-;12080:50;;12010:126;;;:::o;12142:147::-;12213:9;12246:37;12277:5;12246:37;:::i;:::-;12233:50;;12142:147;;;:::o;12295:173::-;12403:58;12455:5;12403:58;:::i;:::-;12398:3;12391:71;12295:173;;:::o;12474:264::-;12588:4;12626:2;12615:9;12611:18;12603:26;;12639:92;12728:1;12717:9;12713:17;12704:6;12639:92;:::i;:::-;12474:264;;;;:::o;12744:222::-;12837:4;12875:2;12864:9;12860:18;12852:26;;12888:71;12956:1;12945:9;12941:17;12932:6;12888:71;:::i;:::-;12744:222;;;;:::o;12972:116::-;13042:21;13057:5;13042:21;:::i;:::-;13035:5;13032:32;13022:60;;13078:1;13075;13068:12;13022:60;12972:116;:::o;13094:133::-;13137:5;13175:6;13162:20;13153:29;;13191:30;13215:5;13191:30;:::i;:::-;13094:133;;;;:::o;13233:468::-;13298:6;13306;13355:2;13343:9;13334:7;13330:23;13326:32;13323:119;;;13361:79;;:::i;:::-;13323:119;13481:1;13506:53;13551:7;13542:6;13531:9;13527:22;13506:53;:::i;:::-;13496:63;;13452:117;13608:2;13634:50;13676:7;13667:6;13656:9;13652:22;13634:50;:::i;:::-;13624:60;;13579:115;13233:468;;;;;:::o;13707:474::-;13775:6;13783;13832:2;13820:9;13811:7;13807:23;13803:32;13800:119;;;13838:79;;:::i;:::-;13800:119;13958:1;13983:53;14028:7;14019:6;14008:9;14004:22;13983:53;:::i;:::-;13973:63;;13929:117;14085:2;14111:53;14156:7;14147:6;14136:9;14132:22;14111:53;:::i;:::-;14101:63;;14056:118;13707:474;;;;;:::o;14187:854::-;14434:4;14472:3;14461:9;14457:19;14449:27;;14486:71;14554:1;14543:9;14539:17;14530:6;14486:71;:::i;:::-;14567:72;14635:2;14624:9;14620:18;14611:6;14567:72;:::i;:::-;14649;14717:2;14706:9;14702:18;14693:6;14649:72;:::i;:::-;14731;14799:2;14788:9;14784:18;14775:6;14731:72;:::i;:::-;14851:9;14845:4;14841:20;14835:3;14824:9;14820:19;14813:49;14879:78;14952:4;14943:6;14879:78;:::i;:::-;14871:86;;14967:67;15029:3;15018:9;15014:19;15005:6;14967:67;:::i;:::-;14187:854;;;;;;;;;:::o;15047:430::-;15190:4;15228:2;15217:9;15213:18;15205:26;;15241:71;15309:1;15298:9;15294:17;15285:6;15241:71;:::i;:::-;15322:72;15390:2;15379:9;15375:18;15366:6;15322:72;:::i;:::-;15404:66;15466:2;15455:9;15451:18;15442:6;15404:66;:::i;:::-;15047:430;;;;;;:::o;15483:180::-;15531:77;15528:1;15521:88;15628:4;15625:1;15618:15;15652:4;15649:1;15642:15;15669:320;15713:6;15750:1;15744:4;15740:12;15730:22;;15797:1;15791:4;15787:12;15818:18;15808:81;;15874:4;15866:6;15862:17;15852:27;;15808:81;15936:2;15928:6;15925:14;15905:18;15902:38;15899:84;;15955:18;;:::i;:::-;15899:84;15720:269;15669:320;;;:::o;15995:169::-;16135:21;16131:1;16123:6;16119:14;16112:45;15995:169;:::o;16170:366::-;16312:3;16333:67;16397:2;16392:3;16333:67;:::i;:::-;16326:74;;16409:93;16498:3;16409:93;:::i;:::-;16527:2;16522:3;16518:12;16511:19;;16170:366;;;:::o;16542:419::-;16708:4;16746:2;16735:9;16731:18;16723:26;;16795:9;16789:4;16785:20;16781:1;16770:9;16766:17;16759:47;16823:131;16949:4;16823:131;:::i;:::-;16815:139;;16542:419;;;:::o;16967:175::-;17107:27;17103:1;17095:6;17091:14;17084:51;16967:175;:::o;17148:366::-;17290:3;17311:67;17375:2;17370:3;17311:67;:::i;:::-;17304:74;;17387:93;17476:3;17387:93;:::i;:::-;17505:2;17500:3;17496:12;17489:19;;17148:366;;;:::o;17520:419::-;17686:4;17724:2;17713:9;17709:18;17701:26;;17773:9;17767:4;17763:20;17759:1;17748:9;17744:17;17737:47;17801:131;17927:4;17801:131;:::i;:::-;17793:139;;17520:419;;;:::o;17945:167::-;18085:19;18081:1;18073:6;18069:14;18062:43;17945:167;:::o;18118:366::-;18260:3;18281:67;18345:2;18340:3;18281:67;:::i;:::-;18274:74;;18357:93;18446:3;18357:93;:::i;:::-;18475:2;18470:3;18466:12;18459:19;;18118:366;;;:::o;18490:419::-;18656:4;18694:2;18683:9;18679:18;18671:26;;18743:9;18737:4;18733:20;18729:1;18718:9;18714:17;18707:47;18771:131;18897:4;18771:131;:::i;:::-;18763:139;;18490:419;;;:::o;18915:320::-;19030:4;19068:2;19057:9;19053:18;19045:26;;19081:71;19149:1;19138:9;19134:17;19125:6;19081:71;:::i;:::-;19162:66;19224:2;19213:9;19209:18;19200:6;19162:66;:::i;:::-;18915:320;;;;;:::o;19241:181::-;19381:33;19377:1;19369:6;19365:14;19358:57;19241:181;:::o;19428:366::-;19570:3;19591:67;19655:2;19650:3;19591:67;:::i;:::-;19584:74;;19667:93;19756:3;19667:93;:::i;:::-;19785:2;19780:3;19776:12;19769:19;;19428:366;;;:::o;19800:419::-;19966:4;20004:2;19993:9;19989:18;19981:26;;20053:9;20047:4;20043:20;20039:1;20028:9;20024:17;20017:47;20081:131;20207:4;20081:131;:::i;:::-;20073:139;;19800:419;;;:::o;20225:224::-;20365:34;20361:1;20353:6;20349:14;20342:58;20434:7;20429:2;20421:6;20417:15;20410:32;20225:224;:::o;20455:366::-;20597:3;20618:67;20682:2;20677:3;20618:67;:::i;:::-;20611:74;;20694:93;20783:3;20694:93;:::i;:::-;20812:2;20807:3;20803:12;20796:19;;20455:366;;;:::o;20827:419::-;20993:4;21031:2;21020:9;21016:18;21008:26;;21080:9;21074:4;21070:20;21066:1;21055:9;21051:17;21044:47;21108:131;21234:4;21108:131;:::i;:::-;21100:139;;20827:419;;;:::o;21252:141::-;21301:4;21324:3;21316:11;;21347:3;21344:1;21337:14;21381:4;21378:1;21368:18;21360:26;;21252:141;;;:::o;21399:93::-;21436:6;21483:2;21478;21471:5;21467:14;21463:23;21453:33;;21399:93;;;:::o;21498:107::-;21542:8;21592:5;21586:4;21582:16;21561:37;;21498:107;;;;:::o;21611:393::-;21680:6;21730:1;21718:10;21714:18;21753:97;21783:66;21772:9;21753:97;:::i;:::-;21871:39;21901:8;21890:9;21871:39;:::i;:::-;21859:51;;21943:4;21939:9;21932:5;21928:21;21919:30;;21992:4;21982:8;21978:19;21971:5;21968:30;21958:40;;21687:317;;21611:393;;;;;:::o;22010:142::-;22060:9;22093:53;22111:34;22120:24;22138:5;22120:24;:::i;:::-;22111:34;:::i;:::-;22093:53;:::i;:::-;22080:66;;22010:142;;;:::o;22158:75::-;22201:3;22222:5;22215:12;;22158:75;;;:::o;22239:269::-;22349:39;22380:7;22349:39;:::i;:::-;22410:91;22459:41;22483:16;22459:41;:::i;:::-;22451:6;22444:4;22438:11;22410:91;:::i;:::-;22404:4;22397:105;22315:193;22239:269;;;:::o;22514:73::-;22559:3;22514:73;:::o;22593:189::-;22670:32;;:::i;:::-;22711:65;22769:6;22761;22755:4;22711:65;:::i;:::-;22646:136;22593:189;;:::o;22788:186::-;22848:120;22865:3;22858:5;22855:14;22848:120;;;22919:39;22956:1;22949:5;22919:39;:::i;:::-;22892:1;22885:5;22881:13;22872:22;;22848:120;;;22788:186;;:::o;22980:543::-;23081:2;23076:3;23073:11;23070:446;;;23115:38;23147:5;23115:38;:::i;:::-;23199:29;23217:10;23199:29;:::i;:::-;23189:8;23185:44;23382:2;23370:10;23367:18;23364:49;;;23403:8;23388:23;;23364:49;23426:80;23482:22;23500:3;23482:22;:::i;:::-;23472:8;23468:37;23455:11;23426:80;:::i;:::-;23085:431;;23070:446;22980:543;;;:::o;23529:117::-;23583:8;23633:5;23627:4;23623:16;23602:37;;23529:117;;;;:::o;23652:169::-;23696:6;23729:51;23777:1;23773:6;23765:5;23762:1;23758:13;23729:51;:::i;:::-;23725:56;23810:4;23804;23800:15;23790:25;;23703:118;23652:169;;;;:::o;23826:295::-;23902:4;24048:29;24073:3;24067:4;24048:29;:::i;:::-;24040:37;;24110:3;24107:1;24103:11;24097:4;24094:21;24086:29;;23826:295;;;;:::o;24126:1395::-;24243:37;24276:3;24243:37;:::i;:::-;24345:18;24337:6;24334:30;24331:56;;;24367:18;;:::i;:::-;24331:56;24411:38;24443:4;24437:11;24411:38;:::i;:::-;24496:67;24556:6;24548;24542:4;24496:67;:::i;:::-;24590:1;24614:4;24601:17;;24646:2;24638:6;24635:14;24663:1;24658:618;;;;25320:1;25337:6;25334:77;;;25386:9;25381:3;25377:19;25371:26;25362:35;;25334:77;25437:67;25497:6;25490:5;25437:67;:::i;:::-;25431:4;25424:81;25293:222;24628:887;;24658:618;24710:4;24706:9;24698:6;24694:22;24744:37;24776:4;24744:37;:::i;:::-;24803:1;24817:208;24831:7;24828:1;24825:14;24817:208;;;24910:9;24905:3;24901:19;24895:26;24887:6;24880:42;24961:1;24953:6;24949:14;24939:24;;25008:2;24997:9;24993:18;24980:31;;24854:4;24851:1;24847:12;24842:17;;24817:208;;;25053:6;25044:7;25041:19;25038:179;;;25111:9;25106:3;25102:19;25096:26;25154:48;25196:4;25188:6;25184:17;25173:9;25154:48;:::i;:::-;25146:6;25139:64;25061:156;25038:179;25263:1;25259;25251:6;25247:14;25243:22;25237:4;25230:36;24665:611;;;24628:887;;24218:1303;;;24126:1395;;:::o;25527:755::-;25752:4;25790:3;25779:9;25775:19;25767:27;;25804:71;25872:1;25861:9;25857:17;25848:6;25804:71;:::i;:::-;25885:72;25953:2;25942:9;25938:18;25929:6;25885:72;:::i;:::-;25967;26035:2;26024:9;26020:18;26011:6;25967:72;:::i;:::-;26049;26117:2;26106:9;26102:18;26093:6;26049:72;:::i;:::-;26169:9;26163:4;26159:20;26153:3;26142:9;26138:19;26131:49;26197:78;26270:4;26261:6;26197:78;:::i;:::-;26189:86;;25527:755;;;;;;;;:::o;26288:180::-;26336:77;26333:1;26326:88;26433:4;26430:1;26423:15;26457:4;26454:1;26447:15;26474:233;26513:3;26536:24;26554:5;26536:24;:::i;:::-;26527:33;;26582:66;26575:5;26572:77;26569:103;;26652:18;;:::i;:::-;26569:103;26699:1;26692:5;26688:13;26681:20;;26474:233;;;:::o;26713:191::-;26753:3;26772:20;26790:1;26772:20;:::i;:::-;26767:25;;26806:20;26824:1;26806:20;:::i;:::-;26801:25;;26849:1;26846;26842:9;26835:16;;26870:3;26867:1;26864:10;26861:36;;;26877:18;;:::i;:::-;26861:36;26713:191;;;;:::o;26910:177::-;27050:29;27046:1;27038:6;27034:14;27027:53;26910:177;:::o;27093:366::-;27235:3;27256:67;27320:2;27315:3;27256:67;:::i;:::-;27249:74;;27332:93;27421:3;27332:93;:::i;:::-;27450:2;27445:3;27441:12;27434:19;;27093:366;;;:::o;27465:419::-;27631:4;27669:2;27658:9;27654:18;27646:26;;27718:9;27712:4;27708:20;27704:1;27693:9;27689:17;27682:47;27746:131;27872:4;27746:131;:::i;:::-;27738:139;;27465:419;;;:::o;27890:533::-;28059:4;28097:2;28086:9;28082:18;28074:26;;28110:71;28178:1;28167:9;28163:17;28154:6;28110:71;:::i;:::-;28228:9;28222:4;28218:20;28213:2;28202:9;28198:18;28191:48;28256:78;28329:4;28320:6;28256:78;:::i;:::-;28248:86;;28344:72;28412:2;28401:9;28397:18;28388:6;28344:72;:::i;:::-;27890:533;;;;;;:::o;28429:222::-;28569:34;28565:1;28557:6;28553:14;28546:58;28638:5;28633:2;28625:6;28621:15;28614:30;28429:222;:::o;28657:366::-;28799:3;28820:67;28884:2;28879:3;28820:67;:::i;:::-;28813:74;;28896:93;28985:3;28896:93;:::i;:::-;29014:2;29009:3;29005:12;28998:19;;28657:366;;;:::o;29029:419::-;29195:4;29233:2;29222:9;29218:18;29210:26;;29282:9;29276:4;29272:20;29268:1;29257:9;29253:17;29246:47;29310:131;29436:4;29310:131;:::i;:::-;29302:139;;29029:419;;;:::o;29454:182::-;29594:34;29590:1;29582:6;29578:14;29571:58;29454:182;:::o;29642:366::-;29784:3;29805:67;29869:2;29864:3;29805:67;:::i;:::-;29798:74;;29881:93;29970:3;29881:93;:::i;:::-;29999:2;29994:3;29990:12;29983:19;;29642:366;;;:::o;30014:419::-;30180:4;30218:2;30207:9;30203:18;30195:26;;30267:9;30261:4;30257:20;30253:1;30242:9;30238:17;30231:47;30295:131;30421:4;30295:131;:::i;:::-;30287:139;;30014:419;;;:::o;30439:233::-;30579:34;30575:1;30567:6;30563:14;30556:58;30648:16;30643:2;30635:6;30631:15;30624:41;30439:233;:::o;30678:366::-;30820:3;30841:67;30905:2;30900:3;30841:67;:::i;:::-;30834:74;;30917:93;31006:3;30917:93;:::i;:::-;31035:2;31030:3;31026:12;31019:19;;30678:366;;;:::o;31050:419::-;31216:4;31254:2;31243:9;31239:18;31231:26;;31303:9;31297:4;31293:20;31289:1;31278:9;31274:17;31267:47;31331:131;31457:4;31331:131;:::i;:::-;31323:139;;31050:419;;;:::o;31475:644::-;31672:4;31710:3;31699:9;31695:19;31687:27;;31724:71;31792:1;31781:9;31777:17;31768:6;31724:71;:::i;:::-;31805:72;31873:2;31862:9;31858:18;31849:6;31805:72;:::i;:::-;31887;31955:2;31944:9;31940:18;31931:6;31887:72;:::i;:::-;32006:9;32000:4;31996:20;31991:2;31980:9;31976:18;31969:48;32034:78;32107:4;32098:6;32034:78;:::i;:::-;32026:86;;31475:644;;;;;;;:::o;32125:174::-;32265:26;32261:1;32253:6;32249:14;32242:50;32125:174;:::o;32305:366::-;32447:3;32468:67;32532:2;32527:3;32468:67;:::i;:::-;32461:74;;32544:93;32633:3;32544:93;:::i;:::-;32662:2;32657:3;32653:12;32646:19;;32305:366;;;:::o;32677:419::-;32843:4;32881:2;32870:9;32866:18;32858:26;;32930:9;32924:4;32920:20;32916:1;32905:9;32901:17;32894:47;32958:131;33084:4;32958:131;:::i;:::-;32950:139;;32677:419;;;:::o;33102:179::-;33242:31;33238:1;33230:6;33226:14;33219:55;33102:179;:::o;33287:366::-;33429:3;33450:67;33514:2;33509:3;33450:67;:::i;:::-;33443:74;;33526:93;33615:3;33526:93;:::i;:::-;33644:2;33639:3;33635:12;33628:19;;33287:366;;;:::o;33659:419::-;33825:4;33863:2;33852:9;33848:18;33840:26;;33912:9;33906:4;33902:20;33898:1;33887:9;33883:17;33876:47;33940:131;34066:4;33940:131;:::i;:::-;33932:139;;33659:419;;;:::o;34084:165::-;34224:17;34220:1;34212:6;34208:14;34201:41;34084:165;:::o;34255:366::-;34397:3;34418:67;34482:2;34477:3;34418:67;:::i;:::-;34411:74;;34494:93;34583:3;34494:93;:::i;:::-;34612:2;34607:3;34603:12;34596:19;;34255:366;;;:::o;34627:419::-;34793:4;34831:2;34820:9;34816:18;34808:26;;34880:9;34874:4;34870:20;34866:1;34855:9;34851:17;34844:47;34908:131;35034:4;34908:131;:::i;:::-;34900:139;;34627:419;;;:::o;35052:180::-;35100:77;35097:1;35090:88;35197:4;35194:1;35187:15;35221:4;35218:1;35211:15;35238:185;35278:1;35295:20;35313:1;35295:20;:::i;:::-;35290:25;;35329:20;35347:1;35329:20;:::i;:::-;35324:25;;35368:1;35358:35;;35373:18;;:::i;:::-;35358:35;35415:1;35412;35408:9;35403:14;;35238:185;;;;:::o;35429:224::-;35569:34;35565:1;35557:6;35553:14;35546:58;35638:7;35633:2;35625:6;35621:15;35614:32;35429:224;:::o;35659:366::-;35801:3;35822:67;35886:2;35881:3;35822:67;:::i;:::-;35815:74;;35898:93;35987:3;35898:93;:::i;:::-;36016:2;36011:3;36007:12;36000:19;;35659:366;;;:::o;36031:419::-;36197:4;36235:2;36224:9;36220:18;36212:26;;36284:9;36278:4;36274:20;36270:1;36259:9;36255:17;36248:47;36312:131;36438:4;36312:131;:::i;:::-;36304:139;;36031:419;;;:::o;36456:166::-;36596:18;36592:1;36584:6;36580:14;36573:42;36456:166;:::o;36628:366::-;36770:3;36791:67;36855:2;36850:3;36791:67;:::i;:::-;36784:74;;36867:93;36956:3;36867:93;:::i;:::-;36985:2;36980:3;36976:12;36969:19;;36628:366;;;:::o;37000:419::-;37166:4;37204:2;37193:9;37189:18;37181:26;;37253:9;37247:4;37243:20;37239:1;37228:9;37224:17;37217:47;37281:131;37407:4;37281:131;:::i;:::-;37273:139;;37000:419;;;:::o;37425:194::-;37465:4;37485:20;37503:1;37485:20;:::i;:::-;37480:25;;37519:20;37537:1;37519:20;:::i;:::-;37514:25;;37563:1;37560;37556:9;37548:17;;37587:1;37581:4;37578:11;37575:37;;;37592:18;;:::i;:::-;37575:37;37425:194;;;;:::o;37625:174::-;37765:26;37761:1;37753:6;37749:14;37742:50;37625:174;:::o;37805:366::-;37947:3;37968:67;38032:2;38027:3;37968:67;:::i;:::-;37961:74;;38044:93;38133:3;38044:93;:::i;:::-;38162:2;38157:3;38153:12;38146:19;;37805:366;;;:::o;38177:419::-;38343:4;38381:2;38370:9;38366:18;38358:26;;38430:9;38424:4;38420:20;38416:1;38405:9;38401:17;38394:47;38458:131;38584:4;38458:131;:::i;:::-;38450:139;;38177:419;;;:::o;38602:541::-;38773:4;38811:3;38800:9;38796:19;38788:27;;38825:71;38893:1;38882:9;38878:17;38869:6;38825:71;:::i;:::-;38906:72;38974:2;38963:9;38959:18;38950:6;38906:72;:::i;:::-;38988:66;39050:2;39039:9;39035:18;39026:6;38988:66;:::i;:::-;39064:72;39132:2;39121:9;39117:18;39108:6;39064:72;:::i;:::-;38602:541;;;;;;;:::o;39149:225::-;39289:34;39285:1;39277:6;39273:14;39266:58;39358:8;39353:2;39345:6;39341:15;39334:33;39149:225;:::o;39380:366::-;39522:3;39543:67;39607:2;39602:3;39543:67;:::i;:::-;39536:74;;39619:93;39708:3;39619:93;:::i;:::-;39737:2;39732:3;39728:12;39721:19;;39380:366;;;:::o;39752:419::-;39918:4;39956:2;39945:9;39941:18;39933:26;;40005:9;39999:4;39995:20;39991:1;39980:9;39976:17;39969:47;40033:131;40159:4;40033:131;:::i;:::-;40025:139;;39752:419;;;:::o;40177:223::-;40317:34;40313:1;40305:6;40301:14;40294:58;40386:6;40381:2;40373:6;40369:15;40362:31;40177:223;:::o;40406:366::-;40548:3;40569:67;40633:2;40628:3;40569:67;:::i;:::-;40562:74;;40645:93;40734:3;40645:93;:::i;:::-;40763:2;40758:3;40754:12;40747:19;;40406:366;;;:::o;40778:419::-;40944:4;40982:2;40971:9;40967:18;40959:26;;41031:9;41025:4;41021:20;41017:1;41006:9;41002:17;40995:47;41059:131;41185:4;41059:131;:::i;:::-;41051:139;;40778:419;;;:::o;41203:221::-;41343:34;41339:1;41331:6;41327:14;41320:58;41412:4;41407:2;41399:6;41395:15;41388:29;41203:221;:::o;41430:366::-;41572:3;41593:67;41657:2;41652:3;41593:67;:::i;:::-;41586:74;;41669:93;41758:3;41669:93;:::i;:::-;41787:2;41782:3;41778:12;41771:19;;41430:366;;;:::o;41802:419::-;41968:4;42006:2;41995:9;41991:18;41983:26;;42055:9;42049:4;42045:20;42041:1;42030:9;42026:17;42019:47;42083:131;42209:4;42083:131;:::i;:::-;42075:139;;41802:419;;;:::o;42227:179::-;42367:31;42363:1;42355:6;42351:14;42344:55;42227:179;:::o;42412:366::-;42554:3;42575:67;42639:2;42634:3;42575:67;:::i;:::-;42568:74;;42651:93;42740:3;42651:93;:::i;:::-;42769:2;42764:3;42760:12;42753:19;;42412:366;;;:::o;42784:419::-;42950:4;42988:2;42977:9;42973:18;42965:26;;43037:9;43031:4;43027:20;43023:1;43012:9;43008:17;43001:47;43065:131;43191:4;43065:131;:::i;:::-;43057:139;;42784:419;;;:::o;43209:224::-;43349:34;43345:1;43337:6;43333:14;43326:58;43418:7;43413:2;43405:6;43401:15;43394:32;43209:224;:::o;43439:366::-;43581:3;43602:67;43666:2;43661:3;43602:67;:::i;:::-;43595:74;;43678:93;43767:3;43678:93;:::i;:::-;43796:2;43791:3;43787:12;43780:19;;43439:366;;;:::o;43811:419::-;43977:4;44015:2;44004:9;44000:18;43992:26;;44064:9;44058:4;44054:20;44050:1;44039:9;44035:17;44028:47;44092:131;44218:4;44092:131;:::i;:::-;44084:139;;43811:419;;;:::o;44236:222::-;44376:34;44372:1;44364:6;44360:14;44353:58;44445:5;44440:2;44432:6;44428:15;44421:30;44236:222;:::o;44464:366::-;44606:3;44627:67;44691:2;44686:3;44627:67;:::i;:::-;44620:74;;44703:93;44792:3;44703:93;:::i;:::-;44821:2;44816:3;44812:12;44805:19;;44464:366;;;:::o;44836:419::-;45002:4;45040:2;45029:9;45025:18;45017:26;;45089:9;45083:4;45079:20;45075:1;45064:9;45060:17;45053:47;45117:131;45243:4;45117:131;:::i;:::-;45109:139;;44836:419;;;:::o;45261:225::-;45401:34;45397:1;45389:6;45385:14;45378:58;45470:8;45465:2;45457:6;45453:15;45446:33;45261:225;:::o;45492:366::-;45634:3;45655:67;45719:2;45714:3;45655:67;:::i;:::-;45648:74;;45731:93;45820:3;45731:93;:::i;:::-;45849:2;45844:3;45840:12;45833:19;;45492:366;;;:::o;45864:419::-;46030:4;46068:2;46057:9;46053:18;46045:26;;46117:9;46111:4;46107:20;46103:1;46092:9;46088:17;46081:47;46145:131;46271:4;46145:131;:::i;:::-;46137:139;;45864:419;;;:::o;46289:220::-;46429:34;46425:1;46417:6;46413:14;46406:58;46498:3;46493:2;46485:6;46481:15;46474:28;46289:220;:::o;46515:366::-;46657:3;46678:67;46742:2;46737:3;46678:67;:::i;:::-;46671:74;;46754:93;46843:3;46754:93;:::i;:::-;46872:2;46867:3;46863:12;46856:19;;46515:366;;;:::o;46887:419::-;47053:4;47091:2;47080:9;47076:18;47068:26;;47140:9;47134:4;47130:20;47126:1;47115:9;47111:17;47104:47;47168:131;47294:4;47168:131;:::i;:::-;47160:139;;46887:419;;;:::o;47312:221::-;47452:34;47448:1;47440:6;47436:14;47429:58;47521:4;47516:2;47508:6;47504:15;47497:29;47312:221;:::o;47539:366::-;47681:3;47702:67;47766:2;47761:3;47702:67;:::i;:::-;47695:74;;47778:93;47867:3;47778:93;:::i;:::-;47896:2;47891:3;47887:12;47880:19;;47539:366;;;:::o;47911:419::-;48077:4;48115:2;48104:9;48100:18;48092:26;;48164:9;48158:4;48154:20;48150:1;48139:9;48135:17;48128:47;48192:131;48318:4;48192:131;:::i;:::-;48184:139;;47911:419;;;:::o;48336:182::-;48476:34;48472:1;48464:6;48460:14;48453:58;48336:182;:::o;48524:366::-;48666:3;48687:67;48751:2;48746:3;48687:67;:::i;:::-;48680:74;;48763:93;48852:3;48763:93;:::i;:::-;48881:2;48876:3;48872:12;48865:19;;48524:366;;;:::o;48896:419::-;49062:4;49100:2;49089:9;49085:18;49077:26;;49149:9;49143:4;49139:20;49135:1;49124:9;49120:17;49113:47;49177:131;49303:4;49177:131;:::i;:::-;49169:139;;48896:419;;;:::o;49321:410::-;49361:7;49384:20;49402:1;49384:20;:::i;:::-;49379:25;;49418:20;49436:1;49418:20;:::i;:::-;49413:25;;49473:1;49470;49466:9;49495:30;49513:11;49495:30;:::i;:::-;49484:41;;49674:1;49665:7;49661:15;49658:1;49655:22;49635:1;49628:9;49608:83;49585:139;;49704:18;;:::i;:::-;49585:139;49369:362;49321:410;;;;:::o;49737:181::-;49877:33;49873:1;49865:6;49861:14;49854:57;49737:181;:::o;49924:366::-;50066:3;50087:67;50151:2;50146:3;50087:67;:::i;:::-;50080:74;;50163:93;50252:3;50163:93;:::i;:::-;50281:2;50276:3;50272:12;50265:19;;49924:366;;;:::o;50296:419::-;50462:4;50500:2;50489:9;50485:18;50477:26;;50549:9;50543:4;50539:20;50535:1;50524:9;50520:17;50513:47;50577:131;50703:4;50577:131;:::i;:::-;50569:139;;50296:419;;;:::o

Swarm Source

ipfs://14571edeac2ffbf194e3a67063a6a107a6f9446761d257ba2d1d4c14f51a76a7
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.