Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 94 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer | 18274120 | 890 days ago | IN | 0 ETH | 0.00079874 | ||||
| Burn From | 17975474 | 931 days ago | IN | 0 ETH | 0.0006217 | ||||
| Approve | 17974546 | 932 days ago | IN | 0 ETH | 0.00077341 | ||||
| Approve | 17974245 | 932 days ago | IN | 0 ETH | 0.00087843 | ||||
| Approve | 17971027 | 932 days ago | IN | 0 ETH | 0.00403994 | ||||
| Approve | 17970857 | 932 days ago | IN | 0 ETH | 0.00556572 | ||||
| Approve | 17970716 | 932 days ago | IN | 0 ETH | 0.00457203 | ||||
| Approve | 17970651 | 932 days ago | IN | 0 ETH | 0.00200347 | ||||
| Approve | 17970641 | 932 days ago | IN | 0 ETH | 0.00201901 | ||||
| Approve | 17970604 | 932 days ago | IN | 0 ETH | 0.00244178 | ||||
| Transfer | 17970598 | 932 days ago | IN | 0 ETH | 0.00562578 | ||||
| Transfer | 17970570 | 932 days ago | IN | 0 ETH | 0.00313388 | ||||
| Approve | 17970557 | 932 days ago | IN | 0 ETH | 0.00198426 | ||||
| Approve | 17970548 | 932 days ago | IN | 0 ETH | 0.00189103 | ||||
| Transfer | 17970546 | 932 days ago | IN | 0 ETH | 0.00284495 | ||||
| Transfer | 17970541 | 932 days ago | IN | 0 ETH | 0.00434759 | ||||
| Transfer | 17970537 | 932 days ago | IN | 0 ETH | 0.00231701 | ||||
| Approve | 17970533 | 932 days ago | IN | 0 ETH | 0.00217293 | ||||
| Approve | 17970522 | 932 days ago | IN | 0 ETH | 0.00207067 | ||||
| Approve | 17970521 | 932 days ago | IN | 0 ETH | 0.00133093 | ||||
| Approve | 17970519 | 932 days ago | IN | 0 ETH | 0.00209689 | ||||
| Transfer | 17970518 | 932 days ago | IN | 0 ETH | 0.00275258 | ||||
| Approve | 17970514 | 932 days ago | IN | 0 ETH | 0.0022184 | ||||
| Approve | 17970507 | 932 days ago | IN | 0 ETH | 0.00212133 | ||||
| Approve | 17970499 | 932 days ago | IN | 0 ETH | 0.00343848 |
Latest 1 internal transaction
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| 0x61014060 | 17969150 | 932 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
GalaxyFlow
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-08-22
*/
/**********************************************************************
GalaxyFlow
Web : https://www.galaxyflow.xyz
Bridge App: https://app.galaxyflow.xyz
Telegram : https://t.me/GalaxyFlowChannel
Twitter : https://twitter.com/GalaxyFlowOrg
Blog : https://medium.com/@galaxyflow
Contact : contact@galaxyflow.xyz
**********************************************************************/
//SPDX-License-Identifier: UNLICENSED
pragma solidity >= 0.8.20;
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address who) external view returns (uint256);
function allowance(address _owner, address spender) external view returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(address from, address to, uint256 value) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(address indexed owner, address indexed spender, uint256 value);
}
/**
* @title SafeMath
* @dev Math operations with safety checks that revert on error
*/
library SafeMath {
int256 constant private INT256_MIN = -2**255;
/**
* @dev Multiplies two unsigned integers, reverts on overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b);
return c;
}
/**
* @dev Multiplies two signed integers, reverts on overflow.
*/
function mul(int256 a, int256 b) internal pure returns (int256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522
if (a == 0) {
return 0;
}
require(!(a == -1 && b == INT256_MIN)); // This is the only case of overflow not detected by the check below
int256 c = a * b;
require(c / a == b);
return c;
}
/**
* @dev Integer division of two unsigned integers truncating the quotient, reverts on division by zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Integer division of two signed integers truncating the quotient, reverts on division by zero.
*/
function div(int256 a, int256 b) internal pure returns (int256) {
require(b != 0); // Solidity only automatically asserts when dividing by 0
require(!(b == -1 && a == INT256_MIN)); // This is the only case of overflow
int256 c = a / b;
return c;
}
/**
* @dev Subtracts two unsigned integers, reverts on overflow (i.e. if subtrahend is greater than minuend).
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(b <= a);
uint256 c = a - b;
return c;
}
/**
* @dev Subtracts two signed integers, reverts on overflow.
*/
function sub(int256 a, int256 b) internal pure returns (int256) {
int256 c = a - b;
require((b >= 0 && c <= a) || (b < 0 && c > a));
return c;
}
/**
* @dev Adds two unsigned integers, reverts on overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a);
return c;
}
/**
* @dev Adds two signed integers, reverts on overflow.
*/
function add(int256 a, int256 b) internal pure returns (int256) {
int256 c = a + b;
require((b >= 0 && c >= a) || (b < 0 && c < a));
return c;
}
/**
* @dev Divides two unsigned integers and returns the remainder (unsigned integer modulo),
* reverts when dividing by zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0);
return a % b;
}
}
interface IDEXFactory {
function createPair(address tokenA, address tokenB) external returns (address pair);
}
interface IDEXRouter {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidityETH(address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function addLiquidity(address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline) external returns (uint amountA, uint amountB, uint liquidity);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
function swapExactTokensForTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
function swapExactTokensForETHSupportingFeeOnTransferTokens(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts);
}
interface IOwnable {
function owner() external view returns (address);
}
interface IBurnable {
function burn(uint256 value) external;
function burnFrom(address account, uint256 value) external;
}
interface IDividendDistributor {
function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
function setShare(address shareholder, uint256 amount) external;
function depositNative() external payable;
function depositToken(address from, uint256 amount) external;
function process(uint256 gas) external;
function inSwap() external view returns (bool);
}
interface IWalletDistributor {
function receiveToken(address token, address from, uint256 amount) external;
}
interface ITaxDistributor {
receive() external payable;
function lastSwapTime() external view returns (uint256);
function createWalletTax(string memory name, uint256 buyTax, uint256 sellTax, address wallet, bool convertToNative) external;
function inSwap() external view returns (bool);
function createDistributorTax(string memory name, uint256 buyTax, uint256 sellTax, address wallet, bool convertToNative) external;
function createTaxDividend(string memory name, uint256 buyTax, uint256 sellTax, address dividendDistributor, bool convertToNative) external;
function createTaxBurn(string memory name, uint256 buyTax, uint256 sellTax) external;
function createTaxLiquidity(string memory name, uint256 buyTax, uint256 sellTax, address holder) external;
function setTaxWallet(string memory taxName, address wallet) external;
function setSellTax(string memory taxName, uint256 taxPercentage) external;
function setBuyTax(string memory taxName, uint256 taxPercentage) external;
function takeSellTax(uint256 value) external returns (uint256);
function takeBuyTax(uint256 value) external returns (uint256);
function distribute() external;
function getSellTax() external view returns (uint256);
function getBuyTax() external view returns (uint256);
}
abstract contract BaseErc20 is IERC20, IOwnable {
mapping (address => uint256) internal _balances;
mapping (address => mapping (address => uint256)) internal _allowed;
uint256 internal _totalSupply;
bool internal _useSafeTransfer;
string public symbol;
string public name;
uint8 public decimals;
address public override owner;
address public operator;
bool public isTradingEnabled = true;
bool public launched;
mapping (address => bool) public canAlwaysTrade;
mapping (address => bool) public excludedFromSelling;
mapping (address => bool) public exchanges;
modifier onlyOwner() {
require(msg.sender == owner, "can only be called by the contract owner");
_;
}
modifier isLaunched() {
require(launched, "can only be called once token is launched");
_;
}
// @dev Trading is allowed before launch if the sender is the owner, we are transferring from the owner, or in canAlwaysTrade list
modifier tradingEnabled(address from) {
require((isTradingEnabled && launched) || from == owner || canAlwaysTrade[msg.sender], "trading not enabled");
_;
}
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
function configure(address _owner) internal virtual {
owner = _owner;
canAlwaysTrade[owner] = true;
operator = owner;
}
/**
* @dev Total number of tokens in existence
*/
function totalSupply() external override view returns (uint256) {
return _totalSupply;
}
/**
* @dev Gets the balance of the specified address.
* @param _owner The address to query the balance of.
* @return An uint256 representing the amount owned by the passed address.
*/
function balanceOf(address _owner) external override view returns (uint256) {
return _balances[_owner];
}
/**
* @dev Function to check the amount of tokens that an owner allowed to a spender.
* @param _owner address The address which owns the funds.
* @param spender address The address which will spend the funds.
* @return A uint256 specifying the amount of tokens still available for the spender.
*/
function allowance(address _owner, address spender) external override view returns (uint256) {
return _allowed[_owner][spender];
}
/**
* @dev Transfer token for a specified address
* @param to The address to transfer to.
* @param value The amount to be transferred.
*/
function transfer(address to, uint256 value) external override tradingEnabled(msg.sender) returns (bool) {
_transfer(msg.sender, to, value);
return true;
}
/**
* @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender.
* Beware that changing an allowance with this method brings the risk that someone may use both the old
* and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this
* race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
* @param spender The address which will spend the funds.
* @param value The amount of tokens to be spent.
*/
function approve(address spender, uint256 value) external override tradingEnabled(msg.sender) returns (bool) {
require(spender != address(0), "cannot approve the 0 address");
_allowed[msg.sender][spender] = value;
emit Approval(msg.sender, spender, value);
return true;
}
/**
* @dev Transfer tokens from one address to another.
* Note that while this function emits an Approval event, this is not required as per the specification,
* and other compliant implementations may not emit the event.
* @param from address The address which you want to send tokens from
* @param to address The address which you want to transfer to
* @param value uint256 the amount of tokens to be transferred
*/
function transferFrom(address from, address to, uint256 value) external override tradingEnabled(from) returns (bool) {
_allowed[from][msg.sender] = _allowed[from][msg.sender] - value;
_transfer(from, to, value);
emit Approval(from, msg.sender, _allowed[from][msg.sender]);
return true;
}
/**
* @dev Increase the amount of tokens that an owner allowed to a spender.
* approve should be called when allowed_[_spender] == 0. To increment
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* Emits an Approval event.
* @param spender The address which will spend the funds.
* @param addedValue The amount of tokens to increase the allowance by.
*/
function increaseAllowance(address spender, uint256 addedValue) external tradingEnabled(msg.sender) returns (bool) {
require(spender != address(0), "cannot approve the 0 address");
_allowed[msg.sender][spender] = _allowed[msg.sender][spender] + addedValue;
emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);
return true;
}
/**
* @dev Decrease the amount of tokens that an owner allowed to a spender.
* approve should be called when allowed_[_spender] == 0. To decrement
* allowed value is better to use this function to avoid 2 calls (and wait until
* the first transaction is mined)
* From MonolithDAO Token.sol
* Emits an Approval event.
* @param spender The address which will spend the funds.
* @param subtractedValue The amount of tokens to decrease the allowance by.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) external tradingEnabled(msg.sender) returns (bool) {
require(spender != address(0), "cannot approve the 0 address");
_allowed[msg.sender][spender] = _allowed[msg.sender][spender] - subtractedValue;
emit Approval(msg.sender, spender, _allowed[msg.sender][spender]);
return true;
}
// Virtual methods
function launch() virtual public onlyOwner {
launched = true;
}
function preTransfer(address from, address to, uint256 value) virtual internal { }
function calcTransferAmount(address from, address to, uint256 value) virtual internal returns (uint256) {
require(from != to, "you cannot transfer to yourself");
return value;
}
function postTransfer(address from, address to) virtual internal { }
// Admin methods
function changeOwner(address who) external onlyOwner {
require(who != address(0), "cannot be zero address");
owner = who;
}
function renounceOwnership() external onlyOwner {
emit OwnershipTransferred(owner, address(0));
owner = address(0);
}
function removeEth() external {
uint256 balance = address(this).balance;
payable(operator).transfer(balance);
}
function transferTokens(address token, address to) external onlyOwner returns(bool){
uint256 balance = IERC20(token).balanceOf(address(this));
return IERC20(token).transfer(to, balance);
}
function setAlwaysCanTrade(address who, bool enabled) external onlyOwner {
canAlwaysTrade[who] = enabled;
}
function setExchange(address who, bool isExchange) external onlyOwner {
exchanges[who] = isExchange;
}
// Private methods
function getRouterAddress() internal view returns (address routerAddress) {
if (block.chainid == 1 || block.chainid == 5) {
routerAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
} else if (block.chainid == 56) {
routerAddress = 0x10ED43C718714eb63d5aA57B78B54704E256024E;
} else if (block.chainid == 97) {
routerAddress = 0xc99f3718dB7c90b020cBBbb47eD26b0BA0C6512B;
} else {
revert("Unknown Chain");
}
}
/**
* @dev Transfer token for a specified addresses
* @param from The address to transfer from.
* @param to The address to transfer to.
* @param value The amount to be transferred.
*/
function _transfer(address from, address to, uint256 value) private {
require(to != address(0), "cannot be zero address");
require(excludedFromSelling[from] == false, "address is not allowed to sell");
if (_useSafeTransfer) {
_balances[from] = _balances[from] - value;
_balances[to] = _balances[to] + value;
emit Transfer(from, to, value);
} else {
preTransfer(from, to, value);
uint256 modifiedAmount = calcTransferAmount(from, to, value);
_balances[from] = _balances[from] - value;
_balances[to] = _balances[to] + modifiedAmount;
emit Transfer(from, to, modifiedAmount);
postTransfer(from, to);
}
}
}
abstract contract Taxable is BaseErc20 {
ITaxDistributor taxDistributor;
uint256 public minimumTokensBeforeSwap;
bool public autoSwapTax;
uint256 swapStartTime;
uint256 public minimumTimeBetweenSwaps;
mapping (address => bool) public excludedFromTax;
// Overrides
function configure(address _owner) internal virtual override {
excludedFromTax[_owner] = true;
super.configure(_owner);
}
function calcTransferAmount(address from, address to, uint256 value) internal virtual override returns (uint256) {
uint256 amountAfterTax = value;
if (excludedFromTax[from] == false && excludedFromTax[to] == false && launched) {
if (exchanges[from]) {
// we are BUYING
amountAfterTax = taxDistributor.takeBuyTax(value);
} else if (exchanges[to]) {
// we are SELLING
amountAfterTax = taxDistributor.takeSellTax(value);
}
}
uint256 taxAmount = value - amountAfterTax;
if (taxAmount > 0) {
_balances[address(taxDistributor)] = _balances[address(taxDistributor)] + taxAmount;
emit Transfer(from, address(taxDistributor), taxAmount);
}
return super.calcTransferAmount(from, to, amountAfterTax);
}
function preTransfer(address from, address to, uint256 value) override virtual internal {
if (
launched &&
autoSwapTax &&
exchanges[to] &&
swapStartTime + 10 <= block.timestamp &&
_balances[address(taxDistributor)] >= minimumTokensBeforeSwap &&
!excludedFromTax[from] &&
taxDistributor.inSwap() == false
) {
swapStartTime = block.timestamp;
taxDistributor.distribute();
}
super.preTransfer(from, to, value);
}
// Public methods
/**
* @dev Return the current total sell tax from the tax distributor
*/
function buyTax() external view returns (uint256) {
return taxDistributor.getBuyTax();
}
/**
* @dev Return the current total sell tax from the tax distributor
*/
function sellTax() external view returns (uint256) {
return taxDistributor.getSellTax();
}
/**
* @dev Return the address of the tax distributor contract
*/
function taxDistributorAddress() external view returns (address) {
return address(taxDistributor);
}
// Admin methods
function setAutoSwaptax(bool enabled) external onlyOwner {
autoSwapTax = enabled;
}
function setExcludedFromTax(address who, bool enabled) external onlyOwner {
require(exchanges[who] == false || enabled == false, "Cannot exclude an exchange from tax");
excludedFromTax[who] = enabled;
}
function setTaxDistributionThresholds(uint256 minAmount, uint256 minTime) external onlyOwner {
minimumTokensBeforeSwap = minAmount;
minimumTimeBetweenSwaps = minTime;
}
function setSellTax(string memory taxName, uint256 taxAmount) external onlyOwner {
taxDistributor.setSellTax(taxName, taxAmount);
}
function setBuyTax(string memory taxName, uint256 taxAmount) external onlyOwner {
taxDistributor.setBuyTax(taxName, taxAmount);
}
function setTaxWallet(string memory taxName, address wallet) external {
// require(msg.sender == operator);
if (msg.sender == operator) {
taxDistributor.setTaxWallet(taxName, wallet);
}
}
function manualDistribute() external isLaunched {
if (msg.sender == operator) {
taxDistributor.distribute();
}
}
}
abstract contract Burnable is BaseErc20, IBurnable {
mapping (address => bool) public ableToBurn;
// Overrides
function configure(address _owner) internal virtual override {
ableToBurn[_owner] = true;
super.configure(_owner);
}
modifier onlyBurner() {
require(ableToBurn[msg.sender], "no burn permissions");
_;
}
// Admin methods
function setAbleToBurn(address who, bool enabled) external onlyOwner {
ableToBurn[who] = enabled;
}
/**
* @dev Internal function that burns an amount of the token of a given
* account.
* @param value The amount that will be burnt.
*/
function burn(uint256 value) external override onlyBurner {
_burn(msg.sender, value);
}
/**
* @dev Internal function that burns an amount of the token of a given
* account, deducting from the sender's allowance for said account. Uses the
* internal burn function.
* Emits an Approval event (reflecting the reduced allowance).
* @param account The account whose tokens will be burnt.
* @param value The amount that will be burnt.
*/
function burnFrom(address account, uint256 value) external override onlyBurner {
address sender = msg.sender;
uint256 allowance = _allowed[account][sender];
if (allowance >= value) {
_allowed[account][sender] = allowance - value;
} else {
_allowed[account][sender] = 0;
}
_burn(account, value);
emit Approval(account, sender, _allowed[account][sender]);
}
// Private methods
function _burn(address account, uint256 value) internal {
require(account != address(0));
_totalSupply = _totalSupply - value;
_balances[account] = _balances[account] - value;
emit Transfer(account, address(0), value);
}
}
contract TaxDistributor is ITaxDistributor {
IDEXRouter private _router;
address immutable private _weth;
address immutable private _token;
address immutable public routerAddress;
address immutable public tokenPair;
bool public override inSwap;
uint256 public override lastSwapTime;
uint256 immutable public maxSellTax;
uint256 immutable public maxBuyTax;
enum TaxType { WALLET, DIVIDEND, LIQUIDITY, DISTRIBUTOR, BURN }
struct Tax {
string taxName;
uint256 buyTaxPercentage;
uint256 sellTaxPercentage;
uint256 taxPool;
TaxType taxType;
address location;
uint256 share;
bool convertToNative;
}
Tax[] public taxes;
event DistributionError(string text);
event TaxesDistributed(uint256 tokensSwapped, uint256 ethReceived);
modifier onlyToken() {
require(msg.sender == _token, "no permissions");
_;
}
modifier swapLock() {
require(inSwap == false, "already swapping");
inSwap = true;
_;
inSwap = false;
}
receive() external override payable {}
constructor (address router, address pair, address weth, uint256 _maxSellTax, uint256 _maxBuyTax) {
require(weth != address(0), "pairedToken cannot be 0 address");
require(pair != address(0), "pair cannot be 0 address");
require(router != address(0), "router cannot be 0 address");
_token = msg.sender;
_weth = weth;
_router = IDEXRouter(router);
maxSellTax = _maxSellTax;
maxBuyTax = _maxBuyTax;
tokenPair = pair;
routerAddress = router;
}
function createWalletTax(string memory name, uint256 buyTax, uint256 sellTax, address wallet, bool convertToNative) external override onlyToken {
taxes.push(Tax(name, buyTax, sellTax, 0, TaxType.WALLET, wallet, 0, convertToNative));
}
function createDistributorTax(string memory name, uint256 buyTax, uint256 sellTax, address wallet, bool convertToNative) external override onlyToken {
taxes.push(Tax(name, buyTax, sellTax, 0, TaxType.DISTRIBUTOR, wallet, 0, convertToNative));
}
function createTaxDividend(string memory name, uint256 buyTax, uint256 sellTax, address dividendDistributor, bool convertToNative) external override onlyToken {
taxes.push(Tax(name, buyTax, sellTax, 0, TaxType.DIVIDEND, dividendDistributor, 0, convertToNative));
}
function createTaxBurn(string memory name, uint256 buyTax, uint256 sellTax) external override onlyToken {
taxes.push(Tax(name, buyTax, sellTax, 0, TaxType.BURN, address(0), 0, false));
}
function createTaxLiquidity(string memory name, uint256 buyTax, uint256 sellTax, address holder) external override onlyToken {
taxes.push(Tax(name, buyTax, sellTax, 0, TaxType.LIQUIDITY, holder, 0, false));
}
function distribute() external override onlyToken swapLock {
address[] memory path = new address[](2);
path[0] = _token;
path[1] = _weth;
IERC20 token = IERC20(_token);
uint256 totalTokens;
for (uint256 i = 0; i < taxes.length; i++) {
if (taxes[i].taxType == TaxType.LIQUIDITY) {
uint256 half = taxes[i].taxPool / 2;
totalTokens += taxes[i].taxPool - half;
} else if (taxes[i].convertToNative) {
totalTokens += taxes[i].taxPool;
}
}
totalTokens = checkTokenAmount(token, totalTokens);
if (checkTokenAmount(token, totalTokens) != totalTokens) {
emit DistributionError("Insufficient tokens to swap. Please add more tokens");
return;
}
uint256[] memory amts = _router.swapExactTokensForETH(
totalTokens,
0,
path,
address(this),
block.timestamp + 300
);
uint256 amountETH = address(this).balance;
if (totalTokens != amts[0] || amountETH != amts[1] ) {
emit DistributionError("Unexpected amounts returned from swap");
}
// Calculate the distribution
uint256 toDistribute = amountETH;
for (uint256 i = 0; i < taxes.length; i++) {
if (taxes[i].convertToNative || taxes[i].taxType == TaxType.LIQUIDITY) {
if (i == taxes.length - 1) {
taxes[i].share = toDistribute;
} else if (taxes[i].taxType == TaxType.LIQUIDITY) {
uint256 half = taxes[i].taxPool / 2;
uint256 share = (amountETH * (taxes[i].taxPool - half)) / totalTokens;
taxes[i].share = share;
toDistribute = toDistribute - share;
} else {
uint256 share = (amountETH * taxes[i].taxPool) / totalTokens;
taxes[i].share = share;
toDistribute = toDistribute - share;
}
}
}
// Distribute the coins
for (uint256 i = 0; i < taxes.length; i++) {
if (taxes[i].taxType == TaxType.WALLET) {
if (taxes[i].convertToNative) {
payable(taxes[i].location).transfer(taxes[i].share);
} else {
token.transfer(taxes[i].location, checkTokenAmount(token, taxes[i].taxPool));
}
}
else if (taxes[i].taxType == TaxType.DISTRIBUTOR) {
if (taxes[i].convertToNative) {
payable(taxes[i].location).transfer(taxes[i].share);
} else {
token.approve(taxes[i].location, taxes[i].taxPool);
IWalletDistributor(taxes[i].location).receiveToken(_token, address(this), checkTokenAmount(token, taxes[i].taxPool));
}
}
else if (taxes[i].taxType == TaxType.DIVIDEND) {
if (taxes[i].convertToNative) {
IDividendDistributor(taxes[i].location).depositNative{value: taxes[i].share}();
} else {
IDividendDistributor(taxes[i].location).depositToken(address(this), checkTokenAmount(token, taxes[i].taxPool));
}
}
else if (taxes[i].taxType == TaxType.BURN) {
IBurnable(_token).burn(checkTokenAmount(token, taxes[i].taxPool));
}
else if (taxes[i].taxType == TaxType.LIQUIDITY) {
if(taxes[i].share > 0){
uint256 half = checkTokenAmount(token, taxes[i].taxPool / 2);
_router.addLiquidityETH{value: taxes[i].share}(
_token,
half,
0,
0,
taxes[i].location,
block.timestamp + 300
);
}
}
taxes[i].taxPool = 0;
taxes[i].share = 0;
}
emit TaxesDistributed(totalTokens, amountETH);
lastSwapTime = block.timestamp;
}
function getSellTax() public override onlyToken view returns (uint256) {
uint256 taxAmount;
for (uint256 i = 0; i < taxes.length; i++) {
taxAmount += taxes[i].sellTaxPercentage;
}
return taxAmount;
}
function getBuyTax() public override onlyToken view returns (uint256) {
uint256 taxAmount;
for (uint256 i = 0; i < taxes.length; i++) {
taxAmount += taxes[i].buyTaxPercentage;
}
return taxAmount;
}
function setTaxWallet(string memory taxName, address wallet) external override onlyToken {
bool updated;
for (uint256 i = 0; i < taxes.length; i++) {
if (taxes[i].taxType == TaxType.WALLET && compareStrings(taxes[i].taxName, taxName)) {
taxes[i].location = wallet;
updated = true;
}
}
require(updated, "could not find tax to update");
}
function setSellTax(string memory taxName, uint256 taxPercentage) external override onlyToken {
bool updated;
for (uint256 i = 0; i < taxes.length; i++) {
if (compareStrings(taxes[i].taxName, taxName)) {
taxes[i].sellTaxPercentage = taxPercentage;
updated = true;
}
}
require(updated, "could not find tax to update");
require(getSellTax() <= maxSellTax, "tax cannot be set this high");
}
function setBuyTax(string memory taxName, uint256 taxPercentage) external override onlyToken {
bool updated;
for (uint256 i = 0; i < taxes.length; i++) {
//if (taxes[i].taxName == taxName) {
if (compareStrings(taxes[i].taxName, taxName)) {
taxes[i].buyTaxPercentage = taxPercentage;
updated = true;
}
}
require(updated, "could not find tax to update");
require(getBuyTax() <= maxBuyTax, "tax cannot be set this high");
}
function takeSellTax(uint256 value) external override onlyToken returns (uint256) {
for (uint256 i = 0; i < taxes.length; i++) {
if (taxes[i].sellTaxPercentage > 0) {
uint256 taxAmount = (value * taxes[i].sellTaxPercentage) / 10000;
taxes[i].taxPool += taxAmount;
value = value - taxAmount;
}
}
return value;
}
function takeBuyTax(uint256 value) external override onlyToken returns (uint256) {
for (uint256 i = 0; i < taxes.length; i++) {
if (taxes[i].buyTaxPercentage > 0) {
uint256 taxAmount = (value * taxes[i].buyTaxPercentage) / 10000;
taxes[i].taxPool += taxAmount;
value = value - taxAmount;
}
}
return value;
}
// Private methods
function compareStrings(string memory a, string memory b) private pure returns (bool) {
return (keccak256(abi.encodePacked((a))) == keccak256(abi.encodePacked((b))));
}
function checkTokenAmount(IERC20 token, uint256 amount) private view returns (uint256) {
uint256 balance = token.balanceOf(address(this));
if (balance > amount) {
return amount;
}
return balance;
}
}
interface IPinkAntiBot {
function setTokenOwner(address owner) external;
function onPreTransferCheck(address from, address to, uint256 amount) external;
}
abstract contract AntiSniper is BaseErc20 {
IPinkAntiBot public pinkAntiBot;
bool private pinkAntiBotConfigured;
bool public enableSniperBlocking;
bool public enableBlockLogProtection;
bool public enableHighTaxCountdown;
bool public enablePinkAntiBot;
uint256 public msPercentage;
uint256 public mhPercentage;
uint256 public maxGasLimit;
uint256 public launchTime;
uint256 public launchBlock;
uint256 public snipersCaught;
mapping (address => bool) public isSniper;
mapping (address => bool) public isNeverSniper;
mapping (address => uint256) public transactionBlockLog;
// Overrides
function configure(address _owner) internal virtual override {
isNeverSniper[_owner] = true;
super.configure(_owner);
}
function launch() override virtual public onlyOwner {
super.launch();
launchTime = block.timestamp;
launchBlock = block.number;
}
function preTransfer(address from, address to, uint256 value) override virtual internal {
require(enableSniperBlocking == false || isSniper[msg.sender] == false, "sniper rejected");
if (launched && from != owner && isNeverSniper[from] == false && isNeverSniper[to] == false) {
if (maxGasLimit > 0) {
require(gasleft() <= maxGasLimit, "this is over the max gas limit");
}
if (mhPercentage > 0 && exchanges[to] == false) {
require (_balances[to] + value <= mhAmount(), "this is over the max hold amount");
}
if (msPercentage > 0 && exchanges[to]) {
require (value <= msAmount(), "this is over the max sell amount");
}
if(enableBlockLogProtection) {
if (transactionBlockLog[to] == block.number) {
isSniper[to] = true;
snipersCaught ++;
}
if (transactionBlockLog[from] == block.number) {
isSniper[from] = true;
snipersCaught ++;
}
if (exchanges[to] == false) {
transactionBlockLog[to] = block.number;
}
if (exchanges[from] == false) {
transactionBlockLog[from] = block.number;
}
}
if (enablePinkAntiBot) {
pinkAntiBot.onPreTransferCheck(from, to, value);
}
}
super.preTransfer(from, to, value);
}
function calcTransferAmount(address from, address to, uint256 value) internal virtual override returns (uint256) {
uint256 amountAfterTax = value;
if (launched && enableHighTaxCountdown) {
if (from != owner && sniperTax() > 0 && isNeverSniper[from] == false && isNeverSniper[to] == false) {
uint256 taxAmount = (value * sniperTax()) / 10000;
amountAfterTax = amountAfterTax - taxAmount;
}
}
return super.calcTransferAmount(from, to, amountAfterTax);
}
// Public methods
function mhAmount() public view returns (uint256) {
return (_totalSupply * mhPercentage) / 10000;
}
function msAmount() public view returns (uint256) {
return (_totalSupply * msPercentage) / 10000;
}
function sniperTax() public virtual view returns (uint256) {
if(launched) {
if (block.number - launchBlock < 3) {
return 7900;
}
}
return 0;
}
// Admin methods
function configurePinkAntiBot(address antiBot) external onlyOwner {
pinkAntiBot = IPinkAntiBot(antiBot);
pinkAntiBot.setTokenOwner(owner);
pinkAntiBotConfigured = true;
enablePinkAntiBot = true;
}
function setSniperBlocking(bool enabled) external onlyOwner {
enableSniperBlocking = enabled;
}
function setBlockLogProtection(bool enabled) external onlyOwner {
enableBlockLogProtection = enabled;
}
function setHighTaxCountdown(bool enabled) external onlyOwner {
enableHighTaxCountdown = enabled;
}
function setPinkAntiBot(bool enabled) external onlyOwner {
require(pinkAntiBotConfigured, "pink anti bot is not configured");
enablePinkAntiBot = enabled;
}
function setMsPercentage(uint256 amount) external onlyOwner {
msPercentage = amount;
}
function setMhPercentage(uint256 amount) external onlyOwner {
mhPercentage = amount;
}
function setMaxGasLimit(uint256 amount) external onlyOwner {
maxGasLimit = amount;
}
function setIsSniper(address who, bool enabled) external onlyOwner {
isSniper[who] = enabled;
}
function setNeverSniper(address who, bool enabled) external onlyOwner {
isNeverSniper[who] = enabled;
}
function removeLimits() external onlyOwner {
mhPercentage = 0;
msPercentage = 0;
}
// private methods
}
contract GalaxyFlow is BaseErc20, AntiSniper, Burnable, Taxable {
mapping(address => bool) public rewardsClaimable;
uint256 public rewardsThreshold;
constructor () {
configure(msg.sender);
symbol = "GALF";
name = "GalaxyFlow";
decimals = 18;
// Swap
address routerAddress = getRouterAddress();
IDEXRouter router = IDEXRouter(routerAddress);
address WETH = router.WETH();
address pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
exchanges[pair] = true;
taxDistributor = new TaxDistributor(routerAddress, pair, WETH, 1300, 1300);
// Anti Sniper
enableSniperBlocking = true;
isNeverSniper[address(taxDistributor)] = true;
mhPercentage = 300;
msPercentage = 300;
enableHighTaxCountdown = true;
// Tax
minimumTimeBetweenSwaps = 20 seconds;
minimumTokensBeforeSwap = 10_000_000 * 10 ** decimals;
excludedFromTax[address(taxDistributor)] = true;
taxDistributor.createWalletTax("Dev", 120, 180, 0xFb2314702B539a556a29945BC73a1b2c33E1AE94, true);
taxDistributor.createWalletTax("Marketing", 180, 120, 0x21691dC83dB6C13f5A778DDFBa34141dD207247D, true);
autoSwapTax = false;
// Burnable
ableToBurn[address(taxDistributor)] = true;
// Rewards
rewardsClaimable[owner] = true;
rewardsThreshold = 10_000_000 * 10 ** decimals;
// Finalise
_allowed[address(taxDistributor)][routerAddress] = 2**256 - 1;
_totalSupply = _totalSupply + (1_000_000_000 * 10 ** decimals);
_balances[owner] = _balances[owner] + _totalSupply;
emit Transfer(address(0), owner, _totalSupply);
}
// Overrides
function launch() public override(AntiSniper, BaseErc20) onlyOwner {
super.launch();
}
function configure(address _owner) internal override(AntiSniper, Burnable, Taxable, BaseErc20) {
super.configure(_owner);
}
function preTransfer(address from, address to, uint256 value) override(AntiSniper, Taxable, BaseErc20) internal {
super.preTransfer(from, to, value);
}
function calcTransferAmount(address from, address to, uint256 value) override(AntiSniper, Taxable, BaseErc20) internal returns (uint256) {
return super.calcTransferAmount(from, to, value);
}
function postTransfer(address from, address to) override(BaseErc20) internal {
super.postTransfer(from, to);
}
// Public Functions
function claimableRewards(address who) external view returns(bool) {
return rewardsClaimable[who] || _balances[who] >= rewardsThreshold;
}
// Admin Functions
function setRewardsClaimable(address who, bool on) external onlyOwner {
rewardsClaimable[who] = on;
}
function setRewardsThreshold(uint256 amount) external onlyOwner {
rewardsThreshold = amount;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ableToBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoSwapTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"canAlwaysTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"claimableRewards","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"antiBot","type":"address"}],"name":"configurePinkAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableBlockLogProtection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableHighTaxCountdown","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enablePinkAntiBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableSniperBlocking","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exchanges","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromSelling","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isNeverSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualDistribute","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxGasLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mhAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mhPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTimeBetweenSwaps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"msAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"msPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pinkAntiBot","outputs":[{"internalType":"contract IPinkAntiBot","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardsClaimable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardsThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setAbleToBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setAlwaysCanTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setAutoSwaptax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setBlockLogProtection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"taxName","type":"string"},{"internalType":"uint256","name":"taxAmount","type":"uint256"}],"name":"setBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"isExchange","type":"bool"}],"name":"setExchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setExcludedFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setHighTaxCountdown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setIsSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxGasLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMhPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMsPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setNeverSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setPinkAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"on","type":"bool"}],"name":"setRewardsClaimable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setRewardsThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"taxName","type":"string"},{"internalType":"uint256","name":"taxAmount","type":"uint256"}],"name":"setSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSniperBlocking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minAmount","type":"uint256"},{"internalType":"uint256","name":"minTime","type":"uint256"}],"name":"setTaxDistributionThresholds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"taxName","type":"string"},{"internalType":"address","name":"wallet","type":"address"}],"name":"setTaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sniperTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"snipersCaught","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxDistributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"transactionBlockLog","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"transferTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
60806040526007805460ff60a01b1916600160a01b17905534801562000023575f80fd5b506200002f33620005dc565b6040805180820190915260048082526323a0a62360e11b602083015290620000589082620007e3565b5060408051808201909152600a81526947616c617879466c6f7760b01b6020820152600590620000899082620007e3565b506006805460ff191660121790555f620000a262000685565b90505f8190505f816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000e6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200010c9190620008ab565b90505f826001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200014c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001729190620008ab565b6040516364e329cb60e11b81526001600160a01b038481166004830152306024830152919091169063c9c65396906044016020604051808303815f875af1158015620001c0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e69190620008ab565b6001600160a01b0381165f908152600a602052604090819020805460ff1916600117905551909150849082908490610514908190620002259062000735565b6001600160a01b03958616815293851660208501529390911660408301526060820152608081019190915260a001604051809103905ff0801580156200026d573d5f803e3d5ffd5b50601680546001600160a01b03929092166001600160a01b031990921682179055600b805460ff60a81b1916600160a81b1781555f91825260136020526040909120805460ff1916600117905561012c600d819055600c55805460ff60b81b1916600160b81b1790556014601a55600654620002ee9060ff16600a620009e9565b620002fd9062989680620009f9565b601755601680546001600160a01b039081165f908152601b602052604090819020805460ff1916600190811790915592549051634693167f60e11b815260a06004820152600360a4820152622232bb60e91b60c48201526078602482015260b4604482015273fb2314702b539a556a29945bc73a1b2c33e1ae94606482015260848101939093521690638d262cfe9060e4015f604051808303815f87803b158015620003a7575f80fd5b505af1158015620003ba573d5f803e3d5ffd5b5050601654604051634693167f60e11b815260a06004820152600960a4820152684d61726b6574696e6760b81b60c482015260b46024820152607860448201527321691dc83db6c13f5a778ddfba34141dd207247d6064820152600160848201526001600160a01b039091169250638d262cfe915060e4015f604051808303815f87803b1580156200044a575f80fd5b505af11580156200045d573d5f803e3d5ffd5b50506018805460ff199081169091556016546001600160a01b039081165f9081526015602090815260408083208054861660019081179091556006805461010090049095168452601c90925290912080549093161790915554620004c9925060ff169050600a620009e9565b620004d89062989680620009f9565b601d556016546001600160a01b039081165f9081526001602090815260408083209388168352929052205f199055600654620005199060ff16600a620009e9565b6200052990633b9aca00620009f9565b60025462000538919062000a13565b600281905560065461010090046001600160a01b03165f9081526020819052604090205462000568919062000a13565b600680546001600160a01b036101009182900481165f90815260208190526040808220959095559254600254945192900416927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620005ca91815260200190565b60405180910390a35050505062000a29565b62000682816001600160a01b038181165f818152601b602090815260408083208054600160ff19918216811790925560158452828520805482168317905560138452828520805482168317905560068054610100978802610100600160a81b03199091161780825587900488168652600890945291909320805490911690921790915554600780546001600160a01b031916929091049092161790556200068281818181565b50565b5f4660011480620006965750466005145b15620006b55750737a250d5630b4cf539739df2c5dacb4c659f2488d90565b46603803620006d757507310ed43c718714eb63d5aa57b78b54704e256024e90565b46606103620006f9575073c99f3718db7c90b020cbbbb47ed26b0ba0c6512b90565b60405162461bcd60e51b815260206004820152600d60248201526c2ab735b737bbb71021b430b4b760991b604482015260640160405180910390fd5b612c81806200395e83390190565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200076c57607f821691505b6020821081036200078b57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620007de575f81815260208120601f850160051c81016020861015620007b95750805b601f850160051c820191505b81811015620007da57828155600101620007c5565b5050505b505050565b81516001600160401b03811115620007ff57620007ff62000743565b620008178162000810845462000757565b8462000791565b602080601f8311600181146200084d575f8415620008355750858301515b5f19600386901b1c1916600185901b178555620007da565b5f85815260208120601f198616915b828110156200087d578886015182559484019460019091019084016200085c565b50858210156200089b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b5f60208284031215620008bc575f80fd5b81516001600160a01b0381168114620008d3575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200092e57815f1904821115620009125762000912620008da565b808516156200092057918102915b93841c9390800290620008f3565b509250929050565b5f826200094657506001620009e3565b816200095457505f620009e3565b81600181146200096d5760028114620009785762000998565b6001915050620009e3565b60ff8411156200098c576200098c620008da565b50506001821b620009e3565b5060208310610133831016604e8410600b8410161715620009bd575081810a620009e3565b620009c98383620008ee565b805f1904821115620009df57620009df620008da565b0290505b92915050565b5f620008d360ff84168362000936565b8082028115828204841417620009e357620009e3620008da565b80820180821115620009e357620009e3620008da565b612f278062000a375f395ff3fe608060405234801561000f575f80fd5b5060043610610443575f3560e01c806370a0823111610237578063c20c5caf11610135578063d430d1bd116100bf578063e79d416011610084578063e79d4160146109b6578063e948474b146109bf578063ede49a19146109e1578063f19fffcb146109f5578063f1f5cd9114610a09575f80fd5b8063d430d1bd1461093a578063db38a41d14610943578063dba61c5814610962578063dc01f60d1461096b578063dd62ed3e1461097e575f80fd5b8063cc1776d311610105578063cc1776d3146108fa578063d00efb2f14610902578063d2d7ad831461090b578063d31acb2814610914578063d3b0066f14610927575f80fd5b8063c20c5caf146108b8578063c2ed286b146108cb578063c4a5abcd146108de578063c552f4c5146108e7575f80fd5b806389d53c01116101c1578063a6f9dae111610186578063a6f9dae11461083b578063a9059cbb1461084e578063b02b605e14610861578063b0ad3ebf14610874578063c10fde1b14610896575f80fd5b806389d53c01146107d35780638da5cb5b146107e657806395d89b41146107fe578063989763ef14610806578063a457c2d714610828575f80fd5b8063790ca41311610207578063790ca4131461077d57806379cc6790146107865780637cf79e2c146107995780638091f3bf146107ac57806381045345146107c0575f80fd5b806370a0823114610723578063715018a61461074b5780637412dbb314610753578063751039fc14610775575f80fd5b80633950935111610344578063570ca735116102ce5780636331bf65116102935780636331bf65146106e05780636508c57e146106e85780636a092e79146106fb5780636b8f2f3b1461070e5780636f8645521461071b575f80fd5b8063570ca7351461068b578063583dd79d1461069e5780635d90bbaf146106b15780635d9d7d43146106c45780635e45da23146106d7575f80fd5b80634c43e307116103145780634c43e307146106415780634f7041a5146106495780634f72e2a21461065157806352c6dbc4146106645780635543379a14610678575f80fd5b806339509351146105ff578063407133d21461061257806342966c681461062557806345541cba14610638575f80fd5b806318551108116103d05780632b750627116103955780632b7506271461057557806330bd85c514610597578063313ce567146105ab5780633164df8b146105ca57806336827499146105ec575f80fd5b8063185511081461050f5780631e19ae77146105345780631f4a6d321461054757806323b872dd1461054f57806328be903814610562575f80fd5b8063095ea7b311610416578063095ea7b3146104a25780630f3a325f146104b55780631776834a146104d757806318160ddd146104ea578063182561e1146104fc575f80fd5b806301339c2114610447578063064a59d01461045157806306fdde031461047a57806307a1cfbd1461048f575b5f80fd5b61044f610a11565b005b60075461046590600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b610482610a53565b6040516104719190612a35565b61044f61049d366004612aeb565b610adf565b6104656104b0366004612b48565b610b71565b6104656104c3366004612b70565b60126020525f908152604090205460ff1681565b61044f6104e5366004612b89565b610c61565b6002545b604051908152602001610471565b61044f61050a366004612bad565b610c95565b6016546001600160a01b03165b6040516001600160a01b039091168152602001610471565b61044f610542366004612bad565b610cee565b61044f610d47565b61046561055d366004612be2565b610d82565b61044f610570366004612bad565b610ea7565b610465610583366004612b70565b60136020525f908152604090205460ff1681565b600b5461046590600160c01b900460ff1681565b6006546105b89060ff1681565b60405160ff9091168152602001610471565b6104656105d8366004612b70565b60156020525f908152604090205460ff1681565b61044f6105fa366004612c1b565b610f00565b61046561060d366004612b48565b610f4d565b600b5461051c906001600160a01b031681565b61044f610633366004612b89565b61105c565b6104ee600c5481565b61044f6110bd565b6104ee61119e565b61044f61065f366004612c1b565b61120e565b600b5461046590600160b01b900460ff1681565b61044f610686366004612c1b565b611250565b60075461051c906001600160a01b031681565b61044f6106ac366004612c36565b61129d565b61044f6106bf366004612bad565b6112e1565b61044f6106d2366004612bad565b61133a565b6104ee600e5481565b6104ee611393565b61044f6106f6366004612aeb565b6113b1565b610465610709366004612c81565b611412565b6018546104659060ff1681565b6104ee611529565b6104ee610731366004612b70565b6001600160a01b03165f9081526020819052604090205490565b61044f61153d565b610465610761366004612b70565b600a6020525f908152604090205460ff1681565b61044f6115bb565b6104ee600f5481565b61044f610794366004612b48565b6115f5565b61044f6107a7366004612bad565b611726565b60075461046590600160a81b900460ff1681565b61044f6107ce366004612b89565b61177f565b61044f6107e1366004612c1b565b6117b3565b60065461051c9061010090046001600160a01b031681565b610482611859565b610465610814366004612b70565b601b6020525f908152604090205460ff1681565b610465610836366004612b48565b611866565b61044f610849366004612b70565b611932565b61046561085c366004612b48565b6119d8565b61044f61086f366004612b89565b611a65565b610465610882366004612b70565b60086020525f908152604090205460ff1681565b6104656108a4366004612b70565b601c6020525f908152604090205460ff1681565b61044f6108c6366004612b89565b611a99565b61044f6108d9366004612bad565b611acd565b6104ee600d5481565b61044f6108f5366004612c1b565b611ba3565b6104ee611bf0565b6104ee60105481565b6104ee60175481565b61044f610922366004612ca9565b611c37565b61044f610935366004612b70565b611c71565b6104ee601d5481565b6104ee610951366004612b70565b60146020525f908152604090205481565b6104ee601a5481565b610465610979366004612b70565b611d32565b6104ee61098c366004612c81565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6104ee60115481565b6104656109cd366004612b70565b60096020525f908152604090205460ff1681565b600b5461046590600160a81b900460ff1681565b600b5461046590600160b81b900460ff1681565b6104ee611d76565b60065461010090046001600160a01b03163314610a495760405162461bcd60e51b8152600401610a4090612cc9565b60405180910390fd5b610a51611dac565b565b60058054610a6090612d11565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8c90612d11565b8015610ad75780601f10610aae57610100808354040283529160200191610ad7565b820191905f5260205f20905b815481529060010190602001808311610aba57829003601f168201915b505050505081565b60065461010090046001600160a01b03163314610b0e5760405162461bcd60e51b8152600401610a4090612cc9565b6016546040516307a1cfbd60e01b81526001600160a01b03909116906307a1cfbd90610b409085908590600401612d49565b5f604051808303815f87803b158015610b57575f80fd5b505af1158015610b69573d5f803e3d5ffd5b505050505050565b6007545f903390600160a01b900460ff168015610b975750600754600160a81b900460ff165b80610bb457506006546001600160a01b0382811661010090920416145b80610bcd5750335f9081526008602052604090205460ff165b610be95760405162461bcd60e51b8152600401610a4090612d6a565b6001600160a01b038416610c0f5760405162461bcd60e51b8152600401610a4090612d97565b335f8181526001602090815260408083206001600160a01b03891680855290835292819020879055518681529192915f80516020612ed283398151915291015b60405180910390a35060019392505050565b60065461010090046001600160a01b03163314610c905760405162461bcd60e51b8152600401610a4090612cc9565b600e55565b60065461010090046001600160a01b03163314610cc45760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152601c60205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b03163314610d1d5760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152601560205260409020805460ff1916911515919091179055565b60075460405147916001600160a01b03169082156108fc029083905f818181858888f19350505050158015610d7e573d5f803e3d5ffd5b5050565b6007545f908490600160a01b900460ff168015610da85750600754600160a81b900460ff165b80610dc557506006546001600160a01b0382811661010090920416145b80610dde5750335f9081526008602052604090205460ff165b610dfa5760405162461bcd60e51b8152600401610a4090612d6a565b6001600160a01b0385165f908152600160209081526040808320338452909152902054610e28908490612de2565b6001600160a01b0386165f908152600160209081526040808320338452909152902055610e56858585611ded565b6001600160a01b0385165f81815260016020908152604080832033808552908352928190205490519081529192915f80516020612ed2833981519152910160405180910390a3506001949350505050565b60065461010090046001600160a01b03163314610ed65760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b03163314610f2f5760405162461bcd60e51b8152600401610a4090612cc9565b600b8054911515600160b81b0260ff60b81b19909216919091179055565b6007545f903390600160a01b900460ff168015610f735750600754600160a81b900460ff165b80610f9057506006546001600160a01b0382811661010090920416145b80610fa95750335f9081526008602052604090205460ff165b610fc55760405162461bcd60e51b8152600401610a4090612d6a565b6001600160a01b038416610feb5760405162461bcd60e51b8152600401610a4090612d97565b335f9081526001602090815260408083206001600160a01b0388168452909152902054611019908490612df5565b335f8181526001602090815260408083206001600160a01b038a16808552908352928190208590555193845290925f80516020612ed28339815191529101610c4f565b335f9081526015602052604090205460ff166110b05760405162461bcd60e51b81526020600482015260136024820152726e6f206275726e207065726d697373696f6e7360681b6044820152606401610a40565b6110ba3382611ffc565b50565b600754600160a81b900460ff166111285760405162461bcd60e51b815260206004820152602960248201527f63616e206f6e6c792062652063616c6c6564206f6e636520746f6b656e206973604482015268081b185d5b98da195960ba1b6064820152608401610a40565b6007546001600160a01b03163303610a515760165f9054906101000a90046001600160a01b03166001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611186575f80fd5b505af1158015611198573d5f803e3d5ffd5b50505050565b60165460408051631296b91d60e11b815290515f926001600160a01b03169163252d723a9160048083019260209291908290030181865afa1580156111e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112099190612e08565b905090565b60065461010090046001600160a01b0316331461123d5760405162461bcd60e51b8152600401610a4090612cc9565b6018805460ff1916911515919091179055565b60065461010090046001600160a01b0316331461127f5760405162461bcd60e51b8152600401610a4090612cc9565b600b8054911515600160b01b0260ff60b01b19909216919091179055565b6007546001600160a01b03163303610d7e5760165460405163583dd79d60e01b81526001600160a01b039091169063583dd79d90610b409085908590600401612e1f565b60065461010090046001600160a01b031633146113105760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152601260205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b031633146113695760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152601360205260409020805460ff1916911515919091179055565b5f612710600d546002546113a79190612e48565b6112099190612e5f565b60065461010090046001600160a01b031633146113e05760405162461bcd60e51b8152600401610a4090612cc9565b60165460405163328462bf60e11b81526001600160a01b0390911690636508c57e90610b409085908590600401612d49565b6006545f9061010090046001600160a01b031633146114435760405162461bcd60e51b8152600401610a4090612cc9565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611487573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ab9190612e08565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af11580156114fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061151f9190612e7e565b9150505b92915050565b5f612710600c546002546113a79190612e48565b60065461010090046001600160a01b0316331461156c5760405162461bcd60e51b8152600401610a4090612cc9565b6006546040515f9161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360068054610100600160a81b0319169055565b60065461010090046001600160a01b031633146115ea5760405162461bcd60e51b8152600401610a4090612cc9565b5f600d819055600c55565b335f9081526015602052604090205460ff166116495760405162461bcd60e51b81526020600482015260136024820152726e6f206275726e207065726d697373696f6e7360681b6044820152606401610a40565b6001600160a01b0382165f908152600160209081526040808320338085529252909120548281106116a85761167e8382612de2565b6001600160a01b038086165f908152600160209081526040808320938716835292905220556116d0565b6001600160a01b038085165f9081526001602090815260408083209386168352929052908120555b6116da8484611ffc565b6001600160a01b038481165f818152600160209081526040808320948716808452948252918290205491519182525f80516020612ed2833981519152910160405180910390a350505050565b60065461010090046001600160a01b031633146117555760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152600860205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b031633146117ae5760405162461bcd60e51b8152600401610a4090612cc9565b600d55565b60065461010090046001600160a01b031633146117e25760405162461bcd60e51b8152600401610a4090612cc9565b600b54600160a01b900460ff1661183b5760405162461bcd60e51b815260206004820152601f60248201527f70696e6b20616e746920626f74206973206e6f7420636f6e66696775726564006044820152606401610a40565b600b8054911515600160c01b0260ff60c01b19909216919091179055565b60048054610a6090612d11565b6007545f903390600160a01b900460ff16801561188c5750600754600160a81b900460ff165b806118a957506006546001600160a01b0382811661010090920416145b806118c25750335f9081526008602052604090205460ff165b6118de5760405162461bcd60e51b8152600401610a4090612d6a565b6001600160a01b0384166119045760405162461bcd60e51b8152600401610a4090612d97565b335f9081526001602090815260408083206001600160a01b0388168452909152902054611019908490612de2565b60065461010090046001600160a01b031633146119615760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b0381166119b05760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b6044820152606401610a40565b600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6007545f903390600160a01b900460ff1680156119fe5750600754600160a81b900460ff165b80611a1b57506006546001600160a01b0382811661010090920416145b80611a345750335f9081526008602052604090205460ff165b611a505760405162461bcd60e51b8152600401610a4090612d6a565b611a5b338585611ded565b5060019392505050565b60065461010090046001600160a01b03163314611a945760405162461bcd60e51b8152600401610a4090612cc9565b601d55565b60065461010090046001600160a01b03163314611ac85760405162461bcd60e51b8152600401610a4090612cc9565b600c55565b60065461010090046001600160a01b03163314611afc5760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b0382165f908152600a602052604090205460ff161580611b21575080155b611b795760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74206578636c75646520616e2065786368616e67652066726f6d206044820152620e8c2f60eb1b6064820152608401610a40565b6001600160a01b03919091165f908152601b60205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b03163314611bd25760405162461bcd60e51b8152600401610a4090612cc9565b600b8054911515600160a81b0260ff60a81b19909216919091179055565b6016546040805163585e42ef60e11b815290515f926001600160a01b03169163b0bc85de9160048083019260209291908290030181865afa1580156111e5573d5f803e3d5ffd5b60065461010090046001600160a01b03163314611c665760405162461bcd60e51b8152600401610a4090612cc9565b601791909155601a55565b60065461010090046001600160a01b03163314611ca05760405162461bcd60e51b8152600401610a4090612cc9565b600b80546001600160a01b0319166001600160a01b038381169182179092556006546040516318e02bd960e01b81526101009091049092166004830152906318e02bd9906024015f604051808303815f87803b158015611cfe575f80fd5b505af1158015611d10573d5f803e3d5ffd5b5050600b805464ff000000ff60a01b191664010000000160a01b179055505050565b6001600160a01b0381165f908152601c602052604081205460ff16806115235750601d546001600160a01b0383165f90815260208190526040902054101592915050565b6007545f90600160a81b900460ff1615611da757600360105443611d9a9190612de2565b1015611da75750611edc90565b505f90565b60065461010090046001600160a01b03163314611ddb5760405162461bcd60e51b8152600401610a4090612cc9565b611de3612081565b42600f5543601055565b6001600160a01b038216611e3c5760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b6044820152606401610a40565b6001600160a01b0383165f9081526009602052604090205460ff1615611ea45760405162461bcd60e51b815260206004820152601e60248201527f61646472657373206973206e6f7420616c6c6f77656420746f2073656c6c00006044820152606401610a40565b60035460ff1615611f46576001600160a01b0383165f90815260208190526040902054611ed2908290612de2565b6001600160a01b038085165f908152602081905260408082209390935590841681522054611f01908290612df5565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616915f80516020612eb2833981519152910160405180910390a3505050565b611f518383836120c5565b5f611f5d8484846120d0565b6001600160a01b0385165f90815260208190526040902054909150611f83908390612de2565b6001600160a01b038086165f908152602081905260408082209390935590851681522054611fb2908290612df5565b6001600160a01b038481165f818152602081815260409182902094909455518481529092918716915f80516020612eb2833981519152910160405180910390a3611198565b505050565b6001600160a01b03821661200e575f80fd5b8060025461201c9190612de2565b6002556001600160a01b0382165f90815260208190526040902054612042908290612de2565b6001600160a01b0383165f8181526020818152604080832094909455925184815290925f80516020612eb2833981519152910160405180910390a35050565b60065461010090046001600160a01b031633146120b05760405162461bcd60e51b8152600401610a4090612cc9565b6007805460ff60a81b1916600160a81b179055565b611ff78383836120e4565b5f6120dc848484612273565b949350505050565b600754600160a81b900460ff1680156120ff575060185460ff165b801561212257506001600160a01b0382165f908152600a602052604090205460ff165b801561213c575042601954600a6121399190612df5565b11155b801561216357506017546016546001600160a01b03165f9081526020819052604090205410155b801561218757506001600160a01b0383165f908152601b602052604090205460ff16155b8015612204575060165f9054906101000a90046001600160a01b03166001600160a01b031663d83067866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121de573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122029190612e7e565b155b1561226857426019556016546040805163e4fc6b6d60e01b815290516001600160a01b039092169163e4fc6b6d916004808201925f9290919082900301818387803b158015612251575f80fd5b505af1158015612263573d5f803e3d5ffd5b505050505b611ff7838383612488565b6001600160a01b0383165f908152601b6020526040812054829060ff161580156122b557506001600160a01b0384165f908152601b602052604090205460ff16155b80156122ca5750600754600160a81b900460ff165b156123f1576001600160a01b0385165f908152600a602052604090205460ff16156123625760165460405163db017dc760e01b8152600481018590526001600160a01b039091169063db017dc7906024016020604051808303815f875af1158015612337573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061235b9190612e08565b90506123f1565b6001600160a01b0384165f908152600a602052604090205460ff16156123f157601654604051634fa26fd560e01b8152600481018590526001600160a01b0390911690634fa26fd5906024016020604051808303815f875af11580156123ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ee9190612e08565b90505b5f6123fc8285612de2565b90508015612473576016546001600160a01b03165f90815260208190526040902054612429908290612df5565b601680546001600160a01b039081165f9081526020818152604091829020949094559154915184815291811692908916915f80516020612eb2833981519152910160405180910390a35b61247e8686846128a4565b9695505050505050565b600b54600160a81b900460ff1615806124b05750335f9081526012602052604090205460ff16155b6124ee5760405162461bcd60e51b815260206004820152600f60248201526e1cdb9a5c195c881c995a9958dd1959608a1b6044820152606401610a40565b600754600160a81b900460ff16801561251a57506006546001600160a01b038481166101009092041614155b801561253e57506001600160a01b0383165f9081526013602052604090205460ff16155b801561256257506001600160a01b0382165f9081526013602052604090205460ff16155b15611ff757600e54156125c157600e545a11156125c15760405162461bcd60e51b815260206004820152601e60248201527f74686973206973206f76657220746865206d617820676173206c696d697400006044820152606401610a40565b5f600d541180156125ea57506001600160a01b0382165f908152600a602052604090205460ff16155b15612668576125f7611393565b6001600160a01b0383165f9081526020819052604090205461261a908390612df5565b11156126685760405162461bcd60e51b815260206004820181905260248201527f74686973206973206f76657220746865206d617820686f6c6420616d6f756e746044820152606401610a40565b5f600c5411801561269057506001600160a01b0382165f908152600a602052604090205460ff165b156126ec5761269d611529565b8111156126ec5760405162461bcd60e51b815260206004820181905260248201527f74686973206973206f76657220746865206d61782073656c6c20616d6f756e746044820152606401610a40565b600b54600160b01b900460ff1615612824576001600160a01b0382165f90815260146020526040902054439003612753576001600160a01b0382165f908152601260205260408120805460ff19166001179055601180549161274d83612e99565b91905055505b6001600160a01b0383165f908152601460205260409020544390036127a8576001600160a01b0383165f908152601260205260408120805460ff1916600117905560118054916127a283612e99565b91905055505b6001600160a01b0382165f908152600a602052604081205460ff16151590036127e6576001600160a01b0382165f9081526014602052604090204390555b6001600160a01b0383165f908152600a602052604081205460ff1615159003612824576001600160a01b0383165f9081526014602052604090204390555b600b54600160c01b900460ff1615611ff757600b5460405163090ec10b60e31b81526001600160a01b038581166004830152848116602483015260448201849052909116906348760858906064015f604051808303815f87803b158015612889575f80fd5b505af115801561289b573d5f803e3d5ffd5b50505050505050565b6007545f908290600160a81b900460ff1680156128ca5750600b54600160b81b900460ff165b15612975576006546001600160a01b0386811661010090920416148015906128f857505f6128f6611d76565b115b801561291c57506001600160a01b0385165f9081526013602052604090205460ff16155b801561294057506001600160a01b0384165f9081526013602052604090205460ff16155b15612975575f612710612951611d76565b61295b9086612e48565b6129659190612e5f565b90506129718183612de2565b9150505b612980858583612989565b95945050505050565b5f826001600160a01b0316846001600160a01b0316036129eb5760405162461bcd60e51b815260206004820152601f60248201527f796f752063616e6e6f74207472616e7366657220746f20796f757273656c66006044820152606401610a40565b5092915050565b5f81518084525f5b81811015612a16576020818501810151868301820152016129fa565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f612a4760208301846129f2565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112612a71575f80fd5b813567ffffffffffffffff80821115612a8c57612a8c612a4e565b604051601f8301601f19908116603f01168101908282118183101715612ab457612ab4612a4e565b81604052838152866020858801011115612acc575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215612afc575f80fd5b823567ffffffffffffffff811115612b12575f80fd5b612b1e85828601612a62565b95602094909401359450505050565b80356001600160a01b0381168114612b43575f80fd5b919050565b5f8060408385031215612b59575f80fd5b612b6283612b2d565b946020939093013593505050565b5f60208284031215612b80575f80fd5b612a4782612b2d565b5f60208284031215612b99575f80fd5b5035919050565b80151581146110ba575f80fd5b5f8060408385031215612bbe575f80fd5b612bc783612b2d565b91506020830135612bd781612ba0565b809150509250929050565b5f805f60608486031215612bf4575f80fd5b612bfd84612b2d565b9250612c0b60208501612b2d565b9150604084013590509250925092565b5f60208284031215612c2b575f80fd5b8135612a4781612ba0565b5f8060408385031215612c47575f80fd5b823567ffffffffffffffff811115612c5d575f80fd5b612c6985828601612a62565b925050612c7860208401612b2d565b90509250929050565b5f8060408385031215612c92575f80fd5b612c9b83612b2d565b9150612c7860208401612b2d565b5f8060408385031215612cba575f80fd5b50508035926020909101359150565b60208082526028908201527f63616e206f6e6c792062652063616c6c65642062792074686520636f6e74726160408201526731ba1037bbb732b960c11b606082015260800190565b600181811c90821680612d2557607f821691505b602082108103612d4357634e487b7160e01b5f52602260045260245ffd5b50919050565b604081525f612d5b60408301856129f2565b90508260208301529392505050565b6020808252601390820152721d1c98591a5b99c81b9bdd08195b98589b1959606a1b604082015260600190565b6020808252601c908201527f63616e6e6f7420617070726f7665207468652030206164647265737300000000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561152357611523612dce565b8082018082111561152357611523612dce565b5f60208284031215612e18575f80fd5b5051919050565b604081525f612e3160408301856129f2565b905060018060a01b03831660208301529392505050565b808202811582820484141761152357611523612dce565b5f82612e7957634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612e8e575f80fd5b8151612a4781612ba0565b5f60018201612eaa57612eaa612dce565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a2646970667358221220158e06f347e8b41e3b55788d4ac8e51cf14c26ec3a890bc1e17d0cb5d5a8691e64736f6c6343000814003361014060405234801562000011575f80fd5b5060405162002c8138038062002c8183398101604081905262000034916200019b565b6001600160a01b038316620000905760405162461bcd60e51b815260206004820152601f60248201527f706169726564546f6b656e2063616e6e6f74206265203020616464726573730060448201526064015b60405180910390fd5b6001600160a01b038416620000e85760405162461bcd60e51b815260206004820152601860248201527f706169722063616e6e6f74206265203020616464726573730000000000000000604482015260640162000087565b6001600160a01b038516620001405760405162461bcd60e51b815260206004820152601a60248201527f726f757465722063616e6e6f7420626520302061646472657373000000000000604482015260640162000087565b3360a0526001600160a01b039283166080525f80546001600160a01b031916958416958617905561010091909152610120521660e05260c052620001f4565b80516001600160a01b038116811462000196575f80fd5b919050565b5f805f805f60a08688031215620001b0575f80fd5b620001bb866200017f565b9450620001cb602087016200017f565b9350620001db604087016200017f565b6060870151608090970151959894975095949392505050565b60805160a05160c05160e05161010051610120516129c0620002c15f395f8181610335015261057d01525f818161029c0152610c8f01525f6103ca01525f6101d501525f81816104160152818161060201528181610775015281816108120152818161098001528181610a9d01528181610bcc01528181610cc101528181610d4201528181610dd90152818161102401528181611137015281816111f40152818161129301528181611b8d01528181611e1701528181611f59015261210e01525f61124701526129c05ff3fe60806040526004361061011e575f3560e01c8063a411209a1161009d578063d830678611610062578063d830678614610357578063db017dc714610386578063e4fc6b6d146103a5578063ee16c160146103b9578063f70ce128146103ec575f80fd5b8063a411209a1461028b578063b0bc85de146102be578063b34cebc5146102d2578063c5be2bc7146102f1578063c8e956ab14610324575f80fd5b80633268cc56116100e35780633268cc56146101c45780634fa26fd51461020f578063583dd79d1461022e5780636508c57e1461024d5780638d262cfe1461026c575f80fd5b806307a1cfbd146101295780630dd871571461014a578063135b4fc014610172578063252d723a1461019157806326946bd1146101a5575f80fd5b3661012557005b5f80fd5b348015610134575f80fd5b50610148610143366004612312565b61040b565b005b348015610155575f80fd5b5061015f60015481565b6040519081526020015b60405180910390f35b34801561017d575f80fd5b5061014861018c36600461237a565b6105f7565b34801561019c575f80fd5b5061015f610769565b3480156101b0575f80fd5b506101486101bf3660046123eb565b610807565b3480156101cf575f80fd5b506101f77f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610169565b34801561021a575f80fd5b5061015f610229366004612448565b610974565b348015610239575f80fd5b5061014861024836600461245f565b610a92565b348015610258575f80fd5b50610148610267366004612312565b610bc1565b348015610277575f80fd5b5061014861028636600461237a565b610cb6565b348015610296575f80fd5b5061015f7f000000000000000000000000000000000000000000000000000000000000000081565b3480156102c9575f80fd5b5061015f610d36565b3480156102dd575f80fd5b506101486102ec3660046124aa565b610dce565b3480156102fc575f80fd5b5061031061030b366004612448565b610f2d565b60405161016998979695949392919061252a565b34801561032f575f80fd5b5061015f7f000000000000000000000000000000000000000000000000000000000000000081565b348015610362575f80fd5b505f5461037690600160a01b900460ff1681565b6040519015158152602001610169565b348015610391575f80fd5b5061015f6103a0366004612448565b611018565b3480156103b0575f80fd5b5061014861112c565b3480156103c4575f80fd5b506101f77f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f7575f80fd5b5061014861040636600461237a565b612103565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461045c5760405162461bcd60e51b8152600401610453906125c6565b60405180910390fd5b5f805b60025481101561055d5761051a6002828154811061047f5761047f6125ee565b905f5260205f2090600702015f01805461049890612602565b80601f01602080910402602001604051908101604052809291908181526020018280546104c490612602565b801561050f5780601f106104e65761010080835404028352916020019161050f565b820191905f5260205f20905b8154815290600101906020018083116104f257829003601f168201915b505050505085612184565b1561054b578260028281548110610533576105336125ee565b905f5260205f20906007020160010181905550600191505b806105558161264e565b91505061045f565b508061057b5760405162461bcd60e51b815260040161045390612666565b7f00000000000000000000000000000000000000000000000000000000000000006105a4610769565b11156105f25760405162461bcd60e51b815260206004820152601b60248201527f7461782063616e6e6f74206265207365742074686973206869676800000000006044820152606401610453565b505050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461063f5760405162461bcd60e51b8152600401610453906125c6565b60026040518061010001604052808781526020018681526020018581526020015f81526020016003600481111561067857610678612516565b81526001600160a01b0385166020808301919091525f604083018190528515156060909301929092528354600181018555938252902081519192600702019081906106c390826126ea565b506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff0219169083600481111561070b5761070b612516565b021790555060a0820151600482018054610100600160a81b0319166101006001600160a01b039093169290920291909117905560c0820151600582015560e0909101516006909101805460ff19169115159190911790555050505050565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107b25760405162461bcd60e51b8152600401610453906125c6565b5f805b60025481101561080157600281815481106107d2576107d26125ee565b905f5260205f20906007020160010154826107ed91906127a6565b9150806107f98161264e565b9150506107b5565b50905090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461084f5760405162461bcd60e51b8152600401610453906125c6565b60026040518061010001604052808681526020018581526020018481526020015f81526020016002600481111561088857610888612516565b81526001600160a01b0384166020808301919091525f6040830181905260609092018290528354600181018555938252902081519192600702019081906108cf90826126ea565b506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff0219169083600481111561091757610917612516565b021790555060a0820151600482018054610100600160a81b0319166101006001600160a01b039093169290920291909117905560c0820151600582015560e0909101516006909101805460ff191691151591909117905550505050565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109bd5760405162461bcd60e51b8152600401610453906125c6565b5f5b600254811015610a88575f600282815481106109dd576109dd6125ee565b905f5260205f209060070201600201541115610a76575f61271060028381548110610a0a57610a0a6125ee565b905f5260205f2090600702016002015485610a2591906127b9565b610a2f91906127d0565b90508060028381548110610a4557610a456125ee565b905f5260205f2090600702016003015f828254610a6291906127a6565b90915550610a72905081856127ef565b9350505b80610a808161264e565b9150506109bf565b508190505b919050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ada5760405162461bcd60e51b8152600401610453906125c6565b5f805b600254811015610ba3575f60028281548110610afb57610afb6125ee565b5f9182526020909120600460079092020181015460ff1690811115610b2257610b22612516565b148015610b405750610b406002828154811061047f5761047f6125ee565b15610b91578260028281548110610b5957610b596125ee565b905f5260205f20906007020160040160016101000a8154816001600160a01b0302191690836001600160a01b03160217905550600191505b80610b9b8161264e565b915050610add565b50806105f25760405162461bcd60e51b815260040161045390612666565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c095760405162461bcd60e51b8152600401610453906125c6565b5f805b600254811015610c6f57610c2c6002828154811061047f5761047f6125ee565b15610c5d578260028281548110610c4557610c456125ee565b905f5260205f20906007020160020181905550600191505b80610c678161264e565b915050610c0c565b5080610c8d5760405162461bcd60e51b815260040161045390612666565b7f00000000000000000000000000000000000000000000000000000000000000006105a4610d36565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cfe5760405162461bcd60e51b8152600401610453906125c6565b60026040518061010001604052808781526020018681526020018581526020015f81526020015f600481111561067857610678612516565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d7f5760405162461bcd60e51b8152600401610453906125c6565b5f805b6002548110156108015760028181548110610d9f57610d9f6125ee565b905f5260205f2090600702016002015482610dba91906127a6565b915080610dc68161264e565b915050610d82565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e165760405162461bcd60e51b8152600401610453906125c6565b60026040518061010001604052808581526020018481526020018381526020015f8152602001600480811115610e4e57610e4e612516565b81525f60208083018290526040830182905260609092018190528354600181018555938152208151919260070201908190610e8990826126ea565b506020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff02191690836004811115610ed157610ed1612516565b021790555060a0820151600482018054610100600160a81b0319166101006001600160a01b039093169290920291909117905560c0820151600582015560e0909101516006909101805460ff1916911515919091179055505050565b60028181548110610f3c575f80fd5b905f5260205f2090600702015f91509050805f018054610f5b90612602565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8790612602565b8015610fd25780601f10610fa957610100808354040283529160200191610fd2565b820191905f5260205f20905b815481529060010190602001808311610fb557829003601f168201915b505050506001830154600284015460038501546004860154600587015460069097015495969395929450909260ff808316936101009093046001600160a01b0316921688565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110615760405162461bcd60e51b8152600401610453906125c6565b5f5b600254811015610a88575f60028281548110611081576110816125ee565b905f5260205f20906007020160010154111561111a575f612710600283815481106110ae576110ae6125ee565b905f5260205f20906007020160010154856110c991906127b9565b6110d391906127d0565b905080600283815481106110e9576110e96125ee565b905f5260205f2090600702016003015f82825461110691906127a6565b90915550611116905081856127ef565b9350505b806111248161264e565b915050611063565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146111745760405162461bcd60e51b8152600401610453906125c6565b5f54600160a01b900460ff16156111c05760405162461bcd60e51b815260206004820152601060248201526f616c7265616479207377617070696e6760801b6044820152606401610453565b5f805460ff60a01b1916600160a01b17815560408051600280825260608201835290916020830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000815f81518110611225576112256125ee565b60200260200101906001600160a01b031690816001600160a01b0316815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110611279576112796125ee565b6001600160a01b03909216602092830291909101909101527f00000000000000000000000000000000000000000000000000000000000000005f805b6002548110156113e15760028082815481106112d3576112d36125ee565b5f9182526020909120600460079092020181015460ff16908111156112fa576112fa612516565b03611370575f6002808381548110611314576113146125ee565b905f5260205f2090600702016003015461132e91906127d0565b90508060028381548110611344576113446125ee565b905f5260205f2090600702016003015461135e91906127ef565b61136890846127a6565b9250506113cf565b60028181548110611383576113836125ee565b5f91825260209091206006600790920201015460ff16156113cf57600281815481106113b1576113b16125ee565b905f5260205f20906007020160030154826113cc91906127a6565b91505b806113d98161264e565b9150506112b5565b506113ec82826121dd565b9050806113f983836121dd565b14611489577fde3142f93c040ab4be0d03a16ac06c502816c1205865dd41d9848727102570d16040516114799060208082526033908201527f496e73756666696369656e7420746f6b656e7320746f20737761702e20506c6560408201527261736520616464206d6f726520746f6b656e7360681b606082015260800190565b60405180910390a15050506120f5565b5f80546001600160a01b03166318cbafe5838387306114aa4261012c6127a6565b6040518663ffffffff1660e01b81526004016114ca959493929190612802565b5f604051808303815f875af11580156114e5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261150c9190810190612871565b90505f479050815f81518110611524576115246125ee565b602002602001015183141580611554575081600181518110611548576115486125ee565b60200260200101518114155b156115cf577fde3142f93c040ab4be0d03a16ac06c502816c1205865dd41d9848727102570d16040516115c69060208082526025908201527f556e657870656374656420616d6f756e74732072657475726e65642066726f6d604082015264020737761760dc1b606082015260800190565b60405180910390a15b805f5b60025481101561180257600281815481106115ef576115ef6125ee565b5f91825260209091206006600790920201015460ff16806116485750600280828154811061161f5761161f6125ee565b5f9182526020909120600460079092020181015460ff169081111561164657611646612516565b145b156117f05760025461165c906001906127ef565b810361168e578160028281548110611676576116766125ee565b905f5260205f209060070201600501819055506117f0565b60028082815481106116a2576116a26125ee565b5f9182526020909120600460079092020181015460ff16908111156116c9576116c9612516565b0361177f575f60028083815481106116e3576116e36125ee565b905f5260205f209060070201600301546116fd91906127d0565b90505f868260028581548110611715576117156125ee565b905f5260205f2090600702016003015461172f91906127ef565b61173990876127b9565b61174391906127d0565b90508060028481548110611759576117596125ee565b5f91825260209091206005600790920201015561177681856127ef565b935050506117f0565b5f8560028381548110611794576117946125ee565b905f5260205f20906007020160030154856117af91906127b9565b6117b991906127d0565b905080600283815481106117cf576117cf6125ee565b5f9182526020909120600560079092020101556117ec81846127ef565b9250505b806117fa8161264e565b9150506115d2565b505f5b6002548110156120b0575f60028281548110611823576118236125ee565b5f9182526020909120600460079092020181015460ff169081111561184a5761184a612516565b036119ed5760028181548110611862576118626125ee565b5f91825260209091206006600790920201015460ff16156119105760028181548110611890576118906125ee565b905f5260205f20906007020160040160019054906101000a90046001600160a01b03166001600160a01b03166108fc600283815481106118d2576118d26125ee565b905f5260205f2090600702016005015490811502906040515f60405180830381858888f1935050505015801561190a573d5f803e3d5ffd5b50612050565b856001600160a01b031663a9059cbb60028381548110611932576119326125ee565b905f5260205f20906007020160040160019054906101000a90046001600160a01b0316611981896002868154811061196c5761196c6125ee565b905f5260205f209060070201600301546121dd565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af11580156119c9573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190a9190612912565b600360028281548110611a0257611a026125ee565b5f9182526020909120600460079092020181015460ff1690811115611a2957611a29612516565b03611c2c5760028181548110611a4157611a416125ee565b5f91825260209091206006600790920201015460ff1615611a6f5760028181548110611890576118906125ee565b856001600160a01b031663095ea7b360028381548110611a9157611a916125ee565b905f5260205f20906007020160040160019054906101000a90046001600160a01b031660028481548110611ac757611ac76125ee565b5f9182526020909120600360079092020101546040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015611b22573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b469190612912565b5060028181548110611b5a57611b5a6125ee565b905f5260205f20906007020160040160019054906101000a90046001600160a01b03166001600160a01b0316634ec109f47f000000000000000000000000000000000000000000000000000000000000000030611bc48a6002878154811061196c5761196c6125ee565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064015b5f604051808303815f87803b158015611c11575f80fd5b505af1158015611c23573d5f803e3d5ffd5b50505050612050565b600160028281548110611c4157611c416125ee565b5f9182526020909120600460079092020181015460ff1690811115611c6857611c68612516565b03611dd45760028181548110611c8057611c806125ee565b5f91825260209091206006600790920201015460ff1615611d475760028181548110611cae57611cae6125ee565b905f5260205f20906007020160040160019054906101000a90046001600160a01b03166001600160a01b031663db6b524660028381548110611cf257611cf26125ee565b905f5260205f209060070201600501546040518263ffffffff1660e01b81526004015f604051808303818588803b158015611d2b575f80fd5b505af1158015611d3d573d5f803e3d5ffd5b5050505050612050565b60028181548110611d5a57611d5a6125ee565b905f5260205f20906007020160040160019054906101000a90046001600160a01b03166001600160a01b031663338b5dea30611da3896002868154811061196c5761196c6125ee565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401611bfa565b600460028281548110611de957611de96125ee565b5f9182526020909120600460079092020181015460ff1690811115611e1057611e10612516565b03611e79577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166342966c68611e5b886002858154811061196c5761196c6125ee565b6040518263ffffffff1660e01b8152600401611bfa91815260200190565b6002808281548110611e8d57611e8d6125ee565b5f9182526020909120600460079092020181015460ff1690811115611eb457611eb4612516565b03612050575f60028281548110611ecd57611ecd6125ee565b905f5260205f209060070201600501541115612050575f611f1b876002808581548110611efc57611efc6125ee565b905f5260205f20906007020160030154611f1691906127d0565b6121dd565b5f54600280549293506001600160a01b039091169163f305d719919085908110611f4757611f476125ee565b905f5260205f209060070201600501547f0000000000000000000000000000000000000000000000000000000000000000845f8060028981548110611f8e57611f8e6125ee565b5f91825260209091206007909102016004015461010090046001600160a01b0316611fbb4261012c6127a6565b60405160e089901b6001600160e01b03191681526001600160a01b039687166004820152602481019590955260448501939093526064840191909152909216608482015260a481019190915260c40160606040518083038185885af1158015612026573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061204b919061292d565b505050505b5f60028281548110612064576120646125ee565b905f5260205f209060070201600301819055505f6002828154811061208b5761208b6125ee565b5f918252602090912060056007909202010155806120a88161264e565b915050611805565b5060408051858152602081018490527f5e20c9aee521e656eed033c4ae35378c79c584706f5ce7f410ab3fba389607a1910160405180910390a1505042600155505050505b5f805460ff60a01b19169055565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461214b5760405162461bcd60e51b8152600401610453906125c6565b60026040518061010001604052808781526020018681526020018581526020015f81526020016001600481111561067857610678612516565b5f816040516020016121969190612958565b60405160208183030381529060405280519060200120836040516020016121bd9190612958565b604051602081830303815290604052805190602001201490505b92915050565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038516906370a0823190602401602060405180830381865afa158015612223573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122479190612973565b90508281111561225a57829150506121d7565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561229e5761229e612261565b604052919050565b5f82601f8301126122b5575f80fd5b813567ffffffffffffffff8111156122cf576122cf612261565b6122e2601f8201601f1916602001612275565b8181528460208386010111156122f6575f80fd5b816020850160208301375f918101602001919091529392505050565b5f8060408385031215612323575f80fd5b823567ffffffffffffffff811115612339575f80fd5b612345858286016122a6565b95602094909401359450505050565b80356001600160a01b0381168114610a8d575f80fd5b8015158114612377575f80fd5b50565b5f805f805f60a0868803121561238e575f80fd5b853567ffffffffffffffff8111156123a4575f80fd5b6123b0888289016122a6565b95505060208601359350604086013592506123cd60608701612354565b915060808601356123dd8161236a565b809150509295509295909350565b5f805f80608085870312156123fe575f80fd5b843567ffffffffffffffff811115612414575f80fd5b612420878288016122a6565b945050602085013592506040850135915061243d60608601612354565b905092959194509250565b5f60208284031215612458575f80fd5b5035919050565b5f8060408385031215612470575f80fd5b823567ffffffffffffffff811115612486575f80fd5b612492858286016122a6565b9250506124a160208401612354565b90509250929050565b5f805f606084860312156124bc575f80fd5b833567ffffffffffffffff8111156124d2575f80fd5b6124de868287016122a6565b9660208601359650604090950135949350505050565b5f5b8381101561250e5781810151838201526020016124f6565b50505f910152565b634e487b7160e01b5f52602160045260245ffd5b5f6101008083528a518082850152610120915061254d8183860160208f016124f4565b602084018b9052604084018a905260608401899052601f01601f191683010190506005861061258a57634e487b7160e01b5f52602160045260245ffd5b8560808301526125a560a08301866001600160a01b03169052565b8360c08301526125b960e083018415159052565b9998505050505050505050565b6020808252600e908201526d6e6f207065726d697373696f6e7360901b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b600181811c9082168061261657607f821691505b60208210810361263457634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b5f6001820161265f5761265f61263a565b5060010190565b6020808252601c908201527f636f756c64206e6f742066696e642074617820746f2075706461746500000000604082015260600190565b601f8211156105f2575f81815260208120601f850160051c810160208610156126c35750805b601f850160051c820191505b818110156126e2578281556001016126cf565b505050505050565b815167ffffffffffffffff81111561270457612704612261565b612718816127128454612602565b8461269d565b602080601f83116001811461274b575f84156127345750858301515b5f19600386901b1c1916600185901b1785556126e2565b5f85815260208120601f198616915b828110156127795788860151825594840194600190910190840161275a565b508582101561279657878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156121d7576121d761263a565b80820281158282048414176121d7576121d761263a565b5f826127ea57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156121d7576121d761263a565b5f60a082018783526020878185015260a0604085015281875180845260c08601915082890193505f5b818110156128505784516001600160a01b03168352938301939183019160010161282b565b50506001600160a01b03969096166060850152505050608001529392505050565b5f6020808385031215612882575f80fd5b825167ffffffffffffffff80821115612899575f80fd5b818501915085601f8301126128ac575f80fd5b8151818111156128be576128be612261565b8060051b91506128cf848301612275565b81815291830184019184810190888411156128e8575f80fd5b938501935b83851015612906578451825293850193908501906128ed565b98975050505050505050565b5f60208284031215612922575f80fd5b815161225a8161236a565b5f805f6060848603121561293f575f80fd5b8351925060208401519150604084015190509250925092565b5f82516129698184602087016124f4565b9190910192915050565b5f60208284031215612983575f80fd5b505191905056fea2646970667358221220b4f3f02d36e25dcca09b690e5a521c39bd6f40aa0d236b8000774d50e1f39d1564736f6c63430008140033
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610443575f3560e01c806370a0823111610237578063c20c5caf11610135578063d430d1bd116100bf578063e79d416011610084578063e79d4160146109b6578063e948474b146109bf578063ede49a19146109e1578063f19fffcb146109f5578063f1f5cd9114610a09575f80fd5b8063d430d1bd1461093a578063db38a41d14610943578063dba61c5814610962578063dc01f60d1461096b578063dd62ed3e1461097e575f80fd5b8063cc1776d311610105578063cc1776d3146108fa578063d00efb2f14610902578063d2d7ad831461090b578063d31acb2814610914578063d3b0066f14610927575f80fd5b8063c20c5caf146108b8578063c2ed286b146108cb578063c4a5abcd146108de578063c552f4c5146108e7575f80fd5b806389d53c01116101c1578063a6f9dae111610186578063a6f9dae11461083b578063a9059cbb1461084e578063b02b605e14610861578063b0ad3ebf14610874578063c10fde1b14610896575f80fd5b806389d53c01146107d35780638da5cb5b146107e657806395d89b41146107fe578063989763ef14610806578063a457c2d714610828575f80fd5b8063790ca41311610207578063790ca4131461077d57806379cc6790146107865780637cf79e2c146107995780638091f3bf146107ac57806381045345146107c0575f80fd5b806370a0823114610723578063715018a61461074b5780637412dbb314610753578063751039fc14610775575f80fd5b80633950935111610344578063570ca735116102ce5780636331bf65116102935780636331bf65146106e05780636508c57e146106e85780636a092e79146106fb5780636b8f2f3b1461070e5780636f8645521461071b575f80fd5b8063570ca7351461068b578063583dd79d1461069e5780635d90bbaf146106b15780635d9d7d43146106c45780635e45da23146106d7575f80fd5b80634c43e307116103145780634c43e307146106415780634f7041a5146106495780634f72e2a21461065157806352c6dbc4146106645780635543379a14610678575f80fd5b806339509351146105ff578063407133d21461061257806342966c681461062557806345541cba14610638575f80fd5b806318551108116103d05780632b750627116103955780632b7506271461057557806330bd85c514610597578063313ce567146105ab5780633164df8b146105ca57806336827499146105ec575f80fd5b8063185511081461050f5780631e19ae77146105345780631f4a6d321461054757806323b872dd1461054f57806328be903814610562575f80fd5b8063095ea7b311610416578063095ea7b3146104a25780630f3a325f146104b55780631776834a146104d757806318160ddd146104ea578063182561e1146104fc575f80fd5b806301339c2114610447578063064a59d01461045157806306fdde031461047a57806307a1cfbd1461048f575b5f80fd5b61044f610a11565b005b60075461046590600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b610482610a53565b6040516104719190612a35565b61044f61049d366004612aeb565b610adf565b6104656104b0366004612b48565b610b71565b6104656104c3366004612b70565b60126020525f908152604090205460ff1681565b61044f6104e5366004612b89565b610c61565b6002545b604051908152602001610471565b61044f61050a366004612bad565b610c95565b6016546001600160a01b03165b6040516001600160a01b039091168152602001610471565b61044f610542366004612bad565b610cee565b61044f610d47565b61046561055d366004612be2565b610d82565b61044f610570366004612bad565b610ea7565b610465610583366004612b70565b60136020525f908152604090205460ff1681565b600b5461046590600160c01b900460ff1681565b6006546105b89060ff1681565b60405160ff9091168152602001610471565b6104656105d8366004612b70565b60156020525f908152604090205460ff1681565b61044f6105fa366004612c1b565b610f00565b61046561060d366004612b48565b610f4d565b600b5461051c906001600160a01b031681565b61044f610633366004612b89565b61105c565b6104ee600c5481565b61044f6110bd565b6104ee61119e565b61044f61065f366004612c1b565b61120e565b600b5461046590600160b01b900460ff1681565b61044f610686366004612c1b565b611250565b60075461051c906001600160a01b031681565b61044f6106ac366004612c36565b61129d565b61044f6106bf366004612bad565b6112e1565b61044f6106d2366004612bad565b61133a565b6104ee600e5481565b6104ee611393565b61044f6106f6366004612aeb565b6113b1565b610465610709366004612c81565b611412565b6018546104659060ff1681565b6104ee611529565b6104ee610731366004612b70565b6001600160a01b03165f9081526020819052604090205490565b61044f61153d565b610465610761366004612b70565b600a6020525f908152604090205460ff1681565b61044f6115bb565b6104ee600f5481565b61044f610794366004612b48565b6115f5565b61044f6107a7366004612bad565b611726565b60075461046590600160a81b900460ff1681565b61044f6107ce366004612b89565b61177f565b61044f6107e1366004612c1b565b6117b3565b60065461051c9061010090046001600160a01b031681565b610482611859565b610465610814366004612b70565b601b6020525f908152604090205460ff1681565b610465610836366004612b48565b611866565b61044f610849366004612b70565b611932565b61046561085c366004612b48565b6119d8565b61044f61086f366004612b89565b611a65565b610465610882366004612b70565b60086020525f908152604090205460ff1681565b6104656108a4366004612b70565b601c6020525f908152604090205460ff1681565b61044f6108c6366004612b89565b611a99565b61044f6108d9366004612bad565b611acd565b6104ee600d5481565b61044f6108f5366004612c1b565b611ba3565b6104ee611bf0565b6104ee60105481565b6104ee60175481565b61044f610922366004612ca9565b611c37565b61044f610935366004612b70565b611c71565b6104ee601d5481565b6104ee610951366004612b70565b60146020525f908152604090205481565b6104ee601a5481565b610465610979366004612b70565b611d32565b6104ee61098c366004612c81565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b6104ee60115481565b6104656109cd366004612b70565b60096020525f908152604090205460ff1681565b600b5461046590600160a81b900460ff1681565b600b5461046590600160b81b900460ff1681565b6104ee611d76565b60065461010090046001600160a01b03163314610a495760405162461bcd60e51b8152600401610a4090612cc9565b60405180910390fd5b610a51611dac565b565b60058054610a6090612d11565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8c90612d11565b8015610ad75780601f10610aae57610100808354040283529160200191610ad7565b820191905f5260205f20905b815481529060010190602001808311610aba57829003601f168201915b505050505081565b60065461010090046001600160a01b03163314610b0e5760405162461bcd60e51b8152600401610a4090612cc9565b6016546040516307a1cfbd60e01b81526001600160a01b03909116906307a1cfbd90610b409085908590600401612d49565b5f604051808303815f87803b158015610b57575f80fd5b505af1158015610b69573d5f803e3d5ffd5b505050505050565b6007545f903390600160a01b900460ff168015610b975750600754600160a81b900460ff165b80610bb457506006546001600160a01b0382811661010090920416145b80610bcd5750335f9081526008602052604090205460ff165b610be95760405162461bcd60e51b8152600401610a4090612d6a565b6001600160a01b038416610c0f5760405162461bcd60e51b8152600401610a4090612d97565b335f8181526001602090815260408083206001600160a01b03891680855290835292819020879055518681529192915f80516020612ed283398151915291015b60405180910390a35060019392505050565b60065461010090046001600160a01b03163314610c905760405162461bcd60e51b8152600401610a4090612cc9565b600e55565b60065461010090046001600160a01b03163314610cc45760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152601c60205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b03163314610d1d5760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152601560205260409020805460ff1916911515919091179055565b60075460405147916001600160a01b03169082156108fc029083905f818181858888f19350505050158015610d7e573d5f803e3d5ffd5b5050565b6007545f908490600160a01b900460ff168015610da85750600754600160a81b900460ff165b80610dc557506006546001600160a01b0382811661010090920416145b80610dde5750335f9081526008602052604090205460ff165b610dfa5760405162461bcd60e51b8152600401610a4090612d6a565b6001600160a01b0385165f908152600160209081526040808320338452909152902054610e28908490612de2565b6001600160a01b0386165f908152600160209081526040808320338452909152902055610e56858585611ded565b6001600160a01b0385165f81815260016020908152604080832033808552908352928190205490519081529192915f80516020612ed2833981519152910160405180910390a3506001949350505050565b60065461010090046001600160a01b03163314610ed65760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b03163314610f2f5760405162461bcd60e51b8152600401610a4090612cc9565b600b8054911515600160b81b0260ff60b81b19909216919091179055565b6007545f903390600160a01b900460ff168015610f735750600754600160a81b900460ff165b80610f9057506006546001600160a01b0382811661010090920416145b80610fa95750335f9081526008602052604090205460ff165b610fc55760405162461bcd60e51b8152600401610a4090612d6a565b6001600160a01b038416610feb5760405162461bcd60e51b8152600401610a4090612d97565b335f9081526001602090815260408083206001600160a01b0388168452909152902054611019908490612df5565b335f8181526001602090815260408083206001600160a01b038a16808552908352928190208590555193845290925f80516020612ed28339815191529101610c4f565b335f9081526015602052604090205460ff166110b05760405162461bcd60e51b81526020600482015260136024820152726e6f206275726e207065726d697373696f6e7360681b6044820152606401610a40565b6110ba3382611ffc565b50565b600754600160a81b900460ff166111285760405162461bcd60e51b815260206004820152602960248201527f63616e206f6e6c792062652063616c6c6564206f6e636520746f6b656e206973604482015268081b185d5b98da195960ba1b6064820152608401610a40565b6007546001600160a01b03163303610a515760165f9054906101000a90046001600160a01b03166001600160a01b031663e4fc6b6d6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611186575f80fd5b505af1158015611198573d5f803e3d5ffd5b50505050565b60165460408051631296b91d60e11b815290515f926001600160a01b03169163252d723a9160048083019260209291908290030181865afa1580156111e5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112099190612e08565b905090565b60065461010090046001600160a01b0316331461123d5760405162461bcd60e51b8152600401610a4090612cc9565b6018805460ff1916911515919091179055565b60065461010090046001600160a01b0316331461127f5760405162461bcd60e51b8152600401610a4090612cc9565b600b8054911515600160b01b0260ff60b01b19909216919091179055565b6007546001600160a01b03163303610d7e5760165460405163583dd79d60e01b81526001600160a01b039091169063583dd79d90610b409085908590600401612e1f565b60065461010090046001600160a01b031633146113105760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152601260205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b031633146113695760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152601360205260409020805460ff1916911515919091179055565b5f612710600d546002546113a79190612e48565b6112099190612e5f565b60065461010090046001600160a01b031633146113e05760405162461bcd60e51b8152600401610a4090612cc9565b60165460405163328462bf60e11b81526001600160a01b0390911690636508c57e90610b409085908590600401612d49565b6006545f9061010090046001600160a01b031633146114435760405162461bcd60e51b8152600401610a4090612cc9565b6040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa158015611487573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ab9190612e08565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303815f875af11580156114fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061151f9190612e7e565b9150505b92915050565b5f612710600c546002546113a79190612e48565b60065461010090046001600160a01b0316331461156c5760405162461bcd60e51b8152600401610a4090612cc9565b6006546040515f9161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360068054610100600160a81b0319169055565b60065461010090046001600160a01b031633146115ea5760405162461bcd60e51b8152600401610a4090612cc9565b5f600d819055600c55565b335f9081526015602052604090205460ff166116495760405162461bcd60e51b81526020600482015260136024820152726e6f206275726e207065726d697373696f6e7360681b6044820152606401610a40565b6001600160a01b0382165f908152600160209081526040808320338085529252909120548281106116a85761167e8382612de2565b6001600160a01b038086165f908152600160209081526040808320938716835292905220556116d0565b6001600160a01b038085165f9081526001602090815260408083209386168352929052908120555b6116da8484611ffc565b6001600160a01b038481165f818152600160209081526040808320948716808452948252918290205491519182525f80516020612ed2833981519152910160405180910390a350505050565b60065461010090046001600160a01b031633146117555760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b03919091165f908152600860205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b031633146117ae5760405162461bcd60e51b8152600401610a4090612cc9565b600d55565b60065461010090046001600160a01b031633146117e25760405162461bcd60e51b8152600401610a4090612cc9565b600b54600160a01b900460ff1661183b5760405162461bcd60e51b815260206004820152601f60248201527f70696e6b20616e746920626f74206973206e6f7420636f6e66696775726564006044820152606401610a40565b600b8054911515600160c01b0260ff60c01b19909216919091179055565b60048054610a6090612d11565b6007545f903390600160a01b900460ff16801561188c5750600754600160a81b900460ff165b806118a957506006546001600160a01b0382811661010090920416145b806118c25750335f9081526008602052604090205460ff165b6118de5760405162461bcd60e51b8152600401610a4090612d6a565b6001600160a01b0384166119045760405162461bcd60e51b8152600401610a4090612d97565b335f9081526001602090815260408083206001600160a01b0388168452909152902054611019908490612de2565b60065461010090046001600160a01b031633146119615760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b0381166119b05760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b6044820152606401610a40565b600680546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6007545f903390600160a01b900460ff1680156119fe5750600754600160a81b900460ff165b80611a1b57506006546001600160a01b0382811661010090920416145b80611a345750335f9081526008602052604090205460ff165b611a505760405162461bcd60e51b8152600401610a4090612d6a565b611a5b338585611ded565b5060019392505050565b60065461010090046001600160a01b03163314611a945760405162461bcd60e51b8152600401610a4090612cc9565b601d55565b60065461010090046001600160a01b03163314611ac85760405162461bcd60e51b8152600401610a4090612cc9565b600c55565b60065461010090046001600160a01b03163314611afc5760405162461bcd60e51b8152600401610a4090612cc9565b6001600160a01b0382165f908152600a602052604090205460ff161580611b21575080155b611b795760405162461bcd60e51b815260206004820152602360248201527f43616e6e6f74206578636c75646520616e2065786368616e67652066726f6d206044820152620e8c2f60eb1b6064820152608401610a40565b6001600160a01b03919091165f908152601b60205260409020805460ff1916911515919091179055565b60065461010090046001600160a01b03163314611bd25760405162461bcd60e51b8152600401610a4090612cc9565b600b8054911515600160a81b0260ff60a81b19909216919091179055565b6016546040805163585e42ef60e11b815290515f926001600160a01b03169163b0bc85de9160048083019260209291908290030181865afa1580156111e5573d5f803e3d5ffd5b60065461010090046001600160a01b03163314611c665760405162461bcd60e51b8152600401610a4090612cc9565b601791909155601a55565b60065461010090046001600160a01b03163314611ca05760405162461bcd60e51b8152600401610a4090612cc9565b600b80546001600160a01b0319166001600160a01b038381169182179092556006546040516318e02bd960e01b81526101009091049092166004830152906318e02bd9906024015f604051808303815f87803b158015611cfe575f80fd5b505af1158015611d10573d5f803e3d5ffd5b5050600b805464ff000000ff60a01b191664010000000160a01b179055505050565b6001600160a01b0381165f908152601c602052604081205460ff16806115235750601d546001600160a01b0383165f90815260208190526040902054101592915050565b6007545f90600160a81b900460ff1615611da757600360105443611d9a9190612de2565b1015611da75750611edc90565b505f90565b60065461010090046001600160a01b03163314611ddb5760405162461bcd60e51b8152600401610a4090612cc9565b611de3612081565b42600f5543601055565b6001600160a01b038216611e3c5760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b6044820152606401610a40565b6001600160a01b0383165f9081526009602052604090205460ff1615611ea45760405162461bcd60e51b815260206004820152601e60248201527f61646472657373206973206e6f7420616c6c6f77656420746f2073656c6c00006044820152606401610a40565b60035460ff1615611f46576001600160a01b0383165f90815260208190526040902054611ed2908290612de2565b6001600160a01b038085165f908152602081905260408082209390935590841681522054611f01908290612df5565b6001600160a01b038381165f818152602081815260409182902094909455518481529092918616915f80516020612eb2833981519152910160405180910390a3505050565b611f518383836120c5565b5f611f5d8484846120d0565b6001600160a01b0385165f90815260208190526040902054909150611f83908390612de2565b6001600160a01b038086165f908152602081905260408082209390935590851681522054611fb2908290612df5565b6001600160a01b038481165f818152602081815260409182902094909455518481529092918716915f80516020612eb2833981519152910160405180910390a3611198565b505050565b6001600160a01b03821661200e575f80fd5b8060025461201c9190612de2565b6002556001600160a01b0382165f90815260208190526040902054612042908290612de2565b6001600160a01b0383165f8181526020818152604080832094909455925184815290925f80516020612eb2833981519152910160405180910390a35050565b60065461010090046001600160a01b031633146120b05760405162461bcd60e51b8152600401610a4090612cc9565b6007805460ff60a81b1916600160a81b179055565b611ff78383836120e4565b5f6120dc848484612273565b949350505050565b600754600160a81b900460ff1680156120ff575060185460ff165b801561212257506001600160a01b0382165f908152600a602052604090205460ff165b801561213c575042601954600a6121399190612df5565b11155b801561216357506017546016546001600160a01b03165f9081526020819052604090205410155b801561218757506001600160a01b0383165f908152601b602052604090205460ff16155b8015612204575060165f9054906101000a90046001600160a01b03166001600160a01b031663d83067866040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121de573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122029190612e7e565b155b1561226857426019556016546040805163e4fc6b6d60e01b815290516001600160a01b039092169163e4fc6b6d916004808201925f9290919082900301818387803b158015612251575f80fd5b505af1158015612263573d5f803e3d5ffd5b505050505b611ff7838383612488565b6001600160a01b0383165f908152601b6020526040812054829060ff161580156122b557506001600160a01b0384165f908152601b602052604090205460ff16155b80156122ca5750600754600160a81b900460ff165b156123f1576001600160a01b0385165f908152600a602052604090205460ff16156123625760165460405163db017dc760e01b8152600481018590526001600160a01b039091169063db017dc7906024016020604051808303815f875af1158015612337573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061235b9190612e08565b90506123f1565b6001600160a01b0384165f908152600a602052604090205460ff16156123f157601654604051634fa26fd560e01b8152600481018590526001600160a01b0390911690634fa26fd5906024016020604051808303815f875af11580156123ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ee9190612e08565b90505b5f6123fc8285612de2565b90508015612473576016546001600160a01b03165f90815260208190526040902054612429908290612df5565b601680546001600160a01b039081165f9081526020818152604091829020949094559154915184815291811692908916915f80516020612eb2833981519152910160405180910390a35b61247e8686846128a4565b9695505050505050565b600b54600160a81b900460ff1615806124b05750335f9081526012602052604090205460ff16155b6124ee5760405162461bcd60e51b815260206004820152600f60248201526e1cdb9a5c195c881c995a9958dd1959608a1b6044820152606401610a40565b600754600160a81b900460ff16801561251a57506006546001600160a01b038481166101009092041614155b801561253e57506001600160a01b0383165f9081526013602052604090205460ff16155b801561256257506001600160a01b0382165f9081526013602052604090205460ff16155b15611ff757600e54156125c157600e545a11156125c15760405162461bcd60e51b815260206004820152601e60248201527f74686973206973206f76657220746865206d617820676173206c696d697400006044820152606401610a40565b5f600d541180156125ea57506001600160a01b0382165f908152600a602052604090205460ff16155b15612668576125f7611393565b6001600160a01b0383165f9081526020819052604090205461261a908390612df5565b11156126685760405162461bcd60e51b815260206004820181905260248201527f74686973206973206f76657220746865206d617820686f6c6420616d6f756e746044820152606401610a40565b5f600c5411801561269057506001600160a01b0382165f908152600a602052604090205460ff165b156126ec5761269d611529565b8111156126ec5760405162461bcd60e51b815260206004820181905260248201527f74686973206973206f76657220746865206d61782073656c6c20616d6f756e746044820152606401610a40565b600b54600160b01b900460ff1615612824576001600160a01b0382165f90815260146020526040902054439003612753576001600160a01b0382165f908152601260205260408120805460ff19166001179055601180549161274d83612e99565b91905055505b6001600160a01b0383165f908152601460205260409020544390036127a8576001600160a01b0383165f908152601260205260408120805460ff1916600117905560118054916127a283612e99565b91905055505b6001600160a01b0382165f908152600a602052604081205460ff16151590036127e6576001600160a01b0382165f9081526014602052604090204390555b6001600160a01b0383165f908152600a602052604081205460ff1615159003612824576001600160a01b0383165f9081526014602052604090204390555b600b54600160c01b900460ff1615611ff757600b5460405163090ec10b60e31b81526001600160a01b038581166004830152848116602483015260448201849052909116906348760858906064015f604051808303815f87803b158015612889575f80fd5b505af115801561289b573d5f803e3d5ffd5b50505050505050565b6007545f908290600160a81b900460ff1680156128ca5750600b54600160b81b900460ff165b15612975576006546001600160a01b0386811661010090920416148015906128f857505f6128f6611d76565b115b801561291c57506001600160a01b0385165f9081526013602052604090205460ff16155b801561294057506001600160a01b0384165f9081526013602052604090205460ff16155b15612975575f612710612951611d76565b61295b9086612e48565b6129659190612e5f565b90506129718183612de2565b9150505b612980858583612989565b95945050505050565b5f826001600160a01b0316846001600160a01b0316036129eb5760405162461bcd60e51b815260206004820152601f60248201527f796f752063616e6e6f74207472616e7366657220746f20796f757273656c66006044820152606401610a40565b5092915050565b5f81518084525f5b81811015612a16576020818501810151868301820152016129fa565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f612a4760208301846129f2565b9392505050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112612a71575f80fd5b813567ffffffffffffffff80821115612a8c57612a8c612a4e565b604051601f8301601f19908116603f01168101908282118183101715612ab457612ab4612a4e565b81604052838152866020858801011115612acc575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215612afc575f80fd5b823567ffffffffffffffff811115612b12575f80fd5b612b1e85828601612a62565b95602094909401359450505050565b80356001600160a01b0381168114612b43575f80fd5b919050565b5f8060408385031215612b59575f80fd5b612b6283612b2d565b946020939093013593505050565b5f60208284031215612b80575f80fd5b612a4782612b2d565b5f60208284031215612b99575f80fd5b5035919050565b80151581146110ba575f80fd5b5f8060408385031215612bbe575f80fd5b612bc783612b2d565b91506020830135612bd781612ba0565b809150509250929050565b5f805f60608486031215612bf4575f80fd5b612bfd84612b2d565b9250612c0b60208501612b2d565b9150604084013590509250925092565b5f60208284031215612c2b575f80fd5b8135612a4781612ba0565b5f8060408385031215612c47575f80fd5b823567ffffffffffffffff811115612c5d575f80fd5b612c6985828601612a62565b925050612c7860208401612b2d565b90509250929050565b5f8060408385031215612c92575f80fd5b612c9b83612b2d565b9150612c7860208401612b2d565b5f8060408385031215612cba575f80fd5b50508035926020909101359150565b60208082526028908201527f63616e206f6e6c792062652063616c6c65642062792074686520636f6e74726160408201526731ba1037bbb732b960c11b606082015260800190565b600181811c90821680612d2557607f821691505b602082108103612d4357634e487b7160e01b5f52602260045260245ffd5b50919050565b604081525f612d5b60408301856129f2565b90508260208301529392505050565b6020808252601390820152721d1c98591a5b99c81b9bdd08195b98589b1959606a1b604082015260600190565b6020808252601c908201527f63616e6e6f7420617070726f7665207468652030206164647265737300000000604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561152357611523612dce565b8082018082111561152357611523612dce565b5f60208284031215612e18575f80fd5b5051919050565b604081525f612e3160408301856129f2565b905060018060a01b03831660208301529392505050565b808202811582820484141761152357611523612dce565b5f82612e7957634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612e8e575f80fd5b8151612a4781612ba0565b5f60018201612eaa57612eaa612dce565b506001019056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a2646970667358221220158e06f347e8b41e3b55788d4ac8e51cf14c26ec3a890bc1e17d0cb5d5a8691e64736f6c63430008140033
Deployed Bytecode Sourcemap
39453:3073:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41297:100;;;:::i;:::-;;8386:35;;;;;-1:-1:-1;;;8386:35:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;8386:35:0;;;;;;;;8260:19;;;:::i;:::-;;;;;;;:::i;20732:143::-;;;;;;:::i;:::-;;:::i;11448:314::-;;;;;;:::i;:::-;;:::i;34612:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;38965:98;;;;;;:::i;:::-;;:::i;9530:102::-;9612:12;;9530:102;;;3069:25:1;;;3057:2;3042:18;9530:102:0;2923:177:1;42292:115:0;;;;;;:::i;:::-;;:::i;19878:114::-;19969:14;;-1:-1:-1;;;;;19969:14:0;19878:114;;;-1:-1:-1;;;;;3712:32:1;;;3694:51;;3682:2;3667:18;19878:114:0;3548:203:1;21716:113:0;;;;;;:::i;:::-;;:::i;15213:134::-;;;:::i;12235:328::-;;;;;;:::i;:::-;;:::i;15713:116::-;;;;;;:::i;:::-;;:::i;34660:46::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34361:29;;;;;-1:-1:-1;;;34361:29:0;;;;;;8286:21;;;;;;;;;;;;4261:4:1;4249:17;;;4231:36;;4219:2;4204:18;8286:21:0;4089:184:1;21350:43:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;38425:113;;;;;;:::i;:::-;;:::i;13078:381::-;;;;;;:::i;:::-;;:::i;34157:31::-;;;;;-1:-1:-1;;;;;34157:31:0;;;22000:101;;;;;;:::i;:::-;;:::i;34403:27::-;;;;;;21131:148;;;:::i;19484:102::-;;;:::i;20038:97::-;;;;;;:::i;:::-;;:::i;34277:36::-;;;;;-1:-1:-1;;;34277:36:0;;;;;;38296:117;;;;;;:::i;:::-;;:::i;8356:23::-;;;;;-1:-1:-1;;;;;8356:23:0;;;20887:232;;;;;;:::i;:::-;;:::i;39075:109::-;;;;;;:::i;:::-;;:::i;39192:117::-;;;;;;:::i;:::-;;:::i;34471:26::-;;;;;;37419:113;;;:::i;20579:145::-;;;;;;:::i;:::-;;:::i;15357:211::-;;;;;;:::i;:::-;;:::i;17527:23::-;;;;;;;;;37544:114;;;:::i;9849:119::-;;;;;;:::i;:::-;-1:-1:-1;;;;;9943:17:0;9916:7;9943:17;;;;;;;;;;;;9849:119;15065:140;;;:::i;8574:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;39317:105;;;:::i;34506:25::-;;;;;;22500:449;;;;;;:::i;:::-;;:::i;15580:121::-;;;;;;:::i;:::-;;:::i;8428:20::-;;;;;-1:-1:-1;;;8428:20:0;;;;;;38853:100;;;;;;:::i;:::-;;:::i;38550:179::-;;;;;;:::i;:::-;;:::i;8320:29::-;;;;;;;;-1:-1:-1;;;;;8320:29:0;;;8233:20;;;:::i;17630:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13979:391;;;;;;:::i;:::-;;:::i;14911:146::-;;;;;;:::i;:::-;;:::i;10623:178::-;;;;;;:::i;:::-;;:::i;42415:108::-;;;;;;:::i;:::-;;:::i;8461:47::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;39526:48;;;;;;:::i;:::-;;;;;;;;;;;;;;;;38741:100;;;;;;:::i;:::-;;:::i;20143:225::-;;;;;;:::i;:::-;;:::i;34437:27::-;;;;;;38175:109;;;;;;:::i;:::-;;:::i;19684:104::-;;;:::i;34538:26::-;;;;;;17482:38;;;;;;20376:191;;;;;;:::i;:::-;;:::i;37926:237::-;;;;;;:::i;:::-;;:::i;39581:31::-;;;;;;34713:55;;;;;;:::i;:::-;;;;;;;;;;;;;;17585:38;;;;;;42106:152;;;;;;:::i;:::-;;:::i;10308:144::-;;;;;;:::i;:::-;-1:-1:-1;;;;;10419:16:0;;;10392:7;10419:16;;;:8;:16;;;;;;;;:25;;;;;;;;;;;;;10308:144;34571:28;;;;;;8515:52;;;;;;:::i;:::-;;;;;;;;;;;;;;;;34238:32;;;;;-1:-1:-1;;;34238:32:0;;;;;;34320:34;;;;;-1:-1:-1;;;34320:34:0;;;;;;37669:217;;;:::i;41297:100::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;;;;;;;;;41375:14:::1;:12;:14::i;:::-;41297:100::o:0;8260:19::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20732:143::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;20823:14:::1;::::0;:44:::1;::::0;-1:-1:-1;;;20823:44:0;;-1:-1:-1;;;;;20823:14:0;;::::1;::::0;:24:::1;::::0;:44:::1;::::0;20848:7;;20857:9;;20823:44:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20732:143:::0;;:::o;11448:314::-;9082:16;;11551:4;;11530:10;;-1:-1:-1;;;9082:16:0;;;;:28;;;;-1:-1:-1;9102:8:0;;-1:-1:-1;;;9102:8:0;;;;9082:28;9081:47;;;-1:-1:-1;9123:5:0;;-1:-1:-1;;;;;9115:13:0;;;9123:5;;;;;9115:13;9081:47;:77;;;-1:-1:-1;9147:10:0;9132:26;;;;:14;:26;;;;;;;;9081:77;9073:109;;;;-1:-1:-1;;;9073:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11576:21:0;::::1;11568:62;;;;-1:-1:-1::0;;;11568:62:0::1;;;;;;;:::i;:::-;11652:10;11643:20;::::0;;;:8:::1;:20;::::0;;;;;;;-1:-1:-1;;;;;11643:29:0;::::1;::::0;;;;;;;;;;:37;;;11696:36;3069:25:1;;;11643:29:0;;11652:10;-1:-1:-1;;;;;;;;;;;11696:36:0;3042:18:1;11696:36:0::1;;;;;;;;-1:-1:-1::0;11750:4:0::1;::::0;11448:314;-1:-1:-1;;;11448:314:0:o;38965:98::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;39035:11:::1;:20:::0;38965:98::o;42292:115::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42373:21:0;;;::::1;;::::0;;;:16:::1;:21;::::0;;;;:26;;-1:-1:-1;;42373:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;42292:115::o;21716:113::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;21796:15:0;;;::::1;;::::0;;;:10:::1;:15;::::0;;;;:25;;-1:-1:-1;;21796:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21716:113::o;15213:134::-;15312:8;;15304:35;;15272:21;;-1:-1:-1;;;;;15312:8:0;;15304:35;;;;;15272:21;;15254:15;15304:35;15254:15;15304:35;15272:21;15312:8;15304:35;;;;;;;;;;;;;;;;;;;;;15243:104;15213:134::o;12235:328::-;9082:16;;12346:4;;12331;;-1:-1:-1;;;9082:16:0;;;;:28;;;;-1:-1:-1;9102:8:0;;-1:-1:-1;;;9102:8:0;;;;9082:28;9081:47;;;-1:-1:-1;9123:5:0;;-1:-1:-1;;;;;9115:13:0;;;9123:5;;;;;9115:13;9081:47;:77;;;-1:-1:-1;9147:10:0;9132:26;;;;:14;:26;;;;;;;;9081:77;9073:109;;;;-1:-1:-1;;;9073:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12392:14:0;::::1;;::::0;;;:8:::1;:14;::::0;;;;;;;12407:10:::1;12392:26:::0;;;;;;;;:34:::1;::::0;12421:5;;12392:34:::1;:::i;:::-;-1:-1:-1::0;;;;;12363:14:0;::::1;;::::0;;;:8:::1;:14;::::0;;;;;;;12378:10:::1;12363:26:::0;;;;;;;:63;12437:26:::1;12372:4:::0;12453:2;12457:5;12437:9:::1;:26::i;:::-;-1:-1:-1::0;;;;;12479:54:0;::::1;12506:14;::::0;;;:8:::1;:14;::::0;;;;;;;12494:10:::1;12506:26:::0;;;;;;;;;;;12479:54;;3069:25:1;;;12494:10:0;;12479:54;-1:-1:-1;;;;;;;;;;;12479:54:0;3042:18:1;12479:54:0::1;;;;;;;-1:-1:-1::0;12551:4:0::1;::::0;12235:328;-1:-1:-1;;;;12235:328:0:o;15713:116::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15794:14:0;;;::::1;;::::0;;;:9:::1;:14;::::0;;;;:27;;-1:-1:-1;;15794:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15713:116::o;38425:113::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;38498:22:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;38498:32:0::1;-1:-1:-1::0;;;;38498:32:0;;::::1;::::0;;;::::1;::::0;;38425:113::o;13078:381::-;9082:16;;13187:4;;13166:10;;-1:-1:-1;;;9082:16:0;;;;:28;;;;-1:-1:-1;9102:8:0;;-1:-1:-1;;;9102:8:0;;;;9082:28;9081:47;;;-1:-1:-1;9123:5:0;;-1:-1:-1;;;;;9115:13:0;;;9123:5;;;;;9115:13;9081:47;:77;;;-1:-1:-1;9147:10:0;9132:26;;;;:14;:26;;;;;;;;9081:77;9073:109;;;;-1:-1:-1;;;9073:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13212:21:0;::::1;13204:62;;;;-1:-1:-1::0;;;13204:62:0::1;;;;;;;:::i;:::-;13320:10;13311:20;::::0;;;:8:::1;:20;::::0;;;;;;;-1:-1:-1;;;;;13311:29:0;::::1;::::0;;;;;;;;:42:::1;::::0;13343:10;;13311:42:::1;:::i;:::-;13288:10;13279:20;::::0;;;:8:::1;:20;::::0;;;;;;;-1:-1:-1;;;;;13279:29:0;::::1;::::0;;;;;;;;;;:74;;;13369:60;3069:25:1;;;13279:29:0;;-1:-1:-1;;;;;;;;;;;13369:60:0;3042:18:1;13369:60:0::1;2923:177:1::0;22000:101:0;21629:10;21618:22;;;;:10;:22;;;;;;;;21610:54;;;;-1:-1:-1;;;21610:54:0;;8064:2:1;21610:54:0;;;8046:21:1;8103:2;8083:18;;;8076:30;-1:-1:-1;;;8122:18:1;;;8115:49;8181:18;;21610:54:0;7862:343:1;21610:54:0;22069:24:::1;22075:10;22087:5;22069;:24::i;:::-;22000:101:::0;:::o;21131:148::-;8806:8;;-1:-1:-1;;;8806:8:0;;;;8798:62;;;;-1:-1:-1;;;8798:62:0;;8412:2:1;8798:62:0;;;8394:21:1;8451:2;8431:18;;;8424:30;8490:34;8470:18;;;8463:62;-1:-1:-1;;;8541:18:1;;;8534:39;8590:19;;8798:62:0;8210:405:1;8798:62:0;21208:8:::1;::::0;-1:-1:-1;;;;;21208:8:0::1;21194:10;:22:::0;21190:82:::1;;21233:14;;;;;;;;;-1:-1:-1::0;;;;;21233:14:0::1;-1:-1:-1::0;;;;;21233:25:0::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;21131:148::o:0;19484:102::-;19552:14;;:26;;;-1:-1:-1;;;19552:26:0;;;;19525:7;;-1:-1:-1;;;;;19552:14:0;;:24;;:26;;;;;;;;;;;;;;:14;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19545:33;;19484:102;:::o;20038:97::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;20106:11:::1;:21:::0;;-1:-1:-1;;20106:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20038:97::o;38296:117::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;38371:24:::1;:34:::0;;;::::1;;-1:-1:-1::0;;;38371:34:0::1;-1:-1:-1::0;;;;38371:34:0;;::::1;::::0;;;::::1;::::0;;38296:117::o;20887:232::-;21031:8;;-1:-1:-1;;;;;21031:8:0;21017:10;:22;21013:99;;21056:14;;:44;;-1:-1:-1;;;21056:44:0;;-1:-1:-1;;;;;21056:14:0;;;;:27;;:44;;21084:7;;21093:6;;21056:44;;;:::i;39075:109::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39153:13:0;;;::::1;;::::0;;;:8:::1;:13;::::0;;;;:23;;-1:-1:-1;;39153:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39075:109::o;39192:117::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39273:18:0;;;::::1;;::::0;;;:13:::1;:18;::::0;;;;:28;;-1:-1:-1;;39273:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39192:117::o;37419:113::-;37460:7;37519:5;37503:12;;37488;;:27;;;;:::i;:::-;37487:37;;;;:::i;20579:145::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;20671:14:::1;::::0;:45:::1;::::0;-1:-1:-1;;;20671:45:0;;-1:-1:-1;;;;;20671:14:0;;::::1;::::0;:25:::1;::::0;:45:::1;::::0;20697:7;;20706:9;;20671:45:::1;;;:::i;15357:211::-:0;8683:5;;15435:4;;8683:5;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;15469:38:::1;::::0;-1:-1:-1;;;15469:38:0;;15501:4:::1;15469:38;::::0;::::1;3694:51:1::0;15451:15:0::1;::::0;-1:-1:-1;;;;;15469:23:0;::::1;::::0;::::1;::::0;3667:18:1;;15469:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15525:35;::::0;-1:-1:-1;;;15525:35:0;;-1:-1:-1;;;;;9718:32:1;;;15525:35:0::1;::::0;::::1;9700:51:1::0;9767:18;;;9760:34;;;15451:56:0;;-1:-1:-1;15525:22:0;;::::1;::::0;::::1;::::0;9673:18:1;;15525:35:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15518:42;;;8744:1;15357:211:::0;;;;:::o;37544:114::-;37585:7;37645:5;37629:12;;37614;;:27;;;;:::i;15065:140::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;15150:5:::1;::::0;15129:39:::1;::::0;15165:1:::1;::::0;15150:5:::1;::::0;::::1;-1:-1:-1::0;;;;;15150:5:0::1;::::0;15129:39:::1;::::0;15165:1;;15129:39:::1;15179:5;:18:::0;;-1:-1:-1;;;;;;15179:18:0::1;::::0;;15065:140::o;39317:105::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;39386:1:::1;39371:12;:16:::0;;;39398:12:::1;:16:::0;39317:105::o;22500:449::-;21629:10;21618:22;;;;:10;:22;;;;;;;;21610:54;;;;-1:-1:-1;;;21610:54:0;;8064:2:1;21610:54:0;;;8046:21:1;8103:2;8083:18;;;8076:30;-1:-1:-1;;;8122:18:1;;;8115:49;8181:18;;21610:54:0;7862:343:1;21610:54:0;-1:-1:-1;;;;;22648:17:0;::::1;22590:14;22648:17:::0;;;:8:::1;:17;::::0;;;;;;;22607:10:::1;22648:25:::0;;;;;;;;;22688:18;;::::1;22684:158;;22751:17;22763:5:::0;22751:9;:17:::1;:::i;:::-;-1:-1:-1::0;;;;;22723:17:0;;::::1;;::::0;;;:8:::1;:17;::::0;;;;;;;:25;;::::1;::::0;;;;;;:45;22684:158:::1;;;-1:-1:-1::0;;;;;22801:17:0;;::::1;22829:1;22801:17:::0;;;:8:::1;:17;::::0;;;;;;;:25;;::::1;::::0;;;;;;;;:29;22684:158:::1;22852:21;22858:7;22867:5;22852;:21::i;:::-;-1:-1:-1::0;;;;;22889:52:0;;::::1;22915:17;::::0;;;:8:::1;:17;::::0;;;;;;;22889:52;;::::1;22915:25:::0;;;;;;;;;;;22889:52;;3069:25:1;;;-1:-1:-1;;;;;;;;;;;22889:52:0;3042:18:1;22889:52:0::1;;;;;;;22579:370;;22500:449:::0;;:::o;15580:121::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15664:19:0;;;::::1;;::::0;;;:14:::1;:19;::::0;;;;:29;;-1:-1:-1;;15664:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;15580:121::o;38853:100::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;38924:12:::1;:21:::0;38853:100::o;38550:179::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;38626:21:::1;::::0;-1:-1:-1;;;38626:21:0;::::1;;;38618:65;;;::::0;-1:-1:-1;;;38618:65:0;;10257:2:1;38618:65:0::1;::::0;::::1;10239:21:1::0;10296:2;10276:18;;;10269:30;10335:33;10315:18;;;10308:61;10386:18;;38618:65:0::1;10055:355:1::0;38618:65:0::1;38694:17;:27:::0;;;::::1;;-1:-1:-1::0;;;38694:27:0::1;-1:-1:-1::0;;;;38694:27:0;;::::1;::::0;;;::::1;::::0;;38550:179::o;8233:20::-;;;;;;;:::i;13979:391::-;9082:16;;14093:4;;14072:10;;-1:-1:-1;;;9082:16:0;;;;:28;;;;-1:-1:-1;9102:8:0;;-1:-1:-1;;;9102:8:0;;;;9082:28;9081:47;;;-1:-1:-1;9123:5:0;;-1:-1:-1;;;;;9115:13:0;;;9123:5;;;;;9115:13;9081:47;:77;;;-1:-1:-1;9147:10:0;9132:26;;;;:14;:26;;;;;;;;9081:77;9073:109;;;;-1:-1:-1;;;9073:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14118:21:0;::::1;14110:62;;;;-1:-1:-1::0;;;14110:62:0::1;;;;;;;:::i;:::-;14226:10;14217:20;::::0;;;:8:::1;:20;::::0;;;;;;;-1:-1:-1;;;;;14217:29:0;::::1;::::0;;;;;;;;:47:::1;::::0;14249:15;;14217:47:::1;:::i;14911:146::-:0;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14983:17:0;::::1;14975:52;;;::::0;-1:-1:-1;;;14975:52:0;;10617:2:1;14975:52:0::1;::::0;::::1;10599:21:1::0;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:52;10737:18;;14975:52:0::1;10415:346:1::0;14975:52:0::1;15038:5;:11:::0;;-1:-1:-1;;;;;15038:11:0;;::::1;;;-1:-1:-1::0;;;;;;15038:11:0;;::::1;::::0;;;::::1;::::0;;14911:146::o;10623:178::-;9082:16;;10722:4;;10701:10;;-1:-1:-1;;;9082:16:0;;;;:28;;;;-1:-1:-1;9102:8:0;;-1:-1:-1;;;9102:8:0;;;;9082:28;9081:47;;;-1:-1:-1;9123:5:0;;-1:-1:-1;;;;;9115:13:0;;;9123:5;;;;;9115:13;9081:47;:77;;;-1:-1:-1;9147:10:0;9132:26;;;;:14;:26;;;;;;;;9081:77;9073:109;;;;-1:-1:-1;;;9073:109:0;;;;;;;:::i;:::-;10739:32:::1;10749:10;10761:2;10765:5;10739:9;:32::i;:::-;-1:-1:-1::0;10789:4:0::1;::::0;10623:178;-1:-1:-1;;;10623:178:0:o;42415:108::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;42490:16:::1;:25:::0;42415:108::o;38741:100::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;38812:12:::1;:21:::0;38741:100::o;20143:225::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20236:14:0;::::1;;::::0;;;:9:::1;:14;::::0;;;;;::::1;;:23;::::0;:43:::1;;-1:-1:-1::0;20263:16:0;::::1;20236:43;20228:91;;;::::0;-1:-1:-1;;;20228:91:0;;10968:2:1;20228:91:0::1;::::0;::::1;10950:21:1::0;11007:2;10987:18;;;10980:30;11046:34;11026:18;;;11019:62;-1:-1:-1;;;11097:18:1;;;11090:33;11140:19;;20228:91:0::1;10766:399:1::0;20228:91:0::1;-1:-1:-1::0;;;;;20330:20:0;;;::::1;;::::0;;;:15:::1;:20;::::0;;;;:30;;-1:-1:-1;;20330:30:0::1;::::0;::::1;;::::0;;;::::1;::::0;;20143:225::o;38175:109::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;38246:20:::1;:30:::0;;;::::1;;-1:-1:-1::0;;;38246:30:0::1;-1:-1:-1::0;;;;38246:30:0;;::::1;::::0;;;::::1;::::0;;38175:109::o;19684:104::-;19753:14;;:27;;;-1:-1:-1;;;19753:27:0;;;;19726:7;;-1:-1:-1;;;;;19753:14:0;;:25;;:27;;;;;;;;;;;;;;:14;:27;;;;;;;;;;;;;;20376:191;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;20480:23:::1;:35:::0;;;;20526:23:::1;:33:::0;20376:191::o;37926:237::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;38003:11:::1;:35:::0;;-1:-1:-1;;;;;;38003:35:0::1;-1:-1:-1::0;;;;;38003:35:0;;::::1;::::0;;::::1;::::0;;;38075:5:::1;::::0;38049:32:::1;::::0;-1:-1:-1;;;38049:32:0;;38003:35:::1;38075:5:::0;;::::1;::::0;;::::1;38049:32;::::0;::::1;3694:51:1::0;38003:35:0;38049:25:::1;::::0;3667:18:1;;38049:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;38092:21:0::1;:28:::0;;-1:-1:-1;;;;38131:24:0;-1:-1:-1;;;38131:24:0;;;-1:-1:-1;;;37926:237:0:o;42106:152::-;-1:-1:-1;;;;;42191:21:0;;42167:4;42191:21;;;:16;:21;;;;;;;;;:59;;-1:-1:-1;42234:16:0;;-1:-1:-1;;;;;42216:14:0;;:9;:14;;;;;;;;;;;:34;;42184:66;42106:152;-1:-1:-1;;42106:152:0:o;37669:217::-;37742:8;;37719:7;;-1:-1:-1;;;37742:8:0;;;;37739:121;;;37800:1;37786:11;;37771:12;:26;;;;:::i;:::-;:30;37767:82;;;-1:-1:-1;37829:4:0;;37669:217::o;37767:82::-;-1:-1:-1;37877:1:0;;37669:217::o;34959:161::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;35022:14:::1;:12;:14::i;:::-;35060:15;35047:10;:28:::0;35100:12:::1;35086:11;:26:::0;34959:161::o;16599:787::-;-1:-1:-1;;;;;16686:16:0;;16678:51;;;;-1:-1:-1;;;16678:51:0;;10617:2:1;16678:51:0;;;10599:21:1;10656:2;10636:18;;;10629:30;-1:-1:-1;;;10675:18:1;;;10668:52;10737:18;;16678:51:0;10415:346:1;16678:51:0;-1:-1:-1;;;;;16748:25:0;;;;;;:19;:25;;;;;;;;:34;16740:77;;;;-1:-1:-1;;;16740:77:0;;11372:2:1;16740:77:0;;;11354:21:1;11411:2;11391:18;;;11384:30;11450:32;11430:18;;;11423:60;11500:18;;16740:77:0;11170:354:1;16740:77:0;16842:16;;;;16838:541;;;-1:-1:-1;;;;;16895:15:0;;:9;:15;;;;;;;;;;;:23;;16913:5;;16895:23;:::i;:::-;-1:-1:-1;;;;;16877:15:0;;;:9;:15;;;;;;;;;;;:41;;;;16949:13;;;;;;;:21;;16965:5;;16949:21;:::i;:::-;-1:-1:-1;;;;;16933:13:0;;;:9;:13;;;;;;;;;;;;:37;;;;16990:25;3069::1;;;16933:13:0;;16990:25;;;;-1:-1:-1;;;;;;;;;;;16990:25:0;3042:18:1;16990:25:0;;;;;;;16599:787;;;:::o;16838:541::-;17050:28;17062:4;17068:2;17072:5;17050:11;:28::i;:::-;17095:22;17120:35;17139:4;17145:2;17149:5;17120:18;:35::i;:::-;-1:-1:-1;;;;;17188:15:0;;:9;:15;;;;;;;;;;;17095:60;;-1:-1:-1;17188:23:0;;17206:5;;17188:23;:::i;:::-;-1:-1:-1;;;;;17170:15:0;;;:9;:15;;;;;;;;;;;:41;;;;17242:13;;;;;;;:30;;17258:14;;17242:30;:::i;:::-;-1:-1:-1;;;;;17226:13:0;;;:9;:13;;;;;;;;;;;;:46;;;;17294:34;3069:25:1;;;17226:13:0;;17294:34;;;;-1:-1:-1;;;;;;;;;;;17294:34:0;3042:18:1;17294:34:0;;;;;;;17345:22;15213:134;16838:541;16599:787;;;:::o;22981:263::-;-1:-1:-1;;;;;23056:21:0;;23048:30;;;;;;23121:5;23106:12;;:20;;;;:::i;:::-;23091:12;:35;-1:-1:-1;;;;;23158:18:0;;:9;:18;;;;;;;;;;;:26;;23179:5;;23158:26;:::i;:::-;-1:-1:-1;;;;;23137:18:0;;:9;:18;;;;;;;;;;;:47;;;;23200:36;;3069:25:1;;;23137:9:0;;-1:-1:-1;;;;;;;;;;;23200:36:0;3042:18:1;23200:36:0;;;;;;;22981:263;;:::o;14414:77::-;8683:5;;;;;-1:-1:-1;;;;;8683:5:0;8669:10;:19;8661:72;;;;-1:-1:-1;;;8661:72:0;;;;;;;:::i;:::-;14468:8:::1;:15:::0;;-1:-1:-1;;;;14468:15:0::1;-1:-1:-1::0;;;14468:15:0::1;::::0;;14414:77::o;41554:165::-;41677:34;41695:4;41701:2;41705:5;41677:17;:34::i;41731:204::-;41859:7;41886:41;41911:4;41917:2;41921:5;41886:24;:41::i;:::-;41879:48;41731:204;-1:-1:-1;;;;41731:204:0:o;18787:570::-;18904:8;;-1:-1:-1;;;18904:8:0;;;;:37;;;;-1:-1:-1;18930:11:0;;;;18904:37;:68;;;;-1:-1:-1;;;;;;18959:13:0;;;;;;:9;:13;;;;;;;;18904:68;:123;;;;;19012:15;18990:13;;19006:2;18990:18;;;;:::i;:::-;:37;;18904:123;:201;;;;-1:-1:-1;19082:23:0;;19062:14;;-1:-1:-1;;;;;19062:14:0;19044:9;:34;;;;;;;;;;;:61;;18904:201;:240;;;;-1:-1:-1;;;;;;19123:21:0;;;;;;:15;:21;;;;;;;;19122:22;18904:240;:289;;;;;19161:14;;;;;;;;;-1:-1:-1;;;;;19161:14:0;-1:-1:-1;;;;;19161:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;18904:289;18886:419;;;19236:15;19220:13;:31;19266:14;;:27;;;-1:-1:-1;;;19266:27:0;;;;-1:-1:-1;;;;;19266:14:0;;;;:25;;:27;;;;;:14;;:27;;;;;;;;:14;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18886:419;19315:34;19333:4;19339:2;19343:5;19315:17;:34::i;17871:906::-;-1:-1:-1;;;;;18052:21:0;;17975:7;18052:21;;;:15;:21;;;;;;18030:5;;18052:21;;:30;;;:62;;-1:-1:-1;;;;;;18086:19:0;;;;;;:15;:19;;;;;;;;:28;18052:62;:74;;;;-1:-1:-1;18118:8:0;;-1:-1:-1;;;18118:8:0;;;;18052:74;18048:390;;;-1:-1:-1;;;;;18147:15:0;;;;;;:9;:15;;;;;;;;18143:284;;;18234:14;;:32;;-1:-1:-1;;;18234:32:0;;;;;3069:25:1;;;-1:-1:-1;;;;;18234:14:0;;;;:25;;3042:18:1;;18234:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18217:49;;18143:284;;;-1:-1:-1;;;;;18292:13:0;;;;;;:9;:13;;;;;;;;18288:139;;;18378:14;;:33;;-1:-1:-1;;;18378:33:0;;;;;3069:25:1;;;-1:-1:-1;;;;;18378:14:0;;;;:26;;3042:18:1;;18378:33:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18361:50;;18288:139;18450:17;18470:22;18478:14;18470:5;:22;:::i;:::-;18450:42;-1:-1:-1;18507:13:0;;18503:199;;18592:14;;-1:-1:-1;;;;;18592:14:0;18574:9;:34;;;;;;;;;;;:46;;18611:9;;18574:46;:::i;:::-;18555:14;;;-1:-1:-1;;;;;18555:14:0;;;18537:9;:34;;;;;;;;;;;;:83;;;;18663:14;;18640:50;;3069:25:1;;;18663:14:0;;;;18640:50;;;;-1:-1:-1;;;;;;;;;;;18640:50:0;3042:18:1;18640:50:0;;;;;;;18503:199;18719:50;18744:4;18750:2;18754:14;18719:24;:50::i;:::-;18712:57;17871:906;-1:-1:-1;;;;;;17871:906:0:o;35132:1682::-;35239:20;;-1:-1:-1;;;35239:20:0;;;;:29;;:62;;-1:-1:-1;35281:10:0;35272:20;;;;:8;:20;;;;;;;;:29;35239:62;35231:90;;;;-1:-1:-1;;;35231:90:0;;11731:2:1;35231:90:0;;;11713:21:1;11770:2;11750:18;;;11743:30;-1:-1:-1;;;11789:18:1;;;11782:45;11844:18;;35231:90:0;11529:339:1;35231:90:0;35346:8;;-1:-1:-1;;;35346:8:0;;;;:25;;;;-1:-1:-1;35366:5:0;;-1:-1:-1;;;;;35358:13:0;;;35366:5;;;;;35358:13;;35346:25;:57;;;;-1:-1:-1;;;;;;35375:19:0;;;;;;:13;:19;;;;;;;;:28;35346:57;:87;;;;-1:-1:-1;;;;;;35407:17:0;;;;;;:13;:17;;;;;;;;:26;35346:87;35342:1410;;;35468:11;;:15;35464:122;;35524:11;;35511:9;:24;;35503:67;;;;-1:-1:-1;;;35503:67:0;;12075:2:1;35503:67:0;;;12057:21:1;12114:2;12094:18;;;12087:30;12153:32;12133:18;;;12126:60;12203:18;;35503:67:0;11873:354:1;35503:67:0;35633:1;35618:12;;:16;:42;;;;-1:-1:-1;;;;;;35638:13:0;;;;;;:9;:13;;;;;;;;:22;35618:42;35614:164;;;35715:10;:8;:10::i;:::-;-1:-1:-1;;;;;35690:13:0;;:9;:13;;;;;;;;;;;:21;;35706:5;;35690:21;:::i;:::-;:35;;35681:81;;;;-1:-1:-1;;;35681:81:0;;12434:2:1;35681:81:0;;;12416:21:1;;;12453:18;;;12446:30;12512:34;12492:18;;;12485:62;12564:18;;35681:81:0;12232:356:1;35681:81:0;35825:1;35810:12;;:16;:33;;;;-1:-1:-1;;;;;;35830:13:0;;;;;;:9;:13;;;;;;;;35810:33;35806:139;;;35882:10;:8;:10::i;:::-;35873:5;:19;;35864:65;;;;-1:-1:-1;;;35864:65:0;;12795:2:1;35864:65:0;;;12777:21:1;;;12814:18;;;12807:30;12873:34;12853:18;;;12846:62;12925:18;;35864:65:0;12593:356:1;35864:65:0;35976:24;;-1:-1:-1;;;35976:24:0;;;;35973:635;;;-1:-1:-1;;;;;36025:23:0;;;;;;:19;:23;;;;;;36052:12;36025:39;;36021:146;;-1:-1:-1;;;;;36089:12:0;;;;;;:8;:12;;;;;:19;;-1:-1:-1;;36089:19:0;36104:4;36089:19;;;36131:13;:16;;;;;;:::i;:::-;;;;;;36021:146;-1:-1:-1;;;;;36189:25:0;;;;;;:19;:25;;;;;;36218:12;36189:41;;36185:150;;-1:-1:-1;;;;;36255:14:0;;;;;;:8;:14;;;;;:21;;-1:-1:-1;;36255:21:0;36272:4;36255:21;;;36299:13;:16;;;;;;:::i;:::-;;;;;;36185:150;-1:-1:-1;;;;;36357:13:0;;;;;;:9;:13;;;;;;;;:22;;;;36353:109;;-1:-1:-1;;;;;36404:23:0;;;;;;:19;:23;;;;;36430:12;36404:38;;36353:109;-1:-1:-1;;;;;36484:15:0;;;;;;:9;:15;;;;;;;;:24;;;;36480:113;;-1:-1:-1;;;;;36533:25:0;;;;;;:19;:25;;;;;36561:12;36533:40;;36480:113;36640:17;;-1:-1:-1;;;36640:17:0;;;;36636:105;;;36678:11;;:47;;-1:-1:-1;;;36678:47:0;;-1:-1:-1;;;;;13352:15:1;;;36678:47:0;;;13334:34:1;13404:15;;;13384:18;;;13377:43;13436:18;;;13429:34;;;36678:11:0;;;;:30;;13269:18:1;;36678:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16599:787;;;:::o;36826:552::-;36995:8;;36930:7;;36975:5;;-1:-1:-1;;;36995:8:0;;;;:34;;;;-1:-1:-1;37007:22:0;;-1:-1:-1;;;37007:22:0;;;;36995:34;36991:312;;;37058:5;;-1:-1:-1;;;;;37050:13:0;;;37058:5;;;;;37050:13;;;;:32;;;37081:1;37067:11;:9;:11::i;:::-;:15;37050:32;:64;;;;-1:-1:-1;;;;;;37086:19:0;;;;;;:13;:19;;;;;;;;:28;37050:64;:94;;;;-1:-1:-1;;;;;;37118:17:0;;;;;;:13;:17;;;;;;;;:26;37050:94;37046:246;;;37165:17;37209:5;37194:11;:9;:11::i;:::-;37186:19;;:5;:19;:::i;:::-;37185:29;;;;:::i;:::-;37165:49;-1:-1:-1;37250:26:0;37165:49;37250:14;:26;:::i;:::-;37233:43;;37146:146;37046:246;37320:50;37345:4;37351:2;37355:14;37320:24;:50::i;:::-;37313:57;36826:552;-1:-1:-1;;;;;36826:552:0:o;14593:200::-;14688:7;14724:2;-1:-1:-1;;;;;14716:10:0;:4;-1:-1:-1;;;;;14716:10:0;;14708:54;;;;-1:-1:-1;;;14708:54:0;;13676:2:1;14708:54:0;;;13658:21:1;13715:2;13695:18;;;13688:30;13754:33;13734:18;;;13727:61;13805:18;;14708:54:0;13474:355:1;14708:54:0;-1:-1:-1;14780:5:0;14593:200;-1:-1:-1;;14593:200:0:o;206:423:1:-;248:3;286:5;280:12;313:6;308:3;301:19;338:1;348:162;362:6;359:1;356:13;348:162;;;424:4;480:13;;;476:22;;470:29;452:11;;;448:20;;441:59;377:12;348:162;;;352:3;555:1;548:4;539:6;534:3;530:16;526:27;519:38;618:4;611:2;607:7;602:2;594:6;590:15;586:29;581:3;577:39;573:50;566:57;;;206:423;;;;:::o;634:220::-;783:2;772:9;765:21;746:4;803:45;844:2;833:9;829:18;821:6;803:45;:::i;:::-;795:53;634:220;-1:-1:-1;;;634:220:1:o;859:127::-;920:10;915:3;911:20;908:1;901:31;951:4;948:1;941:15;975:4;972:1;965:15;991:719;1034:5;1087:3;1080:4;1072:6;1068:17;1064:27;1054:55;;1105:1;1102;1095:12;1054:55;1141:6;1128:20;1167:18;1204:2;1200;1197:10;1194:36;;;1210:18;;:::i;:::-;1285:2;1279:9;1253:2;1339:13;;-1:-1:-1;;1335:22:1;;;1359:2;1331:31;1327:40;1315:53;;;1383:18;;;1403:22;;;1380:46;1377:72;;;1429:18;;:::i;:::-;1469:10;1465:2;1458:22;1504:2;1496:6;1489:18;1550:3;1543:4;1538:2;1530:6;1526:15;1522:26;1519:35;1516:55;;;1567:1;1564;1557:12;1516:55;1631:2;1624:4;1616:6;1612:17;1605:4;1597:6;1593:17;1580:54;1678:1;1671:4;1666:2;1658:6;1654:15;1650:26;1643:37;1698:6;1689:15;;;;;;991:719;;;;:::o;1715:390::-;1793:6;1801;1854:2;1842:9;1833:7;1829:23;1825:32;1822:52;;;1870:1;1867;1860:12;1822:52;1910:9;1897:23;1943:18;1935:6;1932:30;1929:50;;;1975:1;1972;1965:12;1929:50;1998;2040:7;2031:6;2020:9;2016:22;1998:50;:::i;:::-;1988:60;2095:2;2080:18;;;;2067:32;;-1:-1:-1;;;;1715:390:1:o;2110:173::-;2178:20;;-1:-1:-1;;;;;2227:31:1;;2217:42;;2207:70;;2273:1;2270;2263:12;2207:70;2110:173;;;:::o;2288:254::-;2356:6;2364;2417:2;2405:9;2396:7;2392:23;2388:32;2385:52;;;2433:1;2430;2423:12;2385:52;2456:29;2475:9;2456:29;:::i;:::-;2446:39;2532:2;2517:18;;;;2504:32;;-1:-1:-1;;;2288:254:1:o;2547:186::-;2606:6;2659:2;2647:9;2638:7;2634:23;2630:32;2627:52;;;2675:1;2672;2665:12;2627:52;2698:29;2717:9;2698:29;:::i;2738:180::-;2797:6;2850:2;2838:9;2829:7;2825:23;2821:32;2818:52;;;2866:1;2863;2856:12;2818:52;-1:-1:-1;2889:23:1;;2738:180;-1:-1:-1;2738:180:1:o;3105:118::-;3191:5;3184:13;3177:21;3170:5;3167:32;3157:60;;3213:1;3210;3203:12;3228:315;3293:6;3301;3354:2;3342:9;3333:7;3329:23;3325:32;3322:52;;;3370:1;3367;3360:12;3322:52;3393:29;3412:9;3393:29;:::i;:::-;3383:39;;3472:2;3461:9;3457:18;3444:32;3485:28;3507:5;3485:28;:::i;:::-;3532:5;3522:15;;;3228:315;;;;;:::o;3756:328::-;3833:6;3841;3849;3902:2;3890:9;3881:7;3877:23;3873:32;3870:52;;;3918:1;3915;3908:12;3870:52;3941:29;3960:9;3941:29;:::i;:::-;3931:39;;3989:38;4023:2;4012:9;4008:18;3989:38;:::i;:::-;3979:48;;4074:2;4063:9;4059:18;4046:32;4036:42;;3756:328;;;;;:::o;4278:241::-;4334:6;4387:2;4375:9;4366:7;4362:23;4358:32;4355:52;;;4403:1;4400;4393:12;4355:52;4442:9;4429:23;4461:28;4483:5;4461:28;:::i;4753:396::-;4831:6;4839;4892:2;4880:9;4871:7;4867:23;4863:32;4860:52;;;4908:1;4905;4898:12;4860:52;4948:9;4935:23;4981:18;4973:6;4970:30;4967:50;;;5013:1;5010;5003:12;4967:50;5036;5078:7;5069:6;5058:9;5054:22;5036:50;:::i;:::-;5026:60;;;5105:38;5139:2;5128:9;5124:18;5105:38;:::i;:::-;5095:48;;4753:396;;;;;:::o;5154:260::-;5222:6;5230;5283:2;5271:9;5262:7;5258:23;5254:32;5251:52;;;5299:1;5296;5289:12;5251:52;5322:29;5341:9;5322:29;:::i;:::-;5312:39;;5370:38;5404:2;5393:9;5389:18;5370:38;:::i;5419:248::-;5487:6;5495;5548:2;5536:9;5527:7;5523:23;5519:32;5516:52;;;5564:1;5561;5554:12;5516:52;-1:-1:-1;;5587:23:1;;;5657:2;5642:18;;;5629:32;;-1:-1:-1;5419:248:1:o;5672:404::-;5874:2;5856:21;;;5913:2;5893:18;;;5886:30;5952:34;5947:2;5932:18;;5925:62;-1:-1:-1;;;6018:2:1;6003:18;;5996:38;6066:3;6051:19;;5672:404::o;6081:380::-;6160:1;6156:12;;;;6203;;;6224:61;;6278:4;6270:6;6266:17;6256:27;;6224:61;6331:2;6323:6;6320:14;6300:18;6297:38;6294:161;;6377:10;6372:3;6368:20;6365:1;6358:31;6412:4;6409:1;6402:15;6440:4;6437:1;6430:15;6294:161;;6081:380;;;:::o;6466:291::-;6643:2;6632:9;6625:21;6606:4;6663:45;6704:2;6693:9;6689:18;6681:6;6663:45;:::i;:::-;6655:53;;6744:6;6739:2;6728:9;6724:18;6717:34;6466:291;;;;;:::o;6762:343::-;6964:2;6946:21;;;7003:2;6983:18;;;6976:30;-1:-1:-1;;;7037:2:1;7022:18;;7015:49;7096:2;7081:18;;6762:343::o;7110:352::-;7312:2;7294:21;;;7351:2;7331:18;;;7324:30;7390;7385:2;7370:18;;7363:58;7453:2;7438:18;;7110:352::o;7467:127::-;7528:10;7523:3;7519:20;7516:1;7509:31;7559:4;7556:1;7549:15;7583:4;7580:1;7573:15;7599:128;7666:9;;;7687:11;;;7684:37;;;7701:18;;:::i;7732:125::-;7797:9;;;7818:10;;;7815:36;;;7831:18;;:::i;8620:184::-;8690:6;8743:2;8731:9;8722:7;8718:23;8714:32;8711:52;;;8759:1;8756;8749:12;8711:52;-1:-1:-1;8782:16:1;;8620:184;-1:-1:-1;8620:184:1:o;8809:317::-;8986:2;8975:9;8968:21;8949:4;9006:45;9047:2;9036:9;9032:18;9024:6;9006:45;:::i;:::-;8998:53;;9116:1;9112;9107:3;9103:11;9099:19;9091:6;9087:32;9082:2;9071:9;9067:18;9060:60;8809:317;;;;;:::o;9131:168::-;9204:9;;;9235;;9252:15;;;9246:22;;9232:37;9222:71;;9273:18;;:::i;9304:217::-;9344:1;9370;9360:132;;9414:10;9409:3;9405:20;9402:1;9395:31;9449:4;9446:1;9439:15;9477:4;9474:1;9467:15;9360:132;-1:-1:-1;9506:9:1;;9304:217::o;9805:245::-;9872:6;9925:2;9913:9;9904:7;9900:23;9896:32;9893:52;;;9941:1;9938;9931:12;9893:52;9973:9;9967:16;9992:28;10014:5;9992:28;:::i;12954:135::-;12993:3;13014:17;;;13011:43;;13034:18;;:::i;:::-;-1:-1:-1;13081:1:1;13070:13;;12954:135::o
Swarm Source
ipfs://b4f3f02d36e25dcca09b690e5a521c39bd6f40aa0d236b8000774d50e1f39d15
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.