Contract 0xfaa56bcba03e94c8adde67a656fa16a181a9779b

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x699d4a44a7fa9220aa96ab5f055e217f8075b1591f4d5e7fccf7820026cf28f0Deposit All580071752023-03-20 21:00:123 days 38 mins ago0xca39ce35d31b49401f206870316a223c273f6174 IN  0xfaa56bcba03e94c8adde67a656fa16a181a9779b0 FTM0.022906984
0xf38a78f14b7fc3f8b6ac34c05b40cd189ae9df953aa41dc167ce1a6f57154847Withdraw All580062362023-03-20 20:44:563 days 53 mins ago0xca39ce35d31b49401f206870316a223c273f6174 IN  0xfaa56bcba03e94c8adde67a656fa16a181a9779b0 FTM0.023848238
0xa05734487682e677d41a571f50d1131b04ec8333d9de015a409abd11ba3b271fGet Reward579121102023-03-19 11:46:574 days 9 hrs ago0xa064b34dc0aeef23e48b400dc4b0a3f940b55865 IN  0xfaa56bcba03e94c8adde67a656fa16a181a9779b0 FTM0.024546592
0x381d566ebfa146771fdf757a96f839b353ca17b72dcbb5c726f220ead75b4113Deposit All579112322023-03-19 11:34:094 days 10 hrs ago0xca39ce35d31b49401f206870316a223c273f6174 IN  0xfaa56bcba03e94c8adde67a656fa16a181a9779b0 FTM0.016642119
0x02d153ebd260cd475c445ef6d1ed854730f3efbce7627fedf4b67468a17265cdWithdraw All579105972023-03-19 11:24:114 days 10 hrs ago0xca39ce35d31b49401f206870316a223c273f6174 IN  0xfaa56bcba03e94c8adde67a656fa16a181a9779b0 FTM0.014385111
0x66d25e93d378a92820ed17701f3e33399d4232ee9e876d2ea6c2a8b592f71addGet Reward579105442023-03-19 11:23:034 days 10 hrs ago0xca39ce35d31b49401f206870316a223c273f6174 IN  0xfaa56bcba03e94c8adde67a656fa16a181a9779b0 FTM0.01937586
0x8e139d58bf22ed43e62c3cf30e7cd5c46be43128755cf74a3829f12588c101e7Get Reward579007272023-03-19 7:52:514 days 13 hrs ago0xa064b34dc0aeef23e48b400dc4b0a3f940b55865 IN  0xfaa56bcba03e94c8adde67a656fa16a181a9779b0 FTM0.030005472
0x8e003869f0fbf05d13224c8e3f71444d36f157d3f855cd2b8c3fece254678465Deposit All578999532023-03-19 7:34:284 days 14 hrs ago0xa064b34dc0aeef23e48b400dc4b0a3f940b55865 IN  0xfaa56bcba03e94c8adde67a656fa16a181a9779b0 FTM0.020504745
0xb7e12a36f4191e136ee3cbc184ed01eaff09c7ea707dde962c13bee47e94db4fWithdraw All578998272023-03-19 7:31:324 days 14 hrs ago0xa064b34dc0aeef23e48b400dc4b0a3f940b55865 IN  0xfaa56bcba03e94c8adde67a656fa16a181a9779b0 FTM0.018422391
0x11f309f593588802732e0f2f0ca7e0bafb28c61ecd986ede330ae5b0d95e2a1fDeposit All578997922023-03-19 7:30:474 days 14 hrs ago0xa064b34dc0aeef23e48b400dc4b0a3f940b55865 IN  0xfaa56bcba03e94c8adde67a656fa16a181a9779b0 FTM0.02103744
0x7878be63b8f85fbfd7a6d761264922de2e88e8089121fbe577778000fe0f3416Deposit All578878932023-03-19 2:35:354 days 19 hrs ago0xca39ce35d31b49401f206870316a223c273f6174 IN  0xfaa56bcba03e94c8adde67a656fa16a181a9779b0 FTM0.051490764
0x8e25258e10399fb4523f8130a2e56245ac828af501ceac1fd444b3661bd6e40fDeposit All578832872023-03-19 0:32:564 days 21 hrs ago0x167d87a906da361a10061fe42bbe89451c2ee584 IN  0xfaa56bcba03e94c8adde67a656fa16a181a9779b0 FTM0.028924838
0x23f163a56a5671b797de324b2f12be7881b837c75037e82408f66ecc42c09060Withdraw All578819982023-03-18 23:58:314 days 21 hrs ago0x167d87a906da361a10061fe42bbe89451c2ee584 IN  0xfaa56bcba03e94c8adde67a656fa16a181a9779b0 FTM0.032676754
0xeb4328fff893f91f9877980bfee9ced3bb889a97c361f310ee577a61f913fac9Withdraw All578818752023-03-18 23:53:424 days 21 hrs ago0x167d87a906da361a10061fe42bbe89451c2ee584 IN  0xfaa56bcba03e94c8adde67a656fa16a181a9779b0 FTM0.031670808
0x4c9223e8cc4ecdb0334b9aa7dd7bf5abae0bda8d1c3b75c10c15374050612de8Notify Reward Am...578814842023-03-18 23:41:524 days 21 hrs ago0x5c146cd18fa53914580573c9b9604588529406ca IN  0xfaa56bcba03e94c8adde67a656fa16a181a9779b0 FTM0.027858010533
0x8272ee8634ef716ba143cd0ca226f400a4ab5ed87158eef468f25f10cc372cf9Deposit All For578752902023-03-18 21:19:155 days 19 mins ago0x5c146cd18fa53914580573c9b9604588529406ca IN  0xfaa56bcba03e94c8adde67a656fa16a181a9779b0 FTM0.021957840401
0x48dc8c5790b1545f3b741b27bcf8c423368d8df01c1c6468210e89f7fe6c1442Withdraw578750832023-03-18 21:14:345 days 24 mins ago0x5c146cd18fa53914580573c9b9604588529406ca IN  0xfaa56bcba03e94c8adde67a656fa16a181a9779b0 FTM0.030807872572
0xa6b27da5424cadf8e0b81db3c602e842a224bb2a11575f022a5b9ffe17953747Deposit All578750162023-03-18 21:12:525 days 26 mins ago0x5c146cd18fa53914580573c9b9604588529406ca IN  0xfaa56bcba03e94c8adde67a656fa16a181a9779b0 FTM0.021847985791
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xc381e9d8406aa5b4cf26943641131f88ef38628b4d5072494661060560c1811f578742052023-03-18 20:55:475 days 43 mins ago 0xce63c53547f340bdc72ab8a0755514055d443b02  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GaugeEquivalent

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2023-03-18
*/

/**
 *Submitted for verification at FtmScan.com on 2023-03-18
*/

/**
 *  EQUALIZER EXCHANGE
 *  The New Liquidity Hub of Fantom chain!
 *  https://equalizer.exchange  (Dapp)
 *  https://discord.gg/MaMhbgHMby   (Community)
 *
 *
 *  Version: 1.5.1
 *  - Backwards-compatibility with version < v1.4.0
 *    - periodFinish(<token>)
 *    - rewardRate(<token>)
 *    - lastUpdateTime(<token>)
 *    - _ve()
 *  - "Enhanced" Taxable Fee-Claims (This is NOT deposit/withdraw fee!)
 *    - Ability to introduce Protocol Fees
 *
 *
 *  Version: 1.5.0
 *  - Remove the "checkpoint" system
 *  - Remove "Proxy pattern" construction
 *  - Remove Pausable contract (Removes inheritance from Owned contract)
 *  - MultiRewards Gauge with per-token variable epoch-lengths (default: 7 days)
 *  - Supports Rewarding with Transfer-fee tokens
 *  - Supports Deposits/Withdraws of tokens with Transfer-fee
 *  - Support for LP Bribes
 *    - Voter.team() can enable a new Reward token, which can be added by anyone as a reward thereafter
 *    - Base Equal token default with a single-token reward config over 7 days
 *  - Taxable Fee-Claims (This is NOT deposit/withdraw fee!)
 *    - Ability to fund multiple Bribes at once
 *    - Ability to channel funds from 'claimFees' into some other contracts
 *  - Support for new LP types:
 *    - 2pool/3pool/4pool: Curve-style Stable Pools & Crypto Pools
 *    - Upto 8-token weighted, stable, meta-boosted & meta-stable Balancer-style pools
 *    - Wrapped Concentrated Liquidity fungible pools (ERC1155)
 *  - "Enhanced" Griefing Protection Enabled for Unknown reward adders
 *    - Voter & Distributor can notify rewards freely without any restrictions
 *    - Choice of validation between best of SNX method (rewardRate not lower) or CRV method (more than left)
 *  - Remove "Boosted" rewards
 *    - No concept of derivedBalances
 *    - No veNFT attachments/detachments upon deposits/withdrawals
 *  - totalBribePayouts to replace fee0 & fees1 to support multi-token accounting of claimed fees
 *  - Introduce the concept of `bribeTokens` to help facilitate bribes from non-standard multi-token pools
 *  - Upgradable Reward-distribution Durations
 *  - Remove concept of MAX_REWARD_TOKENS
 *    - Only ve.team() can `addReward()` new tokens
 *
 *
 *  Version: 1.4.0
 *    - Remove the whole concept of Internal Bribes (Trade Fees Streamer).
 *    - Each deposit/withdraw/getReward also calls claimFees
 *    - Allow to notifyRewards to Bribe without the fear of griefing
 *        - Time-dilution of reward APR by extending periodFinish is not possible
 *        - Bribes are paid as a lumpsum. Trade Fees are treated as External Bribes.
 *    - Repurpose usage of fees0 & fees1 as indicators of net revenue of a gauge
 *  - Allow overriding fee receipient (like ABcDeFX) by Voter.team()
 *  - Voter.team() can siphon out unclaimed rewards.
 *    - The deposited "stake" tokens (user funds) cannot be rescued. (No Rugs!)
 *    - Only the Reward tokens can be rescue()'d.
 *    - Useful in cases of non-official/external/independent gauges
 *        - Especially in cases where "stake"d tokens have their own claimFees().
 *
 *
 *
 *
 *  Contributors:
 *   -   Synthetix Network
 *   -   Curve Finance
 *   -   Andre Cronje, Fantom & Solidly.Exchange
 *   -   543 (Sam), ftm.guru & Equalizer.exchange
 *
 *
 *	SPDX-License-Identifier: UNLICENSED
*/


pragma solidity 0.8.9;


// File: contracts/interfaces/IGaugeFactory.sol

interface IGaugeFactory {
    function createGauge(address, address, address, bool, address[] memory) external returns (address);
}

// File: contracts/interfaces/IVotingEscrow.sol

interface IVotingEscrow {

    struct Point {
        int128 bias;
        int128 slope; // # -dweight / dt
        uint256 ts;
        uint256 blk; // block
    }

    function token() external view returns (address);
    function team() external returns (address);
    function epoch() external view returns (uint);
    function point_history(uint loc) external view returns (Point memory);
    function user_point_history(uint tokenId, uint loc) external view returns (Point memory);
    function user_point_epoch(uint tokenId) external view returns (uint);

    function ownerOf(uint) external view returns (address);
    function isApprovedOrOwner(address, uint) external view returns (bool);
    function transferFrom(address, address, uint) external;

    function voting(uint tokenId) external;
    function abstain(uint tokenId) external;
    function attach(uint tokenId) external;
    function detach(uint tokenId) external;

    function checkpoint() external;
    function deposit_for(uint tokenId, uint value) external;
    function create_lock_for(uint, uint, address) external returns (uint);

    function balanceOfNFT(uint) external view returns (uint);
    function totalSupply() external view returns (uint);
}

// File: contracts/interfaces/IVoter.sol

interface IVoter {
    function _ve() external view returns (address);
    function governor() external view returns (address);
    function emergencyCouncil() external view returns (address);
    function protocolFeesTaker() external view returns (address);
    function attachTokenToGauge(uint _tokenId, address account) external;
    function attachable() external view returns (bool);
    function protocolFeesPerMillion() external view returns (uint);
    function detachTokenFromGauge(uint _tokenId, address account) external;
    function emitDeposit(uint _tokenId, address account, uint amount) external;
    function emitWithdraw(uint _tokenId, address account, uint amount) external;
    function isWhitelisted(address token) external view returns (bool);
    function notifyRewardAmount(uint amount) external;
    function distribute(address _gauge) external;
}
// File: contracts/interfaces/IPair.sol

interface IPair {
    function metadata() external view returns (uint dec0, uint dec1, uint r0, uint r1, bool st, address t0, address t1);
    function claimFees() external returns (uint, uint);
    function tokens() external returns (address, address);
    function transferFrom(address src, address dst, uint amount) external returns (bool);
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function burn(address to) external returns (uint amount0, uint amount1);
    function mint(address to) external returns (uint liquidity);
    function getReserves() external view returns (uint _reserve0, uint _reserve1, uint _blockTimestampLast);
    function getAmountOut(uint, address) external view returns (uint);
}

// File: contracts/interfaces/IERC20.sol

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function transfer(address recipient, uint amount) external returns (bool);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function balanceOf(address) external view returns (uint);
    function transferFrom(address sender, address recipient, uint amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint);
    function approve(address spender, uint value) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint value);
    event Approval(address indexed owner, address indexed spender, uint value);
}

// File: contracts/interfaces/IBribe.sol

interface IBribe {
    function _deposit(uint amount, uint tokenId) external;
    function _withdraw(uint amount, uint tokenId) external;
    function getRewardForOwner(uint tokenId, address[] memory tokens) external;
    function notifyRewardAmount(address token, uint amount) external;
    function left(address token) external view returns (uint);
    function rewardsListLength() external view returns (uint);
    function rewards(uint) external view returns (address);
}


library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * This test is non-exhaustive, and there may be false-negatives: during the
     * execution of a contract's constructor, its address will be reported as
     * not containing a contract.
     *
     * > It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}

library Math {
    /**
     * @dev Returns the largest of two numbers.
     */
    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    /**
     * @dev Returns the smallest of two numbers.
     */
    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a < b ? a : b;
    }

    /**
     * @dev Returns the average of two numbers. The result is rounded towards
     * zero.
     */
    function average(uint256 a, uint256 b) internal pure returns (uint256) {
        // (a + b) / 2 can overflow, so we distribute
        return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2);
    }
}

contract ReentrancyGuard {
    /// @dev counter to allow mutex lock with only one SSTORE operation
    uint256 private _guardCounter;

    constructor () {
        // The counter starts at one to prevent changing it from zero to a non-zero
        // value, which is a more expensive operation.
        _guardCounter = 1;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and make it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _guardCounter += 1;
        uint256 localCounter = _guardCounter;
        _;
        require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call");
    }
}


library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value);
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves.

        // A Solidity high level call has three parts:
        //  1. The target address is checked to verify it contains contract code
        //  2. The call itself is made, and success asserted
        //  3. The return value is decoded, which in turn checks the size of the returned data.
        // solhint-disable-next-line max-line-length
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

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) {
        require(b <= a, "SafeMath: subtraction overflow");
        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-solidity/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) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, "SafeMath: division by zero");
        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) {
        require(b != 0, "SafeMath: modulo by zero");
        return a % b;
    }
}

