ETH Price: $2,516.36 (-1.35%)

Token

DollarSqueeze (DSQ)
 

Overview

Max Total Supply

100,000,000 DSQ

Holders

952 (0.00%)

Market

Price

$0.01 @ 0.000003 ETH (+2.86%)

Onchain Market Cap

$795,930.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 DSQ

Value
$0.00
0xe6e365b1a0422d46377e9c3a9d28eb6fe7427dad
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

A utility-focused project that aims to reduce supply from 100M to 21M using revenue from top-quality utilities. This goal being attained by burning as much tokens as possible from taxes + revenue of our utilities.

# Exchange Pair Price  24H Volume % Volume
1
Uniswap V2 (Ethereum)
0X7340EA46360576DC46EF49BCE99BC5072C32421D-0XC02AAA39B223FE8D0A0E5C4F27EAD9083C756CC2$0.0079
0.0000032 Eth
$1,032.10
132,337.607 0X7340EA46360576DC46EF49BCE99BC5072C32421D
100.0000%

Contract Source Code Verified (Exact Match)

Contract Name:
DollarSqueeze

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-20
*/

/**
TG: https://t.me/DollarSqueeze
Website: https://dollarsqueeze.io
Author: @bLock_doctor
 */
// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.12;
 
library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }
    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
interface IUniRouterV1
{
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    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 addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
interface IUniRouterV2 is IUniRouterV1
{
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}
library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}
contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;
    address _token;
    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }
    IUniRouterV2 router;
    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    mapping (address => Share) public shares;
    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;
    uint256 public minPeriod = 1 hours;
    uint256 public minDistribution = 1;
    uint256 currentIndex;
    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }
    modifier onlyToken() {
        require(msg.sender == _token); _;
    }
    constructor (IUniRouterV2 _router) {
        router = _router;
        _token = msg.sender;
    }
    function setDistributionCriteria(uint256 newMinPeriod, uint256 newMinDistribution) external override onlyToken {
        minPeriod = newMinPeriod;
        minDistribution = newMinDistribution;
    }
    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }
        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }
        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }
    function deposit() external payable override onlyToken
    {
        totalDividends = totalDividends.add(msg.value);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(msg.value).div(totalShares));
    }
    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;
        if(shareholderCount == 0) { return; }
        uint256 iterations = 0;
        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();
        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){ currentIndex = 0; }
            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }
            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }
    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }
        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            (bool success, ) = payable(shareholder).call{value: amount, gas: 30000}("");
            success = false;
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
    function claimDividend() external {
        require(shouldDistribute(msg.sender), "Too soon. Need to wait!");
        distributeDividend(msg.sender);
    }
    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }
        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }
        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }
    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }
    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }
    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }
}
contract Ownable {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(msg.sender==owner(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        _owner = address(0);
        emit OwnershipTransferred(_owner, address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _owner = newOwner;
        emit OwnershipTransferred(_owner, newOwner);
    }
}
contract DollarSqueeze is IERC20, Ownable {
    string private _tokenName="DollarSqueeze";
    string private _tokenSymbol="DSQ";
    uint8 private _decimals=18;
    uint256 private _totalSupply=100000000*10**_decimals; // 100m
    // Transaction Tax
    uint8 private _buyTax=6;
    uint8 private _sellTax=20;
    uint8 private _burnTax=1;
    uint8 private _transferTax=0;
    // Trading
    bool private _airdropDone=false;
    bool private _tradingEnabled=false;
    uint256 private _maxTx=1000000*10**_decimals; // 1m
    // Wallets
    address public backupOwner=0xAe7c6C4D33667185db125842d31e3D79d614986d;
    address public marketingWallet=0xa62909d663e79Eaa49c86F429EE1538be50862aD;
    address public burnWallet=address(0xdead);
    address public zeroAddress=address(0);
    IUniRouterV2 private _router;
    address public _pair;
    // Reward Distributor
    DividendDistributor public dividendDistributor;
    address public dividendDistributorAddress;
    uint256 distributorGas=500000;
    // Mappings
    mapping(address=>uint256) private _balances;
    mapping(address=>mapping (address => uint256)) private _allowances;
    mapping(address=>bool) private _excludedFromFee;
    mapping(address=>bool) private _excludedFromRewards;
    mapping(address=>bool) private _automatedMarketMakers;
    //
    // Swap & Liquify Taxes
    SwapTaxes private _swapTaxes;
    struct SwapTaxes {
        uint8 marketingTax;
        uint8 liquidityTax;
        uint8 rewardsTax;
    }
    //Swap & Liquify
    bool private _inSwap;
    bool private _swapEnabled;
    uint256 private _swapThreshold=100000*10**_decimals;
    modifier lockTheSwap {_inSwap = true;_;_inSwap = false;}
    event SwapAndLiquify(
        uint256 amountTokens,
        uint256 amountETH
    );
 
    constructor() {
        _router = IUniRouterV2(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _pair = IDEXFactory(_router.factory()).createPair(_router.WETH(), address(this));
        _allowances[address(this)][address(_router)]=type(uint256).max;
        _automatedMarketMakers[_pair] = true;
        _excludedFromFee[msg.sender]=true;
        _excludedFromFee[address(this)]=true;
        _excludedFromFee[burnWallet]=true;
        _excludedFromFee[zeroAddress]=true;
        _excludedFromRewards[_pair]=true;
        _excludedFromRewards[msg.sender]=true;
        _excludedFromRewards[address(this)]=true;
        _excludedFromRewards[burnWallet]=true;
        _excludedFromRewards[zeroAddress]=true;
        _swapTaxes=SwapTaxes(50,20,30);
        dividendDistributor = new DividendDistributor(_router);
        dividendDistributorAddress=address(dividendDistributor);
        _balances[msg.sender]+=_totalSupply;
        emit Transfer(address(0),msg.sender,_totalSupply);
    }
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        bool isExcluded=_excludedFromFee[from]||_excludedFromFee[to]||_inSwap;
        bool isBuy=_automatedMarketMakers[from];
        bool isSell=_automatedMarketMakers[to];
        if(isExcluded)_tokenTransfer(from,to,amount,0);
        else {
            require(_tradingEnabled);
            if(isBuy)_buyTokens(from,to,amount);
            else if(isSell) {
                if(!_inSwap&&_swapEnabled)_swapAndLiquify(false);
                _sellTokens(from,to,amount);
            } else {
                _tokenTransfer(from,to,amount,_transferTax*amount/100);
            }
        }
    }
    function _swapAndLiquify(
        bool ignoreLimits
    ) private lockTheSwap {
        uint256 contractTokenBalance=_balances[address(this)];
        uint256 toSwap=_swapThreshold;
        if(contractTokenBalance<toSwap) {
            if(ignoreLimits&&contractTokenBalance>0) {
                toSwap=contractTokenBalance;
            } else return;
        }
        uint256 totalLiquidityTokens=toSwap*_swapTaxes.liquidityTax/100;
        uint256 tokensRemaining=toSwap-totalLiquidityTokens;
        uint256 liquidityTokens=totalLiquidityTokens/2;
        uint256 liquidityETHTokens=totalLiquidityTokens-liquidityTokens;
        toSwap=tokensRemaining+liquidityETHTokens;
        uint256 oldETH=address(this).balance;
        _swapTokensForETH(toSwap);
        uint256 newETH=address(this).balance-oldETH;
        uint256 liquidityETH=(newETH*liquidityETHTokens)/toSwap;
        uint256 remainingETH=newETH-liquidityETH;
        uint256 marketingETH=remainingETH*_swapTaxes.marketingTax/100;
        uint256 rewardsETH=remainingETH-marketingETH;
        if (rewardsETH > 0)
            try dividendDistributor.deposit{value: rewardsETH}() {} catch {}
        (bool transferMarketing,) = payable(marketingWallet).call{value: marketingETH, gas: 30000}("");
        transferMarketing=false;
        _addLiquidity(liquidityTokens,liquidityETH);
        emit SwapAndLiquify(liquidityTokens,liquidityETH);
    }
    function _buyTokens(
        address from,
        address to,
        uint256 amount
    ) private {
        require(amount<=_maxTx,"Amount exceeds maxTx.");
        _tokenTransfer(from,to,amount,amount*_buyTax/100);
    }
    function _sellTokens(
        address from,
        address to,
        uint256 amount
    ) private {
        require(amount<=_maxTx,"Amount exceeds maxTx.");
        _tokenTransfer(from,to,amount,amount*_sellTax/100);
    }
    function _tokenTransfer(
        address from,
        address to,
        uint256 amount,
        uint256 tax
    ) private {
        uint256 tokensToBurn=_burnTax*tax/100;
        _balances[from]-=amount;
        _balances[burnWallet]+=tokensToBurn;
        _balances[address(this)]+=(tax-tokensToBurn);
        _balances[to]+=(amount-tax);
        if(!_excludedFromRewards[from]) try dividendDistributor.setShare(from,_balances[from]) {} catch {}
        if(!_excludedFromRewards[to]) try dividendDistributor.setShare(to,_balances[to]) {} catch {}
        try dividendDistributor.process(distributorGas) {} catch {}
        emit Transfer(from,to,(amount-tax));
    }
    function _swapTokensForETH(
        uint256 tokenAmount
    ) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _router.WETH();
        _approve(address(this), address(_router), tokenAmount);
        _router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp
        );
    }
    function _addLiquidity(
        uint256 tokenAmount,
        uint256 ETHAmount
    ) private {
        _approve(address(this), address(_router), tokenAmount);
        _router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            burnWallet,
            block.timestamp
        );
    }
    //
    function enableTrading() public onlyOwner() {
        require(!_tradingEnabled,"Trading is already enabled.");
        _tradingEnabled=!_tradingEnabled;
    }
    function recoverOwnershipFromBackup() public {
        require(msg.sender==backupOwner);
        transferOwnership(backupOwner);
    }
    function updateBackupOwnerWallet(
        address _backupOwner
    ) public onlyOwner {
        backupOwner=_backupOwner;
    }
    function updateAutomatedMarketMakers(
        address marketMaker,
        bool enabled
    ) public onlyOwner {
        _automatedMarketMakers[marketMaker]=enabled;
        excludeFromReward(marketMaker,true);
    }
    function updateTax(
        uint8 buyTax,
        uint8 sellTax,
        uint8 burnTax,
        uint8 transferTax
    ) public onlyOwner {
        require(_buyTax+sellTax<=30,"Taxes cannot exceed 30%.");
        require(_transferTax<=20,"Transfer tax cannot exceed 20%.");
        _buyTax=buyTax;
        _sellTax=sellTax;
        _burnTax=burnTax;
        _transferTax=transferTax;
    }
    function updateSwapTaxes(
        uint8 marketingTax,
        uint8 rewardsTax,
        uint8 liquidityTax
    ) public onlyOwner {
        require((marketingTax+rewardsTax+liquidityTax)==100,"Swap tax cannot exceed 100.");
        _swapTaxes.marketingTax=marketingTax;
        _swapTaxes.rewardsTax=rewardsTax;
        _swapTaxes.liquidityTax=liquidityTax;
    }
    function updateSwapThreshold(
        uint256 swapThreshold
    ) public onlyOwner {
        require(_swapThreshold>0&&swapThreshold<=(_totalSupply*1/100));
        _swapThreshold=swapThreshold;
    }
    function switchSwapEnabled(
        bool swapEnabled
    ) public onlyOwner {
        _swapEnabled=swapEnabled;
    }
    function triggerSwapAndLiquify(
        bool ignoreLimits
    ) public onlyOwner {
        _swapAndLiquify(ignoreLimits);
    }
    function excludeFromFee(
        address account,
        bool excluded
    ) public onlyOwner {
        _excludedFromFee[account]=excluded;
    }
    function excludeFromReward(
        address account,
        bool excluded
    ) public onlyOwner {
        _excludedFromRewards[account]=excluded;
        try dividendDistributor.setShare(account,excluded?0:_balances[account]) {} catch {}
    }
    function updateMaxTx(
        uint256 maxTx
    ) public onlyOwner {
        require(maxTx>=(_totalSupply*1/100) / 2);
        _maxTx=maxTx*10**_decimals;
    }
    function updateMarketingWallet(
        address _marketingWallet
    ) public onlyOwner {
        require(_marketingWallet!=address(0),"Cannot be zero address!");
        marketingWallet=_marketingWallet;
    }
    function withdrawStrandedToken(
        address strandedToken
    ) public onlyOwner {
        require(strandedToken!=address(this));
        IERC20 token=IERC20(strandedToken);
        token.transfer(owner(),token.balanceOf(address(this)));
    }
    function withdrawStuckETH() public onlyOwner {
        (bool success,)=msg.sender.call{value:(address(this).balance)}("");
        require(success);
    }
    function addRewardsManually() public payable onlyOwner {
        require(msg.value>0);
        try dividendDistributor.deposit{value: msg.value}() {} catch {}
    }
    function updateDistributorSettings(
        uint256 _minPeriod,
        uint256 _minDistribution,
        uint256 gas
    ) public onlyOwner {
        require(gas<=1200000);
        dividendDistributor.setDistributionCriteria(_minPeriod, _minDistribution);
        distributorGas = gas;
    }
    //
    function showMaxTx() public view returns(uint256) {
        return _maxTx;
    }
    function isSwapEnabled() public view returns(bool) {
        return _swapEnabled;
    }
    function showTradeTaxes() public view returns(
        uint8 buyTax, 
        uint8 sellTax,
        uint8 burnTax,
        uint8 transferTax
    ) {
        buyTax=_buyTax;
        sellTax=_sellTax;
        burnTax=_burnTax;
        transferTax=_transferTax;
    }
    function showSwapTaxes() public view returns(
        uint8 marketingTax, 
        uint8 liquidityTax, 
        uint8 rewardsTax
    ) {
        marketingTax=_swapTaxes.marketingTax;
        liquidityTax=_swapTaxes.liquidityTax;
        rewardsTax=_swapTaxes.rewardsTax;
    }
    function showDistributorDetails() public view returns(
        address _distributorAddress, 
        uint256 _distributorGas
    ) {
        _distributorAddress=dividendDistributorAddress;
        _distributorGas=distributorGas;
    }
    function isTradingEnabled() public view returns(bool) {
        return _tradingEnabled;
    }
    //
    function transfer(
        address recipient, 
        uint256 amount
    ) external override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }
    function transferFrom(
        address sender, 
        address recipient, 
        uint256 amount
    ) external override returns (bool) {
        uint256 allowance_ = _allowances[sender][msg.sender];
        _transfer(sender, recipient, amount);
        require(allowance_ >= amount);
        _approve(sender, msg.sender, allowance_ - amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }
    function _approve(
        address owner, 
        address spender, 
        uint256 amount
    ) private {
        require((owner != address(0) && spender != address(0)), "Owner/Spender address cannot be 0.");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
    function approve(
        address spender, 
        uint256 amount
    ) external override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }
    function allowance(
        address owner_,
        address spender
    ) external view override returns (uint256) {
        return _allowances[owner_][spender];
    }
    function balanceOf(
        address account
    ) external view override returns (uint256) {
        return _balances[account];
    }
    function name() external view returns (string memory) {
        return _tokenName;
    }
    function symbol() external view returns (string memory) {
        return _tokenSymbol;
    }
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }
    function decimals() external view returns (uint8) {
        return _decimals;
    }
    function getOwner() external view returns (address) {
        return owner();
    }
    receive() external payable { }
}

