Contract Overview
My Name Tag:
Not Available, login to update
[ Download CSV Export ]
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0xf7dc4C9F0bEc927a411E47E8dfa9616E2b0d1C4F
Contract Name:
MiniChefV2
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at moonbeam.moonscan.io on 2022-07-04 */ /** *Submitted for verification at moonbase.moonscan.io on 2022-04-25 */ /** *Submitted for verification at moonbase.moonscan.io on 2022-03-25 */ // Sources flattened with hardhat v2.6.8 https://hardhat.org // File @boringcrypto/boring-solidity/contracts/libraries/[email protected] // SPDX-License-Identifier: MIT pragma solidity 0.6.12; // a library for performing overflow-safe math, updated with awesomeness from of DappHub (https://github.com/dapphub/ds-math) library BoringMath { function add(uint256 a, uint256 b) internal pure returns (uint256 c) {require((c = a + b) >= b, "BoringMath: Add Overflow");} function sub(uint256 a, uint256 b) internal pure returns (uint256 c) {require((c = a - b) <= a, "BoringMath: Underflow");} function mul(uint256 a, uint256 b) internal pure returns (uint256 c) {require(b == 0 || (c = a * b)/b == a, "BoringMath: Mul Overflow");} function to128(uint256 a) internal pure returns (uint128 c) { require(a <= uint128(-1), "BoringMath: uint128 Overflow"); c = uint128(a); } function to64(uint256 a) internal pure returns (uint64 c) { require(a <= uint64(-1), "BoringMath: uint64 Overflow"); c = uint64(a); } function to32(uint256 a) internal pure returns (uint32 c) { require(a <= uint32(-1), "BoringMath: uint32 Overflow"); c = uint32(a); } } library BoringMath128 { function add(uint128 a, uint128 b) internal pure returns (uint128 c) {require((c = a + b) >= b, "BoringMath: Add Overflow");} function sub(uint128 a, uint128 b) internal pure returns (uint128 c) {require((c = a - b) <= a, "BoringMath: Underflow");} } library BoringMath64 { function add(uint64 a, uint64 b) internal pure returns (uint64 c) {require((c = a + b) >= b, "BoringMath: Add Overflow");} function sub(uint64 a, uint64 b) internal pure returns (uint64 c) {require((c = a - b) <= a, "BoringMath: Underflow");} } library BoringMath32 { function add(uint32 a, uint32 b) internal pure returns (uint32 c) {require((c = a + b) >= b, "BoringMath: Add Overflow");} function sub(uint32 a, uint32 b) internal pure returns (uint32 c) {require((c = a - b) <= a, "BoringMath: Underflow");} } // File @boringcrypto/boring-solidity/contracts/interfaces/[email protected] pragma solidity 0.6.12; interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); // EIP 2612 function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external; } // File @boringcrypto/boring-solidity/contracts/libraries/[email protected] pragma solidity 0.6.12; library BoringERC20 { function safeSymbol(IERC20 token) internal view returns(string memory) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x95d89b41)); return success && data.length > 0 ? abi.decode(data, (string)) : "???"; } function safeName(IERC20 token) internal view returns(string memory) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x06fdde03)); return success && data.length > 0 ? abi.decode(data, (string)) : "???"; } function safeDecimals(IERC20 token) internal view returns (uint8) { (bool success, bytes memory data) = address(token).staticcall(abi.encodeWithSelector(0x313ce567)); return success && data.length == 32 ? abi.decode(data, (uint8)) : 18; } function safeTransfer(IERC20 token, address to, uint256 amount) internal { (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0xa9059cbb, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: Transfer failed"); } function safeTransferFrom(IERC20 token, address from, address to, uint256 amount) internal { (bool success, bytes memory data) = address(token).call(abi.encodeWithSelector(0x23b872dd, from, to, amount)); require(success && (data.length == 0 || abi.decode(data, (bool))), "BoringERC20: TransferFrom failed"); } } // File @boringcrypto/boring-solidity/contracts/[email protected] // Audit on 5-Jan-2021 by Keno and BoringCrypto // P1 - P3: OK pragma solidity 0.6.12; pragma experimental ABIEncoderV2; // solhint-disable avoid-low-level-calls // T1 - T4: OK contract BaseBoringBatchable { function _getRevertMsg(bytes memory _returnData) internal pure returns (string memory) { // If the _res length is less than 68, then the transaction failed silently (without a revert message) if (_returnData.length < 68) return "Transaction reverted silently"; assembly { // Slice the sighash. _returnData := add(_returnData, 0x04) } return abi.decode(_returnData, (string)); // All that remains is the revert string } // F3 - F9: OK // F1: External is ok here because this is the batch function, adding it to a batch makes no sense // F2: Calls in the batch may be payable, delegatecall operates in the same context, so each call in the batch has access to msg.value // C1 - C21: OK // C3: The length of the loop is fully under user control, so can't be exploited // C7: Delegatecall is only used on the same contract, so it's safe function batch(bytes[] calldata calls, bool revertOnFail) external payable returns(bool[] memory successes, bytes[] memory results) { // Interactions successes = new bool[](calls.length); results = new bytes[](calls.length); for (uint256 i = 0; i < calls.length; i++) { (bool success, bytes memory result) = address(this).delegatecall(calls[i]); require(success || !revertOnFail, _getRevertMsg(result)); successes[i] = success; results[i] = result; } } } // T1 - T4: OK contract BoringBatchable is BaseBoringBatchable { // F1 - F9: OK // F6: Parameters can be used front-run the permit and the user's permit will fail (due to nonce or other revert) // if part of a batch this could be used to grief once as the second call would not need the permit // C1 - C21: OK function permitToken(IERC20 token, address from, address to, uint256 amount, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public { // Interactions // X1 - X5 token.permit(from, to, amount, deadline, v, r, s); } } // File @boringcrypto/boring-solidity/contracts/[email protected] // Audit on 5-Jan-2021 by Keno and BoringCrypto // P1 - P3: OK pragma solidity 0.6.12; // Source: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol + Claimable.sol // Edited by BoringCrypto // T1 - T4: OK contract BoringOwnableData { // V1 - V5: OK address public owner; // V1 - V5: OK address public pendingOwner; } // T1 - T4: OK contract BoringOwnable is BoringOwnableData { // E1: OK event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () public { owner = msg.sender; emit OwnershipTransferred(address(0), msg.sender); } // F1 - F9: OK // C1 - C21: OK function transferOwnership(address newOwner, bool direct, bool renounce) public onlyOwner { if (direct) { // Checks require(newOwner != address(0) || renounce, "Ownable: zero address"); // Effects emit OwnershipTransferred(owner, newOwner); owner = newOwner; pendingOwner = address(0); } else { // Effects pendingOwner = newOwner; } } // F1 - F9: OK // C1 - C21: OK function claimOwnership() public { address _pendingOwner = pendingOwner; // Checks require(msg.sender == _pendingOwner, "Ownable: caller != pending owner"); // Effects emit OwnershipTransferred(owner, _pendingOwner); owner = _pendingOwner; pendingOwner = address(0); } // M1 - M5: OK // C1 - C21: OK modifier onlyOwner() { require(msg.sender == owner, "Ownable: caller is not the owner"); _; } } // File contracts/libraries/SignedSafeMath.sol pragma solidity 0.6.12; library SignedSafeMath { int256 constant private _INT256_MIN = -2**255; /** * @dev Returns the multiplication of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } require(!(a == -1 && b == _INT256_MIN), "SignedSafeMath: multiplication overflow"); int256 c = a * b; require(c / a == b, "SignedSafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two signed 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(int256 a, int256 b) internal pure returns (int256) { require(b != 0, "SignedSafeMath: division by zero"); require(!(b == -1 && a == _INT256_MIN), "SignedSafeMath: division overflow"); int256 c = a / b; return c; } /** * @dev Returns the subtraction of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a), "SignedSafeMath: subtraction overflow"); return c; } /** * @dev Returns the addition of two signed integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a), "SignedSafeMath: addition overflow"); return c; } function toUInt256(int256 a) internal pure returns (uint256) { require(a >= 0, "Integer < 0"); return uint256(a); } } // File contracts/interfaces/IRewarder.sol pragma solidity 0.6.12; interface IRewarder { using BoringERC20 for IERC20; function onEnergyFiReward(uint256 pid, address user, address recipient, uint256 energyFiAmount, uint256 newLpAmount) external; function pendingTokens(uint256 pid, address user, uint256 energyFiAmount) external view returns (IERC20[] memory, uint256[] memory); } // File contracts/interfaces/IMasterChef.sol pragma solidity 0.6.12; interface IMasterChef { using BoringERC20 for IERC20; struct UserInfo { uint256 amount; // How many LP tokens the user has provided. uint256 rewardDebt; // Reward debt. See explanation below. } struct PoolInfo { IERC20 lpToken; // Address of LP token contract. uint256 allocPoint; // How many allocation points assigned to this pool. ENERGYFI to distribute per block. uint256 lastRewardBlock; // Last block number that ENERGYFI distribution occurs. uint256 accEnergyFiPerShare; // Accumulated ENERGYFI per share, times 1e12. See below. } function poolInfo(uint256 pid) external view returns (IMasterChef.PoolInfo memory); function totalAllocPoint() external view returns (uint256); function deposit(uint256 _pid, uint256 _amount) external; } // File contracts/MiniChefV2.sol pragma solidity 0.6.12; interface IMigratorChef { // Take the current LP token address and return the new LP token address. // Migrator should have full access to the caller's LP token. function migrate(IERC20 token) external returns (IERC20); } /// @notice The (older) MasterChef contract gives out a constant number of ENERGYFI tokens per block. /// It is the only address with minting rights for ENERGYFI. /// The idea for this MasterChef V2 (MCV2) contract is therefore to be the owner of a dummy token /// that is deposited into the MasterChef V1 (MCV1) contract. /// The allocation point for this pool on MCV1 is the total allocation point for all pools that receive double incentives. contract MiniChefV2 is BoringOwnable, BoringBatchable { using BoringMath for uint256; using BoringMath128 for uint128; using BoringERC20 for IERC20; using SignedSafeMath for int256; /// @notice Info of each MCV2 user. /// `amount` LP token amount the user has provided. /// `rewardDebt` The amount of ENERGYFI entitled to the user. struct UserInfo { uint256 amount; int256 rewardDebt; } /// @notice Info of each MCV2 pool. /// `allocPoint` The amount of allocation points assigned to the pool. /// Also known as the amount of ENERGYFI to distribute per block. struct PoolInfo { uint128 accEnergyFiPerShare; uint64 lastRewardTime; uint64 allocPoint; } /// @notice Address of ENERGYFI contract. IERC20 public ENERGYFI; // @notice The migrator contract. It has a lot of power. Can only be set through governance (owner). IMigratorChef public migrator; /// @notice Info of each MCV2 pool. PoolInfo[] public poolInfo; /// @notice Address of the LP token for each MCV2 pool. IERC20[] public lpToken; /// @notice Address of each `IRewarder` contract in MCV2. IRewarder[] public rewarder; /// @notice Info of each user that stakes LP tokens. mapping (uint256 => mapping (address => UserInfo)) public userInfo; /// @dev Tokens added mapping (address => bool) public addedTokens; /// @dev Total allocation points. Must be the sum of all allocation points in all pools. uint256 public totalAllocPoint; uint256 private setMigratorCallOnlyOnce ; uint256 public energyFiPerSecond; uint256 private constant ACC_ENERGYFI_PRECISION = 1e12; event Deposit(address indexed user, uint256 indexed pid, uint256 amount, address indexed to); event Withdraw(address indexed user, uint256 indexed pid, uint256 amount, address indexed to); event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount, address indexed to); event Harvest(address indexed user, uint256 indexed pid, uint256 amount); event LogPoolAddition(uint256 indexed pid, uint256 allocPoint, IERC20 indexed lpToken, IRewarder indexed rewarder); event LogSetPool(uint256 indexed pid, uint256 allocPoint, IRewarder indexed rewarder, bool overwrite); event LogUpdatePool(uint256 indexed pid, uint64 lastRewardTime, uint256 lpSupply, uint256 accEnergyFiPerShare); event LogEnergyFiPerSecond(uint256 energyFiPerSecond); /// @param _energyFi The ENERGYFI token contract address. constructor(IERC20 _energyFi) public { ENERGYFI = _energyFi; } /// @notice Returns the number of MCV2 pools. function poolLength() public view returns (uint256 pools) { pools = poolInfo.length; } /// @notice Add a new LP to the pool. Can only be called by the owner. /// DO NOT add the same LP token more than once. Rewards will be messed up if you do. /// @param allocPoint AP of the new pool. /// @param _lpToken Address of the LP ERC-20 token. /// @param _rewarder Address of the rewarder delegate. function add(uint256 allocPoint, IERC20 _lpToken, IRewarder _rewarder) public onlyOwner { require(addedTokens[address(_lpToken)] == false, "Token already added"); totalAllocPoint = totalAllocPoint.add(allocPoint); lpToken.push(_lpToken); rewarder.push(_rewarder); poolInfo.push(PoolInfo({ allocPoint: allocPoint.to64(), lastRewardTime: block.timestamp.to64(), accEnergyFiPerShare: 0 })); addedTokens[address(_lpToken)] = true; emit LogPoolAddition(lpToken.length.sub(1), allocPoint, _lpToken, _rewarder); } /// @notice Update the given pool's ENERGYFI allocation point and `IRewarder` contract. Can only be called by the owner. /// @param _pid The index of the pool. See `poolInfo`. /// @param _allocPoint New AP of the pool. /// @param _rewarder Address of the rewarder delegate. /// @param overwrite True if _rewarder should be `set`. Otherwise `_rewarder` is ignored. function set(uint256 _pid, uint256 _allocPoint, IRewarder _rewarder, bool overwrite) public onlyOwner { totalAllocPoint = totalAllocPoint.sub(poolInfo[_pid].allocPoint).add(_allocPoint); poolInfo[_pid].allocPoint = _allocPoint.to64(); if (overwrite) { rewarder[_pid] = _rewarder; } emit LogSetPool(_pid, _allocPoint, overwrite ? _rewarder : rewarder[_pid], overwrite); } /// @notice Sets the energyFi per second to be distributed. Can only be called by the owner. /// @param _energyFiPerSecond The amount of EnergyFi to be distributed per second. function setEnergyFiPerSecond(uint256 _energyFiPerSecond) public onlyOwner { energyFiPerSecond = _energyFiPerSecond; emit LogEnergyFiPerSecond(_energyFiPerSecond); } /// @notice Set the `migrator` contract. Can only be called by the owner and Call only single time. /// @param _migrator The contract address to set. function setMigrator(IMigratorChef _migrator) public onlyOwner { require(setMigratorCallOnlyOnce<1,"migrator only set once"); migrator = _migrator; setMigratorCallOnlyOnce = setMigratorCallOnlyOnce.add(1); } /// @notice Migrate LP token to another LP contract through the `migrator` contract. /// @param _pid The index of the pool. See `poolInfo`. function migrate(uint256 _pid) public { require(address(migrator) != address(0), "MasterChefV2: no migrator set"); IERC20 _lpToken = lpToken[_pid]; uint256 bal = _lpToken.balanceOf(address(this)); _lpToken.approve(address(migrator), bal); IERC20 newLpToken = migrator.migrate(_lpToken); require(bal == newLpToken.balanceOf(address(this)), "MasterChefV2: migrated balance must match"); require(addedTokens[address(newLpToken)] == false, "Token already added"); addedTokens[address(newLpToken)] = true; addedTokens[address(_lpToken)] = false; lpToken[_pid] = newLpToken; } /// @notice View function to see pending ENERGYFI on frontend. /// @param _pid The index of the pool. See `poolInfo`. /// @param _user Address of user. /// @return pending ENERGYFI reward for a given user. function pendingEnergyFi(uint256 _pid, address _user) external view returns (uint256 pending) { PoolInfo memory pool = poolInfo[_pid]; UserInfo storage user = userInfo[_pid][_user]; uint256 accEnergyFiPerShare = pool.accEnergyFiPerShare; uint256 lpSupply = lpToken[_pid].balanceOf(address(this)); if (block.timestamp > pool.lastRewardTime && lpSupply != 0) { uint256 time = block.timestamp.sub(pool.lastRewardTime); uint256 energyFiReward = time.mul(energyFiPerSecond).mul(pool.allocPoint) / totalAllocPoint; accEnergyFiPerShare = accEnergyFiPerShare.add(energyFiReward.mul(ACC_ENERGYFI_PRECISION) / lpSupply); } pending = int256(user.amount.mul(accEnergyFiPerShare) / ACC_ENERGYFI_PRECISION).sub(user.rewardDebt).toUInt256(); } /// @notice Update reward variables for all pools. Be careful of gas spending! /// @param pids Pool IDs of all to be updated. Make sure to update all active pools. function massUpdatePools(uint256[] calldata pids) external { uint256 len = pids.length; for (uint256 i = 0; i < len; ++i) { updatePool(pids[i]); } } /// @notice Update reward variables of the given pool. /// @param pid The index of the pool. See `poolInfo`. /// @return pool Returns the pool that was updated. function updatePool(uint256 pid) public returns (PoolInfo memory pool) { pool = poolInfo[pid]; if (block.timestamp > pool.lastRewardTime) { uint256 lpSupply = lpToken[pid].balanceOf(address(this)); if (lpSupply > 0) { uint256 time = block.timestamp.sub(pool.lastRewardTime); uint256 energyFiReward = time.mul(energyFiPerSecond).mul(pool.allocPoint) / totalAllocPoint; pool.accEnergyFiPerShare = pool.accEnergyFiPerShare.add((energyFiReward.mul(ACC_ENERGYFI_PRECISION) / lpSupply).to128()); } pool.lastRewardTime = block.timestamp.to64(); poolInfo[pid] = pool; emit LogUpdatePool(pid, pool.lastRewardTime, lpSupply, pool.accEnergyFiPerShare); } } /// @notice Deposit LP tokens to MCV2 for ENERGYFI allocation. /// @param pid The index of the pool. See `poolInfo`. /// @param amount LP token amount to deposit. /// @param to The receiver of `amount` deposit benefit. function deposit(uint256 pid, uint256 amount, address to) public { PoolInfo memory pool = updatePool(pid); UserInfo storage user = userInfo[pid][to]; // Effects user.amount = user.amount.add(amount); user.rewardDebt = user.rewardDebt.add(int256(amount.mul(pool.accEnergyFiPerShare) / ACC_ENERGYFI_PRECISION)); // Interactions IRewarder _rewarder = rewarder[pid]; if (address(_rewarder) != address(0)) { _rewarder.onEnergyFiReward(pid, to, to, 0, user.amount); } lpToken[pid].safeTransferFrom(msg.sender, address(this), amount); emit Deposit(msg.sender, pid, amount, to); } /// @notice Withdraw LP tokens from MCV2. /// @param pid The index of the pool. See `poolInfo`. /// @param amount LP token amount to withdraw. /// @param to Receiver of the LP tokens. function withdraw(uint256 pid, uint256 amount, address to) public { PoolInfo memory pool = updatePool(pid); UserInfo storage user = userInfo[pid][msg.sender]; // Effects user.rewardDebt = user.rewardDebt.sub(int256(amount.mul(pool.accEnergyFiPerShare) / ACC_ENERGYFI_PRECISION)); user.amount = user.amount.sub(amount); // Interactions IRewarder _rewarder = rewarder[pid]; if (address(_rewarder) != address(0)) { _rewarder.onEnergyFiReward(pid, msg.sender, to, 0, user.amount); } lpToken[pid].safeTransfer(to, amount); emit Withdraw(msg.sender, pid, amount, to); } /// @notice Harvest proceeds for transaction sender to `to`. /// @param pid The index of the pool. See `poolInfo`. /// @param to Receiver of ENERGYFI rewards. function harvest(uint256 pid, address to) public { PoolInfo memory pool = updatePool(pid); UserInfo storage user = userInfo[pid][msg.sender]; int256 accumulatedEnergyFi = int256(user.amount.mul(pool.accEnergyFiPerShare) / ACC_ENERGYFI_PRECISION); uint256 _pendingEnergyFi = accumulatedEnergyFi.sub(user.rewardDebt).toUInt256(); // Effects user.rewardDebt = accumulatedEnergyFi; // Interactions if (_pendingEnergyFi != 0) { ENERGYFI.safeTransfer(to, _pendingEnergyFi); } IRewarder _rewarder = rewarder[pid]; if (address(_rewarder) != address(0)) { _rewarder.onEnergyFiReward( pid, msg.sender, to, _pendingEnergyFi, user.amount); } emit Harvest(msg.sender, pid, _pendingEnergyFi); } /// @notice Withdraw LP tokens from MCV2 and harvest proceeds for transaction sender to `to`. /// @param pid The index of the pool. See `poolInfo`. /// @param amount LP token amount to withdraw. /// @param to Receiver of the LP tokens and ENERGYFI rewards. function withdrawAndHarvest(uint256 pid, uint256 amount, address to) public { PoolInfo memory pool = updatePool(pid); UserInfo storage user = userInfo[pid][msg.sender]; int256 accumulatedEnergyFi = int256(user.amount.mul(pool.accEnergyFiPerShare) / ACC_ENERGYFI_PRECISION); uint256 _pendingEnergyFi = accumulatedEnergyFi.sub(user.rewardDebt).toUInt256(); // Effects user.rewardDebt = accumulatedEnergyFi.sub(int256(amount.mul(pool.accEnergyFiPerShare) / ACC_ENERGYFI_PRECISION)); user.amount = user.amount.sub(amount); // Interactions ENERGYFI.safeTransfer(to, _pendingEnergyFi); IRewarder _rewarder = rewarder[pid]; if (address(_rewarder) != address(0)) { _rewarder.onEnergyFiReward(pid, msg.sender, to, _pendingEnergyFi, user.amount); } lpToken[pid].safeTransfer(to, amount); emit Withdraw(msg.sender, pid, amount, to); emit Harvest(msg.sender, pid, _pendingEnergyFi); } /// @notice Withdraw without caring about rewards. EMERGENCY ONLY. /// @param pid The index of the pool. See `poolInfo`. /// @param to Receiver of the LP tokens. function emergencyWithdraw(uint256 pid, address to) public { UserInfo storage user = userInfo[pid][msg.sender]; uint256 amount = user.amount; user.amount = 0; user.rewardDebt = 0; IRewarder _rewarder = rewarder[pid]; if (address(_rewarder) != address(0)) { _rewarder.onEnergyFiReward(pid, msg.sender, to, 0, 0); } // Note: transfer can fail or succeed if `amount` is zero. lpToken[pid].safeTransfer(to, amount); emit EmergencyWithdraw(msg.sender, pid, amount, to); } }
[{"inputs":[{"internalType":"contract IERC20","name":"_energyFi","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"EmergencyWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"energyFiPerSecond","type":"uint256"}],"name":"LogEnergyFiPerSecond","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":true,"internalType":"contract IERC20","name":"lpToken","type":"address"},{"indexed":true,"internalType":"contract IRewarder","name":"rewarder","type":"address"}],"name":"LogPoolAddition","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"allocPoint","type":"uint256"},{"indexed":true,"internalType":"contract IRewarder","name":"rewarder","type":"address"},{"indexed":false,"internalType":"bool","name":"overwrite","type":"bool"}],"name":"LogSetPool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint64","name":"lastRewardTime","type":"uint64"},{"indexed":false,"internalType":"uint256","name":"lpSupply","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"accEnergyFiPerShare","type":"uint256"}],"name":"LogUpdatePool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"ENERGYFI","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"},{"internalType":"contract IRewarder","name":"_rewarder","type":"address"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addedTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"calls","type":"bytes[]"},{"internalType":"bool","name":"revertOnFail","type":"bool"}],"name":"batch","outputs":[{"internalType":"bool[]","name":"successes","type":"bool[]"},{"internalType":"bytes[]","name":"results","type":"bytes[]"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claimOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"energyFiPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"harvest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lpToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"pids","type":"uint256[]"}],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"migrator","outputs":[{"internalType":"contract IMigratorChef","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingEnergyFi","outputs":[{"internalType":"uint256","name":"pending","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permitToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"uint128","name":"accEnergyFiPerShare","type":"uint128"},{"internalType":"uint64","name":"lastRewardTime","type":"uint64"},{"internalType":"uint64","name":"allocPoint","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"pools","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewarder","outputs":[{"internalType":"contract IRewarder","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IRewarder","name":"_rewarder","type":"address"},{"internalType":"bool","name":"overwrite","type":"bool"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_energyFiPerSecond","type":"uint256"}],"name":"setEnergyFiPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IMigratorChef","name":"_migrator","type":"address"}],"name":"setMigrator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"},{"internalType":"bool","name":"direct","type":"bool"},{"internalType":"bool","name":"renounce","type":"bool"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"}],"name":"updatePool","outputs":[{"components":[{"internalType":"uint128","name":"accEnergyFiPerShare","type":"uint128"},{"internalType":"uint64","name":"lastRewardTime","type":"uint64"},{"internalType":"uint64","name":"allocPoint","type":"uint64"}],"internalType":"struct MiniChefV2.PoolInfo","name":"pool","type":"tuple"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"int256","name":"rewardDebt","type":"int256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"pid","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawAndHarvest","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162002d7f38038062002d7f833981016040819052620000349162000099565b600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600280546001600160a01b0319166001600160a01b0392909216919091179055620000c9565b600060208284031215620000ab578081fd5b81516001600160a01b0381168114620000c2578182fd5b9392505050565b612ca680620000d96000396000f3fe6080604052600436106101c25760003560e01c806357a5b58c116100f75780638dbdbe6d11610095578063c346253d11610064578063c346253d146104f6578063d1abb90714610516578063d2423b5114610536578063e30c397814610557576101c2565b80638dbdbe6d1461047357806393f1a40b14610493578063983a68fa146104c1578063ab7de098146104d6576101c2565b80637c516e94116100d15780637c516e94146104095780637cd07e471461042957806388bba42f1461043e5780638da5cb5b1461045e576101c2565b806357a5b58c1461038f57806378ed5d1f146103af57806379d12ffb146103dc576101c2565b806323cf3118116101645780634c52436f1161013e5780634c52436f1461030d5780634e71e0c81461032d5780634f6c9ec21461034257806351eb05a614610362576101c2565b806323cf3118146102ad5780632f940c70146102cd578063454b0608146102ed576101c2565b80630ad58d2f116101a05780630ad58d2f146102295780631526fe271461024957806317caf6f11461027857806318fccc761461028d576101c2565b8063078dfbe7146101c7578063081e3eda146101e957806308db9a1f14610214575b600080fd5b3480156101d357600080fd5b506101e76101e2366004612288565b61056c565b005b3480156101f557600080fd5b506101fe61065b565b60405161020b9190612b5a565b60405180910390f35b34801561022057600080fd5b506101fe610661565b34801561023557600080fd5b506101e7610244366004612548565b610667565b34801561025557600080fd5b506102696102643660046124b3565b6107f7565b60405161020b93929190612b30565b34801561028457600080fd5b506101fe610839565b34801561029957600080fd5b506101e76102a83660046124e3565b61083f565b3480156102b957600080fd5b506101e76102c836600461226c565b6109bc565b3480156102d957600080fd5b506101e76102e83660046124e3565b610a37565b3480156102f957600080fd5b506101e76103083660046124b3565b610b58565b34801561031957600080fd5b506101fe6103283660046124e3565b610e76565b34801561033957600080fd5b506101e7611076565b34801561034e57600080fd5b506101e761035d3660046124b3565b611103565b34801561036e57600080fd5b5061038261037d3660046124b3565b61116d565b60405161020b9190612af7565b34801561039b57600080fd5b506101e76103aa36600461231b565b6113f1565b3480156103bb57600080fd5b506103cf6103ca3660046124b3565b611427565b60405161020b9190612616565b3480156103e857600080fd5b506103fc6103f736600461226c565b61144e565b60405161020b9190612742565b34801561041557600080fd5b506101e7610424366004612392565b611463565b34801561043557600080fd5b506103cf6114d7565b34801561044a57600080fd5b506101e7610459366004612575565b6114e6565b34801561046a57600080fd5b506103cf611653565b34801561047f57600080fd5b506101e761048e366004612548565b611662565b34801561049f57600080fd5b506104b36104ae3660046124e3565b6117ed565b60405161020b929190612ba2565b3480156104cd57600080fd5b506103cf611811565b3480156104e257600080fd5b506101e76104f1366004612512565b611820565b34801561050257600080fd5b506103cf6105113660046124b3565b611a46565b34801561052257600080fd5b506101e7610531366004612548565b611a53565b6105496105443660046122d2565b611c69565b60405161020b9291906126a8565b34801561056357600080fd5b506103cf611df9565b6000546001600160a01b0316331461059f5760405162461bcd60e51b815260040161059690612942565b60405180910390fd5b811561063a576001600160a01b0383161515806105b95750805b6105d55760405162461bcd60e51b81526004016105969061285c565b600080546040516001600160a01b03808716939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0385166001600160a01b031991821617909155600180549091169055610656565b600180546001600160a01b0319166001600160a01b0385161790555b505050565b60045490565b600b5481565b61066f612204565b6106788461116d565b600085815260076020908152604080832033845290915290208151919250906106ca9064e8d4a51000906106b69087906001600160801b0316611e08565b816106bd57fe5b6001840154919004611e45565b600182015580546106db9085611e92565b81556006805460009190879081106106ef57fe5b6000918252602090912001546001600160a01b0316905080156107755781546040516392c9e72f60e01b81526001600160a01b038316916392c9e72f91610742918a9133918a9160009190600401612b63565b600060405180830381600087803b15801561075c57600080fd5b505af1158015610770573d6000803e3d6000fd5b505050505b6107a384866005898154811061078757fe5b6000918252602090912001546001600160a01b03169190611eb5565b836001600160a01b031686336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec2132886040516107e79190612b5a565b60405180910390a4505050505050565b6004818154811061080457fe5b6000918252602090912001546001600160801b03811691506001600160401b03600160801b8204811691600160c01b90041683565b60095481565b610847612204565b6108508361116d565b6000848152600760209081526040808320338452909152812082518154939450909264e8d4a510009161088c91906001600160801b0316611e08565b8161089357fe5b04905060006108b76108b2846001015484611e4590919063ffffffff16565b611fa3565b60018401839055905080156108dd576002546108dd906001600160a01b03168683611eb5565b6000600687815481106108ec57fe5b6000918252602090912001546001600160a01b0316905080156109715783546040516392c9e72f60e01b81526001600160a01b038316916392c9e72f9161093e918b9133918c91899190600401612b63565b600060405180830381600087803b15801561095857600080fd5b505af115801561096c573d6000803e3d6000fd5b505050505b86336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae0660924954846040516109ab9190612b5a565b60405180910390a350505050505050565b6000546001600160a01b031633146109e65760405162461bcd60e51b815260040161059690612942565b6001600a5410610a085760405162461bcd60e51b81526004016105969061278f565b600380546001600160a01b0319166001600160a01b038316179055600a54610a31906001611fc9565b600a5550565b60008281526007602090815260408083203384529091528120805482825560018201839055600680549293919286908110610a6e57fe5b6000918252602090912001546001600160a01b031690508015610af3576040516392c9e72f60e01b81526001600160a01b038216906392c9e72f90610ac0908890339089906000908190600401612b63565b600060405180830381600087803b158015610ada57600080fd5b505af1158015610aee573d6000803e3d6000fd5b505050505b610b0584836005888154811061078757fe5b836001600160a01b031685336001600160a01b03167f2cac5e20e1541d836381527a43f651851e302817b71dc8e810284e69210c1c6b85604051610b499190612b5a565b60405180910390a45050505050565b6003546001600160a01b0316610b805760405162461bcd60e51b815260040161059690612a10565b600060058281548110610b8f57fe5b60009182526020822001546040516370a0823160e01b81526001600160a01b03909116925082906370a0823190610bca903090600401612616565b60206040518083038186803b158015610be257600080fd5b505afa158015610bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1a91906124cb565b60035460405163095ea7b360e01b81529192506001600160a01b038085169263095ea7b392610c4f921690859060040161268f565b602060405180830381600087803b158015610c6957600080fd5b505af1158015610c7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca1919061235a565b5060035460405163ce5494bb60e01b81526000916001600160a01b03169063ce5494bb90610cd3908690600401612616565b602060405180830381600087803b158015610ced57600080fd5b505af1158015610d01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d259190612376565b6040516370a0823160e01b81529091506001600160a01b038216906370a0823190610d54903090600401612616565b60206040518083038186803b158015610d6c57600080fd5b505afa158015610d80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da491906124cb565b8214610dc25760405162461bcd60e51b81526004016105969061288b565b6001600160a01b03811660009081526008602052604090205460ff1615610dfb5760405162461bcd60e51b8152600401610596906129ac565b6001600160a01b03808216600090815260086020526040808220805460ff1990811660011790915592861682529020805490911690556005805482919086908110610e4257fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050505050565b6000610e80612204565b60048481548110610e8d57fe5b600091825260208083206040805160608101825291909301546001600160801b0380821683526001600160401b03600160801b8304811684860152600160c01b90920490911682850152888552600783528385206001600160a01b0389168652909252918320825160058054949650919492169288908110610f0b57fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a0823190610f44903090600401612616565b60206040518083038186803b158015610f5c57600080fd5b505afa158015610f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9491906124cb565b905083602001516001600160401b031642118015610fb157508015155b1561103d576000610fd885602001516001600160401b031642611e9290919063ffffffff16565b9050600060095461100b87604001516001600160401b0316611005600b5486611e0890919063ffffffff16565b90611e08565b8161101257fe5b049050611038836110288364e8d4a51000611e08565b8161102f57fe5b86919004611fc9565b935050505b6001830154835461106b916108b29164e8d4a510009061105d9087611e08565b8161106457fe5b0490611e45565b979650505050505050565b6001546001600160a01b03163381146110a15760405162461bcd60e51b815260040161059690612977565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b039092166001600160a01b0319928316179055600180549091169055565b6000546001600160a01b0316331461112d5760405162461bcd60e51b815260040161059690612942565b600b8190556040517f555f61c75ba3cdc29937fb5d6cbc01d43a9f7cef8386c2e0465034905bca765b90611162908390612b5a565b60405180910390a150565b611175612204565b6004828154811061118257fe5b60009182526020918290206040805160608101825292909101546001600160801b03811683526001600160401b03600160801b82048116948401859052600160c01b909104169082015291504211156113ec576000600583815481106111e457fe5b6000918252602090912001546040516370a0823160e01b81526001600160a01b03909116906370a082319061121d903090600401612616565b60206040518083038186803b15801561123557600080fd5b505afa158015611249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126d91906124cb565b9050801561131057600061129783602001516001600160401b031642611e9290919063ffffffff16565b905060006009546112c485604001516001600160401b0316611005600b5486611e0890919063ffffffff16565b816112cb57fe5b0490506113026112f1846112e48464e8d4a51000611e08565b816112eb57fe5b04611fec565b85516001600160801b031690612015565b6001600160801b0316845250505b61131942612044565b6001600160401b03166020830152600480548391908590811061133857fe5b6000918252602091829020835191018054848401516040958601516001600160801b03199092166001600160801b039094169390931767ffffffffffffffff60801b1916600160801b6001600160401b0394851602176001600160c01b0316600160c01b93909116929092029190911790558301518351915185927f0fc9545022a542541ad085d091fb09a2ab36fee366a4576ab63714ea907ad353926113e29290918691612bb0565b60405180910390a2505b919050565b8060005b818110156114215761141884848381811061140c57fe5b9050602002013561116d565b506001016113f5565b50505050565b6005818154811061143457fe5b6000918252602090912001546001600160a01b0316905081565b60086020526000908152604090205460ff1681565b60405163d505accf60e01b81526001600160a01b0389169063d505accf9061149b908a908a908a908a908a908a908a9060040161264e565b600060405180830381600087803b1580156114b557600080fd5b505af11580156114c9573d6000803e3d6000fd5b505050505050505050505050565b6003546001600160a01b031681565b6000546001600160a01b031633146115105760405162461bcd60e51b815260040161059690612942565b61154f836115496004878154811061152457fe5b60009182526020909120015460095490600160c01b90046001600160401b0316611e92565b90611fc9565b60095561155b83612044565b6004858154811061156857fe5b9060005260206000200160000160186101000a8154816001600160401b0302191690836001600160401b0316021790555080156115dc5781600685815481106115ad57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b8061160857600684815481106115ee57fe5b6000918252602090912001546001600160a01b031661160a565b815b6001600160a01b0316847f95895a6ab1df54420d241b55243258a33e61b2194db66c1179ec521aae8e18658584604051611645929190612b92565b60405180910390a350505050565b6000546001600160a01b031681565b61166a612204565b6116738461116d565b60008581526007602090815260408083206001600160a01b038716845290915290208054919250906116a59085611fc9565b815581516116dc9064e8d4a51000906116c89087906001600160801b0316611e08565b816116cf57fe5b600184015491900461206d565b81600101819055506000600686815481106116f357fe5b6000918252602090912001546001600160a01b0316905080156117795781546040516392c9e72f60e01b81526001600160a01b038316916392c9e72f91611746918a918991829160009190600401612b63565b600060405180830381600087803b15801561176057600080fd5b505af1158015611774573d6000803e3d6000fd5b505050505b6117a933308760058a8154811061178c57fe5b6000918252602090912001546001600160a01b03169291906120b3565b836001600160a01b031686336001600160a01b03167f02d7e648dd130fc184d383e55bb126ac4c9c60e8f94bf05acdf557ba2d540b47886040516107e79190612b5a565b60076020908152600092835260408084209091529082529020805460019091015482565b6002546001600160a01b031681565b6000546001600160a01b0316331461184a5760405162461bcd60e51b815260040161059690612942565b6001600160a01b03821660009081526008602052604090205460ff16156118835760405162461bcd60e51b8152600401610596906129ac565b6009546118909084611fc9565b6009556005805460018181019092557f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b038086166001600160a01b03199283161790925560068054938401815560009081527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90930180549285169290911691909117905560408051606081019091529081526004906020810161193d42612044565b6001600160401b0316815260200161195486612044565b6001600160401b0390811690915282546001818101855560009485526020808620855193018054828701516040978801518716600160c01b026001600160c01b0391909716600160801b0267ffffffffffffffff60801b196001600160801b039097166001600160801b031990931692909217959095161793909316939093179091556001600160a01b03808716808652600890935292909320805460ff191684179055600554918416929091611a0a91611e92565b7f81ee0f8c5c46e2cb41984886f77a84181724abb86c32a5f6de539b07509d45e586604051611a399190612b5a565b60405180910390a4505050565b6006818154811061143457fe5b611a5b612204565b611a648461116d565b6000858152600760209081526040808320338452909152812082518154939450909264e8d4a5100091611aa091906001600160801b0316611e08565b81611aa757fe5b0490506000611ac66108b2846001015484611e4590919063ffffffff16565b9050611b0164e8d4a51000611af186600001516001600160801b031689611e0890919063ffffffff16565b81611af857fe5b84919004611e45565b60018401558254611b129087611e92565b8355600254611b2b906001600160a01b03168683611eb5565b600060068881548110611b3a57fe5b6000918252602090912001546001600160a01b031690508015611bbf5783546040516392c9e72f60e01b81526001600160a01b038316916392c9e72f91611b8c918c9133918c91899190600401612b63565b600060405180830381600087803b158015611ba657600080fd5b505af1158015611bba573d6000803e3d6000fd5b505050505b611bd1868860058b8154811061078757fe5b856001600160a01b031688336001600160a01b03167f8166bf25f8a2b7ed3c85049207da4358d16edbed977d23fa2ee6f0dde3ec21328a604051611c159190612b5a565b60405180910390a487336001600160a01b03167f71bab65ced2e5750775a0613be067df48ef06cf92a496ebf7663ae066092495484604051611c579190612b5a565b60405180910390a35050505050505050565b606080836001600160401b0381118015611c8257600080fd5b50604051908082528060200260200182016040528015611cac578160200160208202803683370190505b509150836001600160401b0381118015611cc557600080fd5b50604051908082528060200260200182016040528015611cf957816020015b6060815260200190600190039081611ce45790505b50905060005b84811015611df0576000606030888885818110611d1857fe5b9050602002810190611d2a9190612bda565b604051611d389291906125ea565b600060405180830381855af49150503d8060008114611d73576040519150601f19603f3d011682016040523d82523d6000602084013e611d78565b606091505b50915091508180611d87575085155b611d90826121a4565b90611dae5760405162461bcd60e51b8152600401610596919061274d565b5081858481518110611dbc57fe5b60200260200101901515908115158152505080848481518110611ddb57fe5b60209081029190910101525050600101611cff565b50935093915050565b6001546001600160a01b031681565b6000811580611e2357505080820282828281611e2057fe5b04145b611e3f5760405162461bcd60e51b815260040161059690612ac0565b92915050565b6000818303818312801590611e5a5750838113155b80611e6f5750600083128015611e6f57508381135b611e8b5760405162461bcd60e51b815260040161059690612a47565b9392505050565b80820382811115611e3f5760405162461bcd60e51b815260040161059690612760565b60006060846001600160a01b031663a9059cbb8585604051602401611edb92919061268f565b6040516020818303038152906040529060e01b6020820180516001600160e01b038381831617835250505050604051611f1491906125fa565b6000604051808303816000865af19150503d8060008114611f51576040519150601f19603f3d011682016040523d82523d6000602084013e611f56565b606091505b5091509150818015611f80575080511580611f80575080806020019051810190611f80919061235a565b611f9c5760405162461bcd60e51b8152600401610596906127e4565b5050505050565b600080821215611fc55760405162461bcd60e51b8152600401610596906127bf565b5090565b81810181811015611e3f5760405162461bcd60e51b81526004016105969061290b565b60006001600160801b03821115611fc55760405162461bcd60e51b8152600401610596906128d4565b8181016001600160801b038083169082161015611e3f5760405162461bcd60e51b81526004016105969061290b565b60006001600160401b03821115611fc55760405162461bcd60e51b8152600401610596906129d9565b60008282018183128015906120825750838112155b80612097575060008312801561209757508381125b611e8b5760405162461bcd60e51b81526004016105969061281b565b60006060856001600160a01b03166323b872dd8686866040516024016120db9392919061262a565b6040516020818303038152906040529060e01b6020820180516001600160e01b03838183161783525050505060405161211491906125fa565b6000604051808303816000865af19150503d8060008114612151576040519150601f19603f3d011682016040523d82523d6000602084013e612156565b606091505b5091509150818015612180575080511580612180575080806020019051810190612180919061235a565b61219c5760405162461bcd60e51b815260040161059690612a8b565b505050505050565b60606044825110156121ea575060408051808201909152601d81527f5472616e73616374696f6e2072657665727465642073696c656e746c7900000060208201526113ec565b60048201915081806020019051810190611e3f9190612419565b604080516060810182526000808252602082018190529181019190915290565b60008083601f840112612235578182fd5b5081356001600160401b0381111561224b578182fd5b602083019150836020808302850101111561226557600080fd5b9250929050565b60006020828403121561227d578081fd5b8135611e8b81612c4a565b60008060006060848603121561229c578182fd5b83356122a781612c4a565b925060208401356122b781612c62565b915060408401356122c781612c62565b809150509250925092565b6000806000604084860312156122e6578283fd5b83356001600160401b038111156122fb578384fd5b61230786828701612224565b90945092505060208401356122c781612c62565b6000806020838503121561232d578182fd5b82356001600160401b03811115612342578283fd5b61234e85828601612224565b90969095509350505050565b60006020828403121561236b578081fd5b8151611e8b81612c62565b600060208284031215612387578081fd5b8151611e8b81612c4a565b600080600080600080600080610100898b0312156123ae578384fd5b88356123b981612c4a565b975060208901356123c981612c4a565b965060408901356123d981612c4a565b9550606089013594506080890135935060a089013560ff811681146123fc578384fd5b979a969950949793969295929450505060c08201359160e0013590565b60006020828403121561242a578081fd5b81516001600160401b0380821115612440578283fd5b818401915084601f830112612453578283fd5b815181811115612461578384fd5b604051601f8201601f191681016020018381118282101715612481578586fd5b604052818152838201602001871015612498578485fd5b6124a9826020830160208701612c1e565b9695505050505050565b6000602082840312156124c4578081fd5b5035919050565b6000602082840312156124dc578081fd5b5051919050565b600080604083850312156124f5578182fd5b82359150602083013561250781612c4a565b809150509250929050565b600080600060608486031215612526578081fd5b83359250602084013561253881612c4a565b915060408401356122c781612c4a565b60008060006060848603121561255c578081fd5b833592506020840135915060408401356122c781612c4a565b6000806000806080858703121561258a578182fd5b843593506020850135925060408501356125a381612c4a565b915060608501356125b381612c62565b939692955090935050565b600081518084526125d6816020860160208601612c1e565b601f01601f19169290920160200192915050565b6000828483379101908152919050565b6000825161260c818460208701612c1e565b9190910192915050565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b604080825283519082018190526000906020906060840190828701845b828110156126e35781511515845292840192908401906001016126c5565b505050838103828501528085516126fa8184612b5a565b91508192508381028201848801865b838110156127335785830385526127218383516125be565b94870194925090860190600101612709565b50909998505050505050505050565b901515815260200190565b600060208252611e8b60208301846125be565b602080825260159082015274426f72696e674d6174683a20556e646572666c6f7760581b604082015260600190565b6020808252601690820152756d69677261746f72206f6e6c7920736574206f6e636560501b604082015260600190565b6020808252600b908201526a0496e7465676572203c20360ac1b604082015260600190565b6020808252601c908201527f426f72696e6745524332303a205472616e73666572206661696c656400000000604082015260600190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252601590820152744f776e61626c653a207a65726f206164647265737360581b604082015260600190565b60208082526029908201527f4d61737465724368656656323a206d696772617465642062616c616e6365206d6040820152680eae6e840dac2e8c6d60bb1b606082015260800190565b6020808252601c908201527f426f72696e674d6174683a2075696e74313238204f766572666c6f7700000000604082015260600190565b60208082526018908201527f426f72696e674d6174683a20416464204f766572666c6f770000000000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e6572604082015260600190565b602080825260139082015272151bdad95b88185b1c9958591e481859191959606a1b604082015260600190565b6020808252601b908201527f426f72696e674d6174683a2075696e743634204f766572666c6f770000000000604082015260600190565b6020808252601d908201527f4d61737465724368656656323a206e6f206d69677261746f7220736574000000604082015260600190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b6020808252818101527f426f72696e6745524332303a205472616e7366657246726f6d206661696c6564604082015260600190565b60208082526018908201527f426f72696e674d6174683a204d756c204f766572666c6f770000000000000000604082015260600190565b81516001600160801b031681526020808301516001600160401b0390811691830191909152604092830151169181019190915260600190565b6001600160801b039390931683526001600160401b03918216602084015216604082015260600190565b90815260200190565b9485526001600160a01b0393841660208601529190921660408401526060830191909152608082015260a00190565b9182521515602082015260400190565b918252602082015260400190565b6001600160401b0393909316835260208301919091526001600160801b0316604082015260600190565b6000808335601e19843603018112612bf0578283fd5b8301803591506001600160401b03821115612c09578283fd5b60200191503681900382131561226557600080fd5b60005b83811015612c39578181015183820152602001612c21565b838111156114215750506000910152565b6001600160a01b0381168114612c5f57600080fd5b50565b8015158114612c5f57600080fdfea2646970667358221220fb6ae7cdfaed76d877ddba9b9460a6aa0eafbbc5a4ddbe2186b380b97e82a19064736f6c634300060c0033000000000000000000000000204b3a633c855e9b545f65d00b104ca08a95b522
Deployed ByteCode Sourcemap
13820:13612:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7849:472;;;;;;;;;;-1:-1:-1;7849:472:0;;;;;:::i;:::-;;:::i;:::-;;16567:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15472:32;;;;;;;;;;;;;:::i;23640:688::-;;;;;;;;;;-1:-1:-1;23640:688:0;;;;;:::i;:::-;;:::i;14858:26::-;;;;;;;;;;-1:-1:-1;14858:26:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;15388:30::-;;;;;;;;;;;;;:::i;24510:836::-;;;;;;;;;;-1:-1:-1;24510:836:0;;;;;:::i;:::-;;:::i;18990:239::-;;;;;;;;;;-1:-1:-1;18990:239:0;;;;;:::i;:::-;;:::i;26851:578::-;;;;;;;;;;-1:-1:-1;26851:578:0;;;;;:::i;:::-;;:::i;19385:665::-;;;;;;;;;;-1:-1:-1;19385:665:0;;;;;:::i;:::-;;:::i;20284:835::-;;;;;;;;;;-1:-1:-1;20284:835:0;;;;;:::i;:::-;;:::i;8370:348::-;;;;;;;;;;;;;:::i;18632:188::-;;;;;;;;;;-1:-1:-1;18632:188:0;;;;;:::i;:::-;;:::i;21678:806::-;;;;;;;;;;-1:-1:-1;21678:806:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21301:193::-;;;;;;;;;;-1:-1:-1;21301:193:0;;;;;:::i;:::-;;:::i;14952:23::-;;;;;;;;;;-1:-1:-1;14952:23:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;15241:44::-;;;;;;;;;;-1:-1:-1;15241:44:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6777:246::-;;;;;;;;;;-1:-1:-1;6777:246:0;;;;;:::i;:::-;;:::i;14779:29::-;;;;;;;;;;;;;:::i;18027:411::-;;;;;;;;;;-1:-1:-1;18027:411:0;;;;;:::i;:::-;;:::i;7425:20::-;;;;;;;;;;;;;:::i;22731:697::-;;;;;;;;;;-1:-1:-1;22731:697:0;;;;;:::i;:::-;;:::i;15139:66::-;;;;;;;;;;-1:-1:-1;15139:66:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;14644:22::-;;;;;;;;;;;;;:::i;17006:624::-;;;;;;;;;;-1:-1:-1;17006:624:0;;;;;:::i;:::-;;:::i;15045:27::-;;;;;;;;;;-1:-1:-1;15045:27:0;;;;;:::i;:::-;;:::i;25631:1035::-;;;;;;;;;;-1:-1:-1;25631:1035:0;;;;;:::i;:::-;;:::i;5876:554::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;7472:27::-;;;;;;;;;;;;;:::i;7849:472::-;8821:5;;-1:-1:-1;;;;;8821:5:0;8807:10;:19;8799:64;;;;-1:-1:-1;;;8799:64:0;;;;;;;:::i;:::-;;;;;;;;;7954:6:::1;7950:364;;;-1:-1:-1::0;;;;;8008:22:0;::::1;::::0;::::1;::::0;:34:::1;;;8034:8;8008:34;8000:68;;;;-1:-1:-1::0;;;8000:68:0::1;;;;;;;:::i;:::-;8135:5;::::0;;8114:37:::1;::::0;-1:-1:-1;;;;;8114:37:0;;::::1;::::0;8135:5;::::1;::::0;8114:37:::1;::::0;::::1;8166:5;:16:::0;;-1:-1:-1;;;;;8166:16:0;::::1;-1:-1:-1::0;;;;;;8166:16:0;;::::1;;::::0;;;;8197:25;;;;::::1;::::0;;7950:364:::1;;;8279:12;:23:::0;;-1:-1:-1;;;;;;8279:23:0::1;-1:-1:-1::0;;;;;8279:23:0;::::1;;::::0;;7950:364:::1;7849:472:::0;;;:::o;16567:100::-;16644:8;:15;;16567:100::o;15472:32::-;;;;:::o;23640:688::-;23717:20;;:::i;:::-;23740:15;23751:3;23740:10;:15::i;:::-;23766:21;23790:13;;;:8;:13;;;;;;;;23804:10;23790:25;;;;;;;23904:24;;23717:38;;-1:-1:-1;23790:25:0;23866:90;;15561:4;;23893:36;;:6;;-1:-1:-1;;;;;23893:36:0;:10;:36::i;:::-;:61;;;;;23866:15;;;;;23893:61;;23866:19;:90::i;:::-;23848:15;;;:108;23981:11;;:23;;23997:6;23981:15;:23::i;:::-;23967:37;;24064:8;:13;;23967:11;;24064:8;24073:3;;24064:13;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24064:13:0;;-1:-1:-1;24092:32:0;;24088:128;;24192:11;;24141:63;;-1:-1:-1;;;24141:63:0;;-1:-1:-1;;;;;24141:26:0;;;;;:63;;24168:3;;24173:10;;24185:2;;24189:1;;24192:11;24141:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24088:128;24228:37;24254:2;24258:6;24228:7;24236:3;24228:12;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24228:12:0;;:37;:25;:37::i;:::-;24317:2;-1:-1:-1;;;;;24283:37:0;24304:3;24292:10;-1:-1:-1;;;;;24283:37:0;;24309:6;24283:37;;;;;;:::i;:::-;;;;;;;;23640:688;;;;;;:::o;14858:26::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14858:26:0;;;-1:-1:-1;;;;;;;;;14858:26:0;;;;;-1:-1:-1;;;14858:26:0;;;;:::o;15388:30::-;;;;:::o;24510:836::-;24570:20;;:::i;:::-;24593:15;24604:3;24593:10;:15::i;:::-;24619:21;24643:13;;;:8;:13;;;;;;;;24657:10;24643:25;;;;;;;24731:24;;24715:11;;24570:38;;-1:-1:-1;24643:25:0;;15561:4;;24715:41;;:11;-1:-1:-1;;;;;24715:41:0;:15;:41::i;:::-;:66;;;;;;24679:103;;24793:24;24820:52;:40;24844:4;:15;;;24820:19;:23;;:40;;;;:::i;:::-;:50;:52::i;:::-;24905:15;;;:37;;;24793:79;-1:-1:-1;24984:21:0;;24980:97;;25022:8;;:43;;-1:-1:-1;;;;;25022:8:0;25044:2;25048:16;25022:21;:43::i;:::-;25089:19;25111:8;25120:3;25111:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25111:13:0;;-1:-1:-1;25139:32:0;;25135:144;;25255:11;;25188:79;;-1:-1:-1;;;25188:79:0;;-1:-1:-1;;;;;25188:26:0;;;;;:79;;25216:3;;25221:10;;25233:2;;25237:16;;25255:11;25188:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25135:144;25316:3;25304:10;-1:-1:-1;;;;;25296:42:0;;25321:16;25296:42;;;;;;:::i;:::-;;;;;;;;24510:836;;;;;;;:::o;18990:239::-;8821:5;;-1:-1:-1;;;;;8821:5:0;8807:10;:19;8799:64;;;;-1:-1:-1;;;8799:64:0;;;;;;;:::i;:::-;19096:1:::1;19072:23;;:25;19064:59;;;;-1:-1:-1::0;;;19064:59:0::1;;;;;;;:::i;:::-;19134:8;:20:::0;;-1:-1:-1;;;;;;19134:20:0::1;-1:-1:-1::0;;;;;19134:20:0;::::1;;::::0;;19191:23:::1;::::0;:30:::1;::::0;-1:-1:-1;19191:27:0::1;:30::i;:::-;19165:23;:56:::0;-1:-1:-1;18990:239:0:o;26851:578::-;26921:21;26945:13;;;:8;:13;;;;;;;;26959:10;26945:25;;;;;;;26998:11;;27020:15;;;-1:-1:-1;27046:15:0;;:19;;;27100:8;:13;;26945:25;;26998:11;;26954:3;;27100:13;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27100:13:0;;-1:-1:-1;27128:32:0;;27124:118;;27177:53;;-1:-1:-1;;;27177:53:0;;-1:-1:-1;;;;;27177:26:0;;;;;:53;;27204:3;;27209:10;;27221:2;;27225:1;;;;27177:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27124:118;27322:37;27348:2;27352:6;27322:7;27330:3;27322:12;;;;;;;:37;27418:2;-1:-1:-1;;;;;27375:46:0;27405:3;27393:10;-1:-1:-1;;;;;27375:46:0;;27410:6;27375:46;;;;;;:::i;:::-;;;;;;;;26851:578;;;;;:::o;19385:665::-;19450:8;;-1:-1:-1;;;;;19450:8:0;19434:73;;;;-1:-1:-1;;;19434:73:0;;;;;;;:::i;:::-;19518:15;19536:7;19544:4;19536:13;;;;;;;;;;;;;;;;;19574:33;;-1:-1:-1;;;19574:33:0;;-1:-1:-1;;;;;19536:13:0;;;;-1:-1:-1;19536:13:0;;19574:18;;:33;;19601:4;;19574:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19643:8;;19618:40;;-1:-1:-1;;;19618:40:0;;19560:47;;-1:-1:-1;;;;;;19618:16:0;;;;;;:40;;19643:8;;19560:47;;19618:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19689:8:0;;:26;;-1:-1:-1;;;19689:26:0;;19669:17;;-1:-1:-1;;;;;19689:8:0;;:16;;:26;;19706:8;;19689:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19741:35;;-1:-1:-1;;;19741:35:0;;19669:46;;-1:-1:-1;;;;;;19741:20:0;;;;;:35;;19770:4;;19741:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19734:3;:42;19726:96;;;;-1:-1:-1;;;19726:96:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19841:32:0;;;;;;:11;:32;;;;;;;;:41;19833:73;;;;-1:-1:-1;;;19833:73:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19917:32:0;;;;;;;:11;:32;;;;;;:39;;-1:-1:-1;;19917:39:0;;;19952:4;19917:39;;;;19967:30;;;;;;;:38;;;;;;;20016:7;:13;;19937:10;;20016:7;20024:4;;20016:13;;;;;;;;;;;;;;:26;;;;;-1:-1:-1;;;;;20016:26:0;;;;;-1:-1:-1;;;;;20016:26:0;;;;;;19385:665;;;;:::o;20284:835::-;20361:15;20389:20;;:::i;:::-;20412:8;20421:4;20412:14;;;;;;;;;;;;;;;;20389:37;;;;;;;;20412:14;;;;20389:37;-1:-1:-1;;;;;20389:37:0;;;;;-1:-1:-1;;;;;;;;20389:37:0;;;;;;;;-1:-1:-1;;;20389:37:0;;;;;;;;;;20461:14;;;:8;:14;;;;;-1:-1:-1;;;;;20461:21:0;;;;;;;;;;20523:24;;20577:7;:13;;20389:37;;-1:-1:-1;20461:21:0;;20493:54;;;20470:4;;20577:13;;;;;;;;;;;;;;;;:38;;-1:-1:-1;;;20577:38:0;;-1:-1:-1;;;;;20577:13:0;;;;:23;;:38;;20609:4;;20577:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20558:57;;20648:4;:19;;;-1:-1:-1;;;;;20630:37:0;:15;:37;:54;;;;-1:-1:-1;20671:13:0;;;20630:54;20626:363;;;20701:12;20716:40;20736:4;:19;;;-1:-1:-1;;;;;20716:40:0;:15;:19;;:40;;;;:::i;:::-;20701:55;;20771:22;20847:15;;20796:48;20828:4;:15;;;-1:-1:-1;;;;;20796:48:0;:27;20805:17;;20796:4;:8;;:27;;;;:::i;:::-;:31;;:48::i;:::-;:66;;;;;;;-1:-1:-1;20899:78:0;20968:8;20923:42;20796:66;15561:4;20923:18;:42::i;:::-;:53;;;;;20899:19;;20923:53;;20899:23;:78::i;:::-;20877:100;;20626:363;;;21083:15;;;;21016:11;;21009:102;;:90;;15561:4;;21016:36;;21032:19;21016:15;:36::i;:::-;:61;;;;;;;21009:73;:90::i;:102::-;20999:112;20284:835;-1:-1:-1;;;;;;;20284:835:0:o;8370:348::-;8438:12;;-1:-1:-1;;;;;8438:12:0;8498:10;:27;;8490:72;;;;-1:-1:-1;;;8490:72:0;;;;;;;:::i;:::-;8621:5;;;8600:42;;-1:-1:-1;;;;;8600:42:0;;;;8621:5;;;8600:42;;;8653:5;:21;;-1:-1:-1;;;;;8653:21:0;;;-1:-1:-1;;;;;;8653:21:0;;;;;;;8685:25;;;;;;;8370:348::o;18632:188::-;8821:5;;-1:-1:-1;;;;;8821:5:0;8807:10;:19;8799:64;;;;-1:-1:-1;;;8799:64:0;;;;;;;:::i;:::-;18718:17:::1;:38:::0;;;18772:40:::1;::::0;::::1;::::0;::::1;::::0;18738:18;;18772:40:::1;:::i;:::-;;;;;;;;18632:188:::0;:::o;21678:806::-;21727:20;;:::i;:::-;21767:8;21776:3;21767:13;;;;;;;;;;;;;;;;;21760:20;;;;;;;;21767:13;;;;21760:20;-1:-1:-1;;;;;21760:20:0;;;;-1:-1:-1;;;;;;;;21760:20:0;;;;;;;;;;-1:-1:-1;;;21760:20:0;;;;;;;;;-1:-1:-1;21795:15:0;:37;21791:686;;;21849:16;21868:7;21876:3;21868:12;;;;;;;;;;;;;;;;;;:37;;-1:-1:-1;;;21868:37:0;;-1:-1:-1;;;;;21868:12:0;;;;:22;;:37;;21899:4;;21868:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21849:56;-1:-1:-1;21924:12:0;;21920:357;;21957:12;21972:40;21992:4;:19;;;-1:-1:-1;;;;;21972:40:0;:15;:19;;:40;;;;:::i;:::-;21957:55;;22031:22;22107:15;;22056:48;22088:4;:15;;;-1:-1:-1;;;;;22056:48:0;:27;22065:17;;22056:4;:8;;:27;;;;:::i;:48::-;:66;;;;;;;-1:-1:-1;22168:93:0;22197:63;22243:8;22198:42;22056:66;15561:4;22198:18;:42::i;:::-;:53;;;;;;22197:61;:63::i;:::-;22168:24;;-1:-1:-1;;;;;22168:28:0;;;:93::i;:::-;-1:-1:-1;;;;;22141:120:0;;;-1:-1:-1;;21920:357:0;22313:22;:15;:20;:22::i;:::-;-1:-1:-1;;;;;22291:44:0;:19;;;:44;22350:8;:13;;22291:4;;22350:8;22359:3;;22350:13;;;;;;;;;;;;;;;:20;;:13;;:20;;;;;;;;;;;-1:-1:-1;;;;;;22350:20:0;;;-1:-1:-1;;;;;22350:20:0;;;;;;;-1:-1:-1;;;;22350:20:0;-1:-1:-1;;;;;;;;22350:20:0;;;;;-1:-1:-1;;;;;22350:20:0;-1:-1:-1;;;22350:20:0;;;;;;;;;;;;;;22409:19;;;22440:24;;22390:75;;22404:3;;22390:75;;;;22409:19;;22430:8;;22390:75;:::i;:::-;;;;;;;;21791:686;;21678:806;;;:::o;21301:193::-;21385:4;21371:11;21407:80;21431:3;21427:1;:7;21407:80;;;21456:19;21467:4;;21472:1;21467:7;;;;;;;;;;;;;21456:10;:19::i;:::-;-1:-1:-1;21436:3:0;;21407:80;;;;21301:193;;;:::o;14952:23::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14952:23:0;;-1:-1:-1;14952:23:0;:::o;15241:44::-;;;;;;;;;;;;;;;:::o;6777:246::-;6966:49;;-1:-1:-1;;;6966:49:0;;-1:-1:-1;;;;;6966:12:0;;;;;:49;;6979:4;;6985:2;;6989:6;;6997:8;;7007:1;;7010;;7013;;6966:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6777:246;;;;;;;;:::o;14779:29::-;;;-1:-1:-1;;;;;14779:29:0;;:::o;18027:411::-;8821:5;;-1:-1:-1;;;;;8821:5:0;8807:10;:19;8799:64;;;;-1:-1:-1;;;8799:64:0;;;;;;;:::i;:::-;18158:63:::1;18209:11;18158:46;18178:8;18187:4;18178:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;:25:::0;18158:15:::1;::::0;;-1:-1:-1;;;18178:25:0;::::1;-1:-1:-1::0;;;;;18178:25:0::1;18158:19;:46::i;:::-;:50:::0;::::1;:63::i;:::-;18140:15;:81:::0;18260:18:::1;:11:::0;:16:::1;:18::i;:::-;18232:8;18241:4;18232:14;;;;;;;;;;;;;;;:25;;;:46;;;;;-1:-1:-1::0;;;;;18232:46:0::1;;;;;-1:-1:-1::0;;;;;18232:46:0::1;;;;;;18293:9;18289:46;;;18323:9;18306:8;18315:4;18306:14;;;;;;;;;;;;;;;;:26;;;;;-1:-1:-1::0;;;;;18306:26:0::1;;;;;-1:-1:-1::0;;;;;18306:26:0::1;;;;;;18289:46;18380:9;:38;;18404:8;18413:4;18404:14;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;18404:14:0::1;18380:38;;;18392:9;18380:38;-1:-1:-1::0;;;;;18350:80:0::1;18361:4;18350:80;18367:11;18420:9;18350:80;;;;;;;:::i;:::-;;;;;;;;18027:411:::0;;;;:::o;7425:20::-;;;-1:-1:-1;;;;;7425:20:0;;:::o;22731:697::-;22807:20;;:::i;:::-;22830:15;22841:3;22830:10;:15::i;:::-;22856:21;22880:13;;;:8;:13;;;;;;;;-1:-1:-1;;;;;22880:17:0;;;;;;;;;22944:11;;22807:38;;-1:-1:-1;22880:17:0;22944:23;;22960:6;22944:15;:23::i;:::-;22930:37;;23034:24;;22996:90;;15561:4;;23023:36;;:6;;-1:-1:-1;;;;;23023:36:0;:10;:36::i;:::-;:61;;;;;22996:15;;;;;23023:61;;22996:19;:90::i;:::-;22978:4;:15;;:108;;;;23124:19;23146:8;23155:3;23146:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23146:13:0;;-1:-1:-1;23174:32:0;;23170:120;;23266:11;;23223:55;;-1:-1:-1;;;23223:55:0;;-1:-1:-1;;;;;23223:26:0;;;;;:55;;23250:3;;23255:2;;;;23263:1;;23266:11;23223:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23170:120;23302:64;23332:10;23352:4;23359:6;23302:7;23310:3;23302:12;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23302:12:0;;:64;;:29;:64::i;:::-;23417:2;-1:-1:-1;;;;;23384:36:0;23404:3;23392:10;-1:-1:-1;;;;;23384:36:0;;23409:6;23384:36;;;;;;:::i;15139:66::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14644:22::-;;;-1:-1:-1;;;;;14644:22:0;;:::o;17006:624::-;8821:5;;-1:-1:-1;;;;;8821:5:0;8807:10;:19;8799:64;;;;-1:-1:-1;;;8799:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17113:30:0;::::1;;::::0;;;:11:::1;:30;::::0;;;;;::::1;;:39;17105:71;;;;-1:-1:-1::0;;;17105:71:0::1;;;;;;;:::i;:::-;17205:15;::::0;:31:::1;::::0;17225:10;17205:19:::1;:31::i;:::-;17187:15;:49:::0;17247:7:::1;:22:::0;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;-1:-1:-1;;;;;17247:22:0;;::::1;-1:-1:-1::0;;;;;;17247:22:0;;::::1;;::::0;;;17280:8:::1;:24:::0;;;;::::1;::::0;;-1:-1:-1;17280:24:0;;;;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;17331:155:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;;17247:22:0::1;17331:155:::0;::::1;17415:22;:15;:20;:22::i;:::-;-1:-1:-1::0;;;;;17331:155:0::1;;;;;17367:17;:10;:15;:17::i;:::-;-1:-1:-1::0;;;;;17331:155:0;;::::1;::::0;;;17317:170;;::::1;::::0;;::::1;::::0;;-1:-1:-1;17317:170:0;;;::::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;17317:170:0::1;-1:-1:-1::0;;;;;17317:170:0;;;::::1;-1:-1:-1::0;;;17317:170:0::1;-1:-1:-1::0;;;;;;;;;17317:170:0;;::::1;-1:-1:-1::0;;;;;;17317:170:0;;::::1;::::0;;;::::1;::::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;;;;17498:30:0;;::::1;::::0;;;:11:::1;:30:::0;;;;;;;:37;;-1:-1:-1;;17498:37:0::1;::::0;::::1;::::0;;17567:7:::1;:14:::0;17551:71;;::::1;::::0;17498:30;;17567:21:::1;::::0;:18:::1;:21::i;:::-;17551:71;17590:10;17551:71;;;;;;:::i;:::-;;;;;;;;17006:624:::0;;;:::o;15045:27::-;;;;;;;;;;25631:1035;25718:20;;:::i;:::-;25741:15;25752:3;25741:10;:15::i;:::-;25767:21;25791:13;;;:8;:13;;;;;;;;25805:10;25791:25;;;;;;;25879:24;;25863:11;;25718:38;;-1:-1:-1;25791:25:0;;15561:4;;25863:41;;:11;-1:-1:-1;;;;;25863:41:0;:15;:41::i;:::-;:66;;;;;;25827:103;;25941:24;25968:52;:40;25992:4;:15;;;25968:19;:23;;:40;;;;:::i;:52::-;25941:79;;26071:94;15561:4;26102:36;26113:4;:24;;;-1:-1:-1;;;;;26102:36:0;:6;:10;;:36;;;;:::i;:::-;:61;;;;;26071:19;;26102:61;;26071:23;:94::i;:::-;26053:15;;;:112;26190:11;;:23;;26206:6;26190:15;:23::i;:::-;26176:37;;26251:8;;:43;;-1:-1:-1;;;;;26251:8:0;26273:2;26277:16;26251:21;:43::i;:::-;26307:19;26329:8;26338:3;26329:13;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26329:13:0;;-1:-1:-1;26357:32:0;;26353:143;;26472:11;;26406:78;;-1:-1:-1;;;26406:78:0;;-1:-1:-1;;;;;26406:26:0;;;;;:78;;26433:3;;26438:10;;26450:2;;26454:16;;26472:11;26406:78;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26353:143;26508:37;26534:2;26538:6;26508:7;26516:3;26508:12;;;;;;;:37;26597:2;-1:-1:-1;;;;;26563:37:0;26584:3;26572:10;-1:-1:-1;;;;;26563:37:0;;26589:6;26563:37;;;;;;:::i;:::-;;;;;;;;26636:3;26624:10;-1:-1:-1;;;;;26616:42:0;;26641:16;26616:42;;;;;;:::i;:::-;;;;;;;;25631:1035;;;;;;;;:::o;5876:554::-;5959:23;;6067:5;-1:-1:-1;;;;;6056:24:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6056:24:0;-1:-1:-1;6044:36:0;-1:-1:-1;6113:5:0;-1:-1:-1;;;;;6101:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6091:35;;6142:9;6137:286;6157:16;;;6137:286;;;6196:12;6210:19;6241:4;6260:5;;6266:1;6260:8;;;;;;;;;;;;;;;;;;:::i;:::-;6233:36;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6195:74;;;;6292:7;:24;;;;6304:12;6303:13;6292:24;6318:21;6332:6;6318:13;:21::i;:::-;6284:56;;;;;-1:-1:-1;;;6284:56:0;;;;;;;;:::i;:::-;;6370:7;6355:9;6365:1;6355:12;;;;;;;;;;;;;:22;;;;;;;;;;;6405:6;6392:7;6400:1;6392:10;;;;;;;;;;;;;;;;;:19;-1:-1:-1;;6175:3:0;;6137:286;;;;5876:554;;;;;;:::o;7472:27::-;;;-1:-1:-1;;;;;7472:27:0;;:::o;773:137::-;831:9;851:6;;;:28;;-1:-1:-1;;866:5:0;;;878:1;873;866:5;873:1;861:13;;;;;:18;851:28;843:65;;;;-1:-1:-1;;;843:65:0;;;;;;;:::i;:::-;773:137;;;;:::o;10868:218::-;10924:6;10954:5;;;10979:6;;;;;;:16;;;10994:1;10989;:6;;10979:16;10978:38;;;;11005:1;11001;:5;:14;;;;;11014:1;11010;:5;11001:14;10970:87;;;;-1:-1:-1;;;10970:87:0;;;;;;;:::i;:::-;11077:1;10868:218;-1:-1:-1;;;10868:218:0:o;645:122::-;728:5;;;723:16;;;;715:50;;;;-1:-1:-1;;;715:50:0;;;;;;;:::i;3966:304::-;4051:12;4065:17;4094:5;-1:-1:-1;;;;;4086:19:0;4129:10;4141:2;4145:6;4106:46;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4106:46:0;;;;;;;;;;;4086:67;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4050:103;;;;4172:7;:57;;;;-1:-1:-1;4184:11:0;;:16;;:44;;;4215:4;4204:24;;;;;;;;;;;;:::i;:::-;4164:98;;;;-1:-1:-1;;;4164:98:0;;;;;;;:::i;:::-;3966:304;;;;;:::o;11554:138::-;11606:7;11639:1;11634;:6;;11626:30;;;;-1:-1:-1;;;11626:30:0;;;;;;;:::i;:::-;-1:-1:-1;11682:1:0;11554:138::o;514:125::-;597:5;;;592:16;;;;584:53;;;;-1:-1:-1;;;584:53:0;;;;;;;:::i;916:161::-;965:9;-1:-1:-1;;;;;995:16:0;;;987:57;;;;-1:-1:-1;;;987:57:0;;;;;;;:::i;1437:125::-;1520:5;;;-1:-1:-1;;;;;1515:16:0;;;;;;;;1507:53;;;;-1:-1:-1;;;1507:53:0;;;;;;;:::i;1083:156::-;1131:8;-1:-1:-1;;;;;1160:15:0;;;1152:55;;;;-1:-1:-1;;;1152:55:0;;;;;;;:::i;11331:215::-;11387:6;11417:5;;;11442:6;;;;;;:16;;;11457:1;11452;:6;;11442:16;11441:38;;;;11468:1;11464;:5;:14;;;;;11477:1;11473;:5;11464:14;11433:84;;;;-1:-1:-1;;;11433:84:0;;;;;;;:::i;4278:332::-;4381:12;4395:17;4424:5;-1:-1:-1;;;;;4416:19:0;4459:10;4471:4;4477:2;4481:6;4436:52;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4436:52:0;;;;;;;;;;;4416:73;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4380:109;;;;4508:7;:57;;;;-1:-1:-1;4520:11:0;;:16;;:44;;;4551:4;4540:24;;;;;;;;;;;;:::i;:::-;4500:102;;;;-1:-1:-1;;;4500:102:0;;;;;;;:::i;:::-;4278:332;;;;;;:::o;4920:496::-;4992:13;5155:2;5134:11;:18;:23;5130:67;;;-1:-1:-1;5159:38:0;;;;;;;;;;;;;;;;;;;5130:67;5301:4;5288:11;5284:22;5269:37;;5345:11;5334:33;;;;;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;158:363::-;;;299:3;292:4;284:6;280:17;276:27;266:2;;-1:-1;;307:12;266:2;-1:-1;337:20;;-1:-1;;;;;366:30;;363:2;;;-1:-1;;399:12;363:2;443:4;435:6;431:17;419:29;;494:3;443:4;;478:6;474:17;435:6;460:32;;457:41;454:2;;;511:1;;501:12;454:2;259:262;;;;;:::o;2862:241::-;;2966:2;2954:9;2945:7;2941:23;2937:32;2934:2;;;-1:-1;;2972:12;2934:2;85:6;72:20;97:33;124:5;97:33;:::i;3110:479::-;;;;3242:2;3230:9;3221:7;3217:23;3213:32;3210:2;;;-1:-1;;3248:12;3210:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;3300:63;-1:-1;3400:2;3436:22;;971:20;996:30;971:20;996:30;:::i;:::-;3408:60;-1:-1;3505:2;3541:22;;971:20;996:30;971:20;996:30;:::i;:::-;3513:60;;;;3204:385;;;;;:::o;3596:538::-;;;;3760:2;3748:9;3739:7;3735:23;3731:32;3728:2;;;-1:-1;;3766:12;3728:2;3824:17;3811:31;-1:-1;;;;;3854:6;3851:30;3848:2;;;-1:-1;;3884:12;3848:2;3922:91;4005:7;3996:6;3985:9;3981:22;3922:91;:::i;:::-;3904:109;;-1:-1;3904:109;-1:-1;;4050:2;4086:22;;971:20;996:30;971:20;996:30;:::i;4141:397::-;;;4280:2;4268:9;4259:7;4255:23;4251:32;4248:2;;;-1:-1;;4286:12;4248:2;4344:17;4331:31;-1:-1;;;;;4374:6;4371:30;4368:2;;;-1:-1;;4404:12;4368:2;4442:80;4514:7;4505:6;4494:9;4490:22;4442:80;:::i;:::-;4424:98;;;;-1:-1;4242:296;-1:-1;;;;4242:296::o;4545:257::-;;4657:2;4645:9;4636:7;4632:23;4628:32;4625:2;;;-1:-1;;4663:12;4625:2;1119:6;1113:13;1131:30;1155:5;1131:30;:::i;4809:291::-;;4938:2;4926:9;4917:7;4913:23;4909:32;4906:2;;;-1:-1;;4944:12;4906:2;1573:6;1567:13;1585:47;1626:5;1585:47;:::i;5107:1145::-;;;;;;;;;5342:3;5330:9;5321:7;5317:23;5313:33;5310:2;;;-1:-1;;5349:12;5310:2;1404:6;1391:20;1416:47;1457:5;1416:47;:::i;:::-;5401:77;-1:-1;5515:2;5554:22;;72:20;97:33;72:20;97:33;:::i;:::-;5523:63;-1:-1;5623:2;5662:22;;72:20;97:33;72:20;97:33;:::i;:::-;5631:63;-1:-1;5731:2;5770:22;;2518:20;;-1:-1;5839:3;5879:22;;2518:20;;-1:-1;5948:3;5986:22;;2794:20;42554:4;42543:16;;45642:33;;45632:2;;-1:-1;;45679:12;45632:2;5304:948;;;;-1:-1;5304:948;;;;;;5957:61;;-1:-1;;;6055:3;6095:22;;1240:20;;6164:3;6204:22;1240:20;;5304:948::o;6551:362::-;;6676:2;6664:9;6655:7;6651:23;6647:32;6644:2;;;-1:-1;;6682:12;6644:2;6733:17;6727:24;-1:-1;;;;;6771:18;6763:6;6760:30;6757:2;;;-1:-1;;6793:12;6757:2;6880:6;6869:9;6865:22;;;2112:3;2105:4;2097:6;2093:17;2089:27;2079:2;;-1:-1;;2120:12;2079:2;2160:6;2154:13;6771:18;39190:6;39187:30;39184:2;;;-1:-1;;39220:12;39184:2;38853;38847:9;39293;39274:17;;-1:-1;;39270:33;38879:17;;6676:2;38879:17;38939:34;;;38975:22;;;38936:62;38933:2;;;-1:-1;;39001:12;38933:2;38853;39020:22;2253:21;;;2353:16;;;6676:2;2353:16;2350:25;-1:-1;2347:2;;;-1:-1;;2378:12;2347:2;2398:39;2430:6;6676:2;2329:5;2325:16;6676:2;2295:6;2291:17;2398:39;:::i;:::-;6813:84;6638:275;-1:-1;;;;;;6638:275::o;6920:241::-;;7024:2;7012:9;7003:7;6999:23;6995:32;6992:2;;;-1:-1;;7030:12;6992:2;-1:-1;2518:20;;6986:175;-1:-1;6986:175::o;7168:263::-;;7283:2;7271:9;7262:7;7258:23;7254:32;7251:2;;;-1:-1;;7289:12;7251:2;-1:-1;2666:13;;7245:186;-1:-1;7245:186::o;7438:366::-;;;7559:2;7547:9;7538:7;7534:23;7530:32;7527:2;;;-1:-1;;7565:12;7527:2;2531:6;2518:20;7617:63;;7717:2;7760:9;7756:22;72:20;97:33;124:5;97:33;:::i;:::-;7725:63;;;;7521:283;;;;;:::o;7811:555::-;;;;7981:2;7969:9;7960:7;7956:23;7952:32;7949:2;;;-1:-1;;7987:12;7949:2;2531:6;2518:20;8039:63;;8139:2;8196:9;8192:22;1391:20;1416:47;1457:5;1416:47;:::i;:::-;8147:77;-1:-1;8261:2;8318:22;;1910:20;1935:51;1910:20;1935:51;:::i;8373:491::-;;;;8511:2;8499:9;8490:7;8486:23;8482:32;8479:2;;;-1:-1;;8517:12;8479:2;2531:6;2518:20;8569:63;;8669:2;8712:9;8708:22;2518:20;8677:63;;8777:2;8820:9;8816:22;72:20;97:33;124:5;97:33;:::i;8871:647::-;;;;;9041:3;9029:9;9020:7;9016:23;9012:33;9009:2;;;-1:-1;;9048:12;9009:2;2531:6;2518:20;9100:63;;9200:2;9243:9;9239:22;2518:20;9208:63;;9308:2;9369:9;9365:22;1910:20;1935:51;1980:5;1935:51;:::i;:::-;9316:81;-1:-1;9434:2;9470:22;;971:20;996:30;971:20;996:30;:::i;:::-;9003:515;;;;-1:-1;9003:515;;-1:-1;;9003:515::o;12489:323::-;;12621:5;39805:12;40620:6;40615:3;40608:19;12704:52;12749:6;40657:4;40652:3;40648:14;40657:4;12730:5;12726:16;12704:52;:::i;:::-;39293:9;44578:14;-1:-1;;44574:28;12768:39;;;;40657:4;12768:39;;12569:243;-1:-1;;12569:243::o;21683:291::-;;44161:6;44156:3;44151;44138:30;44199:16;;44192:27;;;44199:16;21827:147;-1:-1;21827:147::o;21981:271::-;;12979:5;39805:12;13090:52;13135:6;13130:3;13123:4;13116:5;13112:16;13090:52;:::i;:::-;13154:16;;;;;22115:137;-1:-1;;22115:137::o;22259:222::-;-1:-1;;;;;42235:54;;;;10113:37;;22386:2;22371:18;;22357:124::o;22488:444::-;-1:-1;;;;;42235:54;;;10113:37;;42235:54;;;;22835:2;22820:18;;10113:37;22918:2;22903:18;;12099:37;;;;22671:2;22656:18;;22642:290::o;22939:884::-;-1:-1;;;;;42235:54;;;10113:37;;42235:54;;;;23395:2;23380:18;;10113:37;23478:2;23463:18;;12099:37;;;;23561:2;23546:18;;12099:37;;;;42554:4;42543:16;23640:3;23625:19;;21636:35;42246:42;23709:19;;12099:37;23808:3;23793:19;;12099:37;;;;23230:3;23215:19;;23201:622::o;23830:333::-;-1:-1;;;;;42235:54;;;;10113:37;;24149:2;24134:18;;12099:37;23985:2;23970:18;;23956:207::o;24170:653::-;24437:2;24451:47;;;39805:12;;24422:18;;;40608:19;;;24170:653;;40657:4;;40648:14;;;;39495;;;24170:653;10580:251;10605:6;10602:1;10599:13;10580:251;;;10666:13;;41522;41515:21;11871:34;;9667:14;;;;40342;;;;10627:1;10620:9;10580:251;;;10584:14;;;24662:9;24656:4;24652:20;40657:4;24636:9;24632:18;24625:48;24687:126;11108:5;39805:12;11127:95;11215:6;11210:3;11127:95;:::i;:::-;11120:102;;;;;40657:4;11279:6;11275:17;11270:3;11266:27;40657:4;11373:5;39495:14;-1:-1;11412:357;11437:6;11434:1;11431:13;11412:357;;;11499:9;11493:4;11489:20;11484:3;11477:33;9815:64;9875:3;11544:6;11538:13;9815:64;:::i;:::-;11748:14;;;;11558:90;-1:-1;40342:14;;;;10627:1;11452:9;11412:357;;;-1:-1;24679:134;;24408:415;-1:-1;;;;;;;;;24408:415::o;24830:210::-;41522:13;;41515:21;11871:34;;24951:2;24936:18;;24922:118::o;25842:310::-;;25989:2;26010:17;26003:47;26064:78;25989:2;25978:9;25974:18;26128:6;26064:78;:::i;26159:416::-;26359:2;26373:47;;;14534:2;26344:18;;;40608:19;-1:-1;;;40648:14;;;14550:44;14613:12;;;26330:245::o;26582:416::-;26782:2;26796:47;;;14864:2;26767:18;;;40608:19;-1:-1;;;40648:14;;;14880:45;14944:12;;;26753:245::o;27005:416::-;27205:2;27219:47;;;15195:2;27190:18;;;40608:19;-1:-1;;;40648:14;;;15211:34;15264:12;;;27176:245::o;27428:416::-;27628:2;27642:47;;;15515:2;27613:18;;;40608:19;15551:30;40648:14;;;15531:51;15601:12;;;27599:245::o;27851:416::-;28051:2;28065:47;;;15852:2;28036:18;;;40608:19;15888:34;40648:14;;;15868:55;-1:-1;;;15943:12;;;15936:25;15980:12;;;28022:245::o;28274:416::-;28474:2;28488:47;;;16231:2;28459:18;;;40608:19;-1:-1;;;40648:14;;;16247:44;16310:12;;;28445:245::o;28697:416::-;28897:2;28911:47;;;16561:2;28882:18;;;40608:19;16597:34;40648:14;;;16577:55;-1:-1;;;16652:12;;;16645:33;16697:12;;;28868:245::o;29120:416::-;29320:2;29334:47;;;16948:2;29305:18;;;40608:19;16984:30;40648:14;;;16964:51;17034:12;;;29291:245::o;29543:416::-;29743:2;29757:47;;;17285:2;29728:18;;;40608:19;17321:26;40648:14;;;17301:47;17367:12;;;29714:245::o;29966:416::-;30166:2;30180:47;;;30151:18;;;40608:19;17654:34;40648:14;;;17634:55;17708:12;;;30137:245::o;30389:416::-;30589:2;30603:47;;;30574:18;;;40608:19;17995:34;40648:14;;;17975:55;18049:12;;;30560:245::o;30812:416::-;31012:2;31026:47;;;18300:2;30997:18;;;40608:19;-1:-1;;;40648:14;;;18316:42;18377:12;;;30983:245::o;31235:416::-;31435:2;31449:47;;;18628:2;31420:18;;;40608:19;18664:29;40648:14;;;18644:50;18713:12;;;31406:245::o;31658:416::-;31858:2;31872:47;;;18964:2;31843:18;;;40608:19;19000:31;40648:14;;;18980:52;19051:12;;;31829:245::o;32081:416::-;32281:2;32295:47;;;19302:2;32266:18;;;40608:19;19338:34;40648:14;;;19318:55;-1:-1;;;19393:12;;;19386:28;19433:12;;;32252:245::o;32504:416::-;32704:2;32718:47;;;32689:18;;;40608:19;19720:34;40648:14;;;19700:55;19774:12;;;32675:245::o;32927:416::-;33127:2;33141:47;;;20025:2;33112:18;;;40608:19;20061:26;40648:14;;;20041:47;20107:12;;;33098:245::o;33350:326::-;20422:23;;-1:-1;;;;;42115:46;20923:37;;20603:4;20592:16;;;20586:23;-1:-1;;;;;42441:30;;;20661:14;;;21404:36;;;;20761:4;20750:16;;;20744:23;42441:30;20819:14;;;21404:36;;;;33529:2;33514:18;;33500:176::o;33683:436::-;-1:-1;;;;;42115:46;;;;20923:37;;-1:-1;;;;;42441:30;;;34024:2;34009:18;;21404:36;42441:30;34105:2;34090:18;;21404:36;33862:2;33847:18;;33833:286::o;34126:222::-;12099:37;;;34253:2;34238:18;;34224:124::o;34355:716::-;12099:37;;;-1:-1;;;;;42235:54;;;34791:2;34776:18;;9972:58;42235:54;;;;34874:2;34859:18;;10113:37;34965:2;34950:18;;13885:58;;;;35056:3;35041:19;;13885:58;34618:3;34603:19;;34589:482::o;37167:321::-;12099:37;;;41522:13;41515:21;37474:2;37459:18;;11871:34;37316:2;37301:18;;37287:201::o;37495:329::-;12099:37;;;37810:2;37795:18;;12099:37;37648:2;37633:18;;37619:205::o;37831:440::-;-1:-1;;;;;42441:30;;;;21404:36;;38174:2;38159:18;;12099:37;;;;-1:-1;;;;;42115:46;38257:2;38242:18;;21163:50;38012:2;37997:18;;37983:288::o;38278:506::-;;;38413:11;38400:25;38464:48;;38488:8;38472:14;38468:29;38464:48;38444:18;38440:73;38430:2;;-1:-1;;38517:12;38430:2;38544:33;;38598:18;;;-1:-1;;;;;;38625:30;;38622:2;;;-1:-1;;38658:12;38622:2;38503:4;38686:13;;-1:-1;38472:14;38718:38;;;38708:49;;38705:2;;;38770:1;;38760:12;44234:268;44299:1;44306:101;44320:6;44317:1;44314:13;44306:101;;;44387:11;;;44381:18;44368:11;;;44361:39;44342:2;44335:10;44306:101;;;44422:6;44419:1;44416:13;44413:2;;;-1:-1;;44299:1;44469:16;;44462:27;44283:219::o;44615:117::-;-1:-1;;;;;42235:54;;44674:35;;44664:2;;44723:1;;44713:12;44664:2;44658:74;:::o;44739:111::-;44820:5;41522:13;41515:21;44798:5;44795:32;44785:2;;44841:1;;44831:12
Swarm Source
ipfs://fb6ae7cdfaed76d877ddba9b9460a6aa0eafbbc5a4ddbe2186b380b97e82a190
Age | Block | Fee Address | BC Fee Address | Voting Power | Jailed | Incoming |
---|
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.