Contract 0xaFaBB05Cec50a6A388A4E1d6338d300a8322Dd7B

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe599d1175ad452dd06f0d3035e6edc4ba9823c5386c387c96b2f6cac955e0ffcCreate Escrow583500762023-03-25 14:22:4470 days 16 hrs ago0x7dd98aaf4b979a0f265acf1487fa9d0a85e9681a IN  0xafabb05cec50a6a388a4e1d6338d300a8322dd7b0.1 FTM0.077952440204
0x23859f1c3128e14eb9b9b1e7bcbec5f6713952c4606f1641d865690b21d1c6e8Switch Active Tr...583491542023-03-25 14:02:0870 days 16 hrs ago0xf0c6de7d153650bb31da86a15b0b7e5f34ce37a2 IN  0xafabb05cec50a6a388a4e1d6338d300a8322dd7b0 FTM0.002130388422
0xf752a9bd86f90a0b7e1cafc1a9eba75d51339946e8cb7e29c5b1b79d4ca6f565Switch Active Tr...583490582023-03-25 13:59:5570 days 16 hrs ago0xf0c6de7d153650bb31da86a15b0b7e5f34ce37a2 IN  0xafabb05cec50a6a388a4e1d6338d300a8322dd7b0 FTM0.001477268562
0x3a99bb6f93b911f9073a542f7ea98366aeecf74292b40fb3e4d5a892b6c2c1a20x60806040583480132023-03-25 13:39:0770 days 16 hrs ago0xa0211c6711ba99e0607318545cffef0257b09492 IN  Create: EscrowFactory0 FTM0.150063436464
[ Download CSV Export 
Latest 4 internal transactions
Parent Txn Hash Block From To Value
0x7f95bc7055641e2e500b2e32a2967c9c1dbc3ed6e259c19a2c5933784d51bd23583501522023-03-25 14:24:0970 days 16 hrs ago 0x2119bbce4673f714e638313983cadd0a4656a643 0xafabb05cec50a6a388a4e1d6338d300a8322dd7b0.001 FTM
0xe599d1175ad452dd06f0d3035e6edc4ba9823c5386c387c96b2f6cac955e0ffc583500762023-03-25 14:22:4470 days 16 hrs ago 0xafabb05cec50a6a388a4e1d6338d300a8322dd7b 0x2119bbce4673f714e638313983cadd0a4656a6430.1 FTM
0xe599d1175ad452dd06f0d3035e6edc4ba9823c5386c387c96b2f6cac955e0ffc583500762023-03-25 14:22:4470 days 16 hrs ago 0xafabb05cec50a6a388a4e1d6338d300a8322dd7b  Contract Creation0.1 FTM
0x3a99bb6f93b911f9073a542f7ea98366aeecf74292b40fb3e4d5a892b6c2c1a2583480132023-03-25 13:39:0770 days 16 hrs ago 0xa0211c6711ba99e0607318545cffef0257b09492  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
EscrowFactory

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 3 : IERC20.sol
// SPDX-License-Identifier: MIT
// 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 2 of 3 : Escrow.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

import '@openzeppelin/contracts/token/ERC20/IERC20.sol';

contract Escrow {
    enum EscrowStatus {
        Launched,
        Ongoing,
        RequestRevised,
        Delivered,
        Dispute,
        Cancelled,
        Complete
    }

    struct EscrowDetail {
        EscrowStatus status;
        bytes32 title;
        address tokenAddress;
        uint256 deadline;
        address payable buyer;
        address payable seller;
        uint256 requestRevisedDeadline;
        uint256 amount;
        address escrowAddress;
        uint8 feePercent;
    }

    EscrowDetail escrowDetail;
    address payable public addressToPayFee;
    uint256 rejectCount = 0;
    address public tokenAddress;
    mapping(address => bool) public areTrustedHandlers;

    constructor(
        address payable _addressToPayFee,
        address _tokenAddress,
        uint256 _duration,
        uint256 amount,
        bytes32 title,
        address payable buyer,
        address payable seller,
        uint8 _feePercent,
        address[] memory _handlers
    ) {
        require(_duration == 0 || _duration >= 86400, '___INVALID_DURATION___'); // SHOULD BE MIN 1 DAY
        require(_feePercent > 0 || _feePercent < 100, '___INVALID_FEE_PERCENT___');
        uint256 duration = 915151608; //29 years default
        if (_duration >= 0) {
            duration = _duration;
        }
        addressToPayFee = _addressToPayFee;
        tokenAddress = _tokenAddress;
        areTrustedHandlers[msg.sender] = true;
        addTrustedHandlers(_handlers);
        escrowDetail = EscrowDetail(
            EscrowStatus.Launched,
            title,
            _tokenAddress,
            duration + block.timestamp,
            buyer,
            seller,
            0,
            amount,
            address(this),
            _feePercent
        ); // solhint-disable-line not-rely-on-time
    }

    fallback() external payable {
        require(uint8(escrowDetail.status) < 5, '___NOT_ELIGIBLE___');
        require(msg.value > 0, '___INVALID_AMOUNT___');
    }

    receive() external payable {
        require(uint8(escrowDetail.status) < 5, '___NOT_ELIGIBLE___');
        require(msg.value > 0, '___INVALID_AMOUNT___');
    }

    function getBalance() public view returns (uint256) {
        if (tokenAddress == address(0)) {
            return address(this).balance;
        }
        return IERC20(tokenAddress).balanceOf(address(this));
    }

    function addTrustedHandlers(address[] memory _handlers) public trusted {
        for (uint256 i = 0; i < _handlers.length; i++) {
            areTrustedHandlers[_handlers[i]] = true;
        }
    }

    function sendAndStatusUpdate(address payable toFund, EscrowStatus status) private {
        uint256 fee = (escrowDetail.amount * escrowDetail.feePercent) / 100; // %1
        if (tokenAddress == address(0)) {
            addressToPayFee.transfer(fee); // %1
            toFund.transfer(escrowDetail.amount - fee);
        } else {
            IERC20 token = IERC20(tokenAddress);
            token.transfer(addressToPayFee, fee); // %1
            token.transfer(toFund, escrowDetail.amount - fee);
        }
        escrowDetail.status = status;
    }

    function sellerLaunchedApprove() public onlySeller {
        require(getBalance() > 0, '___NO_FUNDS___');
        require(escrowDetail.status == EscrowStatus.Launched, '___NOT_IN_LAUNCHED_STATUS___');
        escrowDetail.status = EscrowStatus.Ongoing;
    }

    function sellerDeliver() external onlySeller {
        require(escrowDetail.status == EscrowStatus.Ongoing, '___NOT_IN_ONGOING_STATUS___');
        escrowDetail.status = EscrowStatus.Delivered;
    }

    function buyerConfirmDelivery() external onlyBuyer {
        require(escrowDetail.status == EscrowStatus.Delivered, '___NOT_IN_DELIVERED_STATUS___');
        sendAndStatusUpdate(escrowDetail.seller, EscrowStatus.Complete);
    }

    function buyerDeliverReject(uint256 _deliverRejectDuration) external onlyBuyer {
        require(escrowDetail.status == EscrowStatus.Delivered, '___NOT_IN_DELIVERED_STATUS___');
        require(_deliverRejectDuration >= 86400, '___REJECT_MIN_DAY___'); //1 day min
        rejectCount++;
        EscrowStatus state = EscrowStatus.RequestRevised;
        if (rejectCount > 1) {
            state = EscrowStatus.Dispute;
            escrowDetail.status = state;
        } else {
            escrowDetail.status = state;
            escrowDetail.requestRevisedDeadline = _deliverRejectDuration + block.timestamp;
        }
    }

    function sellerRejectDeliverReject() external onlySeller {
        require(escrowDetail.status == EscrowStatus.RequestRevised, '___NOT_IN_REJECT_DELIVERY_STATUS___');
        escrowDetail.status = EscrowStatus.Dispute;
    }

    function sellerApproveDeliverReject() external onlySeller {
        require(escrowDetail.status == EscrowStatus.RequestRevised, '___NOT_IN_REJECT_DELIVERY_STATUS___');
        escrowDetail.status = EscrowStatus.Ongoing;
        escrowDetail.deadline = escrowDetail.requestRevisedDeadline;
    }

    function cancel() external {
        require(uint8(escrowDetail.status) < 3, '___NOT_ELIGIBLE___');
        require(msg.sender == escrowDetail.buyer || msg.sender == escrowDetail.seller, '___INVALID_BUYER_SELLER___');

        if (
            msg.sender == escrowDetail.buyer &&
            (escrowDetail.status == EscrowStatus.Ongoing || escrowDetail.status == EscrowStatus.RequestRevised)
        ) {
            require(escrowDetail.deadline <= block.timestamp && block.timestamp >= escrowDetail.requestRevisedDeadline, '___NOT_EXPIRED___');
        }

        sendAndStatusUpdate(escrowDetail.buyer, EscrowStatus.Cancelled);
    }

    function fund(address payable toFund) external trusted {
        require(toFund == escrowDetail.buyer || toFund == escrowDetail.seller, '___INVALID_BUYER_SELLER___');
        require(EscrowStatus.Cancelled != escrowDetail.status, '___ALREADY_CANCELLED___');
        require(escrowDetail.status != EscrowStatus.Complete, '___NOT_IN_COMPLETE_STATUS___');
        sendAndStatusUpdate(toFund, EscrowStatus.Complete);
    }

    function getDetails() public view returns (EscrowDetail memory escrow) {
        return escrowDetail;
    }

    modifier onlyBuyer() {
        require(msg.sender == escrowDetail.buyer, '___ONLY_BUYER___');
        _;
    }

    modifier onlySeller() {
        require(msg.sender == escrowDetail.seller, '___ONLY_SELLER___');
        _;
    }

    modifier trusted() {
        require(areTrustedHandlers[msg.sender], '___NOT_TRUSTED___');
        _;
    }
}

File 3 of 3 : EscrowFactory.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;

import './Escrow.sol';
import '@openzeppelin/contracts/token/ERC20/IERC20.sol';

contract EscrowFactory {
    uint8 feePercent = 1;
    uint256 public counter;
    address[] escrows;
    address[] processedTrustedHandlers;
    mapping(address => address[]) public myEscrows;
    mapping(address => bool) public areTrustedHandlers;
    mapping(address => bool) public areTokenTrusted;
    address feeAddress = address(this);
    event Created(address);

    constructor(address _backup, address[] memory trustedTokens) {
        processedTrustedHandlers.push(msg.sender);
        areTrustedHandlers[msg.sender] = true;
        processedTrustedHandlers.push(_backup);
        areTrustedHandlers[_backup] = true;
        areTokenTrusted[address(0)] = true; // for native currencies
        switchActiveTrustedTokens(trustedTokens, true);
    }

    function createEscrow(
        address payable seller,
        address tokenAddress,
        uint256 amount,
        bytes32 title,
        uint256 _duration
    ) external payable returns (address) {
        require(msg.sender != seller, '___INVALID_SAME___');
        require(seller != address(0), '___NON_EXIST_ADDRESS___');
        require(areTokenTrusted[tokenAddress], '___NOT_TRUSTED___');
        require(_duration == 0 || _duration >= 86400, '___INVALID_DURATION___'); // ONE_DAY_AS_SECONDS

        IERC20 token = IERC20(tokenAddress);

        if (tokenAddress != address(0)) {
            require(token.balanceOf(msg.sender) >= amount, '___TOKEN_UNAVAILABLE___');
        } else {
            require(msg.value == amount, '___DIFFER_AMOUNT_VAL___');
        }

        Escrow escrow = new Escrow(
            payable(feeAddress),
            tokenAddress,
            _duration,
            amount,
            title,
            payable(msg.sender),
            seller,
            feePercent,
            getProcessedHandlers(true)
        );

        if (tokenAddress == address(0)) {
            payable(address(escrow)).transfer(msg.value);
        } else {
            token.transferFrom(msg.sender, address(escrow), amount);
        }

        escrows.push(address(escrow));
        myEscrows[msg.sender].push(address(escrow));
        myEscrows[seller].push(address(escrow));
        emit Created(address(escrow));
        return address(escrow);
    }

    function getProcessedHandlers(bool _trusted) public view returns (address[] memory) {
        address[] memory processedHandlers = new address[](processedTrustedHandlers.length);
        uint j = 0;
        for (uint i = 0; i < processedTrustedHandlers.length; i++) {
            if (areTrustedHandlers[processedTrustedHandlers[i]] == _trusted) {
                processedHandlers[j] = processedTrustedHandlers[i];
                j++;
            }
        }
        return processedHandlers;
    }

    function withdraw(address payable to, address tokenAddress, uint256 amount) external trusted {   
        if (tokenAddress == address(0)) {
            to.transfer(amount);
        } else {
            IERC20(tokenAddress).transfer(to, amount);
        }
    }

    function switchActiveTrustedHandlers(address[] memory _handlers, bool approve) public trusted {
        for (uint256 i = 0; i < _handlers.length; i++) {
            areTrustedHandlers[_handlers[i]] = approve;
            processedTrustedHandlers.push(_handlers[i]);
        }
    }

    function switchActiveTrustedTokens(address[] memory _tokens, bool approve) public trusted {
        for (uint256 i = 0; i < _tokens.length; i++) {
            areTokenTrusted[_tokens[i]] = approve;
        }
    }

    function checkTrusted(address _addr) public view trusted returns (bool) {
        return areTrustedHandlers[_addr];
    }

    function checkTrustedToken(address _token) public view trusted returns (bool) {
        return areTokenTrusted[_token];
    }

    function getFee() public view trusted returns (uint8) {
        return feePercent;
    }

    function updateFeePercent(uint8 _feePercent) external trusted {
        require(_feePercent > 0 || _feePercent < 100, '___INVALID_FEE_PERCENT___');
        feePercent = _feePercent;
    }

    function updateFeeAddress(address _feeAddress) external trusted {
        feeAddress = _feeAddress;
    }

    fallback() external payable {
        require(msg.value > 0, '___INVALID_AMOUNT___');
    }
    receive() external payable {
        require(msg.value > 0, '___INVALID_AMOUNT___');
    }

    function balanceOf(address tokenAddress) public view returns (uint256) {
        if (tokenAddress == address(0)) {
            return address(this).balance;
        }
        return IERC20(tokenAddress).balanceOf(address(this));
    }

    function getMyEscrows() public view returns (address[] memory escrowAddresses) {
        return myEscrows[msg.sender];
    }

    // recent to oldest
    function getEscrowDetailsPaging(uint256 offset) external view trusted returns (address[] memory escrowAddresses, uint256 total) {
        uint256 limit = 10;
        if (limit > escrows.length - offset) {
            limit = escrows.length - offset;
        }

        address[] memory values = new address[](limit);
        for (uint256 i = 0; i < limit; i++) {
            values[i] = escrows[escrows.length - 1 - offset - i];
        }
        return (values, escrows.length);
    }

    modifier trusted() {
        require(areTrustedHandlers[msg.sender], '___NOT_TRUSTED___');
        _;
    }
}

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_backup","type":"address"},{"internalType":"address[]","name":"trustedTokens","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"Created","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"areTokenTrusted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"areTrustedHandlers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkTrusted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"checkTrustedToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"counter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"seller","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes32","name":"title","type":"bytes32"},{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"createEscrow","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"offset","type":"uint256"}],"name":"getEscrowDetailsPaging","outputs":[{"internalType":"address[]","name":"escrowAddresses","type":"address[]"},{"internalType":"uint256","name":"total","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMyEscrows","outputs":[{"internalType":"address[]","name":"escrowAddresses","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_trusted","type":"bool"}],"name":"getProcessedHandlers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"myEscrows","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_handlers","type":"address[]"},{"internalType":"bool","name":"approve","type":"bool"}],"name":"switchActiveTrustedHandlers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"bool","name":"approve","type":"bool"}],"name":"switchActiveTrustedTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeAddress","type":"address"}],"name":"updateFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_feePercent","type":"uint8"}],"name":"updateFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"to","type":"address"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260016000806101000a81548160ff021916908360ff16021790555030600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200006d57600080fd5b50604051620065bc380380620065bc833981810160405281019062000093919062000595565b6003339080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506003829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620002748160016200027c60201b60201c565b505062000733565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166200030b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000302906200065c565b60405180910390fd5b60005b8251811015620003a25781600660008584815181106200033357620003326200067e565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806200039990620006e6565b9150506200030e565b505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620003e882620003bb565b9050919050565b620003fa81620003db565b81146200040657600080fd5b50565b6000815190506200041a81620003ef565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620004708262000425565b810181811067ffffffffffffffff8211171562000492576200049162000436565b5b80604052505050565b6000620004a7620003a7565b9050620004b5828262000465565b919050565b600067ffffffffffffffff821115620004d857620004d762000436565b5b602082029050602081019050919050565b600080fd5b600062000505620004ff84620004ba565b6200049b565b905080838252602082019050602084028301858111156200052b576200052a620004e9565b5b835b8181101562000558578062000543888262000409565b8452602084019350506020810190506200052d565b5050509392505050565b600082601f8301126200057a576200057962000420565b5b81516200058c848260208601620004ee565b91505092915050565b60008060408385031215620005af57620005ae620003b1565b5b6000620005bf8582860162000409565b925050602083015167ffffffffffffffff811115620005e357620005e2620003b6565b5b620005f18582860162000562565b9150509250929050565b600082825260208201905092915050565b7f5f5f5f4e4f545f545255535445445f5f5f000000000000000000000000000000600082015250565b600062000644601183620005fb565b915062000651826200060c565b602082019050919050565b60006020820190508181036000830152620006778162000635565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b6000620006f382620006dc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620007285762000727620006ad565b5b600182019050919050565b615e7980620007436000396000f3fe6080604052600436106200011b5760003560e01c80638ff6c70111620000a3578063bbf7b4ee116200006d578063bbf7b4ee146200046a578063ced72f871462000498578063d9caed1214620004c8578063e5d9a41a14620004f6578063f17171e9146200053a5762000169565b80638ff6c701146200039a5780639fc6394e14620003c8578063a8024695146200040c578063bbcaac38146200043c5762000169565b806361bc221a11620000e557806361bc221a146200029e57806370a0823114620002ce5780637b0de07214620003125780638d1ac59d14620003565762000169565b806307d2b63114620001b15780630c4b55a114620001f557806332905576146200022b5780633ecf5b7914620002705762000169565b3662000169576000341162000167576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200015e9062001b30565b60405180910390fd5b005b60003411620001af576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001a69062001b30565b60405180910390fd5b005b348015620001be57600080fd5b50620001dd6004803603810190620001d7919062001bcb565b6200057e565b604051620001ec919062001c1a565b60405180910390f35b6200021360048036038101906200020d919062001cf2565b6200059e565b60405162000222919062001d8b565b60405180910390f35b3480156200023857600080fd5b5062000257600480360381019062000251919062001da8565b62000c2c565b6040516200026792919062001eb9565b60405180910390f35b3480156200027d57600080fd5b506200029c600480360381019062000296919062001f2b565b62000e3b565b005b348015620002ab57600080fd5b50620002b662000f3f565b604051620002c5919062001f5d565b60405180910390f35b348015620002db57600080fd5b50620002fa6004803603810190620002f4919062001bcb565b62000f45565b60405162000309919062001f5d565b60405180910390f35b3480156200031f57600080fd5b506200033e600480360381019062000338919062001f7a565b6200100b565b6040516200034d919062001d8b565b60405180910390f35b3480156200036357600080fd5b506200038260048036038101906200037c919062001bcb565b6200105a565b60405162000391919062001c1a565b60405180910390f35b348015620003a757600080fd5b50620003c66004803603810190620003c0919062002167565b6200113f565b005b348015620003d557600080fd5b50620003f46004803603810190620003ee919062001bcb565b620012ea565b60405162000403919062001c1a565b60405180910390f35b3480156200041957600080fd5b5062000424620013cf565b604051620004339190620021cd565b60405180910390f35b3480156200044957600080fd5b5062000468600480360381019062000462919062001bcb565b6200149c565b005b3480156200047757600080fd5b5062000496600480360381019062000490919062002167565b6200156f565b005b348015620004a557600080fd5b50620004b06200169a565b604051620004bf919062002202565b60405180910390f35b348015620004d557600080fd5b50620004f46004803603810190620004ee91906200221f565b6200173e565b005b3480156200050357600080fd5b506200052260048036038101906200051c91906200227b565b620018da565b604051620005319190620021cd565b60405180910390f35b3480156200054757600080fd5b5062000566600480360381019062000560919062001bcb565b62001aa1565b60405162000575919062001c1a565b60405180910390f35b60066020528060005260406000206000915054906101000a900460ff1681565b60008573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff160362000611576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200060890620022fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff160362000683576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200067a906200236f565b60405180910390fd5b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1662000712576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200070990620023e1565b60405180910390fd5b6000821480620007255750620151808210155b62000767576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075e9062002453565b60405180910390fd5b6000859050600073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16146200086b57848173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401620007dd919062001d8b565b602060405180830381865afa158015620007fb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200082191906200248c565b101562000865576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200085c906200250e565b60405180910390fd5b620008b1565b843414620008b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008a79062002580565b60405180910390fd5b5b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687858888338d60008054906101000a900460ff16620008f66001620018da565b604051620009049062001ac1565b6200091899989796959493929190620025c4565b604051809103906000f08015801562000935573d6000803e3d6000fd5b509050600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603620009bb578073ffffffffffffffffffffffffffffffffffffffff166108fc349081150290604051600060405180830381858888f19350505050158015620009b4573d6000803e3d6000fd5b5062000a42565b8173ffffffffffffffffffffffffffffffffffffffff166323b872dd3383896040518463ffffffff1660e01b8152600401620009fa939291906200266a565b6020604051808303816000875af115801562000a1a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a409190620026be565b505b6002819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1449abf21e49fd025f33495e77f7b1461caefdd3d4bb646424a3f445c4576a5b8160405162000c16919062001d8b565b60405180910390a1809250505095945050505050565b60606000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1662000cbf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cb690620023e1565b60405180910390fd5b6000600a90508360028054905062000cd891906200271f565b81111562000cf6578360028054905062000cf391906200271f565b90505b60008167ffffffffffffffff81111562000d155762000d1462001fd7565b5b60405190808252806020026020018201604052801562000d445781602001602082028036833780820191505090505b50905060005b8281101562000e285760028187600160028054905062000d6b91906200271f565b62000d7791906200271f565b62000d8391906200271f565b8154811062000d975762000d966200275a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682828151811062000dd85762000dd76200275a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050808062000e1f9062002789565b91505062000d4a565b5080600280549050935093505050915091565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1662000eca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ec190620023e1565b60405180910390fd5b60008160ff16118062000ee0575060648160ff16105b62000f22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f199062002826565b60405180910390fd5b806000806101000a81548160ff021916908360ff16021790555050565b60015481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000f845747905062001006565b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040162000fbf919062001d8b565b602060405180830381865afa15801562000fdd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200100391906200248c565b90505b919050565b600460205281600052604060002081815481106200102857600080fd5b906000526020600020016000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16620010eb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010e290620023e1565b60405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16620011ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620011c590620023e1565b60405180910390fd5b60005b8251811015620012e5578160056000858481518110620011f657620011f56200275a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060038382815181106200126757620012666200275a565b5b60200260200101519080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508080620012dc9062002789565b915050620011d1565b505050565b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166200137b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200137290620023e1565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6060600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054806020026020016040519081016040528092919081815260200182805480156200149257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831162001447575b5050505050905090565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166200152b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200152290620023e1565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16620015fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620015f590620023e1565b60405180910390fd5b60005b8251811015620016955781600660008584815181106200162657620016256200275a565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806200168c9062002789565b91505062001601565b505050565b6000600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166200172b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200172290620023e1565b60405180910390fd5b60008054906101000a900460ff16905090565b600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16620017cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620017c490620023e1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362001850578273ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801562001849573d6000803e3d6000fd5b50620018d5565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84836040518363ffffffff1660e01b81526004016200188d929190620028b3565b6020604051808303816000875af1158015620018ad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620018d39190620026be565b505b505050565b6060600060038054905067ffffffffffffffff8111156200190057620018ff62001fd7565b5b6040519080825280602002602001820160405280156200192f5781602001602082028036833780820191505090505b5090506000805b60038054905081101562001a965784151560056000600384815481106200196257620019616200275a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615150362001a805760038181548110620019f457620019f36200275a565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683838151811062001a355762001a346200275a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050818062001a7c9062002789565b9250505b808062001a8d9062002789565b91505062001936565b508192505050919050565b60056020528060005260406000206000915054906101000a900460ff1681565b61356380620028e183390190565b600082825260208201905092915050565b7f5f5f5f494e56414c49445f414d4f554e545f5f5f000000000000000000000000600082015250565b600062001b1860148362001acf565b915062001b258262001ae0565b602082019050919050565b6000602082019050818103600083015262001b4b8162001b09565b9050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062001b938262001b66565b9050919050565b62001ba58162001b86565b811462001bb157600080fd5b50565b60008135905062001bc58162001b9a565b92915050565b60006020828403121562001be45762001be362001b5c565b5b600062001bf48482850162001bb4565b91505092915050565b60008115159050919050565b62001c148162001bfd565b82525050565b600060208201905062001c31600083018462001c09565b92915050565b600062001c448262001b66565b9050919050565b62001c568162001c37565b811462001c6257600080fd5b50565b60008135905062001c768162001c4b565b92915050565b6000819050919050565b62001c918162001c7c565b811462001c9d57600080fd5b50565b60008135905062001cb18162001c86565b92915050565b6000819050919050565b62001ccc8162001cb7565b811462001cd857600080fd5b50565b60008135905062001cec8162001cc1565b92915050565b600080600080600060a0868803121562001d115762001d1062001b5c565b5b600062001d218882890162001c65565b955050602062001d348882890162001bb4565b945050604062001d478882890162001ca0565b935050606062001d5a8882890162001cdb565b925050608062001d6d8882890162001ca0565b9150509295509295909350565b62001d858162001b86565b82525050565b600060208201905062001da2600083018462001d7a565b92915050565b60006020828403121562001dc15762001dc062001b5c565b5b600062001dd18482850162001ca0565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b62001e118162001b86565b82525050565b600062001e25838362001e06565b60208301905092915050565b6000602082019050919050565b600062001e4b8262001dda565b62001e57818562001de5565b935062001e648362001df6565b8060005b8381101562001e9b57815162001e7f888262001e17565b975062001e8c8362001e31565b92505060018101905062001e68565b5085935050505092915050565b62001eb38162001c7c565b82525050565b6000604082019050818103600083015262001ed5818562001e3e565b905062001ee6602083018462001ea8565b9392505050565b600060ff82169050919050565b62001f058162001eed565b811462001f1157600080fd5b50565b60008135905062001f258162001efa565b92915050565b60006020828403121562001f445762001f4362001b5c565b5b600062001f548482850162001f14565b91505092915050565b600060208201905062001f74600083018462001ea8565b92915050565b6000806040838503121562001f945762001f9362001b5c565b5b600062001fa48582860162001bb4565b925050602062001fb78582860162001ca0565b9150509250929050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620020118262001fc6565b810181811067ffffffffffffffff8211171562002033576200203262001fd7565b5b80604052505050565b60006200204862001b52565b905062002056828262002006565b919050565b600067ffffffffffffffff82111562002079576200207862001fd7565b5b602082029050602081019050919050565b600080fd5b6000620020a6620020a0846200205b565b6200203c565b90508083825260208201905060208402830185811115620020cc57620020cb6200208a565b5b835b81811015620020f95780620020e4888262001bb4565b845260208401935050602081019050620020ce565b5050509392505050565b600082601f8301126200211b576200211a62001fc1565b5b81356200212d8482602086016200208f565b91505092915050565b620021418162001bfd565b81146200214d57600080fd5b50565b600081359050620021618162002136565b92915050565b6000806040838503121562002181576200218062001b5c565b5b600083013567ffffffffffffffff811115620021a257620021a162001b61565b5b620021b08582860162002103565b9250506020620021c38582860162002150565b9150509250929050565b60006020820190508181036000830152620021e9818462001e3e565b905092915050565b620021fc8162001eed565b82525050565b6000602082019050620022196000830184620021f1565b92915050565b6000806000606084860312156200223b576200223a62001b5c565b5b60006200224b8682870162001c65565b93505060206200225e8682870162001bb4565b9250506040620022718682870162001ca0565b9150509250925092565b60006020828403121562002294576200229362001b5c565b5b6000620022a48482850162002150565b91505092915050565b7f5f5f5f494e56414c49445f53414d455f5f5f0000000000000000000000000000600082015250565b6000620022e560128362001acf565b9150620022f282620022ad565b602082019050919050565b600060208201905081810360008301526200231881620022d6565b9050919050565b7f5f5f5f4e4f4e5f45584953545f414444524553535f5f5f000000000000000000600082015250565b60006200235760178362001acf565b915062002364826200231f565b602082019050919050565b600060208201905081810360008301526200238a8162002348565b9050919050565b7f5f5f5f4e4f545f545255535445445f5f5f000000000000000000000000000000600082015250565b6000620023c960118362001acf565b9150620023d68262002391565b602082019050919050565b60006020820190508181036000830152620023fc81620023ba565b9050919050565b7f5f5f5f494e56414c49445f4455524154494f4e5f5f5f00000000000000000000600082015250565b60006200243b60168362001acf565b9150620024488262002403565b602082019050919050565b600060208201905081810360008301526200246e816200242c565b9050919050565b600081519050620024868162001c86565b92915050565b600060208284031215620024a557620024a462001b5c565b5b6000620024b58482850162002475565b91505092915050565b7f5f5f5f544f4b454e5f554e415641494c41424c455f5f5f000000000000000000600082015250565b6000620024f660178362001acf565b91506200250382620024be565b602082019050919050565b600060208201905081810360008301526200252981620024e7565b9050919050565b7f5f5f5f4449464645525f414d4f554e545f56414c5f5f5f000000000000000000600082015250565b60006200256860178362001acf565b9150620025758262002530565b602082019050919050565b600060208201905081810360008301526200259b8162002559565b9050919050565b620025ad8162001c37565b82525050565b620025be8162001cb7565b82525050565b600061012082019050620025dc600083018c620025a2565b620025eb602083018b62001d7a565b620025fa604083018a62001ea8565b62002609606083018962001ea8565b620026186080830188620025b3565b6200262760a0830187620025a2565b6200263660c0830186620025a2565b6200264560e0830185620021f1565b8181036101008301526200265a818462001e3e565b90509a9950505050505050505050565b600060608201905062002681600083018662001d7a565b62002690602083018562001d7a565b6200269f604083018462001ea8565b949350505050565b600081519050620026b88162002136565b92915050565b600060208284031215620026d757620026d662001b5c565b5b6000620026e784828501620026a7565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200272c8262001c7c565b9150620027398362001c7c565b9250828210156200274f576200274e620026f0565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000620027968262001c7c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620027cb57620027ca620026f0565b5b600182019050919050565b7f5f5f5f494e56414c49445f4645455f50455243454e545f5f5f00000000000000600082015250565b60006200280e60198362001acf565b91506200281b82620027d6565b602082019050919050565b600060208201905081810360008301526200284181620027ff565b9050919050565b6000819050919050565b6000620028736200286d620028678462001b66565b62002848565b62001b66565b9050919050565b6000620028878262002852565b9050919050565b60006200289b826200287a565b9050919050565b620028ad816200288e565b82525050565b6000604082019050620028ca6000830185620028a2565b620028d9602083018462001ea8565b939250505056fe60806040526000600a553480156200001657600080fd5b50604051620035633803806200356383398181016040528101906200003c91906200086f565b60008714806200004f5750620151808710155b62000091576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200008890620009ce565b60405180910390fd5b60008260ff161180620000a7575060648260ff16105b620000e9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000e09062000a40565b60405180910390fd5b600063368c1af8905060008810620000ff578790505b89600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555088600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001ea826200045d60201b60201c565b604051806101400160405280600060068111156200020d576200020c62000a62565b5b81526020018781526020018a73ffffffffffffffffffffffffffffffffffffffff168152602001428362000242919062000ac0565b81526020018673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff168152602001600081526020018881526020013073ffffffffffffffffffffffffffffffffffffffff1681526020018460ff168152506000808201518160000160006101000a81548160ff02191690836006811115620002de57620002dd62000a62565b5b02179055506020820151816001015560408201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506060820151816003015560808201518160040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160050160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060c0820151816006015560e082015181600701556101008201518160080160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101208201518160080160146101000a81548160ff021916908360ff1602179055509050505050505050505050505062000c0b565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16620004ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004e39062000b6d565b60405180910390fd5b60005b815181101562000584576001600c600084848151811062000515576200051462000b8f565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806200057b9062000bbe565b915050620004ef565b5050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005c9826200059c565b9050919050565b620005db81620005bc565b8114620005e757600080fd5b50565b600081519050620005fb81620005d0565b92915050565b60006200060e826200059c565b9050919050565b620006208162000601565b81146200062c57600080fd5b50565b600081519050620006408162000615565b92915050565b6000819050919050565b6200065b8162000646565b81146200066757600080fd5b50565b6000815190506200067b8162000650565b92915050565b6000819050919050565b620006968162000681565b8114620006a257600080fd5b50565b600081519050620006b6816200068b565b92915050565b600060ff82169050919050565b620006d481620006bc565b8114620006e057600080fd5b50565b600081519050620006f481620006c9565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200074a82620006ff565b810181811067ffffffffffffffff821117156200076c576200076b62000710565b5b80604052505050565b60006200078162000588565b90506200078f82826200073f565b919050565b600067ffffffffffffffff821115620007b257620007b162000710565b5b602082029050602081019050919050565b600080fd5b6000620007df620007d98462000794565b62000775565b90508083825260208201905060208402830185811115620008055762000804620007c3565b5b835b818110156200083257806200081d88826200062f565b84526020840193505060208101905062000807565b5050509392505050565b600082601f830112620008545762000853620006fa565b5b815162000866848260208601620007c8565b91505092915050565b60008060008060008060008060006101208a8c03121562000895576200089462000592565b5b6000620008a58c828d01620005ea565b9950506020620008b88c828d016200062f565b9850506040620008cb8c828d016200066a565b9750506060620008de8c828d016200066a565b9650506080620008f18c828d01620006a5565b95505060a0620009048c828d01620005ea565b94505060c0620009178c828d01620005ea565b93505060e06200092a8c828d01620006e3565b9250506101008a015167ffffffffffffffff8111156200094f576200094e62000597565b5b6200095d8c828d016200083c565b9150509295985092959850929598565b600082825260208201905092915050565b7f5f5f5f494e56414c49445f4455524154494f4e5f5f5f00000000000000000000600082015250565b6000620009b66016836200096d565b9150620009c3826200097e565b602082019050919050565b60006020820190508181036000830152620009e981620009a7565b9050919050565b7f5f5f5f494e56414c49445f4645455f50455243454e545f5f5f00000000000000600082015250565b600062000a286019836200096d565b915062000a3582620009f0565b602082019050919050565b6000602082019050818103600083015262000a5b8162000a19565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000acd8262000646565b915062000ada8362000646565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000b125762000b1162000a91565b5b828201905092915050565b7f5f5f5f4e4f545f545255535445445f5f5f000000000000000000000000000000600082015250565b600062000b556011836200096d565b915062000b628262000b1d565b602082019050919050565b6000602082019050818103600083015262000b888162000b46565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600062000bcb8262000646565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820362000c005762000bff62000a91565b5b600182019050919050565b6129488062000c1b6000396000f3fe6080604052600436106100e15760003560e01c80639eb262f31161007f578063ea8a1af011610059578063ea8a1af014610388578063f17171e91461039f578063f3be156c146103dc578063fbbf93a01461040557610194565b80639eb262f31461031d578063c5abf87b14610346578063c78b64ab1461037157610194565b806344ad8080116100bb57806344ad8080146102ad5780636a84d18b146102c45780639a044c57146102db5780639d76ea58146102f257610194565b806312065fe0146102425780631f80bcd81461026d578063230244081461028457610194565b366101945760056000800160009054906101000a900460ff16600681111561010c5761010b6119f6565b5b60ff161061014f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161014690611a82565b60405180910390fd5b60003411610192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161018990611aee565b60405180910390fd5b005b60056000800160009054906101000a900460ff1660068111156101ba576101b96119f6565b5b60ff16106101fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101f490611a82565b60405180910390fd5b60003411610240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161023790611aee565b60405180910390fd5b005b34801561024e57600080fd5b50610257610430565b6040516102649190611b27565b60405180910390f35b34801561027957600080fd5b50610282610531565b005b34801561029057600080fd5b506102ab60048036038101906102a69190611bb4565b61067a565b005b3480156102b957600080fd5b506102c26108f1565b005b3480156102d057600080fd5b506102d9610a2e565b005b3480156102e757600080fd5b506102f0610b68565b005b3480156102fe57600080fd5b50610307610ca2565b6040516103149190611c02565b60405180910390f35b34801561032957600080fd5b50610344600480360381019061033f9190611da2565b610cc8565b005b34801561035257600080fd5b5061035b610de9565b6040516103689190611dfa565b60405180910390f35b34801561037d57600080fd5b50610386610e0f565b005b34801561039457600080fd5b5061039d610f93565b005b3480156103ab57600080fd5b506103c660048036038101906103c19190611e15565b611250565b6040516103d39190611e5d565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe9190611ea4565b611270565b005b34801561041157600080fd5b5061041a611465565b6040516104279190612047565b60405180910390f35b60008073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361048f5747905061052e565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016104ea9190611c02565b602060405180830381865afa158015610507573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061052b9190612078565b90505b90565b600060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105bb906120f1565b60405180910390fd5b600260068111156105d8576105d76119f6565b5b6000800160009054906101000a900460ff1660068111156105fc576105fb6119f6565b5b1461063c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063390612183565b60405180910390fd5b60016000800160006101000a81548160ff02191690836006811115610664576106636119f6565b5b0217905550600060060154600060030181905550565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610706576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fd906121ef565b60405180910390fd5b600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614806107b55750600060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6107f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107eb9061225b565b60405180910390fd5b6000800160009054906101000a900460ff166006811115610818576108176119f6565b5b6005600681111561082c5761082b6119f6565b5b0361086c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610863906122c7565b60405180910390fd5b60068081111561087f5761087e6119f6565b5b6000800160009054906101000a900460ff1660068111156108a3576108a26119f6565b5b036108e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108da90612333565b60405180910390fd5b6108ee816006611658565b50565b600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097b9061239f565b60405180910390fd5b60036006811115610998576109976119f6565b5b6000800160009054906101000a900460ff1660068111156109bc576109bb6119f6565b5b146109fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f39061240b565b60405180910390fd5b610a2c600060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166006611658565b565b600060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ac1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab8906120f1565b60405180910390fd5b60026006811115610ad557610ad46119f6565b5b6000800160009054906101000a900460ff166006811115610af957610af86119f6565b5b14610b39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3090612183565b60405180910390fd5b60046000800160006101000a81548160ff02191690836006811115610b6157610b606119f6565b5b0217905550565b600060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf2906120f1565b60405180910390fd5b60016006811115610c0f57610c0e6119f6565b5b6000800160009054906101000a900460ff166006811115610c3357610c326119f6565b5b14610c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6a90612477565b60405180910390fd5b60036000800160006101000a81548160ff02191690836006811115610c9b57610c9a6119f6565b5b0217905550565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4b906121ef565b60405180910390fd5b60005b8151811015610de5576001600c6000848481518110610d7957610d78612497565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610ddd906124f5565b915050610d57565b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e99906120f1565b60405180910390fd5b6000610eac610430565b11610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee390612589565b60405180910390fd5b60006006811115610f0057610eff6119f6565b5b6000800160009054906101000a900460ff166006811115610f2457610f236119f6565b5b14610f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5b906125f5565b60405180910390fd5b60016000800160006101000a81548160ff02191690836006811115610f8c57610f8b6119f6565b5b0217905550565b60036000800160009054906101000a900460ff166006811115610fb957610fb86119f6565b5b60ff1610610ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff390611a82565b60405180910390fd5b600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110ab5750600060050160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6110ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e19061225b565b60405180910390fd5b600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480156111bf575060016006811115611159576111586119f6565b5b6000800160009054906101000a900460ff16600681111561117d5761117c6119f6565b5b14806111be575060026006811115611198576111976119f6565b5b6000800160009054906101000a900460ff1660068111156111bc576111bb6119f6565b5b145b5b1561121e5742600060030154111580156111de57506000600601544210155b61121d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121490612661565b60405180910390fd5b5b61124e600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166005611658565b565b600c6020528060005260406000206000915054906101000a900460ff1681565b600060040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fa9061239f565b60405180910390fd5b60036006811115611317576113166119f6565b5b6000800160009054906101000a900460ff16600681111561133b5761133a6119f6565b5b1461137b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113729061240b565b60405180910390fd5b620151808110156113c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b8906126cd565b60405180910390fd5b600a60008154809291906113d4906124f5565b91905055506000600290506001600a54111561141f5760049050806000800160006101000a81548160ff02191690836006811115611415576114146119f6565b5b0217905550611461565b806000800160006101000a81548160ff02191690836006811115611446576114456119f6565b5b0217905550428261145791906126ed565b6000600601819055505b5050565b61146d611933565b6000604051806101400160405290816000820160009054906101000a900460ff1660068111156114a05761149f6119f6565b5b60068111156114b2576114b16119f6565b5b8152602001600182015481526020016002820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600382015481526020016004820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016005820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160068201548152602001600782015481526020016008820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016008820160149054906101000a900460ff1660ff1660ff1681525050905090565b60006064600060080160149054906101000a900460ff1660ff166000600701546116829190612743565b61168c91906127cc565b9050600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036117a957600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561174c573d6000803e3d6000fd5b508273ffffffffffffffffffffffffffffffffffffffff166108fc8260006007015461177891906127fd565b9081150290604051600060405180830381858888f193505050501580156117a3573d6000803e3d6000fd5b50611902565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161182d929190612890565b6020604051808303816000875af115801561184c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187091906128e5565b508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb858460006007015461189f91906127fd565b6040518363ffffffff1660e01b81526004016118bc929190612890565b6020604051808303816000875af11580156118db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ff91906128e5565b50505b816000800160006101000a81548160ff02191690836006811115611929576119286119f6565b5b0217905550505050565b60405180610140016040528060006006811115611953576119526119f6565b5b815260200160008019168152602001600073ffffffffffffffffffffffffffffffffffffffff16815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600073ffffffffffffffffffffffffffffffffffffffff1681526020016000815260200160008152602001600073ffffffffffffffffffffffffffffffffffffffff168152602001600060ff1681525090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600082825260208201905092915050565b7f5f5f5f4e4f545f454c494749424c455f5f5f0000000000000000000000000000600082015250565b6000611a6c601283611a25565b9150611a7782611a36565b602082019050919050565b60006020820190508181036000830152611a9b81611a5f565b9050919050565b7f5f5f5f494e56414c49445f414d4f554e545f5f5f000000000000000000000000600082015250565b6000611ad8601483611a25565b9150611ae382611aa2565b602082019050919050565b60006020820190508181036000830152611b0781611acb565b9050919050565b6000819050919050565b611b2181611b0e565b82525050565b6000602082019050611b3c6000830184611b18565b92915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611b8182611b56565b9050919050565b611b9181611b76565b8114611b9c57600080fd5b50565b600081359050611bae81611b88565b92915050565b600060208284031215611bca57611bc9611b4c565b5b6000611bd884828501611b9f565b91505092915050565b6000611bec82611b56565b9050919050565b611bfc81611be1565b82525050565b6000602082019050611c176000830184611bf3565b92915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611c6b82611c22565b810181811067ffffffffffffffff82111715611c8a57611c89611c33565b5b80604052505050565b6000611c9d611b42565b9050611ca98282611c62565b919050565b600067ffffffffffffffff821115611cc957611cc8611c33565b5b602082029050602081019050919050565b600080fd5b611ce881611be1565b8114611cf357600080fd5b50565b600081359050611d0581611cdf565b92915050565b6000611d1e611d1984611cae565b611c93565b90508083825260208201905060208402830185811115611d4157611d40611cda565b5b835b81811015611d6a5780611d568882611cf6565b845260208401935050602081019050611d43565b5050509392505050565b600082601f830112611d8957611d88611c1d565b5b8135611d99848260208601611d0b565b91505092915050565b600060208284031215611db857611db7611b4c565b5b600082013567ffffffffffffffff811115611dd657611dd5611b51565b5b611de284828501611d74565b91505092915050565b611df481611b76565b82525050565b6000602082019050611e0f6000830184611deb565b92915050565b600060208284031215611e2b57611e2a611b4c565b5b6000611e3984828501611cf6565b91505092915050565b60008115159050919050565b611e5781611e42565b82525050565b6000602082019050611e726000830184611e4e565b92915050565b611e8181611b0e565b8114611e8c57600080fd5b50565b600081359050611e9e81611e78565b92915050565b600060208284031215611eba57611eb9611b4c565b5b6000611ec884828501611e8f565b91505092915050565b60078110611ee257611ee16119f6565b5b50565b6000819050611ef382611ed1565b919050565b6000611f0382611ee5565b9050919050565b611f1381611ef8565b82525050565b6000819050919050565b611f2c81611f19565b82525050565b611f3b81611be1565b82525050565b611f4a81611b0e565b82525050565b611f5981611b76565b82525050565b600060ff82169050919050565b611f7581611f5f565b82525050565b61014082016000820151611f926000850182611f0a565b506020820151611fa56020850182611f23565b506040820151611fb86040850182611f32565b506060820151611fcb6060850182611f41565b506080820151611fde6080850182611f50565b5060a0820151611ff160a0850182611f50565b5060c082015161200460c0850182611f41565b5060e082015161201760e0850182611f41565b5061010082015161202c610100850182611f32565b50610120820151612041610120850182611f6c565b50505050565b60006101408201905061205d6000830184611f7b565b92915050565b60008151905061207281611e78565b92915050565b60006020828403121561208e5761208d611b4c565b5b600061209c84828501612063565b91505092915050565b7f5f5f5f4f4e4c595f53454c4c45525f5f5f000000000000000000000000000000600082015250565b60006120db601183611a25565b91506120e6826120a5565b602082019050919050565b6000602082019050818103600083015261210a816120ce565b9050919050565b7f5f5f5f4e4f545f494e5f52454a4543545f44454c49564552595f53544154555360008201527f5f5f5f0000000000000000000000000000000000000000000000000000000000602082015250565b600061216d602383611a25565b915061217882612111565b604082019050919050565b6000602082019050818103600083015261219c81612160565b9050919050565b7f5f5f5f4e4f545f545255535445445f5f5f000000000000000000000000000000600082015250565b60006121d9601183611a25565b91506121e4826121a3565b602082019050919050565b60006020820190508181036000830152612208816121cc565b9050919050565b7f5f5f5f494e56414c49445f42555945525f53454c4c45525f5f5f000000000000600082015250565b6000612245601a83611a25565b91506122508261220f565b602082019050919050565b6000602082019050818103600083015261227481612238565b9050919050565b7f5f5f5f414c52454144595f43414e43454c4c45445f5f5f000000000000000000600082015250565b60006122b1601783611a25565b91506122bc8261227b565b602082019050919050565b600060208201905081810360008301526122e0816122a4565b9050919050565b7f5f5f5f4e4f545f494e5f434f4d504c4554455f5354415455535f5f5f00000000600082015250565b600061231d601c83611a25565b9150612328826122e7565b602082019050919050565b6000602082019050818103600083015261234c81612310565b9050919050565b7f5f5f5f4f4e4c595f42555945525f5f5f00000000000000000000000000000000600082015250565b6000612389601083611a25565b915061239482612353565b602082019050919050565b600060208201905081810360008301526123b88161237c565b9050919050565b7f5f5f5f4e4f545f494e5f44454c4956455245445f5354415455535f5f5f000000600082015250565b60006123f5601d83611a25565b9150612400826123bf565b602082019050919050565b60006020820190508181036000830152612424816123e8565b9050919050565b7f5f5f5f4e4f545f494e5f4f4e474f494e475f5354415455535f5f5f0000000000600082015250565b6000612461601b83611a25565b915061246c8261242b565b602082019050919050565b6000602082019050818103600083015261249081612454565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061250082611b0e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612532576125316124c6565b5b600182019050919050565b7f5f5f5f4e4f5f46554e44535f5f5f000000000000000000000000000000000000600082015250565b6000612573600e83611a25565b915061257e8261253d565b602082019050919050565b600060208201905081810360008301526125a281612566565b9050919050565b7f5f5f5f4e4f545f494e5f4c41554e434845445f5354415455535f5f5f00000000600082015250565b60006125df601c83611a25565b91506125ea826125a9565b602082019050919050565b6000602082019050818103600083015261260e816125d2565b9050919050565b7f5f5f5f4e4f545f455850495245445f5f5f000000000000000000000000000000600082015250565b600061264b601183611a25565b915061265682612615565b602082019050919050565b6000602082019050818103600083015261267a8161263e565b9050919050565b7f5f5f5f52454a4543545f4d494e5f4441595f5f5f000000000000000000000000600082015250565b60006126b7601483611a25565b91506126c282612681565b602082019050919050565b600060208201905081810360008301526126e6816126aa565b9050919050565b60006126f882611b0e565b915061270383611b0e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612738576127376124c6565b5b828201905092915050565b600061274e82611b0e565b915061275983611b0e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612792576127916124c6565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006127d782611b0e565b91506127e283611b0e565b9250826127f2576127f161279d565b5b828204905092915050565b600061280882611b0e565b915061281383611b0e565b925082821015612826576128256124c6565b5b828203905092915050565b6000819050919050565b600061285661285161284c84611b56565b612831565b611b56565b9050919050565b60006128688261283b565b9050919050565b600061287a8261285d565b9050919050565b61288a8161286f565b82525050565b60006040820190506128a56000830185612881565b6128b26020830184611b18565b9392505050565b6128c281611e42565b81146128cd57600080fd5b50565b6000815190506128df816128b9565b92915050565b6000602082840312156128fb576128fa611b4c565b5b6000612909848285016128d0565b9150509291505056fea26469706673582212203fbd22b3150b6b98cc05f00405e7e49030645bdc60fd9336545ff9a81e2b813864736f6c634300080f0033a264697066735822122064632c31e40d7ce2e958a74df001f1b2a33132bdb147bc4b9253d6dae3b0a91264736f6c634300080f0033000000000000000000000000f0c6de7d153650bb31da86a15b0b7e5f34ce37a200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000e1146b9ac456fcbb60644c36fd3f868a9072fc6e000000000000000000000000658b0c7613e890ee50b8c4bc6a3f41ef411208ad00000000000000000000000004068da6c83afcfa0e13ba15a6696662335d5b750000000000000000000000008d11ec38a3eb5e956b052f67da8bdc9bef8abf3e

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

