Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 24297891 | 57 days ago | 0.00092223 ETH | ||||
| Transfer | 23223774 | 207 days ago | 0.00186034 ETH | ||||
| Transfer | 23156536 | 217 days ago | 0.02591313 ETH | ||||
| Transfer | 20383462 | 604 days ago | 0.01002988 ETH | ||||
| Transfer | 20382950 | 604 days ago | 0.01780156 ETH | ||||
| Transfer | 20382939 | 604 days ago | 0.06133002 ETH | ||||
| Transfer | 19858785 | 678 days ago | 0.00385252 ETH | ||||
| Transfer | 19096476 | 784 days ago | 0.02980863 ETH | ||||
| Transfer | 19096463 | 784 days ago | 0.04243916 ETH | ||||
| Transfer | 17818523 | 963 days ago | 0.01623459 ETH | ||||
| Transfer | 17818474 | 963 days ago | 0.18423112 ETH | ||||
| Transfer | 17818467 | 963 days ago | 0.05411532 ETH | ||||
| Transfer | 16913390 | 1091 days ago | 0.03865081 ETH | ||||
| Transfer | 16901493 | 1093 days ago | 0.00358748 ETH | ||||
| Transfer | 16807590 | 1106 days ago | 0.01106343 ETH | ||||
| Transfer | 16674892 | 1124 days ago | 0.01948892 ETH | ||||
| Transfer | 16456114 | 1155 days ago | 0.05610058 ETH | ||||
| Transfer | 15728507 | 1257 days ago | 0.03050248 ETH | ||||
| Transfer | 15508350 | 1288 days ago | 0.00180549 ETH | ||||
| Transfer | 15477471 | 1293 days ago | 0.01155734 ETH | ||||
| Transfer | 15450001 | 1298 days ago | 0.03077663 ETH | ||||
| Transfer | 15447405 | 1298 days ago | 0.03370605 ETH | ||||
| Transfer | 15447357 | 1298 days ago | 0.04611183 ETH | ||||
| Transfer | 15439681 | 1299 days ago | 0.06283967 ETH | ||||
| Transfer | 15434118 | 1300 days ago | 0.02079572 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
DiamondDividendTracker
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2026-02-06
*/
/**
*Submitted for verification at Etherscan.io on 2022-03-25
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 amount) external returns (bool);
function allowance(address owner, address spender)
external
view
returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account)
public
view
virtual
override
returns (uint256)
{
return _balances[account];
}
function transfer(address to, uint256 amount)
public
virtual
override
returns (bool)
{
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
function allowance(address owner, address spender)
public
view
virtual
override
returns (uint256)
{
return _allowances[owner][spender];
}
function approve(address spender, uint256 amount)
public
virtual
override
returns (bool)
{
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
function increaseAllowance(address spender, uint256 addedValue)
public
virtual
returns (bool)
{
address owner = _msgSender();
_approve(owner, spender, _allowances[owner][spender] + addedValue);
return true;
}
function decreaseAllowance(address spender, uint256 subtractedValue)
public
virtual
returns (bool)
{
address owner = _msgSender();
uint256 currentAllowance = _allowances[owner][spender];
require(
currentAllowance >= subtractedValue,
"ERC20: decreased allowance below zero"
);
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
function _transfer(
address from,
address to,
uint256 amount
) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(
fromBalance >= amount,
"ERC20: transfer amount exceeds balance"
);
unchecked {
_balances[from] = fromBalance - amount;
}
_balances[to] += amount;
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
}
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
function _spendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(
currentAllowance >= amount,
"ERC20: insufficient allowance"
);
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
library SafeMath {
function tryAdd(uint256 a, uint256 b)
internal
pure
returns (bool, uint256)
{
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
function trySub(uint256 a, uint256 b)
internal
pure
returns (bool, uint256)
{
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
function tryMul(uint256 a, uint256 b)
internal
pure
returns (bool, uint256)
{
unchecked {
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
function tryDiv(uint256 a, uint256 b)
internal
pure
returns (bool, uint256)
{
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
function tryMod(uint256 a, uint256 b)
internal
pure
returns (bool, uint256)
{
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
library Counters {
struct Counter {
uint256 _value;
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
unchecked {
counter._value += 1;
}
}
function decrement(Counter storage counter) internal {
uint256 value = counter._value;
require(value > 0, "Counter: decrement overflow");
unchecked {
counter._value = value - 1;
}
}
function reset(Counter storage counter) internal {
counter._value = 0;
}
}
contract Ownable {
address private _owner;
address private _previousOwner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
constructor() {
_owner = msg.sender;
emit OwnershipTransferred(address(0), _owner);
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(_owner == msg.sender, "Ownable: caller is not the owner");
_;
}
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(_owner, address(0));
_owner = address(0);
}
}
interface IUniswapV2Router02 {
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
);
}
interface IUniswapV2Factory {
function createPair(address tokenA, address tokenB)
external
returns (address pair);
}
library SignedSafeMath {
function mul(int256 a, int256 b) internal pure returns (int256) {
return a * b;
}
function div(int256 a, int256 b) internal pure returns (int256) {
return a / b;
}
function sub(int256 a, int256 b) internal pure returns (int256) {
return a - b;
}
function add(int256 a, int256 b) internal pure returns (int256) {
return a + b;
}
}
library SafeCast {
function toUint224(uint256 value) internal pure returns (uint224) {
require(
value <= type(uint224).max,
"SafeCast: value doesn't fit in 224 bits"
);
return uint224(value);
}
function toUint128(uint256 value) internal pure returns (uint128) {
require(
value <= type(uint128).max,
"SafeCast: value doesn't fit in 128 bits"
);
return uint128(value);
}
function toUint96(uint256 value) internal pure returns (uint96) {
require(
value <= type(uint96).max,
"SafeCast: value doesn't fit in 96 bits"
);
return uint96(value);
}
function toUint64(uint256 value) internal pure returns (uint64) {
require(
value <= type(uint64).max,
"SafeCast: value doesn't fit in 64 bits"
);
return uint64(value);
}
function toUint32(uint256 value) internal pure returns (uint32) {
require(
value <= type(uint32).max,
"SafeCast: value doesn't fit in 32 bits"
);
return uint32(value);
}
function toUint16(uint256 value) internal pure returns (uint16) {
require(
value <= type(uint16).max,
"SafeCast: value doesn't fit in 16 bits"
);
return uint16(value);
}
function toUint8(uint256 value) internal pure returns (uint8) {
require(
value <= type(uint8).max,
"SafeCast: value doesn't fit in 8 bits"
);
return uint8(value);
}
function toUint256(int256 value) internal pure returns (uint256) {
require(value >= 0, "SafeCast: value must be positive");
return uint256(value);
}
function toInt128(int256 value) internal pure returns (int128) {
require(
value >= type(int128).min && value <= type(int128).max,
"SafeCast: value doesn't fit in 128 bits"
);
return int128(value);
}
function toInt64(int256 value) internal pure returns (int64) {
require(
value >= type(int64).min && value <= type(int64).max,
"SafeCast: value doesn't fit in 64 bits"
);
return int64(value);
}
function toInt32(int256 value) internal pure returns (int32) {
require(
value >= type(int32).min && value <= type(int32).max,
"SafeCast: value doesn't fit in 32 bits"
);
return int32(value);
}
function toInt16(int256 value) internal pure returns (int16) {
require(
value >= type(int16).min && value <= type(int16).max,
"SafeCast: value doesn't fit in 16 bits"
);
return int16(value);
}
function toInt8(int256 value) internal pure returns (int8) {
require(
value >= type(int8).min && value <= type(int8).max,
"SafeCast: value doesn't fit in 8 bits"
);
return int8(value);
}
function toInt256(uint256 value) internal pure returns (int256) {
require(
value <= uint256(type(int256).max),
"SafeCast: value doesn't fit in an int256"
);
return int256(value);
}
}
interface DividendPayingTokenInterface {
function dividendOf(address _owner) external view returns (uint256);
function distributeDividends() external payable;
function withdrawDividend() external;
event DividendsDistributed(address indexed from, uint256 weiAmount);
event DividendWithdrawn(
address indexed to,
uint256 weiAmount,
address received
);
}
interface DividendPayingTokenOptionalInterface {
function withdrawableDividendOf(address _owner)
external
view
returns (uint256);
function withdrawnDividendOf(address _owner)
external
view
returns (uint256);
function accumulativeDividendOf(address _owner)
external
view
returns (uint256);
}
abstract contract DividendPayingToken is
ERC20,
DividendPayingTokenInterface,
DividendPayingTokenOptionalInterface
{
using SafeMath for uint256;
using SignedSafeMath for int256;
using SafeCast for uint256;
using SafeCast for int256;
uint256 internal constant magnitude = 2**128;
uint256 internal magnifiedDividendPerShare;
mapping(address => int256) internal magnifiedDividendCorrections;
mapping(address => uint256) internal withdrawnDividends;
uint256 public totalDividendsDistributed;
constructor(string memory _name, string memory _symbol)
ERC20(_name, _symbol)
{}
receive() external payable {
distributeDividends();
}
function distributeDividends() public payable override {
require(totalSupply() > 0);
if (msg.value > 0) {
magnifiedDividendPerShare = magnifiedDividendPerShare.add(
(msg.value).mul(magnitude) / totalSupply()
);
emit DividendsDistributed(msg.sender, msg.value);
totalDividendsDistributed = totalDividendsDistributed.add(
msg.value
);
}
}
function withdrawDividend() public virtual override {
_withdrawDividendOfUser(payable(msg.sender), payable(msg.sender));
}
function _withdrawDividendOfUser(address payable user, address payable to)
internal
returns (uint256)
{
uint256 _withdrawableDividend = withdrawableDividendOf(user);
if (_withdrawableDividend > 0) {
withdrawnDividends[user] = withdrawnDividends[user].add(
_withdrawableDividend
);
emit DividendWithdrawn(user, _withdrawableDividend, to);
(bool success, ) = to.call{value: _withdrawableDividend}("");
if (!success) {
withdrawnDividends[user] = withdrawnDividends[user].sub(
_withdrawableDividend
);
return 0;
}
return _withdrawableDividend;
}
return 0;
}
function dividendOf(address _owner) public view override returns (uint256) {
return withdrawableDividendOf(_owner);
}
function withdrawableDividendOf(address _owner)
public
view
override
returns (uint256)
{
return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
}
function withdrawnDividendOf(address _owner)
public
view
override
returns (uint256)
{
return withdrawnDividends[_owner];
}
function accumulativeDividendOf(address _owner)
public
view
override
returns (uint256)
{
return
magnifiedDividendPerShare
.mul(balanceOf(_owner))
.toInt256()
.add(magnifiedDividendCorrections[_owner])
.toUint256() / magnitude;
}
function _mint(address account, uint256 value) internal override {
super._mint(account, value);
magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
account
].sub((magnifiedDividendPerShare.mul(value)).toInt256());
}
function _burn(address account, uint256 value) internal override {
super._burn(account, value);
magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
account
].add((magnifiedDividendPerShare.mul(value)).toInt256());
}
function _setBalance(address account, uint256 newBalance) internal {
uint256 currentBalance = balanceOf(account);
if (newBalance > currentBalance) {
uint256 mintAmount = newBalance.sub(currentBalance);
_mint(account, mintAmount);
} else if (newBalance < currentBalance) {
uint256 burnAmount = currentBalance.sub(newBalance);
_burn(account, burnAmount);
}
}
function getAccount(address _account)
public
view
returns (uint256 _withdrawableDividends, uint256 _withdrawnDividends)
{
_withdrawableDividends = withdrawableDividendOf(_account);
_withdrawnDividends = withdrawnDividends[_account];
}
}
contract DiamondDividendTracker is DividendPayingToken, Ownable {
using SafeMath for uint256;
using Counters for Counters.Counter;
Counters.Counter private tokenHoldersCount;
mapping(address => bool) private tokenHoldersMap;
mapping(address => bool) public excludedFromDividends;
uint256 public immutable minimumTokenBalanceForDividends;
event ExcludeFromDividends(address indexed account);
constructor()
DividendPayingToken(
"Diamond_Dividend_Tracker",
"Diamond_Dividend_Tracker"
)
{
minimumTokenBalanceForDividends = 10000 * 10**18;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function _approve(
address,
address,
uint256
) internal pure override {
require(false, "Diamond_Dividend_Tracker: No approvals allowed");
}
function _transfer(
address,
address,
uint256
) internal pure override {
require(false, "Diamond_Dividend_Tracker: No transfers allowed");
}
function withdrawDividend() public pure override {
require(
false,
"Diamond_Dividend_Tracker: withdrawDividend disabled. Use the 'claim' function on the main Diamond contract."
);
}
function excludeFromDividends(address account) external onlyOwner {
excludedFromDividends[account] = true;
_setBalance(account, 0);
if (tokenHoldersMap[account] == true) {
tokenHoldersMap[account] = false;
tokenHoldersCount.decrement();
}
emit ExcludeFromDividends(account);
}
function includeFromDividends(address account, uint256 balance)
external
onlyOwner
{
excludedFromDividends[account] = false;
if (balance >= minimumTokenBalanceForDividends) {
_setBalance(account, balance);
if (tokenHoldersMap[account] == false) {
tokenHoldersMap[account] = true;
tokenHoldersCount.increment();
}
}
emit ExcludeFromDividends(account);
}
function isExcludeFromDividends(address account)
external
view
onlyOwner
returns (bool)
{
return excludedFromDividends[account];
}
function getNumberOfTokenHolders() external view returns (uint256) {
return tokenHoldersCount.current();
}
function setBalance(address payable account, uint256 newBalance)
external
onlyOwner
{
if (excludedFromDividends[account]) {
return;
}
if (newBalance >= minimumTokenBalanceForDividends) {
_setBalance(account, newBalance);
if (tokenHoldersMap[account] == false) {
tokenHoldersMap[account] = true;
tokenHoldersCount.increment();
}
} else {
_setBalance(account, 0);
if (tokenHoldersMap[account] == true) {
tokenHoldersMap[account] = false;
tokenHoldersCount.decrement();
}
}
}
function processAccount(address account, address toAccount)
public
onlyOwner
returns (uint256)
{
uint256 amount = _withdrawDividendOfUser(
payable(account),
payable(toAccount)
);
return amount;
}
}
contract Diamond is ERC20, Ownable {
using SafeMath for uint256;
using Counters for Counters.Counter;
string private constant _name = "Diamond";
string private constant _symbol = "DIAMONDS";
uint8 private constant _decimals = 18;
uint256 private constant _tTotal = 1e12 * 10**18;
IUniswapV2Router02 private uniswapV2Router =
IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
bool private tradingOpen = false;
uint256 private launchBlock = 0;
address private uniswapV2Pair;
IERC20 private MyBagsInstance;
uint256 private minimumMyBagsToken = 1e8 * 10**18;
uint256 private privateSaleTimestamp;
uint256 private publicSaleTimestamp;
mapping(address => bool) private automatedMarketMakerPairs;
mapping(address => bool) public isExcludeFromFee;
mapping(address => bool) public isBot;
uint256 private walletLimitPercentage = 50;
mapping(address => bool) public isExludeFromWalletLimit;
uint256 private baseBuyTax = 10;
uint256 public baseSellTax = 5;
uint256 public sellPercentageOfHolding = 20;
uint256 public minutesIntervalPerSell = 7200 minutes;
mapping(address => uint256) public initialSellTimestamp;
uint256 private autoLP = 27;
uint256 private devFee = 40;
uint256 private marketingFee = 33;
uint256 public minContractTokensToSwap = 2e9 * 10**18;
bool public swapAll = false;
struct MinutesRangeTax {
uint256 from;
uint256 to;
uint256 tax;
}
mapping(address => uint256) public initialBuyTimestamp;
mapping(uint8 => MinutesRangeTax) public minutesRangeTaxes;
uint8 public maxIndexMinutesRange;
address private devWalletAddress;
address private marketingWalletAddress;
DiamondDividendTracker public dividendTracker;
uint256 minimumTokenBalanceForDividends = 10000 * 10**18;
mapping(address => uint256) public lastTransfer;
uint256 public pendingTokensForReward;
uint256 public minRewardTokensToSwap = 10000 * 10**18;
uint256 public pendingEthReward;
struct ClaimedEth {
uint256 ethAmount;
uint256 tokenAmount;
uint256 timestamp;
}
Counters.Counter private claimedHistoryIds;
mapping(uint256 => ClaimedEth) private claimedEthMap;
mapping(address => uint256[]) private userClaimedIds;
event BuyFees(address from, address to, uint256 amountTokens);
event SellFees(address from, address to, uint256 amountTokens);
event AddLiquidity(uint256 amountTokens, uint256 amountEth);
event SwapTokensForEth(uint256 sentTokens, uint256 receivedEth);
event SwapEthForTokens(uint256 sentEth, uint256 receivedTokens);
event DistributeFees(uint256 devEth, uint256 remarketingEth);
event AddRewardPool(uint256 _ethAmount);
event SendDividends(uint256 amount);
event DividendClaimed(
uint256 ethAmount,
uint256 tokenAmount,
address account
);
constructor(
address _devWalletAddress,
address _marketingWalletAddress,
address _myBagsTokenAddress
) ERC20(_name, _symbol) {
devWalletAddress = _devWalletAddress;
marketingWalletAddress = _marketingWalletAddress;
MyBagsInstance = IERC20(_myBagsTokenAddress);
isExcludeFromFee[owner()] = true;
isExcludeFromFee[address(this)] = true;
isExludeFromWalletLimit[owner()] = true;
isExludeFromWalletLimit[address(this)] = true;
isExludeFromWalletLimit[address(uniswapV2Router)] = true;
dividendTracker = new DiamondDividendTracker();
dividendTracker.excludeFromDividends(address(dividendTracker));
dividendTracker.excludeFromDividends(address(this));
dividendTracker.excludeFromDividends(owner());
dividendTracker.excludeFromDividends(address(uniswapV2Router));
minutesRangeTaxes[1].from = 0 minutes;
minutesRangeTaxes[1].to = 7200 minutes;
minutesRangeTaxes[1].tax = 30;
minutesRangeTaxes[2].from = 7200 minutes;
minutesRangeTaxes[2].to = 14400 minutes;
minutesRangeTaxes[2].tax = 25;
minutesRangeTaxes[3].from = 14400 minutes;
minutesRangeTaxes[3].to = 21600 minutes;
minutesRangeTaxes[3].tax = 20;
minutesRangeTaxes[4].from = 21600 minutes;
minutesRangeTaxes[4].to = 28800 minutes;
minutesRangeTaxes[4].tax = 15;
maxIndexMinutesRange = 4;
_mint(owner(), _tTotal);
}
function openTrading(uint256 _launchTime, uint256 _minutesForPrivateSale)
external
onlyOwner
{
require(!tradingOpen, "Diamond: Trading is already open");
require(_launchTime > block.timestamp, "Diamond: Invalid timestamp");
uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
address(this),
uniswapV2Router.WETH()
);
automatedMarketMakerPairs[uniswapV2Pair] = true;
dividendTracker.excludeFromDividends(uniswapV2Pair);
addLiquidity(balanceOf(address(this)), address(this).balance);
IERC20(uniswapV2Pair).approve(
address(uniswapV2Router),
type(uint256).max
);
tradingOpen = true;
privateSaleTimestamp = _launchTime;
publicSaleTimestamp = _launchTime.add(
_minutesForPrivateSale.mul(1 minutes)
);
launchBlock = block.number;
}
function manualSwap() external onlyOwner {
uint256 totalTokens = balanceOf(address(this)).sub(
pendingTokensForReward
);
swapTokensForEth(totalTokens);
}
function manualSend() external onlyOwner {
uint256 totalEth = address(this).balance.sub(pendingEthReward);
uint256 devFeesToSend = totalEth.mul(devFee).div(
uint256(100).sub(autoLP)
);
uint256 marketingFeesToSend = totalEth.mul(marketingFee).div(
uint256(100).sub(autoLP)
);
uint256 remainingEthForFees = totalEth.sub(devFeesToSend).sub(
marketingFeesToSend
);
devFeesToSend = devFeesToSend.add(remainingEthForFees);
sendEthToWallets(devFeesToSend, marketingFeesToSend);
}
function getTax(address _ad) public view returns (uint256) {
uint256 tax = baseSellTax;
for (uint8 x = 1; x <= maxIndexMinutesRange; x++) {
if (
(initialBuyTimestamp[_ad] + minutesRangeTaxes[x].from <=
block.timestamp &&
initialBuyTimestamp[_ad] + minutesRangeTaxes[x].to >=
block.timestamp)
) {
tax = minutesRangeTaxes[x].tax;
return tax;
}
}
return tax;
}
function getTotalDividendsDistributed() external view returns (uint256) {
return dividendTracker.totalDividendsDistributed();
}
function withdrawableDividendOf(address _account)
public
view
returns (uint256)
{
return dividendTracker.withdrawableDividendOf(_account);
}
function dividendTokenBalanceOf(address _account)
public
view
returns (uint256)
{
return dividendTracker.balanceOf(_account);
}
function claim() external {
_claim(payable(msg.sender), false);
}
function reinvest() external {
_claim(payable(msg.sender), true);
}
function _claim(address payable _account, bool _reinvest) private {
uint256 withdrawableAmount = dividendTracker.withdrawableDividendOf(
_account
);
require(
withdrawableAmount > 0,
"Diamond: Claimer has no withdrawable dividend"
);
uint256 ethAmount;
uint256 tokenAmount;
if (!_reinvest) {
ethAmount = dividendTracker.processAccount(_account, _account);
} else {
ethAmount = dividendTracker.processAccount(_account, address(this));
if (ethAmount > 0) {
tokenAmount = swapEthForTokens(ethAmount, _account);
}
}
if (ethAmount > 0) {
claimedHistoryIds.increment();
uint256 hId = claimedHistoryIds.current();
claimedEthMap[hId].ethAmount = ethAmount;
claimedEthMap[hId].tokenAmount = tokenAmount;
claimedEthMap[hId].timestamp = block.timestamp;
userClaimedIds[_account].push(hId);
emit DividendClaimed(ethAmount, tokenAmount, _account);
}
}
function getNumberOfDividendTokenHolders() external view returns (uint256) {
return dividendTracker.getNumberOfTokenHolders();
}
function getAccount(address _account)
public
view
returns (
uint256 withdrawableDividends,
uint256 withdrawnDividends,
uint256 balance
)
{
(withdrawableDividends, withdrawnDividends) = dividendTracker
.getAccount(_account);
return (withdrawableDividends, withdrawnDividends, balanceOf(_account));
}
function decimals() public view virtual override returns (uint8) {
return _decimals;
}
function _transfer(
address _from,
address _to,
uint256 _amount
) internal virtual override {
require(!isBot[_from] && !isBot[_to]);
uint256 transferAmount = _amount;
uint256 prevWalletLimit = walletLimitPercentage;
if (
tradingOpen &&
(automatedMarketMakerPairs[_from] ||
automatedMarketMakerPairs[_to]) &&
!isExcludeFromFee[_from] &&
!isExcludeFromFee[_to]
) {
require(
privateSaleTimestamp <= block.timestamp,
"Diamond: Private and public sale is not open"
);
if (
privateSaleTimestamp <= block.timestamp &&
publicSaleTimestamp > block.timestamp
) {
walletLimitPercentage = 10;
require(
MyBagsInstance.balanceOf(_to) >= minimumMyBagsToken,
"Diamond: Not enough $MyBagsToken"
);
}
transferAmount = takeFees(_from, _to, _amount);
}
if (initialBuyTimestamp[_to] == 0) {
initialBuyTimestamp[_to] = block.timestamp;
}
if (!automatedMarketMakerPairs[_to] && !isExludeFromWalletLimit[_to]) {
uint256 addressBalance = balanceOf(_to).add(transferAmount);
require(
addressBalance <=
totalSupply().mul(walletLimitPercentage).div(10000),
"Diamond: Wallet balance limit reached"
);
}
super._transfer(_from, _to, transferAmount);
walletLimitPercentage = prevWalletLimit;
if (!dividendTracker.isExcludeFromDividends(_from)) {
try
dividendTracker.setBalance(payable(_from), balanceOf(_from))
{} catch {}
}
if (!dividendTracker.isExcludeFromDividends(_to)) {
try
dividendTracker.setBalance(payable(_to), balanceOf(_to))
{} catch {}
}
}
function _setAutomatedMarketMakerPair(address _pair, bool _value) private {
require(
automatedMarketMakerPairs[_pair] != _value,
"Diamond: Automated market maker pair is already set to that value"
);
automatedMarketMakerPairs[_pair] = _value;
if (_value) {
dividendTracker.excludeFromDividends(_pair);
}
}
function setMinimumMyBagsToken(uint256 _minimumMyBagsToken)
external
onlyOwner
{
minimumMyBagsToken = _minimumMyBagsToken;
}
function setExcludeFromFee(address _address, bool _isExludeFromFee)
external
onlyOwner
{
isExcludeFromFee[_address] = _isExludeFromFee;
}
function setExludeFromDividends(
address _address,
bool _isExludeFromDividends
) external onlyOwner {
if (_isExludeFromDividends) {
dividendTracker.excludeFromDividends(_address);
} else {
dividendTracker.includeFromDividends(_address, balanceOf(_address));
}
}
function setExludeFromWalletLimit(
address _address,
bool _isExludeFromWalletLimit
) external onlyOwner {
isExludeFromWalletLimit[_address] = _isExludeFromWalletLimit;
}
function setWalletLimitPercentage(uint256 _percentage) external onlyOwner {
walletLimitPercentage = _percentage;
}
function setTaxes(
uint256 _baseBuyTax,
uint256 _baseSellTax,
uint256 _autoLP,
uint256 _devFee,
uint256 _marketingFee
) external onlyOwner {
require(_baseBuyTax <= 10 && baseSellTax <= 5);
baseBuyTax = _baseBuyTax;
baseSellTax = _baseSellTax;
autoLP = _autoLP;
devFee = _devFee;
marketingFee = _marketingFee;
}
function setMinContractTokensToSwap(uint256 _numToken) public onlyOwner {
minContractTokensToSwap = _numToken;
}
function setMinRewardTokensToSwap(uint256 _numToken) public onlyOwner {
minRewardTokensToSwap = _numToken;
}
function setSwapAll(bool _isWapAll) public onlyOwner {
swapAll = _isWapAll;
}
function setMinutesRangeTax(
uint8 _index,
uint256 _from,
uint256 _to,
uint256 _tax
) external onlyOwner {
minutesRangeTaxes[_index].from = _from.mul(1 minutes);
minutesRangeTaxes[_index].to = _to.mul(1 minutes);
minutesRangeTaxes[_index].tax = _tax;
}
function setMaxIndexMinutesRange(uint8 _maxIndex) external onlyOwner {
maxIndexMinutesRange = _maxIndex;
}
function setPercentageOfHolding(
uint256 _sellPercentageOfHolding,
uint256 _minutesIntervalPerSell
) external onlyOwner {
sellPercentageOfHolding = _sellPercentageOfHolding;
minutesIntervalPerSell = _minutesIntervalPerSell.mul(1 minutes);
}
function setBots(address[] calldata _bots) public onlyOwner {
for (uint256 i = 0; i < _bots.length; i++) {
if (
_bots[i] != uniswapV2Pair &&
_bots[i] != address(uniswapV2Router)
) {
isBot[_bots[i]] = true;
}
}
}
function setWalletAddress(address _devWallet, address _marketingWallet)
external
onlyOwner
{
devWalletAddress = _devWallet;
marketingWalletAddress = _marketingWallet;
}
function takeFees(
address _from,
address _to,
uint256 _amount
) private returns (uint256) {
uint256 fees;
uint256 remainingAmount;
require(
automatedMarketMakerPairs[_from] || automatedMarketMakerPairs[_to],
"Diamond: No market makers found"
);
if (automatedMarketMakerPairs[_from]) {
fees = _amount.mul(baseBuyTax).div(100);
remainingAmount = _amount.sub(fees);
super._transfer(_from, address(this), fees);
emit BuyFees(_from, address(this), fees);
} else {
uint256 totalSellTax;
if (isExcludeByInitialSell(_from, _amount)) {
totalSellTax = baseSellTax;
} else {
totalSellTax = getTax(_from);
}
fees = _amount.mul(totalSellTax).div(100);
uint256 rewardTokens = _amount
.mul(totalSellTax.sub(baseSellTax))
.div(100);
pendingTokensForReward = pendingTokensForReward.add(rewardTokens);
remainingAmount = _amount.sub(fees);
super._transfer(_from, address(this), fees);
uint256 tokensToSwap = balanceOf(address(this)).sub(
pendingTokensForReward
);
if (tokensToSwap > minContractTokensToSwap) {
if (!swapAll) {
tokensToSwap = minContractTokensToSwap;
}
distributeTokensEth(tokensToSwap);
}
if (pendingTokensForReward > minRewardTokensToSwap) {
swapAndSendDividends(pendingTokensForReward);
}
emit SellFees(_from, address(this), fees);
}
return remainingAmount;
}
function distributeTokensEth(uint256 _tokenAmount) private {
uint256 tokensForLiquidity = _tokenAmount.mul(autoLP).div(100);
uint256 halfLiquidity = tokensForLiquidity.div(2);
uint256 tokensForSwap = _tokenAmount.sub(halfLiquidity);
uint256 totalEth = swapTokensForEth(tokensForSwap);
uint256 ethForAddLP = totalEth.mul(autoLP).div(100);
uint256 devFeesToSend = totalEth.mul(devFee).div(100);
uint256 marketingFeesToSend = totalEth.mul(marketingFee).div(100);
uint256 remainingEthForFees = totalEth
.sub(ethForAddLP)
.sub(devFeesToSend)
.sub(marketingFeesToSend);
devFeesToSend = devFeesToSend.add(remainingEthForFees);
sendEthToWallets(devFeesToSend, marketingFeesToSend);
if (halfLiquidity > 0 && ethForAddLP > 0) {
addLiquidity(halfLiquidity, ethForAddLP);
}
}
function sendEthToWallets(uint256 _devFees, uint256 _marketingFees)
private
{
if (_devFees > 0) {
payable(devWalletAddress).transfer(_devFees);
}
if (_marketingFees > 0) {
payable(marketingWalletAddress).transfer(_marketingFees);
}
emit DistributeFees(_devFees, _marketingFees);
}
function swapTokensForEth(uint256 _tokenAmount) private returns (uint256) {
uint256 initialEthBalance = address(this).balance;
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), _tokenAmount);
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
_tokenAmount,
0,
path,
address(this),
block.timestamp
);
uint256 receivedEth = address(this).balance.sub(initialEthBalance);
emit SwapTokensForEth(_tokenAmount, receivedEth);
return receivedEth;
}
function swapEthForTokens(uint256 _ethAmount, address _to)
private
returns (uint256)
{
uint256 initialTokenBalance = balanceOf(address(this));
address[] memory path = new address[](2);
path[0] = uniswapV2Router.WETH();
path[1] = address(this);
uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
value: _ethAmount
}(0, path, _to, block.timestamp);
uint256 receivedTokens = balanceOf(address(this)).sub(
initialTokenBalance
);
emit SwapEthForTokens(_ethAmount, receivedTokens);
return receivedTokens;
}
function addLiquidity(uint256 _tokenAmount, uint256 _ethAmount) private {
_approve(address(this), address(uniswapV2Router), _tokenAmount);
uniswapV2Router.addLiquidityETH{value: _ethAmount}(
address(this),
_tokenAmount,
0,
0,
owner(),
block.timestamp
);
emit AddLiquidity(_tokenAmount, _ethAmount);
}
function swapAndSendDividends(uint256 _tokenAmount) private {
uint256 dividends = swapTokensForEth(_tokenAmount);
pendingTokensForReward = pendingTokensForReward.sub(_tokenAmount);
uint256 totalEthToSend = dividends.add(pendingEthReward);
(bool success, ) = address(dividendTracker).call{value: totalEthToSend}(
""
);
if (success) {
emit SendDividends(dividends);
} else {
pendingEthReward = pendingEthReward.add(dividends);
}
}
function isExcludeByInitialSell(address _ad, uint256 _tokenAmount)
private
returns (bool)
{
if (
initialSellTimestamp[_ad] + minutesIntervalPerSell <=
block.timestamp
) {
initialSellTimestamp[_ad] = block.timestamp;
if (
_tokenAmount <=
balanceOf(_ad).mul(sellPercentageOfHolding).div(100)
) {
return true;
}
}
return false;
}
function availableContractTokenBalance() public view returns (uint256) {
return balanceOf(address(this)).sub(pendingTokensForReward);
}
function getHistory(
address _account,
uint256 _limit,
uint256 _pageNumber
) external view returns (ClaimedEth[] memory) {
require(_limit > 0 && _pageNumber > 0, "Diamond: Invalid arguments");
uint256 userClaimedCount = userClaimedIds[_account].length;
uint256 end = _pageNumber * _limit;
uint256 start = end - _limit;
require(start < userClaimedCount, "Diamond: Out of range");
uint256 limit = _limit;
if (end > userClaimedCount) {
end = userClaimedCount;
limit = userClaimedCount % _limit;
}
ClaimedEth[] memory myClaimedEth = new ClaimedEth[](limit);
uint256 currentIndex = 0;
for (uint256 i = start; i < end; i++) {
uint256 hId = userClaimedIds[_account][i];
myClaimedEth[currentIndex] = claimedEthMap[hId];
currentIndex += 1;
}
return myClaimedEth;
}
function getHistoryCount(address _account) external view returns (uint256) {
return userClaimedIds[_account].length;
}
receive() external payable {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"},{"indexed":false,"internalType":"address","name":"received","type":"address"}],"name":"DividendWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"DividendsDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"ExcludeFromDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"accumulativeDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeDividends","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"dividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getAccount","outputs":[{"internalType":"uint256","name":"_withdrawableDividends","type":"uint256"},{"internalType":"uint256","name":"_withdrawnDividends","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"}],"name":"includeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludeFromDividends","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokenBalanceForDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"toAccount","type":"address"}],"name":"processAccount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"},{"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"setBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividendsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawDividend","outputs":[],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"withdrawnDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a06040523480156200001157600080fd5b5060408051808201825260188082527f4469616d6f6e645f4469766964656e645f547261636b65720000000000000000602080840182815285518087019096529285528401528151919291839183916200006e91600391620000df565b50805162000084906004906020840190620000df565b5050600980546001600160a01b03191633908117909155604051909350600092507f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091508290a369021e19e0c9bab2400000608052620001c1565b828054620000ed9062000185565b90600052602060002090601f0160209004810192826200011157600085556200015c565b82601f106200012c57805160ff19168380011785556200015c565b828001600101855582156200015c579182015b828111156200015c5782518255916020019190600101906200013f565b506200016a9291506200016e565b5090565b5b808211156200016a57600081556001016200016f565b600181811c908216806200019a57607f821691505b602082108103620001bb57634e487b7160e01b600052602260045260246000fd5b50919050565b6080516117ce620001eb6000396000818161051c0152818161077d0152610cb101526117ce6000f3fe6080604052600436106101c65760003560e01c80636a474002116100f7578063a457c2d711610095578063be10b61411610064578063be10b6141461050a578063dd62ed3e1461053e578063e30443bc14610584578063fbcbc0f1146105a457600080fd5b8063a457c2d714610474578063a8b9d24014610494578063a9059cbb146104b4578063aafd847a146104d457600080fd5b806385a6b3ae116100d157806385a6b3ae146104015780638da5cb5b1461041757806391b89fba1461043f57806395d89b411461045f57600080fd5b80636a474002146103a157806370a08231146103b6578063715018a6146103ec57600080fd5b806327ce014711610164578063369513561161013e578063369513561461031157806339509351146103315780634e7b827f1461035157806352b5f81d1461038157600080fd5b806327ce0147146102b5578063313ce567146102d557806331e79db0146102f157600080fd5b806309bbedde116101a057806309bbedde1461023d57806318160ddd1461026057806318c18adb1461027557806323b872dd1461029557600080fd5b806303c83302146101da57806306fdde03146101e2578063095ea7b31461020d57600080fd5b366101d5576101d36105d9565b005b600080fd5b6101d36105d9565b3480156101ee57600080fd5b506101f761066c565b60405161020491906114f3565b60405180910390f35b34801561021957600080fd5b5061022d610228366004611560565b6106fe565b6040519015158152602001610204565b34801561024957600080fd5b50610252610718565b604051908152602001610204565b34801561026c57600080fd5b50600254610252565b34801561028157600080fd5b506101d3610290366004611560565b610728565b3480156102a157600080fd5b5061022d6102b036600461158c565b610839565b3480156102c157600080fd5b506102526102d03660046115cd565b61085d565b3480156102e157600080fd5b5060405160128152602001610204565b3480156102fd57600080fd5b506101d361030c3660046115cd565b6108b9565b34801561031d57600080fd5b5061022d61032c3660046115cd565b610997565b34801561033d57600080fd5b5061022d61034c366004611560565b6109e3565b34801561035d57600080fd5b5061022d61036c3660046115cd565b600d6020526000908152604090205460ff1681565b34801561038d57600080fd5b5061025261039c3660046115ea565b610a22565b3480156103ad57600080fd5b506101d3610a63565b3480156103c257600080fd5b506102526103d13660046115cd565b6001600160a01b031660009081526020819052604090205490565b3480156103f857600080fd5b506101d3610b0b565b34801561040d57600080fd5b5061025260085481565b34801561042357600080fd5b506009546040516001600160a01b039091168152602001610204565b34801561044b57600080fd5b5061025261045a3660046115cd565b610b7f565b34801561046b57600080fd5b506101f7610b8a565b34801561048057600080fd5b5061022d61048f366004611560565b610b99565b3480156104a057600080fd5b506102526104af3660046115cd565b610c2b565b3480156104c057600080fd5b5061022d6104cf366004611560565b610c57565b3480156104e057600080fd5b506102526104ef3660046115cd565b6001600160a01b031660009081526007602052604090205490565b34801561051657600080fd5b506102527f000000000000000000000000000000000000000000000000000000000000000081565b34801561054a57600080fd5b506102526105593660046115ea565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561059057600080fd5b506101d361059f366004611560565b610c65565b3480156105b057600080fd5b506105c46105bf3660046115cd565b610d93565b60408051928352602083019190915201610204565b60006105e460025490565b116105ee57600080fd5b341561066a5761062161060060025490565b61060e34600160801b610dc0565b6106189190611639565b60055490610dd3565b60055560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a26008546106669034610dd3565b6008555b565b60606003805461067b9061165b565b80601f01602080910402602001604051908101604052809291908181526020018280546106a79061165b565b80156106f45780601f106106c9576101008083540402835291602001916106f4565b820191906000526020600020905b8154815290600101906020018083116106d757829003601f168201915b5050505050905090565b60003361070c818585610ddf565b60019150505b92915050565b6000610723600b5490565b905090565b6009546001600160a01b0316331461075b5760405162461bcd60e51b815260040161075290611695565b60405180910390fd5b6001600160a01b0382166000908152600d60205260409020805460ff191690557f00000000000000000000000000000000000000000000000000000000000000008110610801576107ac8282610e43565b6001600160a01b0382166000908152600c602052604081205460ff1615159003610801576001600160a01b0382166000908152600c60205260409020805460ff19166001179055610801600b80546001019055565b6040516001600160a01b038316907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a25050565b600033610847858285610ea2565b610852858585610f2e565b506001949350505050565b6001600160a01b03811660009081526006602090815260408083205491839052822054600554600160801b926108af926108aa926108a49161089f9190610dc0565b610f8d565b90610ffb565b611007565b6107129190611639565b6009546001600160a01b031633146108e35760405162461bcd60e51b815260040161075290611695565b6001600160a01b0381166000908152600d60205260408120805460ff19166001179055610911908290610e43565b6001600160a01b0381166000908152600c602052604090205460ff161515600103610960576001600160a01b0381166000908152600c60205260409020805460ff19169055610960600b611059565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b6009546000906001600160a01b031633146109c45760405162461bcd60e51b815260040161075290611695565b506001600160a01b03166000908152600d602052604090205460ff1690565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061070c9082908690610a1d9087906116ca565b610ddf565b6009546000906001600160a01b03163314610a4f5760405162461bcd60e51b815260040161075290611695565b6000610a5b84846110b0565b949350505050565b60405162461bcd60e51b815260206004820152606b60248201527f4469616d6f6e645f4469766964656e645f547261636b65723a2077697468647260448201527f61774469766964656e642064697361626c65642e20557365207468652027636c60648201527f61696d272066756e6374696f6e206f6e20746865206d61696e204469616d6f6e60848201526a321031b7b73a3930b1ba1760a91b60a482015260c401610752565b6009546001600160a01b03163314610b355760405162461bcd60e51b815260040161075290611695565b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b600061071282610c2b565b60606004805461067b9061165b565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610c1e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610752565b6108528286868403610ddf565b6001600160a01b03811660009081526007602052604081205461071290610c518461085d565b90611206565b60003361070c818585610f2e565b6009546001600160a01b03163314610c8f5760405162461bcd60e51b815260040161075290611695565b6001600160a01b0382166000908152600d602052604090205460ff16610d35577f00000000000000000000000000000000000000000000000000000000000000008110610d3957610ce08282610e43565b6001600160a01b0382166000908152600c602052604081205460ff1615159003610d35576001600160a01b0382166000908152600c60205260409020805460ff19166001179055610d35600b80546001019055565b5050565b610d44826000610e43565b6001600160a01b0382166000908152600c602052604090205460ff161515600103610d35576001600160a01b0382166000908152600c60205260409020805460ff19169055610d35600b611059565b600080610d9f83610c2b565b6001600160a01b039093166000908152600760205260409020549293915050565b6000610dcc82846116e2565b9392505050565b6000610dcc82846116ca565b60405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e645f4469766964656e645f547261636b65723a204e6f2061707060448201526d1c9bdd985b1cc8185b1b1bddd95960921b6064820152608401610752565b505050565b6001600160a01b03821660009081526020819052604090205480821115610e82576000610e708383611206565b9050610e7c8482611212565b50505050565b80821015610e3e576000610e968284611206565b9050610e7c8482611276565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610e7c5781811015610f215760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610752565b610e7c8484848403610ddf565b60405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e645f4469766964656e645f547261636b65723a204e6f2074726160448201526d1b9cd9995c9cc8185b1b1bddd95960921b6064820152608401610752565b60006001600160ff1b03821115610ff75760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610752565b5090565b6000610dcc8284611701565b600080821215610ff75760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610752565b8054806110a85760405162461bcd60e51b815260206004820152601b60248201527f436f756e7465723a2064656372656d656e74206f766572666c6f7700000000006044820152606401610752565b600019019055565b6000806110bc84610c2b565b905080156111fc576001600160a01b0384166000908152600760205260409020546110e79082610dd3565b6001600160a01b038516600081815260076020526040908190209290925590517feb063efb53b3790d2bc15284b59af7544466c8787c2883321ee27095647911b69061114890849087909182526001600160a01b0316602082015260400190565b60405180910390a26000836001600160a01b03168260405160006040518083038185875af1925050503d806000811461119d576040519150601f19603f3d011682016040523d82523d6000602084013e6111a2565b606091505b50509050806111f4576001600160a01b0385166000908152600760205260409020546111ce9083611206565b6001600160a01b0386166000908152600760205260408120919091559250610712915050565b509050610712565b5060009392505050565b6000610dcc8284611742565b61121c82826112ba565b61125661123761089f83600554610dc090919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490611399565b6001600160a01b0390921660009081526006602052604090209190915550565b61128082826113a5565b61125661129b61089f83600554610dc090919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490610ffb565b6001600160a01b0382166113105760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610752565b806002600082825461132291906116ca565b90915550506001600160a01b0382166000908152602081905260408120805483929061134f9084906116ca565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000610dcc8284611759565b6001600160a01b0382166114055760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610752565b6001600160a01b038216600090815260208190526040902054818110156114795760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610752565b6001600160a01b03831660009081526020819052604081208383039055600280548492906114a8908490611742565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600060208083528351808285015260005b8181101561152057858101830151858201604001528201611504565b81811115611532576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461155d57600080fd5b50565b6000806040838503121561157357600080fd5b823561157e81611548565b946020939093013593505050565b6000806000606084860312156115a157600080fd5b83356115ac81611548565b925060208401356115bc81611548565b929592945050506040919091013590565b6000602082840312156115df57600080fd5b8135610dcc81611548565b600080604083850312156115fd57600080fd5b823561160881611548565b9150602083013561161881611548565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b60008261165657634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061166f57607f821691505b60208210810361168f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156116dd576116dd611623565b500190565b60008160001904831182151516156116fc576116fc611623565b500290565b600080821280156001600160ff1b038490038513161561172357611723611623565b600160ff1b839003841281161561173c5761173c611623565b50500190565b60008282101561175457611754611623565b500390565b60008083128015600160ff1b85018412161561177757611777611623565b6001600160ff1b038401831381161561179257611792611623565b5050039056fea2646970667358221220a1a3e832f086de6cb61f3b31813c5ae482d8dd06bf6b057ed57fae724de6effc64736f6c634300080d0033
Deployed Bytecode
0x6080604052600436106101c65760003560e01c80636a474002116100f7578063a457c2d711610095578063be10b61411610064578063be10b6141461050a578063dd62ed3e1461053e578063e30443bc14610584578063fbcbc0f1146105a457600080fd5b8063a457c2d714610474578063a8b9d24014610494578063a9059cbb146104b4578063aafd847a146104d457600080fd5b806385a6b3ae116100d157806385a6b3ae146104015780638da5cb5b1461041757806391b89fba1461043f57806395d89b411461045f57600080fd5b80636a474002146103a157806370a08231146103b6578063715018a6146103ec57600080fd5b806327ce014711610164578063369513561161013e578063369513561461031157806339509351146103315780634e7b827f1461035157806352b5f81d1461038157600080fd5b806327ce0147146102b5578063313ce567146102d557806331e79db0146102f157600080fd5b806309bbedde116101a057806309bbedde1461023d57806318160ddd1461026057806318c18adb1461027557806323b872dd1461029557600080fd5b806303c83302146101da57806306fdde03146101e2578063095ea7b31461020d57600080fd5b366101d5576101d36105d9565b005b600080fd5b6101d36105d9565b3480156101ee57600080fd5b506101f761066c565b60405161020491906114f3565b60405180910390f35b34801561021957600080fd5b5061022d610228366004611560565b6106fe565b6040519015158152602001610204565b34801561024957600080fd5b50610252610718565b604051908152602001610204565b34801561026c57600080fd5b50600254610252565b34801561028157600080fd5b506101d3610290366004611560565b610728565b3480156102a157600080fd5b5061022d6102b036600461158c565b610839565b3480156102c157600080fd5b506102526102d03660046115cd565b61085d565b3480156102e157600080fd5b5060405160128152602001610204565b3480156102fd57600080fd5b506101d361030c3660046115cd565b6108b9565b34801561031d57600080fd5b5061022d61032c3660046115cd565b610997565b34801561033d57600080fd5b5061022d61034c366004611560565b6109e3565b34801561035d57600080fd5b5061022d61036c3660046115cd565b600d6020526000908152604090205460ff1681565b34801561038d57600080fd5b5061025261039c3660046115ea565b610a22565b3480156103ad57600080fd5b506101d3610a63565b3480156103c257600080fd5b506102526103d13660046115cd565b6001600160a01b031660009081526020819052604090205490565b3480156103f857600080fd5b506101d3610b0b565b34801561040d57600080fd5b5061025260085481565b34801561042357600080fd5b506009546040516001600160a01b039091168152602001610204565b34801561044b57600080fd5b5061025261045a3660046115cd565b610b7f565b34801561046b57600080fd5b506101f7610b8a565b34801561048057600080fd5b5061022d61048f366004611560565b610b99565b3480156104a057600080fd5b506102526104af3660046115cd565b610c2b565b3480156104c057600080fd5b5061022d6104cf366004611560565b610c57565b3480156104e057600080fd5b506102526104ef3660046115cd565b6001600160a01b031660009081526007602052604090205490565b34801561051657600080fd5b506102527f00000000000000000000000000000000000000000000021e19e0c9bab240000081565b34801561054a57600080fd5b506102526105593660046115ea565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561059057600080fd5b506101d361059f366004611560565b610c65565b3480156105b057600080fd5b506105c46105bf3660046115cd565b610d93565b60408051928352602083019190915201610204565b60006105e460025490565b116105ee57600080fd5b341561066a5761062161060060025490565b61060e34600160801b610dc0565b6106189190611639565b60055490610dd3565b60055560405134815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a26008546106669034610dd3565b6008555b565b60606003805461067b9061165b565b80601f01602080910402602001604051908101604052809291908181526020018280546106a79061165b565b80156106f45780601f106106c9576101008083540402835291602001916106f4565b820191906000526020600020905b8154815290600101906020018083116106d757829003601f168201915b5050505050905090565b60003361070c818585610ddf565b60019150505b92915050565b6000610723600b5490565b905090565b6009546001600160a01b0316331461075b5760405162461bcd60e51b815260040161075290611695565b60405180910390fd5b6001600160a01b0382166000908152600d60205260409020805460ff191690557f00000000000000000000000000000000000000000000021e19e0c9bab24000008110610801576107ac8282610e43565b6001600160a01b0382166000908152600c602052604081205460ff1615159003610801576001600160a01b0382166000908152600c60205260409020805460ff19166001179055610801600b80546001019055565b6040516001600160a01b038316907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a25050565b600033610847858285610ea2565b610852858585610f2e565b506001949350505050565b6001600160a01b03811660009081526006602090815260408083205491839052822054600554600160801b926108af926108aa926108a49161089f9190610dc0565b610f8d565b90610ffb565b611007565b6107129190611639565b6009546001600160a01b031633146108e35760405162461bcd60e51b815260040161075290611695565b6001600160a01b0381166000908152600d60205260408120805460ff19166001179055610911908290610e43565b6001600160a01b0381166000908152600c602052604090205460ff161515600103610960576001600160a01b0381166000908152600c60205260409020805460ff19169055610960600b611059565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b6009546000906001600160a01b031633146109c45760405162461bcd60e51b815260040161075290611695565b506001600160a01b03166000908152600d602052604090205460ff1690565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919061070c9082908690610a1d9087906116ca565b610ddf565b6009546000906001600160a01b03163314610a4f5760405162461bcd60e51b815260040161075290611695565b6000610a5b84846110b0565b949350505050565b60405162461bcd60e51b815260206004820152606b60248201527f4469616d6f6e645f4469766964656e645f547261636b65723a2077697468647260448201527f61774469766964656e642064697361626c65642e20557365207468652027636c60648201527f61696d272066756e6374696f6e206f6e20746865206d61696e204469616d6f6e60848201526a321031b7b73a3930b1ba1760a91b60a482015260c401610752565b6009546001600160a01b03163314610b355760405162461bcd60e51b815260040161075290611695565b6009546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600980546001600160a01b0319169055565b600061071282610c2b565b60606004805461067b9061165b565b3360008181526001602090815260408083206001600160a01b038716845290915281205490919083811015610c1e5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610752565b6108528286868403610ddf565b6001600160a01b03811660009081526007602052604081205461071290610c518461085d565b90611206565b60003361070c818585610f2e565b6009546001600160a01b03163314610c8f5760405162461bcd60e51b815260040161075290611695565b6001600160a01b0382166000908152600d602052604090205460ff16610d35577f00000000000000000000000000000000000000000000021e19e0c9bab24000008110610d3957610ce08282610e43565b6001600160a01b0382166000908152600c602052604081205460ff1615159003610d35576001600160a01b0382166000908152600c60205260409020805460ff19166001179055610d35600b80546001019055565b5050565b610d44826000610e43565b6001600160a01b0382166000908152600c602052604090205460ff161515600103610d35576001600160a01b0382166000908152600c60205260409020805460ff19169055610d35600b611059565b600080610d9f83610c2b565b6001600160a01b039093166000908152600760205260409020549293915050565b6000610dcc82846116e2565b9392505050565b6000610dcc82846116ca565b60405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e645f4469766964656e645f547261636b65723a204e6f2061707060448201526d1c9bdd985b1cc8185b1b1bddd95960921b6064820152608401610752565b505050565b6001600160a01b03821660009081526020819052604090205480821115610e82576000610e708383611206565b9050610e7c8482611212565b50505050565b80821015610e3e576000610e968284611206565b9050610e7c8482611276565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114610e7c5781811015610f215760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610752565b610e7c8484848403610ddf565b60405162461bcd60e51b815260206004820152602e60248201527f4469616d6f6e645f4469766964656e645f547261636b65723a204e6f2074726160448201526d1b9cd9995c9cc8185b1b1bddd95960921b6064820152608401610752565b60006001600160ff1b03821115610ff75760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401610752565b5090565b6000610dcc8284611701565b600080821215610ff75760405162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f7369746976656044820152606401610752565b8054806110a85760405162461bcd60e51b815260206004820152601b60248201527f436f756e7465723a2064656372656d656e74206f766572666c6f7700000000006044820152606401610752565b600019019055565b6000806110bc84610c2b565b905080156111fc576001600160a01b0384166000908152600760205260409020546110e79082610dd3565b6001600160a01b038516600081815260076020526040908190209290925590517feb063efb53b3790d2bc15284b59af7544466c8787c2883321ee27095647911b69061114890849087909182526001600160a01b0316602082015260400190565b60405180910390a26000836001600160a01b03168260405160006040518083038185875af1925050503d806000811461119d576040519150601f19603f3d011682016040523d82523d6000602084013e6111a2565b606091505b50509050806111f4576001600160a01b0385166000908152600760205260409020546111ce9083611206565b6001600160a01b0386166000908152600760205260408120919091559250610712915050565b509050610712565b5060009392505050565b6000610dcc8284611742565b61121c82826112ba565b61125661123761089f83600554610dc090919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490611399565b6001600160a01b0390921660009081526006602052604090209190915550565b61128082826113a5565b61125661129b61089f83600554610dc090919063ffffffff16565b6001600160a01b03841660009081526006602052604090205490610ffb565b6001600160a01b0382166113105760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610752565b806002600082825461132291906116ca565b90915550506001600160a01b0382166000908152602081905260408120805483929061134f9084906116ca565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6000610dcc8284611759565b6001600160a01b0382166114055760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610752565b6001600160a01b038216600090815260208190526040902054818110156114795760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610752565b6001600160a01b03831660009081526020819052604081208383039055600280548492906114a8908490611742565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b600060208083528351808285015260005b8181101561152057858101830151858201604001528201611504565b81811115611532576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461155d57600080fd5b50565b6000806040838503121561157357600080fd5b823561157e81611548565b946020939093013593505050565b6000806000606084860312156115a157600080fd5b83356115ac81611548565b925060208401356115bc81611548565b929592945050506040919091013590565b6000602082840312156115df57600080fd5b8135610dcc81611548565b600080604083850312156115fd57600080fd5b823561160881611548565b9150602083013561161881611548565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b60008261165657634e487b7160e01b600052601260045260246000fd5b500490565b600181811c9082168061166f57607f821691505b60208210810361168f57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600082198211156116dd576116dd611623565b500190565b60008160001904831182151516156116fc576116fc611623565b500290565b600080821280156001600160ff1b038490038513161561172357611723611623565b600160ff1b839003841281161561173c5761173c611623565b50500190565b60008282101561175457611754611623565b500390565b60008083128015600160ff1b85018412161561177757611777611623565b6001600160ff1b038401831381161561179257611792611623565b5050039056fea2646970667358221220a1a3e832f086de6cb61f3b31813c5ae482d8dd06bf6b057ed57fae724de6effc64736f6c634300080d0033
Deployed Bytecode Sourcemap
21180:3579:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17460:21;:19;:21::i;:::-;21180:3579;;;;;17497:471;;;:::i;1778:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2851:242;;;;;;;;;;-1:-1:-1;2851:242:0;;;;;:::i;:::-;;:::i;:::-;;;1237:14:1;;1230:22;1212:41;;1200:2;1185:18;2851:242:0;1072:187:1;23625:120:0;;;;;;;;;;;;;:::i;:::-;;;1410:25:1;;;1398:2;1383:18;23625:120:0;1264:177:1;2099:108:0;;;;;;;;;;-1:-1:-1;2187:12:0;;2099:108;;22929:495;;;;;;;;;;-1:-1:-1;22929:495:0;;;;;:::i;:::-;;:::i;3101:295::-;;;;;;;;;;-1:-1:-1;3101:295:0;;;;;:::i;:::-;;:::i;19479:364::-;;;;;;;;;;-1:-1:-1;19479:364:0;;;;;:::i;:::-;;:::i;21837:93::-;;;;;;;;;;-1:-1:-1;21837:93:0;;21920:2;2301:36:1;;2289:2;2274:18;21837:93:0;2159:184:1;22563:358:0;;;;;;;;;;-1:-1:-1;22563:358:0;;;;;:::i;:::-;;:::i;23432:185::-;;;;;;;;;;-1:-1:-1;23432:185:0;;;;;:::i;:::-;;:::i;3404:272::-;;;;;;;;;;-1:-1:-1;3404:272:0;;;;;:::i;:::-;;:::i;21434:53::-;;;;;;;;;;-1:-1:-1;21434:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24471:285;;;;;;;;;;-1:-1:-1;24471:285:0;;;;;:::i;:::-;;:::i;22325:230::-;;;;;;;;;;;;;:::i;2215:177::-;;;;;;;;;;-1:-1:-1;2215:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;2366:18:0;2334:7;2366:18;;;;;;;;;;;;2215:177;10862:148;;;;;;;;;;;;;:::i;17271:40::-;;;;;;;;;;;;;;;;10650:79;;;;;;;;;;-1:-1:-1;10715:6:0;;10650:79;;-1:-1:-1;;;;;10715:6:0;;;2887:51:1;;2875:2;2860:18;10650:79:0;2741:203:1;18931:131:0;;;;;;;;;;-1:-1:-1;18931:131:0;;;;;:::i;:::-;;:::i;1886:104::-;;;;;;;;;;;;;:::i;3684:507::-;;;;;;;;;;-1:-1:-1;3684:507:0;;;;;:::i;:::-;;:::i;19070:216::-;;;;;;;;;;-1:-1:-1;19070:216:0;;;;;:::i;:::-;;:::i;2400:234::-;;;;;;;;;;-1:-1:-1;2400:234:0;;;;;:::i;:::-;;:::i;19294:177::-;;;;;;;;;;-1:-1:-1;19294:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;19437:26:0;19405:7;19437:26;;;:18;:26;;;;;;;19294:177;21496:56;;;;;;;;;;;;;;;2642:201;;;;;;;;;;-1:-1:-1;2642:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;2808:18:0;;;2776:7;2808:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2642:201;23753:710;;;;;;;;;;-1:-1:-1;23753:710:0;;;;;:::i;:::-;;:::i;20884:289::-;;;;;;;;;;-1:-1:-1;20884:289:0;;;;;:::i;:::-;;:::i;:::-;;;;3451:25:1;;;3507:2;3492:18;;3485:34;;;;3424:18;20884:289:0;3277:248:1;17497:471:0;17587:1;17571:13;2187:12;;;2099:108;17571:13;:17;17563:26;;;;;;17606:9;:13;17602:359;;17664:105;17741:13;2187:12;;;2099:108;17741:13;17712:26;17713:9;-1:-1:-1;;;17712:15:0;:26::i;:::-;:42;;;;:::i;:::-;17664:25;;;:29;:105::i;:::-;17636:25;:133;17789:43;;17822:9;1410:25:1;;17810:10:0;;17789:43;;1398:2:1;1383:18;17789:43:0;;;;;;;17877:25;;:72;;17925:9;17877:29;:72::i;:::-;17849:25;:100;17602:359;17497:471::o;1778:100::-;1832:13;1865:5;1858:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1778:100;:::o;2851:242::-;2970:4;1238:10;3031:32;1238:10;3047:7;3056:6;3031:8;:32::i;:::-;3081:4;3074:11;;;2851:242;;;;;:::o;23625:120::-;23683:7;23710:27;:17;9826:14;;9734:114;23710:27;23703:34;;23625:120;:::o;22929:495::-;10777:6;;-1:-1:-1;;;;;10777:6:0;10787:10;10777:20;10769:65;;;;-1:-1:-1;;;10769:65:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;23046:30:0;::::1;23079:5;23046:30:::0;;;:21:::1;:30;::::0;;;;:38;;-1:-1:-1;;23046:38:0::1;::::0;;23112:31:::1;23101:42:::0;::::1;23097:273;;23160:29;23172:7;23181;23160:11;:29::i;:::-;-1:-1:-1::0;;;;;23210:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;;::::1;;:33;;::::0;;23206:153:::1;;-1:-1:-1::0;;;;;23264:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;:31;;-1:-1:-1;;23264:31:0::1;23291:4;23264:31;::::0;;23314:29:::1;:17;9945:19:::0;;9963:1;9945:19;;;9856:127;23314:29:::1;23387;::::0;-1:-1:-1;;;;;23387:29:0;::::1;::::0;::::1;::::0;;;::::1;22929:495:::0;;:::o;3101:295::-;3232:4;1238:10;3290:38;3306:4;1238:10;3321:6;3290:15;:38::i;:::-;3339:27;3349:4;3355:2;3359:6;3339:9;:27::i;:::-;-1:-1:-1;3384:4:0;;3101:295;-1:-1:-1;;;;3101:295:0:o;19479:364::-;-1:-1:-1;;;;;19756:36:0;;19593:7;19756:36;;;:28;:36;;;;;;;;;2366:18;;;;;;;19638:25;;-1:-1:-1;;;17070:6:0;19638:185;;:155;;:95;;:66;;:25;:47;:66::i;:::-;:93;:95::i;:::-;:117;;:155::i;:::-;:183;:185::i;:::-;:197;;;;:::i;22563:358::-;10777:6;;-1:-1:-1;;;;;10777:6:0;10787:10;10777:20;10769:65;;;;-1:-1:-1;;;10769:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22640:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;:37;;-1:-1:-1;;22640:37:0::1;22673:4;22640:37;::::0;;22690:23:::1;::::0;22662:7;;22690:11:::1;:23::i;:::-;-1:-1:-1::0;;;;;22730:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;;::::1;;:32;;:24:::0;:32;22726:141:::1;;-1:-1:-1::0;;;;;22779:24:0;::::1;22806:5;22779:24:::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;22779:32:0::1;::::0;;22826:29:::1;:17;:27;:29::i;:::-;22884;::::0;-1:-1:-1;;;;;22884:29:0;::::1;::::0;::::1;::::0;;;::::1;22563:358:::0;:::o;23432:185::-;10777:6;;23550:4;;-1:-1:-1;;;;;10777:6:0;10787:10;10777:20;10769:65;;;;-1:-1:-1;;;10769:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23579:30:0::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;::::0;23432:185::o;3404:272::-;1238:10;3519:4;3605:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;3605:27:0;;;;;;;;;;3519:4;;1238:10;3580:66;;1238:10;;3605:27;;:40;;3635:10;;3605:40;:::i;:::-;3580:8;:66::i;24471:285::-;10777:6;;24584:7;;-1:-1:-1;;;;;10777:6:0;10787:10;10777:20;10769:65;;;;-1:-1:-1;;;10769:65:0;;;;;;;:::i;:::-;24609:14:::1;24626:98;24672:7;24703:9;24626:23;:98::i;:::-;24609:115:::0;24471:285;-1:-1:-1;;;;24471:285:0:o;22325:230::-;22385:162;;-1:-1:-1;;;22385:162:0;;4965:2:1;22385:162:0;;;4947:21:1;5004:3;4984:18;;;4977:31;5044:34;5024:18;;;5017:62;5115:34;5095:18;;;5088:62;5187:34;5166:19;;;5159:63;-1:-1:-1;;;5238:19:1;;;5231:42;5290:19;;22385:162:0;4763:552:1;10862:148:0;10777:6;;-1:-1:-1;;;;;10777:6:0;10787:10;10777:20;10769:65;;;;-1:-1:-1;;;10769:65:0;;;;;;;:::i;:::-;10953:6:::1;::::0;10932:40:::1;::::0;10969:1:::1;::::0;-1:-1:-1;;;;;10953:6:0::1;::::0;10932:40:::1;::::0;10969:1;;10932:40:::1;10983:6;:19:::0;;-1:-1:-1;;;;;;10983:19:0::1;::::0;;10862:148::o;18931:131::-;18997:7;19024:30;19047:6;19024:22;:30::i;1886:104::-;1942:13;1975:7;1968:14;;;;;:::i;3684:507::-;1238:10;3804:4;3892:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;3892:27:0;;;;;;;;;;3804:4;;1238:10;3952:35;;;;3930:122;;;;-1:-1:-1;;;3930:122:0;;5522:2:1;3930:122:0;;;5504:21:1;5561:2;5541:18;;;5534:30;5600:34;5580:18;;;5573:62;-1:-1:-1;;;5651:18:1;;;5644:35;5696:19;;3930:122:0;5320:401:1;3930:122:0;4088:60;4097:5;4104:7;4132:15;4113:16;:34;4088:8;:60::i;19070:216::-;-1:-1:-1;;;;;19251:26:0;;19184:7;19251:26;;;:18;:26;;;;;;19216:62;;:30;19270:6;19216:22;:30::i;:::-;:34;;:62::i;2400:234::-;2515:4;1238:10;2576:28;1238:10;2593:2;2597:6;2576:9;:28::i;23753:710::-;10777:6;;-1:-1:-1;;;;;10777:6:0;10787:10;10777:20;10769:65;;;;-1:-1:-1;;;10769:65:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23875:30:0;::::1;;::::0;;;:21:::1;:30;::::0;;;;;::::1;;23922:7;23871:69;23970:31;23956:10;:45;23952:504;;24018:32;24030:7;24039:10;24018:11;:32::i;:::-;-1:-1:-1::0;;;;;24071:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;;::::1;;:33;;::::0;;24067:153:::1;;-1:-1:-1::0;;;;;24125:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;:31;;-1:-1:-1;;24125:31:0::1;24152:4;24125:31;::::0;;24175:29:::1;:17;9945:19:::0;;9963:1;9945:19;;;9856:127;24175:29:::1;23753:710:::0;;:::o;23952:504::-:1;24252:23;24264:7;24273:1;24252:11;:23::i;:::-;-1:-1:-1::0;;;;;24296:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;;::::1;;:32;;:24:::0;:32;24292:153:::1;;-1:-1:-1::0;;;;;24349:24:0;::::1;24376:5;24349:24:::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;24349:32:0::1;::::0;;24400:29:::1;:17;:27;:29::i;20884:289::-:0;20970:30;21002:27;21072:32;21095:8;21072:22;:32::i;:::-;-1:-1:-1;;;;;21137:28:0;;;;;;;:18;:28;;;;;;21047:57;;20884:289;-1:-1:-1;;20884:289:0:o;8595:98::-;8653:7;8680:5;8684:1;8680;:5;:::i;:::-;8673:12;8595:98;-1:-1:-1;;;8595:98:0:o;8383:::-;8441:7;8468:5;8472:1;8468;:5;:::i;21938:185::-;22051:64;;-1:-1:-1;;;22051:64:0;;6101:2:1;22051:64:0;;;6083:21:1;6140:2;6120:18;;;6113:30;6179:34;6159:18;;;6152:62;-1:-1:-1;;;6230:18:1;;;6223:44;6284:19;;22051:64:0;5899:410:1;22051:64:0;21938:185;;;:::o;20425:451::-;-1:-1:-1;;;;;2366:18:0;;20503:22;2366:18;;;;;;;;;;;20563:27;;;20559:310;;;20607:18;20628:30;:10;20643:14;20628;:30::i;:::-;20607:51;;20673:26;20679:7;20688:10;20673:5;:26::i;:::-;20592:119;21938:185;;;:::o;20559:310::-;20734:14;20721:10;:27;20717:152;;;20765:18;20786:30;:14;20805:10;20786:18;:30::i;:::-;20765:51;;20831:26;20837:7;20846:10;20831:5;:26::i;6309:502::-;-1:-1:-1;;;;;2808:18:0;;;6444:24;2808:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;6511:37:0;;6507:297;;6611:6;6591:16;:26;;6565:117;;;;-1:-1:-1;;;6565:117:0;;6516:2:1;6565:117:0;;;6498:21:1;6555:2;6535:18;;;6528:30;6594:31;6574:18;;;6567:59;6643:18;;6565:117:0;6314:353:1;6565:117:0;6726:51;6735:5;6742:7;6770:6;6751:16;:25;6726:8;:51::i;22131:186::-;22245:64;;-1:-1:-1;;;22245:64:0;;6874:2:1;22245:64:0;;;6856:21:1;6913:2;6893:18;;;6886:30;6952:34;6932:18;;;6925:62;-1:-1:-1;;;7003:18:1;;;6996:44;7057:19;;22245:64:0;6672:410:1;15699:238:0;15755:6;-1:-1:-1;;;;;15796:5:0;:34;;15774:124;;;;-1:-1:-1;;;15774:124:0;;7289:2:1;15774:124:0;;;7271:21:1;7328:2;7308:18;;;7301:30;7367:34;7347:18;;;7340:62;-1:-1:-1;;;7418:18:1;;;7411:38;7466:19;;15774:124:0;7087:404:1;15774:124:0;-1:-1:-1;15923:5:0;15699:238::o;12454:95::-;12510:6;12536:5;12540:1;12536;:5;:::i;14230:171::-;14286:7;14323:1;14314:5;:10;;14306:55;;;;-1:-1:-1;;;14306:55:0;;7968:2:1;14306:55:0;;;7950:21:1;;;7987:18;;;7980:30;8046:34;8026:18;;;8019:62;8098:18;;14306:55:0;7766:356:1;9991:235:0;10071:14;;10104:9;10096:49;;;;-1:-1:-1;;;10096:49:0;;8329:2:1;10096:49:0;;;8311:21:1;8368:2;8348:18;;;8341:30;8407:29;8387:18;;;8380:57;8454:18;;10096:49:0;8127:351:1;10096:49:0;-1:-1:-1;;10198:9:0;10181:26;;9991:235::o;18120:803::-;18231:7;18256:29;18288:28;18311:4;18288:22;:28::i;:::-;18256:60;-1:-1:-1;18331:25:0;;18327:568;;-1:-1:-1;;;;;18400:24:0;;;;;;:18;:24;;;;;;:83;;18447:21;18400:28;:83::i;:::-;-1:-1:-1;;;;;18373:24:0;;;;;;:18;:24;;;;;;;:110;;;;18503:50;;;;;;18527:21;;18550:2;;8665:25:1;;;-1:-1:-1;;;;;8726:32:1;8721:2;8706:18;;8699:60;8653:2;8638:18;;8483:282;18503:50:0;;;;;;;;18569:12;18587:2;-1:-1:-1;;;;;18587:7:0;18602:21;18587:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18568:60;;;18650:7;18645:194;;-1:-1:-1;;;;;18705:24:0;;;;;;:18;:24;;;;;;:91;;18756:21;18705:28;:91::i;:::-;-1:-1:-1;;;;;18678:24:0;;;;;;:18;:24;;;;;:118;;;;:24;-1:-1:-1;18815:8:0;;-1:-1:-1;;18815:8:0;18645:194;-1:-1:-1;18862:21:0;-1:-1:-1;18855:28:0;;18327:568;-1:-1:-1;18914:1:0;;18120:803;-1:-1:-1;;;18120:803:0:o;8489:98::-;8547:7;8574:5;8578:1;8574;:5;:::i;19851:280::-;19927:27;19939:7;19948:5;19927:11;:27::i;:::-;20007:116;20073:49;20074:36;20104:5;20074:25;;:29;;:36;;;;:::i;20073:49::-;-1:-1:-1;;;;;20007:61:0;;;;;;:28;:61;;;;;;;:65;:116::i;:::-;-1:-1:-1;;;;;19967:37:0;;;;;;;:28;:37;;;;;:156;;;;-1:-1:-1;19851:280:0:o;20139:278::-;20215:27;20227:7;20236:5;20215:11;:27::i;:::-;20293:116;20359:49;20360:36;20390:5;20360:25;;:29;;:36;;;;:::i;20359:49::-;-1:-1:-1;;;;;20293:61:0;;;;;;:28;:61;;;;;;;:65;:116::i;4915:399::-;-1:-1:-1;;;;;4999:21:0;;4991:65;;;;-1:-1:-1;;;4991:65:0;;9312:2:1;4991:65:0;;;9294:21:1;9351:2;9331:18;;;9324:30;9390:33;9370:18;;;9363:61;9441:18;;4991:65:0;9110:355:1;4991:65:0;5147:6;5131:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;5164:18:0;;:9;:18;;;;;;;;;;:28;;5186:6;;5164:9;:28;;5186:6;;5164:28;:::i;:::-;;;;-1:-1:-1;;5208:37:0;;1410:25:1;;;-1:-1:-1;;;;;5208:37:0;;;5225:1;;5208:37;;1398:2:1;1383:18;5208:37:0;;;;;;;23753:710;;:::o;12351:95::-;12407:6;12433:5;12437:1;12433;:5;:::i;5322:591::-;-1:-1:-1;;;;;5406:21:0;;5398:67;;;;-1:-1:-1;;;5398:67:0;;9944:2:1;5398:67:0;;;9926:21:1;9983:2;9963:18;;;9956:30;10022:34;10002:18;;;9995:62;-1:-1:-1;;;10073:18:1;;;10066:31;10114:19;;5398:67:0;9742:397:1;5398:67:0;-1:-1:-1;;;;;5565:18:0;;5540:22;5565:18;;;;;;;;;;;5602:24;;;;5594:71;;;;-1:-1:-1;;;5594:71:0;;10346:2:1;5594:71:0;;;10328:21:1;10385:2;10365:18;;;10358:30;10424:34;10404:18;;;10397:62;-1:-1:-1;;;10475:18:1;;;10468:32;10517:19;;5594:71:0;10144:398:1;5594:71:0;-1:-1:-1;;;;;5701:18:0;;:9;:18;;;;;;;;;;5722:23;;;5701:44;;5767:12;:22;;5739:6;;5701:9;5767:22;;5739:6;;5767:22;:::i;:::-;;;;-1:-1:-1;;5807:37:0;;1410:25:1;;;5833:1:0;;-1:-1:-1;;;;;5807:37:0;;;;;1398:2:1;1383:18;5807:37:0;;;;;;;21938:185;;;:::o;14:597:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:1;574:15;-1:-1:-1;;570:29:1;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:1:o;616:131::-;-1:-1:-1;;;;;691:31:1;;681:42;;671:70;;737:1;734;727:12;671:70;616:131;:::o;752:315::-;820:6;828;881:2;869:9;860:7;856:23;852:32;849:52;;;897:1;894;887:12;849:52;936:9;923:23;955:31;980:5;955:31;:::i;:::-;1005:5;1057:2;1042:18;;;;1029:32;;-1:-1:-1;;;752:315:1:o;1446:456::-;1523:6;1531;1539;1592:2;1580:9;1571:7;1567:23;1563:32;1560:52;;;1608:1;1605;1598:12;1560:52;1647:9;1634:23;1666:31;1691:5;1666:31;:::i;:::-;1716:5;-1:-1:-1;1773:2:1;1758:18;;1745:32;1786:33;1745:32;1786:33;:::i;:::-;1446:456;;1838:7;;-1:-1:-1;;;1892:2:1;1877:18;;;;1864:32;;1446:456::o;1907:247::-;1966:6;2019:2;2007:9;1998:7;1994:23;1990:32;1987:52;;;2035:1;2032;2025:12;1987:52;2074:9;2061:23;2093:31;2118:5;2093:31;:::i;2348:388::-;2416:6;2424;2477:2;2465:9;2456:7;2452:23;2448:32;2445:52;;;2493:1;2490;2483:12;2445:52;2532:9;2519:23;2551:31;2576:5;2551:31;:::i;:::-;2601:5;-1:-1:-1;2658:2:1;2643:18;;2630:32;2671:33;2630:32;2671:33;:::i;:::-;2723:7;2713:17;;;2348:388;;;;;:::o;3530:127::-;3591:10;3586:3;3582:20;3579:1;3572:31;3622:4;3619:1;3612:15;3646:4;3643:1;3636:15;3662:217;3702:1;3728;3718:132;;3772:10;3767:3;3763:20;3760:1;3753:31;3807:4;3804:1;3797:15;3835:4;3832:1;3825:15;3718:132;-1:-1:-1;3864:9:1;;3662:217::o;3884:380::-;3963:1;3959:12;;;;4006;;;4027:61;;4081:4;4073:6;4069:17;4059:27;;4027:61;4134:2;4126:6;4123:14;4103:18;4100:38;4097:161;;4180:10;4175:3;4171:20;4168:1;4161:31;4215:4;4212:1;4205:15;4243:4;4240:1;4233:15;4097:161;;3884:380;;;:::o;4269:356::-;4471:2;4453:21;;;4490:18;;;4483:30;4549:34;4544:2;4529:18;;4522:62;4616:2;4601:18;;4269:356::o;4630:128::-;4670:3;4701:1;4697:6;4694:1;4691:13;4688:39;;;4707:18;;:::i;:::-;-1:-1:-1;4743:9:1;;4630:128::o;5726:168::-;5766:7;5832:1;5828;5824:6;5820:14;5817:1;5814:21;5809:1;5802:9;5795:17;5791:45;5788:71;;;5839:18;;:::i;:::-;-1:-1:-1;5879:9:1;;5726:168::o;7496:265::-;7535:3;7563:9;;;7588:10;;-1:-1:-1;;;;;7607:27:1;;;7600:35;;7584:52;7581:78;;;7639:18;;:::i;:::-;-1:-1:-1;;;7686:19:1;;;7679:27;;7671:36;;7668:62;;;7710:18;;:::i;:::-;-1:-1:-1;;7746:9:1;;7496:265::o;8980:125::-;9020:4;9048:1;9045;9042:8;9039:34;;;9053:18;;:::i;:::-;-1:-1:-1;9090:9:1;;8980:125::o;9470:267::-;9509:4;9538:9;;;9563:10;;-1:-1:-1;;;9582:19:1;;9575:27;;9559:44;9556:70;;;9606:18;;:::i;:::-;-1:-1:-1;;;;;9653:27:1;;9646:35;;9638:44;;9635:70;;;9685:18;;:::i;:::-;-1:-1:-1;;9722:9:1;;9470:267::o
Swarm Source
ipfs://a1a3e832f086de6cb61f3b31813c5ae482d8dd06bf6b057ed57fae724de6effc
Loading...
Loading
Loading...
Loading
Net Worth in USD
$37,910.91
Net Worth in ETH
17.930157
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,114.7 | 17.9273 | $37,910.91 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.