contract GaugeEquivalent is ReentrancyGuard {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    /* ========== STATE VARIABLES ========== */

    struct Reward {
        address rewardsDistributor;
        uint256 rewardsDuration;
        uint256 periodFinish;
        uint256 rewardRate;
        uint256 lastUpdateTime;
        uint256 rewardPerTokenStored;
    }

    bool public paused;
    IERC20 public stake;
    mapping(address => Reward) public rewardData;
    address[] public rewardTokens;
    address[] public bribeTokens;

    // user -> reward token -> amount
    mapping(address => mapping(address => uint256)) public userRewardPerTokenPaid;
    mapping(address => mapping(address => uint256)) public rewards;
    mapping(address => bool) public isReward;
    mapping(address => bool) public isBribeToken;

    uint256 private _totalSupply;
    mapping(address => uint256) private _balances;

    IBribe public bribe;
    IVotingEscrow public ve;
    IVoter public voter;
    bool public isForPair;

    address public feeTaker;

    mapping(address => uint) public payouts;
    mapping(address => uint) public payoutsNotified;
    mapping(address => mapping(address => uint)) public earnings;
    mapping(address => uint) public totalFeesPayouts;

    /* ========== CONSTRUCTOR ========== */

    constructor(
        address _stake,
        address _ebribe,
        address  __ve,
        address _voter,
        bool _forPair,
        address[] memory _allowedRewardTokens
    ) {

        stake = IERC20(_stake);
        bribe = IBribe(_ebribe);
        ve = IVotingEscrow(__ve);
        voter = IVoter(_voter);
        isForPair = _forPair;

        for (uint i; i < _allowedRewardTokens.length; i++) {
            if (_allowedRewardTokens[i] != address(0)) {
                isReward[_allowedRewardTokens[i]] = true;
                rewardTokens.push(_allowedRewardTokens[i]);
                rewardData[_allowedRewardTokens[i]].rewardsDistributor = _voter;
                rewardData[_allowedRewardTokens[i]].rewardsDuration = 7 days;
            }
        }
        if(_forPair) {
            //claimFees : Bribe Rewards
            //Pre-approve to save gas, since both Bribe & Gauge are immutable
            (address _token0, address _token1) = IPair(_stake).tokens();
            IERC20(_token0).approve(_ebribe, type(uint256).max);
            IERC20(_token1).approve(_ebribe, type(uint256).max);
            bribeTokens.push(_token0);
            bribeTokens.push(_token1);
            isBribeToken[_token0] = true;
            isBribeToken[_token1] = true;
            emit BribeTokenSet(_token0, _ebribe, true);
            emit BribeTokenSet(_token1, _ebribe, true);
        }
        ///else ve.team() must manually `addBribeTokens()`
    }

    /* ========== VIEWS ========== */

    function totalSupply() external view returns (uint256) {
        return _totalSupply;
    }

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

    function lastTimeRewardApplicable(address _rewardsToken) public view returns (uint256) {
        return Math.min(block.timestamp, rewardData[_rewardsToken].periodFinish);
    }

    function rewardPerToken(address _rewardsToken) public view returns (uint256) {
        if (_totalSupply == 0) {
            return rewardData[_rewardsToken].rewardPerTokenStored;
        }
        return
            rewardData[_rewardsToken].rewardPerTokenStored.add(
                lastTimeRewardApplicable(_rewardsToken).sub(rewardData[_rewardsToken].lastUpdateTime).mul(rewardData[_rewardsToken].rewardRate).mul(1e18).div(_totalSupply)
            );
    }

    /// @param account 1
    /// @param _rewardsToken 2
    function earnedBy(address account, address _rewardsToken) public view returns (uint256) {
        return _balances[account].mul(rewardPerToken(_rewardsToken).sub(userRewardPerTokenPaid[account][_rewardsToken])).div(1e18).add(rewards[account][_rewardsToken]);
    }

    /// Backwards compatible view with 3qu471738 <= v1.3
    /// @param _rewardsToken 1
    /// @param account 2
    function earned(address _rewardsToken, address account) public view returns (uint256) {
        return earnedBy(account, _rewardsToken);
    }

    function getRewardForDuration(address _rewardsToken) external view returns (uint256) {
        return rewardData[_rewardsToken].rewardRate.mul(rewardData[_rewardsToken].rewardsDuration);
    }

    function left(address _rewardsToken) external view returns (uint) {
        if (block.timestamp >= rewardData[_rewardsToken].periodFinish) return 0;
        uint256 remaining = rewardData[_rewardsToken].periodFinish.sub(block.timestamp);
        return remaining.mul(rewardData[_rewardsToken].rewardRate);
    }

    function rewardsListLength() external view returns (uint) {
        return rewardTokens.length;
    }

    function bribesListLength() external view returns (uint) {
        return bribeTokens.length;
    }

    /* ========== BACKWARDS-COMPATIBLE VIEW FUNCTIONS ========== */

    function _ve() external view returns (address) {
        return address(ve);
    }

    function periodFinish(address _tkn) external view returns (uint) {
        return rewardData[_tkn].periodFinish;
    }

    function rewardRate(address _tkn) external view returns (uint) {
        return rewardData[_tkn].rewardRate;
    }

    function lastUpdateTime(address _tkn) external view returns (uint) {
        return rewardData[_tkn].lastUpdateTime;
    }

    /* ========== MUTATIVE FUNCTIONS ========== */

    function setRewardsDistributor(address _rewardsToken, address _rewardsDistributor) external onlyOwner {
        rewardData[_rewardsToken].rewardsDistributor = _rewardsDistributor;
    }

    function deposit(uint256 amount) public nonReentrant notPaused updateReward(msg.sender) {
        require(amount > 0, "Cannot stake 0");
        _totalSupply = _totalSupply.add(amount);
        _balances[msg.sender] = _balances[msg.sender].add(amount);
        stake.safeTransferFrom(msg.sender, address(this), amount);
        emit Deposit(msg.sender, amount);
        _claimFees();
    }

    function depositFor(address _user, uint256 amount) public nonReentrant notPaused updateReward(_user) {
        require(amount > 0, "Cannot stake 0");
        _totalSupply = _totalSupply.add(amount);
        _balances[_user] = _balances[_user].add(amount);
        stake.safeTransferFrom(msg.sender, address(this), amount);
        emit Deposit(_user, amount);
        _claimFees();
    }

    function depositAll() external {
        deposit(stake.balanceOf(msg.sender));
    }

    function depositAllFor(address _user) external {
        depositFor(_user, stake.balanceOf(msg.sender));
    }

    function withdraw(uint256 amount) public nonReentrant updateReward(msg.sender) {
        require(amount > 0, "Cannot withdraw 0");
        _totalSupply = _totalSupply.sub(amount);
        _balances[msg.sender] = _balances[msg.sender].sub(amount);
        stake.safeTransfer(msg.sender, amount);
        emit Withdrawn(msg.sender, amount);
        _claimFees();
    }

    function withdrawAll() external {
        withdraw(_balances[msg.sender]);
    }

    function getReward() public nonReentrant updateReward(msg.sender) {

        for (uint i; i < rewardTokens.length; i++) {
            address _rewardsToken = rewardTokens[i];
            uint256 _reward = rewards[msg.sender][_rewardsToken];
            if (_reward > 0) {
                rewards[msg.sender][_rewardsToken] = 0;
                IERC20(_rewardsToken).safeTransfer(msg.sender, _reward);
                emit ClaimRewards(msg.sender, _rewardsToken, _reward);
                payouts[_rewardsToken] += _reward;
                earnings[msg.sender][_rewardsToken] += _reward;
            }
        }
        _claimFees();
    }

    function _getReward(address account, address[] memory _tokens) internal nonReentrant updateReward(account) {
        for (uint i; i < _tokens.length; i++) {
            address _rewardsToken = _tokens[i];
            uint256 _reward = rewards[account][_rewardsToken];
            if (_reward > 0) {
                rewards[account][_rewardsToken] = 0;
                IERC20(_rewardsToken).safeTransfer(account, _reward);
                emit ClaimRewards(_rewardsToken, account, _reward);
                payouts[_rewardsToken] += _reward;
                earnings[account][_rewardsToken] += _reward;
            }
        }
        _claimFees();
    }

    function getReward(address account, address[] memory tokens) external {
        require(msg.sender == account || msg.sender == address(voter), "Un-authorized claim!");
        voter.distribute(address(this));
        _getReward(account, tokens);
    }

    function exit() external {
        withdraw(_balances[msg.sender]);
        getReward();
    }

    function notifyRewardAmount(address _rewardsToken, uint256 _reward) external nonReentrant updateReward(address(0)) {
        require(_rewardsToken != address(stake), "Can't distribute staked token as reward!");
        require(isReward[_rewardsToken], "Not a reward!!" );
        /// The old pattern to get force collection of fees at least once a week during emission distribution to this gauge
        /// & distribute it to voters over the next week via the (external) Bribe
        _claimFees();

        /// Support feeOnTransfer tokens like ELITE etc.
        uint rtbb = IERC20(_rewardsToken).balanceOf(address(this));
        // handle the transfer of reward tokens via `transferFrom` to reduce the number
        // of transactions required and ensure correctness of the reward amount
        IERC20(_rewardsToken).safeTransferFrom(msg.sender, address(this), _reward);
        uint rtba = IERC20(_rewardsToken).balanceOf(address(this));
        _reward = rtba - rtbb;
        require(_reward > 0, "Reward amount must be greater than 0!");

        if (block.timestamp >= rewardData[_rewardsToken].periodFinish) {
            rewardData[_rewardsToken].rewardRate = _reward.div(rewardData[_rewardsToken].rewardsDuration);
        } else {
            //Griefing Protection Enabled for Unknown reward adders
            uint _oldRewardRate = rewardData[_rewardsToken].rewardRate;
            uint256 remaining = rewardData[_rewardsToken].periodFinish.sub(block.timestamp);
            uint256 leftover = remaining.mul(rewardData[_rewardsToken].rewardRate);
            rewardData[_rewardsToken].rewardRate = _reward.add(leftover).div(rewardData[_rewardsToken].rewardsDuration);
            if(
                msg.sender!=address(voter)
                || msg.sender!=rewardData[_rewardsToken].rewardsDistributor
            ) {
                require(
                    (
                        rewardData[_rewardsToken].rewardRate >= _oldRewardRate
                        || _reward > leftover
                    ), "Enhanced Griefing Protection Enabled!"
                );
            }
        }

        rewardData[_rewardsToken].lastUpdateTime = block.timestamp;
        rewardData[_rewardsToken].periodFinish = block.timestamp.add(rewardData[_rewardsToken].rewardsDuration);
        emit RewardAdded(_rewardsToken, msg.sender, _reward);
        payoutsNotified[_rewardsToken] += _reward;
    }

    function claimFees() external nonReentrant returns (uint claimed0, uint claimed1) {
        return _claimFees();
    }

    function _claimFees() internal returns (uint claimed0, uint claimed1)  {
        uint _pfpm = voter.protocolFeesPerMillion();
        address _pft = _pfpm > 0 ? voter.protocolFeesTaker() : address(0);
        /// Equa7izer v1.5: Support Custom pools to be Gaugable
        if (!isForPair) {
        	/// For non-official/external/independent gauges only
        	/// If compatible, the claimed fees should be notified to Bribe
        	/// Else, this contract will hold the fees & ve.team() can rescue()
            uint _bn = bribeTokens.length;
        	IERC20[] memory _brews = new IERC20[](_bn);
        	uint[] memory _brewbals = new uint[](_bn);
        	for(uint _n; _n < _bn; _n++) {
        	    _brews[_n] = IERC20( bribeTokens[_n] );
        	    /// Record current balance to protect gauge deposits & rewards.
                /// Also Support feeOnTransfer tokens like ELITE etc.
                /// Also makes sure a bribe-reward isnt 'killed' or uninitialized.
        	    _brewbals[_n] =
        	        address(_brews[_n]) == address(0)
        	        ? 0
        	        : _brews[_n].balanceOf(address(this));
        	}
            try IPair(address(stake)).claimFees() {
                /// if call succeeds, gauge will have a surplus of extra tokens which can be sent to bribes
                /// useful in cases of non-equa1izer lps, like conc., weighted or multi-token Liquidity pools
                for(uint _n = 0; _n < _bn; _n++) {
                    /// Don't trigger bribes for 0x00 rewards
                    uint _a =
        	            address(_brews[_n]) == address(0)
        	            ? 0
        	            : _brews[_n].balanceOf(address(this));
                    /// Trigger only when a token balance increases when we try IPair(stake).claimFees()
                    /// because there could possibly be an overlap between rewardTokens & bribeTokens
                    if(_a > _brewbals[_n]) {
                        ///Protocol Fees
                        if( ( (_a - _brewbals[_n]) * _pfpm) / 1e6 > 0) {
                            _brews[_n].transfer(_pft, ( (_a.sub(_brewbals[_n])) * _pfpm) / 1e6 );
                            emit ProtocolFees(msg.sender,_pft,address(_brews[_n]),((_a.sub(_brewbals[_n])) * _pfpm) / 1e6);
                            _a = _brews[_n].balanceOf(address(this));
                        }
                        ///Normal Fees -> Bribe
                        if (feeTaker == address(0)) {
                            bribe.notifyRewardAmount( address(_brews[_n]), (_a.sub(_brewbals[_n])) );
                            emit ClaimFees(msg.sender, address(bribe), address(_brews[_n]), (_a - _brewbals[_n]) );
                            totalFeesPayouts[ address(_brews[_n]) ] += (_a - _brewbals[_n]);
                        }
                        ///Re-channeled Fees -> FeesTaker
                        else {
                            _brews[_n].transfer(feeTaker, (_a.sub(_brewbals[_n])) );
                            emit ClaimFees(msg.sender, feeTaker, address(_brews[_n]), (_a - _brewbals[_n]) );
                            totalFeesPayouts[ address(_brews[_n]) ] += (_a - _brewbals[_n]);
                        }
                    }
                    /// else: we dont have any fees here ser!
                }
                return (0, 0);
            }
            catch {
                /// if call fails, do nothing (much).
                return (0, 0);
            }
        }

        //else:
        /// For actual Protocol gauges, created by Voter, for E9ua1izer Factory Pairs
        (address _token0, address _token1) = IPair(address(stake)).tokens();
        /// Support feeOnTransfer tokens like ELITE etc.
        uint t0bb = IERC20(_token0).balanceOf(address(this));
        uint t1bb = IERC20(_token1).balanceOf(address(this));
        //(claimed0, claimed1) =
        IPair(address(stake)).claimFees();
        claimed0 = IERC20(_token0).balanceOf(address(this)) - t0bb;
        claimed1 = IERC20(_token1).balanceOf(address(this)) - t1bb;
        //claimed0 = t0ba - t0bb;
        //claimed1 = t1ba - t1bb;

        ///ProtocolFees
        if( ( claimed0 * _pfpm) / 1e6 > 0) {
            IERC20(_token0).transfer(_pft, (claimed0*_pfpm)/1e6 );
            emit ProtocolFees(msg.sender,_token0,_pft,(claimed0*_pfpm)/1e6);
            claimed0 = IERC20(_token0).balanceOf(address(this)).sub(t0bb);
        }
        if( ( claimed1 * _pfpm) / 1e6 > 0) {
            IERC20(_token1).transfer(_pft, (claimed1*_pfpm)/1e6 );
            emit ProtocolFees(msg.sender,_token1,_pft,(claimed1*_pfpm)/1e6);
            claimed1 = IERC20(_token1).balanceOf(address(this)).sub(t1bb);
        }

        ///Normal Fees -> Bribe
		if (feeTaker == address(0)) {
        	if (claimed0 > 0) {
            	bribe.notifyRewardAmount(_token0, claimed0);
            	totalFeesPayouts[ _token0 ] += claimed0;	// stores total token0 fees claimed since genesis
                emit ClaimFees(msg.sender, feeTaker, _token0, claimed0);
        	}
        	if (claimed1 > 0) {
            	bribe.notifyRewardAmount(_token1, claimed1);
            	totalFeesPayouts[ _token1 ] += claimed1;	// stores total token1 fees claimed since genesis
                emit ClaimFees(msg.sender, feeTaker, _token1, claimed1);
        	}
        }

        ///Re-channeled Fees -> FeesTaker
        else {
        	IERC20(_token0).transfer(feeTaker, claimed0);
        	IERC20(_token1).transfer(feeTaker, claimed1);
            emit ClaimFees(msg.sender, feeTaker, _token0, claimed0);
            emit ClaimFees(msg.sender, feeTaker, _token1, claimed1);
            totalFeesPayouts[ _token0 ] += claimed0;	// stores total token0 fees claimed since genesis
            totalFeesPayouts[ _token1 ] += claimed1;	// stores total token1 fees claimed since genesis
        }

        return (claimed0, claimed1);
    }


    /* ========== RESTRICTED FUNCTIONS ========== */

    function addReward(address _rewardsToken, address _rewardsDistributor, uint256 _rewardsDuration) public onlyOwner {
        require(
            isReward[_rewardsToken] == false
            && rewardData[_rewardsToken].rewardsDuration == 0
            , "Already Initialized!"
        );
        require( _rewardsToken != address(stake), "Cannot reward staking token!");
        rewardTokens.push(_rewardsToken);
        isReward[_rewardsToken] = true;
        rewardData[_rewardsToken].rewardsDistributor = _rewardsDistributor;
        rewardData[_rewardsToken].rewardsDuration = _rewardsDuration;
    }

    /// This can break claims of rewards!
    /// Useful during a platform-wide upgrade (optional)
    function rescue(uint _amt, address _token, address _to) external onlyOwner {
        if(_token == address(stake)) {
            /// totalSupply marks the sum of all user deposits.
            /// surplus checks for any additional holdings that are not user-deposits
            /// Helps rescue of extra rewards from single-side same-token staking.
            uint _surplus = (stake.balanceOf(address(this))).sub(_totalSupply);
            require( _amt <= _surplus, "Rescuing User Deposits Prohibited!");
        }
        IERC20(_token).transfer(_to, _amt);
        emit Recovered(_token, _amt);
    }

    function setRewardsDuration(address _rewardsToken, uint256 _rewardsDuration) external onlyOwner {
        require(
            block.timestamp > rewardData[_rewardsToken].periodFinish,
            "Reward period still active"
        );
        require(_rewardsDuration > 0, "Reward duration must be non-zero");
        rewardData[_rewardsToken].rewardsDuration = _rewardsDuration;
        emit RewardsDurationUpdated(_rewardsToken, rewardData[_rewardsToken].rewardsDuration);
    }

    function addBribeToken(address _t) public onlyOwner {
        require(isBribeToken[_t] == false, "Bribe Token Active!");
        require( _t != address(stake), "Cannot bribe staking token!");
        IERC20(_t).approve(address(bribe), type(uint256).max);
        bribeTokens.push(_t);
        isBribeToken[_t] = true;
        emit BribeTokenSet(_t, address(bribe), true);
    }

    function removeBribeToken(address _t) public onlyOwner {
        require(isBribeToken[_t] == true, "Bribe Token Inactive!");
        IERC20(_t).approve(address(bribe), 0);
        uint _bl = bribeTokens.length;
        if(bribeTokens[_bl-1]==_t) {
            bribeTokens.pop();
            isBribeToken[_t] = false;
        }
        else {
            for(uint i; i < bribeTokens.length - 1; i++) {
                if(bribeTokens[i]==_t) {
                    bribeTokens[i] = bribeTokens[_bl-1];
                    bribeTokens.pop();
                    isBribeToken[_t] = false;
                }
            }
        }
        emit BribeTokenSet(_t, address(bribe), false);
    }

    function addBribeTokens(address[] memory _tks) external onlyOwner {
        for(uint _j; _j < _tks.length; _j++) {
            addBribeToken(_tks[_j]);
        }
    }

    function removeBribeTokens(address[] memory _tks) external onlyOwner {
        for(uint _j; _j < _tks.length; _j++) {
            removeBribeToken(_tks[_j]);
        }
    }

    /// When feeTaker is set, all Fees Claims go to it instead of going to the Bribe.
    /// Useful during a platform-wide upgrade (optional)
    function setFeeTaker(address _ft) external onlyOwner {
        feeTaker = _ft;
    }

    function setPaused(bool _b) external onlyOwner {
        paused = _b;
    }



    /* ========== MODIFIERS ========== */

    modifier updateReward(address account) {
        for (uint i; i < rewardTokens.length; i++) {
            address token = rewardTokens[i];
            rewardData[token].rewardPerTokenStored = rewardPerToken(token);
            rewardData[token].lastUpdateTime = lastTimeRewardApplicable(token);
            if (account != address(0)) {
                rewards[account][token] = earnedBy(account, token);
                userRewardPerTokenPaid[account][token] = rewardData[token].rewardPerTokenStored;
            }
        }
        _;
    }

    modifier onlyOwner {
        require(msg.sender==ve.team(), "Only ve.team!");
        _;
    }

    modifier notPaused {
        require(!paused, "Paused!");
        _;
    }

    /* ========== EVENTS ========== */

    event RewardAdded(address indexed token, address indexed notifier, uint256 reward);
    event Deposit(address indexed user, uint256 amount);
    event Withdrawn(address indexed user, uint256 amount);
    event ClaimRewards(address indexed token, address indexed user, uint256 reward);
    event RewardsDurationUpdated(address indexed token, uint256 newDuration);
    event Recovered(address indexed token, uint256 amount);
    event BribeTokenSet(address indexed token, address indexed bribe, bool indexed active);
    event ProtocolFees(address indexed initiator, address indexed taker, address indexed token, uint amount);
    event ClaimFees(address indexed initiator, address indexed bribe, address indexed token, uint amount);
}

// File: contracts/factories/GaugeFactory.sol



