ETH Price: $3,467.79 (+4.20%)

Contract

0x8759eC9Be92a80801Ac3d58A3226336c9e59E390
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60806040115047922020-12-22 18:02:291433 days ago1608660149IN
 Create: ServiceV4
0 ETH0.2218948277

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ServiceV4

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 4: ServiceV4.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

import "./IERC20.sol";
import "./SafeMath.sol";
import "./StrongPoolInterface.sol";

contract ServiceV4 {
    event Requested(address indexed miner);
    event Claimed(address indexed miner, uint256 reward);

    using SafeMath for uint256;
    bool public initDone;
    address public admin;
    address public pendingAdmin;
    address public superAdmin;
    address public pendingSuperAdmin;
    address public serviceAdmin;
    address public parameterAdmin;
    address payable public feeCollector;

    IERC20 public strongToken;
    StrongPoolInterface public strongPool;

    uint256 public rewardPerBlockNumerator;
    uint256 public rewardPerBlockDenominator;

    uint256 public naasRewardPerBlockNumerator;
    uint256 public naasRewardPerBlockDenominator;

    uint256 public claimingFeeNumerator;
    uint256 public claimingFeeDenominator;

    uint256 public requestingFeeInWei;

    uint256 public strongFeeInWei;

    uint256 public recurringFeeInWei;
    uint256 public recurringNaaSFeeInWei;
    uint256 public recurringPaymentCycleInBlocks;

    uint256 public rewardBalance;

    mapping(address => uint256) public entityBlockLastClaimedOn;

    address[] public entities;
    mapping(address => uint256) public entityIndex;
    mapping(address => bool) public entityActive;
    mapping(address => bool) public requestPending;
    mapping(address => bool) public entityIsNaaS;
    mapping(address => uint256) public paidOnBlock;
    uint256 public activeEntities;

    string public desciption;

    uint256 public claimingFeeInWei;

    uint256 public naasRequestingFeeInWei;

    uint256 public naasStrongFeeInWei;

    bool public removedTokens;

    function init(
        address strongTokenAddress,
        address strongPoolAddress,
        address adminAddress,
        address superAdminAddress,
        uint256 rewardPerBlockNumeratorValue,
        uint256 rewardPerBlockDenominatorValue,
        uint256 naasRewardPerBlockNumeratorValue,
        uint256 naasRewardPerBlockDenominatorValue,
        uint256 requestingFeeInWeiValue,
        uint256 strongFeeInWeiValue,
        uint256 recurringFeeInWeiValue,
        uint256 recurringNaaSFeeInWeiValue,
        uint256 recurringPaymentCycleInBlocksValue,
        uint256 claimingFeeNumeratorValue,
        uint256 claimingFeeDenominatorValue,
        string memory desc
    ) public {
        require(!initDone, "init done");
        strongToken = IERC20(strongTokenAddress);
        strongPool = StrongPoolInterface(strongPoolAddress);
        admin = adminAddress;
        superAdmin = superAdminAddress;
        rewardPerBlockNumerator = rewardPerBlockNumeratorValue;
        rewardPerBlockDenominator = rewardPerBlockDenominatorValue;
        naasRewardPerBlockNumerator = naasRewardPerBlockNumeratorValue;
        naasRewardPerBlockDenominator = naasRewardPerBlockDenominatorValue;
        requestingFeeInWei = requestingFeeInWeiValue;
        strongFeeInWei = strongFeeInWeiValue;
        recurringFeeInWei = recurringFeeInWeiValue;
        recurringNaaSFeeInWei = recurringNaaSFeeInWeiValue;
        claimingFeeNumerator = claimingFeeNumeratorValue;
        claimingFeeDenominator = claimingFeeDenominatorValue;
        recurringPaymentCycleInBlocks = recurringPaymentCycleInBlocksValue;
        desciption = desc;
        initDone = true;
    }

    // ADMIN
    // *************************************************************************************
    function updateServiceAdmin(address newServiceAdmin) public {
        require(msg.sender == superAdmin);
        serviceAdmin = newServiceAdmin;
    }

    function updateParameterAdmin(address newParameterAdmin) public {
        require(newParameterAdmin != address(0), "zero");
        require(msg.sender == superAdmin);
        parameterAdmin = newParameterAdmin;
    }

    function updateFeeCollector(address payable newFeeCollector) public {
        require(newFeeCollector != address(0), "zero");
        require(msg.sender == superAdmin);
        feeCollector = newFeeCollector;
    }

    function setPendingAdmin(address newPendingAdmin) public {
        require(msg.sender == admin, "not admin");
        pendingAdmin = newPendingAdmin;
    }

    function acceptAdmin() public {
        require(
            msg.sender == pendingAdmin && msg.sender != address(0),
            "not pendingAdmin"
        );
        admin = pendingAdmin;
        pendingAdmin = address(0);
    }

    function setPendingSuperAdmin(address newPendingSuperAdmin) public {
        require(msg.sender == superAdmin, "not superAdmin");
        pendingSuperAdmin = newPendingSuperAdmin;
    }

    function acceptSuperAdmin() public {
        require(
            msg.sender == pendingSuperAdmin && msg.sender != address(0),
            "not pendingSuperAdmin"
        );
        superAdmin = pendingSuperAdmin;
        pendingSuperAdmin = address(0);
    }

    // ENTITIES
    // *************************************************************************************
    function getEntities() public view returns (address[] memory) {
        return entities;
    }

    function isEntityActive(address entity) public view returns (bool) {
        return entityActive[entity];
    }

    // REWARD
    // *************************************************************************************
    function updateRewardPerBlock(uint256 numerator, uint256 denominator)
        public
    {
        require(
            msg.sender == admin ||
                msg.sender == parameterAdmin ||
                msg.sender == superAdmin,
            "not an admin"
        );
        require(denominator != 0, "invalid value");
        rewardPerBlockNumerator = numerator;
        rewardPerBlockDenominator = denominator;
    }

    function updateNaaSRewardPerBlock(uint256 numerator, uint256 denominator)
        public
    {
        require(
            msg.sender == admin ||
                msg.sender == parameterAdmin ||
                msg.sender == superAdmin,
            "not an admin"
        );
        require(denominator != 0, "invalid value");
        naasRewardPerBlockNumerator = numerator;
        naasRewardPerBlockDenominator = denominator;
    }

    function deposit(uint256 amount) public {
        require(msg.sender == superAdmin, "not an admin");
        require(amount > 0, "zero");
        strongToken.transferFrom(msg.sender, address(this), amount);
        rewardBalance = rewardBalance.add(amount);
    }

    function withdraw(address destination, uint256 amount) public {
        require(msg.sender == superAdmin, "not an admin");
        require(amount > 0, "zero");
        require(rewardBalance >= amount, "not enough");
        strongToken.transfer(destination, amount);
        rewardBalance = rewardBalance.sub(amount);
    }

    function removeTokens() public {
        require(!removedTokens, "already removed");
        require(msg.sender == superAdmin, "not an admin");
        // removing 2500 STRONG tokens sent in this tx: 0xe27640beda32a5e49aad3b6692790b9d380ed25da0cf8dca7fd5f3258efa600a
        strongToken.transfer(superAdmin, 2500000000000000000000);
        removedTokens = true;
    }

    // FEES
    // *************************************************************************************
    function updateRequestingFee(uint256 feeInWei) public {
        require(
            msg.sender == admin ||
                msg.sender == parameterAdmin ||
                msg.sender == superAdmin,
            "not an admin"
        );
        requestingFeeInWei = feeInWei;
    }

    function updateStrongFee(uint256 feeInWei) public {
        require(
            msg.sender == admin ||
                msg.sender == parameterAdmin ||
                msg.sender == superAdmin,
            "not an admin"
        );
        strongFeeInWei = feeInWei;
    }

    function updateNaasRequestingFee(uint256 feeInWei) public {
        require(
            msg.sender == admin ||
                msg.sender == parameterAdmin ||
                msg.sender == superAdmin,
            "not an admin"
        );
        naasRequestingFeeInWei = feeInWei;
    }

    function updateNaasStrongFee(uint256 feeInWei) public {
        require(
            msg.sender == admin ||
                msg.sender == parameterAdmin ||
                msg.sender == superAdmin,
            "not an admin"
        );
        naasStrongFeeInWei = feeInWei;
    }

    function updateClaimingFee(uint256 numerator, uint256 denominator) public {
        require(
            msg.sender == admin ||
                msg.sender == parameterAdmin ||
                msg.sender == superAdmin,
            "not an admin"
        );
        require(denominator != 0, "invalid value");
        claimingFeeNumerator = numerator;
        claimingFeeDenominator = denominator;
    }

    function updateRecurringFee(uint256 feeInWei) public {
        require(
            msg.sender == admin ||
                msg.sender == parameterAdmin ||
                msg.sender == superAdmin,
            "not an admin"
        );
        recurringFeeInWei = feeInWei;
    }

    function updateRecurringNaaSFee(uint256 feeInWei) public {
        require(
            msg.sender == admin ||
                msg.sender == parameterAdmin ||
                msg.sender == superAdmin,
            "not an admin"
        );
        recurringNaaSFeeInWei = feeInWei;
    }

    function updateRecurringPaymentCycleInBlocks(uint256 blocks) public {
        require(
            msg.sender == admin ||
                msg.sender == parameterAdmin ||
                msg.sender == superAdmin,
            "not an admin"
        );
        require(blocks > 0, "zero");
        recurringPaymentCycleInBlocks = blocks;
    }

    // CORE
    // *************************************************************************************
    function requestAccess(bool isNaaS) public payable {
        require(!entityActive[msg.sender], "active");
        uint256 rFee;
        uint256 sFee;
        if (isNaaS) {
            rFee = naasRequestingFeeInWei;
            sFee = naasStrongFeeInWei;
        } else {
            rFee = requestingFeeInWei;
            sFee = strongFeeInWei;
        }
        require(msg.value == rFee, "invalid fee");
        feeCollector.transfer(msg.value);
        strongToken.transferFrom(msg.sender, address(this), sFee);
        strongToken.transfer(feeCollector, sFee);
        requestPending[msg.sender] = true;
        entityIsNaaS[msg.sender] = isNaaS;
        emit Requested(msg.sender);
    }

    function grantAccess(
        address[] memory ents,
        bool[] memory entIsNaaS,
        bool useChecks
    ) public {
        require(
            msg.sender == admin ||
                msg.sender == serviceAdmin ||
                msg.sender == superAdmin,
            "not admin"
        );
        require(ents.length > 0, "zero");
        require(ents.length == entIsNaaS.length, "lengths dont match");
        for (uint256 i = 0; i < ents.length; i++) {
            address entity = ents[i];
            bool naas = entIsNaaS[i];
            if (useChecks) {
                require(requestPending[entity], "not pending");
                require(entityIsNaaS[entity] == naas, "naas no match");
            }
            require(!entityActive[entity], "exists");
            uint256 len = entities.length;
            entityIndex[entity] = len;
            entities.push(entity);
            entityActive[entity] = true;
            requestPending[entity] = false;
            entityIsNaaS[entity] = naas;
            activeEntities = activeEntities.add(1);
            entityBlockLastClaimedOn[entity] = block.number;
            paidOnBlock[entity] = block.number;
        }
    }

    function setEntityActiveStatus(address entity, bool status) public {
        require(
            msg.sender == admin ||
                msg.sender == serviceAdmin ||
                msg.sender == superAdmin,
            "not admin"
        );
        uint256 index = entityIndex[entity];
        require(entities[index] == entity, "invalid entity");
        require(entityActive[entity] != status, "already set");
        entityActive[entity] = status;
        if (status) {
            activeEntities = activeEntities.add(1);
            entityBlockLastClaimedOn[entity] = block.number;
        } else {
            if (block.number > entityBlockLastClaimedOn[entity]) {
                uint256 reward = getReward(entity);
                if (reward > 0) {
                    rewardBalance = rewardBalance.sub(reward);
                    strongToken.approve(address(strongPool), reward);
                    strongPool.mineFor(entity, reward);
                }
            }
            activeEntities = activeEntities.sub(1);
            entityBlockLastClaimedOn[entity] = 0;
        }
    }

    function payFee() public payable {
        if (entityIsNaaS[msg.sender]) {
            require(msg.value == recurringNaaSFeeInWei, "naas fee");
        } else {
            require(msg.value == recurringFeeInWei, "basic fee");
        }
        feeCollector.transfer(msg.value);
        paidOnBlock[msg.sender] = block.number;
    }

    function getReward(address entity) public view returns (uint256) {
        if (activeEntities == 0) return 0;
        if (entityBlockLastClaimedOn[entity] == 0) return 0;
        uint256 blockResult =
            block.number.sub(entityBlockLastClaimedOn[entity]);
        uint256 rewardNumerator;
        uint256 rewardDenominator;
        if (entityIsNaaS[entity]) {
            rewardNumerator = naasRewardPerBlockNumerator;
            rewardDenominator = naasRewardPerBlockDenominator;
        } else {
            rewardNumerator = rewardPerBlockNumerator;
            rewardDenominator = rewardPerBlockDenominator;
        }
        uint256 rewardPerBlockResult =
            blockResult.mul(rewardNumerator).div(rewardDenominator);
        return rewardPerBlockResult.div(activeEntities);
    }

    function getRewardByBlock(address entity, uint256 blockNumber)
        public
        view
        returns (uint256)
    {
        if (blockNumber > block.number) return 0;
        if (entityBlockLastClaimedOn[entity] == 0) return 0;
        if (blockNumber < entityBlockLastClaimedOn[entity]) return 0;
        if (activeEntities == 0) return 0;
        uint256 blockResult = blockNumber.sub(entityBlockLastClaimedOn[entity]);
        uint256 rewardNumerator;
        uint256 rewardDenominator;
        if (entityIsNaaS[entity]) {
            rewardNumerator = naasRewardPerBlockNumerator;
            rewardDenominator = naasRewardPerBlockDenominator;
        } else {
            rewardNumerator = rewardPerBlockNumerator;
            rewardDenominator = rewardPerBlockDenominator;
        }
        uint256 rewardPerBlockResult =
            blockResult.mul(rewardNumerator).div(rewardDenominator);
        return rewardPerBlockResult.div(activeEntities);
    }

    function claim(uint256 blockNumber) public payable {
        require(blockNumber <= block.number, "invalid block number");
        require(entityBlockLastClaimedOn[msg.sender] != 0, "error");
        require(blockNumber > entityBlockLastClaimedOn[msg.sender], "too soon");
        require(entityActive[msg.sender], "not active");
        require(paidOnBlock[msg.sender] != 0, "zero");
        require(
            blockNumber <
                paidOnBlock[msg.sender] + recurringPaymentCycleInBlocks,
            "pay fee"
        );
        uint256 reward = getRewardByBlock(msg.sender, blockNumber);
        require(reward > 0, "no reward");
        uint256 fee =
            reward.mul(claimingFeeNumerator).div(claimingFeeDenominator);
        require(msg.value == fee, "invalid fee");
        feeCollector.transfer(msg.value);
        strongToken.approve(address(strongPool), reward);
        strongPool.mineFor(msg.sender, reward);
        rewardBalance = rewardBalance.sub(reward);
        entityBlockLastClaimedOn[msg.sender] = blockNumber;
        emit Claimed(msg.sender, reward);
    }
}