000000000000000000000000f0c6de7d153650bb31da86a15b0b7e5f34ce37a200000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000004000000000000000000000000e1146b9ac456fcbb60644c36fd3f868a9072fc6e000000000000000000000000658b0c7613e890ee50b8c4bc6a3f41ef411208ad00000000000000000000000004068da6c83afcfa0e13ba15a6696662335d5b750000000000000000000000008d11ec38a3eb5e956b052f67da8bdc9bef8abf3e

-----Decoded View---------------
Arg [0] : _backup (address): 0xf0c6de7d153650bb31da86a15b0b7e5f34ce37a2
Arg [1] : trustedTokens (address[]): 0xe1146b9ac456fcbb60644c36fd3f868a9072fc6e,0x658b0c7613e890ee50b8c4bc6a3f41ef411208ad,0x04068da6c83afcfa0e13ba15a6696662335d5b75,0x8d11ec38a3eb5e956b052f67da8bdc9bef8abf3e

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 000000000000000000000000f0c6de7d153650bb31da86a15b0b7e5f34ce37a2
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [3] : 000000000000000000000000e1146b9ac456fcbb60644c36fd3f868a9072fc6e
Arg [4] : 000000000000000000000000658b0c7613e890ee50b8c4bc6a3f41ef411208ad
Arg [5] : 00000000000000000000000004068da6c83afcfa0e13ba15a6696662335d5b75
Arg [6] : 0000000000000000000000008d11ec38a3eb5e956b052f67da8bdc9bef8abf3e


Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.