Contract Security Audit

Contract ABI

[{"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":false,"internalType":"uint256","name":"amountTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addRewardsManually","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"backupOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendDistributor","outputs":[{"internalType":"contract DividendDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendDistributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapEnabled","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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recoverOwnershipFromBackup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"showDistributorDetails","outputs":[{"internalType":"address","name":"_distributorAddress","type":"address"},{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"showMaxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"showSwapTaxes","outputs":[{"internalType":"uint8","name":"marketingTax","type":"uint8"},{"internalType":"uint8","name":"liquidityTax","type":"uint8"},{"internalType":"uint8","name":"rewardsTax","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"showTradeTaxes","outputs":[{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"burnTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"swapEnabled","type":"bool"}],"name":"switchSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"ignoreLimits","type":"bool"}],"name":"triggerSwapAndLiquify","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketMaker","type":"address"},{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateAutomatedMarketMakers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_backupOwner","type":"address"}],"name":"updateBackupOwnerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"updateDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTx","type":"uint256"}],"name":"updateMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"marketingTax","type":"uint8"},{"internalType":"uint8","name":"rewardsTax","type":"uint8"},{"internalType":"uint8","name":"liquidityTax","type":"uint8"}],"name":"updateSwapTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapThreshold","type":"uint256"}],"name":"updateSwapThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"buyTax","type":"uint8"},{"internalType":"uint8","name":"sellTax","type":"uint8"},{"internalType":"uint8","name":"burnTax","type":"uint8"},{"internalType":"uint8","name":"transferTax","type":"uint8"}],"name":"updateTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"strandedToken","type":"address"}],"name":"withdrawStrandedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"zeroAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600d60808190526c446f6c6c617253717565657a6560981b60a09081526200003091600191906200051f565b506040805180820190915260038082526244535160e81b60209092019182526200005d916002916200051f565b506003805460ff191660129081179091556200007b90600a620006e8565b6200008b906305f5e10062000700565b6004556005805465ffffffffffff191662011406179055600354620000b59060ff16600a620006e8565b620000c490620f424062000700565b600655600780546001600160a01b031990811673ae7c6c4d33667185db125842d31e3d79d614986d1790915560088054821673a62909d663e79eaa49c86f429ee1538be50862ad17905560098054821661dead179055600a805490911681556207a120600f556003546200013e9160ff90911690620006e8565b6200014d90620186a062000700565b6017553480156200015d57600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600b80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000202573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000228919062000722565b6001600160a01b031663c9c65396600b60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200028a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b0919062000722565b6040516001600160e01b031960e084901b1681526001600160a01b0390911660048201523060248201526044016020604051808303816000875af1158015620002fd573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000323919062000722565b600c80546001600160a01b0319166001600160a01b03928316178155306000818152601160209081526040808320600b80548816855290835281842060001990558554871684526014808452828520805460ff199081166001908117909255338088526012875285882080548316841790558888528588208054831684179055600980548c1689528689208054841685179055600a80548d168a52878a2080548516861790559a548c16895260138852868920805484168517905590885285882080548316841790559787528487208054821683179055965489168652838620805488168217905596548816855293829020805490951690951790935582516060810184526032815290810191909152601e908201526015805462ffffff1916621e1432179055905490519116906200045c90620005ae565b6001600160a01b039091168152602001604051809103906000f08015801562000489573d6000803e3d6000fd5b50600d80546001600160a01b03929092166001600160a01b03199283168117909155600e80549092161790556004543360009081526010602052604081208054909190620004d99084906200074d565b909155505060045460405190815233906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3620007a5565b8280546200052d9062000768565b90600052602060002090601f0160209004810192826200055157600085556200059c565b82601f106200056c57805160ff19168380011785556200059c565b828001600101855582156200059c579182015b828111156200059c5782518255916020019190600101906200057f565b50620005aa929150620005bc565b5090565b610b878062002bea83390190565b5b80821115620005aa5760008155600101620005bd565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200062a5781600019048211156200060e576200060e620005d3565b808516156200061c57918102915b93841c9390800290620005ee565b509250929050565b6000826200064357506001620006e2565b816200065257506000620006e2565b81600181146200066b5760028114620006765762000696565b6001915050620006e2565b60ff8411156200068a576200068a620005d3565b50506001821b620006e2565b5060208310610133831016604e8410600b8410161715620006bb575081810a620006e2565b620006c78383620005e9565b8060001904821115620006de57620006de620005d3565b0290505b92915050565b6000620006f960ff84168362000632565b9392505050565b60008160001904831182151516156200071d576200071d620005d3565b500290565b6000602082840312156200073557600080fd5b81516001600160a01b0381168114620006f957600080fd5b60008219821115620007635762000763620005d3565b500190565b600181811c908216806200077d57607f821691505b602082108114156200079f57634e487b7160e01b600052602260045260246000fd5b50919050565b61243580620007b56000396000f3fe6080604052600436106102605760003560e01c806375f0a87411610144578063bad3ea6a116100b6578063df8408fe1161007a578063df8408fe1461072f578063ea45eac61461074f578063f2fde38b1461079b578063f5648a4f146107bb578063fc964b62146107d0578063ff8561451461080d57600080fd5b8063bad3ea6a14610669578063c2d0ffca14610689578063c554d6c1146106a9578063cc274b29146106c9578063dd62ed3e146106e957600080fd5b80638df39ec2116101085780638df39ec2146105b457806395d89b41146105d4578063a26bd13c146105e9578063a9059cbb14610609578063aacebbe314610629578063b51449bb1461064957600080fd5b806375f0a8741461054c5780638552e75f1461056c578063893d20e8146105815780638a8c523c1461059f5780638da5cb5b1461058157600080fd5b80632e9701f7116101dd57806335ccb11b116101a157806335ccb11b146104995780633644b0a2146104b95780633af8e4ab146104d957806370a08231146104f9578063715018a61461052f57806373155de31461054457600080fd5b80632e9701f7146103fa578063313ce5671461041a5780633143a28a1461043c578063351a964d1461045c57806335c6f9bc1461047957600080fd5b806318160ddd1161022457806318160ddd1461033657806318fc62ac1461035557806323b872dd146103775780632a979b9f146103975780632c4adf30146103b757600080fd5b8063062287491461026c578063064a59d0146102a957806306fdde03146102d45780630930907b146102f6578063095ea7b31461031657600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5060095461028c906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102b557600080fd5b50600554600160281b900460ff165b60405190151581526020016102a0565b3480156102e057600080fd5b506102e9610822565b6040516102a09190611e6a565b34801561030257600080fd5b50600a5461028c906001600160a01b031681565b34801561032257600080fd5b506102c4610331366004611ed4565b6108b4565b34801561034257600080fd5b506004545b6040519081526020016102a0565b34801561036157600080fd5b50610375610370366004611f16565b6108cb565b005b34801561038357600080fd5b506102c4610392366004611f59565b61099b565b3480156103a357600080fd5b506103756103b2366004611fa8565b610a43565b3480156103c357600080fd5b506103db600e54600f546001600160a01b0390911691565b604080516001600160a01b0390931683526020830191909152016102a0565b34801561040657600080fd5b50610375610415366004611fcc565b610a87565b34801561042657600080fd5b5060035460405160ff90911681526020016102a0565b34801561044857600080fd5b50610375610457366004611fe9565b610ad3565b34801561046857600080fd5b50601654610100900460ff166102c4565b34801561048557600080fd5b50610375610494366004611fe9565b610b30565b3480156104a557600080fd5b506103756104b4366004611fcc565b610c0e565b3480156104c557600080fd5b506103756104d4366004612022565b610d4c565b3480156104e557600080fd5b5060075461028c906001600160a01b031681565b34801561050557600080fd5b50610347610514366004611fcc565b6001600160a01b031660009081526010602052604090205490565b34801561053b57600080fd5b50610375610df5565b610375610e5b565b34801561055857600080fd5b5060085461028c906001600160a01b031681565b34801561057857600080fd5b50610375610ef8565b34801561058d57600080fd5b506000546001600160a01b031661028c565b3480156105ab57600080fd5b50610375610f24565b3480156105c057600080fd5b506103756105cf36600461204e565b610fcb565b3480156105e057600080fd5b506102e9611106565b3480156105f557600080fd5b50600e5461028c906001600160a01b031681565b34801561061557600080fd5b506102c4610624366004611ed4565b611115565b34801561063557600080fd5b50610375610644366004611fcc565b611122565b34801561065557600080fd5b50600c5461028c906001600160a01b031681565b34801561067557600080fd5b50600d5461028c906001600160a01b031681565b34801561069557600080fd5b506103756106a43660046120a2565b6111c4565b3480156106b557600080fd5b506103756106c4366004611fa8565b611242565b3480156106d557600080fd5b506103756106e43660046120a2565b611275565b3480156106f557600080fd5b506103476107043660046120bb565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561073b57600080fd5b5061037561074a366004611fe9565b6112d9565b34801561075b57600080fd5b506005546040805160ff808416825261010084048116602083015262010000840481169282019290925263010000009092041660608201526080016102a0565b3480156107a757600080fd5b506103756107b6366004611fcc565b61132e565b3480156107c757600080fd5b50610375611408565b3480156107dc57600080fd5b506015546040805160ff808416825261010084048116602083015262010000909304909216908201526060016102a0565b34801561081957600080fd5b50600654610347565b606060018054610831906120e9565b80601f016020809104026020016040519081016040528092919081815260200182805461085d906120e9565b80156108aa5780601f1061087f576101008083540402835291602001916108aa565b820191906000526020600020905b81548152906001019060200180831161088d57829003601f168201915b5050505050905090565b60006108c1338484611487565b5060015b92915050565b6000546001600160a01b031633146108fe5760405162461bcd60e51b81526004016108f590612124565b60405180910390fd5b80610909838561216f565b610913919061216f565b60ff166064146109655760405162461bcd60e51b815260206004820152601b60248201527f53776170207461782063616e6e6f7420657863656564203130302e000000000060448201526064016108f5565b6015805460ff94851662ff00ff199091161762010000938516939093029290921761ff0019166101009190931602919091179055565b6001600160a01b03831660009081526011602090815260408083203384529091528120546109ca85858561155f565b828110156109d757600080fd5b6109eb85336109e68685612194565b611487565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a3091815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b03163314610a6d5760405162461bcd60e51b81526004016108f590612124565b601680549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314610ab15760405162461bcd60e51b81526004016108f590612124565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610afd5760405162461bcd60e51b81526004016108f590612124565b6001600160a01b0382166000908152601460205260409020805460ff1916821515179055610b2c826001610b30565b5050565b6000546001600160a01b03163314610b5a5760405162461bcd60e51b81526004016108f590612124565b6001600160a01b038281166000908152601360205260409020805460ff1916831515179055600d54166314b6ca968383610bac576001600160a01b038516600090815260106020526040902054610baf565b60005b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015610bf557600080fd5b505af1925050508015610c06575060015b610b2c575050565b6000546001600160a01b03163314610c385760405162461bcd60e51b81526004016108f590612124565b6001600160a01b038116301415610c4e57600080fd5b806001600160a01b03811663a9059cbb610c706000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd891906121ab565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4791906121c4565b505050565b6000546001600160a01b03163314610d765760405162461bcd60e51b81526004016108f590612124565b62124f80811115610d8657600080fd5b600d546040516316a4744b60e11b815260048101859052602481018490526001600160a01b0390911690632d48e89690604401600060405180830381600087803b158015610dd357600080fd5b505af1158015610de7573d6000803e3d6000fd5b505050600f91909155505050565b6000546001600160a01b03163314610e1f5760405162461bcd60e51b81526004016108f590612124565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314610e855760405162461bcd60e51b81526004016108f590612124565b60003411610e9257600080fd5b600d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ee257600080fd5b505af193505050508015610ef4575060015b505b565b6007546001600160a01b03163314610f0f57600080fd5b600754610ef6906001600160a01b031661132e565b6000546001600160a01b03163314610f4e5760405162461bcd60e51b81526004016108f590612124565b600554600160281b900460ff1615610fa85760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920656e61626c65642e000000000060448201526064016108f5565b6005805465ff0000000000198116600160281b9182900460ff1615909102179055565b6000546001600160a01b03163314610ff55760405162461bcd60e51b81526004016108f590612124565b600554601e9061100990859060ff1661216f565b60ff16111561105a5760405162461bcd60e51b815260206004820152601860248201527f54617865732063616e6e6f7420657863656564203330252e000000000000000060448201526064016108f5565b6005546014630100000090910460ff1611156110b85760405162461bcd60e51b815260206004820152601f60248201527f5472616e73666572207461782063616e6e6f7420657863656564203230252e0060448201526064016108f5565b6005805460ff95861661ffff1990911617610100948616949094029390931763ffff00001916620100009285169290920263ff00000019169190911763010000009190931602919091179055565b606060028054610831906120e9565b60006108c133848461155f565b6000546001600160a01b0316331461114c5760405162461bcd60e51b81526004016108f590612124565b6001600160a01b0381166111a25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732100000000000000000060448201526064016108f5565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111ee5760405162461bcd60e51b81526004016108f590612124565b60026064600454600161120191906121e1565b61120b9190612200565b6112159190612200565b81101561122157600080fd5b6003546112329060ff16600a612306565b61123c90826121e1565b60065550565b6000546001600160a01b0316331461126c5760405162461bcd60e51b81526004016108f590612124565b610ef48161168e565b6000546001600160a01b0316331461129f5760405162461bcd60e51b81526004016108f590612124565b60006017541180156112cb5750606460045460016112bd91906121e1565b6112c79190612200565b8111155b6112d457600080fd5b601755565b6000546001600160a01b031633146113035760405162461bcd60e51b81526004016108f590612124565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113585760405162461bcd60e51b81526004016108f590612124565b6001600160a01b0381166113bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108f5565b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146114325760405162461bcd60e51b81526004016108f590612124565b604051600090339047908381818185875af1925050503d8060008114611474576040519150601f19603f3d011682016040523d82523d6000602084013e611479565b606091505b5050905080610ef457600080fd5b6001600160a01b038316158015906114a757506001600160a01b03821615155b6114fe5760405162461bcd60e51b815260206004820152602260248201527f4f776e65722f5370656e64657220616464726573732063616e6e6f7420626520604482015261181760f11b60648201526084016108f5565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831660009081526012602052604081205460ff168061159e57506001600160a01b03831660009081526012602052604090205460ff165b806115ab575060165460ff165b6001600160a01b0380861660009081526014602052604080822054928716825290205491925060ff908116911682156115f0576115eb86868660006118cb565b611686565b600554600160281b900460ff1661160657600080fd5b8115611617576115eb868686611b91565b80156116515760165460ff161580156116375750601654610100900460ff165b1561164657611646600061168e565b6115eb868686611bf8565b611686868686606488600560039054906101000a900460ff1660ff1661167791906121e1565b6116819190612200565b6118cb565b505050505050565b6016805460ff1916600117905530600090815260106020526040902054601754808210156116d6578280156116c35750600082115b156116cf5750806116d6565b50506118be565b6015546000906064906116f190610100900460ff16846121e1565b6116fb9190612200565b905060006117098284612194565b90506000611718600284612200565b905060006117268285612194565b90506117328184612315565b94504761173e86611c64565b600061174a8247612194565b905060008761175985846121e1565b6117639190612200565b905060006117718284612194565b60155490915060009060649061178a9060ff16846121e1565b6117949190612200565b905060006117a28284612194565b9050801561180e57600d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156117fa57600080fd5b505af19350505050801561180c575060015b505b6008546040516000916001600160a01b03169061753090859084818181858888f193505050503d8060008114611860576040519150601f19603f3d011682016040523d82523d6000602084013e611865565b606091505b50509050600090506118778986611db6565b604080518a8152602081018790527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a1505050505050505050505050505b506016805460ff19169055565b6005546000906064906118e890849062010000900460ff166121e1565b6118f29190612200565b6001600160a01b03861660009081526010602052604081208054929350859290919061191f908490612194565b90915550506009546001600160a01b03166000908152601060205260408120805483929061194e908490612315565b9091555061195e90508183612194565b306000908152601060205260408120805490919061197d908490612315565b9091555061198d90508284612194565b6001600160a01b038516600090815260106020526040812080549091906119b5908490612315565b90915550506001600160a01b03851660009081526013602052604090205460ff16611a4b57600d546001600160a01b0386811660008181526010602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611a3857600080fd5b505af1925050508015611a49575060015b505b6001600160a01b03841660009081526013602052604090205460ff16611adc57600d546001600160a01b0385811660008181526010602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611ac957600080fd5b505af1925050508015611ada575060015b505b600d54600f546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611b149160040190815260200190565b600060405180830381600087803b158015611b2e57600080fd5b505af1925050508015611b3f575060015b506001600160a01b038085169086167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611b798587612194565b60405190815260200160405180910390a35050505050565b600654811115611bdb5760405162461bcd60e51b815260206004820152601560248201527420b6b7bab73a1032bc31b2b2b2399036b0bc2a3c1760591b60448201526064016108f5565b600554610d47908490849084906064906116779060ff16836121e1565b600654811115611c425760405162461bcd60e51b815260206004820152601560248201527420b6b7bab73a1032bc31b2b2b2399036b0bc2a3c1760591b60448201526064016108f5565b600554610d479084908490849060649061167790610100900460ff16836121e1565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c9957611c9961232d565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d169190612343565b81600181518110611d2957611d2961232d565b6001600160a01b039283166020918202929092010152600b54611d4f9130911684611487565b600b5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d88908590600090869030904290600401612360565b600060405180830381600087803b158015611da257600080fd5b505af1158015611686573d6000803e3d6000fd5b600b54611dce9030906001600160a01b031684611487565b600b5460095460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015611e3e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e6391906123d1565b5050505050565b600060208083528351808285015260005b81811015611e9757858101830151858201604001528201611e7b565b81811115611ea9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ef457600080fd5b60008060408385031215611ee757600080fd5b8235611ef281611ebf565b946020939093013593505050565b803560ff81168114611f1157600080fd5b919050565b600080600060608486031215611f2b57600080fd5b611f3484611f00565b9250611f4260208501611f00565b9150611f5060408501611f00565b90509250925092565b600080600060608486031215611f6e57600080fd5b8335611f7981611ebf565b92506020840135611f8981611ebf565b929592945050506040919091013590565b8015158114610ef457600080fd5b600060208284031215611fba57600080fd5b8135611fc581611f9a565b9392505050565b600060208284031215611fde57600080fd5b8135611fc581611ebf565b60008060408385031215611ffc57600080fd5b823561200781611ebf565b9150602083013561201781611f9a565b809150509250929050565b60008060006060848603121561203757600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561206457600080fd5b61206d85611f00565b935061207b60208601611f00565b925061208960408601611f00565b915061209760608601611f00565b905092959194509250565b6000602082840312156120b457600080fd5b5035919050565b600080604083850312156120ce57600080fd5b82356120d981611ebf565b9150602083013561201781611ebf565b600181811c908216806120fd57607f821691505b6020821081141561211e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168060ff0382111561218c5761218c612159565b019392505050565b6000828210156121a6576121a6612159565b500390565b6000602082840312156121bd57600080fd5b5051919050565b6000602082840312156121d657600080fd5b8151611fc581611f9a565b60008160001904831182151516156121fb576121fb612159565b500290565b60008261221d57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561225d57816000190482111561224357612243612159565b8085161561225057918102915b93841c9390800290612227565b509250929050565b600082612274575060016108c5565b81612281575060006108c5565b816001811461229757600281146122a1576122bd565b60019150506108c5565b60ff8411156122b2576122b2612159565b50506001821b6108c5565b5060208310610133831016604e8410600b84101617156122e0575081810a6108c5565b6122ea8383612222565b80600019048211156122fe576122fe612159565b029392505050565b6000611fc560ff841683612265565b6000821982111561232857612328612159565b500190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561235557600080fd5b8151611fc581611ebf565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123b05784516001600160a01b03168352938301939183019160010161238b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156123e657600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122096db494a5da16c43beeed91b87617a5262c9acd7b1238b938226a43f4e1abf3364736f6c634300080c003360806040526ec097ce7bc90715b34b9f1000000000600a55610e10600b556001600c5534801561002e57600080fd5b50604051610b87380380610b8783398101604081905261004d9161007b565b600180546001600160a01b039092166001600160a01b031992831617905560008054909116331790556100ab565b60006020828403121561008d57600080fd5b81516001600160a01b03811681146100a457600080fd5b9392505050565b610acd806100ba6000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610224578063f0fc6bca1461023a578063ffb2c4791461024f578063ffd49c841461026f57600080fd5b8063ce7c2ac2146101af578063d0e30db014610206578063e2d2e2191461020e57600080fd5b80632d48e896116100bb5780632d48e8961461014d5780633a98ef391461016d5780634fab0ae814610183578063997664d71461019957600080fd5b806311ce023d146100e257806314b6ca961461010b57806328fd31981461012d575b600080fd5b3480156100ee57600080fd5b506100f8600a5481565b6040519081526020015b60405180910390f35b34801561011757600080fd5b5061012b61012636600461094a565b610285565b005b34801561013957600080fd5b506100f8610148366004610974565b6103fd565b34801561015957600080fd5b5061012b61016836600461098f565b610486565b34801561017957600080fd5b506100f860065481565b34801561018f57600080fd5b506100f8600c5481565b3480156101a557600080fd5b506100f860075481565b3480156101bb57600080fd5b506101eb6101ca366004610974565b60056020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610102565b61012b6104a8565b34801561021a57600080fd5b506100f860095481565b34801561023057600080fd5b506100f860085481565b34801561024657600080fd5b5061012b6104fb565b34801561025b57600080fd5b5061012b61026a3660046109b1565b61055f565b34801561027b57600080fd5b506100f8600b5481565b6000546001600160a01b0316331461029c57600080fd5b6001600160a01b038216600090815260056020526040902054156102c3576102c38261065f565b6000811180156102e957506001600160a01b038216600090815260056020526040902054155b1561034f57600280546001600160a01b0384166000818152600360205260408120839055600183018455929092527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319169091179055610382565b8015801561037457506001600160a01b03821660009081526005602052604090205415155b15610382576103828261077a565b6001600160a01b0382166000908152600560205260409020546006546103b39183916103ad9161088f565b906108a2565b6006556001600160a01b03821660009081526005602052604090208190556103da816108ae565b6001600160a01b0390921660009081526005602052604090206001019190915550565b6001600160a01b03811660009081526005602052604081205461042257506000919050565b6001600160a01b038216600090815260056020526040812054610444906108ae565b6001600160a01b038416600090815260056020526040902060010154909150808211610474575060009392505050565b61047e828261088f565b949350505050565b6000546001600160a01b0316331461049d57600080fd5b600b91909155600c55565b6000546001600160a01b031633146104bf57600080fd5b6007546104cc90346108a2565b600755600654600a546104f6916104ed916104e790346108d1565b906108dd565b600954906108a2565b600955565b610504336108e9565b6105545760405162461bcd60e51b815260206004820152601760248201527f546f6f20736f6f6e2e204e65656420746f207761697421000000000000000000604482015260640160405180910390fd5b61055d3361065f565b565b6000546001600160a01b0316331461057657600080fd5b60025480610582575050565b60008060005a90505b848210801561059957508383105b156106585783600d54106105ad576000600d555b6105df6002600d54815481106105c5576105c56109ca565b6000918252602090912001546001600160a01b03166108e9565b15610616576106166002600d54815481106105fc576105fc6109ca565b6000918252602090912001546001600160a01b031661065f565b61062b6106245a839061088f565b83906108a2565b91505a600d80549192506000610640836109f6565b91905055508280610650906109f6565b93505061058b565b5050505050565b6001600160a01b03811660009081526005602052604090205461067f5750565b600061068a826103fd565b905080156107765760085461069f90826108a2565b6008556040516000906001600160a01b0384169061753090849084818181858888f193505050503d80600081146106f2576040519150601f19603f3d011682016040523d82523d6000602084013e6106f7565b606091505b505050506001600160a01b0382166000908152600460209081526040808320429055600590915281206002015461072e90836108a2565b6001600160a01b0384166000908152600560205260409020600281019190915554610758906108ae565b6001600160a01b038416600090815260056020526040902060010155505b5050565b6002805461078a90600190610a11565b8154811061079a5761079a6109ca565b60009182526020808320909101546001600160a01b03848116845260039092526040909220546002805492909316929181106107d8576107d86109ca565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905591831681526003918290526040812054600280549193929161082490600190610a11565b81548110610834576108346109ca565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600280548061086a5761086a610a28565b600082815260209020810160001990810180546001600160a01b031916905501905550565b600061089b8284610a11565b9392505050565b600061089b8284610a3e565b60006108cb600a546104e7600954856108d190919063ffffffff16565b92915050565b600061089b8284610a56565b600061089b8284610a75565b600b546001600160a01b038216600090815260046020526040812054909142916109139190610a3e565b1080156108cb5750600c54610927836103fd565b1192915050565b80356001600160a01b038116811461094557600080fd5b919050565b6000806040838503121561095d57600080fd5b6109668361092e565b946020939093013593505050565b60006020828403121561098657600080fd5b61089b8261092e565b600080604083850312156109a257600080fd5b50508035926020909101359150565b6000602082840312156109c357600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415610a0a57610a0a6109e0565b5060010190565b600082821015610a2357610a236109e0565b500390565b634e487b7160e01b600052603160045260246000fd5b60008219821115610a5157610a516109e0565b500190565b6000816000190483118215151615610a7057610a706109e0565b500290565b600082610a9257634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220c999a8a079c99f06e84b8b0abb5ae947e4a89e4f841312a0932b141ef5cfa90064736f6c634300080c0033

