Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 43 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Remove Limits | 23025781 | 108 days ago | IN | 0 ETH | 0.00024965 | ||||
| Approve | 23025564 | 108 days ago | IN | 0 ETH | 0.00056492 | ||||
| Approve | 23025555 | 108 days ago | IN | 0 ETH | 0.00045687 | ||||
| Approve | 23025554 | 108 days ago | IN | 0 ETH | 0.00043713 | ||||
| Approve | 23025554 | 108 days ago | IN | 0 ETH | 0.00043713 | ||||
| Approve | 23025554 | 108 days ago | IN | 0 ETH | 0.00053018 | ||||
| Approve | 23025554 | 108 days ago | IN | 0 ETH | 0.00053018 | ||||
| Approve | 23025554 | 108 days ago | IN | 0 ETH | 0.00053018 | ||||
| Approve | 23025553 | 108 days ago | IN | 0 ETH | 0.00040408 | ||||
| Approve | 23025553 | 108 days ago | IN | 0 ETH | 0.00040408 | ||||
| Approve | 23025553 | 108 days ago | IN | 0 ETH | 0.00040408 | ||||
| Approve | 23025553 | 108 days ago | IN | 0 ETH | 0.00040408 | ||||
| Approve | 23025553 | 108 days ago | IN | 0 ETH | 0.00049713 | ||||
| Approve | 23025553 | 108 days ago | IN | 0 ETH | 0.00049713 | ||||
| Approve | 23025553 | 108 days ago | IN | 0 ETH | 0.00049713 | ||||
| Approve | 23025553 | 108 days ago | IN | 0 ETH | 0.00049713 | ||||
| Approve | 23025553 | 108 days ago | IN | 0 ETH | 0.00049713 | ||||
| Approve | 23025553 | 108 days ago | IN | 0 ETH | 0.00049713 | ||||
| Approve | 23025553 | 108 days ago | IN | 0 ETH | 0.00049713 | ||||
| Approve | 23025553 | 108 days ago | IN | 0 ETH | 0.00049713 | ||||
| Approve | 23025553 | 108 days ago | IN | 0 ETH | 0.00049713 | ||||
| Approve | 23025553 | 108 days ago | IN | 0 ETH | 0.00040408 | ||||
| Approve | 23025553 | 108 days ago | IN | 0 ETH | 0.00040408 | ||||
| Approve | 23025553 | 108 days ago | IN | 0 ETH | 0.00040408 | ||||
| Approve | 23025553 | 108 days ago | IN | 0 ETH | 0.00040408 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 23025603 | 108 days ago | 0.003889 ETH | ||||
| Transfer | 23025603 | 108 days ago | 0.0023334 ETH | ||||
| Deposit | 23025603 | 108 days ago | 0.0015556 ETH | ||||
| Transfer | 23025603 | 108 days ago | 0.00933361 ETH | ||||
| Transfer | 23025582 | 108 days ago | 0.00399307 ETH | ||||
| Transfer | 23025582 | 108 days ago | 0.00239584 ETH | ||||
| Deposit | 23025582 | 108 days ago | 0.00159723 ETH | ||||
| Transfer | 23025582 | 108 days ago | 0.00958338 ETH | ||||
| Transfer | 23025567 | 108 days ago | 0.00420599 ETH | ||||
| Transfer | 23025567 | 108 days ago | 0.00252359 ETH | ||||
| Deposit | 23025567 | 108 days ago | 0.00168239 ETH | ||||
| Transfer | 23025567 | 108 days ago | 0.01009437 ETH | ||||
| Transfer | 23025566 | 108 days ago | 0.00443641 ETH | ||||
| Transfer | 23025566 | 108 days ago | 0.00266184 ETH | ||||
| Deposit | 23025566 | 108 days ago | 0.00177456 ETH | ||||
| Transfer | 23025566 | 108 days ago | 0.01064738 ETH | ||||
| Transfer | 23025563 | 108 days ago | 0.0046863 ETH | ||||
| Transfer | 23025563 | 108 days ago | 0.00281178 ETH | ||||
| Deposit | 23025563 | 108 days ago | 0.00187452 ETH | ||||
| Transfer | 23025563 | 108 days ago | 0.01124713 ETH | ||||
| Transfer | 23025562 | 108 days ago | 0.0046208 ETH | ||||
| Transfer | 23025562 | 108 days ago | 0.00277248 ETH | ||||
| Deposit | 23025562 | 108 days ago | 0.00184832 ETH | ||||
| Transfer | 23025562 | 108 days ago | 0.01108992 ETH | ||||
| Transfer | 23025562 | 108 days ago | 0.00482157 ETH |
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
STRATR
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
// Auto-rewards in ETH Strategy($STRAT)
// https://t.me/ETHStrategyReward
pragma solidity ^0.8.26;
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
return c;
}
}
/**
* ERC20 standard interface.
*/
interface IWETH {
function deposit() external payable;
function withdraw(uint256 wad) external;
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function decimals() external view returns (uint8);
function symbol() external view returns (string memory);
function name() external view returns (string memory);
function getOwner() external view returns (address);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, 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 sender,
address recipient,
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
);
}
abstract contract Auth {
address internal owner;
mapping(address => bool) internal authorizations;
constructor(address _owner) {
owner = _owner;
authorizations[_owner] = true;
}
modifier onlyOwner() {
require(isOwner(msg.sender), "!OWNER");
_;
}
modifier authorized() {
require(isAuthorized(msg.sender), "!AUTHORIZED");
_;
}
function authorize(address adr) public onlyOwner {
authorizations[adr] = true;
}
function unauthorize(address adr) public onlyOwner {
authorizations[adr] = false;
}
function isOwner(address account) public view returns (bool) {
return account == owner;
}
function isAuthorized(address adr) public view returns (bool) {
return authorizations[adr];
}
function renounceOwnership() public virtual onlyOwner {
emit OwnershipTransferred(address(0));
owner = address(0);
}
function transferOwnership(address payable adr) public onlyOwner {
owner = adr;
authorizations[adr] = true;
emit OwnershipTransferred(adr);
}
event OwnershipTransferred(address owner);
}
interface IDEXFactory {
function createPair(address tokenA, address tokenB)
external
returns (address pair);
}
interface IMainToken {
function distributor() external view returns (address);
}
interface IDEXRouter {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
)
external
returns (
uint256 amountA,
uint256 amountB,
uint256 liquidity
);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
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 swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
interface IDividendDistributor {
function setDistributionCriteria(
uint256 _minPeriod,
uint256 _minDistribution
) external;
function setShare(address shareholder, uint256 amount) external;
function deposit() external payable;
function process(uint256 gas) external;
}
contract DividendDistributor is IDividendDistributor {
using SafeMath for uint256;
address _token;
struct Share {
uint256 amount;
uint256 totalExcluded;
uint256 totalRealised;
}
IERC20 RWRD = IERC20(0x14cF922aa1512Adfc34409b63e18D391e4a86A2f); // reward token
address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
IDEXRouter router;
address[] shareholders;
mapping(address => uint256) shareholderIndexes;
mapping(address => uint256) shareholderClaims;
mapping(address => Share) public shares;
uint256 public totalShares;
uint256 public totalDividends;
uint256 public totalDistributed;
uint256 public dividendsPerShare;
uint256 public dividendsPerShareAccuracyFactor = 10**36;
uint256 public minPeriod = 20 * 60;
uint256 public minDistribution = 1 * (10**14);
uint256 currentIndex;
bool initialized;
modifier initialization() {
require(!initialized);
_;
initialized = true;
}
modifier onlyToken() {
require(msg.sender == _token);
_;
}
constructor(address _router) {
router = _router != address(0)
? IDEXRouter(_router)
: IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
_token = msg.sender;
}
function setDistributionCriteria(
uint256 _minPeriod,
uint256 _minDistribution
) external override onlyToken {
minPeriod = _minPeriod;
minDistribution = _minDistribution;
}
function setShare(address shareholder, uint256 amount)
external
override
onlyToken
{
if (shares[shareholder].amount > 0) {
distributeDividend(shareholder);
}
if (amount > 0 && shares[shareholder].amount == 0) {
addShareholder(shareholder);
} else if (amount == 0 && shares[shareholder].amount > 0) {
removeShareholder(shareholder);
}
totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
shares[shareholder].amount = amount;
shares[shareholder].totalExcluded = getCumulativeDividends(
shares[shareholder].amount
);
}
function deposit() external payable override onlyToken {
totalDividends = totalDividends.add(msg.value);
dividendsPerShare = dividendsPerShare.add(
dividendsPerShareAccuracyFactor.mul(msg.value).div(totalShares)
);
}
function process(uint256 gas) external override onlyToken {
uint256 shareholderCount = shareholders.length;
if (shareholderCount == 0) {
return;
}
uint256 gasUsed = 0;
uint256 gasLeft = gasleft();
uint256 iterations = 0;
while (gasUsed < gas && iterations < shareholderCount) {
if (currentIndex >= shareholderCount) {
currentIndex = 0;
}
if (shouldDistribute(shareholders[currentIndex])) {
distributeDividend(shareholders[currentIndex]);
}
gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
gasLeft = gasleft();
currentIndex++;
iterations++;
}
}
function shouldDistribute(address shareholder)
internal
view
returns (bool)
{
return
shareholderClaims[shareholder] + minPeriod < block.timestamp &&
getUnpaidEarnings(shareholder) > minDistribution;
}
function distributeDividend(address shareholder) internal {
if (shares[shareholder].amount == 0) {
return;
}
uint256 amount = getUnpaidEarnings(shareholder);
if (amount > 0) {
totalDistributed = totalDistributed.add(amount);
//RWRD.transfer(shareholder, amount);
(bool success, ) = payable(shareholder).call{value: amount}("");
require(success, "ETH transfer failed");
shareholderClaims[shareholder] = block.timestamp;
shares[shareholder].totalRealised = shares[shareholder]
.totalRealised
.add(amount);
shares[shareholder].totalExcluded = getCumulativeDividends(
shares[shareholder].amount
);
}
}
function claimDividend() external {
distributeDividend(msg.sender);
}
function getUnpaidEarnings(address shareholder)
public
view
returns (uint256)
{
if (shares[shareholder].amount == 0) {
return 0;
}
uint256 shareholderTotalDividends = getCumulativeDividends(
shares[shareholder].amount
);
uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
if (shareholderTotalDividends <= shareholderTotalExcluded) {
return 0;
}
return shareholderTotalDividends.sub(shareholderTotalExcluded);
}
function getCumulativeDividends(uint256 share)
internal
view
returns (uint256)
{
return
share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
}
function addShareholder(address shareholder) internal {
shareholderIndexes[shareholder] = shareholders.length;
shareholders.push(shareholder);
}
function removeShareholder(address shareholder) internal {
shareholders[shareholderIndexes[shareholder]] = shareholders[
shareholders.length - 1
];
shareholderIndexes[
shareholders[shareholders.length - 1]
] = shareholderIndexes[shareholder];
shareholders.pop();
}
}
contract STRATR is IERC20, Auth {
using SafeMath for uint256;
address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
address DEAD = 0x000000000000000000000000000000000000dEaD;
address ZERO = 0x0000000000000000000000000000000000000000;
string constant _name = "ETH Strategy Reward";
string constant _symbol = "STRATR";
uint8 constant _decimals = 9;
uint256 _totalSupply = 1 * 10**9 * 10**_decimals;
uint256 public _maxTxAmount = (_totalSupply * 2) / 100;
uint256 public _maxWalletToken = (_totalSupply * 2) / 100;
mapping(address => uint256) _balances;
mapping(address => mapping(address => uint256)) _allowances;
mapping(address => bool) isFeeExempt;
mapping(address => bool) isTxLimitExempt;
mapping(address => bool) isTimelockExempt;
mapping(address => bool) isDividendExempt;
uint256 public liquidityFee = 0;
uint256 public reflectionFee = 3;
uint256 public marketingFee = 2;
uint256 public devFee = 18;
uint256 public totalFee = marketingFee + reflectionFee + liquidityFee + devFee;
uint256 public feeDenominator = 100;
uint256 public sellMultiplier = 200;
address public autoLiquidityReceiver;
address public marketingFeeReceiver;
address public devFeeReceiver;
uint256 targetLiquidity = 20;
uint256 targetLiquidityDenominator = 100;
IDEXRouter public router;
address public pair;
bool public tradingOpen = false;
DividendDistributor public distributor;
uint256 distributorGas = 3000000;
bool public buyCooldownEnabled = false;
uint8 public cooldownTimerInterval = 20;
mapping(address => uint256) private cooldownTimer;
bool public swapEnabled = true;
uint256 public swapThreshold = (_totalSupply * 50) / 10000;
bool inSwap;
modifier swapping() {
inSwap = true;
_;
inSwap = false;
}
constructor() Auth(msg.sender) {
router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
_allowances[address(this)][address(router)] = type(uint256).max;
distributor = new DividendDistributor(address(router));
isFeeExempt[msg.sender] = true;
isTxLimitExempt[msg.sender] = true;
isTimelockExempt[msg.sender] = true;
isTimelockExempt[DEAD] = true;
isTimelockExempt[address(this)] = true;
isDividendExempt[pair] = true;
isDividendExempt[address(this)] = true;
isDividendExempt[DEAD] = true;
autoLiquidityReceiver = msg.sender;
marketingFeeReceiver = msg.sender;
devFeeReceiver = msg.sender;
_balances[msg.sender] = _totalSupply;
authorizations[address(router)] = true;
approve(address(router), type(uint256).max);
emit Transfer(address(0), msg.sender, _totalSupply);
}
receive() external payable {}
function totalSupply() external view override returns (uint256) {
return _totalSupply;
}
function decimals() external pure override returns (uint8) {
return _decimals;
}
function symbol() external pure override returns (string memory) {
return _symbol;
}
function name() external pure override returns (string memory) {
return _name;
}
function getOwner() external view override returns (address) {
return owner;
}
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
function allowance(address holder, address spender)
external
view
override
returns (uint256)
{
return _allowances[holder][spender];
}
function approve(address spender, uint256 amount)
public
override
returns (bool)
{
_allowances[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function approveMax(address spender) external returns (bool) {
return approve(spender, type(uint256).max);
}
function transfer(address recipient, uint256 amount)
external
override
returns (bool)
{
return _transferFrom(msg.sender, recipient, amount);
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) external override returns (bool) {
if (_allowances[sender][msg.sender] != type(uint256).max) {
_allowances[sender][msg.sender] = _allowances[sender][msg.sender]
.sub(amount, "Insufficient Allowance");
}
return _transferFrom(sender, recipient, amount);
}
function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000)
external
onlyOwner
{
_maxWalletToken = (_totalSupply * maxWallPercent_base1000) / 1000;
}
function setMaxTxPercent_base1000(uint256 maxTXPercentage_base1000)
external
onlyOwner
{
_maxTxAmount = (_totalSupply * maxTXPercentage_base1000) / 1000;
}
function removeLimits() external authorized {
_maxTxAmount = _totalSupply;
_maxWalletToken = _totalSupply;
}
function _transferFrom(
address sender,
address recipient,
uint256 amount
) internal returns (bool) {
if (inSwap) {
return _basicTransfer(sender, recipient, amount);
}
if (!authorizations[sender] && !authorizations[recipient]) {
require(tradingOpen, "Trading not open yet");
}
if (
!authorizations[sender] &&
recipient != address(this) &&
recipient != address(DEAD) &&
recipient != pair &&
recipient != marketingFeeReceiver &&
recipient != devFeeReceiver &&
recipient != autoLiquidityReceiver
) {
uint256 heldTokens = balanceOf(recipient);
require(
(heldTokens + amount) <= _maxWalletToken,
"Total Holding is currently limited, you can not buy that much."
);
}
if (
sender == pair && buyCooldownEnabled && !isTimelockExempt[recipient]
) {
require(
cooldownTimer[recipient] < block.timestamp,
"Please wait for 1min between two buys"
);
cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
}
// Checks max transaction limit
checkTxLimit(sender, amount);
if (shouldSwapBack()) {
swapBack();
}
//Exchange tokens
_balances[sender] = _balances[sender].sub(
amount,
"Insufficient Balance"
);
uint256 amountReceived = shouldTakeFee(sender)
? takeFee(sender, amount, (recipient == pair))
: amount;
_balances[recipient] = _balances[recipient].add(amountReceived);
// Dividend tracker
if (!isDividendExempt[sender]) {
try distributor.setShare(sender, _balances[sender]) {} catch {}
}
if (!isDividendExempt[recipient]) {
try
distributor.setShare(recipient, _balances[recipient])
{} catch {}
}
try distributor.process(distributorGas) {} catch {}
emit Transfer(sender, recipient, amountReceived);
return true;
}
function _basicTransfer(
address sender,
address recipient,
uint256 amount
) internal returns (bool) {
_balances[sender] = _balances[sender].sub(
amount,
"Insufficient Balance"
);
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
return true;
}
function checkTxLimit(address sender, uint256 amount) internal view {
require(
amount <= _maxTxAmount || isTxLimitExempt[sender],
"TX Limit Exceeded"
);
}
function shouldTakeFee(address sender) internal view returns (bool) {
return !isFeeExempt[sender];
}
function takeFee(
address sender,
uint256 amount,
bool isSell
) internal returns (uint256) {
uint256 multiplier = isSell ? sellMultiplier : 100;
uint256 feeAmount = amount.mul(totalFee).mul(multiplier).div(
feeDenominator * 100
);
_balances[address(this)] = _balances[address(this)].add(feeAmount);
emit Transfer(sender, address(this), feeAmount);
return amount.sub(feeAmount);
}
function shouldSwapBack() internal view returns (bool) {
return
msg.sender != pair &&
!inSwap &&
swapEnabled &&
_balances[address(this)] >= swapThreshold;
}
function clearStuckBalance(uint256 amountPercentage) external authorized {
uint256 amountBNB = address(this).balance;
payable(marketingFeeReceiver).transfer(
(amountBNB * amountPercentage) / 100
);
}
function clearStuckBalance_sender(uint256 amountPercentage)
external
authorized
{
uint256 amountBNB = address(this).balance;
payable(msg.sender).transfer((amountBNB * amountPercentage) / 100);
}
function set_sell_multiplier(uint256 Multiplier) external onlyOwner {
sellMultiplier = Multiplier;
}
function openTrading() public onlyOwner {
tradingOpen = true;
}
function manualSend() external onlyOwner {
uint256 ethBalance = address(this).balance;
if (ethBalance > 0) {
address _owner = this.getOwner();
(bool success, ) = _owner.call{value: ethBalance}("");
require(success, "ETH transfer failed");
}
}
// enable cooldown between trades
function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner {
buyCooldownEnabled = _status;
cooldownTimerInterval = _interval;
}
function swapBack() internal swapping {
uint256 dynamicLiquidityFee = isOverLiquified(
targetLiquidity,
targetLiquidityDenominator
)
? 0
: liquidityFee;
uint256 amountToLiquify = swapThreshold
.mul(dynamicLiquidityFee)
.div(totalFee)
.div(2);
uint256 amountToSwap = swapThreshold.sub(amountToLiquify);
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = WETH;
uint256 balanceBefore = address(this).balance;
router.swapExactTokensForETHSupportingFeeOnTransferTokens(
amountToSwap,
0,
path,
address(this),
block.timestamp
);
uint256 amountBNB = address(this).balance.sub(balanceBefore);
uint256 totalBNBFee = totalFee.sub(dynamicLiquidityFee.div(2));
uint256 amountBNBLiquidity = amountBNB
.mul(dynamicLiquidityFee)
.div(totalBNBFee)
.div(2);
uint256 amountBNBReflection = amountBNB.mul(reflectionFee).div(
totalBNBFee
);
uint256 amountBNBMarketing = amountBNB.mul(marketingFee).div(
totalBNBFee
);
uint256 amountBNBDev = amountBNB.mul(devFee).div(totalBNBFee);
try distributor.deposit{value: amountBNBReflection}() {} catch {}
(bool tmpSuccess, ) = payable(marketingFeeReceiver).call{
value: amountBNBMarketing,
gas: 30000
}("");
(tmpSuccess, ) = payable(devFeeReceiver).call{
value: amountBNBDev,
gas: 30000
}("");
// Supress warning msg
tmpSuccess = false;
if (amountToLiquify > 0) {
router.addLiquidityETH{value: amountBNBLiquidity}(
address(this),
amountToLiquify,
0,
0,
autoLiquidityReceiver,
block.timestamp
);
emit AutoLiquify(amountBNBLiquidity, amountToLiquify);
}
}
function setIsDividendExempt(address holder, bool exempt)
external
authorized
{
require(holder != address(this) && holder != pair);
isDividendExempt[holder] = exempt;
if (exempt) {
distributor.setShare(holder, 0);
} else {
distributor.setShare(holder, _balances[holder]);
}
}
function setIsFeeExempt(address holder, bool exempt) external authorized {
isFeeExempt[holder] = exempt;
}
function setIsTxLimitExempt(address holder, bool exempt)
external
authorized
{
isTxLimitExempt[holder] = exempt;
}
function setIsTimelockExempt(address holder, bool exempt)
external
authorized
{
isTimelockExempt[holder] = exempt;
}
function setFees(
uint256 _liquidityFee,
uint256 _reflectionFee,
uint256 _marketingFee,
uint256 _devFee,
uint256 _feeDenominator
) external authorized {
liquidityFee = _liquidityFee;
reflectionFee = _reflectionFee;
marketingFee = _marketingFee;
devFee = _devFee;
totalFee = _liquidityFee.add(_reflectionFee).add(_marketingFee).add(
_devFee
);
feeDenominator = _feeDenominator;
require(totalFee < feeDenominator / 3, "Fees cannot be more than 33%");
}
function setFeeReceivers(
address _autoLiquidityReceiver,
address _marketingFeeReceiver,
address _devFeeReceiver
) external authorized {
autoLiquidityReceiver = _autoLiquidityReceiver;
marketingFeeReceiver = _marketingFeeReceiver;
devFeeReceiver = _devFeeReceiver;
}
function setSwapBackSettings(bool _enabled, uint256 _amount)
external
authorized
{
swapEnabled = _enabled;
swapThreshold = _amount;
}
function setTargetLiquidity(uint256 _target, uint256 _denominator)
external
authorized
{
targetLiquidity = _target;
targetLiquidityDenominator = _denominator;
}
function setDistributionCriteria(
uint256 _minPeriod,
uint256 _minDistribution
) external authorized {
distributor.setDistributionCriteria(_minPeriod, _minDistribution);
}
function setDistributorSettings(uint256 gas) external authorized {
require(gas < 750000);
distributorGas = gas;
}
function getCirculatingSupply() public view returns (uint256) {
return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
}
function getLiquidityBacking(uint256 accuracy)
public
view
returns (uint256)
{
return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
}
function isOverLiquified(uint256 target, uint256 accuracy)
public
view
returns (bool)
{
return getLiquidityBacking(accuracy) > target;
}
/* Airdrop */
function multiTransfer(
address from,
address[] calldata addresses,
uint256[] calldata tokens
) external onlyOwner {
require(
addresses.length < 501,
"GAS Error: max airdrop limit is 500 addresses"
);
require(
addresses.length == tokens.length,
"Mismatch between Address and token count"
);
uint256 SCCC = 0;
for (uint256 i = 0; i < addresses.length; i++) {
SCCC = SCCC + tokens[i];
}
require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");
for (uint256 i = 0; i < addresses.length; i++) {
_basicTransfer(from, addresses[i], tokens[i]);
if (!isDividendExempt[addresses[i]]) {
try
distributor.setShare(addresses[i], _balances[addresses[i]])
{} catch {}
}
}
// Dividend tracker
if (!isDividendExempt[from]) {
try distributor.setShare(from, _balances[from]) {} catch {}
}
}
function multiTransfer_fixed(
address from,
address[] calldata addresses,
uint256 tokens
) external onlyOwner {
require(
addresses.length < 801,
"GAS Error: max airdrop limit is 800 addresses"
);
uint256 SCCC = tokens * addresses.length;
require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");
for (uint256 i = 0; i < addresses.length; i++) {
_basicTransfer(from, addresses[i], tokens);
if (!isDividendExempt[addresses[i]]) {
try
distributor.setShare(addresses[i], _balances[addresses[i]])
{} catch {}
}
}
// Dividend tracker
if (!isDividendExempt[from]) {
try distributor.setShare(from, _balances[from]) {} catch {}
}
}
event AutoLiquify(uint256 amountBNB, uint256 amountBOG);
}{
"optimizer": {
"enabled": true,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": []
}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":false,"internalType":"uint256","name":"amountBNB","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","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":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance_sender","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"multiTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"multiTransfer_fixed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_devFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_reflectionFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTXPercentage_base1000","type":"uint256"}],"name":"setMaxTxPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"Multiplier","type":"uint256"}],"name":"set_sell_multiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6080604052600280546001600160a01b031990811673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790915560038054821661dead17905560048054909116905561004e6009600a610595565b61005c90633b9aca006105aa565b6005556064600554600261007091906105aa565b61007a91906105c1565b6006556064600554600261008e91906105aa565b61009891906105c1565b6007555f600e556003600f5560026010556012601155601154600e54600f546010546100c491906105e0565b6100ce91906105e0565b6100d891906105e0565b6012556064601381905560c86014908155601855601955601b805460ff60a01b19169055622dc6c0601d55601e805461ffff19166114001790556020805460ff19166001179055600554612710906101319060326105aa565b61013b91906105c1565b602155348015610149575f5ffd5b505f8054336001600160a01b031991821681178355825260016020818152604093849020805460ff1916909217909155601a8054737a250d5630b4cf539739df2c5dacb4c659f2488d931683179055825163c45a015560e01b81529251919263c45a015592600480830193928290030181865afa1580156101cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101f091906105f3565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c65396906044016020604051808303815f875af115801561023e573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061026291906105f3565b601b80546001600160a01b0319166001600160a01b03928316179055305f908152600960209081526040808320601a8054861685529252918290205f1990555490519116906102b090610491565b6001600160a01b039091168152602001604051809103905ff0801580156102d9573d5f5f3e3d5ffd5b50601c80546001600160a01b039283166001600160a01b031991821617909155335f818152600a60209081526040808320805460ff199081166001908117909255600b84528285208054821683179055600c8452828520805482168317905560038054891686528386208054831684179055308087528487208054841685179055601b548a168752600d86528487208054841685179055865283862080548316841790555488168552828520805482168317905560158054881687179055601680548816871790556017805490971686179096556005549484526008835281842094909455601a805487168452918490529091208054909316909117909155546103e591165f19610425565b5060055460405190815233905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3610619565b335f8181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061047f9086815260200190565b60405180910390a35060015b92915050565b610d4a806135f783390190565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156104ed578085048111156104d1576104d161049e565b60018416156104df57908102905b60019390931c9280026104b6565b935093915050565b5f826105035750600161048b565b8161050f57505f61048b565b8160018114610525576002811461052f5761054b565b600191505061048b565b60ff8411156105405761054061049e565b50506001821b61048b565b5060208310610133831016604e8410600b841016171561056e575081810a61048b565b61057a5f1984846104b2565b805f190482111561058d5761058d61049e565b029392505050565b5f6105a360ff8416836104f5565b9392505050565b808202811582820484141761048b5761048b61049e565b5f826105db57634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561048b5761048b61049e565b5f60208284031215610603575f5ffd5b81516001600160a01b03811681146105a3575f5ffd5b612fd1806106265f395ff3fe608060405260043610610395575f3560e01c8063751039fc116101de578063d51ed1c811610108578063f2fde38b1161009d578063f887ea401161006d578063f887ea4014610a92578063fe9fbb8014610ab1578063fed0d2a114610ad0578063ffb54a9914610ae5575f5ffd5b8063f2fde38b14610a21578063f429389014610a40578063f708a64f14610a54578063f84ba65d14610a73575f5ffd5b8063df20fd49116100d8578063df20fd49146109a5578063e96fada2146109c4578063ec72d65f146109e3578063f0b37c0414610a02575f5ffd5b8063d51ed1c814610904578063d7c0103214610923578063dab84ee714610942578063dd62ed3e14610961575f5ffd5b80639d1944f51161017e578063bd9ab5371161014e578063bd9ab53714610893578063bfe10928146108b2578063c9567bf9146108d1578063ca33e64c146108e5575f5ffd5b80639d1944f514610817578063a8aa1b3114610836578063a9059cbb14610855578063b6a5d7de14610874575f5ffd5b806383ad7994116101b957806383ad79941461078f578063893d20e8146107a457806395d89b41146107d457806398118cb414610802575f5ffd5b8063751039fc1461075157806378109e54146107655780637d1db4a51461077a575f5ffd5b80632d594567116102bf578063617fe0ed1161025f5780636ddd17131161022f5780636ddd1713146106d257806370a08231146106eb578063715018a61461071f578063722b62ad14610733575f5ffd5b8063617fe0ed14610670578063658d4b7f146106895780636827e764146106a85780636b67c4df146106bd575f5ffd5b8063335f6a431161029a578063335f6a43146105f457806344a33fd21461061357806350db71fb14610632578063571ac8b014610651575f5ffd5b80632d594567146105875780632f54bf6e146105a6578063313ce567146105d3575f5ffd5b806318160ddd11610335578063201e799111610305578063201e79911461051657806323b872dd146105355780632b112e49146105545780632d48e89614610568575f5ffd5b806318160ddd146104af5780631ca0a28d146104c35780631da1db5e146104e25780631df4ccfc14610501575f5ffd5b806309302dc61161037057806309302dc61461042d578063095ea7b31461044c5780631161ae391461047b578063180b0d7e1461049a575f5ffd5b80630445b667146103a057806304a66b48146103c857806306fdde03146103e9575f5ffd5b3661039c57005b5f5ffd5b3480156103ab575f5ffd5b506103b560215481565b6040519081526020015b60405180910390f35b3480156103d3575f5ffd5b506103e76103e2366004612ab1565b610b05565b005b3480156103f4575f5ffd5b506040805180820190915260138152721155120814dd1c985d1959de4814995dd85c99606a1b60208201525b6040516103bf9190612ae8565b348015610438575f5ffd5b506103e7610447366004612b1d565b610bc7565b348015610457575f5ffd5b5061046b610466366004612b48565b610c11565b60405190151581526020016103bf565b348015610486575f5ffd5b5061046b610495366004612b72565b610c7d565b3480156104a5575f5ffd5b506103b560135481565b3480156104ba575f5ffd5b506005546103b5565b3480156104ce575f5ffd5b506103e76104dd366004612bda565b610c90565b3480156104ed575f5ffd5b506103e76104fc366004612b1d565b61103f565b34801561050c575f5ffd5b506103b560125481565b348015610521575f5ffd5b506103e7610530366004612b72565b6110b5565b348015610540575f5ffd5b5061046b61054f366004612c5c565b6110e5565b34801561055f575f5ffd5b506103b56111a3565b348015610573575f5ffd5b506103e7610582366004612b72565b6111f3565b348015610592575f5ffd5b506103e76105a1366004612cae565b611275565b3480156105b1575f5ffd5b5061046b6105c0366004612ce8565b5f546001600160a01b0391821691161490565b3480156105de575f5ffd5b5060095b60405160ff90911681526020016103bf565b3480156105ff575f5ffd5b506103e761060e366004612d03565b6112c5565b34801561061e575f5ffd5b506103e761062d366004612b1d565b6115d1565b34801561063d575f5ffd5b506103e761064c366004612d5b565b611607565b34801561065c575f5ffd5b5061046b61066b366004612ce8565b611656565b34801561067b575f5ffd5b50601e5461046b9060ff1681565b348015610694575f5ffd5b506103e76106a3366004612d5b565b611662565b3480156106b3575f5ffd5b506103b560115481565b3480156106c8575f5ffd5b506103b560105481565b3480156106dd575f5ffd5b5060205461046b9060ff1681565b3480156106f6575f5ffd5b506103b5610705366004612ce8565b6001600160a01b03165f9081526008602052604090205490565b34801561072a575f5ffd5b506103e76116b1565b34801561073e575f5ffd5b50601e546105e290610100900460ff1681565b34801561075c575f5ffd5b506103e761171e565b348015610770575f5ffd5b506103b560075481565b348015610785575f5ffd5b506103b560065481565b34801561079a575f5ffd5b506103b5600f5481565b3480156107af575f5ffd5b505f546001600160a01b03165b6040516001600160a01b0390911681526020016103bf565b3480156107df575f5ffd5b5060408051808201909152600681526529aa2920aa2960d11b6020820152610420565b34801561080d575f5ffd5b506103b5600e5481565b348015610822575f5ffd5b506103e7610831366004612b1d565b611750565b348015610841575f5ffd5b50601b546107bc906001600160a01b031681565b348015610860575f5ffd5b5061046b61086f366004612b48565b611788565b34801561087f575f5ffd5b506103e761088e366004612ce8565b611794565b34801561089e575f5ffd5b506103e76108ad366004612b1d565b6117e3565b3480156108bd575f5ffd5b50601c546107bc906001600160a01b031681565b3480156108dc575f5ffd5b506103e761182d565b3480156108f0575f5ffd5b506015546107bc906001600160a01b031681565b34801561090f575f5ffd5b506103b561091e366004612b1d565b61186b565b34801561092e575f5ffd5b506103e761093d366004612d8e565b6118b0565b34801561094d575f5ffd5b506017546107bc906001600160a01b031681565b34801561096c575f5ffd5b506103b561097b366004612dd6565b6001600160a01b039182165f90815260096020908152604080832093909416825291909152205490565b3480156109b0575f5ffd5b506103e76109bf366004612e02565b611914565b3480156109cf575f5ffd5b506016546107bc906001600160a01b031681565b3480156109ee575f5ffd5b506103e76109fd366004612b1d565b611950565b348015610a0d575f5ffd5b506103e7610a1c366004612ce8565b61197e565b348015610a2c575f5ffd5b506103e7610a3b366004612ce8565b6119c7565b348015610a4b575f5ffd5b506103e7611a5b565b348015610a5f575f5ffd5b506103e7610a6e366004612d5b565b611b86565b348015610a7e575f5ffd5b506103e7610a8d366004612d5b565b611c8a565b348015610a9d575f5ffd5b50601a546107bc906001600160a01b031681565b348015610abc575f5ffd5b5061046b610acb366004612ce8565b611cd9565b348015610adb575f5ffd5b506103b560145481565b348015610af0575f5ffd5b50601b5461046b90600160a01b900460ff1681565b610b0e33611cd9565b610b335760405162461bcd60e51b8152600401610b2a90612e1c565b60405180910390fd5b600e859055600f84905560108390556011829055610b5d82610b5785818989611cf6565b90611cf6565b6012556013819055610b70600382612e55565b60125410610bc05760405162461bcd60e51b815260206004820152601c60248201527f466565732063616e6e6f74206265206d6f7265207468616e20333325000000006044820152606401610b2a565b5050505050565b5f546001600160a01b03163314610bf05760405162461bcd60e51b8152600401610b2a90612e74565b6103e881600554610c019190612e94565b610c0b9190612e55565b60075550565b335f8181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c6b9086815260200190565b60405180910390a35060015b92915050565b5f82610c888361186b565b119392505050565b5f546001600160a01b03163314610cb95760405162461bcd60e51b8152600401610b2a90612e74565b6101f58310610d205760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610b2a565b828114610d805760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610b2a565b5f805b84811015610db957838382818110610d9d57610d9d612eab565b9050602002013582610daf9190612ebf565b9150600101610d83565b5080610dd9876001600160a01b03165f9081526008602052604090205490565b1015610e275760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b2a565b5f5b84811015610faa57610e7a87878784818110610e4757610e47612eab565b9050602002016020810190610e5c9190612ce8565b868685818110610e6e57610e6e612eab565b90506020020135611d54565b50600d5f878784818110610e9057610e90612eab565b9050602002016020810190610ea59190612ce8565b6001600160a01b0316815260208101919091526040015f205460ff16610fa257601c546001600160a01b03166314b6ca96878784818110610ee857610ee8612eab565b9050602002016020810190610efd9190612ce8565b60085f8a8a87818110610f1257610f12612eab565b9050602002016020810190610f279190612ce8565b6001600160a01b03166001600160a01b031681526020019081526020015f20546040518363ffffffff1660e01b8152600401610f789291906001600160a01b03929092168252602082015260400190565b5f604051808303815f87803b158015610f8f575f5ffd5b505af1925050508015610fa0575060015b505b600101610e29565b506001600160a01b0386165f908152600d602052604090205460ff1661103757601c546001600160a01b038781165f8181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b158015611024575f5ffd5b505af1925050508015611035575060015b505b505050505050565b61104833611cd9565b6110645760405162461bcd60e51b8152600401610b2a90612e1c565b60165447906001600160a01b03166108fc60646110818585612e94565b61108b9190612e55565b6040518115909202915f818181858888f193505050501580156110b0573d5f5f3e3d5ffd5b505050565b6110be33611cd9565b6110da5760405162461bcd60e51b8152600401610b2a90612e1c565b601891909155601955565b6001600160a01b0383165f9081526009602090815260408083203384529091528120545f191461118e576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f90815260098252838120338252909152919091205461116a918490611e37565b6001600160a01b0385165f9081526009602090815260408083203384529091529020555b611199848484611e6f565b90505b9392505050565b6004546001600160a01b03165f908152600860205260408120546111ee906003546001600160a01b03165f908152600860205260409020546111e8906005549061242b565b9061242b565b905090565b6111fc33611cd9565b6112185760405162461bcd60e51b8152600401610b2a90612e1c565b601c546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b5f604051808303815f87803b158015611263575f5ffd5b505af1158015611037573d5f5f3e3d5ffd5b5f546001600160a01b0316331461129e5760405162461bcd60e51b8152600401610b2a90612e74565b601e805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b5f546001600160a01b031633146112ee5760405162461bcd60e51b8152600401610b2a90612e74565b61032182106113555760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3830302061646472657373657360981b6064820152608401610b2a565b5f6113608383612e94565b905080611381866001600160a01b03165f9081526008602052604090205490565b10156113cf5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b2a565b5f5b8381101561153a5761140a868686848181106113ef576113ef612eab565b90506020020160208101906114049190612ce8565b85611d54565b50600d5f86868481811061142057611420612eab565b90506020020160208101906114359190612ce8565b6001600160a01b0316815260208101919091526040015f205460ff1661153257601c546001600160a01b03166314b6ca9686868481811061147857611478612eab565b905060200201602081019061148d9190612ce8565b60085f8989878181106114a2576114a2612eab565b90506020020160208101906114b79190612ce8565b6001600160a01b03166001600160a01b031681526020019081526020015f20546040518363ffffffff1660e01b81526004016115089291906001600160a01b03929092168252602082015260400190565b5f604051808303815f87803b15801561151f575f5ffd5b505af1925050508015611530575060015b505b6001016113d1565b506001600160a01b0385165f908152600d602052604090205460ff16610bc057601c546001600160a01b038681165f8181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b1580156115b4575f5ffd5b505af19250505080156115c5575060015b15610bc0575050505050565b6115da33611cd9565b6115f65760405162461bcd60e51b8152600401610b2a90612e1c565b47336108fc60646110818585612e94565b61161033611cd9565b61162c5760405162461bcd60e51b8152600401610b2a90612e1c565b6001600160a01b03919091165f908152600c60205260409020805460ff1916911515919091179055565b5f610c77825f19610c11565b61166b33611cd9565b6116875760405162461bcd60e51b8152600401610b2a90612e1c565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146116da5760405162461bcd60e51b8152600401610b2a90612e74565b6040515f81527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a15f80546001600160a01b0319169055565b61172733611cd9565b6117435760405162461bcd60e51b8152600401610b2a90612e1c565b6005546006819055600755565b61175933611cd9565b6117755760405162461bcd60e51b8152600401610b2a90612e1c565b620b71b08110611783575f5ffd5b601d55565b5f61119c338484611e6f565b5f546001600160a01b031633146117bd5760405162461bcd60e51b8152600401610b2a90612e74565b6001600160a01b03165f908152600160208190526040909120805460ff19169091179055565b5f546001600160a01b0316331461180c5760405162461bcd60e51b8152600401610b2a90612e74565b6103e88160055461181d9190612e94565b6118279190612e55565b60065550565b5f546001600160a01b031633146118565760405162461bcd60e51b8152600401610b2a90612e74565b601b805460ff60a01b1916600160a01b179055565b5f610c776118776111a3565b601b546001600160a01b03165f908152600860205260409020546118aa906118a3906002905b9061246c565b859061246c565b906124ea565b6118b933611cd9565b6118d55760405162461bcd60e51b8152600401610b2a90612e1c565b601580546001600160a01b039485166001600160a01b031991821617909155601680549385169382169390931790925560178054919093169116179055565b61191d33611cd9565b6119395760405162461bcd60e51b8152600401610b2a90612e1c565b6020805460ff191692151592909217909155602155565b5f546001600160a01b031633146119795760405162461bcd60e51b8152600401610b2a90612e74565b601455565b5f546001600160a01b031633146119a75760405162461bcd60e51b8152600401610b2a90612e74565b6001600160a01b03165f908152600160205260409020805460ff19169055565b5f546001600160a01b031633146119f05760405162461bcd60e51b8152600401610b2a90612e74565b5f80546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b5f546001600160a01b03163314611a845760405162461bcd60e51b8152600401610b2a90612e74565b478015611b83575f306001600160a01b031663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aec9190612ed2565b90505f816001600160a01b0316836040515f6040518083038185875af1925050503d805f8114611b37576040519150601f19603f3d011682016040523d82523d5f602084013e611b3c565b606091505b50509050806110b05760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610b2a565b50565b611b8f33611cd9565b611bab5760405162461bcd60e51b8152600401610b2a90612e1c565b6001600160a01b0382163014801590611bd25750601b546001600160a01b03838116911614155b611bda575f5ffd5b6001600160a01b0382165f908152600d60205260409020805460ff19168215801591909117909155611c3e57601c54604051630a5b654b60e11b81526001600160a01b0384811660048301525f6024830152909116906314b6ca969060440161124c565b601c546001600160a01b038381165f8181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca969060440161124c565b5050565b611c9333611cd9565b611caf5760405162461bcd60e51b8152600401610b2a90612e1c565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b6001600160a01b03165f9081526001602052604090205460ff1690565b5f80611d028385612ebf565b90508381101561119c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b2a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152600890915291822054611da4918490611e37565b6001600160a01b038086165f908152600860205260408082209390935590851681522054611dd29083611cf6565b6001600160a01b038085165f8181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e259086815260200190565b60405180910390a35060019392505050565b5f8184841115611e5a5760405162461bcd60e51b8152600401610b2a9190612ae8565b505f611e668486612eed565b95945050505050565b6022545f9060ff1615611e8e57611e87848484611d54565b905061119c565b6001600160a01b0384165f9081526001602052604090205460ff16158015611ece57506001600160a01b0383165f9081526001602052604090205460ff16155b15611f2357601b54600160a01b900460ff16611f235760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610b2a565b6001600160a01b0384165f9081526001602052604090205460ff16158015611f5457506001600160a01b0383163014155b8015611f6e57506003546001600160a01b03848116911614155b8015611f885750601b546001600160a01b03848116911614155b8015611fa257506016546001600160a01b03848116911614155b8015611fbc57506017546001600160a01b03848116911614155b8015611fd657506015546001600160a01b03848116911614155b15612076576001600160a01b0383165f908152600860205260409020546007546120008483612ebf565b11156120745760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b2a565b505b601b546001600160a01b0385811691161480156120955750601e5460ff165b80156120b957506001600160a01b0383165f908152600c602052604090205460ff16155b15612160576001600160a01b0383165f908152601f602052604090205442116121325760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610b2a565b601e5461214790610100900460ff1642612ebf565b6001600160a01b0384165f908152601f60205260409020555b61216a848361252b565b612172612593565b1561217f5761217f6125e0565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387165f908152600890915291909120546121d0918490611e37565b6001600160a01b0385165f90815260086020908152604080832093909355600a90529081205460ff16156122045782612222565b601b5461222290869085906001600160a01b038881169116146129bd565b6001600160a01b0385165f908152600860205260409020549091506122479082611cf6565b6001600160a01b038086165f908152600860209081526040808320949094559188168152600d909152205460ff166122e657601c546001600160a01b038681165f8181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b1580156122d3575f5ffd5b505af19250505080156122e4575060015b505b6001600160a01b0384165f908152600d602052604090205460ff1661237257601c546001600160a01b038581165f8181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b15801561235f575f5ffd5b505af1925050508015612370575060015b505b601c54601d546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916123aa9160040190815260200190565b5f604051808303815f87803b1580156123c1575f5ffd5b505af19250505080156123d2575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161241891815260200190565b60405180910390a3506001949350505050565b5f61119c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e37565b5f825f0361247b57505f610c77565b5f6124868385612e94565b9050826124938583612e55565b1461119c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b2a565b5f61119c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a85565b6006548111158061255357506001600160a01b0382165f908152600b602052604090205460ff165b611c865760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b2a565b601b545f906001600160a01b031633148015906125b3575060225460ff16155b80156125c1575060205460ff165b80156111ee575050602154305f90815260086020526040902054101590565b6022805460ff191660011790556018546019545f916125fe91610c7d565b61260a57600e5461260c565b5f5b90505f61262f60026118aa6012546118aa8660215461246c90919063ffffffff16565b90505f6126478260215461242b90919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f8151811061267f5761267f612eab565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106126b0576126b0612eab565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b81524792919091169063791ac947906126f99086905f90879030904290600401612f00565b5f604051808303815f87803b158015612710575f5ffd5b505af1158015612722573d5f5f3e3d5ffd5b505050505f61273a824761242b90919063ffffffff16565b90505f61275461274b8860026124ea565b6012549061242b565b90505f61276860026118aa8481878d61246c565b90505f612784836118aa600f548761246c90919063ffffffff16565b90505f6127a0846118aa6010548861246c90919063ffffffff16565b90505f6127bc856118aa6011548961246c90919063ffffffff16565b9050601c5f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004015f604051808303818588803b15801561280b575f5ffd5b505af19350505050801561281d575060015b506016546040515f916001600160a01b03169061753090859084818181858888f193505050503d805f811461286d576040519150601f19603f3d011682016040523d82523d5f602084013e612872565b606091505b50506017546040519192506001600160a01b0316906175309084905f818181858888f193505050503d805f81146128c4576040519150601f19603f3d011682016040523d82523d5f602084013e6128c9565b606091505b505f9250508b1590506129a557601a5460155460405163f305d71960e01b8152306004820152602481018e90525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af1158015612943573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906129689190612f70565b505060408051878152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506022805460ff1916905550505050505050505050565b5f5f826129cb5760646129cf565b6014545b90505f6129fd60135460646129e49190612e94565b6118aa8461189d6012548a61246c90919063ffffffff16565b305f90815260086020526040902054909150612a199082611cf6565b305f81815260086020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a699085815260200190565b60405180910390a3612a7b858261242b565b9695505050505050565b5f8183612aa55760405162461bcd60e51b8152600401610b2a9190612ae8565b505f611e668486612e55565b5f5f5f5f5f60a08688031215612ac5575f5ffd5b505083359560208501359550604085013594606081013594506080013592509050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215612b2d575f5ffd5b5035919050565b6001600160a01b0381168114611b83575f5ffd5b5f5f60408385031215612b59575f5ffd5b8235612b6481612b34565b946020939093013593505050565b5f5f60408385031215612b83575f5ffd5b50508035926020909101359150565b5f5f83601f840112612ba2575f5ffd5b50813567ffffffffffffffff811115612bb9575f5ffd5b6020830191508360208260051b8501011115612bd3575f5ffd5b9250929050565b5f5f5f5f5f60608688031215612bee575f5ffd5b8535612bf981612b34565b9450602086013567ffffffffffffffff811115612c14575f5ffd5b612c2088828901612b92565b909550935050604086013567ffffffffffffffff811115612c3f575f5ffd5b612c4b88828901612b92565b969995985093965092949392505050565b5f5f5f60608486031215612c6e575f5ffd5b8335612c7981612b34565b92506020840135612c8981612b34565b929592945050506040919091013590565b80358015158114612ca9575f5ffd5b919050565b5f5f60408385031215612cbf575f5ffd5b612cc883612c9a565b9150602083013560ff81168114612cdd575f5ffd5b809150509250929050565b5f60208284031215612cf8575f5ffd5b813561119c81612b34565b5f5f5f5f60608587031215612d16575f5ffd5b8435612d2181612b34565b9350602085013567ffffffffffffffff811115612d3c575f5ffd5b612d4887828801612b92565b9598909750949560400135949350505050565b5f5f60408385031215612d6c575f5ffd5b8235612d7781612b34565b9150612d8560208401612c9a565b90509250929050565b5f5f5f60608486031215612da0575f5ffd5b8335612dab81612b34565b92506020840135612dbb81612b34565b91506040840135612dcb81612b34565b809150509250925092565b5f5f60408385031215612de7575f5ffd5b8235612df281612b34565b91506020830135612cdd81612b34565b5f5f60408385031215612e13575f5ffd5b612b6483612c9a565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b5f82612e6f57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526006908201526510a7aba722a960d11b604082015260600190565b8082028115828204841417610c7757610c77612e41565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610c7757610c77612e41565b5f60208284031215612ee2575f5ffd5b815161119c81612b34565b81810381811115610c7757610c77612e41565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b81811015612f505783516001600160a01b0316835260209384019390920191600101612f29565b50506001600160a01b039590951660608401525050608001529392505050565b5f5f5f60608486031215612f82575f5ffd5b505081516020830151604090930151909492935091905056fea2646970667358221220bb571517a2d8cf629fcbd996588aeadbc8693b88af8e2239aab26b942b5ba3b664736f6c634300081c00336080604052600180546001600160a01b03199081167314cf922aa1512adfc34409b63e18d391e4a86a2f179091556002805490911673c02aaa39b223fe8d0a0e5c4f27ead9083c756cc21790556ec097ce7bc90715b34b9f1000000000600c556104b0600d55655af3107a4000600e5534801561007a575f5ffd5b50604051610d4a380380610d4a833981016040819052610099916100f2565b6001600160a01b0381166100c157737a250d5630b4cf539739df2c5dacb4c659f2488d6100c3565b805b600380546001600160a01b03929092166001600160a01b03199283161790555f8054909116331790555061011f565b5f60208284031215610102575f5ffd5b81516001600160a01b0381168114610118575f5ffd5b9392505050565b610c1e8061012c5f395ff3fe6080604052600436106100d9575f3560e01c8063ce7c2ac21161007c578063efca2eed11610057578063efca2eed14610215578063f0fc6bca1461022a578063ffb2c4791461023e578063ffd49c841461025d575f5ffd5b8063ce7c2ac2146101a3578063d0e30db0146101f8578063e2d2e21914610200575f5ffd5b80632d48e896116100b75780632d48e896146101455780633a98ef39146101645780634fab0ae814610179578063997664d71461018e575f5ffd5b806311ce023d146100dd57806314b6ca961461010557806328fd319814610126575b5f5ffd5b3480156100e8575f5ffd5b506100f2600c5481565b6040519081526020015b60405180910390f35b348015610110575f5ffd5b5061012461011f366004610a8b565b610272565b005b348015610131575f5ffd5b506100f2610140366004610ab3565b6103e0565b348015610150575f5ffd5b5061012461015f366004610acc565b610466565b34801561016f575f5ffd5b506100f260085481565b348015610184575f5ffd5b506100f2600e5481565b348015610199575f5ffd5b506100f260095481565b3480156101ae575f5ffd5b506101dd6101bd366004610ab3565b60076020525f908152604090208054600182015460029092015490919083565b604080519384526020840192909252908201526060016100fc565b610124610486565b34801561020b575f5ffd5b506100f2600b5481565b348015610220575f5ffd5b506100f2600a5481565b348015610235575f5ffd5b506101246104d7565b348015610249575f5ffd5b50610124610258366004610aec565b6104e2565b348015610268575f5ffd5b506100f2600d5481565b5f546001600160a01b03163314610287575f5ffd5b6001600160a01b0382165f90815260076020526040902054156102ad576102ad826105dd565b5f811180156102d157506001600160a01b0382165f90815260076020526040902054155b1561033657600480546001600160a01b0384165f818152600560205260408120839055600183018455929092527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319169091179055610368565b8015801561035a57506001600160a01b0382165f9081526007602052604090205415155b156103685761036882610735565b6001600160a01b0382165f9081526007602052604090205460085461039891839161039291610845565b9061088f565b6008556001600160a01b0382165f9081526007602052604090208190556103be816108ed565b6001600160a01b039092165f9081526007602052604090206001019190915550565b6001600160a01b0381165f90815260076020526040812054810361040557505f919050565b6001600160a01b0382165f90815260076020526040812054610426906108ed565b6001600160a01b0384165f9081526007602052604090206001015490915080821161045457505f9392505050565b61045e8282610845565b949350505050565b5f546001600160a01b0316331461047b575f5ffd5b600d91909155600e55565b5f546001600160a01b0316331461049b575f5ffd5b6009546104a8903461088f565b600955600854600c546104d2916104c9916104c39034610909565b90610987565b600b549061088f565b600b55565b6104e0336105dd565b565b5f546001600160a01b031633146104f7575f5ffd5b6004545f819003610506575050565b5f805a90505f5b848310801561051b57508381105b156105d65783600f541061052e575f600f555b61055f6004600f548154811061054657610546610b03565b5f918252602090912001546001600160a01b03166109c8565b15610595576105956004600f548154811061057c5761057c610b03565b5f918252602090912001546001600160a01b03166105dd565b6105aa6105a35a8490610845565b849061088f565b92505a600f80549193505f6105be83610b2b565b919050555080806105ce90610b2b565b91505061050d565b5050505050565b6001600160a01b0381165f9081526007602052604081205490036105fe5750565b5f610608826103e0565b9050801561073157600a5461061d908261088f565b600a556040515f906001600160a01b0384169083908381818185875af1925050503d805f8114610668576040519150601f19603f3d011682016040523d82523d5f602084013e61066d565b606091505b50509050806106b95760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064015b60405180910390fd5b6001600160a01b0383165f90815260066020908152604080832042905560079091529020600201546106eb908361088f565b6001600160a01b0384165f908152600760205260409020600281019190915554610714906108ed565b6001600160a01b0384165f90815260076020526040902060010155505b5050565b6004805461074590600190610b43565b8154811061075557610755610b03565b5f9182526020808320909101546001600160a01b038481168452600590925260409092205460048054929093169291811061079257610792610b03565b5f91825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600591829052604081205460048054919392916107dd90600190610b43565b815481106107ed576107ed610b03565b5f9182526020808320909101546001600160a01b03168352820192909252604001902055600480548061082257610822610b56565b5f8281526020902081015f1990810180546001600160a01b031916905501905550565b5f61088683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610a0c565b90505b92915050565b5f8061089b8385610b6a565b9050838110156108865760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016106b0565b5f610889600c546104c3600b548561090990919063ffffffff16565b5f825f0361091857505f610889565b5f6109238385610b7d565b9050826109308583610b94565b146108865760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016106b0565b5f61088683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610a44565b600d546001600160a01b0382165f90815260066020526040812054909142916109f19190610b6a565b1080156108895750600e54610a05836103e0565b1192915050565b5f8184841115610a2f5760405162461bcd60e51b81526004016106b09190610bb3565b505f610a3b8486610b43565b95945050505050565b5f8183610a645760405162461bcd60e51b81526004016106b09190610bb3565b505f610a3b8486610b94565b80356001600160a01b0381168114610a86575f5ffd5b919050565b5f5f60408385031215610a9c575f5ffd5b610aa583610a70565b946020939093013593505050565b5f60208284031215610ac3575f5ffd5b61088682610a70565b5f5f60408385031215610add575f5ffd5b50508035926020909101359150565b5f60208284031215610afc575f5ffd5b5035919050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f60018201610b3c57610b3c610b17565b5060010190565b8181038181111561088957610889610b17565b634e487b7160e01b5f52603160045260245ffd5b8082018082111561088957610889610b17565b808202811582820484141761088957610889610b17565b5f82610bae57634e487b7160e01b5f52601260045260245ffd5b500490565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f8301168401019150509291505056fea2646970667358221220809516064267e8d6f027811c3761534ac465b59f7f1ffc898978f4bc6017a2cc64736f6c634300081c0033
Deployed Bytecode
0x608060405260043610610395575f3560e01c8063751039fc116101de578063d51ed1c811610108578063f2fde38b1161009d578063f887ea401161006d578063f887ea4014610a92578063fe9fbb8014610ab1578063fed0d2a114610ad0578063ffb54a9914610ae5575f5ffd5b8063f2fde38b14610a21578063f429389014610a40578063f708a64f14610a54578063f84ba65d14610a73575f5ffd5b8063df20fd49116100d8578063df20fd49146109a5578063e96fada2146109c4578063ec72d65f146109e3578063f0b37c0414610a02575f5ffd5b8063d51ed1c814610904578063d7c0103214610923578063dab84ee714610942578063dd62ed3e14610961575f5ffd5b80639d1944f51161017e578063bd9ab5371161014e578063bd9ab53714610893578063bfe10928146108b2578063c9567bf9146108d1578063ca33e64c146108e5575f5ffd5b80639d1944f514610817578063a8aa1b3114610836578063a9059cbb14610855578063b6a5d7de14610874575f5ffd5b806383ad7994116101b957806383ad79941461078f578063893d20e8146107a457806395d89b41146107d457806398118cb414610802575f5ffd5b8063751039fc1461075157806378109e54146107655780637d1db4a51461077a575f5ffd5b80632d594567116102bf578063617fe0ed1161025f5780636ddd17131161022f5780636ddd1713146106d257806370a08231146106eb578063715018a61461071f578063722b62ad14610733575f5ffd5b8063617fe0ed14610670578063658d4b7f146106895780636827e764146106a85780636b67c4df146106bd575f5ffd5b8063335f6a431161029a578063335f6a43146105f457806344a33fd21461061357806350db71fb14610632578063571ac8b014610651575f5ffd5b80632d594567146105875780632f54bf6e146105a6578063313ce567146105d3575f5ffd5b806318160ddd11610335578063201e799111610305578063201e79911461051657806323b872dd146105355780632b112e49146105545780632d48e89614610568575f5ffd5b806318160ddd146104af5780631ca0a28d146104c35780631da1db5e146104e25780631df4ccfc14610501575f5ffd5b806309302dc61161037057806309302dc61461042d578063095ea7b31461044c5780631161ae391461047b578063180b0d7e1461049a575f5ffd5b80630445b667146103a057806304a66b48146103c857806306fdde03146103e9575f5ffd5b3661039c57005b5f5ffd5b3480156103ab575f5ffd5b506103b560215481565b6040519081526020015b60405180910390f35b3480156103d3575f5ffd5b506103e76103e2366004612ab1565b610b05565b005b3480156103f4575f5ffd5b506040805180820190915260138152721155120814dd1c985d1959de4814995dd85c99606a1b60208201525b6040516103bf9190612ae8565b348015610438575f5ffd5b506103e7610447366004612b1d565b610bc7565b348015610457575f5ffd5b5061046b610466366004612b48565b610c11565b60405190151581526020016103bf565b348015610486575f5ffd5b5061046b610495366004612b72565b610c7d565b3480156104a5575f5ffd5b506103b560135481565b3480156104ba575f5ffd5b506005546103b5565b3480156104ce575f5ffd5b506103e76104dd366004612bda565b610c90565b3480156104ed575f5ffd5b506103e76104fc366004612b1d565b61103f565b34801561050c575f5ffd5b506103b560125481565b348015610521575f5ffd5b506103e7610530366004612b72565b6110b5565b348015610540575f5ffd5b5061046b61054f366004612c5c565b6110e5565b34801561055f575f5ffd5b506103b56111a3565b348015610573575f5ffd5b506103e7610582366004612b72565b6111f3565b348015610592575f5ffd5b506103e76105a1366004612cae565b611275565b3480156105b1575f5ffd5b5061046b6105c0366004612ce8565b5f546001600160a01b0391821691161490565b3480156105de575f5ffd5b5060095b60405160ff90911681526020016103bf565b3480156105ff575f5ffd5b506103e761060e366004612d03565b6112c5565b34801561061e575f5ffd5b506103e761062d366004612b1d565b6115d1565b34801561063d575f5ffd5b506103e761064c366004612d5b565b611607565b34801561065c575f5ffd5b5061046b61066b366004612ce8565b611656565b34801561067b575f5ffd5b50601e5461046b9060ff1681565b348015610694575f5ffd5b506103e76106a3366004612d5b565b611662565b3480156106b3575f5ffd5b506103b560115481565b3480156106c8575f5ffd5b506103b560105481565b3480156106dd575f5ffd5b5060205461046b9060ff1681565b3480156106f6575f5ffd5b506103b5610705366004612ce8565b6001600160a01b03165f9081526008602052604090205490565b34801561072a575f5ffd5b506103e76116b1565b34801561073e575f5ffd5b50601e546105e290610100900460ff1681565b34801561075c575f5ffd5b506103e761171e565b348015610770575f5ffd5b506103b560075481565b348015610785575f5ffd5b506103b560065481565b34801561079a575f5ffd5b506103b5600f5481565b3480156107af575f5ffd5b505f546001600160a01b03165b6040516001600160a01b0390911681526020016103bf565b3480156107df575f5ffd5b5060408051808201909152600681526529aa2920aa2960d11b6020820152610420565b34801561080d575f5ffd5b506103b5600e5481565b348015610822575f5ffd5b506103e7610831366004612b1d565b611750565b348015610841575f5ffd5b50601b546107bc906001600160a01b031681565b348015610860575f5ffd5b5061046b61086f366004612b48565b611788565b34801561087f575f5ffd5b506103e761088e366004612ce8565b611794565b34801561089e575f5ffd5b506103e76108ad366004612b1d565b6117e3565b3480156108bd575f5ffd5b50601c546107bc906001600160a01b031681565b3480156108dc575f5ffd5b506103e761182d565b3480156108f0575f5ffd5b506015546107bc906001600160a01b031681565b34801561090f575f5ffd5b506103b561091e366004612b1d565b61186b565b34801561092e575f5ffd5b506103e761093d366004612d8e565b6118b0565b34801561094d575f5ffd5b506017546107bc906001600160a01b031681565b34801561096c575f5ffd5b506103b561097b366004612dd6565b6001600160a01b039182165f90815260096020908152604080832093909416825291909152205490565b3480156109b0575f5ffd5b506103e76109bf366004612e02565b611914565b3480156109cf575f5ffd5b506016546107bc906001600160a01b031681565b3480156109ee575f5ffd5b506103e76109fd366004612b1d565b611950565b348015610a0d575f5ffd5b506103e7610a1c366004612ce8565b61197e565b348015610a2c575f5ffd5b506103e7610a3b366004612ce8565b6119c7565b348015610a4b575f5ffd5b506103e7611a5b565b348015610a5f575f5ffd5b506103e7610a6e366004612d5b565b611b86565b348015610a7e575f5ffd5b506103e7610a8d366004612d5b565b611c8a565b348015610a9d575f5ffd5b50601a546107bc906001600160a01b031681565b348015610abc575f5ffd5b5061046b610acb366004612ce8565b611cd9565b348015610adb575f5ffd5b506103b560145481565b348015610af0575f5ffd5b50601b5461046b90600160a01b900460ff1681565b610b0e33611cd9565b610b335760405162461bcd60e51b8152600401610b2a90612e1c565b60405180910390fd5b600e859055600f84905560108390556011829055610b5d82610b5785818989611cf6565b90611cf6565b6012556013819055610b70600382612e55565b60125410610bc05760405162461bcd60e51b815260206004820152601c60248201527f466565732063616e6e6f74206265206d6f7265207468616e20333325000000006044820152606401610b2a565b5050505050565b5f546001600160a01b03163314610bf05760405162461bcd60e51b8152600401610b2a90612e74565b6103e881600554610c019190612e94565b610c0b9190612e55565b60075550565b335f8181526009602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c6b9086815260200190565b60405180910390a35060015b92915050565b5f82610c888361186b565b119392505050565b5f546001600160a01b03163314610cb95760405162461bcd60e51b8152600401610b2a90612e74565b6101f58310610d205760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3530302061646472657373657360981b6064820152608401610b2a565b828114610d805760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610b2a565b5f805b84811015610db957838382818110610d9d57610d9d612eab565b9050602002013582610daf9190612ebf565b9150600101610d83565b5080610dd9876001600160a01b03165f9081526008602052604090205490565b1015610e275760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b2a565b5f5b84811015610faa57610e7a87878784818110610e4757610e47612eab565b9050602002016020810190610e5c9190612ce8565b868685818110610e6e57610e6e612eab565b90506020020135611d54565b50600d5f878784818110610e9057610e90612eab565b9050602002016020810190610ea59190612ce8565b6001600160a01b0316815260208101919091526040015f205460ff16610fa257601c546001600160a01b03166314b6ca96878784818110610ee857610ee8612eab565b9050602002016020810190610efd9190612ce8565b60085f8a8a87818110610f1257610f12612eab565b9050602002016020810190610f279190612ce8565b6001600160a01b03166001600160a01b031681526020019081526020015f20546040518363ffffffff1660e01b8152600401610f789291906001600160a01b03929092168252602082015260400190565b5f604051808303815f87803b158015610f8f575f5ffd5b505af1925050508015610fa0575060015b505b600101610e29565b506001600160a01b0386165f908152600d602052604090205460ff1661103757601c546001600160a01b038781165f8181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b158015611024575f5ffd5b505af1925050508015611035575060015b505b505050505050565b61104833611cd9565b6110645760405162461bcd60e51b8152600401610b2a90612e1c565b60165447906001600160a01b03166108fc60646110818585612e94565b61108b9190612e55565b6040518115909202915f818181858888f193505050501580156110b0573d5f5f3e3d5ffd5b505050565b6110be33611cd9565b6110da5760405162461bcd60e51b8152600401610b2a90612e1c565b601891909155601955565b6001600160a01b0383165f9081526009602090815260408083203384529091528120545f191461118e576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387165f90815260098252838120338252909152919091205461116a918490611e37565b6001600160a01b0385165f9081526009602090815260408083203384529091529020555b611199848484611e6f565b90505b9392505050565b6004546001600160a01b03165f908152600860205260408120546111ee906003546001600160a01b03165f908152600860205260409020546111e8906005549061242b565b9061242b565b905090565b6111fc33611cd9565b6112185760405162461bcd60e51b8152600401610b2a90612e1c565b601c546040516316a4744b60e11b815260048101849052602481018390526001600160a01b0390911690632d48e896906044015b5f604051808303815f87803b158015611263575f5ffd5b505af1158015611037573d5f5f3e3d5ffd5b5f546001600160a01b0316331461129e5760405162461bcd60e51b8152600401610b2a90612e74565b601e805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b5f546001600160a01b031633146112ee5760405162461bcd60e51b8152600401610b2a90612e74565b61032182106113555760405162461bcd60e51b815260206004820152602d60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526c3830302061646472657373657360981b6064820152608401610b2a565b5f6113608383612e94565b905080611381866001600160a01b03165f9081526008602052604090205490565b10156113cf5760405162461bcd60e51b815260206004820152601b60248201527f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c657400000000006044820152606401610b2a565b5f5b8381101561153a5761140a868686848181106113ef576113ef612eab565b90506020020160208101906114049190612ce8565b85611d54565b50600d5f86868481811061142057611420612eab565b90506020020160208101906114359190612ce8565b6001600160a01b0316815260208101919091526040015f205460ff1661153257601c546001600160a01b03166314b6ca9686868481811061147857611478612eab565b905060200201602081019061148d9190612ce8565b60085f8989878181106114a2576114a2612eab565b90506020020160208101906114b79190612ce8565b6001600160a01b03166001600160a01b031681526020019081526020015f20546040518363ffffffff1660e01b81526004016115089291906001600160a01b03929092168252602082015260400190565b5f604051808303815f87803b15801561151f575f5ffd5b505af1925050508015611530575060015b505b6001016113d1565b506001600160a01b0385165f908152600d602052604090205460ff16610bc057601c546001600160a01b038681165f8181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b1580156115b4575f5ffd5b505af19250505080156115c5575060015b15610bc0575050505050565b6115da33611cd9565b6115f65760405162461bcd60e51b8152600401610b2a90612e1c565b47336108fc60646110818585612e94565b61161033611cd9565b61162c5760405162461bcd60e51b8152600401610b2a90612e1c565b6001600160a01b03919091165f908152600c60205260409020805460ff1916911515919091179055565b5f610c77825f19610c11565b61166b33611cd9565b6116875760405162461bcd60e51b8152600401610b2a90612e1c565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b5f546001600160a01b031633146116da5760405162461bcd60e51b8152600401610b2a90612e74565b6040515f81527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a15f80546001600160a01b0319169055565b61172733611cd9565b6117435760405162461bcd60e51b8152600401610b2a90612e1c565b6005546006819055600755565b61175933611cd9565b6117755760405162461bcd60e51b8152600401610b2a90612e1c565b620b71b08110611783575f5ffd5b601d55565b5f61119c338484611e6f565b5f546001600160a01b031633146117bd5760405162461bcd60e51b8152600401610b2a90612e74565b6001600160a01b03165f908152600160208190526040909120805460ff19169091179055565b5f546001600160a01b0316331461180c5760405162461bcd60e51b8152600401610b2a90612e74565b6103e88160055461181d9190612e94565b6118279190612e55565b60065550565b5f546001600160a01b031633146118565760405162461bcd60e51b8152600401610b2a90612e74565b601b805460ff60a01b1916600160a01b179055565b5f610c776118776111a3565b601b546001600160a01b03165f908152600860205260409020546118aa906118a3906002905b9061246c565b859061246c565b906124ea565b6118b933611cd9565b6118d55760405162461bcd60e51b8152600401610b2a90612e1c565b601580546001600160a01b039485166001600160a01b031991821617909155601680549385169382169390931790925560178054919093169116179055565b61191d33611cd9565b6119395760405162461bcd60e51b8152600401610b2a90612e1c565b6020805460ff191692151592909217909155602155565b5f546001600160a01b031633146119795760405162461bcd60e51b8152600401610b2a90612e74565b601455565b5f546001600160a01b031633146119a75760405162461bcd60e51b8152600401610b2a90612e74565b6001600160a01b03165f908152600160205260409020805460ff19169055565b5f546001600160a01b031633146119f05760405162461bcd60e51b8152600401610b2a90612e74565b5f80546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b5f546001600160a01b03163314611a845760405162461bcd60e51b8152600401610b2a90612e74565b478015611b83575f306001600160a01b031663893d20e86040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611aec9190612ed2565b90505f816001600160a01b0316836040515f6040518083038185875af1925050503d805f8114611b37576040519150601f19603f3d011682016040523d82523d5f602084013e611b3c565b606091505b50509050806110b05760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b6044820152606401610b2a565b50565b611b8f33611cd9565b611bab5760405162461bcd60e51b8152600401610b2a90612e1c565b6001600160a01b0382163014801590611bd25750601b546001600160a01b03838116911614155b611bda575f5ffd5b6001600160a01b0382165f908152600d60205260409020805460ff19168215801591909117909155611c3e57601c54604051630a5b654b60e11b81526001600160a01b0384811660048301525f6024830152909116906314b6ca969060440161124c565b601c546001600160a01b038381165f8181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca969060440161124c565b5050565b611c9333611cd9565b611caf5760405162461bcd60e51b8152600401610b2a90612e1c565b6001600160a01b03919091165f908152600b60205260409020805460ff1916911515919091179055565b6001600160a01b03165f9081526001602052604090205460ff1690565b5f80611d028385612ebf565b90508381101561119c5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b2a565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386165f908152600890915291822054611da4918490611e37565b6001600160a01b038086165f908152600860205260408082209390935590851681522054611dd29083611cf6565b6001600160a01b038085165f8181526008602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611e259086815260200190565b60405180910390a35060019392505050565b5f8184841115611e5a5760405162461bcd60e51b8152600401610b2a9190612ae8565b505f611e668486612eed565b95945050505050565b6022545f9060ff1615611e8e57611e87848484611d54565b905061119c565b6001600160a01b0384165f9081526001602052604090205460ff16158015611ece57506001600160a01b0383165f9081526001602052604090205460ff16155b15611f2357601b54600160a01b900460ff16611f235760405162461bcd60e51b8152602060048201526014602482015273151c98591a5b99c81b9bdd081bdc195b881e595d60621b6044820152606401610b2a565b6001600160a01b0384165f9081526001602052604090205460ff16158015611f5457506001600160a01b0383163014155b8015611f6e57506003546001600160a01b03848116911614155b8015611f885750601b546001600160a01b03848116911614155b8015611fa257506016546001600160a01b03848116911614155b8015611fbc57506017546001600160a01b03848116911614155b8015611fd657506015546001600160a01b03848116911614155b15612076576001600160a01b0383165f908152600860205260409020546007546120008483612ebf565b11156120745760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b2a565b505b601b546001600160a01b0385811691161480156120955750601e5460ff165b80156120b957506001600160a01b0383165f908152600c602052604090205460ff16155b15612160576001600160a01b0383165f908152601f602052604090205442116121325760405162461bcd60e51b815260206004820152602560248201527f506c65617365207761697420666f7220316d696e206265747765656e2074776f604482015264206275797360d81b6064820152608401610b2a565b601e5461214790610100900460ff1642612ebf565b6001600160a01b0384165f908152601f60205260409020555b61216a848361252b565b612172612593565b1561217f5761217f6125e0565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0387165f908152600890915291909120546121d0918490611e37565b6001600160a01b0385165f90815260086020908152604080832093909355600a90529081205460ff16156122045782612222565b601b5461222290869085906001600160a01b038881169116146129bd565b6001600160a01b0385165f908152600860205260409020549091506122479082611cf6565b6001600160a01b038086165f908152600860209081526040808320949094559188168152600d909152205460ff166122e657601c546001600160a01b038681165f8181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b1580156122d3575f5ffd5b505af19250505080156122e4575060015b505b6001600160a01b0384165f908152600d602052604090205460ff1661237257601c546001600160a01b038581165f8181526008602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca96906044015f604051808303815f87803b15801561235f575f5ffd5b505af1925050508015612370575060015b505b601c54601d546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c479916123aa9160040190815260200190565b5f604051808303815f87803b1580156123c1575f5ffd5b505af19250505080156123d2575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161241891815260200190565b60405180910390a3506001949350505050565b5f61119c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e37565b5f825f0361247b57505f610c77565b5f6124868385612e94565b9050826124938583612e55565b1461119c5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b2a565b5f61119c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612a85565b6006548111158061255357506001600160a01b0382165f908152600b602052604090205460ff165b611c865760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b2a565b601b545f906001600160a01b031633148015906125b3575060225460ff16155b80156125c1575060205460ff165b80156111ee575050602154305f90815260086020526040902054101590565b6022805460ff191660011790556018546019545f916125fe91610c7d565b61260a57600e5461260c565b5f5b90505f61262f60026118aa6012546118aa8660215461246c90919063ffffffff16565b90505f6126478260215461242b90919063ffffffff16565b6040805160028082526060820183529293505f92909160208301908036833701905050905030815f8151811061267f5761267f612eab565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106126b0576126b0612eab565b6001600160a01b039283166020918202929092010152601a5460405163791ac94760e01b81524792919091169063791ac947906126f99086905f90879030904290600401612f00565b5f604051808303815f87803b158015612710575f5ffd5b505af1158015612722573d5f5f3e3d5ffd5b505050505f61273a824761242b90919063ffffffff16565b90505f61275461274b8860026124ea565b6012549061242b565b90505f61276860026118aa8481878d61246c565b90505f612784836118aa600f548761246c90919063ffffffff16565b90505f6127a0846118aa6010548861246c90919063ffffffff16565b90505f6127bc856118aa6011548961246c90919063ffffffff16565b9050601c5f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004015f604051808303818588803b15801561280b575f5ffd5b505af19350505050801561281d575060015b506016546040515f916001600160a01b03169061753090859084818181858888f193505050503d805f811461286d576040519150601f19603f3d011682016040523d82523d5f602084013e612872565b606091505b50506017546040519192506001600160a01b0316906175309084905f818181858888f193505050503d805f81146128c4576040519150601f19603f3d011682016040523d82523d5f602084013e6128c9565b606091505b505f9250508b1590506129a557601a5460155460405163f305d71960e01b8152306004820152602481018e90525f6044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990879060c40160606040518083038185885af1158015612943573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906129689190612f70565b505060408051878152602081018e90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b50506022805460ff1916905550505050505050505050565b5f5f826129cb5760646129cf565b6014545b90505f6129fd60135460646129e49190612e94565b6118aa8461189d6012548a61246c90919063ffffffff16565b305f90815260086020526040902054909150612a199082611cf6565b305f81815260086020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a699085815260200190565b60405180910390a3612a7b858261242b565b9695505050505050565b5f8183612aa55760405162461bcd60e51b8152600401610b2a9190612ae8565b505f611e668486612e55565b5f5f5f5f5f60a08688031215612ac5575f5ffd5b505083359560208501359550604085013594606081013594506080013592509050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f60208284031215612b2d575f5ffd5b5035919050565b6001600160a01b0381168114611b83575f5ffd5b5f5f60408385031215612b59575f5ffd5b8235612b6481612b34565b946020939093013593505050565b5f5f60408385031215612b83575f5ffd5b50508035926020909101359150565b5f5f83601f840112612ba2575f5ffd5b50813567ffffffffffffffff811115612bb9575f5ffd5b6020830191508360208260051b8501011115612bd3575f5ffd5b9250929050565b5f5f5f5f5f60608688031215612bee575f5ffd5b8535612bf981612b34565b9450602086013567ffffffffffffffff811115612c14575f5ffd5b612c2088828901612b92565b909550935050604086013567ffffffffffffffff811115612c3f575f5ffd5b612c4b88828901612b92565b969995985093965092949392505050565b5f5f5f60608486031215612c6e575f5ffd5b8335612c7981612b34565b92506020840135612c8981612b34565b929592945050506040919091013590565b80358015158114612ca9575f5ffd5b919050565b5f5f60408385031215612cbf575f5ffd5b612cc883612c9a565b9150602083013560ff81168114612cdd575f5ffd5b809150509250929050565b5f60208284031215612cf8575f5ffd5b813561119c81612b34565b5f5f5f5f60608587031215612d16575f5ffd5b8435612d2181612b34565b9350602085013567ffffffffffffffff811115612d3c575f5ffd5b612d4887828801612b92565b9598909750949560400135949350505050565b5f5f60408385031215612d6c575f5ffd5b8235612d7781612b34565b9150612d8560208401612c9a565b90509250929050565b5f5f5f60608486031215612da0575f5ffd5b8335612dab81612b34565b92506020840135612dbb81612b34565b91506040840135612dcb81612b34565b809150509250925092565b5f5f60408385031215612de7575f5ffd5b8235612df281612b34565b91506020830135612cdd81612b34565b5f5f60408385031215612e13575f5ffd5b612b6483612c9a565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b5f82612e6f57634e487b7160e01b5f52601260045260245ffd5b500490565b60208082526006908201526510a7aba722a960d11b604082015260600190565b8082028115828204841417610c7757610c77612e41565b634e487b7160e01b5f52603260045260245ffd5b80820180821115610c7757610c77612e41565b5f60208284031215612ee2575f5ffd5b815161119c81612b34565b81810381811115610c7757610c77612e41565b5f60a0820187835286602084015260a0604084015280865180835260c0850191506020880192505f5b81811015612f505783516001600160a01b0316835260209384019390920191600101612f29565b50506001600160a01b039590951660608401525050608001529392505050565b5f5f5f60608486031215612f82575f5ffd5b505081516020830151604090930151909492935091905056fea2646970667358221220bb571517a2d8cf629fcbd996588aeadbc8693b88af8e2239aab26b942b5ba3b664736f6c634300081c0033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $3,180.54 | 0.0643 | $204.38 |
Loading...
Loading
Loading...
Loading
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.