File 2 of 4: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender, address recipient, uint256 amount) external returns (bool);

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

File 3 of 4: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

File 4 of 4: StrongPoolInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

interface StrongPoolInterface {
  function mineFor(address miner, uint256 amount) external;
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"}],"name":"Requested","type":"event"},{"inputs":[],"name":"acceptAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"acceptSuperAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activeEntities","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claimingFeeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimingFeeInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimingFeeNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"desciption","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"entities","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"entityActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"entityBlockLastClaimedOn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"entityIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"entityIsNaaS","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeCollector","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEntities","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"entity","type":"address"}],"name":"getReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"entity","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getRewardByBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"ents","type":"address[]"},{"internalType":"bool[]","name":"entIsNaaS","type":"bool[]"},{"internalType":"bool","name":"useChecks","type":"bool"}],"name":"grantAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"strongTokenAddress","type":"address"},{"internalType":"address","name":"strongPoolAddress","type":"address"},{"internalType":"address","name":"adminAddress","type":"address"},{"internalType":"address","name":"superAdminAddress","type":"address"},{"internalType":"uint256","name":"rewardPerBlockNumeratorValue","type":"uint256"},{"internalType":"uint256","name":"rewardPerBlockDenominatorValue","type":"uint256"},{"internalType":"uint256","name":"naasRewardPerBlockNumeratorValue","type":"uint256"},{"internalType":"uint256","name":"naasRewardPerBlockDenominatorValue","type":"uint256"},{"internalType":"uint256","name":"requestingFeeInWeiValue","type":"uint256"},{"internalType":"uint256","name":"strongFeeInWeiValue","type":"uint256"},{"internalType":"uint256","name":"recurringFeeInWeiValue","type":"uint256"},{"internalType":"uint256","name":"recurringNaaSFeeInWeiValue","type":"uint256"},{"internalType":"uint256","name":"recurringPaymentCycleInBlocksValue","type":"uint256"},{"internalType":"uint256","name":"claimingFeeNumeratorValue","type":"uint256"},{"internalType":"uint256","name":"claimingFeeDenominatorValue","type":"uint256"},{"internalType":"string","name":"desc","type":"string"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"entity","type":"address"}],"name":"isEntityActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"naasRequestingFeeInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"naasRewardPerBlockDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"naasRewardPerBlockNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"naasStrongFeeInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"paidOnBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"parameterAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingSuperAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recurringFeeInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recurringNaaSFeeInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recurringPaymentCycleInBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removedTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"isNaaS","type":"bool"}],"name":"requestAccess","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"requestPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"requestingFeeInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerBlockDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerBlockNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"serviceAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"entity","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setEntityActiveStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"setPendingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingSuperAdmin","type":"address"}],"name":"setPendingSuperAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"strongFeeInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"strongPool","outputs":[{"internalType":"contract StrongPoolInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"strongToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"superAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"updateClaimingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFeeCollector","type":"address"}],"name":"updateFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"updateNaaSRewardPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeInWei","type":"uint256"}],"name":"updateNaasRequestingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeInWei","type":"uint256"}],"name":"updateNaasStrongFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newParameterAdmin","type":"address"}],"name":"updateParameterAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeInWei","type":"uint256"}],"name":"updateRecurringFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeInWei","type":"uint256"}],"name":"updateRecurringNaaSFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"updateRecurringPaymentCycleInBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeInWei","type":"uint256"}],"name":"updateRequestingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"updateRewardPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newServiceAdmin","type":"address"}],"name":"updateServiceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeInWei","type":"uint256"}],"name":"updateStrongFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b5061332c806100206000396000f3fe6080604052600436106103ce5760003560e01c8063965d61b9116101fd578063c723143f11610118578063e4ae0c8a116100ab578063f3368f901161007a578063f3368f9014610eaa578063f3fef3a314610ed4578063f851a44014610f0d578063fed0a20e14610f22578063ffbb698914610f37576103ce565b8063e4ae0c8a14610db7578063e603c27014610de1578063e7f9cefd14610e6b578063e877db1a14610e80576103ce565b8063d9df77de116100e7578063d9df77de14610d63578063da998dca14610d78578063dc0bbf0814610d8d578063e195232e14610da2576103ce565b8063c723143f14610bc2578063d2c35ce814610ce8578063d39ca7de14610d1b578063d95210d014610d4e576103ce565b8063b1dfb9b311610190578063c1b0cda51161015f578063c1b0cda514610a4d578063c2b2fdca14610b83578063c415b95c14610b98578063c4ac59b214610bad576103ce565b8063b1dfb9b3146109a2578063b6b55f25146109db578063c00007b014610a05578063c0f0622d14610a38576103ce565b8063aa5c3ab4116101cc578063aa5c3ab4146108fd578063ad553eef14610912578063ae749c4214610945578063b021465f1461096f576103ce565b8063965d61b91461087657806399e6f7001461088b5780639edb4fb7146108a0578063a978dab7146108ca576103ce565b8063418bc2c7116102ed5780636f300155116102805780638aa9a37f1161024f5780638aa9a37f146107e15780638ac2f9dd146108115780638d0c479b1461084c5780639162c59414610861576103ce565b80636f300155146107725780636f36c10c14610787578063857d49d5146107b757806387f48f4e146107cc576103ce565b80634dd18bf5116102bc5780634dd18bf5146106d6578063623ef910146107095780636331883b1461073357806367cb65261461075d576103ce565b8063418bc2c71461064657806348028d631461065b5780634c359aeb146106705780634c8024cc146106a3576103ce565b8063267822471161036557806334dce6b31161033457806334dce6b314610599578063379607f5146105cc57806338392395146105e957806340b584b414610613576103ce565b806326782247146104e657806329575f6a14610517578063296102521461052c57806331b933b914610534576103ce565b80630fe48b36116103a15780630fe48b36146104605780631585dc281461047557806316f28a2a1461048a57806319885898146104d1576103ce565b806305eec289146103d357806309a07fd2146103f45780630a8d1be21461041b5780630e18b6811461044b575b600080fd5b6103f2600480360360208110156103e957600080fd5b50351515610f6a565b005b34801561040057600080fd5b506104096111bc565b60408051918252519081900360200190f35b34801561042757600080fd5b506103f26004803603604081101561043e57600080fd5b50803590602001356111c2565b34801561045757600080fd5b506103f261128c565b34801561046c57600080fd5b5061040961131b565b34801561048157600080fd5b50610409611321565b34801561049657600080fd5b506104bd600480360360208110156104ad57600080fd5b50356001600160a01b0316611327565b604080519115158252519081900360200190f35b3480156104dd57600080fd5b5061040961133c565b3480156104f257600080fd5b506104fb611342565b604080516001600160a01b039092168252519081900360200190f35b34801561052357600080fd5b506104fb611351565b6103f2611360565b34801561054057600080fd5b5061054961144e565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561058557818101518382015260200161056d565b505050509050019250505060405180910390f35b3480156105a557600080fd5b506104bd600480360360208110156105bc57600080fd5b50356001600160a01b03166114b0565b6103f2600480360360208110156105e257600080fd5b50356114d2565b3480156105f557600080fd5b506103f26004803603602081101561060c57600080fd5b50356118de565b34801561061f57600080fd5b506103f26004803603602081101561063657600080fd5b50356001600160a01b0316611960565b34801561065257600080fd5b506103f26119dd565b34801561066757600080fd5b506104fb611b11565b34801561067c57600080fd5b506104096004803603602081101561069357600080fd5b50356001600160a01b0316611b20565b3480156106af57600080fd5b50610409600480360360208110156106c657600080fd5b50356001600160a01b0316611b32565b3480156106e257600080fd5b506103f2600480360360208110156106f957600080fd5b50356001600160a01b0316611b44565b34801561071557600080fd5b506103f26004803603602081101561072c57600080fd5b5035611bb6565b34801561073f57600080fd5b506104fb6004803603602081101561075657600080fd5b5035611c38565b34801561076957600080fd5b50610409611c5f565b34801561077e57600080fd5b50610409611c65565b34801561079357600080fd5b506103f2600480360360408110156107aa57600080fd5b5080359060200135611c6b565b3480156107c357600080fd5b506104fb611d35565b3480156107d857600080fd5b50610409611d44565b3480156107ed57600080fd5b506103f26004803603604081101561080457600080fd5b5080359060200135611d4a565b34801561081d57600080fd5b506103f26004803603604081101561083457600080fd5b506001600160a01b0381351690602001351515611e14565b34801561085857600080fd5b50610409612138565b34801561086d57600080fd5b5061040961213e565b34801561088257600080fd5b506104fb612144565b34801561089757600080fd5b50610409612153565b3480156108ac57600080fd5b506103f2600480360360208110156108c357600080fd5b5035612159565b3480156108d657600080fd5b50610409600480360360208110156108ed57600080fd5b50356001600160a01b03166121db565b34801561090957600080fd5b506104096121ed565b34801561091e57600080fd5b506103f26004803603602081101561093557600080fd5b50356001600160a01b03166121f3565b34801561095157600080fd5b506103f26004803603602081101561096857600080fd5b503561222c565b34801561097b57600080fd5b506104bd6004803603602081101561099257600080fd5b50356001600160a01b03166122ae565b3480156109ae57600080fd5b50610409600480360360408110156109c557600080fd5b506001600160a01b0381351690602001356122c3565b3480156109e757600080fd5b506103f2600480360360208110156109fe57600080fd5b50356123c6565b348015610a1157600080fd5b5061040960048036036020811015610a2857600080fd5b50356001600160a01b03166124eb565b348015610a4457600080fd5b506104bd6125b7565b348015610a5957600080fd5b506103f260048036036060811015610a7057600080fd5b810190602081018135640100000000811115610a8b57600080fd5b820183602082011115610a9d57600080fd5b80359060200191846020830284011164010000000083111715610abf57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610b0f57600080fd5b820183602082011115610b2157600080fd5b80359060200191846020830284011164010000000083111715610b4357600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050505035151590506125c0565b348015610b8f57600080fd5b506104096128f8565b348015610ba457600080fd5b506104fb6128fe565b348015610bb957600080fd5b5061040961290d565b348015610bce57600080fd5b506103f26004803603610200811015610be657600080fd5b6001600160a01b038235811692602081013582169260408201358316926060830135169160808101359160a08201359160c08101359160e08201359161010081013591610120820135916101408101359161016082013591610180810135916101a0820135916101c08101359181019061020081016101e0820135640100000000811115610c7357600080fd5b820183602082011115610c8557600080fd5b80359060200191846001830284011164010000000083111715610ca757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612913945050505050565b348015610cf457600080fd5b506103f260048036036020811015610d0b57600080fd5b50356001600160a01b0316612a76565b348015610d2757600080fd5b506103f260048036036020811015610d3e57600080fd5b50356001600160a01b0316612af3565b348015610d5a57600080fd5b50610409612b65565b348015610d6f57600080fd5b50610409612b6b565b348015610d8457600080fd5b506104fb612b71565b348015610d9957600080fd5b50610409612b80565b348015610dae57600080fd5b506104fb612b86565b348015610dc357600080fd5b506103f260048036036020811015610dda57600080fd5b5035612b95565b348015610ded57600080fd5b50610df6612c17565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610e30578181015183820152602001610e18565b50505050905090810190601f168015610e5d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e7757600080fd5b506103f2612ca5565b348015610e8c57600080fd5b506103f260048036036020811015610ea357600080fd5b5035612d2e565b348015610eb657600080fd5b506103f260048036036020811015610ecd57600080fd5b5035612dee565b348015610ee057600080fd5b506103f260048036036040811015610ef757600080fd5b506001600160a01b038135169060200135612e70565b348015610f1957600080fd5b506104fb612fd6565b348015610f2e57600080fd5b506104bd612fea565b348015610f4357600080fd5b506104bd60048036036020811015610f5a57600080fd5b50356001600160a01b0316612ff3565b3360009081526018602052604090205460ff1615610fb8576040805162461bcd60e51b815260206004820152600660248201526561637469766560d01b604482015290519081900360640190fd5b6000808215610fce575050601f54602054610fd7565b5050600f546010545b813414611019576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6006546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611052573d6000803e3d6000fd5b50600754604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156110ad57600080fd5b505af11580156110c1573d6000803e3d6000fd5b505050506040513d60208110156110d757600080fd5b50506007546006546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561113257600080fd5b505af1158015611146573d6000803e3d6000fd5b505050506040513d602081101561115c57600080fd5b50503360008181526019602090815260408083208054600160ff1991821617909155601a909252808320805490921687151517909155517f039f711c9c18dd815b225b1424855e6118e746c6b5d688907f10c4dd29ebe92a9190a2505050565b600d5481565b60005461010090046001600160a01b03163314806111ea57506005546001600160a01b031633145b806111ff57506002546001600160a01b031633145b61123f576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80611281576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600991909155600a55565b6001546001600160a01b0316331480156112a557503315155b6112e9576040805162461bcd60e51b815260206004820152601060248201526f3737ba103832b73234b733a0b236b4b760811b604482015290519081900360640190fd5b6001805460008054610100600160a81b0319166101006001600160a01b038416021790556001600160a01b0319169055565b60135481565b601f5481565b60186020526000908152604090205460ff1681565b600a5481565b6001546001600160a01b031681565b6002546001600160a01b031681565b336000908152601a602052604090205460ff16156113be5760125434146113b9576040805162461bcd60e51b81526020600482015260086024820152676e6161732066656560c01b604482015290519081900360640190fd5b611400565b6011543414611400576040805162461bcd60e51b815260206004820152600960248201526862617369632066656560b81b604482015290519081900360640190fd5b6006546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611439573d6000803e3d6000fd5b50336000908152601b60205260409020439055565b606060168054806020026020016040519081016040528092919081815260200182805480156114a657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611488575b5050505050905090565b6001600160a01b03811660009081526018602052604090205460ff165b919050565b4381111561151e576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b210313637b1b590373ab6b132b960611b604482015290519081900360640190fd5b33600090815260156020526040902054611567576040805162461bcd60e51b815260206004820152600560248201526432b93937b960d91b604482015290519081900360640190fd5b3360009081526015602052604090205481116115b5576040805162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b604482015290519081900360640190fd5b3360009081526018602052604090205460ff16611606576040805162461bcd60e51b815260206004820152600a6024820152696e6f742061637469766560b01b604482015290519081900360640190fd5b336000908152601b6020526040902054611650576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b601354336000908152601b60205260409020540181106116a1576040805162461bcd60e51b81526020600482015260076024820152667061792066656560c81b604482015290519081900360640190fd5b60006116ad33836122c3565b9050600081116116f0576040805162461bcd60e51b81526020600482015260096024820152681b9bc81c995dd85c9960ba1b604482015290519081900360640190fd5b6000611713600e5461170d600d548561300890919063ffffffff16565b90613068565b9050803414611757576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6006546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611790573d6000803e3d6000fd5b506007546008546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018690529051919092169163095ea7b39160448083019260209291908290030181600087803b1580156117ea57600080fd5b505af11580156117fe573d6000803e3d6000fd5b505050506040513d602081101561181457600080fd5b5050600854604080516330d6a97560e01b81523360048201526024810185905290516001600160a01b03909216916330d6a9759160448082019260009290919082900301818387803b15801561186957600080fd5b505af115801561187d573d6000803e3d6000fd5b505060145461188f92509050836130aa565b60145533600081815260156020908152604091829020869055815185815291517fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a9281900390910190a2505050565b60005461010090046001600160a01b031633148061190657506005546001600160a01b031633145b8061191b57506002546001600160a01b031633145b61195b576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601255565b6001600160a01b0381166119a4576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b031633146119bb57600080fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60215460ff1615611a27576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c995b5bdd9959608a1b604482015290519081900360640190fd5b6002546001600160a01b03163314611a75576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6007546002546040805163a9059cbb60e01b81526001600160a01b03928316600482015268878678326eac90000060248201529051919092169163a9059cbb9160448083019260209291908290030181600087803b158015611ad657600080fd5b505af1158015611aea573d6000803e3d6000fd5b505050506040513d6020811015611b0057600080fd5b50506021805460ff19166001179055565b6003546001600160a01b031681565b60156020526000908152604090205481565b60176020526000908152604090205481565b60005461010090046001600160a01b03163314611b94576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60005461010090046001600160a01b0316331480611bde57506005546001600160a01b031633145b80611bf357506002546001600160a01b031633145b611c33576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601055565b60168181548110611c4557fe5b6000918252602090912001546001600160a01b0316905081565b60125481565b600f5481565b60005461010090046001600160a01b0316331480611c9357506005546001600160a01b031633145b80611ca857506002546001600160a01b031633145b611ce8576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80611d2a576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600b91909155600c55565b6005546001600160a01b031681565b600e5481565b60005461010090046001600160a01b0316331480611d7257506005546001600160a01b031633145b80611d8757506002546001600160a01b031633145b611dc7576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80611e09576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600d91909155600e55565b60005461010090046001600160a01b0316331480611e3c57506004546001600160a01b031633145b80611e5157506002546001600160a01b031633145b611e8e576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b6001600160a01b0382166000818152601760205260409020546016805491929183908110611eb857fe5b6000918252602090912001546001600160a01b031614611f10576040805162461bcd60e51b815260206004820152600e60248201526d696e76616c696420656e7469747960901b604482015290519081900360640190fd5b6001600160a01b03831660009081526018602052604090205460ff1615158215151415611f72576040805162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b604482015290519081900360640190fd5b6001600160a01b0383166000908152601860205260409020805460ff19168315801591909117909155611fd057601c54611fad9060016130ec565b601c556001600160a01b0383166000908152601560205260409020439055612133565b6001600160a01b038316600090815260156020526040902054431115612108576000611ffb846124eb565b905080156121065760145461201090826130aa565b6014556007546008546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018590529051919092169163095ea7b39160448083019260209291908290030181600087803b15801561206c57600080fd5b505af1158015612080573d6000803e3d6000fd5b505050506040513d602081101561209657600080fd5b5050600854604080516330d6a97560e01b81526001600160a01b03878116600483015260248201859052915191909216916330d6a97591604480830192600092919082900301818387803b1580156120ed57600080fd5b505af1158015612101573d6000803e3d6000fd5b505050505b505b601c546121169060016130aa565b601c556001600160a01b0383166000908152601560205260408120555b505050565b60205481565b60115481565b6007546001600160a01b031681565b60095481565b60005461010090046001600160a01b031633148061218157506005546001600160a01b031633145b8061219657506002546001600160a01b031633145b6121d6576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601f55565b601b6020526000908152604090205481565b60145481565b6002546001600160a01b0316331461220a57600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60005461010090046001600160a01b031633148061225457506005546001600160a01b031633145b8061226957506002546001600160a01b031633145b6122a9576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600f55565b601a6020526000908152604090205460ff1681565b6000438211156122d5575060006123c0565b6001600160a01b0383166000908152601560205260409020546122fa575060006123c0565b6001600160a01b038316600090815260156020526040902054821015612322575060006123c0565b601c54612331575060006123c0565b6001600160a01b0383166000908152601560205260408120546123559084906130aa565b6001600160a01b0385166000908152601a602052604081205491925090819060ff1615612389575050600b54600c54612392565b5050600954600a545b60006123a28261170d8686613008565b90506123b9601c548261306890919063ffffffff16565b9450505050505b92915050565b6002546001600160a01b03163314612414576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60008111612452576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600754604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156124ac57600080fd5b505af11580156124c0573d6000803e3d6000fd5b505050506040513d60208110156124d657600080fd5b50506014546124e590826130ec565b60145550565b6000601c5460001415612500575060006114cd565b6001600160a01b038216600090815260156020526040902054612525575060006114cd565b6001600160a01b0382166000908152601560205260408120546125499043906130aa565b6001600160a01b0384166000908152601a602052604081205491925090819060ff161561257d575050600b54600c54612586565b5050600954600a545b60006125968261170d8686613008565b90506125ad601c548261306890919063ffffffff16565b9695505050505050565b60215460ff1681565b60005461010090046001600160a01b03163314806125e857506004546001600160a01b031633145b806125fd57506002546001600160a01b031633145b61263a576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b6000835111612679576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b81518351146126c4576040805162461bcd60e51b81526020600482015260126024820152710d8cadccee8d0e640c8dedce840dac2e8c6d60731b604482015290519081900360640190fd5b60005b83518110156128f25760008482815181106126de57fe5b6020026020010151905060008483815181106126f657fe5b6020026020010151905083156127c4576001600160a01b03821660009081526019602052604090205460ff16612761576040805162461bcd60e51b815260206004820152600b60248201526a6e6f742070656e64696e6760a81b604482015290519081900360640190fd5b6001600160a01b0382166000908152601a602052604090205460ff161515811515146127c4576040805162461bcd60e51b815260206004820152600d60248201526c0dcc2c2e640dcde40dac2e8c6d609b1b604482015290519081900360640190fd5b6001600160a01b03821660009081526018602052604090205460ff161561281b576040805162461bcd60e51b815260206004820152600660248201526565786973747360d01b604482015290519081900360640190fd5b601680546001600160a01b038416600081815260176020908152604080832085905560018086019096557fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289850180546001600160a01b03191690941790935560188152828220805460ff19908116871790915560198252838320805482169055601a9091529190208054909116841515179055601c5490916128bd91906130ec565b601c5550506001600160a01b031660009081526015602090815260408083204390819055601b909252909120556001016126c7565b50505050565b601e5481565b6006546001600160a01b031681565b600c5481565b60005460ff1615612957576040805162461bcd60e51b8152602060048201526009602482015268696e697420646f6e6560b81b604482015290519081900360640190fd5b8f600760006101000a8154816001600160a01b0302191690836001600160a01b031602179055508e600860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508d600060016101000a8154816001600160a01b0302191690836001600160a01b031602179055508c600260006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b6009819055508a600a8190555089600b8190555088600c8190555087600f8190555086601081905550856011819055508460128190555082600d8190555081600e819055508360138190555080601d9080519060200190612a56929190613242565b50506000805460ff19166001179055505050505050505050505050505050565b6001600160a01b038116612aba576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b03163314612ad157600080fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314612b43576040805162461bcd60e51b815260206004820152600e60248201526d3737ba1039bab832b920b236b4b760911b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600b5481565b60105481565b6004546001600160a01b031681565b601c5481565b6008546001600160a01b031681565b60005461010090046001600160a01b0316331480612bbd57506005546001600160a01b031633145b80612bd257506002546001600160a01b031633145b612c12576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b602055565b601d805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015612c9d5780601f10612c7257610100808354040283529160200191612c9d565b820191906000526020600020905b815481529060010190602001808311612c8057829003601f168201915b505050505081565b6003546001600160a01b031633148015612cbe57503315155b612d07576040805162461bcd60e51b81526020600482015260156024820152743737ba103832b73234b733a9bab832b920b236b4b760591b604482015290519081900360640190fd5b60038054600280546001600160a01b03199081166001600160a01b03841617909155169055565b60005461010090046001600160a01b0316331480612d5657506005546001600160a01b031633145b80612d6b57506002546001600160a01b031633145b612dab576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60008111612de9576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b601355565b60005461010090046001600160a01b0316331480612e1657506005546001600160a01b031633145b80612e2b57506002546001600160a01b031633145b612e6b576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601155565b6002546001600160a01b03163314612ebe576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60008111612efc576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b806014541015612f40576040805162461bcd60e51b815260206004820152600a6024820152690dcdee840cadcdeeaced60b31b604482015290519081900360640190fd5b6007546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015612f9657600080fd5b505af1158015612faa573d6000803e3d6000fd5b505050506040513d6020811015612fc057600080fd5b5050601454612fcf90826130aa565b6014555050565b60005461010090046001600160a01b031681565b60005460ff1681565b60196020526000908152604090205460ff1681565b600082613017575060006123c0565b8282028284828161302457fe5b04146130615760405162461bcd60e51b81526004018080602001828103825260218152602001806132d66021913960400191505060405180910390fd5b9392505050565b600061306183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613146565b600061306183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131e8565b600082820183811015613061576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081836131d25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561319757818101518382015260200161317f565b50505050905090810190601f1680156131c45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816131de57fe5b0495945050505050565b6000818484111561323a5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561319757818101518382015260200161317f565b505050900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061328357805160ff19168380011785556132b0565b828001600101855582156132b0579182015b828111156132b0578251825591602001919060010190613295565b506132bc9291506132c0565b5090565b5b808211156132bc57600081556001016132c156fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122061226a02c5c4ef8b0c3824f25c4ebc8e66c297b7239fa6840aea5fc0f4c6126f64736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106103ce5760003560e01c8063965d61b9116101fd578063c723143f11610118578063e4ae0c8a116100ab578063f3368f901161007a578063f3368f9014610eaa578063f3fef3a314610ed4578063f851a44014610f0d578063fed0a20e14610f22578063ffbb698914610f37576103ce565b8063e4ae0c8a14610db7578063e603c27014610de1578063e7f9cefd14610e6b578063e877db1a14610e80576103ce565b8063d9df77de116100e7578063d9df77de14610d63578063da998dca14610d78578063dc0bbf0814610d8d578063e195232e14610da2576103ce565b8063c723143f14610bc2578063d2c35ce814610ce8578063d39ca7de14610d1b578063d95210d014610d4e576103ce565b8063b1dfb9b311610190578063c1b0cda51161015f578063c1b0cda514610a4d578063c2b2fdca14610b83578063c415b95c14610b98578063c4ac59b214610bad576103ce565b8063b1dfb9b3146109a2578063b6b55f25146109db578063c00007b014610a05578063c0f0622d14610a38576103ce565b8063aa5c3ab4116101cc578063aa5c3ab4146108fd578063ad553eef14610912578063ae749c4214610945578063b021465f1461096f576103ce565b8063965d61b91461087657806399e6f7001461088b5780639edb4fb7146108a0578063a978dab7146108ca576103ce565b8063418bc2c7116102ed5780636f300155116102805780638aa9a37f1161024f5780638aa9a37f146107e15780638ac2f9dd146108115780638d0c479b1461084c5780639162c59414610861576103ce565b80636f300155146107725780636f36c10c14610787578063857d49d5146107b757806387f48f4e146107cc576103ce565b80634dd18bf5116102bc5780634dd18bf5146106d6578063623ef910146107095780636331883b1461073357806367cb65261461075d576103ce565b8063418bc2c71461064657806348028d631461065b5780634c359aeb146106705780634c8024cc146106a3576103ce565b8063267822471161036557806334dce6b31161033457806334dce6b314610599578063379607f5146105cc57806338392395146105e957806340b584b414610613576103ce565b806326782247146104e657806329575f6a14610517578063296102521461052c57806331b933b914610534576103ce565b80630fe48b36116103a15780630fe48b36146104605780631585dc281461047557806316f28a2a1461048a57806319885898146104d1576103ce565b806305eec289146103d357806309a07fd2146103f45780630a8d1be21461041b5780630e18b6811461044b575b600080fd5b6103f2600480360360208110156103e957600080fd5b50351515610f6a565b005b34801561040057600080fd5b506104096111bc565b60408051918252519081900360200190f35b34801561042757600080fd5b506103f26004803603604081101561043e57600080fd5b50803590602001356111c2565b34801561045757600080fd5b506103f261128c565b34801561046c57600080fd5b5061040961131b565b34801561048157600080fd5b50610409611321565b34801561049657600080fd5b506104bd600480360360208110156104ad57600080fd5b50356001600160a01b0316611327565b604080519115158252519081900360200190f35b3480156104dd57600080fd5b5061040961133c565b3480156104f257600080fd5b506104fb611342565b604080516001600160a01b039092168252519081900360200190f35b34801561052357600080fd5b506104fb611351565b6103f2611360565b34801561054057600080fd5b5061054961144e565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561058557818101518382015260200161056d565b505050509050019250505060405180910390f35b3480156105a557600080fd5b506104bd600480360360208110156105bc57600080fd5b50356001600160a01b03166114b0565b6103f2600480360360208110156105e257600080fd5b50356114d2565b3480156105f557600080fd5b506103f26004803603602081101561060c57600080fd5b50356118de565b34801561061f57600080fd5b506103f26004803603602081101561063657600080fd5b50356001600160a01b0316611960565b34801561065257600080fd5b506103f26119dd565b34801561066757600080fd5b506104fb611b11565b34801561067c57600080fd5b506104096004803603602081101561069357600080fd5b50356001600160a01b0316611b20565b3480156106af57600080fd5b50610409600480360360208110156106c657600080fd5b50356001600160a01b0316611b32565b3480156106e257600080fd5b506103f2600480360360208110156106f957600080fd5b50356001600160a01b0316611b44565b34801561071557600080fd5b506103f26004803603602081101561072c57600080fd5b5035611bb6565b34801561073f57600080fd5b506104fb6004803603602081101561075657600080fd5b5035611c38565b34801561076957600080fd5b50610409611c5f565b34801561077e57600080fd5b50610409611c65565b34801561079357600080fd5b506103f2600480360360408110156107aa57600080fd5b5080359060200135611c6b565b3480156107c357600080fd5b506104fb611d35565b3480156107d857600080fd5b50610409611d44565b3480156107ed57600080fd5b506103f26004803603604081101561080457600080fd5b5080359060200135611d4a565b34801561081d57600080fd5b506103f26004803603604081101561083457600080fd5b506001600160a01b0381351690602001351515611e14565b34801561085857600080fd5b50610409612138565b34801561086d57600080fd5b5061040961213e565b34801561088257600080fd5b506104fb612144565b34801561089757600080fd5b50610409612153565b3480156108ac57600080fd5b506103f2600480360360208110156108c357600080fd5b5035612159565b3480156108d657600080fd5b50610409600480360360208110156108ed57600080fd5b50356001600160a01b03166121db565b34801561090957600080fd5b506104096121ed565b34801561091e57600080fd5b506103f26004803603602081101561093557600080fd5b50356001600160a01b03166121f3565b34801561095157600080fd5b506103f26004803603602081101561096857600080fd5b503561222c565b34801561097b57600080fd5b506104bd6004803603602081101561099257600080fd5b50356001600160a01b03166122ae565b3480156109ae57600080fd5b50610409600480360360408110156109c557600080fd5b506001600160a01b0381351690602001356122c3565b3480156109e757600080fd5b506103f2600480360360208110156109fe57600080fd5b50356123c6565b348015610a1157600080fd5b5061040960048036036020811015610a2857600080fd5b50356001600160a01b03166124eb565b348015610a4457600080fd5b506104bd6125b7565b348015610a5957600080fd5b506103f260048036036060811015610a7057600080fd5b810190602081018135640100000000811115610a8b57600080fd5b820183602082011115610a9d57600080fd5b80359060200191846020830284011164010000000083111715610abf57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610b0f57600080fd5b820183602082011115610b2157600080fd5b80359060200191846020830284011164010000000083111715610b4357600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050505035151590506125c0565b348015610b8f57600080fd5b506104096128f8565b348015610ba457600080fd5b506104fb6128fe565b348015610bb957600080fd5b5061040961290d565b348015610bce57600080fd5b506103f26004803603610200811015610be657600080fd5b6001600160a01b038235811692602081013582169260408201358316926060830135169160808101359160a08201359160c08101359160e08201359161010081013591610120820135916101408101359161016082013591610180810135916101a0820135916101c08101359181019061020081016101e0820135640100000000811115610c7357600080fd5b820183602082011115610c8557600080fd5b80359060200191846001830284011164010000000083111715610ca757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612913945050505050565b348015610cf457600080fd5b506103f260048036036020811015610d0b57600080fd5b50356001600160a01b0316612a76565b348015610d2757600080fd5b506103f260048036036020811015610d3e57600080fd5b50356001600160a01b0316612af3565b348015610d5a57600080fd5b50610409612b65565b348015610d6f57600080fd5b50610409612b6b565b348015610d8457600080fd5b506104fb612b71565b348015610d9957600080fd5b50610409612b80565b348015610dae57600080fd5b506104fb612b86565b348015610dc357600080fd5b506103f260048036036020811015610dda57600080fd5b5035612b95565b348015610ded57600080fd5b50610df6612c17565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610e30578181015183820152602001610e18565b50505050905090810190601f168015610e5d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e7757600080fd5b506103f2612ca5565b348015610e8c57600080fd5b506103f260048036036020811015610ea357600080fd5b5035612d2e565b348015610eb657600080fd5b506103f260048036036020811015610ecd57600080fd5b5035612dee565b348015610ee057600080fd5b506103f260048036036040811015610ef757600080fd5b506001600160a01b038135169060200135612e70565b348015610f1957600080fd5b506104fb612fd6565b348015610f2e57600080fd5b506104bd612fea565b348015610f4357600080fd5b506104bd60048036036020811015610f5a57600080fd5b50356001600160a01b0316612ff3565b3360009081526018602052604090205460ff1615610fb8576040805162461bcd60e51b815260206004820152600660248201526561637469766560d01b604482015290519081900360640190fd5b6000808215610fce575050601f54602054610fd7565b5050600f546010545b813414611019576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6006546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611052573d6000803e3d6000fd5b50600754604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156110ad57600080fd5b505af11580156110c1573d6000803e3d6000fd5b505050506040513d60208110156110d757600080fd5b50506007546006546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561113257600080fd5b505af1158015611146573d6000803e3d6000fd5b505050506040513d602081101561115c57600080fd5b50503360008181526019602090815260408083208054600160ff1991821617909155601a909252808320805490921687151517909155517f039f711c9c18dd815b225b1424855e6118e746c6b5d688907f10c4dd29ebe92a9190a2505050565b600d5481565b60005461010090046001600160a01b03163314806111ea57506005546001600160a01b031633145b806111ff57506002546001600160a01b031633145b61123f576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80611281576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600991909155600a55565b6001546001600160a01b0316331480156112a557503315155b6112e9576040805162461bcd60e51b815260206004820152601060248201526f3737ba103832b73234b733a0b236b4b760811b604482015290519081900360640190fd5b6001805460008054610100600160a81b0319166101006001600160a01b038416021790556001600160a01b0319169055565b60135481565b601f5481565b60186020526000908152604090205460ff1681565b600a5481565b6001546001600160a01b031681565b6002546001600160a01b031681565b336000908152601a602052604090205460ff16156113be5760125434146113b9576040805162461bcd60e51b81526020600482015260086024820152676e6161732066656560c01b604482015290519081900360640190fd5b611400565b6011543414611400576040805162461bcd60e51b815260206004820152600960248201526862617369632066656560b81b604482015290519081900360640190fd5b6006546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611439573d6000803e3d6000fd5b50336000908152601b60205260409020439055565b606060168054806020026020016040519081016040528092919081815260200182805480156114a657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611488575b5050505050905090565b6001600160a01b03811660009081526018602052604090205460ff165b919050565b4381111561151e576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b210313637b1b590373ab6b132b960611b604482015290519081900360640190fd5b33600090815260156020526040902054611567576040805162461bcd60e51b815260206004820152600560248201526432b93937b960d91b604482015290519081900360640190fd5b3360009081526015602052604090205481116115b5576040805162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b604482015290519081900360640190fd5b3360009081526018602052604090205460ff16611606576040805162461bcd60e51b815260206004820152600a6024820152696e6f742061637469766560b01b604482015290519081900360640190fd5b336000908152601b6020526040902054611650576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b601354336000908152601b60205260409020540181106116a1576040805162461bcd60e51b81526020600482015260076024820152667061792066656560c81b604482015290519081900360640190fd5b60006116ad33836122c3565b9050600081116116f0576040805162461bcd60e51b81526020600482015260096024820152681b9bc81c995dd85c9960ba1b604482015290519081900360640190fd5b6000611713600e5461170d600d548561300890919063ffffffff16565b90613068565b9050803414611757576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6006546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611790573d6000803e3d6000fd5b506007546008546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018690529051919092169163095ea7b39160448083019260209291908290030181600087803b1580156117ea57600080fd5b505af11580156117fe573d6000803e3d6000fd5b505050506040513d602081101561181457600080fd5b5050600854604080516330d6a97560e01b81523360048201526024810185905290516001600160a01b03909216916330d6a9759160448082019260009290919082900301818387803b15801561186957600080fd5b505af115801561187d573d6000803e3d6000fd5b505060145461188f92509050836130aa565b60145533600081815260156020908152604091829020869055815185815291517fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a9281900390910190a2505050565b60005461010090046001600160a01b031633148061190657506005546001600160a01b031633145b8061191b57506002546001600160a01b031633145b61195b576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601255565b6001600160a01b0381166119a4576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b031633146119bb57600080fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60215460ff1615611a27576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c995b5bdd9959608a1b604482015290519081900360640190fd5b6002546001600160a01b03163314611a75576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6007546002546040805163a9059cbb60e01b81526001600160a01b03928316600482015268878678326eac90000060248201529051919092169163a9059cbb9160448083019260209291908290030181600087803b158015611ad657600080fd5b505af1158015611aea573d6000803e3d6000fd5b505050506040513d6020811015611b0057600080fd5b50506021805460ff19166001179055565b6003546001600160a01b031681565b60156020526000908152604090205481565b60176020526000908152604090205481565b60005461010090046001600160a01b03163314611b94576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60005461010090046001600160a01b0316331480611bde57506005546001600160a01b031633145b80611bf357506002546001600160a01b031633145b611c33576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601055565b60168181548110611c4557fe5b6000918252602090912001546001600160a01b0316905081565b60125481565b600f5481565b60005461010090046001600160a01b0316331480611c9357506005546001600160a01b031633145b80611ca857506002546001600160a01b031633145b611ce8576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80611d2a576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600b91909155600c55565b6005546001600160a01b031681565b600e5481565b60005461010090046001600160a01b0316331480611d7257506005546001600160a01b031633145b80611d8757506002546001600160a01b031633145b611dc7576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80611e09576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600d91909155600e55565b60005461010090046001600160a01b0316331480611e3c57506004546001600160a01b031633145b80611e5157506002546001600160a01b031633145b611e8e576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b6001600160a01b0382166000818152601760205260409020546016805491929183908110611eb857fe5b6000918252602090912001546001600160a01b031614611f10576040805162461bcd60e51b815260206004820152600e60248201526d696e76616c696420656e7469747960901b604482015290519081900360640190fd5b6001600160a01b03831660009081526018602052604090205460ff1615158215151415611f72576040805162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b604482015290519081900360640190fd5b6001600160a01b0383166000908152601860205260409020805460ff19168315801591909117909155611fd057601c54611fad9060016130ec565b601c556001600160a01b0383166000908152601560205260409020439055612133565b6001600160a01b038316600090815260156020526040902054431115612108576000611ffb846124eb565b905080156121065760145461201090826130aa565b6014556007546008546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018590529051919092169163095ea7b39160448083019260209291908290030181600087803b15801561206c57600080fd5b505af1158015612080573d6000803e3d6000fd5b505050506040513d602081101561209657600080fd5b5050600854604080516330d6a97560e01b81526001600160a01b03878116600483015260248201859052915191909216916330d6a97591604480830192600092919082900301818387803b1580156120ed57600080fd5b505af1158015612101573d6000803e3d6000fd5b505050505b505b601c546121169060016130aa565b601c556001600160a01b0383166000908152601560205260408120555b505050565b60205481565b60115481565b6007546001600160a01b031681565b60095481565b60005461010090046001600160a01b031633148061218157506005546001600160a01b031633145b8061219657506002546001600160a01b031633145b6121d6576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601f55565b601b6020526000908152604090205481565b60145481565b6002546001600160a01b0316331461220a57600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60005461010090046001600160a01b031633148061225457506005546001600160a01b031633145b8061226957506002546001600160a01b031633145b6122a9576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600f55565b601a6020526000908152604090205460ff1681565b6000438211156122d5575060006123c0565b6001600160a01b0383166000908152601560205260409020546122fa575060006123c0565b6001600160a01b038316600090815260156020526040902054821015612322575060006123c0565b601c54612331575060006123c0565b6001600160a01b0383166000908152601560205260408120546123559084906130aa565b6001600160a01b0385166000908152601a602052604081205491925090819060ff1615612389575050600b54600c54612392565b5050600954600a545b60006123a28261170d8686613008565b90506123b9601c548261306890919063ffffffff16565b9450505050505b92915050565b6002546001600160a01b03163314612414576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60008111612452576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600754604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156124ac57600080fd5b505af11580156124c0573d6000803e3d6000fd5b505050506040513d60208110156124d657600080fd5b50506014546124e590826130ec565b60145550565b6000601c5460001415612500575060006114cd565b6001600160a01b038216600090815260156020526040902054612525575060006114cd565b6001600160a01b0382166000908152601560205260408120546125499043906130aa565b6001600160a01b0384166000908152601a602052604081205491925090819060ff161561257d575050600b54600c54612586565b5050600954600a545b60006125968261170d8686613008565b90506125ad601c548261306890919063ffffffff16565b9695505050505050565b60215460ff1681565b60005461010090046001600160a01b03163314806125e857506004546001600160a01b031633145b806125fd57506002546001600160a01b031633145b61263a576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b6000835111612679576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b81518351146126c4576040805162461bcd60e51b81526020600482015260126024820152710d8cadccee8d0e640c8dedce840dac2e8c6d60731b604482015290519081900360640190fd5b60005b83518110156128f25760008482815181106126de57fe5b6020026020010151905060008483815181106126f657fe5b6020026020010151905083156127c4576001600160a01b03821660009081526019602052604090205460ff16612761576040805162461bcd60e51b815260206004820152600b60248201526a6e6f742070656e64696e6760a81b604482015290519081900360640190fd5b6001600160a01b0382166000908152601a602052604090205460ff161515811515146127c4576040805162461bcd60e51b815260206004820152600d60248201526c0dcc2c2e640dcde40dac2e8c6d609b1b604482015290519081900360640190fd5b6001600160a01b03821660009081526018602052604090205460ff161561281b576040805162461bcd60e51b815260206004820152600660248201526565786973747360d01b604482015290519081900360640190fd5b601680546001600160a01b038416600081815260176020908152604080832085905560018086019096557fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289850180546001600160a01b03191690941790935560188152828220805460ff19908116871790915560198252838320805482169055601a9091529190208054909116841515179055601c5490916128bd91906130ec565b601c5550506001600160a01b031660009081526015602090815260408083204390819055601b909252909120556001016126c7565b50505050565b601e5481565b6006546001600160a01b031681565b600c5481565b60005460ff1615612957576040805162461bcd60e51b8152602060048201526009602482015268696e697420646f6e6560b81b604482015290519081900360640190fd5b8f600760006101000a8154816001600160a01b0302191690836001600160a01b031602179055508e600860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508d600060016101000a8154816001600160a01b0302191690836001600160a01b031602179055508c600260006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b6009819055508a600a8190555089600b8190555088600c8190555087600f8190555086601081905550856011819055508460128190555082600d8190555081600e819055508360138190555080601d9080519060200190612a56929190613242565b50506000805460ff19166001179055505050505050505050505050505050565b6001600160a01b038116612aba576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b03163314612ad157600080fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314612b43576040805162461bcd60e51b815260206004820152600e60248201526d3737ba1039bab832b920b236b4b760911b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600b5481565b60105481565b6004546001600160a01b031681565b601c5481565b6008546001600160a01b031681565b60005461010090046001600160a01b0316331480612bbd57506005546001600160a01b031633145b80612bd257506002546001600160a01b031633145b612c12576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b602055565b601d805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015612c9d5780601f10612c7257610100808354040283529160200191612c9d565b820191906000526020600020905b815481529060010190602001808311612c8057829003601f168201915b505050505081565b6003546001600160a01b031633148015612cbe57503315155b612d07576040805162461bcd60e51b81526020600482015260156024820152743737ba103832b73234b733a9bab832b920b236b4b760591b604482015290519081900360640190fd5b60038054600280546001600160a01b03199081166001600160a01b03841617909155169055565b60005461010090046001600160a01b0316331480612d5657506005546001600160a01b031633145b80612d6b57506002546001600160a01b031633145b612dab576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60008111612de9576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b601355565b60005461010090046001600160a01b0316331480612e1657506005546001600160a01b031633145b80612e2b57506002546001600160a01b031633145b612e6b576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601155565b6002546001600160a01b03163314612ebe576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60008111612efc576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b806014541015612f40576040805162461bcd60e51b815260206004820152600a6024820152690dcdee840cadcdeeaced60b31b604482015290519081900360640190fd5b6007546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015612f9657600080fd5b505af1158015612faa573d6000803e3d6000fd5b505050506040513d6020811015612fc057600080fd5b5050601454612fcf90826130aa565b6014555050565b60005461010090046001600160a01b031681565b60005460ff1681565b60196020526000908152604090205460ff1681565b600082613017575060006123c0565b8282028284828161302457fe5b04146130615760405162461bcd60e51b81526004018080602001828103825260218152602001806132d66021913960400191505060405180910390fd5b9392505050565b600061306183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613146565b600061306183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131e8565b600082820183811015613061576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081836131d25760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561319757818101518382015260200161317f565b50505050905090810190601f1680156131c45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816131de57fe5b0495945050505050565b6000818484111561323a5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561319757818101518382015260200161317f565b505050900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061328357805160ff19168380011785556132b0565b828001600101855582156132b0579182015b828111156132b0578251825591602001919060010190613295565b506132bc9291506132c0565b5090565b5b808211156132bc57600081556001016132c156fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a264697066735822122061226a02c5c4ef8b0c3824f25c4ebc8e66c297b7239fa6840aea5fc0f4c6126f64736f6c634300060c0033

