More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 479 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Create_lock | 20387065 | 207 days ago | IN | 0 ETH | 0.00083844 | ||||
Withdraw | 20387062 | 207 days ago | IN | 0 ETH | 0.0057112 | ||||
Increase_unlock_... | 19351228 | 352 days ago | IN | 0 ETH | 0.01058043 | ||||
Create_lock | 19350201 | 352 days ago | IN | 0 ETH | 0.01578031 | ||||
Withdraw | 19350197 | 352 days ago | IN | 0 ETH | 0.01652046 | ||||
Withdraw | 19253435 | 366 days ago | IN | 0 ETH | 0.0098307 | ||||
Withdraw | 19111813 | 385 days ago | IN | 0 ETH | 0.00364999 | ||||
Withdraw | 19067485 | 392 days ago | IN | 0 ETH | 0.01561063 | ||||
Withdraw | 18603453 | 457 days ago | IN | 0 ETH | 0.00955337 | ||||
Withdraw | 18413280 | 483 days ago | IN | 0 ETH | 0.00613626 | ||||
Withdraw | 18378461 | 488 days ago | IN | 0 ETH | 0.00391987 | ||||
Increase_amount | 18345972 | 493 days ago | IN | 0 ETH | 0.00285379 | ||||
Withdraw | 18160187 | 519 days ago | IN | 0 ETH | 0.0019889 | ||||
Withdraw | 18130511 | 523 days ago | IN | 0 ETH | 0.00229438 | ||||
Withdraw | 18098586 | 527 days ago | IN | 0 ETH | 0.00332523 | ||||
Withdraw | 18041787 | 535 days ago | IN | 0 ETH | 0.00449528 | ||||
Withdraw | 18009358 | 540 days ago | IN | 0 ETH | 0.00914403 | ||||
Withdraw | 17767215 | 574 days ago | IN | 0 ETH | 0.00685674 | ||||
Increase_amount | 17730831 | 579 days ago | IN | 0 ETH | 0.00438703 | ||||
Increase_unlock_... | 17730819 | 579 days ago | IN | 0 ETH | 0.00535099 | ||||
Create_lock | 17726658 | 579 days ago | IN | 0 ETH | 0.00500691 | ||||
Withdraw | 17726655 | 579 days ago | IN | 0 ETH | 0.00533945 | ||||
Withdraw | 17643575 | 591 days ago | IN | 0 ETH | 0.01127635 | ||||
Withdraw | 17642356 | 591 days ago | IN | 0 ETH | 0.01080168 | ||||
Withdraw | 17608594 | 596 days ago | IN | 0 ETH | 0.0041137 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
14591639 | 1039 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
Vyper_contract
Compiler Version
vyper:0.2.4
Contract Source Code (Vyper language format)
# @version 0.2.4 """ @title Voting Escrow @author Curve Finance @license MIT @notice Votes have a weight depending on time, so that users are committed to the future of (whatever they are voting for) @dev Vote weight decays linearly over time. Lock time cannot be more than `MAXTIME` (4 years). """ # Voting escrow to have time-weighted votes # Votes have a weight depending on time, so that users are committed # to the future of (whatever they are voting for). # The weight in this implementation is linear, and lock cannot be more than maxtime: # w ^ # 1 + / # | / # | / # | / # |/ # 0 +--------+------> time # maxtime (4 years?) struct Point: bias: int128 slope: int128 # - dweight / dt ts: uint256 blk: uint256 # block # We cannot really do block numbers per se b/c slope is per time, not per block # and per block could be fairly bad b/c Ethereum changes blocktimes. # What we can do is to extrapolate ***At functions struct LockedBalance: amount: int128 end: uint256 interface ERC20: def decimals() -> uint256: view def name() -> String[64]: view def symbol() -> String[32]: view def transfer(to: address, amount: uint256) -> bool: nonpayable def transferFrom(spender: address, to: address, amount: uint256) -> bool: nonpayable # Interface for checking whether address belongs to a whitelisted # type of a smart wallet. # When new types are added - the whole contract is changed # The check() method is modifying to be able to use caching # for individual wallet addresses interface SmartWalletChecker: def check(addr: address) -> bool: nonpayable DEPOSIT_FOR_TYPE: constant(int128) = 0 CREATE_LOCK_TYPE: constant(int128) = 1 INCREASE_LOCK_AMOUNT: constant(int128) = 2 INCREASE_UNLOCK_TIME: constant(int128) = 3 event Shutdown: pass event CommitOwnership: admin: address event ApplyOwnership: admin: address event Deposit: provider: indexed(address) value: uint256 locktime: indexed(uint256) type: int128 ts: uint256 event Withdraw: provider: indexed(address) value: uint256 ts: uint256 event Supply: prevSupply: uint256 supply: uint256 event Delegate: user: address delegate: address WEEK: constant(uint256) = 7 * 86400 # all future times are rounded by week MAXTIME: constant(uint256) = 4 * 365 * 86400 # 4 years MULTIPLIER: constant(uint256) = 10 ** 18 token: public(address) supply: public(uint256) locked: public(HashMap[address, LockedBalance]) epoch: public(uint256) point_history: public(Point[100000000000000000000000000000]) # epoch -> unsigned point user_point_history: public(HashMap[address, Point[1000000000]]) # user -> Point[user_epoch] user_point_epoch: public(HashMap[address, uint256]) slope_changes: public(HashMap[uint256, int128]) # time -> signed slope change # Aragon's view methods for compatibility controller: public(address) transfersEnabled: public(bool) name: public(String[64]) symbol: public(String[32]) version: public(String[32]) decimals: public(uint256) # Checker for whitelisted (smart contract) wallets which are allowed to deposit # The goal is to prevent tokenizing the escrow future_smart_wallet_checker: public(address) smart_wallet_checker: public(address) admin: public(address) # Can and will be a smart contract future_admin: public(address) # Functionality added to original Curve contract: # 1) allow complete shutdown of this contract while # allowing users to withdraw their locked deposits is_shutdown: public(bool) # 2) allow delegation for the `create_lock` functionality # via a slightly modified `create_lock_for` function. delegate_for: public(HashMap[address, address]) @external def __init__(token_addr: address, _name: String[64], _symbol: String[32], _version: String[32]): """ @notice Contract constructor @param token_addr `ERC20CRV` token address @param _name Token name @param _symbol Token symbol @param _version Contract version - required for Aragon compatibility """ self.admin = msg.sender self.token = token_addr self.point_history[0].blk = block.number self.point_history[0].ts = block.timestamp self.controller = msg.sender self.transfersEnabled = True _decimals: uint256 = ERC20(token_addr).decimals() assert _decimals <= 255 self.decimals = _decimals self.name = _name self.symbol = _symbol self.version = _version self.is_shutdown = False @external def shutdown(): """ @notice Disable deposits but allow withdrawals regardless of lock Extension to original VotingEscrow """ assert msg.sender == self.admin, "Admin only" # dev: admin only self.is_shutdown = True log Shutdown() @external def commit_transfer_ownership(addr: address): """ @notice Transfer ownership of VotingEscrow contract to `addr` @param addr Address to have ownership transferred to """ assert msg.sender == self.admin # dev: admin only self.future_admin = addr log CommitOwnership(addr) @external def apply_transfer_ownership(): """ @notice Apply ownership transfer """ assert msg.sender == self.admin # dev: admin only _admin: address = self.future_admin assert _admin != ZERO_ADDRESS # dev: admin not set self.admin = _admin log ApplyOwnership(_admin) @external def commit_smart_wallet_checker(addr: address): """ @notice Set an external contract to check for approved smart contract wallets @param addr Address of Smart contract checker """ assert msg.sender == self.admin self.future_smart_wallet_checker = addr @external def apply_smart_wallet_checker(): """ @notice Apply setting external contract to check approved smart contract wallets """ assert msg.sender == self.admin self.smart_wallet_checker = self.future_smart_wallet_checker @internal def assert_not_contract(addr: address): """ @notice Check if the call is from a whitelisted smart contract, revert if not @param addr Address to be checked """ if addr != tx.origin: checker: address = self.smart_wallet_checker if checker != ZERO_ADDRESS: if SmartWalletChecker(checker).check(addr): return raise "Smart contract depositors not allowed" @external def assign_delegate(addr: address): """ @notice Assign `addr` the power to create locks for `msg.sender` @param addr Address of lock delegate Extension to original VotingEscrow """ self.delegate_for[msg.sender] = addr log Delegate(msg.sender, addr) @external @view def get_last_user_slope(addr: address) -> int128: """ @notice Get the most recently recorded rate of voting power decrease for `addr` @param addr Address of the user wallet @return Value of the slope """ uepoch: uint256 = self.user_point_epoch[addr] return self.user_point_history[addr][uepoch].slope @external @view def user_point_history__ts(_addr: address, _idx: uint256) -> uint256: """ @notice Get the timestamp for checkpoint `_idx` for `_addr` @param _addr User wallet address @param _idx User epoch number @return Epoch time of the checkpoint """ return self.user_point_history[_addr][_idx].ts @external @view def locked__end(_addr: address) -> uint256: """ @notice Get timestamp when `_addr`'s lock finishes @param _addr User wallet @return Epoch time of the lock end """ return self.locked[_addr].end @internal def _checkpoint(addr: address, old_locked: LockedBalance, new_locked: LockedBalance): """ @notice Record global and per-user data to checkpoint @param addr User's wallet address. No user checkpoint if 0x0 @param old_locked Pevious locked amount / end lock time for the user @param new_locked New locked amount / end lock time for the user """ u_old: Point = empty(Point) u_new: Point = empty(Point) old_dslope: int128 = 0 new_dslope: int128 = 0 _epoch: uint256 = self.epoch if addr != ZERO_ADDRESS: # Calculate slopes and biases # Kept at zero when they have to if old_locked.end > block.timestamp and old_locked.amount > 0: u_old.slope = old_locked.amount / MAXTIME u_old.bias = u_old.slope * convert(old_locked.end - block.timestamp, int128) if new_locked.end > block.timestamp and new_locked.amount > 0: u_new.slope = new_locked.amount / MAXTIME u_new.bias = u_new.slope * convert(new_locked.end - block.timestamp, int128) # Read values of scheduled changes in the slope # old_locked.end can be in the past and in the future # new_locked.end can ONLY by in the FUTURE unless everything expired: than zeros old_dslope = self.slope_changes[old_locked.end] if new_locked.end != 0: if new_locked.end == old_locked.end: new_dslope = old_dslope else: new_dslope = self.slope_changes[new_locked.end] last_point: Point = Point({bias: 0, slope: 0, ts: block.timestamp, blk: block.number}) if _epoch > 0: last_point = self.point_history[_epoch] last_checkpoint: uint256 = last_point.ts # initial_last_point is used for extrapolation to calculate block number # (approximately, for *At methods) and save them # as we cannot figure that out exactly from inside the contract initial_last_point: Point = last_point block_slope: uint256 = 0 # dblock/dt if block.timestamp > last_point.ts: block_slope = MULTIPLIER * (block.number - last_point.blk) / (block.timestamp - last_point.ts) # If last point is already recorded in this block, slope=0 # But that's ok b/c we know the block in such case # Go over weeks to fill history and calculate what the current point is t_i: uint256 = (last_checkpoint / WEEK) * WEEK for i in range(255): # Hopefully it won't happen that this won't get used in 5 years! # If it does, users will be able to withdraw but vote weight will be broken t_i += WEEK d_slope: int128 = 0 if t_i > block.timestamp: t_i = block.timestamp else: d_slope = self.slope_changes[t_i] last_point.bias -= last_point.slope * convert(t_i - last_checkpoint, int128) last_point.slope += d_slope if last_point.bias < 0: # This can happen last_point.bias = 0 if last_point.slope < 0: # This cannot happen - just in case last_point.slope = 0 last_checkpoint = t_i last_point.ts = t_i last_point.blk = initial_last_point.blk + block_slope * (t_i - initial_last_point.ts) / MULTIPLIER _epoch += 1 if t_i == block.timestamp: last_point.blk = block.number break else: self.point_history[_epoch] = last_point self.epoch = _epoch # Now point_history is filled until t=now if addr != ZERO_ADDRESS: # If last point was in this block, the slope change has been applied already # But in such case we have 0 slope(s) last_point.slope += (u_new.slope - u_old.slope) last_point.bias += (u_new.bias - u_old.bias) if last_point.slope < 0: last_point.slope = 0 if last_point.bias < 0: last_point.bias = 0 # Record the changed point into history self.point_history[_epoch] = last_point if addr != ZERO_ADDRESS: # Schedule the slope changes (slope is going down) # We subtract new_user_slope from [new_locked.end] # and add old_user_slope to [old_locked.end] if old_locked.end > block.timestamp: # old_dslope was <something> - u_old.slope, so we cancel that old_dslope += u_old.slope if new_locked.end == old_locked.end: old_dslope -= u_new.slope # It was a new deposit, not extension self.slope_changes[old_locked.end] = old_dslope if new_locked.end > block.timestamp: if new_locked.end > old_locked.end: new_dslope -= u_new.slope # old slope disappeared at this point self.slope_changes[new_locked.end] = new_dslope # else: we recorded it already in old_dslope # Now handle user history user_epoch: uint256 = self.user_point_epoch[addr] + 1 self.user_point_epoch[addr] = user_epoch u_new.ts = block.timestamp u_new.blk = block.number self.user_point_history[addr][user_epoch] = u_new @internal def _deposit_for(_addr: address, _value: uint256, unlock_time: uint256, locked_balance: LockedBalance, type: int128): """ @notice Deposit and lock tokens for a user @param _addr User's wallet address @param _value Amount to deposit @param unlock_time New time when to unlock the tokens, or 0 if unchanged @param locked_balance Previous locked amount / timestamp """ _locked: LockedBalance = locked_balance supply_before: uint256 = self.supply self.supply = supply_before + _value old_locked: LockedBalance = _locked # Adding to existing lock, or if a lock is expired - creating a new one _locked.amount += convert(_value, int128) if unlock_time != 0: _locked.end = unlock_time self.locked[_addr] = _locked # Possibilities: # Both old_locked.end could be current or expired (>/< block.timestamp) # value == 0 (extend lock) or value > 0 (add to lock or extend lock) # _locked.end > block.timestamp (always) self._checkpoint(_addr, old_locked, _locked) if _value != 0: assert ERC20(self.token).transferFrom(_addr, self, _value) log Deposit(_addr, _value, _locked.end, type, block.timestamp) log Supply(supply_before, supply_before + _value) @external def checkpoint(): """ @notice Record global data to checkpoint """ self._checkpoint(ZERO_ADDRESS, empty(LockedBalance), empty(LockedBalance)) @external @nonreentrant('lock') def deposit_for(_addr: address, _value: uint256): """ @notice Deposit `_value` tokens for `_addr` and add to the lock @dev Anyone (even a smart contract) can deposit for someone else, but cannot extend their locktime and deposit for a brand new user @param _addr User's wallet address @param _value Amount to add to user's lock """ _locked: LockedBalance = self.locked[_addr] assert not self.is_shutdown, "Contract is shutdown" assert _value > 0 # dev: need non-zero value assert _locked.amount > 0, "No existing lock found" assert _locked.end > block.timestamp, "Cannot add to expired lock. Withdraw" self._deposit_for(_addr, _value, 0, self.locked[_addr], DEPOSIT_FOR_TYPE) @external @nonreentrant('lock') def create_lock(_value: uint256, _unlock_time: uint256): """ @notice Deposit `_value` tokens for `msg.sender` and lock until `_unlock_time` @param _value Amount to deposit @param _unlock_time Epoch time when tokens unlock, rounded down to whole weeks """ self.assert_not_contract(msg.sender) unlock_time: uint256 = (_unlock_time / WEEK) * WEEK # Locktime is rounded down to weeks _locked: LockedBalance = self.locked[msg.sender] assert not self.is_shutdown, "Contract is shutdown" assert _value > 0 # dev: need non-zero value assert _locked.amount == 0, "Withdraw old tokens first" assert unlock_time > block.timestamp, "Can only lock until time in the future" assert unlock_time <= block.timestamp + MAXTIME, "Voting lock can be 4 years max" self._deposit_for(msg.sender, _value, unlock_time, _locked, CREATE_LOCK_TYPE) @external @nonreentrant('lock') def create_lock_for(_addr: address, _value: uint256, _unlock_time: uint256): """ @notice Deposit `_value` tokens for `_addr` and lock until `_unlock_time` @param _addr Address lock is for @param _value Amount to deposit @param _unlock_time Epoch time when tokens unlock, rounded down to whole weeks Extension to original VotingEscrow """ unlock_time: uint256 = (_unlock_time / WEEK) * WEEK # Locktime is rounded down to weeks _locked: LockedBalance = self.locked[_addr] assert not self.is_shutdown, "Contract is shutdown" assert msg.sender == self.delegate_for[_addr], "Delegate only" assert _value > 0 # dev: need non-zero value assert _locked.amount == 0, "Withdraw old tokens first" assert unlock_time > block.timestamp, "Can only lock until time in the future" assert unlock_time <= block.timestamp + MAXTIME, "Voting lock can be 4 years max" self._deposit_for(_addr, _value, unlock_time, _locked, CREATE_LOCK_TYPE) @external @nonreentrant('lock') def increase_amount(_value: uint256): """ @notice Deposit `_value` additional tokens for `msg.sender` without modifying the unlock time @param _value Amount of tokens to deposit and add to the lock """ self.assert_not_contract(msg.sender) _locked: LockedBalance = self.locked[msg.sender] assert not self.is_shutdown, "Contract is shutdown" assert _value > 0 # dev: need non-zero value assert _locked.amount > 0, "No existing lock found" assert _locked.end > block.timestamp, "Cannot add to expired lock. Withdraw" self._deposit_for(msg.sender, _value, 0, _locked, INCREASE_LOCK_AMOUNT) @external @nonreentrant('lock') def increase_unlock_time(_unlock_time: uint256): """ @notice Extend the unlock time for `msg.sender` to `_unlock_time` @param _unlock_time New epoch time for unlocking """ self.assert_not_contract(msg.sender) _locked: LockedBalance = self.locked[msg.sender] unlock_time: uint256 = (_unlock_time / WEEK) * WEEK # Locktime is rounded down to weeks assert not self.is_shutdown, "Contract is shutdown" assert _locked.end > block.timestamp, "Lock expired" assert _locked.amount > 0, "Nothing is locked" assert unlock_time > _locked.end, "Can only increase lock duration" assert unlock_time <= block.timestamp + MAXTIME, "Voting lock can be 4 years max" self._deposit_for(msg.sender, 0, unlock_time, _locked, INCREASE_UNLOCK_TIME) @external @nonreentrant('lock') def withdraw(): """ @notice Withdraw all tokens for `msg.sender` @dev Only possible if the lock has expired """ _locked: LockedBalance = self.locked[msg.sender] assert block.timestamp >= _locked.end or self.is_shutdown, "The lock didn't expire" value: uint256 = convert(_locked.amount, uint256) old_locked: LockedBalance = _locked _locked.end = 0 _locked.amount = 0 self.locked[msg.sender] = _locked supply_before: uint256 = self.supply self.supply = supply_before - value # old_locked can have either expired <= timestamp or zero end # _locked has only 0 end # Both can have >= 0 amount if not self.is_shutdown: self._checkpoint(msg.sender, old_locked, _locked) assert ERC20(self.token).transfer(msg.sender, value) log Withdraw(msg.sender, value, block.timestamp) log Supply(supply_before, supply_before - value) # The following ERC20/minime-compatible methods are not real balanceOf and supply! # They measure the weights for the purpose of voting, so they don't represent # real coins. @internal @view def find_block_epoch(_block: uint256, max_epoch: uint256) -> uint256: """ @notice Binary search to estimate timestamp for block number @param _block Block to find @param max_epoch Don't go beyond this epoch @return Approximate timestamp for block """ # Binary search _min: uint256 = 0 _max: uint256 = max_epoch for i in range(128): # Will be always enough for 128-bit numbers if _min >= _max: break _mid: uint256 = (_min + _max + 1) / 2 if self.point_history[_mid].blk <= _block: _min = _mid else: _max = _mid - 1 return _min @external @view def balanceOf(addr: address, _t: uint256 = block.timestamp) -> uint256: """ @notice Get the current voting power for `msg.sender` @dev Adheres to the ERC20 `balanceOf` interface for Aragon compatibility @param addr User wallet address @param _t Epoch time to return voting power at @return User voting power """ _epoch: uint256 = self.user_point_epoch[addr] if _epoch == 0: return 0 else: last_point: Point = self.user_point_history[addr][_epoch] last_point.bias -= last_point.slope * convert(_t - last_point.ts, int128) if last_point.bias < 0: last_point.bias = 0 return convert(last_point.bias, uint256) @external @view def balanceOfAt(addr: address, _block: uint256) -> uint256: """ @notice Measure voting power of `addr` at block height `_block` @dev Adheres to MiniMe `balanceOfAt` interface: https://github.com/Giveth/minime @param addr User's wallet address @param _block Block to calculate the voting power at @return Voting power """ # Copying and pasting totalSupply code because Vyper cannot pass by # reference yet assert _block <= block.number # Binary search _min: uint256 = 0 _max: uint256 = self.user_point_epoch[addr] for i in range(128): # Will be always enough for 128-bit numbers if _min >= _max: break _mid: uint256 = (_min + _max + 1) / 2 if self.user_point_history[addr][_mid].blk <= _block: _min = _mid else: _max = _mid - 1 upoint: Point = self.user_point_history[addr][_min] max_epoch: uint256 = self.epoch _epoch: uint256 = self.find_block_epoch(_block, max_epoch) point_0: Point = self.point_history[_epoch] d_block: uint256 = 0 d_t: uint256 = 0 if _epoch < max_epoch: point_1: Point = self.point_history[_epoch + 1] d_block = point_1.blk - point_0.blk d_t = point_1.ts - point_0.ts else: d_block = block.number - point_0.blk d_t = block.timestamp - point_0.ts block_time: uint256 = point_0.ts if d_block != 0: block_time += d_t * (_block - point_0.blk) / d_block upoint.bias -= upoint.slope * convert(block_time - upoint.ts, int128) if upoint.bias >= 0: return convert(upoint.bias, uint256) else: return 0 @internal @view def supply_at(point: Point, t: uint256) -> uint256: """ @notice Calculate total voting power at some point in the past @param point The point (bias/slope) to start search from @param t Time to calculate the total voting power at @return Total voting power at that time """ last_point: Point = point t_i: uint256 = (last_point.ts / WEEK) * WEEK for i in range(255): t_i += WEEK d_slope: int128 = 0 if t_i > t: t_i = t else: d_slope = self.slope_changes[t_i] last_point.bias -= last_point.slope * convert(t_i - last_point.ts, int128) if t_i == t: break last_point.slope += d_slope last_point.ts = t_i if last_point.bias < 0: last_point.bias = 0 return convert(last_point.bias, uint256) @external @view def totalSupply(t: uint256 = block.timestamp) -> uint256: """ @notice Calculate total voting power @dev Adheres to the ERC20 `totalSupply` interface for Aragon compatibility @return Total voting power """ _epoch: uint256 = self.epoch last_point: Point = self.point_history[_epoch] return self.supply_at(last_point, t) @external @view def totalSupplyAt(_block: uint256) -> uint256: """ @notice Calculate total voting power at some point in the past @param _block Block to calculate the total voting power at @return Total voting power at `_block` """ assert _block <= block.number _epoch: uint256 = self.epoch target_epoch: uint256 = self.find_block_epoch(_block, _epoch) point: Point = self.point_history[target_epoch] dt: uint256 = 0 if target_epoch < _epoch: point_next: Point = self.point_history[target_epoch + 1] if point.blk != point_next.blk: dt = (_block - point.blk) * (point_next.ts - point.ts) / (point_next.blk - point.blk) else: if point.blk != block.number: dt = (_block - point.blk) * (block.timestamp - point.ts) / (block.number - point.blk) # Now dt contains info on how far are we beyond point return self.supply_at(point, point.ts + dt) # Dummy methods for compatibility with Aragon @external def changeController(_newController: address): """ @dev Dummy method required for Aragon compatibility """ assert msg.sender == self.controller self.controller = _newController
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"name":"Shutdown","inputs":[],"anonymous":false,"type":"event"},{"name":"CommitOwnership","inputs":[{"type":"address","name":"admin","indexed":false}],"anonymous":false,"type":"event"},{"name":"ApplyOwnership","inputs":[{"type":"address","name":"admin","indexed":false}],"anonymous":false,"type":"event"},{"name":"Deposit","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256","name":"value","indexed":false},{"type":"uint256","name":"locktime","indexed":true},{"type":"int128","name":"type","indexed":false},{"type":"uint256","name":"ts","indexed":false}],"anonymous":false,"type":"event"},{"name":"Withdraw","inputs":[{"type":"address","name":"provider","indexed":true},{"type":"uint256","name":"value","indexed":false},{"type":"uint256","name":"ts","indexed":false}],"anonymous":false,"type":"event"},{"name":"Supply","inputs":[{"type":"uint256","name":"prevSupply","indexed":false},{"type":"uint256","name":"supply","indexed":false}],"anonymous":false,"type":"event"},{"name":"Delegate","inputs":[{"type":"address","name":"user","indexed":false},{"type":"address","name":"delegate","indexed":false}],"anonymous":false,"type":"event"},{"outputs":[],"inputs":[{"type":"address","name":"token_addr"},{"type":"string","name":"_name"},{"type":"string","name":"_symbol"},{"type":"string","name":"_version"}],"stateMutability":"nonpayable","type":"constructor"},{"name":"shutdown","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":37026},{"name":"commit_transfer_ownership","outputs":[],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"nonpayable","type":"function","gas":37627},{"name":"apply_transfer_ownership","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":38527},{"name":"commit_smart_wallet_checker","outputs":[],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"nonpayable","type":"function","gas":36337},{"name":"apply_smart_wallet_checker","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":37125},{"name":"assign_delegate","outputs":[],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"nonpayable","type":"function","gas":37582},{"name":"get_last_user_slope","outputs":[{"type":"int128","name":""}],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"view","type":"function","gas":2629},{"name":"user_point_history__ts","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"_addr"},{"type":"uint256","name":"_idx"}],"stateMutability":"view","type":"function","gas":1732},{"name":"locked__end","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"_addr"}],"stateMutability":"view","type":"function","gas":1653},{"name":"checkpoint","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":37052462},{"name":"deposit_for","outputs":[],"inputs":[{"type":"address","name":"_addr"},{"type":"uint256","name":"_value"}],"stateMutability":"nonpayable","type":"function","gas":74281084},{"name":"create_lock","outputs":[],"inputs":[{"type":"uint256","name":"_value"},{"type":"uint256","name":"_unlock_time"}],"stateMutability":"nonpayable","type":"function","gas":74282689},{"name":"create_lock_for","outputs":[],"inputs":[{"type":"address","name":"_addr"},{"type":"uint256","name":"_value"},{"type":"uint256","name":"_unlock_time"}],"stateMutability":"nonpayable","type":"function","gas":74281027},{"name":"increase_amount","outputs":[],"inputs":[{"type":"uint256","name":"_value"}],"stateMutability":"nonpayable","type":"function","gas":74282084},{"name":"increase_unlock_time","outputs":[],"inputs":[{"type":"uint256","name":"_unlock_time"}],"stateMutability":"nonpayable","type":"function","gas":74282832},{"name":"withdraw","outputs":[],"inputs":[],"stateMutability":"nonpayable","type":"function","gas":37225413},{"name":"balanceOf","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"addr"}],"stateMutability":"view","type":"function"},{"name":"balanceOf","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"addr"},{"type":"uint256","name":"_t"}],"stateMutability":"view","type":"function"},{"name":"balanceOfAt","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"addr"},{"type":"uint256","name":"_block"}],"stateMutability":"view","type":"function","gas":514513},{"name":"totalSupply","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function"},{"name":"totalSupply","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"t"}],"stateMutability":"view","type":"function"},{"name":"totalSupplyAt","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"uint256","name":"_block"}],"stateMutability":"view","type":"function","gas":812830},{"name":"changeController","outputs":[],"inputs":[{"type":"address","name":"_newController"}],"stateMutability":"nonpayable","type":"function","gas":36997},{"name":"token","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1931},{"name":"supply","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":1961},{"name":"locked","outputs":[{"type":"int128","name":"amount"},{"type":"uint256","name":"end"}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":3449},{"name":"epoch","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2021},{"name":"point_history","outputs":[{"type":"int128","name":"bias"},{"type":"int128","name":"slope"},{"type":"uint256","name":"ts"},{"type":"uint256","name":"blk"}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":5640},{"name":"user_point_history","outputs":[{"type":"int128","name":"bias"},{"type":"int128","name":"slope"},{"type":"uint256","name":"ts"},{"type":"uint256","name":"blk"}],"inputs":[{"type":"address","name":"arg0"},{"type":"uint256","name":"arg1"}],"stateMutability":"view","type":"function","gas":6169},{"name":"user_point_epoch","outputs":[{"type":"uint256","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":2265},{"name":"slope_changes","outputs":[{"type":"int128","name":""}],"inputs":[{"type":"uint256","name":"arg0"}],"stateMutability":"view","type":"function","gas":2256},{"name":"controller","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2171},{"name":"transfersEnabled","outputs":[{"type":"bool","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2201},{"name":"name","outputs":[{"type":"string","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":8633},{"name":"symbol","outputs":[{"type":"string","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":7686},{"name":"version","outputs":[{"type":"string","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":7716},{"name":"decimals","outputs":[{"type":"uint256","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2321},{"name":"future_smart_wallet_checker","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2351},{"name":"smart_wallet_checker","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2381},{"name":"admin","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2411},{"name":"future_admin","outputs":[{"type":"address","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2441},{"name":"is_shutdown","outputs":[{"type":"bool","name":""}],"inputs":[],"stateMutability":"view","type":"function","gas":2471},{"name":"delegate_for","outputs":[{"type":"address","name":""}],"inputs":[{"type":"address","name":"arg0"}],"stateMutability":"view","type":"function","gas":2655}]
Contract Creation Code
740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a0526080613b716101403934156100a157600080fd5b6020613b7160c03960c05160205181106100ba57600080fd5b50606060206020613b710160c03960c051613b71016101c039604060206020613b710160c03960c0516004013511156100f257600080fd5b604060206040613b710160c03960c051613b710161024039602060206040613b710160c03960c05160040135111561012957600080fd5b604060206060613b710160c03960c051613b71016102a039602060206060613b710160c03960c05160040135111561016057600080fd5b3360105561014051600055436003600460c052602060c02060c052602060c0200155426002600460c052602060c02060c052602060c02001553360085560016009556020610380600463313ce5676103205261033c610140515afa6101c457600080fd5b601f3d116101d157600080fd5b600050610380516103005260ff6103005111156101ed57600080fd5b61030051600d556101c080600a60c052602060c020602082510161012060006003818352015b8261012051602002111561022657610248565b61012051602002850151610120518501555b8151600101808352811415610213575b50505050505061024080600b60c052602060c020602082510161012060006002818352015b82610120516020021115610280576102a2565b61012051602002850151610120518501555b815160010180835281141561026d575b5050505050506102a080600c60c052602060c020602082510161012060006002818352015b826101205160200211156102da576102fc565b61012051602002850151610120518501555b81516001018083528114156102c7575b5050505050506000601255613b5956600436101561000d57613847565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a05263fc0e74d160005114156101355734156100ba57600080fd5b6308c379a061014052602061016052600a610180527f41646d696e206f6e6c79000000000000000000000000000000000000000000006101a05261018050601054331461010857606461015cfd5b60016012557f4426aa1fb73e391071491fcfe21a88b5c38a0a0333a1f6e77161470439704cf860006000a1005b636b441a4060005114156101a457341561014e57600080fd5b600435602051811061015f57600080fd5b50601054331461016e57600080fd5b600435601155600435610140527f2f56810a6bf40af059b96d3aea4db54081f378029a518390491093a7b67032e96020610140a1005b636a1c05ae600051141561021a5734156101bd57600080fd5b60105433146101cb57600080fd5b60115461014052600061014051186101e257600080fd5b6101405160105561014051610160527febee2d5739011062cb4f14113f3b36bf0ffe3da5c0568f64189d1012a11891056020610160a1005b6357f901e2600051141561025b57341561023357600080fd5b600435602051811061024457600080fd5b50601054331461025357600080fd5b600435600e55005b638e5b490f600051141561028a57341561027457600080fd5b601054331461028257600080fd5b600e54600f55005b60001561037b575b61016052610140523261014051181561037557600f54610180526000610180511815610304576020610220602463c23697a86101a052610140516101c0526101bc6000610180515af16102e457600080fd5b601f3d116102f157600080fd5b60005061022051156103035761016051565b5b6308c379a06102605260206102805260256102a0527f536d61727420636f6e7472616374206465706f7369746f7273206e6f7420616c6102c0527f6c6f7765640000000000000000000000000000000000000000000000000000006102e0526102a050600061037457608461027cfd5b5b61016051565b63e272447960005114156103ed57341561039457600080fd5b60043560205181106103a557600080fd5b5060043560133360e05260c052604060c020553361014052600435610160527fab7d75eccd27c9989942a3a6e4137e415df0ad90ec428751b16361f16fe8780f6040610140a1005b637c74a174600051141561047157341561040657600080fd5b600435602051811061041757600080fd5b50600660043560e05260c052604060c0205461014052600161014051633b9aca00811061044357600080fd5b600560043560e05260c052604060c02060c052602060c0200160c052602060c020015460005260206000f350005b63da020a1860005114156104df57341561048a57600080fd5b600435602051811061049b57600080fd5b506002602435633b9aca0081106104b157600080fd5b600560043560e05260c052604060c02060c052602060c0200160c052602060c020015460005260206000f350005b63adc6358960005114156105315734156104f857600080fd5b600435602051811061050957600080fd5b506001600260043560e05260c052604060c02060c052602060c020015460005260206000f350005b600015610e39575b6101e0526101405261016052610180526101a0526101c052608036610200376080366102803760006103005260006103205260035461034052600061014051181561074257426101805111156105955760006101605113610598565b60005b156106355761016051630784ce0060605181806105b457600080fd5b8305806040519013156105c657600080fd5b80919012156105d457600080fd5b9050905061022052610220516101805142808210156105f257600080fd5b8082039050905060405181111561060857600080fd5b6060518183028060405190131561061e57600080fd5b809190121561062c57600080fd5b90509050610200525b426101c051111561064c5760006101a0511361064f565b60005b156106ec576101a051630784ce00606051818061066b57600080fd5b83058060405190131561067d57600080fd5b809190121561068b57600080fd5b905090506102a0526102a0516101c05142808210156106a957600080fd5b808203905090506040518111156106bf57600080fd5b606051818302806040519013156106d557600080fd5b80919012156106e357600080fd5b90509050610280525b60076101805160e05260c052604060c020546103005260006101c051181561074157610180516101c0511415610729576103005161032052610740565b60076101c05160e05260c052604060c02054610320525b5b5b61036060008152600081602001524281604001524381606001525060006103405111156107d957610360610340516c01431e0fae6d7217caa0000000811061078957600080fd5b600460c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250505b6103a0516103e0526104006103608051825280602001518260200152806040015182604001528060600151826060015250506000610480526103a05142111561088857670de0b6b3a7640000436103c0518082101561083757600080fd5b80820390509050808202821582848304141761085257600080fd5b80905090509050426103a0518082101561086b57600080fd5b80820390509050808061087d57600080fd5b820490509050610480525b6103e05162093a80808061089b57600080fd5b82049050905062093a8080820282158284830414176108b957600080fd5b809050905090506104a0526104c0600060ff818352015b6104a0805162093a808181830110156108e857600080fd5b8082019050905081525060006104e052426104a051111561090d57426104a052610924565b60076104a05160e05260c052604060c020546104e0525b6103608051610380516104a0516103e0518082101561094257600080fd5b8082039050905060405181111561095857600080fd5b6060518183028060405190131561096e57600080fd5b809190121561097c57600080fd5b905090506060518183038060405190131561099657600080fd5b80919012156109a457600080fd5b9050905081525061038080516104e051606051818301806040519013156109ca57600080fd5b80919012156109d857600080fd5b9050905081525060006103605112156109f2576000610360525b6000610380511215610a05576000610380525b6104a0516103e0526104a0516103a05261046051610480516104a0516104405180821015610a3257600080fd5b808203905090508082028215828483041417610a4d57600080fd5b80905090509050670de0b6b3a76400008080610a6857600080fd5b820490509050818183011015610a7d57600080fd5b808201905090506103c05261034080516001818183011015610a9e57600080fd5b80820190509050815250426104a0511415610ac157436103c052610b2a56610b19565b610340516c01431e0fae6d7217caa00000008110610ade57600080fd5b600460c052602060c0200160c052602060c0206103608051825580602001516001830155806040015160028301558060600151600383015550505b5b81516001018083528114156108d0575b5050610340516003556000610140511815610c265761038080516102a0516102205160605181830380604051901315610b6257600080fd5b8091901215610b7057600080fd5b9050905060605181830180604051901315610b8a57600080fd5b8091901215610b9857600080fd5b905090508152506103608051610280516102005160605181830380604051901315610bc257600080fd5b8091901215610bd057600080fd5b9050905060605181830180604051901315610bea57600080fd5b8091901215610bf857600080fd5b905090508152506000610380511215610c12576000610380525b6000610360511215610c25576000610360525b5b610340516c01431e0fae6d7217caa00000008110610c4357600080fd5b600460c052602060c0200160c052602060c0206103608051825580602001516001830155806040015160028301558060600151600383015550506000610140511815610e335742610180511115610d225761030080516102205160605181830180604051901315610cb357600080fd5b8091901215610cc157600080fd5b90509050815250610180516101c0511415610d0b5761030080516102a05160605181830380604051901315610cf557600080fd5b8091901215610d0357600080fd5b905090508152505b6103005160076101805160e05260c052604060c020555b426101c0511115610d8757610180516101c0511115610d865761032080516102a05160605181830380604051901315610d5a57600080fd5b8091901215610d6857600080fd5b905090508152506103205160076101c05160e05260c052604060c020555b5b60066101405160e05260c052604060c020546001818183011015610daa57600080fd5b80820190509050610500526105005160066101405160e05260c052604060c02055426102c052436102e05261050051633b9aca008110610de957600080fd5b60056101405160e05260c052604060c02060c052602060c0200160c052602060c0206102808051825580602001516001830155806040015160028301558060600151600383015550505b6101e051565b6000156110db575b610200526101405261016052610180526101a0526101c0526101e0526102206101a080518252806020015182602001525050600154610260526102605161016051818183011015610e9157600080fd5b8082019050905060015561028061022080518252806020015182602001525050610220805161016051604051811115610ec957600080fd5b60605181830180604051901315610edf57600080fd5b8091901215610eed57600080fd5b905090508152506000610180511815610f095761018051610240525b60026101405160e05260c052604060c02060c052602060c020610220805182558060200151600183015550506101406102c0525b6102c0515160206102c051016102c0526102c06102c0511015610f5f57610f3d565b610140516102e0526103006102808051825280602001518260200152505061034061022080518252806020015182602001525050610360516103405161032051610300516102e05160065801610539565b6102a06102c0525b6102c0515260206102c051036102c0526101406102c051101515610fdb57610fb8565b600050600061016051181561104057602061048060646323b872dd6103c052610140516103e052306104005261016051610420526103dc60006000545af161102257600080fd5b601f3d1161102f57600080fd5b6000506104805161103f57600080fd5b5b610160516104a0526101e0516104c052426104e05261024051610140517f4566dfc29f6f11d13a418c26a02bef7c28bae749d4de47e4e6a7cddea6730d5960606104a0a3610260516105005261026051610160518181830110156110a357600080fd5b80820190509050610520527f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c6040610500a161020051565b63c2c4c5c1600051141561112a5734156110f457600080fd5b600061014052604036610160376040366101a0376101c0516101a05161018051610160516101405160065801610539565b600050005b633a46273e600051141561138d5762ffffff541561114757600080fd5b600162ffffff55341561115957600080fd5b600435602051811061116a57600080fd5b50610140600260043560e05260c052604060c0208060c052602060c02054825260018160c052602060c0200154826020015250506308c379a06101805260206101a05260146101c0527f436f6e74726163742069732073687574646f776e0000000000000000000000006101e0526101c050601254156111eb57606461019cfd5b6000602435116111fa57600080fd5b6308c379a0610220526020610240526016610260527f4e6f206578697374696e67206c6f636b20666f756e640000000000000000000061028052610260506000610140511361124a57606461023cfd5b6308c379a06102c05260206102e0526024610300527f43616e6e6f742061646420746f2065787069726564206c6f636b2e2057697468610320527f647261770000000000000000000000000000000000000000000000000000000061034052610300504261016051116112be5760846102dcfd5b610140610380525b610380515160206103805101610380526103806103805110156112e8576112c6565b6004356103a0526024356103c05260006103e052610400600260043560e05260c052604060c0208060c052602060c02054825260018160c052602060c0200154826020015250506000610440526104405161042051610400516103e0516103c0516103a05160065801610e41565b610360610380525b61038051526020610380510361038052610140610380511015156113815761135e565b600050600062ffffff55005b6365fc387360005114156116785762ffffff54156113aa57600080fd5b600162ffffff5534156113bc57600080fd5b33610140526101405160065801610292565b60005060243562093a8080806113e357600080fd5b82049050905062093a80808202821582848304141761140157600080fd5b809050905090506101a0526101c060023360e05260c052604060c0208060c052602060c02054825260018160c052602060c0200154826020015250506308c379a0610200526020610220526014610240527f436f6e74726163742069732073687574646f776e00000000000000000000000061026052610240506012541561148a57606461021cfd5b60006004351161149957600080fd5b6308c379a06102a05260206102c05260196102e0527f5769746864726177206f6c6420746f6b656e7320666972737400000000000000610300526102e0506101c051156114e75760646102bcfd5b6308c379a0610340526020610360526026610380527f43616e206f6e6c79206c6f636b20756e74696c2074696d6520696e20746865206103a0527f66757475726500000000000000000000000000000000000000000000000000006103c05261038050426101a0511161155b57608461035cfd5b6308c379a061040052602061042052601e610440527f566f74696e67206c6f636b2063616e2062652034207965617273206d61780000610460526104405042630784ce008181830110156115ae57600080fd5b808201905090506101a05111156115c657606461041cfd5b6101406104a0525b6104a0515160206104a051016104a0526104a06104a05110156115f0576115ce565b336104c0526004356104e0526101a051610500526105206101c080518252806020015182602001525050600161056052610560516105405161052051610500516104e0516104c05160065801610e41565b6104806104a0525b6104a0515260206104a051036104a0526101406104a05110151561166c57611649565b600050600062ffffff55005b633e173b2960005114156119c05762ffffff541561169557600080fd5b600162ffffff5534156116a757600080fd5b60043560205181106116b857600080fd5b5060443562093a8080806116cb57600080fd5b82049050905062093a8080820282158284830414176116e957600080fd5b8090509050905061014052610160600260043560e05260c052604060c0208060c052602060c02054825260018160c052602060c0200154826020015250506308c379a06101a05260206101c05260146101e0527f436f6e74726163742069732073687574646f776e000000000000000000000000610200526101e050601254156117745760646101bcfd5b6308c379a061024052602061026052600d610280527f44656c6567617465206f6e6c79000000000000000000000000000000000000006102a05261028050601360043560e05260c052604060c0205433146117d057606461025cfd5b6000602435116117df57600080fd5b6308c379a06102e0526020610300526019610320527f5769746864726177206f6c6420746f6b656e73206669727374000000000000006103405261032050610160511561182d5760646102fcfd5b6308c379a06103805260206103a05260266103c0527f43616e206f6e6c79206c6f636b20756e74696c2074696d6520696e20746865206103e0527f6675747572650000000000000000000000000000000000000000000000000000610400526103c0504261014051116118a157608461039cfd5b6308c379a061044052602061046052601e610480527f566f74696e67206c6f636b2063616e2062652034207965617273206d617800006104a0526104805042630784ce008181830110156118f457600080fd5b8082019050905061014051111561190c57606461045cfd5b6101406104e0525b6104e0515160206104e051016104e0526104e06104e051101561193657611914565b600435610500526024356105205261014051610540526105606101608051825280602001518260200152505060016105a0526105a051610580516105605161054051610520516105005160065801610e41565b6104c06104e0525b6104e0515260206104e051036104e0526101406104e0511015156119b457611991565b600050600062ffffff55005b634957677c6000511415611c055762ffffff54156119dd57600080fd5b600162ffffff5534156119ef57600080fd5b33610140526101405160065801610292565b6000506101a060023360e05260c052604060c0208060c052602060c02054825260018160c052602060c0200154826020015250506308c379a06101e0526020610200526014610220527f436f6e74726163742069732073687574646f776e000000000000000000000000610240526102205060125415611a825760646101fcfd5b600060043511611a9157600080fd5b6308c379a06102805260206102a05260166102c0527f4e6f206578697374696e67206c6f636b20666f756e64000000000000000000006102e0526102c05060006101a05113611ae157606461029cfd5b6308c379a0610320526020610340526024610360527f43616e6e6f742061646420746f2065787069726564206c6f636b2e2057697468610380527f64726177000000000000000000000000000000000000000000000000000000006103a05261036050426101c05111611b5557608461033cfd5b6101406103e0525b6103e0515160206103e051016103e0526103e06103e0511015611b7f57611b5d565b3361040052600435610420526000610440526104606101a08051825280602001518260200152505060026104a0526104a051610480516104605161044051610420516104005160065801610e41565b6103c06103e0525b6103e0515260206103e051036103e0526101406103e051101515611bf957611bd6565b600050600062ffffff55005b63eff7a6126000511415611f0f5762ffffff5415611c2257600080fd5b600162ffffff553415611c3457600080fd5b33610140526101405160065801610292565b6000506101a060023360e05260c052604060c0208060c052602060c02054825260018160c052602060c02001548260200152505060043562093a808080611c8c57600080fd5b82049050905062093a808082028215828483041417611caa57600080fd5b809050905090506101e0526308c379a0610200526020610220526014610240527f436f6e74726163742069732073687574646f776e000000000000000000000000610260526102405060125415611d0257606461021cfd5b6308c379a06102a05260206102c052600c6102e0527f4c6f636b20657870697265640000000000000000000000000000000000000000610300526102e050426101c05111611d515760646102bcfd5b6308c379a0610340526020610360526011610380527f4e6f7468696e67206973206c6f636b65640000000000000000000000000000006103a0526103805060006101a05113611da157606461035cfd5b6308c379a06103e052602061040052601f610420527f43616e206f6e6c7920696e637265617365206c6f636b206475726174696f6e0061044052610420506101c0516101e05111611df35760646103fcfd5b6308c379a06104805260206104a052601e6104c0527f566f74696e67206c6f636b2063616e2062652034207965617273206d617800006104e0526104c05042630784ce00818183011015611e4657600080fd5b808201905090506101e0511115611e5e57606461049cfd5b610140610520525b61052051516020610520510161052052610520610520511015611e8857611e66565b33610540526000610560526101e051610580526105a06101a08051825280602001518260200152505060036105e0526105e0516105c0516105a05161058051610560516105405160065801610e41565b610500610520525b6105205152602061052051036105205261014061052051101515611f0357611ee0565b600050600062ffffff55005b633ccfd60b60005114156121e15762ffffff5415611f2c57600080fd5b600162ffffff553415611f3e57600080fd5b61014060023360e05260c052604060c0208060c052602060c02054825260018160c052602060c0200154826020015250506308c379a06101805260206101a05260166101c0527f546865206c6f636b206469646e277420657870697265000000000000000000006101e0526101c0506101605142101515611fc0576001611fc4565b6012545b5b611fd057606461019cfd5b610140516000811215611fe257600080fd5b610220526102406101408051825280602001518260200152505060006101605260006101405260023360e05260c052604060c02060c052602060c020610140805182558060200151600183015550506001546102805261028051610220518082101561204d57600080fd5b808203905090506001556012541515612107576101406102a0525b6102a0515160206102a051016102a0526102a06102a051101561208a57612068565b336102c0526102e061024080518252806020015182602001525050610320610140805182528060200151826020015250506103405161032051610300516102e0516102c05160065801610539565b6102806102a0525b6102a0515260206102a051036102a0526101406102a051101515612103576120e0565b6000505b6020610440604463a9059cbb6103a052336103c052610220516103e0526103bc60006000545af161213757600080fd5b601f3d1161214457600080fd5b6000506104405161215457600080fd5b61022051610460524261048052337ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5686040610460a2610280516104a0526102805161022051808210156121a657600080fd5b808203905090506104c0527f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c60406104a0a1600062ffffff55005b600015612300575b61018052610140526101605260006101a052610160516101c0526101e060006080818352015b6101c0516101a051101515612223576122ec565b6101a0516101c05181818301101561223a57600080fd5b80820190509050600181818301101561225257600080fd5b808201905090506002808061226657600080fd5b82049050905061020052610140516003610200516c01431e0fae6d7217caa0000000811061229357600080fd5b600460c052602060c0200160c052602060c02001541115156122bc57610200516101a0526122db565b610200516001808210156122cf57600080fd5b808203905090506101c0525b5b815160010180835281141561220f575b50506101a051600052600051610180515650005b6370a08231600051141561231857426101405261233d565b62fdd58e600051141561233557602060246101403760005061233d565b6000156124b5575b341561234857600080fd5b600435602051811061235957600080fd5b50600660043560e05260c052604060c020546101605261016051151561238957600060005260206000f3506124b3565b61018061016051633b9aca0081106123a057600080fd5b600560043560e05260c052604060c02060c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c02001548260600152505061018080516101a051610140516101c0518082101561241b57600080fd5b8082039050905060405181111561243157600080fd5b6060518183028060405190131561244757600080fd5b809190121561245557600080fd5b905090506060518183038060405190131561246f57600080fd5b809190121561247d57600080fd5b905090508152506000610180511215612497576000610180525b6101805160008112156124a957600080fd5b60005260206000f3505b005b634ee2cd7e60005114156129c45734156124ce57600080fd5b60043560205181106124df57600080fd5b504360243511156124ef57600080fd5b600061014052600660043560e05260c052604060c020546101605261018060006080818352015b610160516101405110151561252a576125f7565b610140516101605181818301101561254157600080fd5b80820190509050600181818301101561255957600080fd5b808201905090506002808061256d57600080fd5b8204905090506101a05260243560036101a051633b9aca00811061259057600080fd5b600560043560e05260c052604060c02060c052602060c0200160c052602060c02001541115156125c7576101a051610140526125e6565b6101a0516001808210156125da57600080fd5b80820390509050610160525b5b8151600101808352811415612516575b50506101c061014051633b9aca00811061261057600080fd5b600560043560e05260c052604060c02060c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c020015482606001525050600354610240526101405161016051610180516101a0516101c0516101e051610200516102205161024051610260516024356102a052610240516102c0526102c0516102a051600658016121e9565b61032052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103205161026052610340610260516c01431e0fae6d7217caa0000000811061271057600080fd5b600460c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c02001548260600152505060006103c05260006103e052610240516102605110156128455761040061026051600181818301101561279157600080fd5b808201905090506c01431e0fae6d7217caa000000081106127b157600080fd5b600460c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c020015482606001525050610460516103a0518082101561281557600080fd5b808203905090506103c05261044051610380518082101561283557600080fd5b808203905090506103e052612880565b436103a0518082101561285757600080fd5b808203905090506103c05242610380518082101561287457600080fd5b808203905090506103e0525b610380516104805260006103c05118156129025761048080516103e0516024356103a051808210156128b157600080fd5b8082039050905080820282158284830414176128cc57600080fd5b809050905090506103c05180806128e257600080fd5b8204905090508181830110156128f757600080fd5b808201905090508152505b6101c080516101e05161048051610200518082101561292057600080fd5b8082039050905060405181111561293657600080fd5b6060518183028060405190131561294c57600080fd5b809190121561295a57600080fd5b905090506060518183038060405190131561297457600080fd5b809190121561298257600080fd5b9050905081525060006101c0511215156129b6576101c05160008112156129a857600080fd5b60005260206000f3506129c2565b600060005260206000f3505b005b600015612bcc575b6101e0526101405261016052610180526101a0526101c0526102006101408051825280602001518260200152806040015182604001528060600151826060015250506102405162093a808080612a2157600080fd5b82049050905062093a808082028215828483041417612a3f57600080fd5b80905090509050610280526102a0600060ff818352015b610280805162093a80818183011015612a6e57600080fd5b8082019050905081525060006102c0526101c051610280511115612a99576101c05161028052612ab0565b60076102805160e05260c052604060c020546102c0525b610200805161022051610280516102405180821015612ace57600080fd5b80820390509050604051811115612ae457600080fd5b60605181830280604051901315612afa57600080fd5b8091901215612b0857600080fd5b9050905060605181830380604051901315612b2257600080fd5b8091901215612b3057600080fd5b905090508152506101c051610280511415612b4a57612b97565b61022080516102c05160605181830180604051901315612b6957600080fd5b8091901215612b7757600080fd5b9050905081525061028051610240525b8151600101808352811415612a56575b50506000610200511215612bac576000610200525b610200516000811215612bbe57600080fd5b6000526000516101e0515650005b6318160ddd6000511415612be4574261014052612c0a565b63bd85b0396000511415612c02576020600461014037600050612c0a565b600015612d1d575b3415612c1557600080fd5b60035461016052610180610160516c01431e0fae6d7217caa00000008110612c3c57600080fd5b600460c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250506101405161016051610180516101a0516101c0516101e051610220610180805182528060200151826020015280604001518260400152806060015182606001525050610140516102a0526102a05161028051610260516102405161022051600658016129cc565b610300526101e0526101c0526101a0526101805261016052610140526103005160005260206000f350005b63981b24d06000511415613084573415612d3657600080fd5b436004351115612d4557600080fd5b6003546101405261014051610160516004356101a052610140516101c0526101c0516101a051600658016121e9565b6102205261016052610140526102205161016052610240610160516c01431e0fae6d7217caa00000008110612da857600080fd5b600460c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c02001548260600152505060006102c05261014051610160511015612f29576102e0610160516001818183011015612e2357600080fd5b808201905090506c01431e0fae6d7217caa00000008110612e4357600080fd5b600460c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c020015482606001525050610340516102a0511815612f24576004356102a05180821015612eb457600080fd5b80820390509050610320516102805180821015612ed057600080fd5b808203905090508082028215828483041417612eeb57600080fd5b80905090509050610340516102a05180821015612f0757600080fd5b808203905090508080612f1957600080fd5b8204905090506102c0525b612fb3565b436102a0511815612fb2576004356102a05180821015612f4857600080fd5b80820390509050426102805180821015612f6157600080fd5b808203905090508082028215828483041417612f7c57600080fd5b80905090509050436102a05180821015612f9557600080fd5b808203905090508080612fa757600080fd5b8204905090506102c0525b5b610140610360525b610360515160206103605101610360526102e0610360511015612fdd57612fbb565b610380610240805182528060200151826020015280604001518260400152806060015182606001525050610280516102c05181818301101561301e57600080fd5b8082019050905061040052610400516103e0516103c0516103a05161038051600658016129cc565b610460526102c0610360525b610360515260206103605103610360526101406103605110151561307557613052565b6104605160005260206000f350005b633cebb82360005114156130c557341561309d57600080fd5b60043560205181106130ae57600080fd5b5060085433146130bd57600080fd5b600435600855005b63fc0c546a60005114156130ec5734156130de57600080fd5b60005460005260206000f350005b63047fc9aa600051141561311357341561310557600080fd5b60015460005260206000f350005b63cbf9fe5f600051141561319c57341561312c57600080fd5b600435602051811061313d57600080fd5b50610140808080600260043560e05260c052604060c02060c052602060c020548152505060208101905080806001600260043560e05260c052604060c02060c052602060c02001548152505060409050905060c05260c051610140f350005b63900cf0cf60005114156131c35734156131b557600080fd5b60035460005260206000f350005b63d1febfb960005114156132e65734156131dc57600080fd5b6101408080806004356c01431e0fae6d7217caa000000081106131fe57600080fd5b600460c052602060c0200160c052602060c0205481525050602081019050808060016004356c01431e0fae6d7217caa0000000811061323c57600080fd5b600460c052602060c0200160c052602060c020015481525050602081019050808060026004356c01431e0fae6d7217caa0000000811061327b57600080fd5b600460c052602060c0200160c052602060c020015481525050602081019050808060036004356c01431e0fae6d7217caa000000081106132ba57600080fd5b600460c052602060c0200160c052602060c02001548152505060809050905060c05260c051610140f350005b6328d09d47600051141561342f5734156132ff57600080fd5b600435602051811061331057600080fd5b50610140808080602435633b9aca00811061332a57600080fd5b600560043560e05260c052604060c02060c052602060c0200160c052602060c020548152505060208101905080806001602435633b9aca00811061336d57600080fd5b600560043560e05260c052604060c02060c052602060c0200160c052602060c02001548152505060208101905080806002602435633b9aca0081106133b157600080fd5b600560043560e05260c052604060c02060c052602060c0200160c052602060c02001548152505060208101905080806003602435633b9aca0081106133f557600080fd5b600560043560e05260c052604060c02060c052602060c0200160c052602060c02001548152505060809050905060c05260c051610140f350005b63010ae757600051141561347657341561344857600080fd5b600435602051811061345957600080fd5b50600660043560e05260c052604060c0205460005260206000f350005b637119748460005114156134ab57341561348f57600080fd5b600760043560e05260c052604060c0205460005260206000f350005b63f77c479160005114156134d25734156134c457600080fd5b60085460005260206000f350005b63bef97c8760005114156134f95734156134eb57600080fd5b60095460005260206000f350005b6306fdde0360005114156135ad57341561351257600080fd5b600a8060c052602060c020610180602082540161012060006003818352015b8261012051602002111561354457613566565b61012051850154610120516020028501525b8151600101808352811415613531575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f350005b6395d89b4160005114156136615734156135c657600080fd5b600b8060c052602060c020610180602082540161012060006002818352015b826101205160200211156135f85761361a565b61012051850154610120516020028501525b81516001018083528114156135e5575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f350005b6354fd4d50600051141561371557341561367a57600080fd5b600c8060c052602060c020610180602082540161012060006002818352015b826101205160200211156136ac576136ce565b61012051850154610120516020028501525b8151600101808352811415613699575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f350005b63313ce567600051141561373c57341561372e57600080fd5b600d5460005260206000f350005b638ff36fd1600051141561376357341561375557600080fd5b600e5460005260206000f350005b637175d4f7600051141561378a57341561377c57600080fd5b600f5460005260206000f350005b63f851a44060005114156137b15734156137a357600080fd5b60105460005260206000f350005b6317f7182a60005114156137d85734156137ca57600080fd5b60115460005260206000f350005b63943a7a5760005114156137ff5734156137f157600080fd5b60125460005260206000f350005b635e7f9a83600051141561384657341561381857600080fd5b600435602051811061382957600080fd5b50601360043560e05260c052604060c0205460005260206000f350005b5b60006000fd5b61030c613b590361030c60003961030c613b59036000f30000000000000000000000005a56da75c50aa2733f5fa9a2442aaefcbc60b2e6000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000f566f7465204c6f636b65642043584400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005766c4358440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005312e302e30000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x600436101561000d57613847565b600035601c52740100000000000000000000000000000000000000006020526f7fffffffffffffffffffffffffffffff6040527fffffffffffffffffffffffffffffffff8000000000000000000000000000000060605274012a05f1fffffffffffffffffffffffffdabf41c006080527ffffffffffffffffffffffffed5fa0e000000000000000000000000000000000060a05263fc0e74d160005114156101355734156100ba57600080fd5b6308c379a061014052602061016052600a610180527f41646d696e206f6e6c79000000000000000000000000000000000000000000006101a05261018050601054331461010857606461015cfd5b60016012557f4426aa1fb73e391071491fcfe21a88b5c38a0a0333a1f6e77161470439704cf860006000a1005b636b441a4060005114156101a457341561014e57600080fd5b600435602051811061015f57600080fd5b50601054331461016e57600080fd5b600435601155600435610140527f2f56810a6bf40af059b96d3aea4db54081f378029a518390491093a7b67032e96020610140a1005b636a1c05ae600051141561021a5734156101bd57600080fd5b60105433146101cb57600080fd5b60115461014052600061014051186101e257600080fd5b6101405160105561014051610160527febee2d5739011062cb4f14113f3b36bf0ffe3da5c0568f64189d1012a11891056020610160a1005b6357f901e2600051141561025b57341561023357600080fd5b600435602051811061024457600080fd5b50601054331461025357600080fd5b600435600e55005b638e5b490f600051141561028a57341561027457600080fd5b601054331461028257600080fd5b600e54600f55005b60001561037b575b61016052610140523261014051181561037557600f54610180526000610180511815610304576020610220602463c23697a86101a052610140516101c0526101bc6000610180515af16102e457600080fd5b601f3d116102f157600080fd5b60005061022051156103035761016051565b5b6308c379a06102605260206102805260256102a0527f536d61727420636f6e7472616374206465706f7369746f7273206e6f7420616c6102c0527f6c6f7765640000000000000000000000000000000000000000000000000000006102e0526102a050600061037457608461027cfd5b5b61016051565b63e272447960005114156103ed57341561039457600080fd5b60043560205181106103a557600080fd5b5060043560133360e05260c052604060c020553361014052600435610160527fab7d75eccd27c9989942a3a6e4137e415df0ad90ec428751b16361f16fe8780f6040610140a1005b637c74a174600051141561047157341561040657600080fd5b600435602051811061041757600080fd5b50600660043560e05260c052604060c0205461014052600161014051633b9aca00811061044357600080fd5b600560043560e05260c052604060c02060c052602060c0200160c052602060c020015460005260206000f350005b63da020a1860005114156104df57341561048a57600080fd5b600435602051811061049b57600080fd5b506002602435633b9aca0081106104b157600080fd5b600560043560e05260c052604060c02060c052602060c0200160c052602060c020015460005260206000f350005b63adc6358960005114156105315734156104f857600080fd5b600435602051811061050957600080fd5b506001600260043560e05260c052604060c02060c052602060c020015460005260206000f350005b600015610e39575b6101e0526101405261016052610180526101a0526101c052608036610200376080366102803760006103005260006103205260035461034052600061014051181561074257426101805111156105955760006101605113610598565b60005b156106355761016051630784ce0060605181806105b457600080fd5b8305806040519013156105c657600080fd5b80919012156105d457600080fd5b9050905061022052610220516101805142808210156105f257600080fd5b8082039050905060405181111561060857600080fd5b6060518183028060405190131561061e57600080fd5b809190121561062c57600080fd5b90509050610200525b426101c051111561064c5760006101a0511361064f565b60005b156106ec576101a051630784ce00606051818061066b57600080fd5b83058060405190131561067d57600080fd5b809190121561068b57600080fd5b905090506102a0526102a0516101c05142808210156106a957600080fd5b808203905090506040518111156106bf57600080fd5b606051818302806040519013156106d557600080fd5b80919012156106e357600080fd5b90509050610280525b60076101805160e05260c052604060c020546103005260006101c051181561074157610180516101c0511415610729576103005161032052610740565b60076101c05160e05260c052604060c02054610320525b5b5b61036060008152600081602001524281604001524381606001525060006103405111156107d957610360610340516c01431e0fae6d7217caa0000000811061078957600080fd5b600460c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250505b6103a0516103e0526104006103608051825280602001518260200152806040015182604001528060600151826060015250506000610480526103a05142111561088857670de0b6b3a7640000436103c0518082101561083757600080fd5b80820390509050808202821582848304141761085257600080fd5b80905090509050426103a0518082101561086b57600080fd5b80820390509050808061087d57600080fd5b820490509050610480525b6103e05162093a80808061089b57600080fd5b82049050905062093a8080820282158284830414176108b957600080fd5b809050905090506104a0526104c0600060ff818352015b6104a0805162093a808181830110156108e857600080fd5b8082019050905081525060006104e052426104a051111561090d57426104a052610924565b60076104a05160e05260c052604060c020546104e0525b6103608051610380516104a0516103e0518082101561094257600080fd5b8082039050905060405181111561095857600080fd5b6060518183028060405190131561096e57600080fd5b809190121561097c57600080fd5b905090506060518183038060405190131561099657600080fd5b80919012156109a457600080fd5b9050905081525061038080516104e051606051818301806040519013156109ca57600080fd5b80919012156109d857600080fd5b9050905081525060006103605112156109f2576000610360525b6000610380511215610a05576000610380525b6104a0516103e0526104a0516103a05261046051610480516104a0516104405180821015610a3257600080fd5b808203905090508082028215828483041417610a4d57600080fd5b80905090509050670de0b6b3a76400008080610a6857600080fd5b820490509050818183011015610a7d57600080fd5b808201905090506103c05261034080516001818183011015610a9e57600080fd5b80820190509050815250426104a0511415610ac157436103c052610b2a56610b19565b610340516c01431e0fae6d7217caa00000008110610ade57600080fd5b600460c052602060c0200160c052602060c0206103608051825580602001516001830155806040015160028301558060600151600383015550505b5b81516001018083528114156108d0575b5050610340516003556000610140511815610c265761038080516102a0516102205160605181830380604051901315610b6257600080fd5b8091901215610b7057600080fd5b9050905060605181830180604051901315610b8a57600080fd5b8091901215610b9857600080fd5b905090508152506103608051610280516102005160605181830380604051901315610bc257600080fd5b8091901215610bd057600080fd5b9050905060605181830180604051901315610bea57600080fd5b8091901215610bf857600080fd5b905090508152506000610380511215610c12576000610380525b6000610360511215610c25576000610360525b5b610340516c01431e0fae6d7217caa00000008110610c4357600080fd5b600460c052602060c0200160c052602060c0206103608051825580602001516001830155806040015160028301558060600151600383015550506000610140511815610e335742610180511115610d225761030080516102205160605181830180604051901315610cb357600080fd5b8091901215610cc157600080fd5b90509050815250610180516101c0511415610d0b5761030080516102a05160605181830380604051901315610cf557600080fd5b8091901215610d0357600080fd5b905090508152505b6103005160076101805160e05260c052604060c020555b426101c0511115610d8757610180516101c0511115610d865761032080516102a05160605181830380604051901315610d5a57600080fd5b8091901215610d6857600080fd5b905090508152506103205160076101c05160e05260c052604060c020555b5b60066101405160e05260c052604060c020546001818183011015610daa57600080fd5b80820190509050610500526105005160066101405160e05260c052604060c02055426102c052436102e05261050051633b9aca008110610de957600080fd5b60056101405160e05260c052604060c02060c052602060c0200160c052602060c0206102808051825580602001516001830155806040015160028301558060600151600383015550505b6101e051565b6000156110db575b610200526101405261016052610180526101a0526101c0526101e0526102206101a080518252806020015182602001525050600154610260526102605161016051818183011015610e9157600080fd5b8082019050905060015561028061022080518252806020015182602001525050610220805161016051604051811115610ec957600080fd5b60605181830180604051901315610edf57600080fd5b8091901215610eed57600080fd5b905090508152506000610180511815610f095761018051610240525b60026101405160e05260c052604060c02060c052602060c020610220805182558060200151600183015550506101406102c0525b6102c0515160206102c051016102c0526102c06102c0511015610f5f57610f3d565b610140516102e0526103006102808051825280602001518260200152505061034061022080518252806020015182602001525050610360516103405161032051610300516102e05160065801610539565b6102a06102c0525b6102c0515260206102c051036102c0526101406102c051101515610fdb57610fb8565b600050600061016051181561104057602061048060646323b872dd6103c052610140516103e052306104005261016051610420526103dc60006000545af161102257600080fd5b601f3d1161102f57600080fd5b6000506104805161103f57600080fd5b5b610160516104a0526101e0516104c052426104e05261024051610140517f4566dfc29f6f11d13a418c26a02bef7c28bae749d4de47e4e6a7cddea6730d5960606104a0a3610260516105005261026051610160518181830110156110a357600080fd5b80820190509050610520527f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c6040610500a161020051565b63c2c4c5c1600051141561112a5734156110f457600080fd5b600061014052604036610160376040366101a0376101c0516101a05161018051610160516101405160065801610539565b600050005b633a46273e600051141561138d5762ffffff541561114757600080fd5b600162ffffff55341561115957600080fd5b600435602051811061116a57600080fd5b50610140600260043560e05260c052604060c0208060c052602060c02054825260018160c052602060c0200154826020015250506308c379a06101805260206101a05260146101c0527f436f6e74726163742069732073687574646f776e0000000000000000000000006101e0526101c050601254156111eb57606461019cfd5b6000602435116111fa57600080fd5b6308c379a0610220526020610240526016610260527f4e6f206578697374696e67206c6f636b20666f756e640000000000000000000061028052610260506000610140511361124a57606461023cfd5b6308c379a06102c05260206102e0526024610300527f43616e6e6f742061646420746f2065787069726564206c6f636b2e2057697468610320527f647261770000000000000000000000000000000000000000000000000000000061034052610300504261016051116112be5760846102dcfd5b610140610380525b610380515160206103805101610380526103806103805110156112e8576112c6565b6004356103a0526024356103c05260006103e052610400600260043560e05260c052604060c0208060c052602060c02054825260018160c052602060c0200154826020015250506000610440526104405161042051610400516103e0516103c0516103a05160065801610e41565b610360610380525b61038051526020610380510361038052610140610380511015156113815761135e565b600050600062ffffff55005b6365fc387360005114156116785762ffffff54156113aa57600080fd5b600162ffffff5534156113bc57600080fd5b33610140526101405160065801610292565b60005060243562093a8080806113e357600080fd5b82049050905062093a80808202821582848304141761140157600080fd5b809050905090506101a0526101c060023360e05260c052604060c0208060c052602060c02054825260018160c052602060c0200154826020015250506308c379a0610200526020610220526014610240527f436f6e74726163742069732073687574646f776e00000000000000000000000061026052610240506012541561148a57606461021cfd5b60006004351161149957600080fd5b6308c379a06102a05260206102c05260196102e0527f5769746864726177206f6c6420746f6b656e7320666972737400000000000000610300526102e0506101c051156114e75760646102bcfd5b6308c379a0610340526020610360526026610380527f43616e206f6e6c79206c6f636b20756e74696c2074696d6520696e20746865206103a0527f66757475726500000000000000000000000000000000000000000000000000006103c05261038050426101a0511161155b57608461035cfd5b6308c379a061040052602061042052601e610440527f566f74696e67206c6f636b2063616e2062652034207965617273206d61780000610460526104405042630784ce008181830110156115ae57600080fd5b808201905090506101a05111156115c657606461041cfd5b6101406104a0525b6104a0515160206104a051016104a0526104a06104a05110156115f0576115ce565b336104c0526004356104e0526101a051610500526105206101c080518252806020015182602001525050600161056052610560516105405161052051610500516104e0516104c05160065801610e41565b6104806104a0525b6104a0515260206104a051036104a0526101406104a05110151561166c57611649565b600050600062ffffff55005b633e173b2960005114156119c05762ffffff541561169557600080fd5b600162ffffff5534156116a757600080fd5b60043560205181106116b857600080fd5b5060443562093a8080806116cb57600080fd5b82049050905062093a8080820282158284830414176116e957600080fd5b8090509050905061014052610160600260043560e05260c052604060c0208060c052602060c02054825260018160c052602060c0200154826020015250506308c379a06101a05260206101c05260146101e0527f436f6e74726163742069732073687574646f776e000000000000000000000000610200526101e050601254156117745760646101bcfd5b6308c379a061024052602061026052600d610280527f44656c6567617465206f6e6c79000000000000000000000000000000000000006102a05261028050601360043560e05260c052604060c0205433146117d057606461025cfd5b6000602435116117df57600080fd5b6308c379a06102e0526020610300526019610320527f5769746864726177206f6c6420746f6b656e73206669727374000000000000006103405261032050610160511561182d5760646102fcfd5b6308c379a06103805260206103a05260266103c0527f43616e206f6e6c79206c6f636b20756e74696c2074696d6520696e20746865206103e0527f6675747572650000000000000000000000000000000000000000000000000000610400526103c0504261014051116118a157608461039cfd5b6308c379a061044052602061046052601e610480527f566f74696e67206c6f636b2063616e2062652034207965617273206d617800006104a0526104805042630784ce008181830110156118f457600080fd5b8082019050905061014051111561190c57606461045cfd5b6101406104e0525b6104e0515160206104e051016104e0526104e06104e051101561193657611914565b600435610500526024356105205261014051610540526105606101608051825280602001518260200152505060016105a0526105a051610580516105605161054051610520516105005160065801610e41565b6104c06104e0525b6104e0515260206104e051036104e0526101406104e0511015156119b457611991565b600050600062ffffff55005b634957677c6000511415611c055762ffffff54156119dd57600080fd5b600162ffffff5534156119ef57600080fd5b33610140526101405160065801610292565b6000506101a060023360e05260c052604060c0208060c052602060c02054825260018160c052602060c0200154826020015250506308c379a06101e0526020610200526014610220527f436f6e74726163742069732073687574646f776e000000000000000000000000610240526102205060125415611a825760646101fcfd5b600060043511611a9157600080fd5b6308c379a06102805260206102a05260166102c0527f4e6f206578697374696e67206c6f636b20666f756e64000000000000000000006102e0526102c05060006101a05113611ae157606461029cfd5b6308c379a0610320526020610340526024610360527f43616e6e6f742061646420746f2065787069726564206c6f636b2e2057697468610380527f64726177000000000000000000000000000000000000000000000000000000006103a05261036050426101c05111611b5557608461033cfd5b6101406103e0525b6103e0515160206103e051016103e0526103e06103e0511015611b7f57611b5d565b3361040052600435610420526000610440526104606101a08051825280602001518260200152505060026104a0526104a051610480516104605161044051610420516104005160065801610e41565b6103c06103e0525b6103e0515260206103e051036103e0526101406103e051101515611bf957611bd6565b600050600062ffffff55005b63eff7a6126000511415611f0f5762ffffff5415611c2257600080fd5b600162ffffff553415611c3457600080fd5b33610140526101405160065801610292565b6000506101a060023360e05260c052604060c0208060c052602060c02054825260018160c052602060c02001548260200152505060043562093a808080611c8c57600080fd5b82049050905062093a808082028215828483041417611caa57600080fd5b809050905090506101e0526308c379a0610200526020610220526014610240527f436f6e74726163742069732073687574646f776e000000000000000000000000610260526102405060125415611d0257606461021cfd5b6308c379a06102a05260206102c052600c6102e0527f4c6f636b20657870697265640000000000000000000000000000000000000000610300526102e050426101c05111611d515760646102bcfd5b6308c379a0610340526020610360526011610380527f4e6f7468696e67206973206c6f636b65640000000000000000000000000000006103a0526103805060006101a05113611da157606461035cfd5b6308c379a06103e052602061040052601f610420527f43616e206f6e6c7920696e637265617365206c6f636b206475726174696f6e0061044052610420506101c0516101e05111611df35760646103fcfd5b6308c379a06104805260206104a052601e6104c0527f566f74696e67206c6f636b2063616e2062652034207965617273206d617800006104e0526104c05042630784ce00818183011015611e4657600080fd5b808201905090506101e0511115611e5e57606461049cfd5b610140610520525b61052051516020610520510161052052610520610520511015611e8857611e66565b33610540526000610560526101e051610580526105a06101a08051825280602001518260200152505060036105e0526105e0516105c0516105a05161058051610560516105405160065801610e41565b610500610520525b6105205152602061052051036105205261014061052051101515611f0357611ee0565b600050600062ffffff55005b633ccfd60b60005114156121e15762ffffff5415611f2c57600080fd5b600162ffffff553415611f3e57600080fd5b61014060023360e05260c052604060c0208060c052602060c02054825260018160c052602060c0200154826020015250506308c379a06101805260206101a05260166101c0527f546865206c6f636b206469646e277420657870697265000000000000000000006101e0526101c0506101605142101515611fc0576001611fc4565b6012545b5b611fd057606461019cfd5b610140516000811215611fe257600080fd5b610220526102406101408051825280602001518260200152505060006101605260006101405260023360e05260c052604060c02060c052602060c020610140805182558060200151600183015550506001546102805261028051610220518082101561204d57600080fd5b808203905090506001556012541515612107576101406102a0525b6102a0515160206102a051016102a0526102a06102a051101561208a57612068565b336102c0526102e061024080518252806020015182602001525050610320610140805182528060200151826020015250506103405161032051610300516102e0516102c05160065801610539565b6102806102a0525b6102a0515260206102a051036102a0526101406102a051101515612103576120e0565b6000505b6020610440604463a9059cbb6103a052336103c052610220516103e0526103bc60006000545af161213757600080fd5b601f3d1161214457600080fd5b6000506104405161215457600080fd5b61022051610460524261048052337ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5686040610460a2610280516104a0526102805161022051808210156121a657600080fd5b808203905090506104c0527f5e2aa66efd74cce82b21852e317e5490d9ecc9e6bb953ae24d90851258cc2f5c60406104a0a1600062ffffff55005b600015612300575b61018052610140526101605260006101a052610160516101c0526101e060006080818352015b6101c0516101a051101515612223576122ec565b6101a0516101c05181818301101561223a57600080fd5b80820190509050600181818301101561225257600080fd5b808201905090506002808061226657600080fd5b82049050905061020052610140516003610200516c01431e0fae6d7217caa0000000811061229357600080fd5b600460c052602060c0200160c052602060c02001541115156122bc57610200516101a0526122db565b610200516001808210156122cf57600080fd5b808203905090506101c0525b5b815160010180835281141561220f575b50506101a051600052600051610180515650005b6370a08231600051141561231857426101405261233d565b62fdd58e600051141561233557602060246101403760005061233d565b6000156124b5575b341561234857600080fd5b600435602051811061235957600080fd5b50600660043560e05260c052604060c020546101605261016051151561238957600060005260206000f3506124b3565b61018061016051633b9aca0081106123a057600080fd5b600560043560e05260c052604060c02060c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c02001548260600152505061018080516101a051610140516101c0518082101561241b57600080fd5b8082039050905060405181111561243157600080fd5b6060518183028060405190131561244757600080fd5b809190121561245557600080fd5b905090506060518183038060405190131561246f57600080fd5b809190121561247d57600080fd5b905090508152506000610180511215612497576000610180525b6101805160008112156124a957600080fd5b60005260206000f3505b005b634ee2cd7e60005114156129c45734156124ce57600080fd5b60043560205181106124df57600080fd5b504360243511156124ef57600080fd5b600061014052600660043560e05260c052604060c020546101605261018060006080818352015b610160516101405110151561252a576125f7565b610140516101605181818301101561254157600080fd5b80820190509050600181818301101561255957600080fd5b808201905090506002808061256d57600080fd5b8204905090506101a05260243560036101a051633b9aca00811061259057600080fd5b600560043560e05260c052604060c02060c052602060c0200160c052602060c02001541115156125c7576101a051610140526125e6565b6101a0516001808210156125da57600080fd5b80820390509050610160525b5b8151600101808352811415612516575b50506101c061014051633b9aca00811061261057600080fd5b600560043560e05260c052604060c02060c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c020015482606001525050600354610240526101405161016051610180516101a0516101c0516101e051610200516102205161024051610260516024356102a052610240516102c0526102c0516102a051600658016121e9565b61032052610260526102405261022052610200526101e0526101c0526101a0526101805261016052610140526103205161026052610340610260516c01431e0fae6d7217caa0000000811061271057600080fd5b600460c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c02001548260600152505060006103c05260006103e052610240516102605110156128455761040061026051600181818301101561279157600080fd5b808201905090506c01431e0fae6d7217caa000000081106127b157600080fd5b600460c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c020015482606001525050610460516103a0518082101561281557600080fd5b808203905090506103c05261044051610380518082101561283557600080fd5b808203905090506103e052612880565b436103a0518082101561285757600080fd5b808203905090506103c05242610380518082101561287457600080fd5b808203905090506103e0525b610380516104805260006103c05118156129025761048080516103e0516024356103a051808210156128b157600080fd5b8082039050905080820282158284830414176128cc57600080fd5b809050905090506103c05180806128e257600080fd5b8204905090508181830110156128f757600080fd5b808201905090508152505b6101c080516101e05161048051610200518082101561292057600080fd5b8082039050905060405181111561293657600080fd5b6060518183028060405190131561294c57600080fd5b809190121561295a57600080fd5b905090506060518183038060405190131561297457600080fd5b809190121561298257600080fd5b9050905081525060006101c0511215156129b6576101c05160008112156129a857600080fd5b60005260206000f3506129c2565b600060005260206000f3505b005b600015612bcc575b6101e0526101405261016052610180526101a0526101c0526102006101408051825280602001518260200152806040015182604001528060600151826060015250506102405162093a808080612a2157600080fd5b82049050905062093a808082028215828483041417612a3f57600080fd5b80905090509050610280526102a0600060ff818352015b610280805162093a80818183011015612a6e57600080fd5b8082019050905081525060006102c0526101c051610280511115612a99576101c05161028052612ab0565b60076102805160e05260c052604060c020546102c0525b610200805161022051610280516102405180821015612ace57600080fd5b80820390509050604051811115612ae457600080fd5b60605181830280604051901315612afa57600080fd5b8091901215612b0857600080fd5b9050905060605181830380604051901315612b2257600080fd5b8091901215612b3057600080fd5b905090508152506101c051610280511415612b4a57612b97565b61022080516102c05160605181830180604051901315612b6957600080fd5b8091901215612b7757600080fd5b9050905081525061028051610240525b8151600101808352811415612a56575b50506000610200511215612bac576000610200525b610200516000811215612bbe57600080fd5b6000526000516101e0515650005b6318160ddd6000511415612be4574261014052612c0a565b63bd85b0396000511415612c02576020600461014037600050612c0a565b600015612d1d575b3415612c1557600080fd5b60035461016052610180610160516c01431e0fae6d7217caa00000008110612c3c57600080fd5b600460c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c0200154826060015250506101405161016051610180516101a0516101c0516101e051610220610180805182528060200151826020015280604001518260400152806060015182606001525050610140516102a0526102a05161028051610260516102405161022051600658016129cc565b610300526101e0526101c0526101a0526101805261016052610140526103005160005260206000f350005b63981b24d06000511415613084573415612d3657600080fd5b436004351115612d4557600080fd5b6003546101405261014051610160516004356101a052610140516101c0526101c0516101a051600658016121e9565b6102205261016052610140526102205161016052610240610160516c01431e0fae6d7217caa00000008110612da857600080fd5b600460c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c02001548260600152505060006102c05261014051610160511015612f29576102e0610160516001818183011015612e2357600080fd5b808201905090506c01431e0fae6d7217caa00000008110612e4357600080fd5b600460c052602060c020018060c052602060c02054825260018160c052602060c0200154826020015260028160c052602060c0200154826040015260038160c052602060c020015482606001525050610340516102a0511815612f24576004356102a05180821015612eb457600080fd5b80820390509050610320516102805180821015612ed057600080fd5b808203905090508082028215828483041417612eeb57600080fd5b80905090509050610340516102a05180821015612f0757600080fd5b808203905090508080612f1957600080fd5b8204905090506102c0525b612fb3565b436102a0511815612fb2576004356102a05180821015612f4857600080fd5b80820390509050426102805180821015612f6157600080fd5b808203905090508082028215828483041417612f7c57600080fd5b80905090509050436102a05180821015612f9557600080fd5b808203905090508080612fa757600080fd5b8204905090506102c0525b5b610140610360525b610360515160206103605101610360526102e0610360511015612fdd57612fbb565b610380610240805182528060200151826020015280604001518260400152806060015182606001525050610280516102c05181818301101561301e57600080fd5b8082019050905061040052610400516103e0516103c0516103a05161038051600658016129cc565b610460526102c0610360525b610360515260206103605103610360526101406103605110151561307557613052565b6104605160005260206000f350005b633cebb82360005114156130c557341561309d57600080fd5b60043560205181106130ae57600080fd5b5060085433146130bd57600080fd5b600435600855005b63fc0c546a60005114156130ec5734156130de57600080fd5b60005460005260206000f350005b63047fc9aa600051141561311357341561310557600080fd5b60015460005260206000f350005b63cbf9fe5f600051141561319c57341561312c57600080fd5b600435602051811061313d57600080fd5b50610140808080600260043560e05260c052604060c02060c052602060c020548152505060208101905080806001600260043560e05260c052604060c02060c052602060c02001548152505060409050905060c05260c051610140f350005b63900cf0cf60005114156131c35734156131b557600080fd5b60035460005260206000f350005b63d1febfb960005114156132e65734156131dc57600080fd5b6101408080806004356c01431e0fae6d7217caa000000081106131fe57600080fd5b600460c052602060c0200160c052602060c0205481525050602081019050808060016004356c01431e0fae6d7217caa0000000811061323c57600080fd5b600460c052602060c0200160c052602060c020015481525050602081019050808060026004356c01431e0fae6d7217caa0000000811061327b57600080fd5b600460c052602060c0200160c052602060c020015481525050602081019050808060036004356c01431e0fae6d7217caa000000081106132ba57600080fd5b600460c052602060c0200160c052602060c02001548152505060809050905060c05260c051610140f350005b6328d09d47600051141561342f5734156132ff57600080fd5b600435602051811061331057600080fd5b50610140808080602435633b9aca00811061332a57600080fd5b600560043560e05260c052604060c02060c052602060c0200160c052602060c020548152505060208101905080806001602435633b9aca00811061336d57600080fd5b600560043560e05260c052604060c02060c052602060c0200160c052602060c02001548152505060208101905080806002602435633b9aca0081106133b157600080fd5b600560043560e05260c052604060c02060c052602060c0200160c052602060c02001548152505060208101905080806003602435633b9aca0081106133f557600080fd5b600560043560e05260c052604060c02060c052602060c0200160c052602060c02001548152505060809050905060c05260c051610140f350005b63010ae757600051141561347657341561344857600080fd5b600435602051811061345957600080fd5b50600660043560e05260c052604060c0205460005260206000f350005b637119748460005114156134ab57341561348f57600080fd5b600760043560e05260c052604060c0205460005260206000f350005b63f77c479160005114156134d25734156134c457600080fd5b60085460005260206000f350005b63bef97c8760005114156134f95734156134eb57600080fd5b60095460005260206000f350005b6306fdde0360005114156135ad57341561351257600080fd5b600a8060c052602060c020610180602082540161012060006003818352015b8261012051602002111561354457613566565b61012051850154610120516020028501525b8151600101808352811415613531575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f350005b6395d89b4160005114156136615734156135c657600080fd5b600b8060c052602060c020610180602082540161012060006002818352015b826101205160200211156135f85761361a565b61012051850154610120516020028501525b81516001018083528114156135e5575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f350005b6354fd4d50600051141561371557341561367a57600080fd5b600c8060c052602060c020610180602082540161012060006002818352015b826101205160200211156136ac576136ce565b61012051850154610120516020028501525b8151600101808352811415613699575b50505050505061018051806101a001818260206001820306601f82010390500336823750506020610160526040610180510160206001820306601f8201039050610160f350005b63313ce567600051141561373c57341561372e57600080fd5b600d5460005260206000f350005b638ff36fd1600051141561376357341561375557600080fd5b600e5460005260206000f350005b637175d4f7600051141561378a57341561377c57600080fd5b600f5460005260206000f350005b63f851a44060005114156137b15734156137a357600080fd5b60105460005260206000f350005b6317f7182a60005114156137d85734156137ca57600080fd5b60115460005260206000f350005b63943a7a5760005114156137ff5734156137f157600080fd5b60125460005260206000f350005b635e7f9a83600051141561384657341561381857600080fd5b600435602051811061382957600080fd5b50601360043560e05260c052604060c0205460005260206000f350005b5b60006000fd
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000005A56Da75c50aA2733F5Fa9A2442AaEfcBc60B2e6000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000f566f7465204c6f636b65642043584400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005766c4358440000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005312e302e30000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : token_addr (address): 0x5A56Da75c50aA2733F5Fa9A2442AaEfcBc60B2e6
Arg [1] : _name (string): Vote Locked CXD
Arg [2] : _symbol (string): vlCXD
Arg [3] : _version (string): 1.0.0
-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000005A56Da75c50aA2733F5Fa9A2442AaEfcBc60B2e6
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000f
Arg [5] : 566f7465204c6f636b6564204358440000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [7] : 766c435844000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [9] : 312e302e30000000000000000000000000000000000000000000000000000000
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 31 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ 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.