Source Code
Latest 25 from a total of 9,764 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Reset | 4038981 | 10 days ago | IN | 0 ETH | 0.00002029 | ||||
| Poke | 3946280 | 18 days ago | IN | 0 ETH | 0.00000122 | ||||
| Poke | 3868489 | 24 days ago | IN | 0 ETH | 0.00000224 | ||||
| Reset | 3868486 | 24 days ago | IN | 0 ETH | 0.00005593 | ||||
| Distro | 3770776 | 31 days ago | IN | 0 ETH | 0.00016618 | ||||
| Distro | 3683857 | 38 days ago | IN | 0 ETH | 0.00017387 | ||||
| Distro | 3596242 | 45 days ago | IN | 0 ETH | 0.00018429 | ||||
| Distro | 3502580 | 53 days ago | IN | 0 ETH | 0.00016228 | ||||
| Distro | 3415913 | 59 days ago | IN | 0 ETH | 0.00019368 | ||||
| Distro | 3318588 | 66 days ago | IN | 0 ETH | 0.00017568 | ||||
| Distro | 3223327 | 73 days ago | IN | 0 ETH | 0.00014389 | ||||
| Distro | 3177479 | 77 days ago | IN | 0 ETH | 0.00019899 | ||||
| Claim Bribes | 3063302 | 86 days ago | IN | 0 ETH | 0.00006362 | ||||
| Claim Fees | 3063298 | 86 days ago | IN | 0 ETH | 0.00000944 | ||||
| Distro | 3051561 | 87 days ago | IN | 0 ETH | 0.00023921 | ||||
| Claim Bribes | 3040054 | 88 days ago | IN | 0 ETH | 0.00000342 | ||||
| Claim Fees | 3040051 | 88 days ago | IN | 0 ETH | 0.00001689 | ||||
| Claim Bribes | 3039933 | 88 days ago | IN | 0 ETH | 0.000021 | ||||
| Claim Fees | 3039929 | 88 days ago | IN | 0 ETH | 0.00002015 | ||||
| Claim Fees | 3004671 | 91 days ago | IN | 0 ETH | 0.00001245 | ||||
| Claim Fees | 3004661 | 91 days ago | IN | 0 ETH | 0.00001509 | ||||
| Claim Fees | 3004641 | 91 days ago | IN | 0 ETH | 0.00001956 | ||||
| Claim Fees | 3004396 | 91 days ago | IN | 0 ETH | 0.00007019 | ||||
| Vote | 3002181 | 91 days ago | IN | 0 ETH | 0.00009403 | ||||
| Claim Fees | 2995843 | 91 days ago | IN | 0 ETH | 0.00001756 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Cross-Chain Transactions
Loading...
Loading
Contract Name:
Voter
Compiler Version
v0.8.13+commit.abaa5c0e
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity 0.8.13;
import 'contracts/libraries/Math.sol';
import 'contracts/interfaces/IBribe.sol';
import 'contracts/interfaces/IBribeFactory.sol';
import 'contracts/interfaces/IGauge.sol';
import 'contracts/interfaces/IGaugeFactory.sol';
import 'contracts/interfaces/IERC20.sol';
import 'contracts/interfaces/IMinter.sol';
import 'contracts/interfaces/IPair.sol';
import 'contracts/interfaces/IPairFactory.sol';
import 'contracts/interfaces/IVoter.sol';
import 'contracts/interfaces/IVotingEscrow.sol';
contract Voter is IVoter {
address public immutable _ve; // the ve token that governs these contracts
address public immutable factory; // the PairFactory
address internal immutable base;
address public immutable gaugefactory;
address public immutable bribefactory;
uint internal constant DURATION = 7 days; // rewards are released over 7 days
address public minter;
address public governor; // should be set to an IGovernor
address public emergencyCouncil; // credibly neutral party similar to Curve's Emergency DAO
uint public totalWeight; // total voting weight
address[] public pools; // all pools viable for incentives
mapping(address => address) public gauges; // pool => gauge
mapping(address => address) public poolForGauge; // gauge => pool
mapping(address => address) public internal_bribes; // gauge => internal bribe (only fees)
mapping(address => address) public external_bribes; // gauge => external bribe (real bribes)
mapping(address => uint256) public weights; // pool => weight
mapping(uint => mapping(address => uint256)) public votes; // nft => pool => votes
mapping(uint => address[]) public poolVote; // nft => pools
mapping(uint => uint) public usedWeights; // nft => total voting weight of user
mapping(uint => uint) public lastVoted; // nft => timestamp of last vote, to ensure one vote per epoch
mapping(address => bool) public isGauge;
mapping(address => bool) public isWhitelisted;
mapping(address => bool) public isAlive;
event GaugeCreated(address indexed gauge, address creator, address internal_bribe, address indexed external_bribe, address indexed pool);
event GaugeKilled(address indexed gauge);
event GaugeRevived(address indexed gauge);
event Voted(address indexed voter, uint tokenId, uint256 weight);
event Abstained(uint tokenId, uint256 weight);
event Deposit(address indexed lp, address indexed gauge, uint tokenId, uint amount);
event Withdraw(address indexed lp, address indexed gauge, uint tokenId, uint amount);
event NotifyReward(address indexed sender, address indexed reward, uint amount);
event DistributeReward(address indexed sender, address indexed gauge, uint amount);
event Attach(address indexed owner, address indexed gauge, uint tokenId);
event Detach(address indexed owner, address indexed gauge, uint tokenId);
event Whitelisted(address indexed whitelister, address indexed token);
constructor(address __ve, address _factory, address _gauges, address _bribes) {
_ve = __ve;
factory = _factory;
base = IVotingEscrow(__ve).token();
gaugefactory = _gauges;
bribefactory = _bribes;
minter = msg.sender;
governor = msg.sender;
emergencyCouncil = msg.sender;
}
// simple re-entrancy check
uint internal _unlocked = 1;
modifier lock() {
require(_unlocked == 1);
_unlocked = 2;
_;
_unlocked = 1;
}
modifier onlyNewEpoch(uint _tokenId) {
// ensure new epoch since last vote
require((block.timestamp / DURATION) * DURATION > lastVoted[_tokenId], "TOKEN_ALREADY_VOTED_THIS_EPOCH");
_;
}
function initialize(address[] memory _tokens, address _minter) external {
require(msg.sender == minter);
for (uint i = 0; i < _tokens.length; i++) {
_whitelist(_tokens[i]);
}
minter = _minter;
}
function setGovernor(address _governor) public {
require(msg.sender == governor);
governor = _governor;
}
function setEmergencyCouncil(address _council) public {
require(msg.sender == emergencyCouncil);
emergencyCouncil = _council;
}
function reset(uint _tokenId) external onlyNewEpoch(_tokenId) {
require(IVotingEscrow(_ve).isApprovedOrOwner(msg.sender, _tokenId));
lastVoted[_tokenId] = block.timestamp;
_reset(_tokenId);
IVotingEscrow(_ve).abstain(_tokenId);
}
function _reset(uint _tokenId) internal {
address[] storage _poolVote = poolVote[_tokenId];
uint _poolVoteCnt = _poolVote.length;
uint256 _totalWeight = 0;
for (uint i = 0; i < _poolVoteCnt; i ++) {
address _pool = _poolVote[i];
uint256 _votes = votes[_tokenId][_pool];
if (_votes != 0) {
_updateFor(gauges[_pool]);
weights[_pool] -= _votes;
votes[_tokenId][_pool] -= _votes;
if (_votes > 0) {
IBribe(internal_bribes[gauges[_pool]])._withdraw(uint256(_votes), _tokenId);
IBribe(external_bribes[gauges[_pool]])._withdraw(uint256(_votes), _tokenId);
_totalWeight += _votes;
} else {
_totalWeight -= _votes;
}
emit Abstained(_tokenId, _votes);
}
}
totalWeight -= uint256(_totalWeight);
usedWeights[_tokenId] = 0;
delete poolVote[_tokenId];
}
function poke(uint _tokenId) external {
address[] memory _poolVote = poolVote[_tokenId];
uint _poolCnt = _poolVote.length;
uint256[] memory _weights = new uint256[](_poolCnt);
for (uint i = 0; i < _poolCnt; i ++) {
_weights[i] = votes[_tokenId][_poolVote[i]];
}
_vote(_tokenId, _poolVote, _weights);
}
function _vote(uint _tokenId, address[] memory _poolVote, uint256[] memory _weights) internal {
_reset(_tokenId);
uint _poolCnt = _poolVote.length;
uint256 _weight = IVotingEscrow(_ve).balanceOfNFT(_tokenId);
uint256 _totalVoteWeight = 0;
uint256 _totalWeight = 0;
uint256 _usedWeight = 0;
for (uint i = 0; i < _poolCnt; i++) {
_totalVoteWeight += _weights[i];
}
for (uint i = 0; i < _poolCnt; i++) {
address _pool = _poolVote[i];
address _gauge = gauges[_pool];
if (isGauge[_gauge]) {
uint256 _poolWeight = _weights[i] * _weight / _totalVoteWeight;
require(votes[_tokenId][_pool] == 0);
require(_poolWeight != 0);
_updateFor(_gauge);
poolVote[_tokenId].push(_pool);
weights[_pool] += _poolWeight;
votes[_tokenId][_pool] += _poolWeight;
IBribe(internal_bribes[_gauge])._deposit(uint256(_poolWeight), _tokenId);
IBribe(external_bribes[_gauge])._deposit(uint256(_poolWeight), _tokenId);
_usedWeight += _poolWeight;
_totalWeight += _poolWeight;
emit Voted(msg.sender, _tokenId, _poolWeight);
}
}
if (_usedWeight > 0) IVotingEscrow(_ve).voting(_tokenId);
totalWeight += uint256(_totalWeight);
usedWeights[_tokenId] = uint256(_usedWeight);
}
function vote(uint tokenId, address[] calldata _poolVote, uint256[] calldata _weights) external onlyNewEpoch(tokenId) {
require(IVotingEscrow(_ve).isApprovedOrOwner(msg.sender, tokenId));
require(_poolVote.length == _weights.length);
lastVoted[tokenId] = block.timestamp;
_vote(tokenId, _poolVote, _weights);
}
function whitelist(address _token) external {
require(msg.sender == governor);
_whitelist(_token);
}
function _whitelist(address _token) internal {
require(!isWhitelisted[_token]);
isWhitelisted[_token] = true;
emit Whitelisted(msg.sender, _token);
}
function removeFromWhitelist(address[] calldata _tokens) external {
require(msg.sender == governor);
for (uint i = 0; i < _tokens.length; i++) {
delete isWhitelisted[_tokens[i]];
}
}
function createGauge(address _pool) external returns (address) {
require(gauges[_pool] == address(0x0), "exists");
address[] memory allowedRewards = new address[](3);
address[] memory internalRewards = new address[](2);
bool isPair = IPairFactory(factory).isPair(_pool);
address tokenA;
address tokenB;
if (isPair) {
(tokenA, tokenB) = IPair(_pool).tokens();
allowedRewards[0] = tokenA;
allowedRewards[1] = tokenB;
internalRewards[0] = tokenA;
internalRewards[1] = tokenB;
if (base != tokenA && base != tokenB) {
allowedRewards[2] = base;
}
}
if (msg.sender != governor) { // gov can create for any pool, even non-Kodo pairs
require(isPair, "!_pool");
require(isWhitelisted[tokenA] && isWhitelisted[tokenB], "!whitelisted");
}
address _internal_bribe = IBribeFactory(bribefactory).createInternalBribe(internalRewards);
address _external_bribe = IBribeFactory(bribefactory).createExternalBribe(allowedRewards);
address _gauge = IGaugeFactory(gaugefactory).createGauge(_pool, _internal_bribe, _external_bribe, _ve, isPair, allowedRewards);
IERC20(base).approve(_gauge, type(uint).max);
internal_bribes[_gauge] = _internal_bribe;
external_bribes[_gauge] = _external_bribe;
gauges[_pool] = _gauge;
poolForGauge[_gauge] = _pool;
isGauge[_gauge] = true;
isAlive[_gauge] = true;
_updateFor(_gauge);
pools.push(_pool);
emit GaugeCreated(_gauge, msg.sender, _internal_bribe, _external_bribe, _pool);
return _gauge;
}
function killGauge(address _gauge) external {
require(msg.sender == emergencyCouncil, "not emergency council");
require(isAlive[_gauge], "gauge already dead");
isAlive[_gauge] = false;
claimable[_gauge] = 0;
emit GaugeKilled(_gauge);
}
function reviveGauge(address _gauge) external {
require(msg.sender == emergencyCouncil, "not emergency council");
require(!isAlive[_gauge], "gauge already alive");
isAlive[_gauge] = true;
emit GaugeRevived(_gauge);
}
function attachTokenToGauge(uint tokenId, address account) external {
require(isGauge[msg.sender]);
require(isAlive[msg.sender]); // killed gauges cannot attach tokens to themselves
if (tokenId > 0) IVotingEscrow(_ve).attach(tokenId);
emit Attach(account, msg.sender, tokenId);
}
function emitDeposit(uint tokenId, address account, uint amount) external {
require(isGauge[msg.sender]);
require(isAlive[msg.sender]);
emit Deposit(account, msg.sender, tokenId, amount);
}
function detachTokenFromGauge(uint tokenId, address account) external {
require(isGauge[msg.sender]);
if (tokenId > 0) IVotingEscrow(_ve).detach(tokenId);
emit Detach(account, msg.sender, tokenId);
}
function emitWithdraw(uint tokenId, address account, uint amount) external {
require(isGauge[msg.sender]);
emit Withdraw(account, msg.sender, tokenId, amount);
}
function length() external view returns (uint) {
return pools.length;
}
uint internal index;
mapping(address => uint) internal supplyIndex;
mapping(address => uint) public claimable;
function notifyRewardAmount(uint amount) external {
_safeTransferFrom(base, msg.sender, address(this), amount); // transfer the distro in
uint256 _ratio = amount * 1e18 / totalWeight; // 1e18 adjustment is removed during claim
if (_ratio > 0) {
index += _ratio;
}
emit NotifyReward(msg.sender, base, amount);
}
function updateFor(address[] memory _gauges) external {
for (uint i = 0; i < _gauges.length; i++) {
_updateFor(_gauges[i]);
}
}
function updateForRange(uint start, uint end) public {
for (uint i = start; i < end; i++) {
_updateFor(gauges[pools[i]]);
}
}
function updateAll() external {
updateForRange(0, pools.length);
}
function updateGauge(address _gauge) external {
_updateFor(_gauge);
}
function _updateFor(address _gauge) internal {
address _pool = poolForGauge[_gauge];
uint256 _supplied = weights[_pool];
if (_supplied > 0) {
uint _supplyIndex = supplyIndex[_gauge];
uint _index = index; // get global index0 for accumulated distro
supplyIndex[_gauge] = _index; // update _gauge current position to global position
uint _delta = _index - _supplyIndex; // see if there is any difference that need to be accrued
if (_delta > 0) {
uint _share = uint(_supplied) * _delta / 1e18; // add accrued difference for each supplied token
if (isAlive[_gauge]) {
claimable[_gauge] += _share;
}
}
} else {
supplyIndex[_gauge] = index; // new users are set to the default global state
}
}
function claimRewards(address[] memory _gauges, address[][] memory _tokens) external {
for (uint i = 0; i < _gauges.length; i++) {
IGauge(_gauges[i]).getReward(msg.sender, _tokens[i]);
}
}
function claimBribes(address[] memory _bribes, address[][] memory _tokens, uint _tokenId) external {
require(IVotingEscrow(_ve).isApprovedOrOwner(msg.sender, _tokenId));
for (uint i = 0; i < _bribes.length; i++) {
IBribe(_bribes[i]).getRewardForOwner(_tokenId, _tokens[i]);
}
}
function claimFees(address[] memory _fees, address[][] memory _tokens, uint _tokenId) external {
require(IVotingEscrow(_ve).isApprovedOrOwner(msg.sender, _tokenId));
for (uint i = 0; i < _fees.length; i++) {
IBribe(_fees[i]).getRewardForOwner(_tokenId, _tokens[i]);
}
}
function distributeFees(address[] memory _gauges) external {
for (uint i = 0; i < _gauges.length; i++) {
if (IGauge(_gauges[i]).isForPair()){
IGauge(_gauges[i]).claimFees();
}
}
}
function distribute(address _gauge) public lock {
IMinter(minter).update_period();
_updateFor(_gauge); // should set claimable to 0 if killed
uint _claimable = claimable[_gauge];
if (_claimable > IGauge(_gauge).left(base) && _claimable / DURATION > 0) {
claimable[_gauge] = 0;
IGauge(_gauge).notifyRewardAmount(base, _claimable);
emit DistributeReward(msg.sender, _gauge, _claimable);
}
}
function distro() external {
distribute(0, pools.length);
}
function distribute() external {
distribute(0, pools.length);
}
function distribute(uint start, uint finish) public {
for (uint x = start; x < finish; x++) {
distribute(gauges[pools[x]]);
}
}
function distribute(address[] memory _gauges) external {
for (uint x = 0; x < _gauges.length; x++) {
distribute(_gauges[x]);
}
}
function _safeTransferFrom(address token, address from, address to, uint256 value) internal {
require(token.code.length > 0);
(bool success, bytes memory data) =
token.call(abi.encodeWithSelector(IERC20.transferFrom.selector, from, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))));
}
}pragma solidity 0.8.13;
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);
}pragma solidity 0.8.13;
interface IBribeFactory {
function createInternalBribe(address[] memory) external returns (address);
function createExternalBribe(address[] memory) external returns (address);
}pragma solidity 0.8.13;
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);
}pragma solidity 0.8.13;
interface IGauge {
function notifyRewardAmount(address token, uint amount) external;
function getReward(address account, address[] memory tokens) external;
function claimFees() external returns (uint claimed0, uint claimed1);
function left(address token) external view returns (uint);
function isForPair() external view returns (bool);
}pragma solidity 0.8.13;
interface IGaugeFactory {
function createGauge(address, address, address, address, bool, address[] memory) external returns (address);
}pragma solidity 0.8.13;
interface IMinter {
function update_period() external returns (uint);
}pragma solidity 0.8.13;
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);
}pragma solidity 0.8.13;
interface IPairFactory {
function allPairsLength() external view returns (uint);
function isPair(address pair) external view returns (bool);
function pairCodeHash() external pure returns (bytes32);
function getPair(address tokenA, address token, bool stable) external view returns (address);
function createPair(address tokenA, address tokenB, bool stable) external returns (address pair);
}pragma solidity 0.8.13;
interface IVoter {
function _ve() external view returns (address);
function governor() external view returns (address);
function emergencyCouncil() external view returns (address);
function attachTokenToGauge(uint _tokenId, address account) external;
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;
}pragma solidity 0.8.13;
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);
}pragma solidity 0.8.13;
library Math {
function max(uint a, uint b) internal pure returns (uint) {
return a >= b ? a : b;
}
function min(uint a, uint b) internal pure returns (uint) {
return a < b ? a : b;
}
function sqrt(uint y) internal pure returns (uint z) {
if (y > 3) {
z = y;
uint x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
}
}
function cbrt(uint256 n) internal pure returns (uint256) { unchecked {
uint256 x = 0;
for (uint256 y = 1 << 255; y > 0; y >>= 3) {
x <<= 1;
uint256 z = 3 * x * (x + 1) + 1;
if (n / y >= z) {
n -= y * z;
x += 1;
}
}
return x;
}}
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"__ve","type":"address"},{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_gauges","type":"address"},{"internalType":"address","name":"_bribes","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"weight","type":"uint256"}],"name":"Abstained","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"gauge","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Attach","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lp","type":"address"},{"indexed":true,"internalType":"address","name":"gauge","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"gauge","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Detach","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"gauge","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DistributeReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"gauge","type":"address"},{"indexed":false,"internalType":"address","name":"creator","type":"address"},{"indexed":false,"internalType":"address","name":"internal_bribe","type":"address"},{"indexed":true,"internalType":"address","name":"external_bribe","type":"address"},{"indexed":true,"internalType":"address","name":"pool","type":"address"}],"name":"GaugeCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"gauge","type":"address"}],"name":"GaugeKilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"gauge","type":"address"}],"name":"GaugeRevived","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"reward","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NotifyReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"voter","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"weight","type":"uint256"}],"name":"Voted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"whitelister","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"}],"name":"Whitelisted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"lp","type":"address"},{"indexed":true,"internalType":"address","name":"gauge","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"_ve","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"attachTokenToGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bribefactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_bribes","type":"address[]"},{"internalType":"address[][]","name":"_tokens","type":"address[][]"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"claimBribes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_fees","type":"address[]"},{"internalType":"address[][]","name":"_tokens","type":"address[][]"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"claimFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_gauges","type":"address[]"},{"internalType":"address[][]","name":"_tokens","type":"address[][]"}],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pool","type":"address"}],"name":"createGauge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"detachTokenFromGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_gauges","type":"address[]"}],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gauge","type":"address"}],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"finish","type":"uint256"}],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_gauges","type":"address[]"}],"name":"distributeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distro","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyCouncil","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emitWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"external_bribes","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gaugefactory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"gauges","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"governor","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"},{"internalType":"address","name":"_minter","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"internal_bribes","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAlive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isGauge","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_gauge","type":"address"}],"name":"killGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lastVoted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"length","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"notifyRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"poke","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"poolForGauge","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolVote","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pools","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_tokens","type":"address[]"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"reset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gauge","type":"address"}],"name":"reviveGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_council","type":"address"}],"name":"setEmergencyCouncil","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_governor","type":"address"}],"name":"setGovernor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalWeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"updateAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_gauges","type":"address[]"}],"name":"updateFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"updateForRange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_gauge","type":"address"}],"name":"updateGauge","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"usedWeights","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address[]","name":"_poolVote","type":"address[]"},{"internalType":"uint256[]","name":"_weights","type":"uint256[]"}],"name":"vote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"votes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"weights","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"whitelist","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
61012060405260016011553480156200001757600080fd5b5060405162003746380380620037468339810160408190526200003a916200011c565b6001600160a01b03808516608081905290841660a05260408051637e062a3560e11b8152905163fc0c546a916004808201926020929091908290030181865afa1580156200008c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b2919062000179565b6001600160a01b0390811660c05291821660e0521661010052505060008054336001600160a01b03199182168117909255600180548216831790556002805490911690911790556200019e565b80516001600160a01b03811681146200011757600080fd5b919050565b600080600080608085870312156200013357600080fd5b6200013e85620000ff565b93506200014e60208601620000ff565b92506200015e60408601620000ff565b91506200016e60608601620000ff565b905092959194509250565b6000602082840312156200018c57600080fd5b6200019782620000ff565b9392505050565b60805160a05160c05160e051610100516134d0620002766000396000818161040201528181611d160152611d940152600081816105010152611e27015260008181610bc201528181610c3b01528181610f8b0152818161104701528181611b7b01528181611bb401528181611be60152611f0801526000818161072a01526119d20152600081816105ba0152818161095901528181610a0501528181610cc80152818161111701528181611298015281816113c80152818161158701528181611e59015281816126930152612a5601526134d06000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c806379e938241161019d578063ac4afa38116100e9578063d23254b4116100a2578063e586875f1161007c578063e586875f1461079d578063ea94ee44146107b0578063eae40f26146107c3578063f3594be0146107ec57600080fd5b8063d23254b41461075f578063d560b0d71461078a578063e4fc6b6d146104a057600080fd5b8063ac4afa38146106ad578063ae21c4cb146106c0578063b9a09fd5146106e9578063c42cf53514610712578063c45a015514610725578063c527ee1f1461074c57600080fd5b80639b6a9d7211610156578063a61c713a11610130578063a61c713a14610644578063a7cac84614610657578063a86a366d14610677578063aa79979b1461068a57600080fd5b80639b6a9d721461060b5780639f06247b1461061e578063a5f4301e1461063157600080fd5b806379e93824146105825780637ac09bf7146105a25780638dd598fb146105b557806396c82e57146105dc578063992a7933146105e55780639b19251a146105f857600080fd5b8063462d0b2e1161025c578063666256aa116102155780636ecbe38a116101ef5780636ecbe38a146105365780637625391a146105495780637715ee751461055c5780637778960e1461056f57600080fd5b8063666256aa146104e957806368c3acb3146104fc578063698473e31461052357600080fd5b8063462d0b2e1461048d57806347b3c6ba146104a057806353d78693146104a8578063548db174146104b05780636138889b146104c357806363453ae1146104d657600080fd5b8063310bd74b116102c95780633af32abf116102a35780633af32abf146104245780633c6b16ab14610447578063402914f51461045a578063411b1f771461047a57600080fd5b8063310bd74b146103d757806332145f90146103ea57806338752a9d146103fd57600080fd5b806306d6a1b21461031157806307546172146103575780630c340a241461036a5780631703e5f91461037d5780631f7b6d32146103b057806320b1cb6f146103c2575b600080fd5b61033a61031f366004612d98565b6006602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b60005461033a906001600160a01b031681565b60015461033a906001600160a01b031681565b6103a061038b366004612d98565b60106020526000908152604090205460ff1681565b604051901515815260200161034e565b6004545b60405190815260200161034e565b6103d56103d0366004612f1b565b61080c565b005b6103d56103e5366004612f7f565b6108c2565b6103d56103f8366004612f7f565b610a6d565b61033a7f000000000000000000000000000000000000000000000000000000000000000081565b6103a0610432366004612d98565b600f6020526000908152604090205460ff1681565b6103d5610455366004612f7f565b610bbd565b6103b4610468366004612d98565b60146020526000908152604090205481565b6103d5610488366004612f98565b610c90565b6103d561049b366004612fc8565b610d6a565b6103d5610de5565b6103d5610df6565b6103d56104be36600461305b565b610e05565b6103d56104d136600461309d565b610e85565b6103d56104e4366004612d98565b610ec9565b6103d56104f73660046130da565b6110fb565b61033a7f000000000000000000000000000000000000000000000000000000000000000081565b6103d5610531366004612f98565b611244565b6103d5610544366004612d98565b61133a565b6103d5610557366004613147565b611346565b6103d561056a3660046130da565b6113ac565b60025461033a906001600160a01b031681565b6103b4610590366004612f7f565b600c6020526000908152604090205481565b6103d56105b0366004613169565b6114f5565b61033a7f000000000000000000000000000000000000000000000000000000000000000081565b6103b460035481565b6103d56105f3366004612d98565b61168d565b6103d5610606366004612d98565b611792565b6103d5610619366004613147565b6117b2565b6103d561062c366004612d98565b611818565b61033a61063f366004612d98565b611915565b6103d56106523660046131e3565b6120b4565b6103b4610665366004612d98565b60096020526000908152604090205481565b61033a610685366004613147565b612138565b6103a0610698366004612d98565b600e6020526000908152604090205460ff1681565b61033a6106bb366004612f7f565b612170565b61033a6106ce366004612d98565b6008602052600090815260409020546001600160a01b031681565b61033a6106f7366004612d98565b6005602052600090815260409020546001600160a01b031681565b6103d5610720366004612d98565b61219a565b61033a7f000000000000000000000000000000000000000000000000000000000000000081565b6103d561075a36600461309d565b6121d3565b6103b461076d366004612f98565b600a60209081526000928352604080842090915290825290205481565b6103d561079836600461309d565b6122f0565b6103d56107ab366004612d98565b612330565b6103d56107be3660046131e3565b612369565b61033a6107d1366004612d98565b6007602052600090815260409020546001600160a01b031681565b6103b46107fa366004612f7f565b600d6020526000908152604090205481565b60005b82518110156108bd5782818151811061082a5761082a61321b565b60200260200101516001600160a01b03166331279d3d338484815181106108535761085361321b565b60200260200101516040518363ffffffff1660e01b8152600401610878929190613275565b600060405180830381600087803b15801561089257600080fd5b505af11580156108a6573d6000803e3d6000fd5b5050505080806108b5906132af565b91505061080f565b505050565b6000818152600d6020526040902054819062093a806108e181426132c8565b6108eb91906132ea565b1161093d5760405162461bcd60e51b815260206004820152601e60248201527f544f4b454e5f414c52454144595f564f5445445f544849535f45504f4348000060448201526064015b60405180910390fd5b60405163430c208160e01b8152336004820152602481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063430c208190604401602060405180830381865afa1580156109a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cc9190613309565b6109d557600080fd5b6000828152600d602052604090204290556109ef826123c8565b60405163c1f0fb9f60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063c1f0fb9f90602401600060405180830381600087803b158015610a5157600080fd5b505af1158015610a65573d6000803e3d6000fd5b505050505050565b6000818152600b6020908152604080832080548251818502810185019093528083529192909190830182828015610acd57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aaf575b5050505050905060008151905060008167ffffffffffffffff811115610af557610af5612dbc565b604051908082528060200260200182016040528015610b1e578160200160208202803683370190505b50905060005b82811015610bab57600a60008681526020019081526020016000206000858381518110610b5357610b5361321b565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110610b8e57610b8e61321b565b602090810291909101015280610ba3816132af565b915050610b24565b50610bb784848361266f565b50505050565b610be97f0000000000000000000000000000000000000000000000000000000000000000333084612aed565b600354600090610c0183670de0b6b3a76400006132ea565b610c0b91906132c8565b90508015610c2b578060126000828254610c25919061332b565b90915550505b6040518281526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169033907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf50826906020015b60405180910390a35050565b336000908152600e602052604090205460ff16610cac57600080fd5b8115610d2d57604051634c35bec560e11b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063986b7d8a90602401600060405180830381600087803b158015610d1457600080fd5b505af1158015610d28573d6000803e3d6000fd5b505050505b60405182815233906001600160a01b038316907fae268d9aab12f3605f58efd74fd3801fa812b03fdb44317eb70f46dff0e19e2290602001610c84565b6000546001600160a01b03163314610d8157600080fd5b60005b8251811015610dc157610daf838281518110610da257610da261321b565b6020026020010151612bdd565b80610db9816132af565b915050610d84565b50600080546001600160a01b0319166001600160a01b039290921691909117905550565b600454610df490600090611346565b565b600454610df4906000906117b2565b6001546001600160a01b03163314610e1c57600080fd5b60005b818110156108bd57600f6000848484818110610e3d57610e3d61321b565b9050602002016020810190610e529190612d98565b6001600160a01b031681526020810191909152604001600020805460ff1916905580610e7d816132af565b915050610e1f565b60005b8151811015610ec557610eb3828281518110610ea657610ea661321b565b6020026020010151610ec9565b80610ebd816132af565b915050610e88565b5050565b601154600114610ed857600080fd5b600260118190555060008054906101000a90046001600160a01b03166001600160a01b031663ed29fc116040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190613343565b50610f6181612c50565b6001600160a01b0381811660008181526014602052604090819020549051634cde602960e11b81527f00000000000000000000000000000000000000000000000000000000000000009093166004840152916399bcc05290602401602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd9190613343565b811180156110175750600061101562093a80836132c8565b115b156110f2576001600160a01b03828116600081815260146020526040808220919091555163b66503cf60e01b81527f00000000000000000000000000000000000000000000000000000000000000009092166004830152602482018390529063b66503cf90604401600060405180830381600087803b15801561109957600080fd5b505af11580156110ad573d6000803e3d6000fd5b50506040518381526001600160a01b03851692503391507f4fa9693cae526341d334e2862ca2413b2e503f1266255f9e0869fb36e6d89b179060200160405180910390a35b50506001601155565b60405163430c208160e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063430c208190604401602060405180830381865afa158015611166573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118a9190613309565b61119357600080fd5b60005b8351811015610bb7578381815181106111b1576111b161321b565b60200260200101516001600160a01b031663a7852afa838584815181106111da576111da61321b565b60200260200101516040518363ffffffff1660e01b81526004016111ff92919061335c565b600060405180830381600087803b15801561121957600080fd5b505af115801561122d573d6000803e3d6000fd5b50505050808061123c906132af565b915050611196565b336000908152600e602052604090205460ff1661126057600080fd5b3360009081526010602052604090205460ff1661127c57600080fd5b81156112fd5760405163fbd3a29d60e01b8152600481018390527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063fbd3a29d90602401600060405180830381600087803b1580156112e457600080fd5b505af11580156112f8573d6000803e3d6000fd5b505050505b60405182815233906001600160a01b038316907f60940192810a6fb3bce3fd3e2e3a13fd6ccc7605e963fb87ee971aba829989bd90602001610c84565b61134381612c50565b50565b815b818110156108bd5761139a600560006004848154811061136a5761136a61321b565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190205416610ec9565b806113a4816132af565b915050611348565b60405163430c208160e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063430c208190604401602060405180830381865afa158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190613309565b61144457600080fd5b60005b8351811015610bb7578381815181106114625761146261321b565b60200260200101516001600160a01b031663a7852afa8385848151811061148b5761148b61321b565b60200260200101516040518363ffffffff1660e01b81526004016114b092919061335c565b600060405180830381600087803b1580156114ca57600080fd5b505af11580156114de573d6000803e3d6000fd5b5050505080806114ed906132af565b915050611447565b6000858152600d6020526040902054859062093a8061151481426132c8565b61151e91906132ea565b1161156b5760405162461bcd60e51b815260206004820152601e60248201527f544f4b454e5f414c52454144595f564f5445445f544849535f45504f434800006044820152606401610934565b60405163430c208160e01b8152336004820152602481018790527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063430c208190604401602060405180830381865afa1580156115d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fa9190613309565b61160357600080fd5b83821461160f57600080fd5b6000868152600d602090815260409182902042905581518682028181018301909352868152610a659289928991899182919085019084908082843760009201919091525050604080516020808a0282810182019093528982529093508992508891829185019084908082843760009201919091525061266f92505050565b6002546001600160a01b031633146116df5760405162461bcd60e51b81526020600482015260156024820152741b9bdd08195b595c99d95b98de4818dbdd5b98da5b605a1b6044820152606401610934565b6001600160a01b03811660009081526010602052604090205460ff1661173c5760405162461bcd60e51b815260206004820152601260248201527119d85d59d948185b1c9958591e481919585960721b6044820152606401610934565b6001600160a01b0381166000818152601060209081526040808320805460ff191690556014909152808220829055517f04a5d3f5d80d22d9345acc80618f4a4e7e663cf9e1aed23b57d975acec002ba79190a250565b6001546001600160a01b031633146117a957600080fd5b61134381612bdd565b815b818110156108bd5761180660056000600484815481106117d6576117d661321b565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190205416612c50565b80611810816132af565b9150506117b4565b6002546001600160a01b0316331461186a5760405162461bcd60e51b81526020600482015260156024820152741b9bdd08195b595c99d95b98de4818dbdd5b98da5b605a1b6044820152606401610934565b6001600160a01b03811660009081526010602052604090205460ff16156118c95760405162461bcd60e51b8152602060048201526013602482015272676175676520616c726561647920616c69766560681b6044820152606401610934565b6001600160a01b038116600081815260106020526040808220805460ff19166001179055517fed18e9faa3dccfd8aa45f69c4de40546b2ca9cccc4538a2323531656516db1aa9190a250565b6001600160a01b03818116600090815260056020526040812054909116156119685760405162461bcd60e51b815260206004820152600660248201526565786973747360d01b6044820152606401610934565b60408051600380825260808201909252600091602082016060803683375050604080516002808252606082018352939450600093909250906020830190803683370190505060405163e5e31b1360e01b81526001600160a01b0386811660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063e5e31b1390602401602060405180830381865afa158015611a19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3d9190613309565b90506000808215611c3957866001600160a01b0316639d63848a6040518163ffffffff1660e01b815260040160408051808303816000875af1158015611a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aab9190613375565b80925081935050508185600081518110611ac757611ac761321b565b60200260200101906001600160a01b031690816001600160a01b0316815250508085600181518110611afb57611afb61321b565b60200260200101906001600160a01b031690816001600160a01b0316815250508184600081518110611b2f57611b2f61321b565b60200260200101906001600160a01b031690816001600160a01b0316815250508084600181518110611b6357611b6361321b565b6001600160a01b0392831660209182029290920101527f0000000000000000000000000000000000000000000000000000000000000000811690831614801590611bdf5750806001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614155b15611c39577f000000000000000000000000000000000000000000000000000000000000000085600281518110611c1857611c1861321b565b60200260200101906001600160a01b031690816001600160a01b0316815250505b6001546001600160a01b03163314611cfc5782611c815760405162461bcd60e51b81526020600482015260066024820152650857dc1bdbdb60d21b6044820152606401610934565b6001600160a01b0382166000908152600f602052604090205460ff168015611cc157506001600160a01b0381166000908152600f602052604090205460ff165b611cfc5760405162461bcd60e51b815260206004820152600c60248201526b085dda1a5d195b1a5cdd195960a21b6044820152606401610934565b604051632a26b9eb60e01b81526000906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632a26b9eb90611d4b9088906004016133a4565b6020604051808303816000875af1158015611d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8e91906133b7565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316636485f0c4886040518263ffffffff1660e01b8152600401611dde91906133a4565b6020604051808303816000875af1158015611dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2191906133b7565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316630bc25f4f8b85857f00000000000000000000000000000000000000000000000000000000000000008b8e6040518763ffffffff1660e01b8152600401611e9b969594939291906133d4565b6020604051808303816000875af1158015611eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ede91906133b7565b60405163095ea7b360e01b81526001600160a01b03808316600483015260001960248301529192507f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af1158015611f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f779190613309565b506001600160a01b03818116600081815260076020908152604080832080546001600160a01b03199081168a8816179091556008835281842080548216898816179055948f16808452600583528184208054871686179055938352600682528083208054909516909317909355600e8352818120805460ff1990811660019081179092556010909452919020805490921617905561201481612c50565b600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b038c8116918217909255604080513381528684166020820152919285811692908516917fa4d97e9e7c65249b4cd01acb82add613adea98af32daf092366982f0a0d4e453910160405180910390a49998505050505050505050565b336000908152600e602052604090205460ff166120d057600080fd5b3360009081526010602052604090205460ff166120ec57600080fd5b604080518481526020810183905233916001600160a01b038516917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d791015b60405180910390a3505050565b600b602052816000526040600020818154811061215457600080fd5b6000918252602090912001546001600160a01b03169150829050565b6004818154811061218057600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b031633146121b157600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8151811015610ec5578181815181106121f1576121f161321b565b60200260200101516001600160a01b031663e57482136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225a9190613309565b156122de578181815181106122715761227161321b565b60200260200101516001600160a01b031663d294f0936040518163ffffffff1660e01b815260040160408051808303816000875af11580156122b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122db9190613424565b50505b806122e8816132af565b9150506121d6565b60005b8151811015610ec55761231e8282815181106123115761231161321b565b6020026020010151612c50565b80612328816132af565b9150506122f3565b6002546001600160a01b0316331461234757600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600e602052604090205460ff1661238557600080fd5b604080518481526020810183905233916001600160a01b038516917ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567910161212b565b6000818152600b6020526040812080549091805b828110156126335760008482815481106123f8576123f861321b565b6000918252602080832090910154888352600a825260408084206001600160a01b0390921680855291909252912054909150801561261e576001600160a01b038083166000908152600560205260409020546124549116612c50565b6001600160a01b0382166000908152600960205260408120805483929061247c908490613448565b90915550506000878152600a602090815260408083206001600160a01b0386168452909152812080548392906124b3908490613448565b909155505080156125d7576001600160a01b038281166000908152600560209081526040808320548416835260079091529081902054905163278afc8b60e21b815260048101849052602481018a9052911690639e2bf22c90604401600060405180830381600087803b15801561252957600080fd5b505af115801561253d573d6000803e3d6000fd5b505050506001600160a01b038281166000908152600560209081526040808320548416835260089091529081902054905163278afc8b60e21b815260048101849052602481018a9052911690639e2bf22c90604401600060405180830381600087803b1580156125ac57600080fd5b505af11580156125c0573d6000803e3d6000fd5b5050505080846125d0919061332b565b93506125e4565b6125e18185613448565b93505b60408051888152602081018390527fa9f3ca5f8a9e1580edb2741e0ba560084ec72e0067ba3423f9e9327a176882db910160405180910390a15b5050808061262b906132af565b9150506123dc565b5080600360008282546126469190613448565b90915550506000848152600c60209081526040808320839055600b9091528120610bb791612d51565b612678836123c8565b81516040516339f890b560e21b8152600481018590526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e7e242d490602401602060405180830381865afa1580156126e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127069190613343565b90506000806000805b85811015612750578681815181106127295761272961321b565b60200260200101518461273c919061332b565b935080612748816132af565b91505061270f565b5060005b85811015612a395760008882815181106127705761277061321b565b6020908102919091018101516001600160a01b03808216600090815260058452604080822054909216808252600e909452205490925060ff1615612a2457600086888b86815181106127c4576127c461321b565b60200260200101516127d691906132ea565b6127e091906132c8565b60008d8152600a602090815260408083206001600160a01b03881684529091529020549091501561281057600080fd5b8060000361281d57600080fd5b61282682612c50565b60008c8152600b6020908152604080832080546001810182559084528284200180546001600160a01b0319166001600160a01b038816908117909155835260099091528120805483929061287b90849061332b565b909155505060008c8152600a602090815260408083206001600160a01b0387168452909152812080548392906128b290849061332b565b90915550506001600160a01b038083166000908152600760205260409081902054905163f320772360e01b815260048101849052602481018f905291169063f320772390604401600060405180830381600087803b15801561291357600080fd5b505af1158015612927573d6000803e3d6000fd5b5050505060086000836001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031663f3207723828e6040518363ffffffff1660e01b815260040161299a929190918252602082015260400190565b600060405180830381600087803b1580156129b457600080fd5b505af11580156129c8573d6000803e3d6000fd5b5050505080856129d8919061332b565b94506129e4818761332b565b604080518e81526020810184905291975033917fea66f58e474bc09f580000e81f31b334d171db387d0c6098ba47bd897741679b910160405180910390a2505b50508080612a31906132af565b915050612754565b508015612abb5760405163fd4a77f160e01b8152600481018990527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063fd4a77f190602401600060405180830381600087803b158015612aa257600080fd5b505af1158015612ab6573d6000803e3d6000fd5b505050505b8160036000828254612acd919061332b565b90915550506000978852600c602052604090972096909655505050505050565b6000846001600160a01b03163b11612b0457600080fd5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691612b68919061345f565b6000604051808303816000865af19150503d8060008114612ba5576040519150601f19603f3d011682016040523d82523d6000602084013e612baa565b606091505b5091509150818015612bd4575080511580612bd4575080806020019051810190612bd49190613309565b610a6557600080fd5b6001600160a01b0381166000908152600f602052604090205460ff1615612c0357600080fd5b6001600160a01b0381166000818152600f6020526040808220805460ff191660011790555133917f6661a7108aecd07864384529117d96c319c1163e3010c01390f6b704726e07de91a350565b6001600160a01b038082166000908152600660209081526040808320549093168083526009909152919020548015612d30576001600160a01b038316600090815260136020526040812080546012549182905591612cae8383613448565b90508015610a65576000670de0b6b3a7640000612ccb83876132ea565b612cd591906132c8565b6001600160a01b03881660009081526010602052604090205490915060ff1615612d27576001600160a01b03871660009081526014602052604081208054839290612d2190849061332b565b90915550505b50505050505050565b6012546001600160a01b038416600090815260136020526040902055505050565b508054600082559060005260206000209081019061134391905b80821115612d7f5760008155600101612d6b565b5090565b6001600160a01b038116811461134357600080fd5b600060208284031215612daa57600080fd5b8135612db581612d83565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612dfb57612dfb612dbc565b604052919050565b600067ffffffffffffffff821115612e1d57612e1d612dbc565b5060051b60200190565b600082601f830112612e3857600080fd5b81356020612e4d612e4883612e03565b612dd2565b82815260059290921b84018101918181019086841115612e6c57600080fd5b8286015b84811015612e90578035612e8381612d83565b8352918301918301612e70565b509695505050505050565b600082601f830112612eac57600080fd5b81356020612ebc612e4883612e03565b82815260059290921b84018101918181019086841115612edb57600080fd5b8286015b84811015612e9057803567ffffffffffffffff811115612eff5760008081fd5b612f0d8986838b0101612e27565b845250918301918301612edf565b60008060408385031215612f2e57600080fd5b823567ffffffffffffffff80821115612f4657600080fd5b612f5286838701612e27565b93506020850135915080821115612f6857600080fd5b50612f7585828601612e9b565b9150509250929050565b600060208284031215612f9157600080fd5b5035919050565b60008060408385031215612fab57600080fd5b823591506020830135612fbd81612d83565b809150509250929050565b60008060408385031215612fdb57600080fd5b823567ffffffffffffffff811115612ff257600080fd5b612ffe85828601612e27565b9250506020830135612fbd81612d83565b60008083601f84011261302157600080fd5b50813567ffffffffffffffff81111561303957600080fd5b6020830191508360208260051b850101111561305457600080fd5b9250929050565b6000806020838503121561306e57600080fd5b823567ffffffffffffffff81111561308557600080fd5b6130918582860161300f565b90969095509350505050565b6000602082840312156130af57600080fd5b813567ffffffffffffffff8111156130c657600080fd5b6130d284828501612e27565b949350505050565b6000806000606084860312156130ef57600080fd5b833567ffffffffffffffff8082111561310757600080fd5b61311387838801612e27565b9450602086013591508082111561312957600080fd5b5061313686828701612e9b565b925050604084013590509250925092565b6000806040838503121561315a57600080fd5b50508035926020909101359150565b60008060008060006060868803121561318157600080fd5b85359450602086013567ffffffffffffffff808211156131a057600080fd5b6131ac89838a0161300f565b909650945060408801359150808211156131c557600080fd5b506131d28882890161300f565b969995985093965092949392505050565b6000806000606084860312156131f857600080fd5b83359250602084013561320a81612d83565b929592945050506040919091013590565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561326a5781516001600160a01b031687529582019590820190600101613245565b509495945050505050565b6001600160a01b03831681526040602082018190526000906130d290830184613231565b634e487b7160e01b600052601160045260246000fd5b6000600182016132c1576132c1613299565b5060010190565b6000826132e557634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561330457613304613299565b500290565b60006020828403121561331b57600080fd5b81518015158114612db557600080fd5b6000821982111561333e5761333e613299565b500190565b60006020828403121561335557600080fd5b5051919050565b8281526040602082015260006130d26040830184613231565b6000806040838503121561338857600080fd5b825161339381612d83565b6020840151909250612fbd81612d83565b602081526000612db56020830184613231565b6000602082840312156133c957600080fd5b8151612db581612d83565b6001600160a01b0387811682528681166020830152858116604083015284166060820152821515608082015260c060a0820181905260009061341890830184613231565b98975050505050505050565b6000806040838503121561343757600080fd5b505080516020909101519092909150565b60008282101561345a5761345a613299565b500390565b6000825160005b818110156134805760208186018101518583015201613466565b8181111561348f576000828501525b50919091019291505056fea26469706673582212205a5f36e5daefb2a3e6a5a9cbdcf1910c34e30383ff6ddb5a30cf55939e0a33d964736f6c634300080d00330000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb324000000000000000000000000535e02960574d8155596a73c7ad66e87e37eb6bc0000000000000000000000003a9e14d73ad40e70bafaffefe8893eb318fc23120000000000000000000000007149e14784f9d88b5497a9bf135c643151379f95
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061030c5760003560e01c806379e938241161019d578063ac4afa38116100e9578063d23254b4116100a2578063e586875f1161007c578063e586875f1461079d578063ea94ee44146107b0578063eae40f26146107c3578063f3594be0146107ec57600080fd5b8063d23254b41461075f578063d560b0d71461078a578063e4fc6b6d146104a057600080fd5b8063ac4afa38146106ad578063ae21c4cb146106c0578063b9a09fd5146106e9578063c42cf53514610712578063c45a015514610725578063c527ee1f1461074c57600080fd5b80639b6a9d7211610156578063a61c713a11610130578063a61c713a14610644578063a7cac84614610657578063a86a366d14610677578063aa79979b1461068a57600080fd5b80639b6a9d721461060b5780639f06247b1461061e578063a5f4301e1461063157600080fd5b806379e93824146105825780637ac09bf7146105a25780638dd598fb146105b557806396c82e57146105dc578063992a7933146105e55780639b19251a146105f857600080fd5b8063462d0b2e1161025c578063666256aa116102155780636ecbe38a116101ef5780636ecbe38a146105365780637625391a146105495780637715ee751461055c5780637778960e1461056f57600080fd5b8063666256aa146104e957806368c3acb3146104fc578063698473e31461052357600080fd5b8063462d0b2e1461048d57806347b3c6ba146104a057806353d78693146104a8578063548db174146104b05780636138889b146104c357806363453ae1146104d657600080fd5b8063310bd74b116102c95780633af32abf116102a35780633af32abf146104245780633c6b16ab14610447578063402914f51461045a578063411b1f771461047a57600080fd5b8063310bd74b146103d757806332145f90146103ea57806338752a9d146103fd57600080fd5b806306d6a1b21461031157806307546172146103575780630c340a241461036a5780631703e5f91461037d5780631f7b6d32146103b057806320b1cb6f146103c2575b600080fd5b61033a61031f366004612d98565b6006602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b60005461033a906001600160a01b031681565b60015461033a906001600160a01b031681565b6103a061038b366004612d98565b60106020526000908152604090205460ff1681565b604051901515815260200161034e565b6004545b60405190815260200161034e565b6103d56103d0366004612f1b565b61080c565b005b6103d56103e5366004612f7f565b6108c2565b6103d56103f8366004612f7f565b610a6d565b61033a7f0000000000000000000000007149e14784f9d88b5497a9bf135c643151379f9581565b6103a0610432366004612d98565b600f6020526000908152604090205460ff1681565b6103d5610455366004612f7f565b610bbd565b6103b4610468366004612d98565b60146020526000908152604090205481565b6103d5610488366004612f98565b610c90565b6103d561049b366004612fc8565b610d6a565b6103d5610de5565b6103d5610df6565b6103d56104be36600461305b565b610e05565b6103d56104d136600461309d565b610e85565b6103d56104e4366004612d98565b610ec9565b6103d56104f73660046130da565b6110fb565b61033a7f0000000000000000000000003a9e14d73ad40e70bafaffefe8893eb318fc231281565b6103d5610531366004612f98565b611244565b6103d5610544366004612d98565b61133a565b6103d5610557366004613147565b611346565b6103d561056a3660046130da565b6113ac565b60025461033a906001600160a01b031681565b6103b4610590366004612f7f565b600c6020526000908152604090205481565b6103d56105b0366004613169565b6114f5565b61033a7f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb32481565b6103b460035481565b6103d56105f3366004612d98565b61168d565b6103d5610606366004612d98565b611792565b6103d5610619366004613147565b6117b2565b6103d561062c366004612d98565b611818565b61033a61063f366004612d98565b611915565b6103d56106523660046131e3565b6120b4565b6103b4610665366004612d98565b60096020526000908152604090205481565b61033a610685366004613147565b612138565b6103a0610698366004612d98565b600e6020526000908152604090205460ff1681565b61033a6106bb366004612f7f565b612170565b61033a6106ce366004612d98565b6008602052600090815260409020546001600160a01b031681565b61033a6106f7366004612d98565b6005602052600090815260409020546001600160a01b031681565b6103d5610720366004612d98565b61219a565b61033a7f000000000000000000000000535e02960574d8155596a73c7ad66e87e37eb6bc81565b6103d561075a36600461309d565b6121d3565b6103b461076d366004612f98565b600a60209081526000928352604080842090915290825290205481565b6103d561079836600461309d565b6122f0565b6103d56107ab366004612d98565b612330565b6103d56107be3660046131e3565b612369565b61033a6107d1366004612d98565b6007602052600090815260409020546001600160a01b031681565b6103b46107fa366004612f7f565b600d6020526000908152604090205481565b60005b82518110156108bd5782818151811061082a5761082a61321b565b60200260200101516001600160a01b03166331279d3d338484815181106108535761085361321b565b60200260200101516040518363ffffffff1660e01b8152600401610878929190613275565b600060405180830381600087803b15801561089257600080fd5b505af11580156108a6573d6000803e3d6000fd5b5050505080806108b5906132af565b91505061080f565b505050565b6000818152600d6020526040902054819062093a806108e181426132c8565b6108eb91906132ea565b1161093d5760405162461bcd60e51b815260206004820152601e60248201527f544f4b454e5f414c52454144595f564f5445445f544849535f45504f4348000060448201526064015b60405180910390fd5b60405163430c208160e01b8152336004820152602481018390527f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3246001600160a01b03169063430c208190604401602060405180830381865afa1580156109a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109cc9190613309565b6109d557600080fd5b6000828152600d602052604090204290556109ef826123c8565b60405163c1f0fb9f60e01b8152600481018390527f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3246001600160a01b03169063c1f0fb9f90602401600060405180830381600087803b158015610a5157600080fd5b505af1158015610a65573d6000803e3d6000fd5b505050505050565b6000818152600b6020908152604080832080548251818502810185019093528083529192909190830182828015610acd57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aaf575b5050505050905060008151905060008167ffffffffffffffff811115610af557610af5612dbc565b604051908082528060200260200182016040528015610b1e578160200160208202803683370190505b50905060005b82811015610bab57600a60008681526020019081526020016000206000858381518110610b5357610b5361321b565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054828281518110610b8e57610b8e61321b565b602090810291909101015280610ba3816132af565b915050610b24565b50610bb784848361266f565b50505050565b610be97f0000000000000000000000007e91f29f8a213c8311712a8fc8c61219fb9477cb333084612aed565b600354600090610c0183670de0b6b3a76400006132ea565b610c0b91906132c8565b90508015610c2b578060126000828254610c25919061332b565b90915550505b6040518281526001600160a01b037f0000000000000000000000007e91f29f8a213c8311712a8fc8c61219fb9477cb169033907ff70d5c697de7ea828df48e5c4573cb2194c659f1901f70110c52b066dcf50826906020015b60405180910390a35050565b336000908152600e602052604090205460ff16610cac57600080fd5b8115610d2d57604051634c35bec560e11b8152600481018390527f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3246001600160a01b03169063986b7d8a90602401600060405180830381600087803b158015610d1457600080fd5b505af1158015610d28573d6000803e3d6000fd5b505050505b60405182815233906001600160a01b038316907fae268d9aab12f3605f58efd74fd3801fa812b03fdb44317eb70f46dff0e19e2290602001610c84565b6000546001600160a01b03163314610d8157600080fd5b60005b8251811015610dc157610daf838281518110610da257610da261321b565b6020026020010151612bdd565b80610db9816132af565b915050610d84565b50600080546001600160a01b0319166001600160a01b039290921691909117905550565b600454610df490600090611346565b565b600454610df4906000906117b2565b6001546001600160a01b03163314610e1c57600080fd5b60005b818110156108bd57600f6000848484818110610e3d57610e3d61321b565b9050602002016020810190610e529190612d98565b6001600160a01b031681526020810191909152604001600020805460ff1916905580610e7d816132af565b915050610e1f565b60005b8151811015610ec557610eb3828281518110610ea657610ea661321b565b6020026020010151610ec9565b80610ebd816132af565b915050610e88565b5050565b601154600114610ed857600080fd5b600260118190555060008054906101000a90046001600160a01b03166001600160a01b031663ed29fc116040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610f33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f579190613343565b50610f6181612c50565b6001600160a01b0381811660008181526014602052604090819020549051634cde602960e11b81527f0000000000000000000000007e91f29f8a213c8311712a8fc8c61219fb9477cb9093166004840152916399bcc05290602401602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd9190613343565b811180156110175750600061101562093a80836132c8565b115b156110f2576001600160a01b03828116600081815260146020526040808220919091555163b66503cf60e01b81527f0000000000000000000000007e91f29f8a213c8311712a8fc8c61219fb9477cb9092166004830152602482018390529063b66503cf90604401600060405180830381600087803b15801561109957600080fd5b505af11580156110ad573d6000803e3d6000fd5b50506040518381526001600160a01b03851692503391507f4fa9693cae526341d334e2862ca2413b2e503f1266255f9e0869fb36e6d89b179060200160405180910390a35b50506001601155565b60405163430c208160e01b8152336004820152602481018290527f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3246001600160a01b03169063430c208190604401602060405180830381865afa158015611166573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118a9190613309565b61119357600080fd5b60005b8351811015610bb7578381815181106111b1576111b161321b565b60200260200101516001600160a01b031663a7852afa838584815181106111da576111da61321b565b60200260200101516040518363ffffffff1660e01b81526004016111ff92919061335c565b600060405180830381600087803b15801561121957600080fd5b505af115801561122d573d6000803e3d6000fd5b50505050808061123c906132af565b915050611196565b336000908152600e602052604090205460ff1661126057600080fd5b3360009081526010602052604090205460ff1661127c57600080fd5b81156112fd5760405163fbd3a29d60e01b8152600481018390527f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3246001600160a01b03169063fbd3a29d90602401600060405180830381600087803b1580156112e457600080fd5b505af11580156112f8573d6000803e3d6000fd5b505050505b60405182815233906001600160a01b038316907f60940192810a6fb3bce3fd3e2e3a13fd6ccc7605e963fb87ee971aba829989bd90602001610c84565b61134381612c50565b50565b815b818110156108bd5761139a600560006004848154811061136a5761136a61321b565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190205416610ec9565b806113a4816132af565b915050611348565b60405163430c208160e01b8152336004820152602481018290527f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3246001600160a01b03169063430c208190604401602060405180830381865afa158015611417573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143b9190613309565b61144457600080fd5b60005b8351811015610bb7578381815181106114625761146261321b565b60200260200101516001600160a01b031663a7852afa8385848151811061148b5761148b61321b565b60200260200101516040518363ffffffff1660e01b81526004016114b092919061335c565b600060405180830381600087803b1580156114ca57600080fd5b505af11580156114de573d6000803e3d6000fd5b5050505080806114ed906132af565b915050611447565b6000858152600d6020526040902054859062093a8061151481426132c8565b61151e91906132ea565b1161156b5760405162461bcd60e51b815260206004820152601e60248201527f544f4b454e5f414c52454144595f564f5445445f544849535f45504f434800006044820152606401610934565b60405163430c208160e01b8152336004820152602481018790527f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3246001600160a01b03169063430c208190604401602060405180830381865afa1580156115d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fa9190613309565b61160357600080fd5b83821461160f57600080fd5b6000868152600d602090815260409182902042905581518682028181018301909352868152610a659289928991899182919085019084908082843760009201919091525050604080516020808a0282810182019093528982529093508992508891829185019084908082843760009201919091525061266f92505050565b6002546001600160a01b031633146116df5760405162461bcd60e51b81526020600482015260156024820152741b9bdd08195b595c99d95b98de4818dbdd5b98da5b605a1b6044820152606401610934565b6001600160a01b03811660009081526010602052604090205460ff1661173c5760405162461bcd60e51b815260206004820152601260248201527119d85d59d948185b1c9958591e481919585960721b6044820152606401610934565b6001600160a01b0381166000818152601060209081526040808320805460ff191690556014909152808220829055517f04a5d3f5d80d22d9345acc80618f4a4e7e663cf9e1aed23b57d975acec002ba79190a250565b6001546001600160a01b031633146117a957600080fd5b61134381612bdd565b815b818110156108bd5761180660056000600484815481106117d6576117d661321b565b60009182526020808320909101546001600160a01b03908116845290830193909352604090910190205416612c50565b80611810816132af565b9150506117b4565b6002546001600160a01b0316331461186a5760405162461bcd60e51b81526020600482015260156024820152741b9bdd08195b595c99d95b98de4818dbdd5b98da5b605a1b6044820152606401610934565b6001600160a01b03811660009081526010602052604090205460ff16156118c95760405162461bcd60e51b8152602060048201526013602482015272676175676520616c726561647920616c69766560681b6044820152606401610934565b6001600160a01b038116600081815260106020526040808220805460ff19166001179055517fed18e9faa3dccfd8aa45f69c4de40546b2ca9cccc4538a2323531656516db1aa9190a250565b6001600160a01b03818116600090815260056020526040812054909116156119685760405162461bcd60e51b815260206004820152600660248201526565786973747360d01b6044820152606401610934565b60408051600380825260808201909252600091602082016060803683375050604080516002808252606082018352939450600093909250906020830190803683370190505060405163e5e31b1360e01b81526001600160a01b0386811660048301529192506000917f000000000000000000000000535e02960574d8155596a73c7ad66e87e37eb6bc169063e5e31b1390602401602060405180830381865afa158015611a19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3d9190613309565b90506000808215611c3957866001600160a01b0316639d63848a6040518163ffffffff1660e01b815260040160408051808303816000875af1158015611a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aab9190613375565b80925081935050508185600081518110611ac757611ac761321b565b60200260200101906001600160a01b031690816001600160a01b0316815250508085600181518110611afb57611afb61321b565b60200260200101906001600160a01b031690816001600160a01b0316815250508184600081518110611b2f57611b2f61321b565b60200260200101906001600160a01b031690816001600160a01b0316815250508084600181518110611b6357611b6361321b565b6001600160a01b0392831660209182029290920101527f0000000000000000000000007e91f29f8a213c8311712a8fc8c61219fb9477cb811690831614801590611bdf5750806001600160a01b03167f0000000000000000000000007e91f29f8a213c8311712a8fc8c61219fb9477cb6001600160a01b031614155b15611c39577f0000000000000000000000007e91f29f8a213c8311712a8fc8c61219fb9477cb85600281518110611c1857611c1861321b565b60200260200101906001600160a01b031690816001600160a01b0316815250505b6001546001600160a01b03163314611cfc5782611c815760405162461bcd60e51b81526020600482015260066024820152650857dc1bdbdb60d21b6044820152606401610934565b6001600160a01b0382166000908152600f602052604090205460ff168015611cc157506001600160a01b0381166000908152600f602052604090205460ff165b611cfc5760405162461bcd60e51b815260206004820152600c60248201526b085dda1a5d195b1a5cdd195960a21b6044820152606401610934565b604051632a26b9eb60e01b81526000906001600160a01b037f0000000000000000000000007149e14784f9d88b5497a9bf135c643151379f951690632a26b9eb90611d4b9088906004016133a4565b6020604051808303816000875af1158015611d6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8e91906133b7565b905060007f0000000000000000000000007149e14784f9d88b5497a9bf135c643151379f956001600160a01b0316636485f0c4886040518263ffffffff1660e01b8152600401611dde91906133a4565b6020604051808303816000875af1158015611dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2191906133b7565b905060007f0000000000000000000000003a9e14d73ad40e70bafaffefe8893eb318fc23126001600160a01b0316630bc25f4f8b85857f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3248b8e6040518763ffffffff1660e01b8152600401611e9b969594939291906133d4565b6020604051808303816000875af1158015611eba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ede91906133b7565b60405163095ea7b360e01b81526001600160a01b03808316600483015260001960248301529192507f0000000000000000000000007e91f29f8a213c8311712a8fc8c61219fb9477cb9091169063095ea7b3906044016020604051808303816000875af1158015611f53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f779190613309565b506001600160a01b03818116600081815260076020908152604080832080546001600160a01b03199081168a8816179091556008835281842080548216898816179055948f16808452600583528184208054871686179055938352600682528083208054909516909317909355600e8352818120805460ff1990811660019081179092556010909452919020805490921617905561201481612c50565b600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b038c8116918217909255604080513381528684166020820152919285811692908516917fa4d97e9e7c65249b4cd01acb82add613adea98af32daf092366982f0a0d4e453910160405180910390a49998505050505050505050565b336000908152600e602052604090205460ff166120d057600080fd5b3360009081526010602052604090205460ff166120ec57600080fd5b604080518481526020810183905233916001600160a01b038516917fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d791015b60405180910390a3505050565b600b602052816000526040600020818154811061215457600080fd5b6000918252602090912001546001600160a01b03169150829050565b6004818154811061218057600080fd5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b031633146121b157600080fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60005b8151811015610ec5578181815181106121f1576121f161321b565b60200260200101516001600160a01b031663e57482136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061225a9190613309565b156122de578181815181106122715761227161321b565b60200260200101516001600160a01b031663d294f0936040518163ffffffff1660e01b815260040160408051808303816000875af11580156122b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122db9190613424565b50505b806122e8816132af565b9150506121d6565b60005b8151811015610ec55761231e8282815181106123115761231161321b565b6020026020010151612c50565b80612328816132af565b9150506122f3565b6002546001600160a01b0316331461234757600080fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b336000908152600e602052604090205460ff1661238557600080fd5b604080518481526020810183905233916001600160a01b038516917ff341246adaac6f497bc2a656f546ab9e182111d630394f0c57c710a59a2cb567910161212b565b6000818152600b6020526040812080549091805b828110156126335760008482815481106123f8576123f861321b565b6000918252602080832090910154888352600a825260408084206001600160a01b0390921680855291909252912054909150801561261e576001600160a01b038083166000908152600560205260409020546124549116612c50565b6001600160a01b0382166000908152600960205260408120805483929061247c908490613448565b90915550506000878152600a602090815260408083206001600160a01b0386168452909152812080548392906124b3908490613448565b909155505080156125d7576001600160a01b038281166000908152600560209081526040808320548416835260079091529081902054905163278afc8b60e21b815260048101849052602481018a9052911690639e2bf22c90604401600060405180830381600087803b15801561252957600080fd5b505af115801561253d573d6000803e3d6000fd5b505050506001600160a01b038281166000908152600560209081526040808320548416835260089091529081902054905163278afc8b60e21b815260048101849052602481018a9052911690639e2bf22c90604401600060405180830381600087803b1580156125ac57600080fd5b505af11580156125c0573d6000803e3d6000fd5b5050505080846125d0919061332b565b93506125e4565b6125e18185613448565b93505b60408051888152602081018390527fa9f3ca5f8a9e1580edb2741e0ba560084ec72e0067ba3423f9e9327a176882db910160405180910390a15b5050808061262b906132af565b9150506123dc565b5080600360008282546126469190613448565b90915550506000848152600c60209081526040808320839055600b9091528120610bb791612d51565b612678836123c8565b81516040516339f890b560e21b8152600481018590526000907f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3246001600160a01b03169063e7e242d490602401602060405180830381865afa1580156126e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127069190613343565b90506000806000805b85811015612750578681815181106127295761272961321b565b60200260200101518461273c919061332b565b935080612748816132af565b91505061270f565b5060005b85811015612a395760008882815181106127705761277061321b565b6020908102919091018101516001600160a01b03808216600090815260058452604080822054909216808252600e909452205490925060ff1615612a2457600086888b86815181106127c4576127c461321b565b60200260200101516127d691906132ea565b6127e091906132c8565b60008d8152600a602090815260408083206001600160a01b03881684529091529020549091501561281057600080fd5b8060000361281d57600080fd5b61282682612c50565b60008c8152600b6020908152604080832080546001810182559084528284200180546001600160a01b0319166001600160a01b038816908117909155835260099091528120805483929061287b90849061332b565b909155505060008c8152600a602090815260408083206001600160a01b0387168452909152812080548392906128b290849061332b565b90915550506001600160a01b038083166000908152600760205260409081902054905163f320772360e01b815260048101849052602481018f905291169063f320772390604401600060405180830381600087803b15801561291357600080fd5b505af1158015612927573d6000803e3d6000fd5b5050505060086000836001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b031663f3207723828e6040518363ffffffff1660e01b815260040161299a929190918252602082015260400190565b600060405180830381600087803b1580156129b457600080fd5b505af11580156129c8573d6000803e3d6000fd5b5050505080856129d8919061332b565b94506129e4818761332b565b604080518e81526020810184905291975033917fea66f58e474bc09f580000e81f31b334d171db387d0c6098ba47bd897741679b910160405180910390a2505b50508080612a31906132af565b915050612754565b508015612abb5760405163fd4a77f160e01b8152600481018990527f0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb3246001600160a01b03169063fd4a77f190602401600060405180830381600087803b158015612aa257600080fd5b505af1158015612ab6573d6000803e3d6000fd5b505050505b8160036000828254612acd919061332b565b90915550506000978852600c602052604090972096909655505050505050565b6000846001600160a01b03163b11612b0457600080fd5b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b1790529151600092839290881691612b68919061345f565b6000604051808303816000865af19150503d8060008114612ba5576040519150601f19603f3d011682016040523d82523d6000602084013e612baa565b606091505b5091509150818015612bd4575080511580612bd4575080806020019051810190612bd49190613309565b610a6557600080fd5b6001600160a01b0381166000908152600f602052604090205460ff1615612c0357600080fd5b6001600160a01b0381166000818152600f6020526040808220805460ff191660011790555133917f6661a7108aecd07864384529117d96c319c1163e3010c01390f6b704726e07de91a350565b6001600160a01b038082166000908152600660209081526040808320549093168083526009909152919020548015612d30576001600160a01b038316600090815260136020526040812080546012549182905591612cae8383613448565b90508015610a65576000670de0b6b3a7640000612ccb83876132ea565b612cd591906132c8565b6001600160a01b03881660009081526010602052604090205490915060ff1615612d27576001600160a01b03871660009081526014602052604081208054839290612d2190849061332b565b90915550505b50505050505050565b6012546001600160a01b038416600090815260136020526040902055505050565b508054600082559060005260206000209081019061134391905b80821115612d7f5760008155600101612d6b565b5090565b6001600160a01b038116811461134357600080fd5b600060208284031215612daa57600080fd5b8135612db581612d83565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612dfb57612dfb612dbc565b604052919050565b600067ffffffffffffffff821115612e1d57612e1d612dbc565b5060051b60200190565b600082601f830112612e3857600080fd5b81356020612e4d612e4883612e03565b612dd2565b82815260059290921b84018101918181019086841115612e6c57600080fd5b8286015b84811015612e90578035612e8381612d83565b8352918301918301612e70565b509695505050505050565b600082601f830112612eac57600080fd5b81356020612ebc612e4883612e03565b82815260059290921b84018101918181019086841115612edb57600080fd5b8286015b84811015612e9057803567ffffffffffffffff811115612eff5760008081fd5b612f0d8986838b0101612e27565b845250918301918301612edf565b60008060408385031215612f2e57600080fd5b823567ffffffffffffffff80821115612f4657600080fd5b612f5286838701612e27565b93506020850135915080821115612f6857600080fd5b50612f7585828601612e9b565b9150509250929050565b600060208284031215612f9157600080fd5b5035919050565b60008060408385031215612fab57600080fd5b823591506020830135612fbd81612d83565b809150509250929050565b60008060408385031215612fdb57600080fd5b823567ffffffffffffffff811115612ff257600080fd5b612ffe85828601612e27565b9250506020830135612fbd81612d83565b60008083601f84011261302157600080fd5b50813567ffffffffffffffff81111561303957600080fd5b6020830191508360208260051b850101111561305457600080fd5b9250929050565b6000806020838503121561306e57600080fd5b823567ffffffffffffffff81111561308557600080fd5b6130918582860161300f565b90969095509350505050565b6000602082840312156130af57600080fd5b813567ffffffffffffffff8111156130c657600080fd5b6130d284828501612e27565b949350505050565b6000806000606084860312156130ef57600080fd5b833567ffffffffffffffff8082111561310757600080fd5b61311387838801612e27565b9450602086013591508082111561312957600080fd5b5061313686828701612e9b565b925050604084013590509250925092565b6000806040838503121561315a57600080fd5b50508035926020909101359150565b60008060008060006060868803121561318157600080fd5b85359450602086013567ffffffffffffffff808211156131a057600080fd5b6131ac89838a0161300f565b909650945060408801359150808211156131c557600080fd5b506131d28882890161300f565b969995985093965092949392505050565b6000806000606084860312156131f857600080fd5b83359250602084013561320a81612d83565b929592945050506040919091013590565b634e487b7160e01b600052603260045260246000fd5b600081518084526020808501945080840160005b8381101561326a5781516001600160a01b031687529582019590820190600101613245565b509495945050505050565b6001600160a01b03831681526040602082018190526000906130d290830184613231565b634e487b7160e01b600052601160045260246000fd5b6000600182016132c1576132c1613299565b5060010190565b6000826132e557634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561330457613304613299565b500290565b60006020828403121561331b57600080fd5b81518015158114612db557600080fd5b6000821982111561333e5761333e613299565b500190565b60006020828403121561335557600080fd5b5051919050565b8281526040602082015260006130d26040830184613231565b6000806040838503121561338857600080fd5b825161339381612d83565b6020840151909250612fbd81612d83565b602081526000612db56020830184613231565b6000602082840312156133c957600080fd5b8151612db581612d83565b6001600160a01b0387811682528681166020830152858116604083015284166060820152821515608082015260c060a0820181905260009061341890830184613231565b98975050505050505050565b6000806040838503121561343757600080fd5b505080516020909101519092909150565b60008282101561345a5761345a613299565b500390565b6000825160005b818110156134805760208186018101518583015201613466565b8181111561348f576000828501525b50919091019291505056fea26469706673582212205a5f36e5daefb2a3e6a5a9cbdcf1910c34e30383ff6ddb5a30cf55939e0a33d964736f6c634300080d0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb324000000000000000000000000535e02960574d8155596a73c7ad66e87e37eb6bc0000000000000000000000003a9e14d73ad40e70bafaffefe8893eb318fc23120000000000000000000000007149e14784f9d88b5497a9bf135c643151379f95
-----Decoded View---------------
Arg [0] : __ve (address): 0x6c4A102B7aafFA9a8C9440c08A5c09deECAFB324
Arg [1] : _factory (address): 0x535E02960574d8155596a73c7Ad66e87e37Eb6Bc
Arg [2] : _gauges (address): 0x3a9E14D73AD40E70baFaFfefE8893Eb318Fc2312
Arg [3] : _bribes (address): 0x7149E14784f9d88B5497a9bf135c643151379F95
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000006c4a102b7aaffa9a8c9440c08a5c09deecafb324
Arg [1] : 000000000000000000000000535e02960574d8155596a73c7ad66e87e37eb6bc
Arg [2] : 0000000000000000000000003a9e14d73ad40e70bafaffefe8893eb318fc2312
Arg [3] : 0000000000000000000000007149e14784f9d88b5497a9bf135c643151379f95
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.