contract GaugeFactory is IGaugeFactory {
    address public lastGauge;
    event GaugeCreated(address indexed maker, address indexed pool, address g, address b, address v, bool i, address[] a);
    function createGauge(
        address _pool,
        address _bribe,
        address _ve,
        bool isPair,
        address[] memory _allowedRewards
    ) external returns (address) {
        GaugeEquivalent gauge = new GaugeEquivalent(
            _pool,
            _bribe,
            _ve,
            msg.sender,
            isPair,
            _allowedRewards
        );
        lastGauge = address(gauge);
        emit GaugeCreated(msg.sender, _pool, address(gauge), _bribe, _ve, isPair, _allowedRewards);
        return lastGauge;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_stake","type":"address"},{"internalType":"address","name":"_ebribe","type":"address"},{"internalType":"address","name":"__ve","type":"address"},{"internalType":"address","name":"_voter","type":"address"},{"internalType":"bool","name":"_forPair","type":"bool"},{"internalType":"address[]","name":"_allowedRewardTokens","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"bribe","type":"address"},{"indexed":true,"internalType":"bool","name":"active","type":"bool"}],"name":"BribeTokenSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"bribe","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"ClaimRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"initiator","type":"address"},{"indexed":true,"internalType":"address","name":"taker","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ProtocolFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"notifier","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"newDuration","type":"uint256"}],"name":"RewardsDurationUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"_ve","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_t","type":"address"}],"name":"addBribeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tks","type":"address[]"}],"name":"addBribeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"address","name":"_rewardsDistributor","type":"address"},{"internalType":"uint256","name":"_rewardsDuration","type":"uint256"}],"name":"addReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bribe","outputs":[{"internalType":"contract IBribe","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"bribeTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bribesListLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimFees","outputs":[{"internalType":"uint256","name":"claimed0","type":"uint256"},{"internalType":"uint256","name":"claimed1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"depositAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"depositAllFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"address","name":"account","type":"address"}],"name":"earned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"_rewardsToken","type":"address"}],"name":"earnedBy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"earnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeTaker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"}],"name":"getRewardForDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBribeToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isForPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"}],"name":"lastTimeRewardApplicable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tkn","type":"address"}],"name":"lastUpdateTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"}],"name":"left","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"uint256","name":"_reward","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"payouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"payoutsNotified","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tkn","type":"address"}],"name":"periodFinish","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_t","type":"address"}],"name":"removeBribeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tks","type":"address[]"}],"name":"removeBribeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amt","type":"uint256"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"rescue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardData","outputs":[{"internalType":"address","name":"rewardsDistributor","type":"address"},{"internalType":"uint256","name":"rewardsDuration","type":"uint256"},{"internalType":"uint256","name":"periodFinish","type":"uint256"},{"internalType":"uint256","name":"rewardRate","type":"uint256"},{"internalType":"uint256","name":"lastUpdateTime","type":"uint256"},{"internalType":"uint256","name":"rewardPerTokenStored","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"}],"name":"rewardPerToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tkn","type":"address"}],"name":"rewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsListLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_ft","type":"address"}],"name":"setFeeTaker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_b","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"address","name":"_rewardsDistributor","type":"address"}],"name":"setRewardsDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_rewardsToken","type":"address"},{"internalType":"uint256","name":"_rewardsDuration","type":"uint256"}],"name":"setRewardsDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stake","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalFeesPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"userRewardPerTokenPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ve","outputs":[{"internalType":"contract IVotingEscrow","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"voter","outputs":[{"internalType":"contract IVoter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040516200544938038062005449833981016040819052620000349162000527565b600160008181558154610100600160a81b0319166101006001600160a01b038a81169190910291909117909255600b80546001600160a01b031990811689851617909155600c8054909116878416179055600d80549286166001600160a81b031990931692909217600160a01b85151502179091555b8151811015620002655760006001600160a01b0316828281518110620000d457620000d462000658565b60200260200101516001600160a01b031614620002505760016007600084848151811062000106576200010662000658565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff02191690831515021790555060038282815181106200015c576200015c62000658565b6020908102919091018101518254600181018455600093845291832090910180546001600160a01b0319166001600160a01b0390921691909117905582518591600291859085908110620001b457620001b462000658565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555062093a806002600084848151811062000220576200022062000658565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600101819055505b806200025c816200066e565b915050620000aa565b508115620004d757600080876001600160a01b0316639d63848a6040518163ffffffff1660e01b81526004016040805180830381600087803b158015620002ab57600080fd5b505af1158015620002c0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e6919062000698565b60405163095ea7b360e01b81526001600160a01b038a8116600483015260001960248301529294509092509083169063095ea7b390604401602060405180830381600087803b1580156200033957600080fd5b505af11580156200034e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003749190620006d0565b5060405163095ea7b360e01b81526001600160a01b038881166004830152600019602483015282169063095ea7b390604401602060405180830381600087803b158015620003c157600080fd5b505af1158015620003d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fc9190620006d0565b5060048054600181810183557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b91820180546001600160a01b038088166001600160a01b031992831681179093558554808501909655949093018054868616941684179055600081815260086020526040808220805460ff19908116861790915594825280822080549095168417909455925191938b16929091600080516020620054298339815191529190a46040516001906001600160a01b03808a1691908416906000805160206200542983398151915290600090a450505b505050505050620006f5565b80516001600160a01b0381168114620004fb57600080fd5b919050565b80518015158114620004fb57600080fd5b634e487b7160e01b600052604160045260246000fd5b60008060008060008060c087890312156200054157600080fd5b6200054c87620004e3565b955060206200055d818901620004e3565b95506200056d60408901620004e3565b94506200057d60608901620004e3565b93506200058d6080890162000500565b60a08901519093506001600160401b0380821115620005ab57600080fd5b818a0191508a601f830112620005c057600080fd5b815181811115620005d557620005d562000511565b8060051b604051601f19603f83011681018181108582111715620005fd57620005fd62000511565b60405291825284820192508381018501918d8311156200061c57600080fd5b938501935b8285101562000645576200063585620004e3565b8452938501939285019262000621565b8096505050505050509295509295509295565b634e487b7160e01b600052603260045260246000fd5b60006000198214156200069157634e487b7160e01b600052601160045260246000fd5b5060010190565b60008060408385031215620006ac57600080fd5b620006b783620004e3565b9150620006c760208401620004e3565b90509250929050565b600060208284031215620006e357600080fd5b620006ee8262000500565b9392505050565b614d2480620007056000396000f3fe608060405234801561001057600080fd5b50600436106103275760003560e01c80635a6e6eab116101b8578063b66503cf11610104578063de5f6268116100a2578063e70b9e271161007c578063e70b9e271461081e578063e9fad8ee14610849578063f122977714610851578063f5ae22401461086457600080fd5b8063de5f6268146107fa578063e574821314610802578063e68863961461081657600080fd5b8063d0ed26ae116100de578063d0ed26ae1461077a578063d294f0931461078d578063da09d19d146107aa578063dd501205146107d757600080fd5b8063b66503cf14610741578063b6b55f2514610754578063bcd110141461076757600080fd5b8063749f1044116101715780638a5011001161014b5780638a501100146107025780638dd598fb146107155780638f27f1041461072657806399bcc0521461072e57600080fd5b8063749f1044146106d45780637bb7bed1146106e7578063853828b6146106fa57600080fd5b80635a6e6eab1461062d5780635c975abb14610640578063638634ee1461064d57806365bcfbe7146106605780637035ab981461068057806370a08231146106ab57600080fd5b80632f4f21e2116102775780633f695b45116102305780634d5ce0381161020a5780634d5ce038146105c15780634ec5908d146105f457806352f18405146106075780635557cc611461061a57600080fd5b80633f695b451461051557806346c96aac1461052857806348e5d9f81461053b57600080fd5b80632f4f21e2146104a95780633010d8ef146104bc57806331279d3d146104cf57806337d0208c146104e25780633a4b66f1146104f55780633d18b9121461050d57600080fd5b80631f850716116102e45780632378bea6116102be5780632378bea61461042c5780632af2cecc1461043f5780632ce9aead1461046a5780632e1a7d4d1461049657600080fd5b80631f850716146103c2578063211dc32d146103ed578063221ca18c1461040057600080fd5b8063023df7671461032c5780630efeb2fb14610341578063102a7ad41461037457806315ae92f71461038757806316c38b3c146103a757806318160ddd146103ba575b600080fd5b61033f61033a366004614823565b610877565b005b61036161034f366004614823565b60106020526000908152604090205481565b6040519081526020015b60405180910390f35b610361610382366004614840565b610b16565b610361610395366004614823565b60126020526000908152604090205481565b61033f6103b5366004614887565b610bb1565b600954610361565b600c546103d5906001600160a01b031681565b6040516001600160a01b03909116815260200161036b565b6103616103fb366004614840565b610c7c565b61036161040e366004614823565b6001600160a01b031660009081526002602052604090206003015490565b61033f61043a3660046148a4565b610c88565b61036161044d366004614840565b601160209081526000928352604080842090915290825290205481565b610361610478366004614823565b6001600160a01b031660009081526002602052604090206004015490565b61033f6104a43660046148d0565b610e57565b61033f6104b73660046148a4565b611070565b61033f6104ca366004614823565b6112dc565b61033f6104dd3660046149a1565b611364565b600b546103d5906001600160a01b031681565b6001546103d59061010090046001600160a01b031681565b61033f61142f565b61033f610523366004614840565b6116b7565b600d546103d5906001600160a01b031681565b61058a610549366004614823565b60026020819052600091825260409091208054600182015492820154600383015460048401546005909401546001600160a01b039093169493919290919086565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c00161036b565b6105e46105cf366004614823565b60076020526000908152604090205460ff1681565b604051901515815260200161036b565b61033f610602366004614823565b61179d565b61033f6106153660046149f1565b611877565b61033f610628366004614823565b61196f565b61033f61063b3660046149f1565b611d24565b6001546105e49060ff1681565b61036161065b366004614823565b611e1c565b61036161066e366004614823565b600f6020526000908152604090205481565b61036161068e366004614840565b600560209081526000928352604080842090915290825290205481565b6103616106b9366004614823565b6001600160a01b03166000908152600a602052604090205490565b600e546103d5906001600160a01b031681565b6103d56106f53660046148d0565b611e43565b61033f611e6d565b61033f610710366004614a26565b611e88565b600c546001600160a01b03166103d5565b600454610361565b61036161073c366004614823565b61210f565b61033f61074f3660046148a4565b612190565b61033f6107623660046148d0565b612793565b610361610775366004614823565b6129b2565b61033f610788366004614a68565b6129de565b610795612c00565b6040805192835260208301919091520161036b565b6103616107b8366004614823565b6001600160a01b03166000908152600260208190526040909120015490565b6105e46107e5366004614823565b60086020526000908152604090205460ff1681565b61033f612c4f565b600d546105e490600160a01b900460ff1681565b600354610361565b61036161082c366004614840565b600660209081526000928352604080842090915290825290205481565b61033f612cd1565b61036161085f366004614823565b612cf2565b6103d56108723660046148d0565b612d94565b600c60009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156108c757600080fd5b505af11580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff9190614aa9565b6001600160a01b0316336001600160a01b0316146109385760405162461bcd60e51b815260040161092f90614ac6565b60405180910390fd5b6001600160a01b03811660009081526008602052604090205460ff16156109975760405162461bcd60e51b8152602060048201526013602482015272427269626520546f6b656e204163746976652160681b604482015260640161092f565b6001546001600160a01b038281166101009092041614156109fa5760405162461bcd60e51b815260206004820152601b60248201527f43616e6e6f74206272696265207374616b696e6720746f6b656e210000000000604482015260640161092f565b600b5460405163095ea7b360e01b81526001600160a01b038381169263095ea7b392610a30929091169060001990600401614aed565b602060405180830381600087803b158015610a4a57600080fd5b505af1158015610a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a829190614b06565b506004805460018082019092557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b03848116918217909255600081815260086020526040808220805460ff191686179055600b5490519316927f6f3d0c80b7142a8d817dfedfe293680f67ba78aacbbc59db82973fd195982d059190a450565b6001600160a01b038083166000818152600660209081526040808320948616808452948252808320549383526005825280832094835293905291822054610ba89190610ba290670de0b6b3a764000090610b9c90610b7d90610b7789612cf2565b90612da4565b6001600160a01b0389166000908152600a602052604090205490612e0a565b90612e89565b90612ee6565b90505b92915050565b600c60009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610c0157600080fd5b505af1158015610c15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c399190614aa9565b6001600160a01b0316336001600160a01b031614610c695760405162461bcd60e51b815260040161092f90614ac6565b6001805460ff1916911515919091179055565b6000610ba88284610b16565b600c60009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015610cd857600080fd5b505af1158015610cec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d109190614aa9565b6001600160a01b0316336001600160a01b031614610d405760405162461bcd60e51b815260040161092f90614ac6565b6001600160a01b038216600090815260026020819052604090912001544211610dab5760405162461bcd60e51b815260206004820152601a60248201527f52657761726420706572696f64207374696c6c20616374697665000000000000604482015260640161092f565b60008111610dfb5760405162461bcd60e51b815260206004820181905260248201527f526577617264206475726174696f6e206d757374206265206e6f6e2d7a65726f604482015260640161092f565b6001600160a01b03821660008181526002602052604090819020600101839055517fad2f86b01ed93b4b3a150d448c61a4f5d8d38075d3c0c64cc0a26fd6e1f4954590610e4b9084815260200190565b60405180910390a25050565b6001600080828254610e699190614b39565b9091555050600080549033905b600354811015610f6b57600060038281548110610e9557610e95614b51565b6000918252602090912001546001600160a01b03169050610eb581612cf2565b6001600160a01b038216600090815260026020526040902060050155610eda81611e1c565b6001600160a01b03808316600090815260026020526040902060040191909155831615610f5857610f0b8382610b16565b6001600160a01b0380851660008181526006602090815260408083209487168084529482528083209590955560028152848220600590810154938352815284822093825292909252919020555b5080610f6381614b67565b915050610e76565b5060008311610fb05760405162461bcd60e51b8152602060048201526011602482015270043616e6e6f74207769746864726177203607c1b604482015260640161092f565b600954610fbd9084612da4565b600955336000908152600a6020526040902054610fda9084612da4565b336000818152600a602052604090209190915560015461100a916101009091046001600160a01b03169085612f45565b60405183815233907f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5906020015b60405180910390a2611048612f9b565b505050600054811461106c5760405162461bcd60e51b815260040161092f90614b82565b5050565b60016000808282546110829190614b39565b909155505060005460015460ff16156110c75760405162461bcd60e51b81526020600482015260076024820152665061757365642160c81b604482015260640161092f565b8260005b6003548110156111c0576000600382815481106110ea576110ea614b51565b6000918252602090912001546001600160a01b0316905061110a81612cf2565b6001600160a01b03821660009081526002602052604090206005015561112f81611e1c565b6001600160a01b038083166000908152600260205260409020600401919091558316156111ad576111608382610b16565b6001600160a01b0380851660008181526006602090815260408083209487168084529482528083209590955560028152848220600590810154938352815284822093825292909252919020555b50806111b881614b67565b9150506110cb565b50600083116112025760405162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015260640161092f565b60095461120f9084612ee6565b6009556001600160a01b0384166000908152600a60205260409020546112359084612ee6565b6001600160a01b038086166000908152600a602052604090209190915560015461126891610100909104163330866143b1565b836001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c846040516112a391815260200190565b60405180910390a26112b3612f9b565b50505060005481146112d75760405162461bcd60e51b815260040161092f90614b82565b505050565b6001546040516370a0823160e01b81523360048201526113619183916101009091046001600160a01b0316906370a082319060240160206040518083038186803b15801561132957600080fd5b505afa15801561133d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104b79190614bb9565b50565b336001600160a01b03831614806113855750600d546001600160a01b031633145b6113c85760405162461bcd60e51b8152602060048201526014602482015273556e2d617574686f72697a656420636c61696d2160601b604482015260640161092f565b600d546040516363453ae160e01b81523060048201526001600160a01b03909116906363453ae190602401600060405180830381600087803b15801561140d57600080fd5b505af1158015611421573d6000803e3d6000fd5b5050505061106c82826143ef565b60016000808282546114419190614b39565b9091555050600080549033905b6003548110156115435760006003828154811061146d5761146d614b51565b6000918252602090912001546001600160a01b0316905061148d81612cf2565b6001600160a01b0382166000908152600260205260409020600501556114b281611e1c565b6001600160a01b03808316600090815260026020526040902060040191909155831615611530576114e38382610b16565b6001600160a01b0380851660008181526006602090815260408083209487168084529482528083209590955560028152848220600590810154938352815284822093825292909252919020555b508061153b81614b67565b91505061144e565b5060005b60035481101561168a5760006003828154811061156657611566614b51565b60009182526020808320909101543383526006825260408084206001600160a01b03909216808552919092529120549091508015611675573360008181526006602090815260408083206001600160a01b03871680855292528220919091556115cf9183612f45565b6040518181526001600160a01b0383169033907f9aa05b3d70a9e3e2f004f039648839560576334fb45c81f91b6db03ad9e2efc99060200160405180910390a36001600160a01b0382166000908152600f602052604081208054839290611637908490614b39565b90915550503360009081526011602090815260408083206001600160a01b03861684529091528120805483929061166f908490614b39565b90915550505b5050808061168290614b67565b915050611547565b50611693612f9b565b50505060005481146113615760405162461bcd60e51b815260040161092f90614b82565b600c60009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561170757600080fd5b505af115801561171b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173f9190614aa9565b6001600160a01b0316336001600160a01b03161461176f5760405162461bcd60e51b815260040161092f90614ac6565b6001600160a01b03918216600090815260026020526040902080546001600160a01b03191691909216179055565b600c60009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156117ed57600080fd5b505af1158015611801573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118259190614aa9565b6001600160a01b0316336001600160a01b0316146118555760405162461bcd60e51b815260040161092f90614ac6565b600e80546001600160a01b0319166001600160a01b0392909216919091179055565b600c60009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156118c757600080fd5b505af11580156118db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ff9190614aa9565b6001600160a01b0316336001600160a01b03161461192f5760405162461bcd60e51b815260040161092f90614ac6565b60005b815181101561106c5761195d82828151811061195057611950614b51565b6020026020010151610877565b8061196781614b67565b915050611932565b600c60009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156119bf57600080fd5b505af11580156119d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f79190614aa9565b6001600160a01b0316336001600160a01b031614611a275760405162461bcd60e51b815260040161092f90614ac6565b6001600160a01b03811660009081526008602052604090205460ff161515600114611a8c5760405162461bcd60e51b8152602060048201526015602482015274427269626520546f6b656e20496e6163746976652160581b604482015260640161092f565b600b5460405163095ea7b360e01b81526001600160a01b038381169263095ea7b392611ac19290911690600090600401614aed565b602060405180830381600087803b158015611adb57600080fd5b505af1158015611aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b139190614b06565b5060048054906001600160a01b03831690611b2f600184614bd2565b81548110611b3f57611b3f614b51565b6000918252602090912001546001600160a01b03161415611bb2576004805480611b6b57611b6b614be9565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03841682526008905260409020805460ff19169055611ce2565b60005b600454611bc490600190614bd2565b811015611ce057826001600160a01b031660048281548110611be857611be8614b51565b6000918252602090912001546001600160a01b03161415611cce576004611c10600184614bd2565b81548110611c2057611c20614b51565b600091825260209091200154600480546001600160a01b039092169183908110611c4c57611c4c614b51565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506004805480611c8b57611c8b614be9565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b03851682526008905260409020805460ff191690555b80611cd881614b67565b915050611bb5565b505b600b546040516000916001600160a01b0390811691908516907f6f3d0c80b7142a8d817dfedfe293680f67ba78aacbbc59db82973fd195982d05908490a45050565b600c60009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611d7457600080fd5b505af1158015611d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dac9190614aa9565b6001600160a01b0316336001600160a01b031614611ddc5760405162461bcd60e51b815260040161092f90614ac6565b60005b815181101561106c57611e0a828281518110611dfd57611dfd614b51565b602002602001015161196f565b80611e1481614b67565b915050611ddf565b6001600160a01b038116600090815260026020819052604082200154610bab904290614668565b60038181548110611e5357600080fd5b6000918252602090912001546001600160a01b0316905081565b336000908152600a6020526040902054611e8690610e57565b565b600c60009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015611ed857600080fd5b505af1158015611eec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f109190614aa9565b6001600160a01b0316336001600160a01b031614611f405760405162461bcd60e51b815260040161092f90614ac6565b6001546001600160a01b03838116610100909204161415612046576009546001546040516370a0823160e01b8152306004820152600092611fe79290916101009091046001600160a01b0316906370a08231906024015b60206040518083038186803b158015611faf57600080fd5b505afa158015611fc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b779190614bb9565b9050808411156120445760405162461bcd60e51b815260206004820152602260248201527f5265736375696e672055736572204465706f736974732050726f686962697465604482015261642160f01b606482015260840161092f565b505b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb906120749084908790600401614aed565b602060405180830381600087803b15801561208e57600080fd5b505af11580156120a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c69190614b06565b50816001600160a01b03167f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa288460405161210291815260200190565b60405180910390a2505050565b6001600160a01b038116600090815260026020819052604082200154421061213957506000919050565b6001600160a01b03821660009081526002602081905260408220015461215f9042612da4565b6001600160a01b038416600090815260026020526040902060030154909150612189908290612e0a565b9392505050565b60016000808282546121a29190614b39565b90915550506000805490805b6003548110156122a3576000600382815481106121cd576121cd614b51565b6000918252602090912001546001600160a01b031690506121ed81612cf2565b6001600160a01b03821660009081526002602052604090206005015561221281611e1c565b6001600160a01b03808316600090815260026020526040902060040191909155831615612290576122438382610b16565b6001600160a01b0380851660008181526006602090815260408083209487168084529482528083209590955560028152848220600590810154938352815284822093825292909252919020555b508061229b81614b67565b9150506121ae565b506001546001600160a01b038581166101009092041614156123185760405162461bcd60e51b815260206004820152602860248201527f43616e27742064697374726962757465207374616b656420746f6b656e206173604482015267207265776172642160c01b606482015260840161092f565b6001600160a01b03841660009081526007602052604090205460ff166123715760405162461bcd60e51b815260206004820152600e60248201526d4e6f74206120726577617264212160901b604482015260640161092f565b612379612f9b565b50506040516370a0823160e01b81523060048201526000906001600160a01b038616906370a082319060240160206040518083038186803b1580156123bd57600080fd5b505afa1580156123d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f59190614bb9565b905061240c6001600160a01b0386163330876143b1565b6040516370a0823160e01b81523060048201526000906001600160a01b038716906370a082319060240160206040518083038186803b15801561244e57600080fd5b505afa158015612462573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124869190614bb9565b90506124928282614bd2565b9450600085116124f25760405162461bcd60e51b815260206004820152602560248201527f52657761726420616d6f756e74206d7573742062652067726561746572207468604482015264616e20302160d81b606482015260840161092f565b6001600160a01b03861660009081526002602081905260409091200154421061255d576001600160a01b03861660009081526002602052604090206001015461253c908690612e89565b6001600160a01b0387166000908152600260205260409020600301556126bc565b6001600160a01b03861660009081526002602081905260408220600381015491015490919061258c9042612da4565b6001600160a01b038916600090815260026020526040812060030154919250906125b7908390612e0a565b6001600160a01b038a166000908152600260205260409020600101549091506125e490610b9c8a84612ee6565b6001600160a01b038a8116600090815260026020526040902060030191909155600d54163314158061263057506001600160a01b03898116600090815260026020526040902054163314155b156126b8576001600160a01b0389166000908152600260205260409020600301548311158061265e57508088115b6126b85760405162461bcd60e51b815260206004820152602560248201527f456e68616e636564204772696566696e672050726f74656374696f6e20456e61604482015264626c65642160d81b606482015260840161092f565b5050505b6001600160a01b038616600090815260026020526040902042600482018190556001909101546126ec9190612ee6565b6001600160a01b038716600081815260026020818152604092839020909101939093555187815233927f0f7cde3c0518e1cc590491be5861d70a2e333f7e65af2e1ebd91a3c9a3cc638d910160405180910390a36001600160a01b03861660009081526010602052604081208054879290612768908490614b39565b9250508190555050505060005481146112d75760405162461bcd60e51b815260040161092f90614b82565b60016000808282546127a59190614b39565b909155505060005460015460ff16156127ea5760405162461bcd60e51b81526020600482015260076024820152665061757365642160c81b604482015260640161092f565b3360005b6003548110156128e35760006003828154811061280d5761280d614b51565b6000918252602090912001546001600160a01b0316905061282d81612cf2565b6001600160a01b03821660009081526002602052604090206005015561285281611e1c565b6001600160a01b038083166000908152600260205260409020600401919091558316156128d0576128838382610b16565b6001600160a01b0380851660008181526006602090815260408083209487168084529482528083209590955560028152848220600590810154938352815284822093825292909252919020555b50806128db81614b67565b9150506127ee565b50600083116129255760405162461bcd60e51b815260206004820152600e60248201526d043616e6e6f74207374616b6520360941b604482015260640161092f565b6009546129329084612ee6565b600955336000908152600a602052604090205461294f9084612ee6565b336000818152600a6020526040902091909155600154612980916101009091046001600160a01b03169030866143b1565b60405183815233907fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c90602001611038565b6001600160a01b03811660009081526002602052604081206001810154600390910154610bab91612e0a565b600c60009054906101000a90046001600160a01b03166001600160a01b03166385f2aef26040518163ffffffff1660e01b8152600401602060405180830381600087803b158015612a2e57600080fd5b505af1158015612a42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a669190614aa9565b6001600160a01b0316336001600160a01b031614612a965760405162461bcd60e51b815260040161092f90614ac6565b6001600160a01b03831660009081526007602052604090205460ff16158015612ad857506001600160a01b038316600090815260026020526040902060010154155b612b1b5760405162461bcd60e51b8152602060048201526014602482015273416c726561647920496e697469616c697a65642160601b604482015260640161092f565b6001546001600160a01b03848116610100909204161415612b7e5760405162461bcd60e51b815260206004820152601c60248201527f43616e6e6f7420726577617264207374616b696e6720746f6b656e2100000000604482015260640161092f565b6003805460018181019092557fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b039586166001600160a01b031991821681179092556000918252600760209081526040808420805460ff19168617905560029091529091208054949095169316929092178355910155565b6000806001600080828254612c159190614b39565b9091555050600054612c25612f9b565b925092506000548114612c4a5760405162461bcd60e51b815260040161092f90614b82565b509091565b6001546040516370a0823160e01b8152336004820152611e869161010090046001600160a01b0316906370a082319060240160206040518083038186803b158015612c9957600080fd5b505afa158015612cad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107629190614bb9565b336000908152600a6020526040902054612cea90610e57565b611e8661142f565b600060095460001415612d1e57506001600160a01b031660009081526002602052604090206005015490565b6009546001600160a01b03831660009081526002602052604090206003810154600490910154610bab92612d72929091610b9c91670de0b6b3a764000091612d6c91908290610b778b611e1c565b90612e0a565b6001600160a01b03841660009081526002602052604090206005015490612ee6565b60048181548110611e5357600080fd5b600082821115612df65760405162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015260640161092f565b6000612e028385614bd2565b949350505050565b600082612e1957506000610bab565b6000612e258385614bff565b905082612e328583614c1e565b14610ba85760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161092f565b6000808211612eda5760405162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015260640161092f565b6000612e028385614c1e565b600080612ef38385614b39565b905083811015610ba85760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161092f565b6112d78363a9059cbb60e01b8484604051602401612f64929190614aed565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261467e565b6000806000600d60009054906101000a90046001600160a01b03166001600160a01b0316633f6678256040518163ffffffff1660e01b815260040160206040518083038186803b158015612fee57600080fd5b505afa158015613002573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130269190614bb9565b905060008082116130385760006130be565b600d60009054906101000a90046001600160a01b03166001600160a01b03166313416d996040518163ffffffff1660e01b815260040160206040518083038186803b15801561308657600080fd5b505afa15801561309a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130be9190614aa9565b600d54909150600160a01b900460ff16613a855760045460008167ffffffffffffffff8111156130f0576130f06148e9565b604051908082528060200260200182016040528015613119578160200160208202803683370190505b50905060008267ffffffffffffffff811115613137576131376148e9565b604051908082528060200260200182016040528015613160578160200160208202803683370190505b50905060005b838110156132d0576004818154811061318157613181614b51565b9060005260206000200160009054906101000a90046001600160a01b03168382815181106131b1576131b1614b51565b60200260200101906001600160a01b031690816001600160a01b03168152505060006001600160a01b03168382815181106131ee576131ee614b51565b60200260200101516001600160a01b03161461329e5782818151811061321657613216614b51565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561326157600080fd5b505afa158015613275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132999190614bb9565b6132a1565b60005b8282815181106132b3576132b3614b51565b6020908102919091010152806132c881614b67565b915050613166565b5060018054906101000a90046001600160a01b03166001600160a01b031663d294f0936040518163ffffffff1660e01b81526004016040805180830381600087803b15801561331e57600080fd5b505af192505050801561334e575060408051601f3d908101601f1916820190925261334b91810190614c40565b60015b6133615750600096879650945050505050565b505060005b83811015613a75576000806001600160a01b031684838151811061338c5761338c614b51565b60200260200101516001600160a01b03161461343c578382815181106133b4576133b4614b51565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b1580156133ff57600080fd5b505afa158015613413573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134379190614bb9565b61343f565b60005b905082828151811061345357613453614b51565b6020026020010151811115613a62576000620f42408885858151811061347b5761347b614b51565b60200260200101518461348e9190614bd2565b6134989190614bff565b6134a29190614c1e565b11156136cc578382815181106134ba576134ba614b51565b60200260200101516001600160a01b031663a9059cbb87620f42408a6135028888815181106134eb576134eb614b51565b602002602001015187612da490919063ffffffff16565b61350c9190614bff565b6135169190614c1e565b6040518363ffffffff1660e01b8152600401613533929190614aed565b602060405180830381600087803b15801561354d57600080fd5b505af1158015613561573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135859190614b06565b5083828151811061359857613598614b51565b60200260200101516001600160a01b0316866001600160a01b0316336001600160a01b03167f78c0b7f8dc279098cd35e7f6ed62faef6b268eb5f31ece1326f32e1bc1d5a048620f42408b61360f8989815181106135f8576135f8614b51565b602002602001015188612da490919063ffffffff16565b6136199190614bff565b6136239190614c1e565b60405190815260200160405180910390a483828151811061364657613646614b51565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561369157600080fd5b505afa1580156136a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c99190614bb9565b90505b600e546001600160a01b031661389657600b5484516001600160a01b039091169063b66503cf9086908590811061370557613705614b51565b602002602001015161373986868151811061372257613722614b51565b602002602001015185612da490919063ffffffff16565b6040518363ffffffff1660e01b8152600401613756929190614aed565b600060405180830381600087803b15801561377057600080fd5b505af1158015613784573d6000803e3d6000fd5b5050505083828151811061379a5761379a614b51565b60200260200101516001600160a01b0316600b60009054906101000a90046001600160a01b03166001600160a01b0316336001600160a01b0316600080516020614ccf8339815191528686815181106137f5576137f5614b51565b6020026020010151856138089190614bd2565b60405190815260200160405180910390a482828151811061382b5761382b614b51565b60200260200101518161383e9190614bd2565b6012600086858151811061385457613854614b51565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020600082825461388b9190614b39565b90915550613a629050565b8382815181106138a8576138a8614b51565b60200260200101516001600160a01b031663a9059cbb600e60009054906101000a90046001600160a01b03166138e986868151811061372257613722614b51565b6040518363ffffffff1660e01b8152600401613906929190614aed565b602060405180830381600087803b15801561392057600080fd5b505af1158015613934573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139589190614b06565b5083828151811061396b5761396b614b51565b60200260200101516001600160a01b0316600e60009054906101000a90046001600160a01b03166001600160a01b0316336001600160a01b0316600080516020614ccf8339815191528686815181106139c6576139c6614b51565b6020026020010151856139d99190614bd2565b60405190815260200160405180910390a48282815181106139fc576139fc614b51565b602002602001015181613a0f9190614bd2565b60126000868581518110613a2557613a25614b51565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000828254613a5c9190614b39565b90915550505b5080613a6d81614b67565b915050613366565b5060009788975095505050505050565b60008060018054906101000a90046001600160a01b03166001600160a01b0316639d63848a6040518163ffffffff1660e01b81526004016040805180830381600087803b158015613ad557600080fd5b505af1158015613ae9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b0d9190614c64565b6040516370a0823160e01b815230600482015291935091506000906001600160a01b038416906370a082319060240160206040518083038186803b158015613b5457600080fd5b505afa158015613b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b8c9190614bb9565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a082319060240160206040518083038186803b158015613bd157600080fd5b505afa158015613be5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c099190614bb9565b905060018054906101000a90046001600160a01b03166001600160a01b031663d294f0936040518163ffffffff1660e01b81526004016040805180830381600087803b158015613c5857600080fd5b505af1158015613c6c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c909190614c40565b50506040516370a0823160e01b815230600482015282906001600160a01b038616906370a082319060240160206040518083038186803b158015613cd357600080fd5b505afa158015613ce7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d0b9190614bb9565b613d159190614bd2565b6040516370a0823160e01b815230600482015290985081906001600160a01b038516906370a082319060240160206040518083038186803b158015613d5957600080fd5b505afa158015613d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d919190614bb9565b613d9b9190614bd2565b96506000620f4240613dad888b614bff565b613db79190614c1e565b1115613ee3576001600160a01b03841663a9059cbb86620f4240613ddb8a8d614bff565b613de59190614c1e565b6040518363ffffffff1660e01b8152600401613e02929190614aed565b602060405180830381600087803b158015613e1c57600080fd5b505af1158015613e30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e549190614b06565b506001600160a01b03808616908516337f78c0b7f8dc279098cd35e7f6ed62faef6b268eb5f31ece1326f32e1bc1d5a048620f4240613e938b8e614bff565b613e9d9190614c1e565b60405190815260200160405180910390a46040516370a0823160e01b8152306004820152613ee09083906001600160a01b038716906370a0823190602401611f97565b97505b6000620f4240613ef3888a614bff565b613efd9190614c1e565b1115614029576001600160a01b03831663a9059cbb86620f4240613f218a8c614bff565b613f2b9190614c1e565b6040518363ffffffff1660e01b8152600401613f48929190614aed565b602060405180830381600087803b158015613f6257600080fd5b505af1158015613f76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f9a9190614b06565b506001600160a01b03808616908416337f78c0b7f8dc279098cd35e7f6ed62faef6b268eb5f31ece1326f32e1bc1d5a048620f4240613fd98b8d614bff565b613fe39190614c1e565b60405190815260200160405180910390a46040516370a0823160e01b81523060048201526140269082906001600160a01b038616906370a0823190602401611f97565b96505b600e546001600160a01b03166141d657871561410557600b5460405163b66503cf60e01b81526001600160a01b039091169063b66503cf906140719087908c90600401614aed565b600060405180830381600087803b15801561408b57600080fd5b505af115801561409f573d6000803e3d6000fd5b505050506001600160a01b038416600090815260126020526040812080548a92906140cb908490614b39565b9091555050600e546040518981526001600160a01b038681169216903390600080516020614ccf8339815191529060200160405180910390a45b86156141d157600b5460405163b66503cf60e01b81526001600160a01b039091169063b66503cf9061413d9086908b90600401614aed565b600060405180830381600087803b15801561415757600080fd5b505af115801561416b573d6000803e3d6000fd5b505050506001600160a01b03831660009081526012602052604081208054899290614197908490614b39565b9091555050600e546040518881526001600160a01b038581169216903390600080516020614ccf8339815191529060200160405180910390a45b6143a7565b600e5460405163a9059cbb60e01b81526001600160a01b038681169263a9059cbb9261420a92909116908c90600401614aed565b602060405180830381600087803b15801561422457600080fd5b505af1158015614238573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061425c9190614b06565b50600e5460405163a9059cbb60e01b81526001600160a01b038581169263a9059cbb9261429192909116908b90600401614aed565b602060405180830381600087803b1580156142ab57600080fd5b505af11580156142bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142e39190614b06565b50600e546040518981526001600160a01b038681169216903390600080516020614ccf8339815191529060200160405180910390a4600e546040518881526001600160a01b038581169216903390600080516020614ccf8339815191529060200160405180910390a46001600160a01b038416600090815260126020526040812080548a9290614374908490614b39565b90915550506001600160a01b038316600090815260126020526040812080548992906143a1908490614b39565b90915550505b5050505050509091565b6040516001600160a01b03808516602483015283166044820152606481018290526143e99085906323b872dd60e01b90608401612f64565b50505050565b60016000808282546144019190614b39565b9091555050600080549083905b6003548110156145035760006003828154811061442d5761442d614b51565b6000918252602090912001546001600160a01b0316905061444d81612cf2565b6001600160a01b03821660009081526002602052604090206005015561447281611e1c565b6001600160a01b038083166000908152600260205260409020600401919091558316156144f0576144a38382610b16565b6001600160a01b0380851660008181526006602090815260408083209487168084529482528083209590955560028152848220600590810154938352815284822093825292909252919020555b50806144fb81614b67565b91505061440e565b5060005b835181101561465f57600084828151811061452457614524614b51565b6020908102919091018101516001600160a01b03808916600090815260068452604080822092841682529190935290912054909150801561464a576001600160a01b03808816600090815260066020908152604080832093861680845293909152812055614593908883612f45565b866001600160a01b0316826001600160a01b03167f9aa05b3d70a9e3e2f004f039648839560576334fb45c81f91b6db03ad9e2efc9836040516145d891815260200190565b60405180910390a36001600160a01b0382166000908152600f602052604081208054839290614608908490614b39565b90915550506001600160a01b03808816600090815260116020908152604080832093861683529290529081208054839290614644908490614b39565b90915550505b5050808061465790614b67565b915050614507565b506112b3612f9b565b60008183106146775781610ba8565b5090919050565b6001600160a01b0382163b6146d55760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015260640161092f565b600080836001600160a01b0316836040516146f09190614c93565b6000604051808303816000865af19150503d806000811461472d576040519150601f19603f3d011682016040523d82523d6000602084013e614732565b606091505b5091509150816147845760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015260640161092f565b8051156143e9578080602001905181019061479f9190614b06565b6143e95760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161092f565b6001600160a01b038116811461136157600080fd5b803561481e816147fe565b919050565b60006020828403121561483557600080fd5b8135610ba8816147fe565b6000806040838503121561485357600080fd5b823561485e816147fe565b9150602083013561486e816147fe565b809150509250929050565b801515811461136157600080fd5b60006020828403121561489957600080fd5b8135610ba881614879565b600080604083850312156148b757600080fd5b82356148c2816147fe565b946020939093013593505050565b6000602082840312156148e257600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261491057600080fd5b8135602067ffffffffffffffff8083111561492d5761492d6148e9565b8260051b604051601f19603f83011681018181108482111715614952576149526148e9565b60405293845285810183019383810192508785111561497057600080fd5b83870191505b848210156149965761498782614813565b83529183019190830190614976565b979650505050505050565b600080604083850312156149b457600080fd5b82356149bf816147fe565b9150602083013567ffffffffffffffff8111156149db57600080fd5b6149e7858286016148ff565b9150509250929050565b600060208284031215614a0357600080fd5b813567ffffffffffffffff811115614a1a57600080fd5b612e02848285016148ff565b600080600060608486031215614a3b57600080fd5b833592506020840135614a4d816147fe565b91506040840135614a5d816147fe565b809150509250925092565b600080600060608486031215614a7d57600080fd5b8335614a88816147fe565b92506020840135614a98816147fe565b929592945050506040919091013590565b600060208284031215614abb57600080fd5b8151610ba8816147fe565b6020808252600d908201526c4f6e6c792076652e7465616d2160981b604082015260600190565b6001600160a01b03929092168252602082015260400190565b600060208284031215614b1857600080fd5b8151610ba881614879565b634e487b7160e01b600052601160045260246000fd5b60008219821115614b4c57614b4c614b23565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614b7b57614b7b614b23565b5060010190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b600060208284031215614bcb57600080fd5b5051919050565b600082821015614be457614be4614b23565b500390565b634e487b7160e01b600052603160045260246000fd5b6000816000190483118215151615614c1957614c19614b23565b500290565b600082614c3b57634e487b7160e01b600052601260045260246000fd5b500490565b60008060408385031215614c5357600080fd5b505080516020909101519092909150565b60008060408385031215614c7757600080fd5b8251614c82816147fe565b602084015190925061486e816147fe565b6000825160005b81811015614cb45760208186018101518583015201614c9a565b81811115614cc3576000828501525b50919091019291505056feee447878094bcc87bd81b55e4831b5e9e3d095866fce10f4f7e4caa64ea7a558a2646970667358221220cebd89c532c39dff28e605d8662ea3f1a93b28f80d12ac1731898220bf59bbd664736f6c634300080900336f3d0c80b7142a8d817dfedfe293680f67ba78aacbbc59db82973fd195982d050000000000000000000000007547d05dff1da6b4a2ebb3f0833afe3c62abd9a1000000000000000000000000b7927d2b2dded7da09795fa5819326898a96715f0000000000000000000000008313f3551c4d3984ffbadfb42f780d0c8763ce940000000000000000000000007e228014e1e676ec84edfc687def804f648394ef000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000003fd3a0c85b70754efc07ac9ac0cbbdce664865a6

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

0000000000000000000000007547d05dff1da6b4a2ebb3f0833afe3c62abd9a1000000000000000000000000b7927d2b2dded7da09795fa5819326898a96715f0000000000000000000000008313f3551c4d3984ffbadfb42f780d0c8763ce940000000000000000000000007e228014e1e676ec84edfc687def804f648394ef000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000000010000000000000000000000003fd3a0c85b70754efc07ac9ac0cbbdce664865a6

-----Decoded View---------------
Arg [0] : _stake (address): 0x7547d05dff1da6b4a2ebb3f0833afe3c62abd9a1
Arg [1] : _ebribe (address): 0xb7927d2b2dded7da09795fa5819326898a96715f
Arg [2] : __ve (address): 0x8313f3551c4d3984ffbadfb42f780d0c8763ce94
Arg [3] : _voter (address): 0x7e228014e1e676ec84edfc687def804f648394ef
Arg [4] : _forPair (bool): True
Arg [5] : _allowedRewardTokens (address[]): 0x3fd3a0c85b70754efc07ac9ac0cbbdce664865a6

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000007547d05dff1da6b4a2ebb3f0833afe3c62abd9a1
Arg [1] : 000000000000000000000000b7927d2b2dded7da09795fa5819326898a96715f
Arg [2] : 0000000000000000000000008313f3551c4d3984ffbadfb42f780d0c8763ce94
Arg [3] : 0000000000000000000000007e228014e1e676ec84edfc687def804f648394ef
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [5] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [7] : 0000000000000000000000003fd3a0c85b70754efc07ac9ac0cbbdce664865a6


Deployed ByteCode Sourcemap

16968:23026:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36619:384;;;;;;:::i;:::-;;:::i;:::-;;18117:47;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;687:25:1;;;675:2;660:18;18117:47:0;;;;;;;;20829:266;;;;;;:::i;:::-;;:::i;18238:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;38326:77;;;;;;:::i;:::-;;:::i;19888:93::-;19961:12;;19888:93;;17953:23;;;;;-1:-1:-1;;;;;17953:23:0;;;;;;-1:-1:-1;;;;;1670:32:1;;;1652:51;;1640:2;1625:18;17953:23:0;1485:224:1;21219:144:0;;;;;;:::i;:::-;;:::i;22407:116::-;;;;;;:::i;:::-;-1:-1:-1;;;;;22488:16:0;22464:4;22488:16;;;:10;:16;;;;;:27;;;;22407:116;36121:490;;;;;;:::i;:::-;;:::i;18171:60::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;22531:124;;;;;;:::i;:::-;-1:-1:-1;;;;;22616:16:0;22592:4;22616:16;;;:10;:16;;;;;:31;;;;22531:124;23932:373;;;;;;:::i;:::-;;:::i;23316:394::-;;;;;;:::i;:::-;;:::i;23812:112::-;;;;;;:::i;:::-;;:::i;25737:255::-;;;;;;:::i;:::-;;:::i;17927:19::-;;;;;-1:-1:-1;;;;;17927:19:0;;;17396;;;;;;;;-1:-1:-1;;;;;17396:19:0;;;24403:652;;;:::i;22717:187::-;;;;;;:::i;:::-;;:::i;17983:19::-;;;;;-1:-1:-1;;;;;17983:19:0;;;17422:44;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17422:44:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4723:32:1;;;4705:51;;4787:2;4772:18;;4765:34;;;;4815:18;;;4808:34;;;;4873:2;4858:18;;4851:34;4916:3;4901:19;;4894:35;4743:3;4945:19;;4938:35;4692:3;4677:19;17422:44:0;4418:561:1;17738:40:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5149:14:1;;5142:22;5124:41;;5112:2;5097:18;17738:40:0;4984:187:1;38232:86:0;;;;;;:::i;:::-;;:::i;37723:171::-;;;;;;:::i;:::-;;:::i;37011:704::-;;;;;;:::i;:::-;;:::i;37902:177::-;;;;;;:::i;:::-;;:::i;17371:18::-;;;;;;;;;20109:178;;;;;;:::i;:::-;;:::i;18071:39::-;;;;;;:::i;:::-;;;;;;;;;;;;;;17585:77;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;19989:112;;;;;;:::i;:::-;-1:-1:-1;;;;;20075:18:0;20048:7;20075:18;;;:9;:18;;;;;;;19989:112;18039:23;;;;;-1:-1:-1;;;;;18039:23:0;;;17473:29;;;;;;:::i;:::-;;:::i;24313:82::-;;;:::i;35499:614::-;;;;;;:::i;:::-;;:::i;22187:84::-;22260:2;;-1:-1:-1;;;;;22260:2:0;22187:84;;22007:101;22082:11;:18;22007:101;;21573:315;;;;;;:::i;:::-;;:::i;26105:2454::-;;;;;;:::i;:::-;;:::i;22912:396::-;;;;;;:::i;:::-;;:::i;21371:194::-;;;;;;:::i;:::-;;:::i;34775:615::-;;;;;;:::i;:::-;;:::i;28567:120::-;;;:::i;:::-;;;;6833:25:1;;;6889:2;6874:18;;6867:34;;;;6806:18;28567:120:0;6659:248:1;22279:120:0;;;;;;:::i;:::-;-1:-1:-1;;;;;22362:16:0;22338:4;22362:16;;;:10;:16;;;;;;;;:29;;;22279:120;17785:44;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23718:86;;;:::i;18009:21::-;;;;;-1:-1:-1;;;18009:21:0;;;;;;21896:103;21972:12;:19;21896:103;;17669:62;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;26000:97;;;:::i;20295:468::-;;;;;;:::i;:::-;;:::i;17509:28::-;;;;;;:::i;:::-;;:::i;36619:384::-;39070:2;;;;;;;;;-1:-1:-1;;;;;39070:2:0;-1:-1:-1;;;;;39070:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39058:21:0;:10;-1:-1:-1;;;;;39058:21:0;;39050:47;;;;-1:-1:-1;;;39050:47:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;36690:16:0;::::1;;::::0;;;:12:::1;:16;::::0;;;;;::::1;;:25;36682:57;;;::::0;-1:-1:-1;;;36682:57:0;;7712:2:1;36682:57:0::1;::::0;::::1;7694:21:1::0;7751:2;7731:18;;;7724:30;-1:-1:-1;;;7770:18:1;;;7763:49;7829:18;;36682:57:0::1;7510:343:1::0;36682:57:0::1;36773:5;::::0;-1:-1:-1;;;;;36759:20:0;;::::1;36773:5;::::0;;::::1;;36759:20;;36750:61;;;::::0;-1:-1:-1;;;36750:61:0;;8060:2:1;36750:61:0::1;::::0;::::1;8042:21:1::0;8099:2;8079:18;;;8072:30;8138:29;8118:18;;;8111:57;8185:18;;36750:61:0::1;7858:351:1::0;36750:61:0::1;36849:5;::::0;36822:53:::1;::::0;-1:-1:-1;;;36822:53:0;;-1:-1:-1;;;;;36822:18:0;;::::1;::::0;::::1;::::0;:53:::1;::::0;36849:5;;::::1;::::0;-1:-1:-1;;36857:17:0;36822:53:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;36886:11:0::1;:20:::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;;36886:20:0::1;-1:-1:-1::0;;;;;36886:20:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;36917:16:0;;;:12:::1;36886:20;36917:16:::0;;;;;:23;;-1:-1:-1;;36917:23:0::1;::::0;::::1;::::0;;36982:5:::1;::::0;36956:39;;36982:5;::::1;::::0;36956:39:::1;::::0;-1:-1:-1;36956:39:0::1;36619:384:::0;:::o;20829:266::-;-1:-1:-1;;;;;21055:16:0;;;20908:7;21055:16;;;:7;:16;;;;;;;;:31;;;;;;;;;;;;;20992;;;:22;:31;;;;;:46;;;;;;;;;;20935:152;;21055:31;20935:115;;21045:4;;20935:105;;20958:81;;:29;21072:13;20958:14;:29::i;:::-;:33;;:81::i;:::-;-1:-1:-1;;;;;20935:18:0;;;;;;:9;:18;;;;;;;:22;:105::i;:::-;:109;;:115::i;:::-;:119;;:152::i;:::-;20928:159;;20829:266;;;;;:::o;38326:77::-;39070:2;;;;;;;;;-1:-1:-1;;;;;39070:2:0;-1:-1:-1;;;;;39070:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39058:21:0;:10;-1:-1:-1;;;;;39058:21:0;;39050:47;;;;-1:-1:-1;;;39050:47:0;;;;;;;:::i;:::-;38384:6:::1;:11:::0;;-1:-1:-1;;38384:11:0::1;::::0;::::1;;::::0;;;::::1;::::0;;38326:77::o;21219:144::-;21296:7;21323:32;21332:7;21341:13;21323:8;:32::i;36121:490::-;39070:2;;;;;;;;;-1:-1:-1;;;;;39070:2:0;-1:-1:-1;;;;;39070:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39058:21:0;:10;-1:-1:-1;;;;;39058:21:0;;39050:47;;;;-1:-1:-1;;;39050:47:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36268:25:0;::::1;;::::0;;;:10:::1;:25;::::0;;;;;;;:38:::1;::::0;36250:15:::1;:56;36228:132;;;::::0;-1:-1:-1;;;36228:132:0;;8945:2:1;36228:132:0::1;::::0;::::1;8927:21:1::0;8984:2;8964:18;;;8957:30;9023:28;9003:18;;;8996:56;9069:18;;36228:132:0::1;8743:350:1::0;36228:132:0::1;36398:1;36379:16;:20;36371:65;;;::::0;-1:-1:-1;;;36371:65:0;;9300:2:1;36371:65:0::1;::::0;::::1;9282:21:1::0;;;9319:18;;;9312:30;9378:34;9358:18;;;9351:62;9430:18;;36371:65:0::1;9098:356:1::0;36371:65:0::1;-1:-1:-1::0;;;;;36447:25:0;::::1;;::::0;;;:10:::1;:25;::::0;;;;;;:41:::1;;:60:::0;;;36523:80;::::1;::::0;::::1;::::0;36491:16;687:25:1;;675:2;660:18;;541:177;36523:80:0::1;;;;;;;;36121:490:::0;;:::o;23932:373::-;10567:1;10550:13;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;10579:20:0;10602:13;;;23999:10:::1;::::0;38510:483:::1;38527:12;:19:::0;38523:23;::::1;38510:483;;;38568:13;38584:12;38597:1;38584:15;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;38584:15:0::1;::::0;-1:-1:-1;38655:21:0::1;38584:15:::0;38655:14:::1;:21::i;:::-;-1:-1:-1::0;;;;;38614:17:0;::::1;;::::0;;;:10:::1;:17;::::0;;;;:38:::1;;:62:::0;38726:31:::1;38625:5:::0;38726:24:::1;:31::i;:::-;-1:-1:-1::0;;;;;38691:17:0;;::::1;;::::0;;;:10:::1;:17;::::0;;;;:32:::1;;:66:::0;;;;38776:21;::::1;::::0;38772:210:::1;;38844:24;38853:7;38862:5;38844:8;:24::i;:::-;-1:-1:-1::0;;;;;38818:16:0;;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:23;;::::1;::::0;;;;;;;;;:50;;;;38928:10:::1;:17:::0;;;;;:38:::1;::::0;;::::1;::::0;38887:31;;;;;;;;:38;;;;;;;;;;:79;38772:210:::1;-1:-1:-1::0;38548:3:0;::::1;::::0;::::1;:::i;:::-;;;;38510:483;;;;24039:1:::2;24030:6;:10;24022:40;;;::::0;-1:-1:-1;;;24022:40:0;;10198:2:1;24022:40:0::2;::::0;::::2;10180:21:1::0;10237:2;10217:18;;;10210:30;-1:-1:-1;;;10256:18:1;;;10249:47;10313:18;;24022:40:0::2;9996:341:1::0;24022:40:0::2;24088:12;::::0;:24:::2;::::0;24105:6;24088:16:::2;:24::i;:::-;24073:12;:39:::0;24157:10:::2;24147:21;::::0;;;:9:::2;:21;::::0;;;;;:33:::2;::::0;24173:6;24147:25:::2;:33::i;:::-;24133:10;24123:21;::::0;;;:9:::2;:21;::::0;;;;:57;;;;24191:5:::2;::::0;:38:::2;::::0;:5:::2;::::0;;::::2;-1:-1:-1::0;;;;;24191:5:0::2;::::0;24222:6;24191:18:::2;:38::i;:::-;24245:29;::::0;687:25:1;;;24255:10:0::2;::::0;24245:29:::2;::::0;675:2:1;660:18;24245:29:0::2;;;;;;;;24285:12;:10;:12::i;:::-;;;10626:1:::1;10662:13:::0;;10646:12;:29;10638:73;;;;-1:-1:-1;;;10638:73:0;;;;;;;:::i;:::-;10539:180;23932:373;:::o;23316:394::-;10567:1;10550:13;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;10579:20:0;10602:13;39164:6:::1;::::0;::::1;;39163:7;39155:27;;;::::0;-1:-1:-1;;;39155:27:0;;10904:2:1;39155:27:0::1;::::0;::::1;10886:21:1::0;10943:1;10923:18;;;10916:29;-1:-1:-1;;;10961:18:1;;;10954:37;11008:18;;39155:27:0::1;10702:330:1::0;39155:27:0::1;23410:5:::2;38515:6;38510:483;38527:12;:19:::0;38523:23;::::2;38510:483;;;38568:13;38584:12;38597:1;38584:15;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;::::2;::::0;-1:-1:-1;;;;;38584:15:0::2;::::0;-1:-1:-1;38655:21:0::2;38584:15:::0;38655:14:::2;:21::i;:::-;-1:-1:-1::0;;;;;38614:17:0;::::2;;::::0;;;:10:::2;:17;::::0;;;;:38:::2;;:62:::0;38726:31:::2;38625:5:::0;38726:24:::2;:31::i;:::-;-1:-1:-1::0;;;;;38691:17:0;;::::2;;::::0;;;:10:::2;:17;::::0;;;;:32:::2;;:66:::0;;;;38776:21;::::2;::::0;38772:210:::2;;38844:24;38853:7;38862:5;38844:8;:24::i;:::-;-1:-1:-1::0;;;;;38818:16:0;;::::2;;::::0;;;:7:::2;:16;::::0;;;;;;;:23;;::::2;::::0;;;;;;;;;:50;;;;38928:10:::2;:17:::0;;;;;:38:::2;::::0;;::::2;::::0;38887:31;;;;;;;;:38;;;;;;;;;;:79;38772:210:::2;-1:-1:-1::0;38548:3:0;::::2;::::0;::::2;:::i;:::-;;;;38510:483;;;;23445:1:::3;23436:6;:10;23428:37;;;::::0;-1:-1:-1;;;23428:37:0;;11239:2:1;23428:37:0::3;::::0;::::3;11221:21:1::0;11278:2;11258:18;;;11251:30;-1:-1:-1;;;11297:18:1;;;11290:44;11351:18;;23428:37:0::3;11037:338:1::0;23428:37:0::3;23491:12;::::0;:24:::3;::::0;23508:6;23491:16:::3;:24::i;:::-;23476:12;:39:::0;-1:-1:-1;;;;;23545:16:0;::::3;;::::0;;;:9:::3;:16;::::0;;;;;:28:::3;::::0;23566:6;23545:20:::3;:28::i;:::-;-1:-1:-1::0;;;;;23526:16:0;;::::3;;::::0;;;:9:::3;:16;::::0;;;;:47;;;;23584:5:::3;::::0;:57:::3;::::0;:5:::3;::::0;;::::3;;23607:10;23627:4;23634:6:::0;23584:22:::3;:57::i;:::-;23665:5;-1:-1:-1::0;;;;;23657:22:0::3;;23672:6;23657:22;;;;687:25:1::0;;675:2;660:18;;541:177;23657:22:0::3;;;;;;;;23690:12;:10;:12::i;:::-;;;39193:1:::2;10662:13:::0;;10646:12;:29;10638:73;;;;-1:-1:-1;;;10638:73:0;;;;;;;:::i;:::-;10539:180;23316:394;;:::o;23812:112::-;23888:5;;:27;;-1:-1:-1;;;23888:27:0;;23904:10;23888:27;;;1652:51:1;23870:46:0;;23881:5;;23888;;;;-1:-1:-1;;;;;23888:5:0;;:15;;1625:18:1;;23888:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;23870:46::-;23812:112;:::o;25737:255::-;25826:10;-1:-1:-1;;;;;25826:21:0;;;;:53;;-1:-1:-1;25873:5:0;;-1:-1:-1;;;;;25873:5:0;25851:10;:28;25826:53;25818:86;;;;-1:-1:-1;;;25818:86:0;;11771:2:1;25818:86:0;;;11753:21:1;11810:2;11790:18;;;11783:30;-1:-1:-1;;;11829:18:1;;;11822:50;11889:18;;25818:86:0;11569:344:1;25818:86:0;25915:5;;:31;;-1:-1:-1;;;25915:31:0;;25940:4;25915:31;;;1652:51:1;-1:-1:-1;;;;;25915:5:0;;;;:16;;1625:18:1;;25915:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25957:27;25968:7;25977:6;25957:10;:27::i;24403:652::-;10567:1;10550:13;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;10579:20:0;10602:13;;;24457:10:::1;::::0;38510:483:::1;38527:12;:19:::0;38523:23;::::1;38510:483;;;38568:13;38584:12;38597:1;38584:15;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;38584:15:0::1;::::0;-1:-1:-1;38655:21:0::1;38584:15:::0;38655:14:::1;:21::i;:::-;-1:-1:-1::0;;;;;38614:17:0;::::1;;::::0;;;:10:::1;:17;::::0;;;;:38:::1;;:62:::0;38726:31:::1;38625:5:::0;38726:24:::1;:31::i;:::-;-1:-1:-1::0;;;;;38691:17:0;;::::1;;::::0;;;:10:::1;:17;::::0;;;;:32:::1;;:66:::0;;;;38776:21;::::1;::::0;38772:210:::1;;38844:24;38853:7;38862:5;38844:8;:24::i;:::-;-1:-1:-1::0;;;;;38818:16:0;;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:23;;::::1;::::0;;;;;;;;;:50;;;;38928:10:::1;:17:::0;;;;;:38:::1;::::0;;::::1;::::0;38887:31;;;;;;;;:38;;;;;;;;;;:79;38772:210:::1;-1:-1:-1::0;38548:3:0;::::1;::::0;::::1;:::i;:::-;;;;38510:483;;;;24487:6:::2;24482:543;24499:12;:19:::0;24495:23;::::2;24482:543;;;24540:21;24564:12;24577:1;24564:15;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;;;::::2;::::0;24620:10:::2;24612:19:::0;;:7:::2;:19:::0;;;;;;-1:-1:-1;;;;;24564:15:0;;::::2;24612:34:::0;;;;;;;;;;24564:15;;-1:-1:-1;24665:11:0;;24661:353:::2;;24705:10;24734:1;24697:19:::0;;;:7:::2;:19;::::0;;;;;;;-1:-1:-1;;;;;24697:34:0;::::2;::::0;;;;;;;:38;;;;24754:55:::2;::::0;24801:7;24754:34:::2;:55::i;:::-;24833:48;::::0;687:25:1;;;-1:-1:-1;;;;;24833:48:0;::::2;::::0;24846:10:::2;::::0;24833:48:::2;::::0;675:2:1;660:18;24833:48:0::2;;;;;;;-1:-1:-1::0;;;;;24900:22:0;::::2;;::::0;;;:7:::2;:22;::::0;;;;:33;;24926:7;;24900:22;:33:::2;::::0;24926:7;;24900:33:::2;:::i;:::-;::::0;;;-1:-1:-1;;24961:10:0::2;24952:20;::::0;;;:8:::2;:20;::::0;;;;;;;-1:-1:-1;;;;;24952:35:0;::::2;::::0;;;;;;;:46;;24991:7;;24952:20;:46:::2;::::0;24991:7;;24952:46:::2;:::i;:::-;::::0;;;-1:-1:-1;;24661:353:0::2;24525:500;;24520:3;;;;;:::i;:::-;;;;24482:543;;;;25035:12;:10;:12::i;:::-;;;10626:1:::1;10662:13:::0;;10646:12;:29;10638:73;;;;-1:-1:-1;;;10638:73:0;;;;;;;:::i;22717:187::-;39070:2;;;;;;;;;-1:-1:-1;;;;;39070:2:0;-1:-1:-1;;;;;39070:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39058:21:0;:10;-1:-1:-1;;;;;39058:21:0;;39050:47;;;;-1:-1:-1;;;39050:47:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22830:25:0;;::::1;;::::0;;;:10:::1;:25;::::0;;;;:66;;-1:-1:-1;;;;;;22830:66:0::1;::::0;;;::::1;;::::0;;22717:187::o;38232:86::-;39070:2;;;;;;;;;-1:-1:-1;;;;;39070:2:0;-1:-1:-1;;;;;39070:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39058:21:0;:10;-1:-1:-1;;;;;39058:21:0;;39050:47;;;;-1:-1:-1;;;39050:47:0;;;;;;;:::i;:::-;38296:8:::1;:14:::0;;-1:-1:-1;;;;;;38296:14:0::1;-1:-1:-1::0;;;;;38296:14:0;;;::::1;::::0;;;::::1;::::0;;38232:86::o;37723:171::-;39070:2;;;;;;;;;-1:-1:-1;;;;;39070:2:0;-1:-1:-1;;;;;39070:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39058:21:0;:10;-1:-1:-1;;;;;39058:21:0;;39050:47;;;;-1:-1:-1;;;39050:47:0;;;;;;;:::i;:::-;37804:7:::1;37800:87;37818:4;:11;37813:2;:16;37800:87;;;37852:23;37866:4;37871:2;37866:8;;;;;;;;:::i;:::-;;;;;;;37852:13;:23::i;:::-;37831:4:::0;::::1;::::0;::::1;:::i;:::-;;;;37800:87;;37011:704:::0;39070:2;;;;;;;;;-1:-1:-1;;;;;39070:2:0;-1:-1:-1;;;;;39070:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39058:21:0;:10;-1:-1:-1;;;;;39058:21:0;;39050:47;;;;-1:-1:-1;;;39050:47:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37085:16:0;::::1;;::::0;;;:12:::1;:16;::::0;;;;;::::1;;:24;;:16:::0;:24:::1;37077:58;;;::::0;-1:-1:-1;;;37077:58:0;;12120:2:1;37077:58:0::1;::::0;::::1;12102:21:1::0;12159:2;12139:18;;;12132:30;-1:-1:-1;;;12178:18:1;;;12171:51;12239:18;;37077:58:0::1;11918:345:1::0;37077:58:0::1;37173:5;::::0;37146:37:::1;::::0;-1:-1:-1;;;37146:37:0;;-1:-1:-1;;;;;37146:18:0;;::::1;::::0;::::1;::::0;:37:::1;::::0;37173:5;;::::1;::::0;::::1;::::0;37146:37:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;37205:11:0::1;:18:::0;;;-1:-1:-1;;;;;37237:22:0;::::1;::::0;37249:5:::1;37253:1;37205:18:::0;37249:5:::1;:::i;:::-;37237:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;37237:18:0::1;:22;37234:418;;;37276:11;:17;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;37276:17:0;;;;;-1:-1:-1;;;;;;37276:17:0::1;::::0;;;;;;;;-1:-1:-1;;;;;37308:16:0;::::1;::::0;;:12:::1;:16:::0;;;;;:24;;-1:-1:-1;;37308:24:0::1;::::0;;37234:418:::1;;;37378:6;37374:267;37390:11;:18:::0;:22:::1;::::0;37411:1:::1;::::0;37390:22:::1;:::i;:::-;37386:1;:26;37374:267;;;37457:2;-1:-1:-1::0;;;;;37441:18:0::1;:11;37453:1;37441:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;37441:14:0::1;:18;37438:188;;;37501:11;37513:5;37517:1;37513:3:::0;:5:::1;:::i;:::-;37501:18;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;37484:11:::1;:14:::0;;-1:-1:-1;;;;;37501:18:0;;::::1;::::0;37496:1;;37484:14;::::1;;;;;:::i;:::-;;;;;;;;;:35;;;;;-1:-1:-1::0;;;;;37484:35:0::1;;;;;-1:-1:-1::0;;;;;37484:35:0::1;;;;;;37542:11;:17;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;37542:17:0;;;;;-1:-1:-1;;;;;;37542:17:0::1;::::0;;;;;;;;-1:-1:-1;;;;;37582:16:0;::::1;::::0;;:12:::1;:16:::0;;;;;:24;;-1:-1:-1;;37582:24:0::1;::::0;;37438:188:::1;37414:3:::0;::::1;::::0;::::1;:::i;:::-;;;;37374:267;;;;37234:418;37693:5;::::0;37667:40:::1;::::0;37701:5:::1;::::0;-1:-1:-1;;;;;37693:5:0;;::::1;::::0;37667:40;;::::1;::::0;::::1;::::0;37701:5;;37667:40:::1;37066:649;37011:704:::0;:::o;37902:177::-;39070:2;;;;;;;;;-1:-1:-1;;;;;39070:2:0;-1:-1:-1;;;;;39070:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39058:21:0;:10;-1:-1:-1;;;;;39058:21:0;;39050:47;;;;-1:-1:-1;;;39050:47:0;;;;;;;:::i;:::-;37986:7:::1;37982:90;38000:4;:11;37995:2;:16;37982:90;;;38034:26;38051:4;38056:2;38051:8;;;;;;;;:::i;:::-;;;;;;;38034:16;:26::i;:::-;38013:4:::0;::::1;::::0;::::1;:::i;:::-;;;;37982:90;;20109:178:::0;-1:-1:-1;;;;;20240:25:0;;20187:7;20240:25;;;:10;:25;;;;;;;:38;;20214:65;;20223:15;;20214:8;:65::i;17473:29::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17473:29:0;;-1:-1:-1;17473:29:0;:::o;24313:82::-;24375:10;24365:21;;;;:9;:21;;;;;;24356:31;;:8;:31::i;:::-;24313:82::o;35499:614::-;39070:2;;;;;;;;;-1:-1:-1;;;;;39070:2:0;-1:-1:-1;;;;;39070:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39058:21:0;:10;-1:-1:-1;;;;;39058:21:0;;39050:47;;;;-1:-1:-1;;;39050:47:0;;;;;;;:::i;:::-;35606:5:::1;::::0;-1:-1:-1;;;;;35588:24:0;;::::1;35606:5;::::0;;::::1;;35588:24;35585:437;;;35918:12;::::0;35882:5:::1;::::0;:30:::1;::::0;-1:-1:-1;;;35882:30:0;;35906:4:::1;35882:30;::::0;::::1;1652:51:1::0;-1:-1:-1;;35881:50:0::1;::::0;35918:12;;35882:5:::1;::::0;;::::1;-1:-1:-1::0;;;;;35882:5:0::1;::::0;:15:::1;::::0;1625:18:1;;35882:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;35881:50::-;35865:66;;35963:8;35955:4;:16;;35946:64;;;::::0;-1:-1:-1;;;35946:64:0;;13019:2:1;35946:64:0::1;::::0;::::1;13001:21:1::0;13058:2;13038:18;;;13031:30;13097:34;13077:18;;;13070:62;-1:-1:-1;;;13148:18:1;;;13141:32;13190:19;;35946:64:0::1;12817:398:1::0;35946:64:0::1;35614:408;35585:437;36032:34;::::0;-1:-1:-1;;;36032:34:0;;-1:-1:-1;;;;;36032:23:0;::::1;::::0;::::1;::::0;:34:::1;::::0;36056:3;;36061:4;;36032:34:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36092:6;-1:-1:-1::0;;;;;36082:23:0::1;;36100:4;36082:23;;;;687:25:1::0;;675:2;660:18;;541:177;36082:23:0::1;;;;;;;;35499:614:::0;;;:::o;21573:315::-;-1:-1:-1;;;;;21673:25:0;;21633:4;21673:25;;;:10;:25;;;;;;;:38;;21654:15;:57;21650:71;;-1:-1:-1;21720:1:0;;21573:315;-1:-1:-1;21573:315:0:o;21650:71::-;-1:-1:-1;;;;;21752:25:0;;21732:17;21752:25;;;:10;:25;;;;;;;:38;;:59;;21795:15;21752:42;:59::i;:::-;-1:-1:-1;;;;;21843:25:0;;;;;;:10;:25;;;;;:36;;;21732:79;;-1:-1:-1;21829:51:0;;21732:79;;21829:13;:51::i;:::-;21822:58;21573:315;-1:-1:-1;;;21573:315:0:o;26105:2454::-;10567:1;10550:13;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;10579:20:0;10602:13;;;10579:20;38510:483:::1;38527:12;:19:::0;38523:23;::::1;38510:483;;;38568:13;38584:12;38597:1;38584:15;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;38584:15:0::1;::::0;-1:-1:-1;38655:21:0::1;38584:15:::0;38655:14:::1;:21::i;:::-;-1:-1:-1::0;;;;;38614:17:0;::::1;;::::0;;;:10:::1;:17;::::0;;;;:38:::1;;:62:::0;38726:31:::1;38625:5:::0;38726:24:::1;:31::i;:::-;-1:-1:-1::0;;;;;38691:17:0;;::::1;;::::0;;;:10:::1;:17;::::0;;;;:32:::1;;:66:::0;;;;38776:21;::::1;::::0;38772:210:::1;;38844:24;38853:7;38862:5;38844:8;:24::i;:::-;-1:-1:-1::0;;;;;38818:16:0;;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:23;;::::1;::::0;;;;;;;;;:50;;;;38928:10:::1;:17:::0;;;;;:38:::1;::::0;;::::1;::::0;38887:31;;;;;;;;:38;;;;;;;;;;:79;38772:210:::1;-1:-1:-1::0;38548:3:0;::::1;::::0;::::1;:::i;:::-;;;;38510:483;;;-1:-1:-1::0;26264:5:0::2;::::0;-1:-1:-1;;;;;26239:31:0;;::::2;26264:5;::::0;;::::2;;26239:31;;26231:84;;;::::0;-1:-1:-1;;;26231:84:0;;13422:2:1;26231:84:0::2;::::0;::::2;13404:21:1::0;13461:2;13441:18;;;13434:30;13500:34;13480:18;;;13473:62;-1:-1:-1;;;13551:18:1;;;13544:38;13599:19;;26231:84:0::2;13220:404:1::0;26231:84:0::2;-1:-1:-1::0;;;;;26334:23:0;::::2;;::::0;;;:8:::2;:23;::::0;;;;;::::2;;26326:51;;;::::0;-1:-1:-1;;;26326:51:0;;13831:2:1;26326:51:0::2;::::0;::::2;13813:21:1::0;13870:2;13850:18;;;13843:30;-1:-1:-1;;;13889:18:1;;;13882:44;13943:18;;26326:51:0::2;13629:338:1::0;26326:51:0::2;26596:12;:10;:12::i;:::-;-1:-1:-1::0;;26691:46:0::2;::::0;-1:-1:-1;;;26691:46:0;;26731:4:::2;26691:46;::::0;::::2;1652:51:1::0;26679:9:0::2;::::0;-1:-1:-1;;;;;26691:31:0;::::2;::::0;::::2;::::0;1625:18:1;;26691:46:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26679:58:::0;-1:-1:-1;26918:74:0::2;-1:-1:-1::0;;;;;26918:38:0;::::2;26957:10;26977:4;26984:7:::0;26918:38:::2;:74::i;:::-;27015:46;::::0;-1:-1:-1;;;27015:46:0;;27055:4:::2;27015:46;::::0;::::2;1652:51:1::0;27003:9:0::2;::::0;-1:-1:-1;;;;;27015:31:0;::::2;::::0;::::2;::::0;1625:18:1;;27015:46:0::2;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27003:58:::0;-1:-1:-1;27082:11:0::2;27089:4:::0;27003:58;27082:11:::2;:::i;:::-;27072:21;;27122:1;27112:7;:11;27104:61;;;::::0;-1:-1:-1;;;27104:61:0;;14174:2:1;27104:61:0::2;::::0;::::2;14156:21:1::0;14213:2;14193:18;;;14186:30;14252:34;14232:18;;;14225:62;-1:-1:-1;;;14303:18:1;;;14296:35;14348:19;;27104:61:0::2;13972:401:1::0;27104:61:0::2;-1:-1:-1::0;;;;;27201:25:0;::::2;;::::0;;;:10:::2;:25;::::0;;;;;;;:38:::2;::::0;27182:15:::2;:57;27178:1074;;-1:-1:-1::0;;;;;27307:25:0;::::2;;::::0;;;:10:::2;:25;::::0;;;;:41:::2;;::::0;27295:54:::2;::::0;:7;;:11:::2;:54::i;:::-;-1:-1:-1::0;;;;;27256:25:0;::::2;;::::0;;;:10:::2;:25;::::0;;;;:36:::2;;:93:::0;27178:1074:::2;;;-1:-1:-1::0;;;;;27473:25:0;::::2;27451:19;27473:25:::0;;;:10:::2;:25;::::0;;;;;;:36:::2;::::0;::::2;::::0;27544:38;::::2;::::0;27473:36;;27451:19;27544:59:::2;::::0;27587:15:::2;27544:42;:59::i;:::-;-1:-1:-1::0;;;;;27651:25:0;::::2;27618:16;27651:25:::0;;;:10:::2;:25;::::0;;;;:36:::2;;::::0;27524:79;;-1:-1:-1;27618:16:0;27637:51:::2;::::0;27524:79;;27637:13:::2;:51::i;:::-;-1:-1:-1::0;;;;;27768:25:0;::::2;;::::0;;;:10:::2;:25;::::0;;;;:41:::2;;::::0;27618:70;;-1:-1:-1;27742:68:0::2;::::0;:21:::2;:7:::0;27618:70;27742:11:::2;:21::i;:68::-;-1:-1:-1::0;;;;;27703:25:0;;::::2;;::::0;;;:10:::2;:25;::::0;;;;:36:::2;;:107:::0;;;;27866:5:::2;::::0;::::2;27846:10;:26;;::::0;:103:::2;;-1:-1:-1::0;;;;;;27905:25:0;;::::2;;::::0;;;:10:::2;:25;::::0;;;;:44;::::2;27893:10;:56;;27846:103;27825:416;;;-1:-1:-1::0;;;;;28041:25:0;::::2;;::::0;;;:10:::2;:25;::::0;;;;:36:::2;;::::0;:54;-1:-1:-1;28041:54:0::2;::::0;:101:::2;;;28134:8;28124:7;:18;28041:101;27984:241;;;::::0;-1:-1:-1;;;27984:241:0;;14580:2:1;27984:241:0::2;::::0;::::2;14562:21:1::0;14619:2;14599:18;;;14592:30;14658:34;14638:18;;;14631:62;-1:-1:-1;;;14709:18:1;;;14702:35;14754:19;;27984:241:0::2;14378:401:1::0;27984:241:0::2;27367:885;;;27178:1074;-1:-1:-1::0;;;;;28264:25:0;::::2;;::::0;;;:10:::2;:25;::::0;;;;28307:15:::2;28264:40;::::0;::::2;:58:::0;;;28394:41:::2;::::0;;::::2;::::0;28374:62:::2;::::0;28307:15;28374:19:::2;:62::i;:::-;-1:-1:-1::0;;;;;28333:25:0;::::2;;::::0;;;:10:::2;:25;::::0;;;;;;;;:38;;::::2;:103:::0;;;;28452:47;687:25:1;;;28479:10:0::2;::::0;28452:47:::2;::::0;660:18:1;28452:47:0::2;;;;;;;-1:-1:-1::0;;;;;28510:30:0;::::2;;::::0;;;:15:::2;:30;::::0;;;;:41;;28544:7;;28510:30;:41:::2;::::0;28544:7;;28510:41:::2;:::i;:::-;;;;;;;;26220:2339;;10626:1:::1;10662:13:::0;;10646:12;:29;10638:73;;;;-1:-1:-1;;;10638:73:0;;;;;;;:::i;22912:396::-;10567:1;10550:13;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;10579:20:0;10602:13;39164:6:::1;::::0;::::1;;39163:7;39155:27;;;::::0;-1:-1:-1;;;39155:27:0;;10904:2:1;39155:27:0::1;::::0;::::1;10886:21:1::0;10943:1;10923:18;;;10916:29;-1:-1:-1;;;10961:18:1;;;10954:37;11008:18;;39155:27:0::1;10702:330:1::0;39155:27:0::1;22988:10:::2;38515:6;38510:483;38527:12;:19:::0;38523:23;::::2;38510:483;;;38568:13;38584:12;38597:1;38584:15;;;;;;;;:::i;:::-;;::::0;;;::::2;::::0;;;::::2;::::0;-1:-1:-1;;;;;38584:15:0::2;::::0;-1:-1:-1;38655:21:0::2;38584:15:::0;38655:14:::2;:21::i;:::-;-1:-1:-1::0;;;;;38614:17:0;::::2;;::::0;;;:10:::2;:17;::::0;;;;:38:::2;;:62:::0;38726:31:::2;38625:5:::0;38726:24:::2;:31::i;:::-;-1:-1:-1::0;;;;;38691:17:0;;::::2;;::::0;;;:10:::2;:17;::::0;;;;:32:::2;;:66:::0;;;;38776:21;::::2;::::0;38772:210:::2;;38844:24;38853:7;38862:5;38844:8;:24::i;:::-;-1:-1:-1::0;;;;;38818:16:0;;::::2;;::::0;;;:7:::2;:16;::::0;;;;;;;:23;;::::2;::::0;;;;;;;;;:50;;;;38928:10:::2;:17:::0;;;;;:38:::2;::::0;;::::2;::::0;38887:31;;;;;;;;:38;;;;;;;;;;:79;38772:210:::2;-1:-1:-1::0;38548:3:0;::::2;::::0;::::2;:::i;:::-;;;;38510:483;;;;23028:1:::3;23019:6;:10;23011:37;;;::::0;-1:-1:-1;;;23011:37:0;;11239:2:1;23011:37:0::3;::::0;::::3;11221:21:1::0;11278:2;11258:18;;;11251:30;-1:-1:-1;;;11297:18:1;;;11290:44;11351:18;;23011:37:0::3;11037:338:1::0;23011:37:0::3;23074:12;::::0;:24:::3;::::0;23091:6;23074:16:::3;:24::i;:::-;23059:12;:39:::0;23143:10:::3;23133:21;::::0;;;:9:::3;:21;::::0;;;;;:33:::3;::::0;23159:6;23133:25:::3;:33::i;:::-;23119:10;23109:21;::::0;;;:9:::3;:21;::::0;;;;:57;;;;23177:5:::3;::::0;:57:::3;::::0;:5:::3;::::0;;::::3;-1:-1:-1::0;;;;;23177:5:0::3;::::0;23220:4:::3;23227:6:::0;23177:22:::3;:57::i;:::-;23250:27;::::0;687:25:1;;;23258:10:0::3;::::0;23250:27:::3;::::0;675:2:1;660:18;23250:27:0::3;541:177:1::0;21371:194:0;-1:-1:-1;;;;;21515:25:0;;21447:7;21515:25;;;:10;:25;;;;;:41;;;;21474:36;;;;;:83;;:40;:83::i;34775:615::-;39070:2;;;;;;;;;-1:-1:-1;;;;;39070:2:0;-1:-1:-1;;;;;39070:7:0;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;39058:21:0;:10;-1:-1:-1;;;;;39058:21:0;;39050:47;;;;-1:-1:-1;;;39050:47:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34922:23:0;::::1;;::::0;;;:8:::1;:23;::::0;;;;;::::1;;:32;::::0;::::1;:95;;-1:-1:-1::0;;;;;;34971:25:0;::::1;;::::0;;;:10:::1;:25;::::0;;;;:41:::1;;::::0;:46;34922:95:::1;34900:166;;;::::0;-1:-1:-1;;;34900:166:0;;14986:2:1;34900:166:0::1;::::0;::::1;14968:21:1::0;15025:2;15005:18;;;14998:30;-1:-1:-1;;;15044:18:1;;;15037:50;15104:18;;34900:166:0::1;14784:344:1::0;34900:166:0::1;35111:5;::::0;-1:-1:-1;;;;;35086:31:0;;::::1;35111:5;::::0;;::::1;;35086:31;;35077:73;;;::::0;-1:-1:-1;;;35077:73:0;;15335:2:1;35077:73:0::1;::::0;::::1;15317:21:1::0;15374:2;15354:18;;;15347:30;15413;15393:18;;;15386:58;15461:18;;35077:73:0::1;15133:352:1::0;35077:73:0::1;35161:12;:32:::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;35161:32:0;;::::1;-1:-1:-1::0;;;;;;35161:32:0;;::::1;::::0;::::1;::::0;;;-1:-1:-1;35204:23:0;;;:8:::1;35161:32;35204:23:::0;;;;;;;:30;;-1:-1:-1;;35204:30:0::1;::::0;::::1;::::0;;35245:10:::1;:25:::0;;;;;;:66;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;35322:41;::::1;:60:::0;34775:615::o;28567:120::-;28619:13;28634;10567:1;10550:13;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;10579:20:0;10602:13;28667:12:::1;:10;:12::i;:::-;28660:19;;;;10662:13:::0;;10646:12;:29;10638:73;;;;-1:-1:-1;;;10638:73:0;;;;;;;:::i;:::-;10539:180;28567:120;;:::o;23718:86::-;23768:5;;:27;;-1:-1:-1;;;23768:27:0;;23784:10;23768:27;;;1652:51:1;23760:36:0;;23768:5;;;-1:-1:-1;;;;;23768:5:0;;:15;;1625:18:1;;23768:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26000:97::-;26055:10;26045:21;;;;:9;:21;;;;;;26036:31;;:8;:31::i;:::-;26078:11;:9;:11::i;20295:468::-;20363:7;20387:12;;20403:1;20387:17;20383:103;;;-1:-1:-1;;;;;;20428:25:0;;;;;:10;:25;;;;;:46;;;;20295:468::o;20383:103::-;20727:12;;-1:-1:-1;;;;;20675:25:0;;;;;;:10;:25;;;;;:36;;;;20629:40;;;;;20516:239;;20585:155;;20727:12;;20585:137;;20717:4;;20585:127;;20675:36;20585:127;;:39;20686:13;20585:24;:39::i;:85::-;:89;;:127::i;:155::-;-1:-1:-1;;;;;20516:25:0;;;;;;:10;:25;;;;;:46;;;;:50;:239::i;17509:28::-;;;;;;;;;;;;14646:184;14704:7;14737:1;14732;:6;;14724:49;;;;-1:-1:-1;;;14724:49:0;;15692:2:1;14724:49:0;;;15674:21:1;15731:2;15711:18;;;15704:30;15770:32;15750:18;;;15743:60;15820:18;;14724:49:0;15490:354:1;14724:49:0;14784:9;14796:5;14800:1;14796;:5;:::i;:::-;14784:17;14646:184;-1:-1:-1;;;;14646:184:0:o;15081:470::-;15139:7;15383:6;15379:47;;-1:-1:-1;15413:1:0;15406:8;;15379:47;15438:9;15450:5;15454:1;15450;:5;:::i;:::-;15438:17;-1:-1:-1;15483:1:0;15474:5;15478:1;15438:17;15474:5;:::i;:::-;:10;15466:56;;;;-1:-1:-1;;;15466:56:0;;16446:2:1;15466:56:0;;;16428:21:1;16485:2;16465:18;;;16458:30;16524:34;16504:18;;;16497:62;-1:-1:-1;;;16575:18:1;;;16568:31;16616:19;;15466:56:0;16244:397:1;16019:333:0;16077:7;16176:1;16172;:5;16164:44;;;;-1:-1:-1;;;16164:44:0;;16848:2:1;16164:44:0;;;16830:21:1;16887:2;16867:18;;;16860:30;16926:28;16906:18;;;16899:56;16972:18;;16164:44:0;16646:350:1;16164:44:0;16219:9;16231:5;16235:1;16231;:5;:::i;14190:181::-;14248:7;;14280:5;14284:1;14280;:5;:::i;:::-;14268:17;;14309:1;14304;:6;;14296:46;;;;-1:-1:-1;;;14296:46:0;;17203:2:1;14296:46:0;;;17185:21:1;17242:2;17222:18;;;17215:30;17281:29;17261:18;;;17254:57;17328:18;;14296:46:0;17001:351:1;10820:176:0;10903:85;10922:5;10952:23;;;10977:2;10981:5;10929:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;10929:58:0;;;;;;;;;;;;;;-1:-1:-1;;;;;10929:58:0;-1:-1:-1;;;;;;10929:58:0;;;;;;;;;;10903:18;:85::i;28695:6014::-;28735:13;28750;28777:10;28790:5;;;;;;;;;-1:-1:-1;;;;;28790:5:0;-1:-1:-1;;;;;28790:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28777:43;;28831:12;28854:1;28846:5;:9;:50;;28894:1;28846:50;;;28858:5;;;;;;;;;-1:-1:-1;;;;;28858:5:0;-1:-1:-1;;;;;28858:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28977:9;;28831:65;;-1:-1:-1;;;;28977:9:0;;;;28972:3280;;29230:11;:18;29219:8;29230:18;29285:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29285:17:0;;29260:42;;29314:23;29351:3;29340:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29340:15:0;;29314:41;;29371:7;29367:490;29385:3;29380:2;:8;29367:490;;;29433:11;29445:2;29433:15;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29433:15:0;29412:6;29419:2;29412:10;;;;;;;;:::i;:::-;;;;;;:38;-1:-1:-1;;;;;29412:38:0;;;-1:-1:-1;;;;;29412:38:0;;;;;29764:1;-1:-1:-1;;;;;29733:33:0;29741:6;29748:2;29741:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;29733:33:0;;:111;;29809:6;29816:2;29809:10;;;;;;;;:::i;:::-;;;;;;;;;;;:35;;-1:-1:-1;;;29809:35:0;;29838:4;29809:35;;;1652:51:1;-1:-1:-1;;;;;29809:20:0;;;;;;1625:18:1;;29809:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29733:111;;;29787:1;29733:111;29699:9;29709:2;29699:13;;;;;;;;:::i;:::-;;;;;;;;;;:145;29390:4;;;;:::i;:::-;;;;29367:490;;;;29889:5;;;;;;;;-1:-1:-1;;;;;29889:5:0;-1:-1:-1;;;;;29875:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29875:33:0;;;;;;;;-1:-1:-1;;29875:33:0;;;;;;;;;;;;:::i;:::-;;;29871:2370;;-1:-1:-1;32220:1:0;;;;-1:-1:-1;28695:6014:0;-1:-1:-1;;;;;28695:6014:0:o;29871:2370::-;;;30152:7;30148:1923;30170:3;30165:2;:8;30148:1923;;;30267:7;30330:1;-1:-1:-1;;;;;30299:33:0;30307:6;30314:2;30307:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;30299:33:0;;:119;;30383:6;30390:2;30383:10;;;;;;;;:::i;:::-;;;;;;;;;;;:35;;-1:-1:-1;;;30383:35:0;;30412:4;30383:35;;;1652:51:1;-1:-1:-1;;;;;30383:20:0;;;;;;1625:18:1;;30383:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30299:119;;;30357:1;30299:119;30267:151;;30658:9;30668:2;30658:13;;;;;;;;:::i;:::-;;;;;;;30653:2;:18;30650:1339;;;30786:1;30780:3;30771:5;30754:9;30764:2;30754:13;;;;;;;;:::i;:::-;;;;;;;30749:2;:18;;;;:::i;:::-;30748:28;;;;:::i;:::-;30746:37;;;;:::i;:::-;:41;30742:370;;;30820:6;30827:2;30820:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;30820:19:0;;30840:4;30883:3;30874:5;30849:21;30856:9;30866:2;30856:13;;;;;;;;:::i;:::-;;;;;;;30849:2;:6;;:21;;;;:::i;:::-;30848:31;;;;:::i;:::-;30846:40;;;;:::i;:::-;30820:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30961:6;30968:2;30961:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;30924:89:0;30948:4;-1:-1:-1;;;;;30924:89:0;30937:10;-1:-1:-1;;;;;30924:89:0;;31009:3;31000:5;30975:21;30982:9;30992:2;30982:13;;;;;;;;:::i;:::-;;;;;;;30975:2;:6;;:21;;;;:::i;:::-;30974:31;;;;:::i;:::-;30973:39;;;;:::i;:::-;30924:89;;687:25:1;;;675:2;660:18;30924:89:0;;;;;;;31049:6;31056:2;31049:10;;;;;;;;:::i;:::-;;;;;;;;;;;:35;;-1:-1:-1;;;31049:35:0;;31078:4;31049:35;;;1652:51:1;-1:-1:-1;;;;;31049:20:0;;;;;;1625:18:1;;31049:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31044:40;;30742:370;31191:8;;-1:-1:-1;;;;;31191:8:0;31187:779;;31246:5;;31280:10;;-1:-1:-1;;;;;31246:5:0;;;;:24;;31280:6;;31287:2;;31280:10;;;;;;:::i;:::-;;;;;;;31294:21;31301:9;31311:2;31301:13;;;;;;;;:::i;:::-;;;;;;;31294:2;:6;;:21;;;;:::i;:::-;31246:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31400:6;31407:2;31400:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;31354:81:0;31384:5;;;;;;;;;-1:-1:-1;;;;;31384:5:0;-1:-1:-1;;;;;31354:81:0;31364:10;-1:-1:-1;;;;;31354:81:0;-1:-1:-1;;;;;;;;;;;31419:9:0;31429:2;31419:13;;;;;;;;:::i;:::-;;;;;;;31414:2;:18;;;;:::i;:::-;31354:81;;687:25:1;;;675:2;660:18;31354:81:0;;;;;;;31515:9;31525:2;31515:13;;;;;;;;:::i;:::-;;;;;;;31510:2;:18;;;;:::i;:::-;31466:16;:39;31492:6;31499:2;31492:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;31466:39:0;-1:-1:-1;;;;;31466:39:0;;;;;;;;;;;;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;31187:779:0;;-1:-1:-1;31187:779:0;;31678:6;31685:2;31678:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;31678:19:0;;31698:8;;;;;;;;;-1:-1:-1;;;;;31698:8:0;31709:21;31716:9;31726:2;31716:13;;;;;;;;:::i;31709:21::-;31678:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31809:6;31816:2;31809:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;31769:75:0;31791:8;;;;;;;;;-1:-1:-1;;;;;31791:8:0;-1:-1:-1;;;;;31769:75:0;31779:10;-1:-1:-1;;;;;31769:75:0;-1:-1:-1;;;;;;;;;;;31828:9:0;31838:2;31828:13;;;;;;;;:::i;:::-;;;;;;;31823:2;:18;;;;:::i;:::-;31769:75;;687:25:1;;;675:2;660:18;31769:75:0;;;;;;;31924:9;31934:2;31924:13;;;;;;;;:::i;:::-;;;;;;;31919:2;:18;;;;:::i;:::-;31875:16;:39;31901:6;31908:2;31901:10;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;31875:39:0;-1:-1:-1;;;;;31875:39:0;;;;;;;;;;;;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;31187:779:0;-1:-1:-1;30175:4:0;;;;:::i;:::-;;;;30148:1923;;;-1:-1:-1;32097:1:0;;;;-1:-1:-1;28695:6014:0;-1:-1:-1;;;;;;28695:6014:0:o;28972:3280::-;32369:15;32386;32419:5;;;;;;;;-1:-1:-1;;;;;32419:5:0;-1:-1:-1;;;;;32405:28:0;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32516:40;;-1:-1:-1;;;32516:40:0;;32550:4;32516:40;;;1652:51:1;32368:67:0;;-1:-1:-1;32368:67:0;-1:-1:-1;32504:9:0;;-1:-1:-1;;;;;32516:25:0;;;;;1625:18:1;;32516:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32579;;-1:-1:-1;;;32579:40:0;;32613:4;32579:40;;;1652:51:1;32504:52:0;;-1:-1:-1;32567:9:0;;-1:-1:-1;;;;;32579:25:0;;;;;1625:18:1;;32579:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32567:52;;32678:5;;;;;;;;-1:-1:-1;;;;;32678:5:0;-1:-1:-1;;;;;32664:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;32719:40:0;;-1:-1:-1;;;32719:40:0;;32753:4;32719:40;;;1652:51:1;32762:4:0;;-1:-1:-1;;;;;32719:25:0;;;;;1625:18:1;;32719:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;;:::i;:::-;32788:40;;-1:-1:-1;;;32788:40:0;;32822:4;32788:40;;;1652:51:1;32708:58:0;;-1:-1:-1;32831:4:0;;-1:-1:-1;;;;;32788:25:0;;;;;1625:18:1;;32788:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:47;;;;:::i;:::-;32777:58;-1:-1:-1;32975:1:0;32969:3;32949:16;32960:5;32949:8;:16;:::i;:::-;32947:25;;;;:::i;:::-;:29;32943:269;;;-1:-1:-1;;;;;32993:24:0;;;33018:4;33041:3;33025:14;33034:5;33025:8;:14;:::i;:::-;33024:20;;;;:::i;:::-;32993:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;33066:58:0;;;;;;33079:10;33066:58;33120:3;33104:14;33113:5;33104:8;:14;:::i;:::-;33103:20;;;;:::i;:::-;33066:58;;687:25:1;;;675:2;660:18;33066:58:0;;;;;;;33150:40;;-1:-1:-1;;;33150:40:0;;33184:4;33150:40;;;1652:51:1;33150:50:0;;33195:4;;-1:-1:-1;;;;;33150:25:0;;;;;1625:18:1;;33150:40:0;1485:224:1;33150:50:0;33139:61;;32943:269;33254:1;33248:3;33228:16;33239:5;33228:8;:16;:::i;:::-;33226:25;;;;:::i;:::-;:29;33222:269;;;-1:-1:-1;;;;;33272:24:0;;;33297:4;33320:3;33304:14;33313:5;33304:8;:14;:::i;:::-;33303:20;;;;:::i;:::-;33272:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;33345:58:0;;;;;;33358:10;33345:58;33399:3;33383:14;33392:5;33383:8;:14;:::i;:::-;33382:20;;;;:::i;:::-;33345:58;;687:25:1;;;675:2;660:18;33345:58:0;;;;;;;33429:40;;-1:-1:-1;;;33429:40:0;;33463:4;33429:40;;;1652:51:1;33429:50:0;;33474:4;;-1:-1:-1;;;;;33429:25:0;;;;;1625:18:1;;33429:40:0;1485:224:1;33429:50:0;33418:61;;33222:269;33534:8;;-1:-1:-1;;;;;33534:8:0;33530:1132;;33574:12;;33570:269;;33604:5;;:43;;-1:-1:-1;;;33604:43:0;;-1:-1:-1;;;;;33604:5:0;;;;:24;;:43;;33629:7;;33638:8;;33604:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;33663:27:0;;;;;;:16;:27;;;;;:39;;33694:8;;33663:27;:39;;33694:8;;33663:39;:::i;:::-;;;;-1:-1:-1;;33798:8:0;;33776:50;;687:25:1;;;-1:-1:-1;;;;;33776:50:0;;;;33798:8;;33786:10;;-1:-1:-1;;;;;;;;;;;33776:50:0;675:2:1;660:18;33776:50:0;;;;;;;33570:269;33854:12;;33850:269;;33884:5;;:43;;-1:-1:-1;;;33884:43:0;;-1:-1:-1;;;;;33884:5:0;;;;:24;;:43;;33909:7;;33918:8;;33884:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;33943:27:0;;;;;;:16;:27;;;;;:39;;33974:8;;33943:27;:39;;33974:8;;33943:39;:::i;:::-;;;;-1:-1:-1;;34078:8:0;;34056:50;;687:25:1;;;-1:-1:-1;;;;;34056:50:0;;;;34078:8;;34066:10;;-1:-1:-1;;;;;;;;;;;34056:50:0;675:2:1;660:18;34056:50:0;;;;;;;33850:269;33530:1132;;;34227:8;;34202:44;;-1:-1:-1;;;34202:44:0;;-1:-1:-1;;;;;34202:24:0;;;;;;:44;;34227:8;;;;34237;;34202:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;34283:8:0;;34258:44;;-1:-1:-1;;;34258:44:0;;-1:-1:-1;;;;;34258:24:0;;;;;;:44;;34283:8;;;;34293;;34258:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;34344:8:0;;34322:50;;687:25:1;;;-1:-1:-1;;;;;34322:50:0;;;;34344:8;;34332:10;;-1:-1:-1;;;;;;;;;;;34322:50:0;675:2:1;660:18;34322:50:0;;;;;;;34414:8;;34392:50;;687:25:1;;;-1:-1:-1;;;;;34392:50:0;;;;34414:8;;34402:10;;-1:-1:-1;;;;;;;;;;;34392:50:0;675:2:1;660:18;34392:50:0;;;;;;;-1:-1:-1;;;;;34457:27:0;;;;;;:16;:27;;;;;:39;;34488:8;;34457:27;:39;;34488:8;;34457:39;:::i;:::-;;;;-1:-1:-1;;;;;;;34561:27:0;;;;;;:16;:27;;;;;:39;;34592:8;;34561:27;:39;;34592:8;;34561:39;:::i;:::-;;;;-1:-1:-1;;33530:1132:0;34674:27;;;;;;28695:6014;;:::o;11004:204::-;11131:68;;-1:-1:-1;;;;;18255:15:1;;;11131:68:0;;;18237:34:1;18307:15;;18287:18;;;18280:43;18339:18;;;18332:34;;;11105:95:0;;11124:5;;-1:-1:-1;;;11154:27:0;18172:18:1;;11131:68:0;17997:375:1;11105:95:0;11004:204;;;;:::o;25063:666::-;10567:1;10550:13;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;10579:20:0;10602:13;;;25161:7;;38510:483:::1;38527:12;:19:::0;38523:23;::::1;38510:483;;;38568:13;38584:12;38597:1;38584:15;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;38584:15:0::1;::::0;-1:-1:-1;38655:21:0::1;38584:15:::0;38655:14:::1;:21::i;:::-;-1:-1:-1::0;;;;;38614:17:0;::::1;;::::0;;;:10:::1;:17;::::0;;;;:38:::1;;:62:::0;38726:31:::1;38625:5:::0;38726:24:::1;:31::i;:::-;-1:-1:-1::0;;;;;38691:17:0;;::::1;;::::0;;;:10:::1;:17;::::0;;;;:32:::1;;:66:::0;;;;38776:21;::::1;::::0;38772:210:::1;;38844:24;38853:7;38862:5;38844:8;:24::i;:::-;-1:-1:-1::0;;;;;38818:16:0;;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:23;;::::1;::::0;;;;;;;;;:50;;;;38928:10:::1;:17:::0;;;;;:38:::1;::::0;;::::1;::::0;38887:31;;;;;;;;:38;;;;;;;;;;:79;38772:210:::1;-1:-1:-1::0;38548:3:0;::::1;::::0;::::1;:::i;:::-;;;;38510:483;;;;25186:6:::2;25181:518;25198:7;:14;25194:1;:18;25181:518;;;25234:21;25258:7;25266:1;25258:10;;;;;;;;:::i;:::-;;::::0;;::::2;::::0;;;;;;;-1:-1:-1;;;;;25301:16:0;;::::2;25283:15;25301:16:::0;;;:7:::2;:16:::0;;;;;;:31;;::::2;::::0;;;;;;;;;;25258:10;;-1:-1:-1;25351:11:0;;25347:341:::2;;-1:-1:-1::0;;;;;25383:16:0;;::::2;25417:1;25383:16:::0;;;:7:::2;:16;::::0;;;;;;;:31;;::::2;::::0;;;;;;;;;:35;25437:52:::2;::::0;25391:7;25481;25437:34:::2;:52::i;:::-;25541:7;-1:-1:-1::0;;;;;25513:45:0::2;25526:13;-1:-1:-1::0;;;;;25513:45:0::2;;25550:7;25513:45;;;;687:25:1::0;;675:2;660:18;;541:177;25513:45:0::2;;;;;;;;-1:-1:-1::0;;;;;25577:22:0;::::2;;::::0;;;:7:::2;:22;::::0;;;;:33;;25603:7;;25577:22;:33:::2;::::0;25603:7;;25577:33:::2;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;25629:17:0;;::::2;;::::0;;;:8:::2;:17;::::0;;;;;;;:32;;::::2;::::0;;;;;;;;:43;;25665:7;;25629:17;:43:::2;::::0;25665:7;;25629:43:::2;:::i;:::-;::::0;;;-1:-1:-1;;25347:341:0::2;25219:480;;25214:3;;;;;:::i;:::-;;;;25181:518;;;;25709:12;:10;:12::i;9371:106::-:0;9429:7;9460:1;9456;:5;:13;;9468:1;9456:13;;;-1:-1:-1;9464:1:0;;9371:106;-1:-1:-1;9371:106:0:o;12814:1114::-;-1:-1:-1;;;;;13418:25:0;;9039:20;13410:71;;;;-1:-1:-1;;;13410:71:0;;18579:2:1;13410:71:0;;;18561:21:1;18618:2;18598:18;;;18591:30;18657:33;18637:18;;;18630:61;18708:18;;13410:71:0;18377:355:1;13410:71:0;13555:12;13569:23;13604:5;-1:-1:-1;;;;;13596:19:0;13616:4;13596:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13554:67;;;;13640:7;13632:52;;;;-1:-1:-1;;;13632:52:0;;19370:2:1;13632:52:0;;;19352:21:1;;;19389:18;;;19382:30;19448:34;19428:18;;;19421:62;19500:18;;13632:52:0;19168:356:1;13632:52:0;13701:17;;:21;13697:224;;13843:10;13832:30;;;;;;;;;;;;:::i;:::-;13824:85;;;;-1:-1:-1;;;13824:85:0;;19731:2:1;13824:85:0;;;19713:21:1;19770:2;19750:18;;;19743:30;19809:34;19789:18;;;19782:62;-1:-1:-1;;;19860:18:1;;;19853:40;19910:19;;13824:85:0;19529:406:1;14:131;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:134;218:20;;247:31;218:20;247:31;:::i;:::-;150:134;;;:::o;289:247::-;348:6;401:2;389:9;380:7;376:23;372:32;369:52;;;417:1;414;407:12;369:52;456:9;443:23;475:31;500:5;475:31;:::i;723:388::-;791:6;799;852:2;840:9;831:7;827:23;823:32;820:52;;;868:1;865;858:12;820:52;907:9;894:23;926:31;951:5;926:31;:::i;:::-;976:5;-1:-1:-1;1033:2:1;1018:18;;1005:32;1046:33;1005:32;1046:33;:::i;:::-;1098:7;1088:17;;;723:388;;;;;:::o;1116:118::-;1202:5;1195:13;1188:21;1181:5;1178:32;1168:60;;1224:1;1221;1214:12;1239:241;1295:6;1348:2;1336:9;1327:7;1323:23;1319:32;1316:52;;;1364:1;1361;1354:12;1316:52;1403:9;1390:23;1422:28;1444:5;1422:28;:::i;1714:315::-;1782:6;1790;1843:2;1831:9;1822:7;1818:23;1814:32;1811:52;;;1859:1;1856;1849:12;1811:52;1898:9;1885:23;1917:31;1942:5;1917:31;:::i;:::-;1967:5;2019:2;2004:18;;;;1991:32;;-1:-1:-1;;;1714:315:1:o;2034:180::-;2093:6;2146:2;2134:9;2125:7;2121:23;2117:32;2114:52;;;2162:1;2159;2152:12;2114:52;-1:-1:-1;2185:23:1;;2034:180;-1:-1:-1;2034:180:1:o;2219:127::-;2280:10;2275:3;2271:20;2268:1;2261:31;2311:4;2308:1;2301:15;2335:4;2332:1;2325:15;2351:908;2405:5;2458:3;2451:4;2443:6;2439:17;2435:27;2425:55;;2476:1;2473;2466:12;2425:55;2512:6;2499:20;2538:4;2561:18;2598:2;2594;2591:10;2588:36;;;2604:18;;:::i;:::-;2650:2;2647:1;2643:10;2682:2;2676:9;2745:2;2741:7;2736:2;2732;2728:11;2724:25;2716:6;2712:38;2800:6;2788:10;2785:22;2780:2;2768:10;2765:18;2762:46;2759:72;;;2811:18;;:::i;:::-;2847:2;2840:22;2897:18;;;2973:15;;;2969:24;;;2931:15;;;;-1:-1:-1;3005:15:1;;;3002:35;;;3033:1;3030;3023:12;3002:35;3069:2;3061:6;3057:15;3046:26;;3081:148;3097:6;3092:3;3089:15;3081:148;;;3163:23;3182:3;3163:23;:::i;:::-;3151:36;;3207:12;;;;3114;;;;3081:148;;;3247:6;2351:908;-1:-1:-1;;;;;;;2351:908:1:o;3264:483::-;3357:6;3365;3418:2;3406:9;3397:7;3393:23;3389:32;3386:52;;;3434:1;3431;3424:12;3386:52;3473:9;3460:23;3492:31;3517:5;3492:31;:::i;:::-;3542:5;-1:-1:-1;3598:2:1;3583:18;;3570:32;3625:18;3614:30;;3611:50;;;3657:1;3654;3647:12;3611:50;3680:61;3733:7;3724:6;3713:9;3709:22;3680:61;:::i;:::-;3670:71;;;3264:483;;;;;:::o;5176:348::-;5260:6;5313:2;5301:9;5292:7;5288:23;5284:32;5281:52;;;5329:1;5326;5319:12;5281:52;5369:9;5356:23;5402:18;5394:6;5391:30;5388:50;;;5434:1;5431;5424:12;5388:50;5457:61;5510:7;5501:6;5490:9;5486:22;5457:61;:::i;5737:456::-;5814:6;5822;5830;5883:2;5871:9;5862:7;5858:23;5854:32;5851:52;;;5899:1;5896;5889:12;5851:52;5935:9;5922:23;5912:33;;5995:2;5984:9;5980:18;5967:32;6008:31;6033:5;6008:31;:::i;:::-;6058:5;-1:-1:-1;6115:2:1;6100:18;;6087:32;6128:33;6087:32;6128:33;:::i;:::-;6180:7;6170:17;;;5737:456;;;;;:::o;6198:::-;6275:6;6283;6291;6344:2;6332:9;6323:7;6319:23;6315:32;6312:52;;;6360:1;6357;6350:12;6312:52;6399:9;6386:23;6418:31;6443:5;6418:31;:::i;:::-;6468:5;-1:-1:-1;6525:2:1;6510:18;;6497:32;6538:33;6497:32;6538:33;:::i;:::-;6198:456;;6590:7;;-1:-1:-1;;;6644:2:1;6629:18;;;;6616:32;;6198:456::o;6912:251::-;6982:6;7035:2;7023:9;7014:7;7010:23;7006:32;7003:52;;;7051:1;7048;7041:12;7003:52;7083:9;7077:16;7102:31;7127:5;7102:31;:::i;7168:337::-;7370:2;7352:21;;;7409:2;7389:18;;;7382:30;-1:-1:-1;;;7443:2:1;7428:18;;7421:43;7496:2;7481:18;;7168:337::o;8214:274::-;-1:-1:-1;;;;;8406:32:1;;;;8388:51;;8470:2;8455:18;;8448:34;8376:2;8361:18;;8214:274::o;8493:245::-;8560:6;8613:2;8601:9;8592:7;8588:23;8584:32;8581:52;;;8629:1;8626;8619:12;8581:52;8661:9;8655:16;8680:28;8702:5;8680:28;:::i;9459:127::-;9520:10;9515:3;9511:20;9508:1;9501:31;9551:4;9548:1;9541:15;9575:4;9572:1;9565:15;9591:128;9631:3;9662:1;9658:6;9655:1;9652:13;9649:39;;;9668:18;;:::i;:::-;-1:-1:-1;9704:9:1;;9591:128::o;9724:127::-;9785:10;9780:3;9776:20;9773:1;9766:31;9816:4;9813:1;9806:15;9840:4;9837:1;9830:15;9856:135;9895:3;-1:-1:-1;;9916:17:1;;9913:43;;;9936:18;;:::i;:::-;-1:-1:-1;9983:1:1;9972:13;;9856:135::o;10342:355::-;10544:2;10526:21;;;10583:2;10563:18;;;10556:30;10622:33;10617:2;10602:18;;10595:61;10688:2;10673:18;;10342:355::o;11380:184::-;11450:6;11503:2;11491:9;11482:7;11478:23;11474:32;11471:52;;;11519:1;11516;11509:12;11471:52;-1:-1:-1;11542:16:1;;11380:184;-1:-1:-1;11380:184:1:o;12555:125::-;12595:4;12623:1;12620;12617:8;12614:34;;;12628:18;;:::i;:::-;-1:-1:-1;12665:9:1;;12555:125::o;12685:127::-;12746:10;12741:3;12737:20;12734:1;12727:31;12777:4;12774:1;12767:15;12801:4;12798:1;12791:15;15849:168;15889:7;15955:1;15951;15947:6;15943:14;15940:1;15937:21;15932:1;15925:9;15918:17;15914:45;15911:71;;;15962:18;;:::i;:::-;-1:-1:-1;16002:9:1;;15849:168::o;16022:217::-;16062:1;16088;16078:132;;16132:10;16127:3;16123:20;16120:1;16113:31;16167:4;16164:1;16157:15;16195:4;16192:1;16185:15;16078:132;-1:-1:-1;16224:9:1;;16022:217::o;17357:245::-;17436:6;17444;17497:2;17485:9;17476:7;17472:23;17468:32;17465:52;;;17513:1;17510;17503:12;17465:52;-1:-1:-1;;17536:16:1;;17592:2;17577:18;;;17571:25;17536:16;;17571:25;;-1:-1:-1;17357:245:1:o;17607:385::-;17686:6;17694;17747:2;17735:9;17726:7;17722:23;17718:32;17715:52;;;17763:1;17760;17753:12;17715:52;17795:9;17789:16;17814:31;17839:5;17814:31;:::i;:::-;17914:2;17899:18;;17893:25;17864:5;;-1:-1:-1;17927:33:1;17893:25;17927:33;:::i;18737:426::-;18866:3;18904:6;18898:13;18929:1;18939:129;18953:6;18950:1;18947:13;18939:129;;;19051:4;19035:14;;;19031:25;;19025:32;19012:11;;;19005:53;18968:12;18939:129;;;19086:6;19083:1;19080:13;19077:48;;;19121:1;19112:6;19107:3;19103:16;19096:27;19077:48;-1:-1:-1;19141:16:1;;;;;18737:426;-1:-1:-1;;18737:426:1:o

Swarm Source

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

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

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