Deployed Bytecode

0x6080604052600436106102605760003560e01c806375f0a87411610144578063bad3ea6a116100b6578063df8408fe1161007a578063df8408fe1461072f578063ea45eac61461074f578063f2fde38b1461079b578063f5648a4f146107bb578063fc964b62146107d0578063ff8561451461080d57600080fd5b8063bad3ea6a14610669578063c2d0ffca14610689578063c554d6c1146106a9578063cc274b29146106c9578063dd62ed3e146106e957600080fd5b80638df39ec2116101085780638df39ec2146105b457806395d89b41146105d4578063a26bd13c146105e9578063a9059cbb14610609578063aacebbe314610629578063b51449bb1461064957600080fd5b806375f0a8741461054c5780638552e75f1461056c578063893d20e8146105815780638a8c523c1461059f5780638da5cb5b1461058157600080fd5b80632e9701f7116101dd57806335ccb11b116101a157806335ccb11b146104995780633644b0a2146104b95780633af8e4ab146104d957806370a08231146104f9578063715018a61461052f57806373155de31461054457600080fd5b80632e9701f7146103fa578063313ce5671461041a5780633143a28a1461043c578063351a964d1461045c57806335c6f9bc1461047957600080fd5b806318160ddd1161022457806318160ddd1461033657806318fc62ac1461035557806323b872dd146103775780632a979b9f146103975780632c4adf30146103b757600080fd5b8063062287491461026c578063064a59d0146102a957806306fdde03146102d45780630930907b146102f6578063095ea7b31461031657600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5060095461028c906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102b557600080fd5b50600554600160281b900460ff165b60405190151581526020016102a0565b3480156102e057600080fd5b506102e9610822565b6040516102a09190611e6a565b34801561030257600080fd5b50600a5461028c906001600160a01b031681565b34801561032257600080fd5b506102c4610331366004611ed4565b6108b4565b34801561034257600080fd5b506004545b6040519081526020016102a0565b34801561036157600080fd5b50610375610370366004611f16565b6108cb565b005b34801561038357600080fd5b506102c4610392366004611f59565b61099b565b3480156103a357600080fd5b506103756103b2366004611fa8565b610a43565b3480156103c357600080fd5b506103db600e54600f546001600160a01b0390911691565b604080516001600160a01b0390931683526020830191909152016102a0565b34801561040657600080fd5b50610375610415366004611fcc565b610a87565b34801561042657600080fd5b5060035460405160ff90911681526020016102a0565b34801561044857600080fd5b50610375610457366004611fe9565b610ad3565b34801561046857600080fd5b50601654610100900460ff166102c4565b34801561048557600080fd5b50610375610494366004611fe9565b610b30565b3480156104a557600080fd5b506103756104b4366004611fcc565b610c0e565b3480156104c557600080fd5b506103756104d4366004612022565b610d4c565b3480156104e557600080fd5b5060075461028c906001600160a01b031681565b34801561050557600080fd5b50610347610514366004611fcc565b6001600160a01b031660009081526010602052604090205490565b34801561053b57600080fd5b50610375610df5565b610375610e5b565b34801561055857600080fd5b5060085461028c906001600160a01b031681565b34801561057857600080fd5b50610375610ef8565b34801561058d57600080fd5b506000546001600160a01b031661028c565b3480156105ab57600080fd5b50610375610f24565b3480156105c057600080fd5b506103756105cf36600461204e565b610fcb565b3480156105e057600080fd5b506102e9611106565b3480156105f557600080fd5b50600e5461028c906001600160a01b031681565b34801561061557600080fd5b506102c4610624366004611ed4565b611115565b34801561063557600080fd5b50610375610644366004611fcc565b611122565b34801561065557600080fd5b50600c5461028c906001600160a01b031681565b34801561067557600080fd5b50600d5461028c906001600160a01b031681565b34801561069557600080fd5b506103756106a43660046120a2565b6111c4565b3480156106b557600080fd5b506103756106c4366004611fa8565b611242565b3480156106d557600080fd5b506103756106e43660046120a2565b611275565b3480156106f557600080fd5b506103476107043660046120bb565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561073b57600080fd5b5061037561074a366004611fe9565b6112d9565b34801561075b57600080fd5b506005546040805160ff808416825261010084048116602083015262010000840481169282019290925263010000009092041660608201526080016102a0565b3480156107a757600080fd5b506103756107b6366004611fcc565b61132e565b3480156107c757600080fd5b50610375611408565b3480156107dc57600080fd5b506015546040805160ff808416825261010084048116602083015262010000909304909216908201526060016102a0565b34801561081957600080fd5b50600654610347565b606060018054610831906120e9565b80601f016020809104026020016040519081016040528092919081815260200182805461085d906120e9565b80156108aa5780601f1061087f576101008083540402835291602001916108aa565b820191906000526020600020905b81548152906001019060200180831161088d57829003601f168201915b5050505050905090565b60006108c1338484611487565b5060015b92915050565b6000546001600160a01b031633146108fe5760405162461bcd60e51b81526004016108f590612124565b60405180910390fd5b80610909838561216f565b610913919061216f565b60ff166064146109655760405162461bcd60e51b815260206004820152601b60248201527f53776170207461782063616e6e6f7420657863656564203130302e000000000060448201526064016108f5565b6015805460ff94851662ff00ff199091161762010000938516939093029290921761ff0019166101009190931602919091179055565b6001600160a01b03831660009081526011602090815260408083203384529091528120546109ca85858561155f565b828110156109d757600080fd5b6109eb85336109e68685612194565b611487565b836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610a3091815260200190565b60405180910390a3506001949350505050565b6000546001600160a01b03163314610a6d5760405162461bcd60e51b81526004016108f590612124565b601680549115156101000261ff0019909216919091179055565b6000546001600160a01b03163314610ab15760405162461bcd60e51b81526004016108f590612124565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610afd5760405162461bcd60e51b81526004016108f590612124565b6001600160a01b0382166000908152601460205260409020805460ff1916821515179055610b2c826001610b30565b5050565b6000546001600160a01b03163314610b5a5760405162461bcd60e51b81526004016108f590612124565b6001600160a01b038281166000908152601360205260409020805460ff1916831515179055600d54166314b6ca968383610bac576001600160a01b038516600090815260106020526040902054610baf565b60005b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b158015610bf557600080fd5b505af1925050508015610c06575060015b610b2c575050565b6000546001600160a01b03163314610c385760405162461bcd60e51b81526004016108f590612124565b6001600160a01b038116301415610c4e57600080fd5b806001600160a01b03811663a9059cbb610c706000546001600160a01b031690565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610cb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd891906121ab565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4791906121c4565b505050565b6000546001600160a01b03163314610d765760405162461bcd60e51b81526004016108f590612124565b62124f80811115610d8657600080fd5b600d546040516316a4744b60e11b815260048101859052602481018490526001600160a01b0390911690632d48e89690604401600060405180830381600087803b158015610dd357600080fd5b505af1158015610de7573d6000803e3d6000fd5b505050600f91909155505050565b6000546001600160a01b03163314610e1f5760405162461bcd60e51b81526004016108f590612124565b600080546001600160a01b031916815560405181907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3565b6000546001600160a01b03163314610e855760405162461bcd60e51b81526004016108f590612124565b60003411610e9257600080fd5b600d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015610ee257600080fd5b505af193505050508015610ef4575060015b505b565b6007546001600160a01b03163314610f0f57600080fd5b600754610ef6906001600160a01b031661132e565b6000546001600160a01b03163314610f4e5760405162461bcd60e51b81526004016108f590612124565b600554600160281b900460ff1615610fa85760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c726561647920656e61626c65642e000000000060448201526064016108f5565b6005805465ff0000000000198116600160281b9182900460ff1615909102179055565b6000546001600160a01b03163314610ff55760405162461bcd60e51b81526004016108f590612124565b600554601e9061100990859060ff1661216f565b60ff16111561105a5760405162461bcd60e51b815260206004820152601860248201527f54617865732063616e6e6f7420657863656564203330252e000000000000000060448201526064016108f5565b6005546014630100000090910460ff1611156110b85760405162461bcd60e51b815260206004820152601f60248201527f5472616e73666572207461782063616e6e6f7420657863656564203230252e0060448201526064016108f5565b6005805460ff95861661ffff1990911617610100948616949094029390931763ffff00001916620100009285169290920263ff00000019169190911763010000009190931602919091179055565b606060028054610831906120e9565b60006108c133848461155f565b6000546001600160a01b0316331461114c5760405162461bcd60e51b81526004016108f590612124565b6001600160a01b0381166111a25760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74206265207a65726f20616464726573732100000000000000000060448201526064016108f5565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111ee5760405162461bcd60e51b81526004016108f590612124565b60026064600454600161120191906121e1565b61120b9190612200565b6112159190612200565b81101561122157600080fd5b6003546112329060ff16600a612306565b61123c90826121e1565b60065550565b6000546001600160a01b0316331461126c5760405162461bcd60e51b81526004016108f590612124565b610ef48161168e565b6000546001600160a01b0316331461129f5760405162461bcd60e51b81526004016108f590612124565b60006017541180156112cb5750606460045460016112bd91906121e1565b6112c79190612200565b8111155b6112d457600080fd5b601755565b6000546001600160a01b031633146113035760405162461bcd60e51b81526004016108f590612124565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146113585760405162461bcd60e51b81526004016108f590612124565b6001600160a01b0381166113bd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108f5565b600080546001600160a01b0319166001600160a01b0383169081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b031633146114325760405162461bcd60e51b81526004016108f590612124565b604051600090339047908381818185875af1925050503d8060008114611474576040519150601f19603f3d011682016040523d82523d6000602084013e611479565b606091505b5050905080610ef457600080fd5b6001600160a01b038316158015906114a757506001600160a01b03821615155b6114fe5760405162461bcd60e51b815260206004820152602260248201527f4f776e65722f5370656e64657220616464726573732063616e6e6f7420626520604482015261181760f11b60648201526084016108f5565b6001600160a01b0383811660008181526011602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831660009081526012602052604081205460ff168061159e57506001600160a01b03831660009081526012602052604090205460ff165b806115ab575060165460ff165b6001600160a01b0380861660009081526014602052604080822054928716825290205491925060ff908116911682156115f0576115eb86868660006118cb565b611686565b600554600160281b900460ff1661160657600080fd5b8115611617576115eb868686611b91565b80156116515760165460ff161580156116375750601654610100900460ff165b1561164657611646600061168e565b6115eb868686611bf8565b611686868686606488600560039054906101000a900460ff1660ff1661167791906121e1565b6116819190612200565b6118cb565b505050505050565b6016805460ff1916600117905530600090815260106020526040902054601754808210156116d6578280156116c35750600082115b156116cf5750806116d6565b50506118be565b6015546000906064906116f190610100900460ff16846121e1565b6116fb9190612200565b905060006117098284612194565b90506000611718600284612200565b905060006117268285612194565b90506117328184612315565b94504761173e86611c64565b600061174a8247612194565b905060008761175985846121e1565b6117639190612200565b905060006117718284612194565b60155490915060009060649061178a9060ff16846121e1565b6117949190612200565b905060006117a28284612194565b9050801561180e57600d60009054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156117fa57600080fd5b505af19350505050801561180c575060015b505b6008546040516000916001600160a01b03169061753090859084818181858888f193505050503d8060008114611860576040519150601f19603f3d011682016040523d82523d6000602084013e611865565b606091505b50509050600090506118778986611db6565b604080518a8152602081018790527f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f8381486910160405180910390a1505050505050505050505050505b506016805460ff19169055565b6005546000906064906118e890849062010000900460ff166121e1565b6118f29190612200565b6001600160a01b03861660009081526010602052604081208054929350859290919061191f908490612194565b90915550506009546001600160a01b03166000908152601060205260408120805483929061194e908490612315565b9091555061195e90508183612194565b306000908152601060205260408120805490919061197d908490612315565b9091555061198d90508284612194565b6001600160a01b038516600090815260106020526040812080549091906119b5908490612315565b90915550506001600160a01b03851660009081526013602052604090205460ff16611a4b57600d546001600160a01b0386811660008181526010602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611a3857600080fd5b505af1925050508015611a49575060015b505b6001600160a01b03841660009081526013602052604090205460ff16611adc57600d546001600160a01b0385811660008181526010602052604090819020549051630a5b654b60e11b8152600481019290925260248201529116906314b6ca9690604401600060405180830381600087803b158015611ac957600080fd5b505af1925050508015611ada575060015b505b600d54600f546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611b149160040190815260200190565b600060405180830381600087803b158015611b2e57600080fd5b505af1925050508015611b3f575060015b506001600160a01b038085169086167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611b798587612194565b60405190815260200160405180910390a35050505050565b600654811115611bdb5760405162461bcd60e51b815260206004820152601560248201527420b6b7bab73a1032bc31b2b2b2399036b0bc2a3c1760591b60448201526064016108f5565b600554610d47908490849084906064906116779060ff16836121e1565b600654811115611c425760405162461bcd60e51b815260206004820152601560248201527420b6b7bab73a1032bc31b2b2b2399036b0bc2a3c1760591b60448201526064016108f5565b600554610d479084908490849060649061167790610100900460ff16836121e1565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611c9957611c9961232d565b6001600160a01b03928316602091820292909201810191909152600b54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611cf2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d169190612343565b81600181518110611d2957611d2961232d565b6001600160a01b039283166020918202929092010152600b54611d4f9130911684611487565b600b5460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d88908590600090869030904290600401612360565b600060405180830381600087803b158015611da257600080fd5b505af1158015611686573d6000803e3d6000fd5b600b54611dce9030906001600160a01b031684611487565b600b5460095460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015611e3e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e6391906123d1565b5050505050565b600060208083528351808285015260005b81811015611e9757858101830151858201604001528201611e7b565b81811115611ea9576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610ef457600080fd5b60008060408385031215611ee757600080fd5b8235611ef281611ebf565b946020939093013593505050565b803560ff81168114611f1157600080fd5b919050565b600080600060608486031215611f2b57600080fd5b611f3484611f00565b9250611f4260208501611f00565b9150611f5060408501611f00565b90509250925092565b600080600060608486031215611f6e57600080fd5b8335611f7981611ebf565b92506020840135611f8981611ebf565b929592945050506040919091013590565b8015158114610ef457600080fd5b600060208284031215611fba57600080fd5b8135611fc581611f9a565b9392505050565b600060208284031215611fde57600080fd5b8135611fc581611ebf565b60008060408385031215611ffc57600080fd5b823561200781611ebf565b9150602083013561201781611f9a565b809150509250929050565b60008060006060848603121561203757600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561206457600080fd5b61206d85611f00565b935061207b60208601611f00565b925061208960408601611f00565b915061209760608601611f00565b905092959194509250565b6000602082840312156120b457600080fd5b5035919050565b600080604083850312156120ce57600080fd5b82356120d981611ebf565b9150602083013561201781611ebf565b600181811c908216806120fd57607f821691505b6020821081141561211e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600060ff821660ff84168060ff0382111561218c5761218c612159565b019392505050565b6000828210156121a6576121a6612159565b500390565b6000602082840312156121bd57600080fd5b5051919050565b6000602082840312156121d657600080fd5b8151611fc581611f9a565b60008160001904831182151516156121fb576121fb612159565b500290565b60008261221d57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561225d57816000190482111561224357612243612159565b8085161561225057918102915b93841c9390800290612227565b509250929050565b600082612274575060016108c5565b81612281575060006108c5565b816001811461229757600281146122a1576122bd565b60019150506108c5565b60ff8411156122b2576122b2612159565b50506001821b6108c5565b5060208310610133831016604e8410600b84101617156122e0575081810a6108c5565b6122ea8383612222565b80600019048211156122fe576122fe612159565b029392505050565b6000611fc560ff841683612265565b6000821982111561232857612328612159565b500190565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561235557600080fd5b8151611fc581611ebf565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123b05784516001600160a01b03168352938301939183019160010161238b565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156123e657600080fd5b835192506020840151915060408401519050925092509256fea264697066735822122096db494a5da16c43beeed91b87617a5262c9acd7b1238b938226a43f4e1abf3364736f6c634300080c0033