Deployed Bytecode Sourcemap

143:15982:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9909:693;;;;;;;;;;;;;;;;-1:-1:-1;9909:693:2;;;;:::i;:::-;;832:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;5386:422;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5386:422:2;;;;;;;:::i;4262:229::-;;;;;;;;;;;;;:::i;1073:44::-;;;;;;;;;;;;;:::i;1617:37::-;;;;;;;;;;;;;:::i;1308:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1308:44:2;-1:-1:-1;;;;;1308:44:2;;:::i;:::-;;;;;;;;;;;;;;;;;;686:40;;;;;;;;;;;;;:::i;355:27::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;355:27:2;;;;;;;;;;;;;;388:25;;;;;;;;;;;;;:::i;12910:332::-;;;:::i;5062:94::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5162:111;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5162:111:2;-1:-1:-1;;;;;5162:111:2;;:::i;15027:1096::-;;;;;;;;;;;;;;;;-1:-1:-1;15027:1096:2;;:::i;9166:286::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9166:286:2;;:::i;3659:216::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3659:216:2;-1:-1:-1;;;;;3659:216:2;;:::i;6852:368::-;;;;;;;;;;;;;:::i;419:32::-;;;;;;;;;;;;;:::i;1159:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1159:59:2;-1:-1:-1;;;;;1159:59:2;;:::i;1256:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1256:46:2;-1:-1:-1;;;;;1256:46:2;;:::i;4101:155::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4101:155:2;-1:-1:-1;;;;;4101:155:2;;:::i;7617:272::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7617:272:2;;:::i;1225:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1225:25:2;;:::i;1031:36::-;;;;;;;;;;;;;:::i;917:33::-;;;;;;;;;;;;;:::i;5814:434::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5814:434:2;;;;;;;:::i;490:29::-;;;;;;;;;;;;;:::i;873:37::-;;;;;;;;;;;;;:::i;8475:401::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8475:401:2;;;;;;;:::i;11807:1097::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11807:1097:2;;;;;;;;;;:::i;1661:33::-;;;;;;;;;;;;;:::i;993:32::-;;;;;;;;;;;;;:::i;567:25::-;;;;;;;;;;;;;:::i;642:38::-;;;;;;;;;;;;;:::i;7895:288::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7895:288:2;;:::i;1460:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1460:46:2;-1:-1:-1;;;;;1460:46:2;;:::i;1124:28::-;;;;;;;;;;;;;:::i;3503:150::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3503:150:2;-1:-1:-1;;;;;3503:150:2;;:::i;7331:280::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7331:280:2;;:::i;1410:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1410:44:2;-1:-1:-1;;;;;1410:44:2;;:::i;14056:965::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14056:965:2;;;;;;;;:::i;6254:263::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6254:263:2;;:::i;13248:802::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13248:802:2;-1:-1:-1;;;;;13248:802:2;;:::i;1701:25::-;;;;;;;;;;;;;:::i;10608:1193::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10608:1193:2;;;;;;;;-1:-1:-1;10608:1193:2;;-1:-1:-1;;10608:1193:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10608:1193:2;;-1:-1:-1;;;;10608:1193:2;;;;-1:-1:-1;10608:1193:2;:::i;1579:31::-;;;;;;;;;;;;;:::i;525:35::-;;;;;;;;;;;;;:::i;781:44::-;;;;;;;;;;;;;:::i;1733:1658::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1733:1658:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1733:1658:2;;-1:-1:-1;1733:1658:2;;-1:-1:-1;;;;;1733:1658:2:i;3881:214::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3881:214:2;-1:-1:-1;;;;;3881:214:2;;:::i;4497:185::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4497:185:2;-1:-1:-1;;;;;4497:185:2;;:::i;733:42::-;;;;;;;;;;;;;:::i;957:29::-;;;;;;;;;;;;;:::i;457:27::-;;;;;;;;;;;;;:::i;1512:29::-;;;;;;;;;;;;;:::i;598:37::-;;;;;;;;;;;;;:::i;8189:280::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8189:280:2;;:::i;1548:24::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4688:259;;;;;;;;;;;;;:::i;9458:340::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9458:340:2;;:::i;8882:278::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8882:278:2;;:::i;6523:323::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6523:323:2;;;;;;;;:::i;329:20::-;;;;;;;;;;;;;:::i;303:::-;;;;;;;;;;;;;:::i;1358:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1358:46:2;-1:-1:-1;;;;;1358:46:2;;:::i;9909:693::-;9992:10;9979:24;;;;:12;:24;;;;;;;;9978:25;9970:44;;;;;-1:-1:-1;;;9970:44:2;;;;;;;;;;;;-1:-1:-1;;;9970:44:2;;;;;;;;;;;;;;;10024:12;10046;10072:6;10068:196;;;-1:-1:-1;;10101:22:2;;10144:18;;10068:196;;;-1:-1:-1;;10200:18:2;;10239:14;;10068:196;10294:4;10281:9;:17;10273:41;;;;;-1:-1:-1;;;10273:41:2;;;;;;;;;;;;-1:-1:-1;;;10273:41:2;;;;;;;;;;;;;;;10324:12;;:32;;-1:-1:-1;;;;;10324:12:2;;;;10346:9;10324:32;;;;;:12;:32;:12;:32;10346:9;10324:12;:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10366:11:2;;:57;;;-1:-1:-1;;;10366:57:2;;10391:10;10366:57;;;;10411:4;10366:57;;;;;;;;;;;;-1:-1:-1;;;;;10366:11:2;;;;:24;;:57;;;;;;;;;;;;;;;:11;;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10433:11:2;;10454:12;;10433:40;;;-1:-1:-1;;;10433:40:2;;-1:-1:-1;;;;;10454:12:2;;;10433:40;;;;;;;;;;;;:11;;;;;:20;;:40;;;;;10366:57;;10433:40;;;;;;;:11;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10498:10:2;10483:26;;;;:14;10433:40;10483:26;;;;;;;:33;;10512:4;-1:-1:-1;;10483:33:2;;;;;;;10526:12;:24;;;;;;:33;;;;;;;;;;;;10574:21;;;10483:26;10574:21;9909:693;;;:::o;832:35::-;;;;:::o;5386:422::-;5520:5;;;;;-1:-1:-1;;;;;5520:5:2;5506:10;:19;;:67;;-1:-1:-1;5559:14:2;;-1:-1:-1;;;;;5559:14:2;5545:10;:28;5506:67;:111;;;-1:-1:-1;5607:10:2;;-1:-1:-1;;;;;5607:10:2;5593;:24;5506:111;5485:170;;;;;-1:-1:-1;;;5485:170:2;;;;;;;;;;;;-1:-1:-1;;;5485:170:2;;;;;;;;;;;;;;;5673:16;5665:42;;;;;-1:-1:-1;;;5665:42:2;;;;;;;;;;;;-1:-1:-1;;;5665:42:2;;;;;;;;;;;;;;;5717:23;:35;;;;5762:25;:39;5386:422::o;4262:229::-;4337:12;;-1:-1:-1;;;;;4337:12:2;4323:10;:26;:54;;;;-1:-1:-1;4353:10:2;:24;;4323:54;4302:117;;;;;-1:-1:-1;;;4302:117:2;;;;;;;;;;;;-1:-1:-1;;;4302:117:2;;;;;;;;;;;;;;;4437:12;;;;4429:20;;-1:-1:-1;;;;;;4429:20:2;4437:12;-1:-1:-1;;;;;4437:12:2;;4429:20;;;;-1:-1:-1;;;;;;4459:25:2;;;4262:229::o;1073:44::-;;;;:::o;1617:37::-;;;;:::o;1308:44::-;;;;;;;;;;;;;;;:::o;686:40::-;;;;:::o;355:27::-;;;-1:-1:-1;;;;;355:27:2;;:::o;388:25::-;;;-1:-1:-1;;;;;388:25:2;;:::o;12910:332::-;12970:10;12957:24;;;;:12;:24;;;;;;;;12953:193;;;13018:21;;13005:9;:34;12997:55;;;;;-1:-1:-1;;;12997:55:2;;;;;;;;;;;;-1:-1:-1;;;12997:55:2;;;;;;;;;;;;;;;12953:193;;;13104:17;;13091:9;:30;13083:52;;;;;-1:-1:-1;;;13083:52:2;;;;;;;;;;;;-1:-1:-1;;;13083:52:2;;;;;;;;;;;;;;;13155:12;;:32;;-1:-1:-1;;;;;13155:12:2;;;;13177:9;13155:32;;;;;:12;:32;:12;:32;13177:9;13155:12;:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13209:10:2;13197:23;;;;:11;:23;;;;;13223:12;13197:38;;12910:332::o;5062:94::-;5106:16;5141:8;5134:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5134:15:2;;;;;;;;;;;;;;;;;;;;;;;5062:94;:::o;5162:111::-;-1:-1:-1;;;;;5246:20:2;;5223:4;5246:20;;;:12;:20;;;;;;;;5162:111;;;;:::o;15027:1096::-;15111:12;15096:11;:27;;15088:60;;;;;-1:-1:-1;;;15088:60:2;;;;;;;;;;;;-1:-1:-1;;;15088:60:2;;;;;;;;;;;;;;;15191:10;15166:36;;;;:24;:36;;;;;;15158:59;;;;;-1:-1:-1;;;15158:59:2;;;;;;;;;;;;-1:-1:-1;;;15158:59:2;;;;;;;;;;;;;;;15274:10;15249:36;;;;:24;:36;;;;;;15235:50;;15227:71;;;;;-1:-1:-1;;;15227:71:2;;;;;;;;;;;;-1:-1:-1;;;15227:71:2;;;;;;;;;;;;;;;15329:10;15316:24;;;;:12;:24;;;;;;;;15308:47;;;;;-1:-1:-1;;;15308:47:2;;;;;;;;;;;;-1:-1:-1;;;15308:47:2;;;;;;;;;;;;;;;15385:10;15373:23;;;;:11;:23;;;;;;15365:45;;;;;-1:-1:-1;;;15365:45:2;;;;;;;;;;;;;;;-1:-1:-1;;;15365:45:2;;;;;;;;;;;;;;;15497:29;;15483:10;15471:23;;;;:11;:23;;;;;;:55;15441:85;;15420:139;;;;;-1:-1:-1;;;15420:139:2;;;;;;;;;;;;-1:-1:-1;;;15420:139:2;;;;;;;;;;;;;;;15569:14;15586:41;15603:10;15615:11;15586:16;:41::i;:::-;15569:58;;15654:1;15645:6;:10;15637:32;;;;;-1:-1:-1;;;15637:32:2;;;;;;;;;;;;-1:-1:-1;;;15637:32:2;;;;;;;;;;;;;;;15679:11;15705:60;15742:22;;15705:32;15716:20;;15705:6;:10;;:32;;;;:::i;:::-;:36;;:60::i;:::-;15679:86;;15796:3;15783:9;:16;15775:40;;;;;-1:-1:-1;;;15775:40:2;;;;;;;;;;;;-1:-1:-1;;;15775:40:2;;;;;;;;;;;;;;;15825:12;;:32;;-1:-1:-1;;;;;15825:12:2;;;;15847:9;15825:32;;;;;:12;:32;:12;:32;15847:9;15825:12;:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15867:11:2;;15895:10;;15867:48;;;-1:-1:-1;;;15867:48:2;;-1:-1:-1;;;;;15895:10:2;;;15867:48;;;;;;;;;;;;:11;;;;;:19;;:48;;;;;;;;;;;;;;:11;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15925:10:2;;:38;;;-1:-1:-1;;;15925:38:2;;15944:10;15925:38;;;;;;;;;;;;-1:-1:-1;;;;;15925:10:2;;;;:18;;:38;;;;;:10;;:38;;;;;;;;:10;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15989:13:2;;:25;;-1:-1:-1;15989:13:2;-1:-1:-1;16007:6:2;15989:17;:25::i;:::-;15973:13;:41;16049:10;16024:36;;;;:24;:36;;;;;;;;;:50;;;16089:27;;;;;;;;;;;;;;;;;15027:1096;;;:::o;9166:286::-;9268:5;;;;;-1:-1:-1;;;;;9268:5:2;9254:10;:19;;:67;;-1:-1:-1;9307:14:2;;-1:-1:-1;;;;;9307:14:2;9293:10;:28;9254:67;:111;;;-1:-1:-1;9355:10:2;;-1:-1:-1;;;;;9355:10:2;9341;:24;9254:111;9233:170;;;;;-1:-1:-1;;;9233:170:2;;;;;;;;;;;;-1:-1:-1;;;9233:170:2;;;;;;;;;;;;;;;9413:21;:32;9166:286::o;3659:216::-;-1:-1:-1;;;;;3741:31:2;;3733:48;;;;;-1:-1:-1;;;3733:48:2;;;;;;;;;;;;;;;-1:-1:-1;;;3733:48:2;;;;;;;;;;;;;;;3813:10;;-1:-1:-1;;;;;3813:10:2;3799;:24;3791:33;;;;;;3834:14;:34;;-1:-1:-1;;;;;;3834:34:2;-1:-1:-1;;;;;3834:34:2;;;;;;;;;;3659:216::o;6852:368::-;6902:13;;;;6901:14;6893:42;;;;;-1:-1:-1;;;6893:42:2;;;;;;;;;;;;-1:-1:-1;;;6893:42:2;;;;;;;;;;;;;;;6967:10;;-1:-1:-1;;;;;6967:10:2;6953;:24;6945:49;;;;;-1:-1:-1;;;6945:49:2;;;;;;;;;;;;-1:-1:-1;;;6945:49:2;;;;;;;;;;;;;;;7127:11;;7148:10;;7127:56;;;-1:-1:-1;;;7127:56:2;;-1:-1:-1;;;;;7148:10:2;;;7127:56;;;;7160:22;7127:56;;;;;;:11;;;;;:20;;:56;;;;;;;;;;;;;;:11;;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7193:13:2;:20;;-1:-1:-1;;7193:20:2;7209:4;7193:20;;;6852:368::o;419:32::-;;;-1:-1:-1;;;;;419:32:2;;:::o;1159:59::-;;;;;;;;;;;;;:::o;1256:46::-;;;;;;;;;;;;;:::o;4101:155::-;4190:5;;;;;-1:-1:-1;;;;;4190:5:2;4176:10;:19;4168:41;;;;;-1:-1:-1;;;4168:41:2;;;;;;;;;;;;-1:-1:-1;;;4168:41:2;;;;;;;;;;;;;;;4219:12;:30;;-1:-1:-1;;;;;;4219:30:2;-1:-1:-1;;;;;4219:30:2;;;;;;;;;;4101:155::o;7617:272::-;7712:5;;;;;-1:-1:-1;;;;;7712:5:2;7698:10;:19;;:67;;-1:-1:-1;7751:14:2;;-1:-1:-1;;;;;7751:14:2;7737:10;:28;7698:67;:111;;;-1:-1:-1;7799:10:2;;-1:-1:-1;;;;;7799:10:2;7785;:24;7698:111;7677:170;;;;;-1:-1:-1;;;7677:170:2;;;;;;;;;;;;-1:-1:-1;;;7677:170:2;;;;;;;;;;;;;;;7857:14;:25;7617:272::o;1225:25::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1225:25:2;;-1:-1:-1;1225:25:2;:::o;1031:36::-;;;;:::o;917:33::-;;;;:::o;5814:434::-;5952:5;;;;;-1:-1:-1;;;;;5952:5:2;5938:10;:19;;:67;;-1:-1:-1;5991:14:2;;-1:-1:-1;;;;;5991:14:2;5977:10;:28;5938:67;:111;;;-1:-1:-1;6039:10:2;;-1:-1:-1;;;;;6039:10:2;6025;:24;5938:111;5917:170;;;;;-1:-1:-1;;;5917:170:2;;;;;;;;;;;;-1:-1:-1;;;5917:170:2;;;;;;;;;;;;;;;6105:16;6097:42;;;;;-1:-1:-1;;;6097:42:2;;;;;;;;;;;;-1:-1:-1;;;6097:42:2;;;;;;;;;;;;;;;6149:27;:39;;;;6198:29;:43;5814:434::o;490:29::-;;;-1:-1:-1;;;;;490:29:2;;:::o;873:37::-;;;;:::o;8475:401::-;8594:5;;;;;-1:-1:-1;;;;;8594:5:2;8580:10;:19;;:67;;-1:-1:-1;8633:14:2;;-1:-1:-1;;;;;8633:14:2;8619:10;:28;8580:67;:111;;;-1:-1:-1;8681:10:2;;-1:-1:-1;;;;;8681:10:2;8667;:24;8580:111;8559:170;;;;;-1:-1:-1;;;8559:170:2;;;;;;;;;;;;-1:-1:-1;;;8559:170:2;;;;;;;;;;;;;;;8747:16;8739:42;;;;;-1:-1:-1;;;8739:42:2;;;;;;;;;;;;-1:-1:-1;;;8739:42:2;;;;;;;;;;;;;;;8791:20;:32;;;;8833:22;:36;8475:401::o;11807:1097::-;11919:5;;;;;-1:-1:-1;;;;;11919:5:2;11905:10;:19;;:65;;-1:-1:-1;11958:12:2;;-1:-1:-1;;;;;11958:12:2;11944:10;:26;11905:65;:109;;;-1:-1:-1;12004:10:2;;-1:-1:-1;;;;;12004:10:2;11990;:24;11905:109;11884:165;;;;;-1:-1:-1;;;11884:165:2;;;;;;;;;;;;-1:-1:-1;;;11884:165:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;12075:19:2;;12059:13;12075:19;;;:11;:19;;;;;;12112:8;:15;;12075:19;;;;;12112:15;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12112:15:2;:25;12104:52;;;;;-1:-1:-1;;;12104:52:2;;;;;;;;;;;;-1:-1:-1;;;12104:52:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;12174:20:2;;;;;;:12;:20;;;;;;;;:30;;;;;;;12166:54;;;;;-1:-1:-1;;;12166:54:2;;;;;;;;;;;;-1:-1:-1;;;12166:54:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;12230:20:2;;;;;;:12;:20;;;;;:29;;-1:-1:-1;;12230:29:2;;;;;;;;;;;;12269:629;;12312:14;;:21;;12331:1;12312:18;:21::i;:::-;12295:14;:38;-1:-1:-1;;;;;12347:32:2;;;;;;:24;:32;;;;;12382:12;12347:47;;12269:629;;;-1:-1:-1;;;;;12444:32:2;;;;;;:24;:32;;;;;;12429:12;:47;12425:361;;;12496:14;12513:17;12523:6;12513:9;:17::i;:::-;12496:34;-1:-1:-1;12552:10:2;;12548:224;;12602:13;;:25;;12620:6;12602:17;:25::i;:::-;12586:13;:41;12649:11;;12677:10;;12649:48;;;-1:-1:-1;;;12649:48:2;;-1:-1:-1;;;;;12677:10:2;;;12649:48;;;;;;;;;;;;:11;;;;;:19;;:48;;;;;;;;;;;;;;:11;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12719:10:2;;:34;;;-1:-1:-1;;;12719:34:2;;-1:-1:-1;;;;;12719:34:2;;;;;;;;;;;;;;;:10;;;;;:18;;:34;;;;;:10;;:34;;;;;;;:10;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12548:224;12425:361;;12816:14;;:21;;12835:1;12816:18;:21::i;:::-;12799:14;:38;-1:-1:-1;;;;;12851:32:2;;12886:1;12851:32;;;:24;:32;;;;;:36;12269:629;11807:1097;;;:::o;1661:33::-;;;;:::o;993:32::-;;;;:::o;567:25::-;;;-1:-1:-1;;;;;567:25:2;;:::o;642:38::-;;;;:::o;7895:288::-;7998:5;;;;;-1:-1:-1;;;;;7998:5:2;7984:10;:19;;:67;;-1:-1:-1;8037:14:2;;-1:-1:-1;;;;;8037:14:2;8023:10;:28;7984:67;:111;;;-1:-1:-1;8085:10:2;;-1:-1:-1;;;;;8085:10:2;8071;:24;7984:111;7963:170;;;;;-1:-1:-1;;;7963:170:2;;;;;;;;;;;;-1:-1:-1;;;7963:170:2;;;;;;;;;;;;;;;8143:22;:33;7895:288::o;1460:46::-;;;;;;;;;;;;;:::o;1124:28::-;;;;:::o;3503:150::-;3595:10;;-1:-1:-1;;;;;3595:10:2;3581;:24;3573:33;;;;;;3616:12;:30;;-1:-1:-1;;;;;;3616:30:2;-1:-1:-1;;;;;3616:30:2;;;;;;;;;;3503:150::o;7331:280::-;7430:5;;;;;-1:-1:-1;;;;;7430:5:2;7416:10;:19;;:67;;-1:-1:-1;7469:14:2;;-1:-1:-1;;;;;7469:14:2;7455:10;:28;7416:67;:111;;;-1:-1:-1;7517:10:2;;-1:-1:-1;;;;;7517:10:2;7503;:24;7416:111;7395:170;;;;;-1:-1:-1;;;7395:170:2;;;;;;;;;;;;-1:-1:-1;;;7395:170:2;;;;;;;;;;;;;;;7575:18;:29;7331:280::o;1410:44::-;;;;;;;;;;;;;;;:::o;14056:965::-;14164:7;14205:12;14191:11;:26;14187:40;;;-1:-1:-1;14226:1:2;14219:8;;14187:40;-1:-1:-1;;;;;14241:32:2;;;;;;:24;:32;;;;;;14237:51;;-1:-1:-1;14287:1:2;14280:8;;14237:51;-1:-1:-1;;;;;14316:32:2;;;;;;:24;:32;;;;;;14302:46;;14298:60;;;-1:-1:-1;14357:1:2;14350:8;;14298:60;14372:14;;14368:33;;-1:-1:-1;14400:1:2;14393:8;;14368:33;-1:-1:-1;;;;;14449:32:2;;14411:19;14449:32;;;:24;:32;;;;;;14433:49;;:11;;:15;:49::i;:::-;-1:-1:-1;;;;;14564:20:2;;14492:23;14564:20;;;:12;:20;;;;;;14411:71;;-1:-1:-1;14492:23:2;;;14564:20;;14560:290;;;-1:-1:-1;;14618:27:2;;14679:29;;14560:290;;;-1:-1:-1;;14757:23:2;;14814:25;;14560:290;14859:28;14902:55;14939:17;14902:32;:11;14918:15;14902;:32::i;:55::-;14859:98;;14974:40;14999:14;;14974:20;:24;;:40;;;;:::i;:::-;14967:47;;;;;;14056:965;;;;;:::o;6254:263::-;6326:10;;-1:-1:-1;;;;;6326:10:2;6312;:24;6304:49;;;;;-1:-1:-1;;;6304:49:2;;;;;;;;;;;;-1:-1:-1;;;6304:49:2;;;;;;;;;;;;;;;6380:1;6371:6;:10;6363:27;;;;;-1:-1:-1;;;6363:27:2;;;;;;;;;;;;;;;-1:-1:-1;;;6363:27:2;;;;;;;;;;;;;;;6400:11;;:59;;;-1:-1:-1;;;6400:59:2;;6425:10;6400:59;;;;6445:4;6400:59;;;;;;;;;;;;-1:-1:-1;;;;;6400:11:2;;;;:24;;:59;;;;;;;;;;;;;;;:11;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6485:13:2;;:25;;6503:6;6485:17;:25::i;:::-;6469:13;:41;-1:-1:-1;6254:263:2:o;13248:802::-;13304:7;13327:14;;13345:1;13327:19;13323:33;;;-1:-1:-1;13355:1:2;13348:8;;13323:33;-1:-1:-1;;;;;13370:32:2;;;;;;:24;:32;;;;;;13366:51;;-1:-1:-1;13416:1:2;13409:8;;13366:51;-1:-1:-1;;;;;13478:32:2;;13427:19;13478:32;;;:24;:32;;;;;;13461:50;;:12;;:16;:50::i;:::-;-1:-1:-1;;;;;13593:20:2;;13521:23;13593:20;;;:12;:20;;;;;;13427:84;;-1:-1:-1;13521:23:2;;;13593:20;;13589:290;;;-1:-1:-1;;13647:27:2;;13708:29;;13589:290;;;-1:-1:-1;;13786:23:2;;13843:25;;13589:290;13888:28;13931:55;13968:17;13931:32;:11;13947:15;13931;:32::i;:55::-;13888:98;;14003:40;14028:14;;14003:20;:24;;:40;;;;:::i;:::-;13996:47;13248:802;-1:-1:-1;;;;;;13248:802:2:o;1701:25::-;;;;;;:::o;10608:1193::-;10775:5;;;;;-1:-1:-1;;;;;10775:5:2;10761:10;:19;;:65;;-1:-1:-1;10814:12:2;;-1:-1:-1;;;;;10814:12:2;10800:10;:26;10761:65;:109;;;-1:-1:-1;10860:10:2;;-1:-1:-1;;;;;10860:10:2;10846;:24;10761:109;10740:165;;;;;-1:-1:-1;;;10740:165:2;;;;;;;;;;;;-1:-1:-1;;;10740:165:2;;;;;;;;;;;;;;;10937:1;10923:4;:11;:15;10915:32;;;;;-1:-1:-1;;;10915:32:2;;;;;;;;;;;;;;;-1:-1:-1;;;10915:32:2;;;;;;;;;;;;;;;10980:9;:16;10965:4;:11;:31;10957:62;;;;;-1:-1:-1;;;10957:62:2;;;;;;;;;;;;-1:-1:-1;;;10957:62:2;;;;;;;;;;;;;;;11034:9;11029:766;11053:4;:11;11049:1;:15;11029:766;;;11085:14;11102:4;11107:1;11102:7;;;;;;;;;;;;;;11085:24;;11123:9;11135;11145:1;11135:12;;;;;;;;;;;;;;11123:24;;11165:9;11161:166;;;-1:-1:-1;;;;;11202:22:2;;;;;;:14;:22;;;;;;;;11194:46;;;;;-1:-1:-1;;;11194:46:2;;;;;;;;;;;;-1:-1:-1;;;11194:46:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;11266:20:2;;;;;;:12;:20;;;;;;;;:28;;;;;;11258:54;;;;;-1:-1:-1;;;11258:54:2;;;;;;;;;;;;-1:-1:-1;;;11258:54:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;11349:20:2;;;;;;:12;:20;;;;;;;;11348:21;11340:40;;;;;-1:-1:-1;;;11340:40:2;;;;;;;;;;;;-1:-1:-1;;;11340:40:2;;;;;;;;;;;;;;;11408:8;:15;;-1:-1:-1;;;;;11437:19:2;;11394:11;11437:19;;;:11;:19;;;;;;;;:25;;;11476:21;;;;;;;;;;;;-1:-1:-1;;;;;;11476:21:2;;;;;;;11511:12;:20;;;;;:27;;-1:-1:-1;;11511:27:2;;;;;;;;11552:14;:22;;;;;:30;;;;;;11596:12;:20;;;;;;:27;;;;;;;;;;;11654:14;;11408:15;;11654:21;;:14;:18;:21::i;:::-;11637:14;:38;-1:-1:-1;;;;;;;11689:32:2;;;;;:24;:32;;;;;;;;11724:12;11689:47;;;;11750:11;:19;;;;;;:34;11066:3;;11029:766;;;;10608:1193;;;:::o;1579:31::-;;;;:::o;525:35::-;;;-1:-1:-1;;;;;525:35:2;;:::o;781:44::-;;;;:::o;1733:1658::-;2441:8;;;;2440:9;2432:31;;;;;-1:-1:-1;;;2432:31:2;;;;;;;;;;;;-1:-1:-1;;;2432:31:2;;;;;;;;;;;;;;;2494:18;2473:11;;:40;;;;;-1:-1:-1;;;;;2473:40:2;;;;;-1:-1:-1;;;;;2473:40:2;;;;;;2556:17;2523:10;;:51;;;;;-1:-1:-1;;;;;2523:51:2;;;;;-1:-1:-1;;;;;2523:51:2;;;;;;2592:12;2584:5;;:20;;;;;-1:-1:-1;;;;;2584:20:2;;;;;-1:-1:-1;;;;;2584:20:2;;;;;;2627:17;2614:10;;:30;;;;;-1:-1:-1;;;;;2614:30:2;;;;;-1:-1:-1;;;;;2614:30:2;;;;;;2680:28;2654:23;:54;;;;2746:30;2718:25;:58;;;;2816:32;2786:27;:62;;;;2890:34;2858:29;:66;;;;2955:23;2934:18;:44;;;;3005:19;2988:14;:36;;;;3054:22;3034:17;:42;;;;3110:26;3086:21;:50;;;;3169:25;3146:20;:48;;;;3229:27;3204:22;:52;;;;3298:34;3266:29;:66;;;;3355:4;3342:10;:17;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3369:8:2;:15;;-1:-1:-1;;3369:15:2;3380:4;3369:15;;;-1:-1:-1;;;;;;;;;;;;;;;1733:1658:2:o;3881:214::-;-1:-1:-1;;;;;3967:29:2;;3959:46;;;;;-1:-1:-1;;;3959:46:2;;;;;;;;;;;;;;;-1:-1:-1;;;3959:46:2;;;;;;;;;;;;;;;4037:10;;-1:-1:-1;;;;;4037:10:2;4023;:24;4015:33;;;;;;4058:12;:30;;-1:-1:-1;;;;;;4058:30:2;-1:-1:-1;;;;;4058:30:2;;;;;;;;;;3881:214::o;4497:185::-;4596:10;;-1:-1:-1;;;;;4596:10:2;4582;:24;4574:51;;;;;-1:-1:-1;;;4574:51:2;;;;;;;;;;;;-1:-1:-1;;;4574:51:2;;;;;;;;;;;;;;;4635:17;:40;;-1:-1:-1;;;;;;4635:40:2;-1:-1:-1;;;;;4635:40:2;;;;;;;;;;4497:185::o;733:42::-;;;;:::o;957:29::-;;;;:::o;457:27::-;;;-1:-1:-1;;;;;457:27:2;;:::o;1512:29::-;;;;:::o;598:37::-;;;-1:-1:-1;;;;;598:37:2;;:::o;8189:280::-;8288:5;;;;;-1:-1:-1;;;;;8288:5:2;8274:10;:19;;:67;;-1:-1:-1;8327:14:2;;-1:-1:-1;;;;;8327:14:2;8313:10;:28;8274:67;:111;;;-1:-1:-1;8375:10:2;;-1:-1:-1;;;;;8375:10:2;8361;:24;8274:111;8253:170;;;;;-1:-1:-1;;;8253:170:2;;;;;;;;;;;;-1:-1:-1;;;8253:170:2;;;;;;;;;;;;;;;8433:18;:29;8189:280::o;1548:24::-;;;;;;;;;;;;;;;-1:-1:-1;;1548:24:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4688:259::-;4768:17;;-1:-1:-1;;;;;4768:17:2;4754:10;:31;:59;;;;-1:-1:-1;4789:10:2;:24;;4754:59;4733:127;;;;;-1:-1:-1;;;4733:127:2;;;;;;;;;;;;-1:-1:-1;;;4733:127:2;;;;;;;;;;;;;;;4883:17;;;4870:10;:30;;-1:-1:-1;;;;;;4870:30:2;;;-1:-1:-1;;;;;4883:17:2;;4870:30;;;;4910;;;4688:259::o;9458:340::-;9571:5;;;;;-1:-1:-1;;;;;9571:5:2;9557:10;:19;;:67;;-1:-1:-1;9610:14:2;;-1:-1:-1;;;;;9610:14:2;9596:10;:28;9557:67;:111;;;-1:-1:-1;9658:10:2;;-1:-1:-1;;;;;9658:10:2;9644;:24;9557:111;9536:170;;;;;-1:-1:-1;;;9536:170:2;;;;;;;;;;;;-1:-1:-1;;;9536:170:2;;;;;;;;;;;;;;;9733:1;9724:6;:10;9716:27;;;;;-1:-1:-1;;;9716:27:2;;;;;;;;;;;;;;;-1:-1:-1;;;9716:27:2;;;;;;;;;;;;;;;9753:29;:38;9458:340::o;8882:278::-;8980:5;;;;;-1:-1:-1;;;;;8980:5:2;8966:10;:19;;:67;;-1:-1:-1;9019:14:2;;-1:-1:-1;;;;;9019:14:2;9005:10;:28;8966:67;:111;;;-1:-1:-1;9067:10:2;;-1:-1:-1;;;;;9067:10:2;9053;:24;8966:111;8945:170;;;;;-1:-1:-1;;;8945:170:2;;;;;;;;;;;;-1:-1:-1;;;8945:170:2;;;;;;;;;;;;;;;9125:17;:28;8882:278::o;6523:323::-;6617:10;;-1:-1:-1;;;;;6617:10:2;6603;:24;6595:49;;;;;-1:-1:-1;;;6595:49:2;;;;;;;;;;;;-1:-1:-1;;;6595:49:2;;;;;;;;;;;;;;;6671:1;6662:6;:10;6654:27;;;;;-1:-1:-1;;;6654:27:2;;;;;;;;;;;;;;;-1:-1:-1;;;6654:27:2;;;;;;;;;;;;;;;6716:6;6699:13;;:23;;6691:46;;;;;-1:-1:-1;;;6691:46:2;;;;;;;;;;;;-1:-1:-1;;;6691:46:2;;;;;;;;;;;;;;;6747:11;;:41;;;-1:-1:-1;;;6747:41:2;;-1:-1:-1;;;;;6747:41:2;;;;;;;;;;;;;;;:11;;;;;:20;;:41;;;;;;;;;;;;;;:11;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6814:13:2;;:25;;6832:6;6814:17;:25::i;:::-;6798:13;:41;-1:-1:-1;;6523:323:2:o;329:20::-;;;;;;-1:-1:-1;;;;;329:20:2;;:::o;303:::-;;;;;;:::o;1358:46::-;;;;;;;;;;;;;;;:::o;2180:459:1:-;2238:7;2479:6;2475:45;;-1:-1:-1;2508:1:1;2501:8;;2475:45;2542:5;;;2546:1;2542;:5;:1;2565:5;;;;;:10;2557:56;;;;-1:-1:-1;;;2557:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2631:1;2180:459;-1:-1:-1;;;2180:459:1:o;3101:130::-;3159:7;3185:39;3189:1;3192;3185:39;;;;;;;;;;;;;;;;;:3;:39::i;1321:134::-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;874:176::-;932:7;963:5;;;986:6;;;;978:46;;;;;-1:-1:-1;;;978:46:1;;;;;;;;;;;;;;;;;;;;;;;;;;;3713:272;3799:7;3833:12;3826:5;3818:28;;;;-1:-1:-1;;;3818:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3856:9;3872:1;3868;:5;;;;;;;3713:272;-1:-1:-1;;;;;3713:272:1:o;1746:187::-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1902:5:1;;;1746:187::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;

Swarm Source

ipfs://61226a02c5c4ef8b0c3824f25c4ebc8e66c297b7239fa6840aea5fc0f4c6126f

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.