Deployed Bytecode Sourcemap

17967:13780:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18680:41;;;;;;;;;;-1:-1:-1;18680:41:0;;;;-1:-1:-1;;;;;18680:41:0;;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;18680:41:0;;;;;;;;29644:95;;;;;;;;;;-1:-1:-1;29716:15:0;;-1:-1:-1;;;29716:15:0;;;;29644:95;;;387:14:1;;380:22;362:41;;350:2;335:18;29644:95:0;222:187:1;31228:90:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;18728:37::-;;;;;;;;;;-1:-1:-1;18728:37:0;;;;-1:-1:-1;;;;;18728:37:0;;;30714:187;;;;;;;;;;-1:-1:-1;30714:187:0;;;;;:::i;:::-;;:::i;31424:102::-;;;;;;;;;;-1:-1:-1;31506:12:0;;31424:102;;;1618:25:1;;;1606:2;1591:18;31424:102:0;1472:177:1;26076:372:0;;;;;;;;;;-1:-1:-1;26076:372:0;;;;;:::i;:::-;;:::i;:::-;;29952:433;;;;;;;;;;-1:-1:-1;29952:433:0;;;;;:::i;:::-;;:::i;26665:121::-;;;;;;;;;;-1:-1:-1;26665:121:0;;;;;:::i;:::-;;:::i;29398:240::-;;;;;;;;;;;;29563:26;;29616:14;;-1:-1:-1;;;;;29563:26:0;;;;29398:240;;;;;-1:-1:-1;;;;;3164:32:1;;;3146:51;;3228:2;3213:18;;3206:34;;;;3119:18;29398:240:0;2972:274:1;25305:131:0;;;;;;;;;;-1:-1:-1;25305:131:0;;;;;:::i;:::-;;:::i;31532:85::-;;;;;;;;;;-1:-1:-1;31600:9:0;;31532:85;;31600:9;;;;3645:36:1;;3633:2;3618:18;31532:85:0;3503:184:1;25442:222:0;;;;;;;;;;-1:-1:-1;25442:222:0;;;;;:::i;:::-;;:::i;28732:89::-;;;;;;;;;;-1:-1:-1;28801:12:0;;;;;;;28732:89;;27086:251;;;;;;;;;;-1:-1:-1;27086:251:0;;;;;:::i;:::-;;:::i;27735:253::-;;;;;;;;;;-1:-1:-1;27735:253:0;;;;;:::i;:::-;;:::i;28330:300::-;;;;;;;;;;-1:-1:-1;28330:300:0;;;;;:::i;:::-;;:::i;18524:69::-;;;;;;;;;;-1:-1:-1;18524:69:0;;;;-1:-1:-1;;;;;18524:69:0;;;31085:137;;;;;;;;;;-1:-1:-1;31085:137:0;;;;;:::i;:::-;-1:-1:-1;;;;;31196:18:0;31169:7;31196:18;;;:9;:18;;;;;;;31085:137;17564:148;;;;;;;;;;;;;:::i;28157:167::-;;;:::i;18600:73::-;;;;;;;;;;-1:-1:-1;18600:73:0;;;;-1:-1:-1;;;;;18600:73:0;;;25162:137;;;;;;;;;;;;;:::i;31623:85::-;;;;;;;;;;-1:-1:-1;31666:7:0;17422:6;-1:-1:-1;;;;;17422:6:0;31623:85;;24995:161;;;;;;;;;;;;;:::i;25670:400::-;;;;;;;;;;-1:-1:-1;25670:400:0;;;;;:::i;:::-;;:::i;31324:94::-;;;;;;;;;;;;;:::i;18914:41::-;;;;;;;;;;-1:-1:-1;18914:41:0;;;;-1:-1:-1;;;;;18914:41:0;;;29753:193;;;;;;;;;;-1:-1:-1;29753:193:0;;;;;:::i;:::-;;:::i;27514:215::-;;;;;;;;;;-1:-1:-1;27514:215:0;;;;;:::i;:::-;;:::i;18807:20::-;;;;;;;;;;-1:-1:-1;18807:20:0;;;;-1:-1:-1;;;;;18807:20:0;;;18861:46;;;;;;;;;;-1:-1:-1;18861:46:0;;;;-1:-1:-1;;;;;18861:46:0;;;27343:165;;;;;;;;;;-1:-1:-1;27343:165:0;;;;;:::i;:::-;;:::i;26792:131::-;;;;;;;;;;-1:-1:-1;26792:131:0;;;;;:::i;:::-;;:::i;26454:205::-;;;;;;;;;;-1:-1:-1;26454:205:0;;;;;:::i;:::-;;:::i;30907:172::-;;;;;;;;;;-1:-1:-1;30907:172:0;;;;;:::i;:::-;-1:-1:-1;;;;;31043:19:0;;;31016:7;31043:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;30907:172;26929:151;;;;;;;;;;-1:-1:-1;26929:151:0;;;;;:::i;:::-;;:::i;28827:275::-;;;;;;;;;;-1:-1:-1;28998:7:0;;28827:275;;;28998:7;;;;5827:36:1;;28998:7:0;29024:8;;;;5894:2:1;5879:18;;5872:45;29051:8:0;;;;;5933:18:1;;;5926:45;;;;29082:12:0;;;;;6002:2:1;5987:18;;5980:45;5814:3;5799:19;28827:275:0;5612:419:1;17718:244:0;;;;;;;;;;-1:-1:-1;17718:244:0;;;;;:::i;:::-;;:::i;27994:157::-;;;;;;;;;;;;;:::i;29108:284::-;;;;;;;;;;-1:-1:-1;29271:10:0;:23;29108:284;;;29271:23;;;;6226:36:1;;29271:23:0;29318;;;;6293:2:1;6278:18;;6271:45;29363:21:0;;;;;;;6332:18:1;;;6325:45;6214:2;6199:18;29108:284:0;6036:340:1;28644:82:0;;;;;;;;;;-1:-1:-1;28712:6:0;;28644:82;;31228:90;31267:13;31300:10;31293:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31228:90;:::o;30714:187::-;30817:4;30834:37;30843:10;30855:7;30864:6;30834:8;:37::i;:::-;-1:-1:-1;30889:4:0;30714:187;;;;;:::o;26076:372::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;;;;;;;;;26254:12;26230:23:::1;26243:10:::0;26230:12;:23:::1;:::i;:::-;:36;;;;:::i;:::-;26229:43;;26269:3;26229:43;26221:82;;;::::0;-1:-1:-1;;;26221:82:0;;7670:2:1;26221:82:0::1;::::0;::::1;7652:21:1::0;7709:2;7689:18;;;7682:30;7748:29;7728:18;;;7721:57;7795:18;;26221:82:0::1;7468:351:1::0;26221:82:0::1;26314:10;:36:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;26361:32:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;26404:36:0::1;26314;26404::::0;;;::::1;;::::0;;;::::1;::::0;;26076:372::o;29952:433::-;-1:-1:-1;;;;;30126:19:0;;30088:4;30126:19;;;:11;:19;;;;;;;;30146:10;30126:31;;;;;;;;30168:36;30138:6;30186:9;30197:6;30168:9;:36::i;:::-;30237:6;30223:10;:20;;30215:29;;;;;;30255:49;30264:6;30272:10;30284:19;30297:6;30284:10;:19;:::i;:::-;30255:8;:49::i;:::-;30337:9;-1:-1:-1;;;;;30320:35:0;30329:6;-1:-1:-1;;;;;30320:35:0;;30348:6;30320:35;;;;1618:25:1;;1606:2;1591:18;;1472:177;30320:35:0;;;;;;;;-1:-1:-1;30373:4:0;;29952:433;-1:-1:-1;;;;29952:433:0:o;26665:121::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;26754:12:::1;:24:::0;;;::::1;;;;-1:-1:-1::0;;26754:24:0;;::::1;::::0;;;::::1;::::0;;26665:121::o;25305:131::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;25404:11:::1;:24:::0;;-1:-1:-1;;;;;;25404:24:0::1;-1:-1:-1::0;;;;;25404:24:0;;;::::1;::::0;;;::::1;::::0;;25305:131::o;25442:222::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25567:35:0;::::1;;::::0;;;:22:::1;:35;::::0;;;;:43;;-1:-1:-1;;25567:43:0::1;::::0;::::1;;;::::0;;25621:35:::1;25567::::0;-1:-1:-1;25621:17:0::1;:35::i;:::-;25442:222:::0;;:::o;27086:251::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27198:29:0;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:38;;-1:-1:-1;;27198:38:0::1;::::0;::::1;;;::::0;;27251:19:::1;::::0;::::1;:28;27198:29:::0;:38;27288:29:::1;;-1:-1:-1::0;;;;;27299:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;27288:29:::1;;;27297:1;27288:29;27251:67;::::0;-1:-1:-1;;;;;;27251:67:0::1;::::0;;;;;;-1:-1:-1;;;;;3164:32:1;;;27251:67:0::1;::::0;::::1;3146:51:1::0;3213:18;;;3206:34;3119:18;;27251:67:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;27247:83;;25442:222:::0;;:::o;27735:253::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27841:28:0;::::1;27864:4;27841:28;;27833:37;;;::::0;::::1;;27901:13:::0;-1:-1:-1;;;;;27926:14:0;::::1;;27941:7;17395::::0;17422:6;-1:-1:-1;;;;;17422:6:0;;17357:79;27941:7:::1;27949:30;::::0;-1:-1:-1;;;27949:30:0;;27973:4:::1;27949:30;::::0;::::1;160:51:1::0;-1:-1:-1;;;;;27949:15:0;::::1;::::0;::::1;::::0;133:18:1;;27949:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27926:54;::::0;-1:-1:-1;;;;;;27926:54:0::1;::::0;;;;;;-1:-1:-1;;;;;3164:32:1;;;27926:54:0::1;::::0;::::1;3146:51:1::0;3213:18;;;3206:34;3119:18;;27926:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27822:166;27735:253:::0;:::o;28330:300::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;28499:7:::1;28494:3;:12;;28486:21;;;::::0;::::1;;28518:19;::::0;:73:::1;::::0;-1:-1:-1;;;28518:73:0;;::::1;::::0;::::1;8567:25:1::0;;;8608:18;;;8601:34;;;-1:-1:-1;;;;;28518:19:0;;::::1;::::0;:43:::1;::::0;8540:18:1;;28518:73:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;28602:14:0::1;:20:::0;;;;-1:-1:-1;;;28330:300:0:o;17564:148::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;17646:1:::1;17629:19:::0;;-1:-1:-1;;;;;;17629:19:0::1;::::0;;17664:40:::1;::::0;17646:1;;17664:40:::1;::::0;17646:1;;17664:40:::1;17564:148::o:0;28157:167::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;28241:1:::1;28231:9;:11;28223:20;;;::::0;::::1;;28258:19;;;;;;;;;-1:-1:-1::0;;;;;28258:19:0::1;-1:-1:-1::0;;;;;28258:27:0::1;;28293:9;28258:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;28254:63:::0;::::1;28157:167::o:0;25162:137::-;25238:11;;-1:-1:-1;;;;;25238:11:0;25226:10;:23;25218:32;;;;;;25279:11;;25261:30;;-1:-1:-1;;;;;25279:11:0;25261:17;:30::i;24995:161::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;25059:15:::1;::::0;-1:-1:-1;;;25059:15:0;::::1;;;25058:16;25050:55;;;::::0;-1:-1:-1;;;25050:55:0;;8848:2:1;25050:55:0::1;::::0;::::1;8830:21:1::0;8887:2;8867:18;;;8860:30;8926:29;8906:18;;;8899:57;8973:18;;25050:55:0::1;8646:351:1::0;25050:55:0::1;25133:15;::::0;;-1:-1:-1;;25116:32:0;::::1;-1:-1:-1::0;;;25133:15:0;;;::::1;;;25132:16;25116:32:::0;;::::1;;::::0;;24995:161::o;25670:400::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;25831:7:::1;::::0;25848:2:::1;::::0;25831:15:::1;::::0;25839:7;;25831::::1;;:15;:::i;:::-;:19;;;;25823:55;;;::::0;-1:-1:-1;;;25823:55:0;;9204:2:1;25823:55:0::1;::::0;::::1;9186:21:1::0;9243:2;9223:18;;;9216:30;9282:26;9262:18;;;9255:54;9326:18;;25823:55:0::1;9002:348:1::0;25823:55:0::1;25897:12;::::0;25911:2:::1;25897:12:::0;;;::::1;;;:16;;25889:59;;;::::0;-1:-1:-1;;;25889:59:0;;9557:2:1;25889:59:0::1;::::0;::::1;9539:21:1::0;9596:2;9576:18;;;9569:30;9635:33;9615:18;;;9608:61;9686:18;;25889:59:0::1;9355:355:1::0;25889:59:0::1;25959:7;:14:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;25984:16:0;;;;25959:14:::1;25984:16:::0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;26038:24:0;26011:16;;;::::1;::::0;;;::::1;-1:-1:-1::0;;26038:24:0;;;;;;;;;::::1;;::::0;;;::::1;::::0;;25670:400::o;31324:94::-;31365:13;31398:12;31391:19;;;;;:::i;29753:193::-;29859:4;29876:40;29886:10;29898:9;29909:6;29876:9;:40::i;27514:215::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27623:28:0;::::1;27615:63;;;::::0;-1:-1:-1;;;27615:63:0;;9917:2:1;27615:63:0::1;::::0;::::1;9899:21:1::0;9956:2;9936:18;;;9929:30;9995:25;9975:18;;;9968:53;10038:18;;27615:63:0::1;9715:347:1::0;27615:63:0::1;27689:15;:32:::0;;-1:-1:-1;;;;;;27689:32:0::1;-1:-1:-1::0;;;;;27689:32:0;;;::::1;::::0;;;::::1;::::0;;27514:215::o;27343:165::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;27461:1:::1;27454:3;27439:12;;27452:1;27439:14;;;;:::i;:::-;:18;;;;:::i;:::-;27438:24;;;;:::i;:::-;27431:5;:31;;27423:40;;;::::0;::::1;;27491:9;::::0;27487:13:::1;::::0;27491:9:::1;;27487:2;:13;:::i;:::-;27481:19;::::0;:5;:19:::1;:::i;:::-;27474:6;:26:::0;-1:-1:-1;27343:165:0:o;26792:131::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;26886:29:::1;26902:12;26886:15;:29::i;26454:205::-:0;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;26573:1:::1;26558:14;;:16;:53;;;;;26607:3;26592:12;;26605:1;26592:14;;;;:::i;:::-;:18;;;;:::i;:::-;26576:13;:35;;26558:53;26550:62;;;::::0;::::1;;26623:14;:28:::0;26454:205::o;26929:151::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27038:25:0;;;::::1;;::::0;;;:16:::1;:25;::::0;;;;:34;;-1:-1:-1;;27038:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26929:151::o;17718:244::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17807:22:0;::::1;17799:73;;;::::0;-1:-1:-1;;;17799:73:0;;12047:2:1;17799:73:0::1;::::0;::::1;12029:21:1::0;12086:2;12066:18;;;12059:30;12125:34;12105:18;;;12098:62;-1:-1:-1;;;12176:18:1;;;12169:36;12222:19;;17799:73:0::1;11845:402:1::0;17799:73:0::1;17883:6;:17:::0;;-1:-1:-1;;;;;;17883:17:0::1;-1:-1:-1::0;;;;;17883:17:0;::::1;::::0;;::::1;::::0;;17916:38:::1;::::0;17883:17;;;;17916:38:::1;::::0;17883:6;17916:38:::1;17718:244:::0;:::o;27994:157::-;17395:7;17422:6;-1:-1:-1;;;;;17422:6:0;17482:10;:19;17474:64;;;;-1:-1:-1;;;17474:64:0;;;;;;;:::i;:::-;28066:50:::1;::::0;28051:12:::1;::::0;28066:10:::1;::::0;28089:21:::1;::::0;28051:12;28066:50;28051:12;28066:50;28089:21;28066:10;:50:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28050:66;;;28135:7;28127:16;;;::::0;::::1;30391:317:::0;-1:-1:-1;;;;;30521:19:0;;;;;;:44;;-1:-1:-1;;;;;;30544:21:0;;;;30521:44;30512:93;;;;-1:-1:-1;;;30512:93:0;;12664:2:1;30512:93:0;;;12646:21:1;12703:2;12683:18;;;12676:30;12742:34;12722:18;;;12715:62;-1:-1:-1;;;12793:18:1;;;12786:32;12835:19;;30512:93:0;12462:398:1;30512:93:0;-1:-1:-1;;;;;30616:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;30668:32;;1618:25:1;;;30668:32:0;;1591:18:1;30668:32:0;;;;;;;30391:317;;;:::o;20808:717::-;-1:-1:-1;;;;;20938:22:0;;20922:15;20938:22;;;:16;:22;;;;;;;;;:44;;-1:-1:-1;;;;;;20962:20:0;;;;;;:16;:20;;;;;;;;20938:44;:53;;;-1:-1:-1;20984:7:0;;;;20938:53;-1:-1:-1;;;;;21013:28:0;;;21002:10;21013:28;;;:22;:28;;;;;;;21064:26;;;;;;;;20922:69;;-1:-1:-1;21013:28:0;;;;;21064:26;21101:417;;;;21115:32;21130:4;21135:2;21138:6;21145:1;21115:14;:32::i;:::-;21101:417;;;21186:15;;-1:-1:-1;;;21186:15:0;;;;21178:24;;;;;;21220:5;21217:290;;;21226:26;21237:4;21242:2;21245:6;21226:10;:26::i;21217:290::-;21275:6;21272:235;;;21306:7;;;;21305:8;:22;;;;-1:-1:-1;21315:12:0;;;;;;;21305:22;21302:48;;;21328:22;21344:5;21328:15;:22::i;:::-;21369:27;21381:4;21386:2;21389:6;21369:11;:27::i;21272:235::-;21437:54;21452:4;21457:2;21460:6;21487:3;21480:6;21467:12;;;;;;;;;;;:19;;;;;;:::i;:::-;:23;;;;:::i;:::-;21437:14;:54::i;:::-;20911:614;;;20808:717;;;:::o;21531:1436::-;19659:7;:14;;-1:-1:-1;;19659:14:0;19669:4;19659:14;;;21669:4:::1;19659:7:::0;21651:24;;;:9:::1;:24;::::0;;;;;21701:14:::1;::::0;21729:27;;::::1;21726:174;;;21776:12;:36;;;;;21811:1;21790:20;:22;21776:36;21773:116;;;-1:-1:-1::0;21840:20:0;21773:116:::1;;;21882:7;;;;21773:116;21946:10;:23:::0;21910:28:::1;::::0;21970:3:::1;::::0;21939:30:::1;::::0;21946:23:::1;::::0;::::1;;;21939:6:::0;:30:::1;:::i;:::-;:34;;;;:::i;:::-;21910:63:::0;-1:-1:-1;21984:23:0::1;22008:27;21910:63:::0;22008:6;:27:::1;:::i;:::-;21984:51:::0;-1:-1:-1;22046:23:0::1;22070:22;22091:1;22070:20:::0;:22:::1;:::i;:::-;22046:46:::0;-1:-1:-1;22103:26:0::1;22130:36;22046:46:::0;22130:20;:36:::1;:::i;:::-;22103:63:::0;-1:-1:-1;22184:34:0::1;22103:63:::0;22184:15;:34:::1;:::i;:::-;22177:41:::0;-1:-1:-1;22244:21:0::1;22276:25;22177:41:::0;22276:17:::1;:25::i;:::-;22312:14;22327:28;22349:6:::0;22327:21:::1;:28;:::i;:::-;22312:43:::0;-1:-1:-1;22366:20:0::1;22415:6:::0;22388:25:::1;22395:18:::0;22312:43;22388:25:::1;:::i;:::-;22387:34;;;;:::i;:::-;22366:55:::0;-1:-1:-1;22432:20:0::1;22453:19;22366:55:::0;22453:6;:19:::1;:::i;:::-;22517:10;:23:::0;22432:40;;-1:-1:-1;22483:20:0::1;::::0;22541:3:::1;::::0;22504:36:::1;::::0;22517:23:::1;;22432:40:::0;22504:36:::1;:::i;:::-;:40;;;;:::i;:::-;22483:61:::0;-1:-1:-1;22555:18:0::1;22574:25;22483:61:::0;22574:12;:25:::1;:::i;:::-;22555:44:::0;-1:-1:-1;22614:14:0;;22610:97:::1;;22647:19;;;;;;;;;-1:-1:-1::0;;;;;22647:19:0::1;-1:-1:-1::0;;;;;22647:27:0::1;;22682:10;22647:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;22643:64:::0;::::1;22753:15;::::0;22745:66:::1;::::0;22718:22:::1;::::0;-1:-1:-1;;;;;22753:15:0::1;::::0;22801:5:::1;::::0;22782:12;;22718:22;22745:66;22718:22;22745:66;22782:12;22753:15;22801:5;22745:66:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22717:94;;;22840:5;22822:23;;22856:43;22870:15;22886:12;22856:13;:43::i;:::-;22915:44;::::0;;8567:25:1;;;8623:2;8608:18;;8601:34;;;22915:44:0::1;::::0;8540:18:1;22915:44:0::1;;;;;;;21611:1356;;;;;;;;;;;;;19674:1;-1:-1:-1::0;19676:7:0;:15;;-1:-1:-1;;19676:15:0;;;21531:1436::o;23447:684::-;23609:8;;23588:20;;23622:3;;23609:12;;23618:3;;23609:8;;;;;:12;:::i;:::-;:16;;;;:::i;:::-;-1:-1:-1;;;;;23636:15:0;;;;;;:9;:15;;;;;:23;;23588:37;;-1:-1:-1;23653:6:0;;23636:15;;;:23;;23653:6;;23636:23;:::i;:::-;;;;-1:-1:-1;;23680:10:0;;-1:-1:-1;;;;;23680:10:0;23670:21;;;;:9;:21;;;;;:35;;23693:12;;23670:21;:35;;23693:12;;23670:35;:::i;:::-;;;;-1:-1:-1;23743:16:0;;-1:-1:-1;23747:12:0;23743:3;:16;:::i;:::-;23734:4;23716:24;;;;:9;:24;;;;;:44;;:24;;;:44;;;;;:::i;:::-;;;;-1:-1:-1;23787:10:0;;-1:-1:-1;23794:3:0;23787:6;:10;:::i;:::-;-1:-1:-1;;;;;23771:13:0;;;;;;:9;:13;;;;;:27;;:13;;;:27;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;23813:26:0;;;;;;:20;:26;;;;;;;;23809:98;;23845:19;;-1:-1:-1;;;;;23879:15:0;;;23845:19;23879:15;;;:9;:15;;;;;;;;23845:50;;-1:-1:-1;;;23845:50:0;;;;;3146:51:1;;;;3213:18;;;3206:34;23845:19:0;;;:28;;3119:18:1;;23845:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23841:66;;-1:-1:-1;;;;;23921:24:0;;;;;;:20;:24;;;;;;;;23917:92;;23951:19;;-1:-1:-1;;;;;23983:13:0;;;23951:19;23983:13;;;:9;:13;;;;;;;;23951:46;;-1:-1:-1;;;23951:46:0;;;;;3146:51:1;;;;3213:18;;;3206:34;23951:19:0;;;:28;;3119:18:1;;23951:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23947:62;;24023:19;;24051:14;;24023:43;;-1:-1:-1;;;;;;24023:43:0;;-1:-1:-1;;;;;24023:19:0;;;;:27;;:43;;;;1618:25:1;;;1606:2;1591:18;;1472:177;24023:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24019:59;-1:-1:-1;;;;;24093:30:0;;;;;;;24111:10;24118:3;24111:6;:10;:::i;:::-;24093:30;;1618:25:1;;;1606:2;1591:18;24093:30:0;;;;;;;23577:554;23447:684;;;;:::o;22973:230::-;23104:6;;23096;:14;;23088:47;;;;-1:-1:-1;;;23088:47:0;;13200:2:1;23088:47:0;;;13182:21:1;13239:2;13219:18;;;13212:30;-1:-1:-1;;;13258:18:1;;;13251:51;13319:18;;23088:47:0;12998:345:1;23088:47:0;23183:7;;23146:49;;23161:4;;23166:2;;23169:6;;23191:3;;23176:14;;23183:7;;23169:6;23176:14;:::i;23209:232::-;23341:6;;23333;:14;;23325:47;;;;-1:-1:-1;;;23325:47:0;;13200:2:1;23325:47:0;;;13182:21:1;13239:2;13219:18;;;13212:30;-1:-1:-1;;;13258:18:1;;;13251:51;13319:18;;23325:47:0;12998:345:1;23325:47:0;23420:8;;23383:50;;23398:4;;23403:2;;23406:6;;23429:3;;23413:15;;23420:8;;;;;23406:6;23413:15;:::i;24137:465::-;24244:16;;;24258:1;24244:16;;;;;;;;24220:21;;24244:16;;;;;;;;;;-1:-1:-1;24244:16:0;24220:40;;24289:4;24271;24276:1;24271:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24271:23:0;;;:7;;;;;;;;;;:23;;;;24315:7;;:14;;;-1:-1:-1;;;24315:14:0;;;;:7;;;;;:12;;:14;;;;;24271:7;;24315:14;;;;;:7;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24305:4;24310:1;24305:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24305:24:0;;;:7;;;;;;;;;:24;24372:7;;24340:54;;24357:4;;24372:7;24382:11;24340:8;:54::i;:::-;24405:7;;:189;;-1:-1:-1;;;24405:189:0;;-1:-1:-1;;;;;24405:7:0;;;;:58;;:189;;24478:11;;24405:7;;24521:4;;24548;;24568:15;;24405:189;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24608:373;24747:7;;24715:54;;24732:4;;-1:-1:-1;;;;;24747:7:0;24757:11;24715:8;:54::i;:::-;24780:7;;24922:10;;24780:193;;-1:-1:-1;;;24780:193:0;;24844:4;24780:193;;;15194:34:1;15244:18;;;15237:34;;;24780:7:0;15287:18:1;;;15280:34;;;15330:18;;;15323:34;-1:-1:-1;;;;;24922:10:0;;;15373:19:1;;;15366:44;24947:15:0;15426:19:1;;;15419:35;24780:7:0;;;:23;;24811:9;;15128:19:1;;24780:193:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24608:373;;:::o;414:597:1:-;526:4;555:2;584;573:9;566:21;616:6;610:13;659:6;654:2;643:9;639:18;632:34;684:1;694:140;708:6;705:1;702:13;694:140;;;803:14;;;799:23;;793:30;769:17;;;788:2;765:26;758:66;723:10;;694:140;;;852:6;849:1;846:13;843:91;;;922:1;917:2;908:6;897:9;893:22;889:31;882:42;843:91;-1:-1:-1;995:2:1;974:15;-1:-1:-1;;970:29:1;955:45;;;;1002:2;951:54;;414:597;-1:-1:-1;;;414:597:1:o;1016:131::-;-1:-1:-1;;;;;1091:31:1;;1081:42;;1071:70;;1137:1;1134;1127:12;1152:315;1220:6;1228;1281:2;1269:9;1260:7;1256:23;1252:32;1249:52;;;1297:1;1294;1287:12;1249:52;1336:9;1323:23;1355:31;1380:5;1355:31;:::i;:::-;1405:5;1457:2;1442:18;;;;1429:32;;-1:-1:-1;;;1152:315:1:o;1654:156::-;1720:20;;1780:4;1769:16;;1759:27;;1749:55;;1800:1;1797;1790:12;1749:55;1654:156;;;:::o;1815:322::-;1886:6;1894;1902;1955:2;1943:9;1934:7;1930:23;1926:32;1923:52;;;1971:1;1968;1961:12;1923:52;1994:27;2011:9;1994:27;:::i;:::-;1984:37;;2040:36;2072:2;2061:9;2057:18;2040:36;:::i;:::-;2030:46;;2095:36;2127:2;2116:9;2112:18;2095:36;:::i;:::-;2085:46;;1815:322;;;;;:::o;2142:456::-;2219:6;2227;2235;2288:2;2276:9;2267:7;2263:23;2259:32;2256:52;;;2304:1;2301;2294:12;2256:52;2343:9;2330:23;2362:31;2387:5;2362:31;:::i;:::-;2412:5;-1:-1:-1;2469:2:1;2454:18;;2441:32;2482:33;2441:32;2482:33;:::i;:::-;2142:456;;2534:7;;-1:-1:-1;;;2588:2:1;2573:18;;;;2560:32;;2142:456::o;2603:118::-;2689:5;2682:13;2675:21;2668:5;2665:32;2655:60;;2711:1;2708;2701:12;2726:241;2782:6;2835:2;2823:9;2814:7;2810:23;2806:32;2803:52;;;2851:1;2848;2841:12;2803:52;2890:9;2877:23;2909:28;2931:5;2909:28;:::i;:::-;2956:5;2726:241;-1:-1:-1;;;2726:241:1:o;3251:247::-;3310:6;3363:2;3351:9;3342:7;3338:23;3334:32;3331:52;;;3379:1;3376;3369:12;3331:52;3418:9;3405:23;3437:31;3462:5;3437:31;:::i;3692:382::-;3757:6;3765;3818:2;3806:9;3797:7;3793:23;3789:32;3786:52;;;3834:1;3831;3824:12;3786:52;3873:9;3860:23;3892:31;3917:5;3892:31;:::i;:::-;3942:5;-1:-1:-1;3999:2:1;3984:18;;3971:32;4012:30;3971:32;4012:30;:::i;:::-;4061:7;4051:17;;;3692:382;;;;;:::o;4079:316::-;4156:6;4164;4172;4225:2;4213:9;4204:7;4200:23;4196:32;4193:52;;;4241:1;4238;4231:12;4193:52;-1:-1:-1;;4264:23:1;;;4334:2;4319:18;;4306:32;;-1:-1:-1;4385:2:1;4370:18;;;4357:32;;4079:316;-1:-1:-1;4079:316:1:o;4400:393::-;4478:6;4486;4494;4502;4555:3;4543:9;4534:7;4530:23;4526:33;4523:53;;;4572:1;4569;4562:12;4523:53;4595:27;4612:9;4595:27;:::i;:::-;4585:37;;4641:36;4673:2;4662:9;4658:18;4641:36;:::i;:::-;4631:46;;4696:36;4728:2;4717:9;4713:18;4696:36;:::i;:::-;4686:46;;4751:36;4783:2;4772:9;4768:18;4751:36;:::i;:::-;4741:46;;4400:393;;;;;;;:::o;5034:180::-;5093:6;5146:2;5134:9;5125:7;5121:23;5117:32;5114:52;;;5162:1;5159;5152:12;5114:52;-1:-1:-1;5185:23:1;;5034:180;-1:-1:-1;5034:180:1:o;5219:388::-;5287:6;5295;5348:2;5336:9;5327:7;5323:23;5319:32;5316:52;;;5364:1;5361;5354:12;5316:52;5403:9;5390:23;5422:31;5447:5;5422:31;:::i;:::-;5472:5;-1:-1:-1;5529:2:1;5514:18;;5501:32;5542:33;5501:32;5542:33;:::i;6381:380::-;6460:1;6456:12;;;;6503;;;6524:61;;6578:4;6570:6;6566:17;6556:27;;6524:61;6631:2;6623:6;6620:14;6600:18;6597:38;6594:161;;;6677:10;6672:3;6668:20;6665:1;6658:31;6712:4;6709:1;6702:15;6740:4;6737:1;6730:15;6594:161;;6381:380;;;:::o;6766:356::-;6968:2;6950:21;;;6987:18;;;6980:30;7046:34;7041:2;7026:18;;7019:62;7113:2;7098:18;;6766:356::o;7127:127::-;7188:10;7183:3;7179:20;7176:1;7169:31;7219:4;7216:1;7209:15;7243:4;7240:1;7233:15;7259:204;7297:3;7333:4;7330:1;7326:12;7365:4;7362:1;7358:12;7400:3;7394:4;7390:14;7385:3;7382:23;7379:49;;;7408:18;;:::i;:::-;7444:13;;7259:204;-1:-1:-1;;;7259:204:1:o;7824:125::-;7864:4;7892:1;7889;7886:8;7883:34;;;7897:18;;:::i;:::-;-1:-1:-1;7934:9:1;;7824:125::o;7954:184::-;8024:6;8077:2;8065:9;8056:7;8052:23;8048:32;8045:52;;;8093:1;8090;8083:12;8045:52;-1:-1:-1;8116:16:1;;7954:184;-1:-1:-1;7954:184:1:o;8143:245::-;8210:6;8263:2;8251:9;8242:7;8238:23;8234:32;8231:52;;;8279:1;8276;8269:12;8231:52;8311:9;8305:16;8330:28;8352:5;8330:28;:::i;10067:168::-;10107:7;10173:1;10169;10165:6;10161:14;10158:1;10155:21;10150:1;10143:9;10136:17;10132:45;10129:71;;;10180:18;;:::i;:::-;-1:-1:-1;10220:9:1;;10067:168::o;10240:217::-;10280:1;10306;10296:132;;10350:10;10345:3;10341:20;10338:1;10331:31;10385:4;10382:1;10375:15;10413:4;10410:1;10403:15;10296:132;-1:-1:-1;10442:9:1;;10240:217::o;10462:422::-;10551:1;10594:5;10551:1;10608:270;10629:7;10619:8;10616:21;10608:270;;;10688:4;10684:1;10680:6;10676:17;10670:4;10667:27;10664:53;;;10697:18;;:::i;:::-;10747:7;10737:8;10733:22;10730:55;;;10767:16;;;;10730:55;10846:22;;;;10806:15;;;;10608:270;;;10612:3;10462:422;;;;;:::o;10889:806::-;10938:5;10968:8;10958:80;;-1:-1:-1;11009:1:1;11023:5;;10958:80;11057:4;11047:76;;-1:-1:-1;11094:1:1;11108:5;;11047:76;11139:4;11157:1;11152:59;;;;11225:1;11220:130;;;;11132:218;;11152:59;11182:1;11173:10;;11196:5;;;11220:130;11257:3;11247:8;11244:17;11241:43;;;11264:18;;:::i;:::-;-1:-1:-1;;11320:1:1;11306:16;;11335:5;;11132:218;;11434:2;11424:8;11421:16;11415:3;11409:4;11406:13;11402:36;11396:2;11386:8;11383:16;11378:2;11372:4;11369:12;11365:35;11362:77;11359:159;;;-1:-1:-1;11471:19:1;;;11503:5;;11359:159;11550:34;11575:8;11569:4;11550:34;:::i;:::-;11620:6;11616:1;11612:6;11608:19;11599:7;11596:32;11593:58;;;11631:18;;:::i;:::-;11669:20;;10889:806;-1:-1:-1;;;10889:806:1:o;11700:140::-;11758:5;11787:47;11828:4;11818:8;11814:19;11808:4;11787:47;:::i;12865:128::-;12905:3;12936:1;12932:6;12929:1;12926:13;12923:39;;;12942:18;;:::i;:::-;-1:-1:-1;12978:9:1;;12865:128::o;13480:127::-;13541:10;13536:3;13532:20;13529:1;13522:31;13572:4;13569:1;13562:15;13596:4;13593:1;13586:15;13612:251;13682:6;13735:2;13723:9;13714:7;13710:23;13706:32;13703:52;;;13751:1;13748;13741:12;13703:52;13783:9;13777:16;13802:31;13827:5;13802:31;:::i;13868:980::-;14130:4;14178:3;14167:9;14163:19;14209:6;14198:9;14191:25;14235:2;14273:6;14268:2;14257:9;14253:18;14246:34;14316:3;14311:2;14300:9;14296:18;14289:31;14340:6;14375;14369:13;14406:6;14398;14391:22;14444:3;14433:9;14429:19;14422:26;;14483:2;14475:6;14471:15;14457:29;;14504:1;14514:195;14528:6;14525:1;14522:13;14514:195;;;14593:13;;-1:-1:-1;;;;;14589:39:1;14577:52;;14684:15;;;;14649:12;;;;14625:1;14543:9;14514:195;;;-1:-1:-1;;;;;;;14765:32:1;;;;14760:2;14745:18;;14738:60;-1:-1:-1;;;14829:3:1;14814:19;14807:35;14726:3;13868:980;-1:-1:-1;;;13868:980:1:o;15465:306::-;15553:6;15561;15569;15622:2;15610:9;15601:7;15597:23;15593:32;15590:52;;;15638:1;15635;15628:12;15590:52;15667:9;15661:16;15651:26;;15717:2;15706:9;15702:18;15696:25;15686:35;;15761:2;15750:9;15746:18;15740:25;15730:35;;15465:306;;;;;:::o

Swarm Source

ipfs://c999a8a079c99f06e84b8b0abb5ae947e4a89e4f841312a0932b141ef5cfa900
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.