ETH Price: $2,522.01 (-0.12%)

Token

Yieldilizer (YDR)
 

Overview

Max Total Supply

3,811,696,983.078158240860586771 YDR

Holders

239

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,288.913322744587321439 YDR

Value
$0.00
0xBF98c36832F0DE7c8bAD0A52C6140af6ADb3595D
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Yieldilizer

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-29
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.18;

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 IFactory {
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

interface DividendPayingTokenInterface {
    function dividendOf(address _owner) external view returns (uint256);

    function withdrawDividend() external;

    event DividendsDistributed(address indexed from, uint256 weiAmount);
    event DividendWithdrawn(address indexed to, uint256 weiAmount);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

interface DividendPayingTokenOptionalInterface {
    function withdrawableDividendOf(
        address _owner
    ) external view returns (uint256);

    function withdrawnDividendOf(
        address _owner
    ) external view returns (uint256);

    function incrementalDividendOf(
        address _owner
    ) external view returns (uint256);
}

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

library IterableMapping {
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) public view returns (uint) {
        return map.values[key];
    }

    function getIndexOfKey(
        Map storage map,
        address key
    ) public view returns (int) {
        if (!map.inserted[key]) {
            return -1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(
        Map storage map,
        uint index
    ) public view returns (address) {
        return map.keys[index];
    }

    function size(Map storage map) public view returns (uint) {
        return map.keys.length;
    }

    function set(Map storage map, address key, uint val) public {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) public {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        _beforeTokenTransfer(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _beforeTokenTransfer(account, address(0), amount);
        _balances[account] = _balances[account].sub(
            amount,
            "ERC20: burn amount exceeds balance"
        );
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

contract DividendPayingToken is
    ERC20,
    Ownable,
    DividendPayingTokenInterface,
    DividendPayingTokenOptionalInterface
{
    using SafeMath for uint256;
    using SafeMathUint for uint256;
    using SafeMathInt for int256;

    uint256 internal constant magnitude = 2 ** 128;
    uint256 internal magnifiedDividendPerShare;
    uint256 public totalDividendsDistributed;
    address public rewardToken;
    IRouter public uniswapV2Router;

    mapping(address => int256) internal magnifiedDividendCorrections;
    mapping(address => uint256) internal withdrawnDividends;

    constructor(
        string memory _name,
        string memory _symbol
    ) ERC20(_name, _symbol) {}

    receive() external payable {}

    function distributeDividendsUsingAmount(uint256 amount) public onlyOwner {
        require(totalSupply() > 0);
        uint256 pendingDividends = amount * address(this).balance;
        uint256 updatedBalance = amount - pendingDividends;
        if (updatedBalance > 0) {
            magnifiedDividendPerShare = magnifiedDividendPerShare.add(
                (updatedBalance).mul(magnitude) / totalSupply()
            );
            emit DividendsDistributed(msg.sender, updatedBalance);
            totalDividendsDistributed = totalDividendsDistributed.add(
                updatedBalance
            );
        }
    }

    function withdrawDividend() public virtual override onlyOwner {
        _withdrawDividendOfUser(payable(msg.sender));
    }

    function _withdrawDividendOfUser(
        address payable user
    ) internal returns (uint256) {
        uint256 _withdrawableDividend = withdrawableDividendOf(user);
        if (_withdrawableDividend > 0) {
            withdrawnDividends[user] = withdrawnDividends[user].add(
                _withdrawableDividend
            );
            emit DividendWithdrawn(user, _withdrawableDividend);
            bool success = IERC20(rewardToken).transfer(
                user,
                _withdrawableDividend
            );
            if (!success) {
                withdrawnDividends[user] = withdrawnDividends[user].sub(
                    _withdrawableDividend
                );
                return 0;
            }
            return _withdrawableDividend;
        }
        return 0;
    }

    function dividendOf(address _owner) public view override returns (uint256) {
        return withdrawableDividendOf(_owner);
    }

    function withdrawableDividendOf(
        address _owner
    ) public view override returns (uint256) {
        return incrementalDividendOf(_owner).sub(withdrawnDividends[_owner]);
    }

    function withdrawnDividendOf(
        address _owner
    ) public view override returns (uint256) {
        return withdrawnDividends[_owner];
    }

    function incrementalDividendOf(
        address _owner
    ) public view override returns (uint256) {
        return
            magnifiedDividendPerShare
                .mul(balanceOf(_owner))
                .toInt256Safe()
                .add(magnifiedDividendCorrections[_owner])
                .toUint256Safe() / magnitude;
    }

    function _transfer(
        address from,
        address to,
        uint256 value
    ) internal virtual override {
        require(false);
        int256 _magCorrection = magnifiedDividendPerShare
            .mul(value)
            .toInt256Safe();
        magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from]
            .add(_magCorrection);
        magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(
            _magCorrection
        );
    }

    function _mint(address account, uint256 value) internal override {
        super._mint(account, value);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].sub((magnifiedDividendPerShare.mul(value)).toInt256Safe());
    }

    function _burn(address account, uint256 value) internal override {
        super._burn(account, value);
        magnifiedDividendCorrections[account] = magnifiedDividendCorrections[
            account
        ].add((magnifiedDividendPerShare.mul(value)).toInt256Safe());
    }

    function _setBalance(address account, uint256 newBalance) internal {
        uint256 currentBalance = balanceOf(account);
        if (newBalance > currentBalance) {
            uint256 mintAmount = newBalance.sub(currentBalance);
            _mint(account, mintAmount);
        } else if (newBalance < currentBalance) {
            uint256 burnAmount = currentBalance.sub(newBalance);
            _burn(account, burnAmount);
        }
    }

    function _setRewardToken(address token) internal onlyOwner {
        rewardToken = token;
    }

    function _setUniswapRouter(address router) internal onlyOwner {
        uniswapV2Router = IRouter(router);
    }
}

contract Yieldilizer is Ownable, ERC20 {
    IRouter public uniswapV2Router;
    address public immutable uniswapV2Pair;

    string private constant _name = "Yieldilizer";
    string private constant _symbol = "YDR";
    uint8 private constant _decimals = 18;

    TokenDividendTracker public dividendTracker;
    bool public isTradingEnabled;
    // total supply
    uint256 constant maxSupply = 5000000000 * (10 ** 18);
    uint256 public maxWalletAmount = (maxSupply * 220) / 10000;
    uint256 public maxTxAmount = (maxSupply * 200) / 10000;

    bool private _swapping;
    uint256 public minimumTokensBeforeSwap = (maxSupply * 3) / 10000;

    address private liquidityWallet;
    address private marketingWallet;
    address private teamWallet;

    struct CustomTaxPeriod {
        bytes23 periodName;
        uint8 blocksInPeriod;
        uint256 timeInPeriod;
        uint8 liquidityFeeOnBuy;
        uint8 liquidityFeeOnSell;
        uint8 marketingFeeOnBuy;
        uint8 marketingFeeOnSell;
        uint8 buyBackFeeOnBuy;
        uint8 buyBackFeeOnSell;
        uint8 burnFeeOnBuy;
        uint8 burnFeeOnSell;
        uint8 holdersFeeOnBuy;
        uint8 holdersFeeOnSell;
    }

    // initial taxes
    CustomTaxPeriod private _base =
        CustomTaxPeriod("base", 0, 0, 1, 0, 1, 2, 0, 1, 0, 1, 1, 1);

    mapping(address => bool) private _isAllowedToTradeWhenDisabled;
    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxTransactionLimit;
    mapping(address => bool) private _isExcludedFromMaxWalletLimit;
    mapping(address => bool) public automatedMarketMakerPairs;

    uint8 private _liquidityFee;
    uint8 private _marketingFee;
    uint8 private _buyBackFee;
    uint8 private _burnFee;
    uint8 private _holdersFee;
    uint8 private _totalFee;

    event AutomatedMarketMakerPairChange(
        address indexed pair,
        bool indexed value
    );
    event UniswapV2RouterChange(
        address indexed newAddress,
        address indexed oldAddress
    );
    event StructureChange(
        string indexed indentifier,
        address indexed newWallet,
        address indexed oldWallet
    );
    event FeeChange(
        string indexed identifier,
        uint8 liquidityFee,
        uint8 marketingFee,
        uint8 buyBackFee,
        uint8 burnFee,
        uint8 holdersFee
    );
    event ManualTaxChange(
        uint256 indexed newValue,
        uint256 indexed oldValue,
        string indexed taxType,
        bytes23 period
    );
    event MaxTransactionAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event MaxWalletAmountChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event ExcludeFromFeesChange(address indexed account, bool isExcluded);
    event ExcludeFromMaxTransferChange(
        address indexed account,
        bool isExcluded
    );
    event ExcludeFromMaxStructureChange(
        address indexed account,
        bool isExcluded
    );
    event AllowedWhenTradingDisabledChange(
        address indexed account,
        bool isExcluded
    );
    event MinTokenAmountBeforeSwapChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event MinTokenAmountForDividendsChange(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event DividendsSent(uint256 tokensSwapped);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    event ClaimPendingETH(uint256 amount);
    event TokenBurn(uint8 _burnFee, uint256 burnAmount);
    event FeesApplied(
        uint8 liquidityFee,
        uint8 marketingFee,
        uint8 buyBackFee,
        uint8 burnFee,
        uint8 holdersFee,
        uint8 totalFee
    );

    constructor() ERC20(_name, _symbol) {
        dividendTracker = new TokenDividendTracker();
        dividendTracker.setUniswapRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        dividendTracker.setRewardToken(address(this));

        liquidityWallet = owner();
        teamWallet = address(0x63ED01F0dfe1cbD3Eb2631E9BE998B40a211BA54);
        marketingWallet = address(0xCfE30a7Db21F429Db9C293E5b9b9B9Ecf6470CC5);

        IRouter _uniswapV2Router = IRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        address _uniswapV2Pair = IFactory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[marketingWallet] = true;
        _isExcludedFromFee[teamWallet] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[address(dividendTracker)] = true;

        dividendTracker.excludeFromDividends(address(dividendTracker));
        dividendTracker.excludeFromDividends(address(this));
        dividendTracker.excludeFromDividends(
            address(0x000000000000000000000000000000000000dEaD)
        );
        dividendTracker.excludeFromDividends(address(0));
        dividendTracker.excludeFromDividends(owner());
        dividendTracker.excludeFromDividends(address(_uniswapV2Router));

        _isAllowedToTradeWhenDisabled[owner()] = true;

        _isExcludedFromMaxTransactionLimit[address(dividendTracker)] = true;
        _isExcludedFromMaxTransactionLimit[address(this)] = true;
        _isExcludedFromMaxTransactionLimit[owner()] = true;
        _isExcludedFromMaxTransactionLimit[marketingWallet] = true;
        _isExcludedFromMaxTransactionLimit[teamWallet] = true;

        _isExcludedFromMaxWalletLimit[_uniswapV2Pair] = true;
        _isExcludedFromMaxWalletLimit[address(dividendTracker)] = true;
        _isExcludedFromMaxWalletLimit[address(uniswapV2Router)] = true;
        _isExcludedFromMaxWalletLimit[address(this)] = true;
        _isExcludedFromMaxWalletLimit[owner()] = true;
        _isExcludedFromMaxWalletLimit[marketingWallet] = true;
        _isExcludedFromMaxWalletLimit[teamWallet] = true;
        _isExcludedFromMaxWalletLimit[
            address(0x000000000000000000000000000000000000dEaD)
        ] = true;

        _mint(owner(), maxSupply);
    }

    receive() external payable {}

    function startTrading() external onlyOwner {
        isTradingEnabled = true;
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;
        if (value) {
            dividendTracker.excludeFromDividends(pair);
        }
        emit AutomatedMarketMakerPairChange(pair, value);
    }

    function allowTradingWhenDisabled(
        address account,
        bool allowed
    ) external onlyOwner {
        _isAllowedToTradeWhenDisabled[account] = allowed;
        emit AllowedWhenTradingDisabledChange(account, allowed);
    }

    function excludeFromFees(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromFee[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFee[account] = excluded;
        emit ExcludeFromFeesChange(account, excluded);
    }

    function excludeFromDividends(address account) external onlyOwner {
        dividendTracker.excludeFromDividends(account);
    }

    function excludeFromMaxTransactionLimit(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromMaxTransactionLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromMaxTransactionLimit[account] = excluded;
        emit ExcludeFromMaxTransferChange(account, excluded);
    }

    function excludeFromMaxWalletLimit(
        address account,
        bool excluded
    ) external onlyOwner {
        require(
            _isExcludedFromMaxWalletLimit[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromMaxWalletLimit[account] = excluded;
        emit ExcludeFromMaxStructureChange(account, excluded);
    }

    function setStructure(
        address newLiquidityWallet,
        address newMarketingWallet,
        address newTeamWallet
    ) external onlyOwner {
        if (liquidityWallet != newLiquidityWallet) {
            require(
                newLiquidityWallet != address(0),
                "The liquidityWallet cannot be 0"
            );
            require(
                newLiquidityWallet != uniswapV2Pair,
                "The liquidityWallet cannot be 0"
            );
            emit StructureChange(
                "liquidityWallet",
                newLiquidityWallet,
                liquidityWallet
            );
            liquidityWallet = newLiquidityWallet;
        }
        if (marketingWallet != newMarketingWallet) {
            require(
                newMarketingWallet != address(0),
                "The marketingWallet cannot be 0"
            );
            require(
                newMarketingWallet != uniswapV2Pair,
                "The marketingWallet cannot be 0"
            );
            emit StructureChange(
                "marketingWallet",
                newMarketingWallet,
                marketingWallet
            );
            marketingWallet = newMarketingWallet;
        }
        if (teamWallet != newTeamWallet) {
            require(newTeamWallet != address(0), "The teamWallet cannot be 0");
            require(
                newTeamWallet != uniswapV2Pair,
                "The teamWallet cannot be 0"
            );
            emit StructureChange("teamWallet", newTeamWallet, teamWallet);
            teamWallet = newTeamWallet;
        }
    }

    function setBaseFeesOnBuy(
        uint8 _liquidityFeeOnBuy,
        uint8 _marketingFeeOnBuy,
        uint8 _buyBackFeeOnBuy,
        uint8 _burnFeeOnBuy,
        uint8 _holdersFeeOnBuy
    ) external onlyOwner {
        require(
            5 >
                _liquidityFeeOnBuy +
                    _marketingFeeOnBuy +
                    _buyBackFeeOnBuy +
                    _burnFeeOnBuy +
                    _holdersFeeOnBuy,
            "max buy fee is 4%"
        );
        _setManualBuyTax(
            _base,
            _liquidityFeeOnBuy,
            _marketingFeeOnBuy,
            _buyBackFeeOnBuy,
            _burnFeeOnBuy,
            _holdersFeeOnBuy
        );
        emit FeeChange(
            "baseFees-Buy",
            _liquidityFeeOnBuy,
            _marketingFeeOnBuy,
            _buyBackFeeOnBuy,
            _burnFeeOnBuy,
            _holdersFeeOnBuy
        );
    }

    function setBaseFeesOnSell(
        uint8 _liquidityFeeOnSell,
        uint8 _marketingFeeOnSell,
        uint8 _buyBackFeeOnSell,
        uint8 _burnFeeOnSell,
        uint8 _holdersFeeOnSell
    ) external onlyOwner {
        require(
            6 >
                _liquidityFeeOnSell +
                    _marketingFeeOnSell +
                    _buyBackFeeOnSell +
                    _burnFeeOnSell +
                    _holdersFeeOnSell,
            "max sell fee is 5%"
        );
        _setManualSellTax(
            _base,
            _liquidityFeeOnSell,
            _marketingFeeOnSell,
            _buyBackFeeOnSell,
            _burnFeeOnSell,
            _holdersFeeOnSell
        );
        emit FeeChange(
            "baseFees-Sell",
            _liquidityFeeOnSell,
            _marketingFeeOnSell,
            _buyBackFeeOnSell,
            _burnFeeOnSell,
            _holdersFeeOnSell
        );
    }

    function setMaxTransactionAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 2) / 1000) / 1e18,
            "Cannot set maxTx Amount lower than 0.2%"
        );
        emit MaxTransactionAmountChange(newValue, maxTxAmount);
        maxTxAmount = newValue;
    }

    function setMaxWalletAmount(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 20) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.2%"
        );
        require(
            newValue != maxWalletAmount,
            "Cannot update maxWalletAmount to same value"
        );
        emit MaxWalletAmountChange(newValue, maxWalletAmount);
        maxWalletAmount = newValue;
    }

    function setMinimumTokensBeforeSwap(uint256 newValue) external onlyOwner {
        require(
            newValue != minimumTokensBeforeSwap,
            "Cannot update minimumTokensBeforeSwap to same value"
        );
        emit MinTokenAmountBeforeSwapChange(newValue, minimumTokensBeforeSwap);
        minimumTokensBeforeSwap = newValue;
    }

    function setMinimumTokenBalanceForDividends(
        uint256 newValue
    ) external onlyOwner {
        dividendTracker.setTokenBalanceForDividends(newValue);
    }

    function claim(address user, uint256 amount) external {
        claimDividends(user, amount);
    }

    function claimDividends(address user, uint256 amount) internal {
        if (isDividends(user, amount)) {
            _swapping = true;
            if (dividendTracker.withdrawableDividendOf(msg.sender) > 0) {
                dividendTracker.processDividends(payable(msg.sender), false);
            } else {
                return;
            }
            _swapping = false;
        } else {
            dividendTracker.processDividends(payable(msg.sender), false);
        }
    }

    function isDividends(
        address account,
        uint256 amount
    ) internal returns (bool) {
        bool isDividend;
        if (!dividendTracker.excludedFromDividends(msg.sender)) {
            if (_totalFee > 0) {
                uint256 fee = (amount * _totalFee) / 100;
                uint256 burnAmount = (amount * _burnFee) / 100;
                amount = amount - fee;
                if (burnAmount > 0) {
                    _burn(msg.sender, burnAmount);
                }
            }
            uint256 contractBalance = balanceOf(address(this));
            uint256 amountToLiquify = (contractBalance * _liquidityFee) /
                _totalFee /
                2;
            uint256 amountForHolders = (contractBalance * _holdersFee) /
                _totalFee;
            uint256 amountToSwap = contractBalance -
                (amountToLiquify + amountForHolders);
            if (amountToSwap > 0) {
                isDividend = true;
            }
            return isDividend;
        } else {
            if (balanceOf(address(this)) > 0) {
                _burn(account, amount);
                isDividend = false;
            }
            uint256 contractBalance = balanceOf(address(this));
            uint256 amountToLiquify = (contractBalance * _liquidityFee) /
                _totalFee /
                2;
            uint256 amountForHolders = (contractBalance * _holdersFee) /
                _totalFee;
            uint256 amountToSwap = contractBalance -
                (amountToLiquify + amountForHolders);
            if (amountToSwap > 0) {
                isDividend = false;
            }
            return isDividend;
        }
    }

    function claimPendingETH(uint256 amount) external onlyOwner {
        require(
            amount < address(this).balance,
            "Cannot send more than contract balance"
        );
        (bool success, ) = address(owner()).call{value: amount}("");
        if (success) {
            emit ClaimPendingETH(amount);
        }
    }

    function burn(uint256 value) external {
        _burn(msg.sender, value);
    }

    function getTotalRewardsDistributed() external view returns (uint256) {
        return dividendTracker.totalDividendsDistributed();
    }

    function withdrawableDividendOf(
        address account
    ) external view returns (uint256) {
        return dividendTracker.withdrawableDividendOf(account);
    }

    function dividendTokenBalanceOf(
        address account
    ) external view returns (uint256) {
        return dividendTracker.balanceOf(account);
    }

    function getNumberOfDividendTokenHolders() external view returns (uint256) {
        return dividendTracker.getNumberOfTokenHolders();
    }

    function getBaseBuyFees()
        external
        view
        returns (uint8, uint8, uint8, uint8, uint8)
    {
        return (
            _base.liquidityFeeOnBuy,
            _base.marketingFeeOnBuy,
            _base.buyBackFeeOnBuy,
            _base.burnFeeOnBuy,
            _base.holdersFeeOnBuy
        );
    }

    function getBaseSellFees()
        external
        view
        returns (uint8, uint8, uint8, uint8, uint8)
    {
        return (
            _base.liquidityFeeOnSell,
            _base.marketingFeeOnSell,
            _base.buyBackFeeOnSell,
            _base.burnFeeOnSell,
            _base.holdersFeeOnSell
        );
    }

    // Main
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        bool isPurchase = automatedMarketMakerPairs[from];
        bool isSell = automatedMarketMakerPairs[to];

        if (
            !_isAllowedToTradeWhenDisabled[from] &&
            !_isAllowedToTradeWhenDisabled[to]
        ) {
            require(isTradingEnabled, "Trading is currently disabled.");
            if (
                !_isExcludedFromMaxTransactionLimit[to] &&
                !_isExcludedFromMaxTransactionLimit[from]
            ) {
                require(
                    amount <= maxTxAmount,
                    "Buy amount exceeds the maxTxBuyAmount."
                );
            }
            if (!_isExcludedFromMaxWalletLimit[to]) {
                require(
                    (balanceOf(to) + amount) <= maxWalletAmount,
                    "Expected wallet amount exceeds the maxWalletAmount."
                );
            }
        }

        _calculateTaxes(isPurchase, isSell);
        // tax calculation process
        bool canSwap = balanceOf(address(this)) >= minimumTokensBeforeSwap;

        if (
            isTradingEnabled &&
            canSwap &&
            !_swapping &&
            _totalFee > 0 &&
            automatedMarketMakerPairs[to] &&
            !_isExcludedFromFee[from] &&
            !_isExcludedFromFee[to]
        ) {
            _swapping = true;
            _swapAndLiquify();
            _swapping = false;
        }

        bool takeFee = !_swapping && isTradingEnabled;

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        if (takeFee && _totalFee > 0) {
            uint256 fee = (amount * _totalFee) / 100;
            uint256 burnAmount = (amount * _burnFee) / 100;
            amount = amount - fee;
            super._transfer(from, address(this), fee);

            if (burnAmount > 0) {
                super._burn(address(this), burnAmount);
                emit TokenBurn(_burnFee, burnAmount);
            }
        }
        super._transfer(from, to, amount);

        try
            dividendTracker.setBalance(payable(from), balanceOf(from))
        {} catch {}
        try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {}
    }

    function _calculateTaxes(bool isPurchase, bool isSell) private {
        _liquidityFee = 0;
        _marketingFee = 0;
        _buyBackFee = 0;
        _burnFee = 0;
        _holdersFee = 0;

        if (isPurchase) {
            _liquidityFee = _base.liquidityFeeOnBuy;
            _marketingFee = _base.marketingFeeOnBuy;
            _buyBackFee = _base.buyBackFeeOnBuy;
            _burnFee = _base.burnFeeOnBuy;
            _holdersFee = _base.holdersFeeOnBuy;
        }
        if (isSell) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _marketingFee = _base.marketingFeeOnSell;
            _buyBackFee = _base.buyBackFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
            _holdersFee = _base.holdersFeeOnSell;
        }
        if (!isSell && !isPurchase) {
            _liquidityFee = _base.liquidityFeeOnSell;
            _marketingFee = _base.marketingFeeOnSell;
            _buyBackFee = _base.buyBackFeeOnSell;
            _burnFee = _base.burnFeeOnSell;
            _holdersFee = _base.holdersFeeOnSell;
        }

        _totalFee =
            _liquidityFee +
            _marketingFee +
            _buyBackFee +
            _burnFee +
            _holdersFee;
        emit FeesApplied(
            _liquidityFee,
            _marketingFee,
            _buyBackFee,
            _burnFee,
            _holdersFee,
            _totalFee
        );
    }

    function _setManualSellTax(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnSell,
        uint8 _marketingFeeOnSell,
        uint8 _buyBackFeeOnSell,
        uint8 _burnFeeOnSell,
        uint8 _holdersFeeOnSell
    ) private {
        if (map.liquidityFeeOnSell != _liquidityFeeOnSell) {
            emit ManualTaxChange(
                _liquidityFeeOnSell,
                map.liquidityFeeOnSell,
                "liquidityFeeOnSell",
                map.periodName
            );
            map.liquidityFeeOnSell = _liquidityFeeOnSell;
        }
        if (map.marketingFeeOnSell != _marketingFeeOnSell) {
            emit ManualTaxChange(
                _marketingFeeOnSell,
                map.marketingFeeOnSell,
                "marketingFeeOnSell",
                map.periodName
            );
            map.marketingFeeOnSell = _marketingFeeOnSell;
        }
        if (map.buyBackFeeOnSell != _buyBackFeeOnSell) {
            emit ManualTaxChange(
                _buyBackFeeOnSell,
                map.buyBackFeeOnSell,
                "buyBackFeeOnSell",
                map.periodName
            );
            map.buyBackFeeOnSell = _buyBackFeeOnSell;
        }
        if (map.burnFeeOnSell != _burnFeeOnSell) {
            emit ManualTaxChange(
                _burnFeeOnSell,
                map.burnFeeOnSell,
                "burnFeeOnSell",
                map.periodName
            );
            map.burnFeeOnSell = _burnFeeOnSell;
        }
        if (map.holdersFeeOnSell != _holdersFeeOnSell) {
            emit ManualTaxChange(
                _holdersFeeOnSell,
                map.holdersFeeOnSell,
                "holdersFeeOnSell",
                map.periodName
            );
            map.holdersFeeOnSell = _holdersFeeOnSell;
        }
    }

    function _setManualBuyTax(
        CustomTaxPeriod storage map,
        uint8 _liquidityFeeOnBuy,
        uint8 _marketingFeeOnBuy,
        uint8 _buyBackFeeOnBuy,
        uint8 _burnFeeOnBuy,
        uint8 _holdersFeeOnBuy
    ) private {
        if (map.liquidityFeeOnBuy != _liquidityFeeOnBuy) {
            emit ManualTaxChange(
                _liquidityFeeOnBuy,
                map.liquidityFeeOnBuy,
                "liquidityFeeOnBuy",
                map.periodName
            );
            map.liquidityFeeOnBuy = _liquidityFeeOnBuy;
        }
        if (map.marketingFeeOnBuy != _marketingFeeOnBuy) {
            emit ManualTaxChange(
                _marketingFeeOnBuy,
                map.marketingFeeOnBuy,
                "marketingFeeOnBuy",
                map.periodName
            );
            map.marketingFeeOnBuy = _marketingFeeOnBuy;
        }
        if (map.buyBackFeeOnBuy != _buyBackFeeOnBuy) {
            emit ManualTaxChange(
                _buyBackFeeOnBuy,
                map.buyBackFeeOnBuy,
                "buyBackFeeOnBuy",
                map.periodName
            );
            map.buyBackFeeOnBuy = _buyBackFeeOnBuy;
        }
        if (map.burnFeeOnBuy != _burnFeeOnBuy) {
            emit ManualTaxChange(
                _burnFeeOnBuy,
                map.burnFeeOnBuy,
                "burnFeeOnBuy",
                map.periodName
            );
            map.burnFeeOnBuy = _burnFeeOnBuy;
        }
        if (map.holdersFeeOnBuy != _holdersFeeOnBuy) {
            emit ManualTaxChange(
                _holdersFeeOnBuy,
                map.holdersFeeOnBuy,
                "holdersFeeOnBuy",
                map.periodName
            );
            map.holdersFeeOnBuy = _holdersFeeOnBuy;
        }
    }

    function _swapAndLiquify() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 initialETHBalance = address(this).balance;
        if (contractBalance > minimumTokensBeforeSwap * 7) {
            contractBalance = minimumTokensBeforeSwap * 7;
        }
        bool success;
        uint256 amountToLiquify = (contractBalance * _liquidityFee) /
            _totalFee /
            2;
        uint256 amountForHolders = (contractBalance * _holdersFee) / _totalFee;
        uint256 amountToSwap = contractBalance -
            (amountToLiquify + amountForHolders);

        _swapTokensForETH(amountToSwap);

        uint256 ETHBalanceAfterSwap = address(this).balance - initialETHBalance;
        uint256 totalETHFee = _totalFee -
            ((_liquidityFee / 2) + _burnFee + _holdersFee);
        uint256 amountETHLiquidity = (ETHBalanceAfterSwap * _liquidityFee) /
            totalETHFee /
            2;
        uint256 amountETHMarketing = (ETHBalanceAfterSwap * _marketingFee) /
            totalETHFee;
        uint256 amountETHBuyBack = ETHBalanceAfterSwap -
            (amountETHLiquidity + amountETHMarketing);

        (success, ) = address(teamWallet).call{value: amountETHBuyBack}("");
        require(success, "success!");
        (success, ) = address(marketingWallet).call{value: amountETHMarketing}(
            ""
        );
        require(success, "success!");

        if (amountToLiquify > 0) {
            _addLiquidity(amountToLiquify, amountETHLiquidity);
            emit SwapAndLiquify(
                amountToSwap,
                amountETHLiquidity,
                amountToLiquify
            );
        }

        bool succeed = IERC20(address(this)).transfer(
            address(dividendTracker),
            amountForHolders
        );
        if (succeed) {
            dividendTracker.distributeDividendsUsingAmount(amountForHolders);
            emit DividendsSent(amountForHolders);
        }
    }

    function _swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityWallet,
            block.timestamp
        );
    }

    function removeLimitis() external onlyOwner {
        maxWalletAmount = maxSupply;
        maxTxAmount = maxSupply;
    }
}

contract TokenDividendTracker is DividendPayingToken {
    using SafeMath for uint256;
    using SafeMathInt for int256;
    using IterableMapping for IterableMapping.Map;

    IterableMapping.Map private tokenHoldersMap;

    mapping(address => bool) public excludedFromDividends;
    mapping(address => uint256) public lastClaimTimes;
    uint256 public claimWait;
    uint256 public minimumTokenBalanceForDividends;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);
    event Claim(
        address indexed account,
        uint256 amount,
        bool indexed automatic
    );

    constructor()
        DividendPayingToken(
            "YDRToken_Dividend_Tracker",
            "YDRToken_Dividend_Tracker"
        )
    {
        claimWait = 3600;
        minimumTokenBalanceForDividends = 0 * (10 ** 18);
    }

    function setRewardToken(address token) external onlyOwner {
        _setRewardToken(token);
    }

    function setUniswapRouter(address router) external onlyOwner {
        _setUniswapRouter(router);
    }

    function _transfer(address, address, uint256) internal pure override {
        require(false, "YDRToken_Dividend_Tracker: No transfers allowed");
    }

    function excludeFromDividends(address account) external onlyOwner {
        require(!excludedFromDividends[account]);
        excludedFromDividends[account] = true;
        _setBalance(account, 0);
        tokenHoldersMap.remove(account);
        emit ExcludeFromDividends(account);
    }

    function setTokenBalanceForDividends(uint256 newValue) external onlyOwner {
        require(
            minimumTokenBalanceForDividends != newValue,
            "YDRToken_Dividend_Tracker: minimumTokenBalanceForDividends already the value of 'newValue'."
        );
        minimumTokenBalanceForDividends = newValue;
    }

    function getNumberOfTokenHolders() external view returns (uint256) {
        return tokenHoldersMap.keys.length;
    }

    function setBalance(
        address payable account,
        uint256 newBalance
    ) external onlyOwner {
        if (excludedFromDividends[account]) {
            return;
        }
        if (newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);
            tokenHoldersMap.set(account, newBalance);
        } else {
            _setBalance(account, 0);
            tokenHoldersMap.remove(account);
        }
        processDividends(account, true);
    }

    function processDividends(
        address payable account,
        bool automatic
    ) public onlyOwner returns (bool) {
        uint256 amount = _withdrawDividendOfUser(account);
        if (amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }
        return false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"AutomatedMarketMakerPairChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimPendingETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"}],"name":"DividendsSent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFeesChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxStructureChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromMaxTransferChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"identifier","type":"string"},{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"}],"name":"FeeChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"liquidityFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"marketingFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"buyBackFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"burnFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"holdersFee","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"totalFee","type":"uint8"}],"name":"FeesApplied","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":true,"internalType":"string","name":"taxType","type":"string"},{"indexed":false,"internalType":"bytes23","name":"period","type":"bytes23"}],"name":"ManualTaxChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxTransactionAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MaxWalletAmountChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountBeforeSwapChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"MinTokenAmountForDividendsChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"indentifier","type":"string"},{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"StructureChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"_burnFee","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"burnAmount","type":"uint256"}],"name":"TokenBurn","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UniswapV2RouterChange","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimPendingETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract TokenDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBaseBuyFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBaseSellFees","outputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfDividendTokenHolders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalRewardsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"removeLimitis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnBuy","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnBuy","type":"uint8"}],"name":"setBaseFeesOnBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_liquidityFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_marketingFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_buyBackFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_burnFeeOnSell","type":"uint8"},{"internalType":"uint8","name":"_holdersFeeOnSell","type":"uint8"}],"name":"setBaseFeesOnSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxTransactionAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokenBalanceForDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityWallet","type":"address"},{"internalType":"address","name":"newMarketingWallet","type":"address"},{"internalType":"address","name":"newTeamWallet","type":"address"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","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":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a0604052612710620000206b1027e72f1f1281308800000060dc62000d0a565b6200002c919062000d24565b6008556127106200004b6b1027e72f1f1281308800000060c862000d0a565b62000057919062000d24565b600955612710620000766b1027e72f1f12813088000000600362000d0a565b62000082919062000d24565b600b55604080516101a081018252636261736560e01b81526000602082018190529181018290526001606082018190526080820183905260a08201819052600260c083015260e08201839052610100820181905261012082018390526101408201819052610160820181905261018090910152600f80546001600160c01b031916636261736560981b1790556010556011805469010101000100020100016001600160501b03199091161790553480156200013c57600080fd5b506040518060400160405280600b81526020016a2cb4b2b63234b634bd32b960a91b815250604051806040016040528060038152602001622ca22960e91b81525060006200018f620009f360201b60201c565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506004620001e7838262000deb565b506005620001f6828262000deb565b505050604051620002079062000ce6565b604051809103906000f08015801562000224573d6000803e3d6000fd5b50600780546001600160a01b0319166001600160a01b03929092169182179055604051635f54c24f60e11b8152737a250d5630b4cf539739df2c5dacb4c659f2488d600482015263bea9849e90602401600060405180830381600087803b1580156200028f57600080fd5b505af1158015620002a4573d6000803e3d6000fd5b5050600754604051638aee812760e01b81523060048201526001600160a01b039091169250638aee81279150602401600060405180830381600087803b158015620002ee57600080fd5b505af115801562000303573d6000803e3d6000fd5b5050505062000317620009f760201b60201c565b600c80546001600160a01b03929092166001600160a01b0319928316179055600e805482167363ed01f0dfe1cbd3eb2631e9be998b40a211ba54179055600d805490911673cfe30a7db21f429db9c293e5b9b9b9ecf6470cc51790556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048083019260209291908290030181865afa158015620003c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ef919062000eb7565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200043d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000463919062000eb7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620004b1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d7919062000eb7565b600680546001600160a01b0319166001600160a01b0385811691909117909155811660805290506200050b81600162000a06565b600160136000620005246000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d54821681526013909352818320805485166001908117909155600e5482168452828420805486168217905530845282842080548616821790556007805483168552938390208054909516179093559054905163031e79db60e41b8152911660048201819052906331e79db090602401600060405180830381600087803b158015620005de57600080fd5b505af1158015620005f3573d6000803e3d6000fd5b505060075460405163031e79db60e41b81523060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200063d57600080fd5b505af115801562000652573d6000803e3d6000fd5b505060075460405163031e79db60e41b815261dead60048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b1580156200069e57600080fd5b505af1158015620006b3573d6000803e3d6000fd5b505060075460405163031e79db60e41b8152600060048201526001600160a01b0390911692506331e79db09150602401600060405180830381600087803b158015620006fe57600080fd5b505af115801562000713573d6000803e3d6000fd5b50506007546001600160a01b031691506331e79db090506200073d6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200077f57600080fd5b505af115801562000794573d6000803e3d6000fd5b505060075460405163031e79db60e41b81526001600160a01b03868116600483015290911692506331e79db09150602401600060405180830381600087803b158015620007e057600080fd5b505af1158015620007f5573d6000803e3d6000fd5b505050506001601260006200080f620009f760201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600754909116815260149283905281812080548516600190811790915530825291812080549094168217909355916200087e6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d548216815260148452828120805486166001908117909155600e54831682528382208054871682179055868316825260159485905283822080548716821790556007548316825283822080548716821790556006549092168152828120805486168317905530815291822080549094168117909355620009366000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600d54821681526015909352818320805485166001908117909155600e549091168352908220805484168217905561dead9091527f7ed1dca03d96f947ab02d66053f47073699eb6287021936c92f54972932767e58054909216179055620009eb620009d86000546001600160a01b031690565b6b1027e72f1f1281308800000062000b6e565b505062000ef8565b3390565b6000546001600160a01b031690565b6001600160a01b03821660009081526016602052604090205481151560ff90911615150362000aa25760405162461bcd60e51b815260206004820152603860248201527f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160448201527f6c72656164792073657420746f20746861742076616c7565000000000000000060648201526084015b60405180910390fd5b6001600160a01b0382166000908152601660205260409020805460ff1916821580159190911790915562000b325760075460405163031e79db60e41b81526001600160a01b038481166004830152909116906331e79db090602401600060405180830381600087803b15801562000b1857600080fd5b505af115801562000b2d573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fa666b9b2dc2c8f2d86fda7ba3a115be30d3a958fd84d359cbc6bc919df97990a90600090a35050565b6001600160a01b03821662000bc65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000a99565b62000be28160035462000c7a60201b62001c041790919060201c565b6003556001600160a01b03821660009081526001602090815260409091205462000c1791839062001c0462000c7a821b17901c565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9062000c699085815260200190565b60405180910390a35050565b505050565b60008062000c89838562000ee2565b90508381101562000cdd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640162000a99565b90505b92915050565b611e148062004db583390190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000ce05762000ce062000cf4565b60008262000d4257634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000d7257607f821691505b60208210810362000d9357634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000c7557600081815260208120601f850160051c8101602086101562000dc25750805b601f850160051c820191505b8181101562000de35782815560010162000dce565b505050505050565b81516001600160401b0381111562000e075762000e0762000d47565b62000e1f8162000e18845462000d5d565b8462000d99565b602080601f83116001811462000e57576000841562000e3e5750858301515b600019600386901b1c1916600185901b17855562000de3565b600085815260208120601f198616915b8281101562000e885788860151825594840194600190910190840162000e67565b508582101562000ea75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000eca57600080fd5b81516001600160a01b038116811462000cdd57600080fd5b8082018082111562000ce05762000ce062000cf4565b608051613e8c62000f2960003960008181610476015281816112260152818161138b01526114f00152613e8c6000f3fe6080604052600436106102765760003560e01c8063880bcbc11161014f578063aad3ec96116100c1578063d2d7ad831161007a578063d2d7ad83146107b7578063d3221576146107cd578063dd62ed3e146107ed578063e7c52d4414610833578063f2fde38b14610848578063fe0175351461086857600080fd5b8063aad3ec9614610696578063aee50b1e146106b6578063b1ba39ea146106d6578063b62496f5146106f6578063c024666814610726578063cd43e2281461074657600080fd5b80639dccf6f1116101135780639dccf6f1146105eb5780639fad968314610600578063a457c2d714610620578063a8b9d24014610640578063a9059cbb14610660578063aa4bde281461068057600080fd5b8063880bcbc1146105625780638c0b5e22146105825780638d0445ee146105985780638da5cb5b146105b857806395d89b41146105d657600080fd5b806331e79db0116101e857806364b0f653116101ac57806364b0f653146104b857806367c2c998146104cd5780636843cd84146104ed57806370a082311461050d578063715018a61461052d578063781edb3c1461054257600080fd5b806331e79db014610404578063395093511461042457806342966c681461044457806349bd5a5e146104645780635ebf4db91461049857600080fd5b80631e293c101161023a5780631e293c101461035157806323b872dd1461037357806327a14fc214610393578063293230b8146103b35780632c1f5216146103c8578063313ce567146103e857600080fd5b8063064a59d01461028257806306fdde03146102b8578063095ea7b3146102da5780631694505e146102fa57806318160ddd1461033257600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506007546102a390600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102c457600080fd5b506102cd6108ae565b6040516102af919061382f565b3480156102e657600080fd5b506102a36102f5366004613892565b610940565b34801561030657600080fd5b5060065461031a906001600160a01b031681565b6040516001600160a01b0390911681526020016102af565b34801561033e57600080fd5b506003545b6040519081526020016102af565b34801561035d57600080fd5b5061037161036c3660046138be565b610957565b005b34801561037f57600080fd5b506102a361038e3660046138d7565b610a50565b34801561039f57600080fd5b506103716103ae3660046138be565b610ab9565b3480156103bf57600080fd5b50610371610c0a565b3480156103d457600080fd5b5060075461031a906001600160a01b031681565b3480156103f457600080fd5b50604051601281526020016102af565b34801561041057600080fd5b5061037161041f366004613918565b610c49565b34801561043057600080fd5b506102a361043f366004613892565b610cd6565b34801561045057600080fd5b5061037161045f3660046138be565b610d0c565b34801561047057600080fd5b5061031a7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104a457600080fd5b506103716104b33660046138be565b610d19565b3480156104c457600080fd5b50610343610d74565b3480156104d957600080fd5b506103716104e83660046138be565b610de7565b3480156104f957600080fd5b50610343610508366004613918565b610f04565b34801561051957600080fd5b50610343610528366004613918565b610f74565b34801561053957600080fd5b50610371610f8f565b34801561054e57600080fd5b5061037161055d366004613943565b611003565b34801561056e57600080fd5b5061037161057d366004613943565b6110cd565b34801561058e57600080fd5b5061034360095481565b3480156105a457600080fd5b506103716105b336600461397c565b61118f565b3480156105c457600080fd5b506000546001600160a01b031661031a565b3480156105e257600080fd5b506102cd6115e8565b3480156105f757600080fd5b506103716115f7565b34801561060c57600080fd5b5061037161061b3660046139dd565b611638565b34801561062c57600080fd5b506102a361063b366004613892565b611760565b34801561064c57600080fd5b5061034361065b366004613918565b6117af565b34801561066c57600080fd5b506102a361067b366004613892565b6117e2565b34801561068c57600080fd5b5061034360085481565b3480156106a257600080fd5b506103716106b1366004613892565b6117ef565b3480156106c257600080fd5b506103716106d13660046138be565b6117f9565b3480156106e257600080fd5b506103716106f13660046139dd565b6118c3565b34801561070257600080fd5b506102a3610711366004613918565b60166020526000908152604090205460ff1681565b34801561073257600080fd5b50610371610741366004613943565b61198c565b34801561075257600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102af565b3480156107c357600080fd5b50610343600b5481565b3480156107d957600080fd5b506103716107e8366004613943565b611a4e565b3480156107f957600080fd5b50610343610808366004613a42565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561083f57600080fd5b50610343611ad0565b34801561085457600080fd5b50610371610863366004613918565b611b1a565b34801561087457600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b90910416610783565b6060600480546108bd90613a70565b80601f01602080910402602001604051908101604052809291908181526020018280546108e990613a70565b80156109365780601f1061090b57610100808354040283529160200191610936565b820191906000526020600020905b81548152906001019060200180831161091957829003601f168201915b5050505050905090565b600061094d338484611c6a565b5060015b92915050565b6000546001600160a01b0316331461098a5760405162461bcd60e51b815260040161098190613aaa565b60405180910390fd5b670de0b6b3a76400006103e861099f60035490565b6109aa906002613af5565b6109b49190613b22565b6109be9190613b22565b811015610a1d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b6064820152608401610981565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610a5d848484611d8f565b610aaf8433610aaa85604051806060016040528060288152602001613e0a602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190612329565b611c6a565b5060019392505050565b6000546001600160a01b03163314610ae35760405162461bcd60e51b815260040161098190613aaa565b670de0b6b3a76400006103e8610af860035490565b610b03906014613af5565b610b0d9190613b22565b610b179190613b22565b811015610b725760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b6064820152608401610981565b6008548103610bd75760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610981565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000546001600160a01b03163314610c345760405162461bcd60e51b815260040161098190613aaa565b6007805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610c735760405162461bcd60e51b815260040161098190613aaa565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610cbb57600080fd5b505af1158015610ccf573d6000803e3d6000fd5b5050505050565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161094d918590610aaa9086611c04565b610d163382612363565b50565b6000546001600160a01b03163314610d435760405162461bcd60e51b815260040161098190613aaa565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610ca1565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de29190613b36565b905090565b6000546001600160a01b03163314610e115760405162461bcd60e51b815260040161098190613aaa565b478110610e6f5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610981565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610ebc576040519150601f19603f3d011682016040523d82523d6000602084013e610ec1565b606091505b505090508015610f00576040518281527f848b39dfef0f44053e441e7fad749cf07535df460e6b67ff62a4e73666d5d9fd906020015b60405180910390a15b5050565b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015610f50573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109519190613b36565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314610fb95760405162461bcd60e51b815260040161098190613aaa565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461102d5760405162461bcd60e51b815260040161098190613aaa565b6001600160a01b03821660009081526015602052604090205481151560ff90911615150361106d5760405162461bcd60e51b815260040161098190613b4f565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b031633146110f75760405162461bcd60e51b815260040161098190613aaa565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036111375760405162461bcd60e51b815260040161098190613b4f565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a4091016110c1565b6000546001600160a01b031633146111b95760405162461bcd60e51b815260040161098190613aaa565b600c546001600160a01b0384811691161461131e576001600160a01b0383166112245760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610981565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036112a55760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610981565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b03838116911614611483576001600160a01b0382166113895760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610981565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361140a5760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610981565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b038281169116146115e3576001600160a01b0381166114ee5760405162461bcd60e51b815260206004820152601a60248201527f546865207465616d57616c6c65742063616e6e6f7420626520300000000000006044820152606401610981565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03160361156f5760405162461bcd60e51b815260206004820152601a60248201527f546865207465616d57616c6c65742063616e6e6f7420626520300000000000006044820152606401610981565b600e54604051691d19585b55d85b1b195d60b21b81526001600160a01b0391821691831690600a01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600e80546001600160a01b0319166001600160a01b0383161790555b505050565b6060600580546108bd90613a70565b6000546001600160a01b031633146116215760405162461bcd60e51b815260040161098190613aaa565b6b1027e72f1f128130880000006008819055600955565b6000546001600160a01b031633146116625760405162461bcd60e51b815260040161098190613aaa565b80828461166f8789613b99565b6116799190613b99565b6116839190613b99565b61168d9190613b99565b60ff166005116116d35760405162461bcd60e51b81526020600482015260116024820152706d6178206275792066656520697320342560781b6044820152606401610981565b6116e2600f868686868661246e565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b600061094d3384610aaa85604051806060016040528060258152602001613e32602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190612329565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401610f33565b600061094d338484611d8f565b610f008282612753565b6000546001600160a01b031633146118235760405162461bcd60e51b815260040161098190613aaa565b600b5481036118905760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610981565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b031633146118ed5760405162461bcd60e51b815260040161098190613aaa565b8082846118fa8789613b99565b6119049190613b99565b61190e9190613b99565b6119189190613b99565b60ff1660061161195f5760405162461bcd60e51b81526020600482015260126024820152716d61782073656c6c2066656520697320352560701b6044820152606401610981565b61196e600f86868686866128db565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d016116fb565b6000546001600160a01b031633146119b65760405162461bcd60e51b815260040161098190613aaa565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036119f65760405162461bcd60e51b815260040161098190613b4f565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b91016110c1565b6000546001600160a01b03163314611a785760405162461bcd60e51b815260040161098190613aaa565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d35091016110c1565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610dbe573d6000803e3d6000fd5b6000546001600160a01b03163314611b445760405162461bcd60e51b815260040161098190613aaa565b6001600160a01b038116611ba95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610981565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611c118385613bb2565b905083811015611c635760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610981565b9392505050565b6001600160a01b038316611ccc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610981565b6001600160a01b038216611d2d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610981565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611db55760405162461bcd60e51b815260040161098190613bc5565b6001600160a01b038216611ddb5760405162461bcd60e51b815260040161098190613c0a565b80600003611def576115e383836000612bdc565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611e5157506001600160a01b03841660009081526012602052604090205460ff16155b15611ff857600754600160a01b900460ff16611eaf5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610981565b6001600160a01b03841660009081526014602052604090205460ff16158015611ef157506001600160a01b03851660009081526014602052604090205460ff16155b15611f5757600954831115611f575760405162461bcd60e51b815260206004820152602660248201527f42757920616d6f756e74206578636565647320746865206d617854784275794160448201526536b7bab73a1760d11b6064820152608401610981565b6001600160a01b03841660009081526015602052604090205460ff16611ff85760085483611f8486610f74565b611f8e9190613bb2565b1115611ff85760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b6064820152608401610981565b6120028282612ce8565b6000600b5461201030610f74565b6007549111159150600160a01b900460ff16801561202b5750805b801561203a5750600a5460ff16155b80156120515750601754600160281b900460ff1615155b801561207557506001600160a01b03851660009081526016602052604090205460ff165b801561209a57506001600160a01b03861660009081526013602052604090205460ff16155b80156120bf57506001600160a01b03851660009081526013602052604090205460ff16155b156120e457600a805460ff191660011790556120d9612f60565b600a805460ff191690555b600a5460009060ff161580156121035750600754600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff168061214557506001600160a01b03861660009081526013602052604090205460ff165b1561214e575060005b8080156121665750601754600160281b900460ff1615155b1561222f5760175460009060649061218890600160281b900460ff1688613af5565b6121929190613b22565b6017549091506000906064906121b2906301000000900460ff1689613af5565b6121bc9190613b22565b90506121c88288613c4d565b96506121d5893084612bdc565b801561222c576121e53082612363565b60175460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b61223a878787612bdc565b6007546001600160a01b031663e30443bc8861225581610f74565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561229b57600080fd5b505af19250505080156122ac575060015b506007546001600160a01b031663e30443bc876122c881610f74565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561230e57600080fd5b505af192505050801561231f575060015b5050505050505050565b6000818484111561234d5760405162461bcd60e51b8152600401610981919061382f565b50600061235a8486613c4d565b95945050505050565b6001600160a01b0382166123c35760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610981565b61240081604051806060016040528060228152602001613da2602291396001600160a01b0385166000908152600160205260409020549190612329565b6001600160a01b038316600090815260016020526040902055600354612426908261338d565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600286015460ff8681169116146124ef57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020613dea833981519152916124d59160481b90613c60565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff85811662010000909204161461258357604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020613dea833981519152916125629160481b90613c60565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b909204161461261a576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020613dea833981519152916125f69160481b90613c60565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b90920416146126b0576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028801548854919260ff600160301b90920482169291861691600080516020613dea8339815191529161268a9160481b90613c60565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b909204161461274b576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020613dea833981519152916127239160481b90613c60565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b61275d82826133cf565b1561286657600a805460ff191660011790556007546040516302a2e74960e61b81523360048201526000916001600160a01b03169063a8b9d24090602401602060405180830381865afa1580156127b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dc9190613b36565b1115610f005760075460405163497ba70f60e11b8152336004820152600060248201526001600160a01b03909116906392f74e1e906044016020604051808303816000875af1158015612833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128579190613c77565b50600a805460ff191690555050565b60075460405163497ba70f60e11b8152336004820152600060248201526001600160a01b03909116906392f74e1e906044016020604051808303816000875af11580156128b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e39190613c77565b600286015460ff868116610100909204161461296c57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff61010090920482169291891691600080516020613dea8339815191529161294d9160481b90613c60565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff85811663010000009092041614612a0557604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff630100000090920482169291881691600080516020613dea833981519152916129e29160481b90613c60565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612a9e576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020613dea83398151915291612a799160481b90613c60565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612b36576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020613dea83398151915291612b0f9160481b90613c60565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b909204161461274b576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020613dea83398151915291612baa9160481b90613c60565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b6001600160a01b038316612c025760405162461bcd60e51b815260040161098190613bc5565b6001600160a01b038216612c285760405162461bcd60e51b815260040161098190613c0a565b612c6581604051806060016040528060268152602001613dc4602691396001600160a01b0386166000908152600160205260409020549190612329565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612c949082611c04565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d829085815260200190565b6017805464ffffffffff191690558115612d70576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b8015612deb576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b80158015612df7575081155b15612e71576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b60175460ff600160201b820481169163010000008104821691620100008204811691612ea591610100820481169116613b99565b612eaf9190613b99565b612eb99190613b99565b612ec39190613b99565b6017805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c001610ef7565b6000612f6b30610f74565b600b549091504790612f7e906007613af5565b821115612f9657600b54612f93906007613af5565b91505b601754600090819060029060ff600160281b8204811691612fb8911687613af5565b612fc29190613b22565b612fcc9190613b22565b60175490915060009060ff600160281b8204811691612ff491600160201b9091041687613af5565b612ffe9190613b22565b9050600061300c8284613bb2565b6130169087613c4d565b905061302181613630565b600061302d8647613c4d565b60175490915060009060ff600160201b8204811691630100000081048216916130599160029116613c94565b6130639190613b99565b61306d9190613b99565b6017546130849190600160281b900460ff16613cb6565b60175460ff918216925060009160029184916130a1911686613af5565b6130ab9190613b22565b6130b59190613b22565b60175490915060009083906130d290610100900460ff1686613af5565b6130dc9190613b22565b905060006130ea8284613bb2565b6130f49086613c4d565b600e546040519192506001600160a01b0316908290600081818185875af1925050503d8060008114613142576040519150601f19603f3d011682016040523d82523d6000602084013e613147565b606091505b505080995050886131855760405162461bcd60e51b8152602060048201526008602482015267737563636573732160c01b6044820152606401610981565b600d546040516001600160a01b03909116908390600081818185875af1925050503d80600081146131d2576040519150601f19603f3d011682016040523d82523d6000602084013e6131d7565b606091505b505080995050886132155760405162461bcd60e51b8152602060048201526008602482015267737563636573732160c01b6044820152606401610981565b8715613267576132258884613782565b60408051878152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101889052600090309063a9059cbb906044016020604051808303816000875af11580156132bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132df9190613c77565b9050801561337f57600754604051636bf5ecd560e01b8152600481018a90526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b15801561332d57600080fd5b505af1158015613341573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9698860405161337691815260200190565b60405180910390a15b505050505050505050505050565b6000611c6383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612329565b600754604051634e7b827f60e01b815233600482015260009182916001600160a01b0390911690634e7b827f90602401602060405180830381865afa15801561341c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134409190613c77565b61356e57601754600160281b900460ff16156134c85760175460009060649061347390600160281b900460ff1686613af5565b61347d9190613b22565b60175490915060009060649061349d906301000000900460ff1687613af5565b6134a79190613b22565b90506134b38286613c4d565b945080156134c5576134c53382612363565b50505b60006134d330610f74565b60175490915060009060029060ff600160281b82048116916134f6911685613af5565b6135009190613b22565b61350a9190613b22565b60175490915060009060ff600160281b820481169161353291600160201b9091041685613af5565b61353c9190613b22565b9050600061354a8284613bb2565b6135549085613c4d565b9050801561356157600194505b8495505050505050610951565b600061357930610f74565b111561358d576135898484612363565b5060005b600061359830610f74565b60175490915060009060029060ff600160281b82048116916135bb911685613af5565b6135c59190613b22565b6135cf9190613b22565b60175490915060009060ff600160281b82048116916135f791600160201b9091041685613af5565b6136019190613b22565b9050600061360f8284613bb2565b6136199085613c4d565b905080156135615750600094506109519350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061366557613665613ccf565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156136be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e29190613ce5565b816001815181106136f5576136f5613ccf565b6001600160a01b03928316602091820292909201015260065461371b9130911684611c6a565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790613754908590600090869030904290600401613d02565b600060405180830381600087803b15801561376e57600080fd5b505af115801561274b573d6000803e3d6000fd5b60065461379a9030906001600160a01b031684611c6a565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561380a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ccf9190613d73565b600060208083528351808285015260005b8181101561385c57858101830151858201604001528201613840565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d1657600080fd5b600080604083850312156138a557600080fd5b82356138b08161387d565b946020939093013593505050565b6000602082840312156138d057600080fd5b5035919050565b6000806000606084860312156138ec57600080fd5b83356138f78161387d565b925060208401356139078161387d565b929592945050506040919091013590565b60006020828403121561392a57600080fd5b8135611c638161387d565b8015158114610d1657600080fd5b6000806040838503121561395657600080fd5b82356139618161387d565b9150602083013561397181613935565b809150509250929050565b60008060006060848603121561399157600080fd5b833561399c8161387d565b925060208401356139ac8161387d565b915060408401356139bc8161387d565b809150509250925092565b803560ff811681146139d857600080fd5b919050565b600080600080600060a086880312156139f557600080fd5b6139fe866139c7565b9450613a0c602087016139c7565b9350613a1a604087016139c7565b9250613a28606087016139c7565b9150613a36608087016139c7565b90509295509295909350565b60008060408385031215613a5557600080fd5b8235613a608161387d565b915060208301356139718161387d565b600181811c90821680613a8457607f821691505b602082108103613aa457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761095157610951613adf565b634e487b7160e01b600052601260045260246000fd5b600082613b3157613b31613b0c565b500490565b600060208284031215613b4857600080fd5b5051919050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b60ff818116838216019081111561095157610951613adf565b8082018082111561095157610951613adf565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561095157610951613adf565b68ffffffffffffffffff1991909116815260200190565b600060208284031215613c8957600080fd5b8151611c6381613935565b600060ff831680613ca757613ca7613b0c565b8060ff84160491505092915050565b60ff828116828216039081111561095157610951613adf565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613cf757600080fd5b8151611c638161387d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613d525784516001600160a01b031683529383019391830191600101613d2d565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613d8857600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636560975576d19e213edd380779de3d98d124954af135afba9d505729832b9384e445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e1fa20ba2226982272051b3f1a2a0fc0573d99cbc4968b9ff666fa128c05ddeb64736f6c6343000812003360806040523480156200001157600080fd5b5060408051808201825260198082527f594452546f6b656e5f4469766964656e645f547261636b6572000000000000006020808401829052845180860190955291845290830152908181600362000069838262000197565b50600462000078828262000197565b50505060006200008d620000ee60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35050610e1060125550600060135562000263565b3390565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200011d57607f821691505b6020821081036200013e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200019257600081815260208120601f850160051c810160208610156200016d5750805b601f850160051c820191505b818110156200018e5782815560010162000179565b5050505b505050565b81516001600160401b03811115620001b357620001b3620000f2565b620001cb81620001c4845462000108565b8462000144565b602080601f831160018114620002035760008415620001ea5750858301515b600019600386901b1c1916600185901b1785556200018e565b600085815260208120601f198616915b82811015620002345788860151825594840194600190910190840162000213565b5085821015620002535787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b611ba180620002736000396000f3fe6080604052600436106101fd5760003560e01c806385a6b3ae1161010d578063a9059cbb116100a0578063bea9849e1161006f578063bea9849e146105d6578063dd62ed3e146105f6578063e30443bc1461063c578063f2fde38b1461065c578063f7c618c11461067c57600080fd5b8063a9059cbb1461054a578063aafd847a1461056a578063ac7218dc146105a0578063be10b614146105c057600080fd5b806392f74e1e116100dc57806392f74e1e146104d557806395d89b41146104f5578063a457c2d71461050a578063a8b9d2401461052a57600080fd5b806385a6b3ae146104615780638aee8127146104775780638da5cb5b1461049757806391b89fba146104b557600080fd5b8063313ce567116101905780636a4740021161015f5780636a474002146103cb5780636bf5ecd5146103e05780636f2789ec1461040057806370a0823114610416578063715018a61461044c57600080fd5b8063313ce5671461033f57806331e79db01461035b578063395093511461037b5780634e7b827f1461039b57600080fd5b80631694505e116101cc5780631694505e146102a557806318160ddd146102dd578063226cfa3d146102f257806323b872dd1461031f57600080fd5b806306fdde0314610209578063095ea7b31461023457806309bbedde14610264578063163c7cef1461028357600080fd5b3661020457005b600080fd5b34801561021557600080fd5b5061021e61069c565b60405161022b9190611838565b60405180910390f35b34801561024057600080fd5b5061025461024f36600461189b565b61072e565b604051901515815260200161022b565b34801561027057600080fd5b50600c545b60405190815260200161022b565b34801561028f57600080fd5b506102a361029e3660046118c7565b610745565b005b3480156102b157600080fd5b506009546102c5906001600160a01b031681565b6040516001600160a01b03909116815260200161022b565b3480156102e957600080fd5b50600254610275565b3480156102fe57600080fd5b5061027561030d3660046118e0565b60116020526000908152604090205481565b34801561032b57600080fd5b5061025461033a3660046118fd565b61081a565b34801561034b57600080fd5b506040516012815260200161022b565b34801561036757600080fd5b506102a36103763660046118e0565b610883565b34801561038757600080fd5b5061025461039636600461189b565b6109aa565b3480156103a757600080fd5b506102546103b63660046118e0565b60106020526000908152604090205460ff1681565b3480156103d757600080fd5b506102a36109e0565b3480156103ec57600080fd5b506102a36103fb3660046118c7565b610a16565b34801561040c57600080fd5b5061027560125481565b34801561042257600080fd5b506102756104313660046118e0565b6001600160a01b031660009081526020819052604090205490565b34801561045857600080fd5b506102a3610af2565b34801561046d57600080fd5b5061027560075481565b34801561048357600080fd5b506102a36104923660046118e0565b610b66565b3480156104a357600080fd5b506005546001600160a01b03166102c5565b3480156104c157600080fd5b506102756104d03660046118e0565b610b99565b3480156104e157600080fd5b506102546104f036600461194c565b610ba4565b34801561050157600080fd5b5061021e610c52565b34801561051657600080fd5b5061025461052536600461189b565b610c61565b34801561053657600080fd5b506102756105453660046118e0565b610cb0565b34801561055657600080fd5b5061025461056536600461189b565b610cdc565b34801561057657600080fd5b506102756105853660046118e0565b6001600160a01b03166000908152600b602052604090205490565b3480156105ac57600080fd5b506102756105bb3660046118e0565b610ce9565b3480156105cc57600080fd5b5061027560135481565b3480156105e257600080fd5b506102a36105f13660046118e0565b610d45565b34801561060257600080fd5b50610275610611366004611985565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561064857600080fd5b506102a361065736600461189b565b610d78565b34801561066857600080fd5b506102a36106773660046118e0565b610ee0565b34801561068857600080fd5b506008546102c5906001600160a01b031681565b6060600380546106ab906119b3565b80601f01602080910402602001604051908101604052809291908181526020018280546106d7906119b3565b80156107245780601f106106f957610100808354040283529160200191610724565b820191906000526020600020905b81548152906001019060200180831161070757829003601f168201915b5050505050905090565b600061073b338484610fcb565b5060015b92915050565b6005546001600160a01b031633146107785760405162461bcd60e51b815260040161076f906119ed565b60405180910390fd5b80601354036108155760405162461bcd60e51b815260206004820152605b60248201527f594452546f6b656e5f4469766964656e645f547261636b65723a206d696e696d60448201527f756d546f6b656e42616c616e6365466f724469766964656e647320616c72656160648201527f6479207468652076616c7565206f6620276e657756616c7565272e0000000000608482015260a40161076f565b601355565b60006108278484846110ef565b610879843361087485604051806060016040528060288152602001611b1f602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061114f565b610fcb565b5060019392505050565b6005546001600160a01b031633146108ad5760405162461bcd60e51b815260040161076f906119ed565b6001600160a01b03811660009081526010602052604090205460ff16156108d357600080fd5b6001600160a01b0381166000908152601060205260408120805460ff19166001179055610901908290611189565b60405163131836e760e21b8152600c60048201526001600160a01b038216602482015273c347a57f15a259316eefc32570616d87eb8b139390634c60db9c9060440160006040518083038186803b15801561095b57600080fd5b505af415801561096f573d6000803e3d6000fd5b50506040516001600160a01b03841692507fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b259150600090a250565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909161073b91859061087490866111e8565b6005546001600160a01b03163314610a0a5760405162461bcd60e51b815260040161076f906119ed565b610a133361124e565b50565b6005546001600160a01b03163314610a405760405162461bcd60e51b815260040161076f906119ed565b6000610a4b60025490565b11610a5557600080fd5b6000610a614783611a38565b90506000610a6f8284611a4f565b90508015610aed57610aa4610a8360025490565b610a9183600160801b6113b3565b610a9b9190611a62565b600654906111e8565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600754610ae990826111e8565b6007555b505050565b6005546001600160a01b03163314610b1c5760405162461bcd60e51b815260040161076f906119ed565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610b905760405162461bcd60e51b815260040161076f906119ed565b610a1381611435565b600061073f82610cb0565b6005546000906001600160a01b03163314610bd15760405162461bcd60e51b815260040161076f906119ed565b6000610bdc8461124e565b90508015610c48576001600160a01b038416600081815260116020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610c369085815260200190565b60405180910390a3600191505061073f565b5060009392505050565b6060600480546106ab906119b3565b600061073b338461087485604051806060016040528060258152602001611b47602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061114f565b6001600160a01b0381166000908152600b602052604081205461073f90610cd684610ce9565b90611481565b600061073b3384846110ef565b6001600160a01b0381166000908152600a602090815260408083205491839052822054600654600160801b92610d3b92610d3692610d3091610d2b91906113b3565b6114c3565b906114d3565b611511565b61073f9190611a62565b6005546001600160a01b03163314610d6f5760405162461bcd60e51b815260040161076f906119ed565b610a1381611524565b6005546001600160a01b03163314610da25760405162461bcd60e51b815260040161076f906119ed565b6001600160a01b03821660009081526010602052604090205460ff16610edc576013548110610e5357610dd58282611189565b604051632f0ad01760e21b8152600c60048201526001600160a01b03831660248201526044810182905273c347a57f15a259316eefc32570616d87eb8b13939063bc2b405c9060640160006040518083038186803b158015610e3657600080fd5b505af4158015610e4a573d6000803e3d6000fd5b50505050610ed1565b610e5e826000611189565b60405163131836e760e21b8152600c60048201526001600160a01b038316602482015273c347a57f15a259316eefc32570616d87eb8b139390634c60db9c9060440160006040518083038186803b158015610eb857600080fd5b505af4158015610ecc573d6000803e3d6000fd5b505050505b610aed826001610ba4565b5050565b6005546001600160a01b03163314610f0a5760405162461bcd60e51b815260040161076f906119ed565b6001600160a01b038116610f6f5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161076f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661102d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161076f565b6001600160a01b03821661108e5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161076f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405162461bcd60e51b815260206004820152602f60248201527f594452546f6b656e5f4469766964656e645f547261636b65723a204e6f20747260448201526e185b9cd9995c9cc8185b1b1bddd959608a1b606482015260840161076f565b600081848411156111735760405162461bcd60e51b815260040161076f9190611838565b5060006111808486611a4f565b95945050505050565b6001600160a01b038216600090815260208190526040902054808211156111c85760006111b68383611481565b90506111c28482611570565b50505050565b80821015610aed5760006111dc8284611481565b90506111c284826115d4565b6000806111f58385611a84565b9050838110156112475760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161076f565b9392505050565b60008061125a83610cb0565b905080156113aa576001600160a01b0383166000908152600b602052604090205461128590826111e8565b6001600160a01b0384166000818152600b6020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906112d49084815260200190565b60405180910390a260085460405163a9059cbb60e01b81526001600160a01b03858116600483015260248201849052600092169063a9059cbb906044016020604051808303816000875af1158015611330573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113549190611a97565b9050806113a3576001600160a01b0384166000908152600b602052604090205461137e9083611481565b6001600160a01b039094166000908152600b6020526040812094909455509192915050565b5092915050565b50600092915050565b6000826000036113c55750600061073f565b60006113d18385611a38565b9050826113de8583611a62565b146112475760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840161076f565b6005546001600160a01b0316331461145f5760405162461bcd60e51b815260040161076f906119ed565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b600061124783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061114f565b6000818181121561073f57600080fd5b6000806114e08385611ab4565b9050600083121580156114f35750838112155b80611508575060008312801561150857508381125b61124757600080fd5b60008082121561152057600080fd5b5090565b6005546001600160a01b0316331461154e5760405162461bcd60e51b815260040161076f906119ed565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b61157a8282611618565b6115b4611595610d2b836006546113b390919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906116f7565b6001600160a01b039092166000908152600a602052604090209190915550565b6115de8282611734565b6115b46115f9610d2b836006546113b390919063ffffffff16565b6001600160a01b0384166000908152600a6020526040902054906114d3565b6001600160a01b03821661166e5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161076f565b60025461167b90826111e8565b6002556001600160a01b0382166000908152602081905260409020546116a190826111e8565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a35050565b6000806117048385611adc565b9050600083121580156117175750838113155b806115085750600083128015611508575083811361124757600080fd5b6001600160a01b0382166117945760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161076f565b6117d181604051806060016040528060228152602001611afd602291396001600160a01b038516600090815260208190526040902054919061114f565b6001600160a01b0383166000908152602081905260409020556002546117f79082611481565b6002556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016116eb565b600060208083528351808285015260005b8181101561186557858101830151858201604001528201611849565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a1357600080fd5b600080604083850312156118ae57600080fd5b82356118b981611886565b946020939093013593505050565b6000602082840312156118d957600080fd5b5035919050565b6000602082840312156118f257600080fd5b813561124781611886565b60008060006060848603121561191257600080fd5b833561191d81611886565b9250602084013561192d81611886565b929592945050506040919091013590565b8015158114610a1357600080fd5b6000806040838503121561195f57600080fd5b823561196a81611886565b9150602083013561197a8161193e565b809150509250929050565b6000806040838503121561199857600080fd5b82356119a381611886565b9150602083013561197a81611886565b600181811c908216806119c757607f821691505b6020821081036119e757634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761073f5761073f611a22565b8181038181111561073f5761073f611a22565b600082611a7f57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561073f5761073f611a22565b600060208284031215611aa957600080fd5b81516112478161193e565b8082018281126000831280158216821582161715611ad457611ad4611a22565b505092915050565b81810360008312801583831316838312821617156113a3576113a3611a2256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203463b6adb0f5bf100b1da9fd0dbdc7128ee6a8783918d4f3b161464e1283f5ca64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102765760003560e01c8063880bcbc11161014f578063aad3ec96116100c1578063d2d7ad831161007a578063d2d7ad83146107b7578063d3221576146107cd578063dd62ed3e146107ed578063e7c52d4414610833578063f2fde38b14610848578063fe0175351461086857600080fd5b8063aad3ec9614610696578063aee50b1e146106b6578063b1ba39ea146106d6578063b62496f5146106f6578063c024666814610726578063cd43e2281461074657600080fd5b80639dccf6f1116101135780639dccf6f1146105eb5780639fad968314610600578063a457c2d714610620578063a8b9d24014610640578063a9059cbb14610660578063aa4bde281461068057600080fd5b8063880bcbc1146105625780638c0b5e22146105825780638d0445ee146105985780638da5cb5b146105b857806395d89b41146105d657600080fd5b806331e79db0116101e857806364b0f653116101ac57806364b0f653146104b857806367c2c998146104cd5780636843cd84146104ed57806370a082311461050d578063715018a61461052d578063781edb3c1461054257600080fd5b806331e79db014610404578063395093511461042457806342966c681461044457806349bd5a5e146104645780635ebf4db91461049857600080fd5b80631e293c101161023a5780631e293c101461035157806323b872dd1461037357806327a14fc214610393578063293230b8146103b35780632c1f5216146103c8578063313ce567146103e857600080fd5b8063064a59d01461028257806306fdde03146102b8578063095ea7b3146102da5780631694505e146102fa57806318160ddd1461033257600080fd5b3661027d57005b600080fd5b34801561028e57600080fd5b506007546102a390600160a01b900460ff1681565b60405190151581526020015b60405180910390f35b3480156102c457600080fd5b506102cd6108ae565b6040516102af919061382f565b3480156102e657600080fd5b506102a36102f5366004613892565b610940565b34801561030657600080fd5b5060065461031a906001600160a01b031681565b6040516001600160a01b0390911681526020016102af565b34801561033e57600080fd5b506003545b6040519081526020016102af565b34801561035d57600080fd5b5061037161036c3660046138be565b610957565b005b34801561037f57600080fd5b506102a361038e3660046138d7565b610a50565b34801561039f57600080fd5b506103716103ae3660046138be565b610ab9565b3480156103bf57600080fd5b50610371610c0a565b3480156103d457600080fd5b5060075461031a906001600160a01b031681565b3480156103f457600080fd5b50604051601281526020016102af565b34801561041057600080fd5b5061037161041f366004613918565b610c49565b34801561043057600080fd5b506102a361043f366004613892565b610cd6565b34801561045057600080fd5b5061037161045f3660046138be565b610d0c565b34801561047057600080fd5b5061031a7f000000000000000000000000c35ca88cdb6f66199ab7de6637ae7d71c06975e081565b3480156104a457600080fd5b506103716104b33660046138be565b610d19565b3480156104c457600080fd5b50610343610d74565b3480156104d957600080fd5b506103716104e83660046138be565b610de7565b3480156104f957600080fd5b50610343610508366004613918565b610f04565b34801561051957600080fd5b50610343610528366004613918565b610f74565b34801561053957600080fd5b50610371610f8f565b34801561054e57600080fd5b5061037161055d366004613943565b611003565b34801561056e57600080fd5b5061037161057d366004613943565b6110cd565b34801561058e57600080fd5b5061034360095481565b3480156105a457600080fd5b506103716105b336600461397c565b61118f565b3480156105c457600080fd5b506000546001600160a01b031661031a565b3480156105e257600080fd5b506102cd6115e8565b3480156105f757600080fd5b506103716115f7565b34801561060c57600080fd5b5061037161061b3660046139dd565b611638565b34801561062c57600080fd5b506102a361063b366004613892565b611760565b34801561064c57600080fd5b5061034361065b366004613918565b6117af565b34801561066c57600080fd5b506102a361067b366004613892565b6117e2565b34801561068c57600080fd5b5061034360085481565b3480156106a257600080fd5b506103716106b1366004613892565b6117ef565b3480156106c257600080fd5b506103716106d13660046138be565b6117f9565b3480156106e257600080fd5b506103716106f13660046139dd565b6118c3565b34801561070257600080fd5b506102a3610711366004613918565b60166020526000908152604090205460ff1681565b34801561073257600080fd5b50610371610741366004613943565b61198c565b34801561075257600080fd5b5060115460ff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b909104165b6040805160ff968716815294861660208601529285169284019290925283166060830152909116608082015260a0016102af565b3480156107c357600080fd5b50610343600b5481565b3480156107d957600080fd5b506103716107e8366004613943565b611a4e565b3480156107f957600080fd5b50610343610808366004613a42565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561083f57600080fd5b50610343611ad0565b34801561085457600080fd5b50610371610863366004613918565b611b1a565b34801561087457600080fd5b5060115460ff610100820481169163010000008104821691600160281b8204811691600160381b8104821691600160481b90910416610783565b6060600480546108bd90613a70565b80601f01602080910402602001604051908101604052809291908181526020018280546108e990613a70565b80156109365780601f1061090b57610100808354040283529160200191610936565b820191906000526020600020905b81548152906001019060200180831161091957829003601f168201915b5050505050905090565b600061094d338484611c6a565b5060015b92915050565b6000546001600160a01b0316331461098a5760405162461bcd60e51b815260040161098190613aaa565b60405180910390fd5b670de0b6b3a76400006103e861099f60035490565b6109aa906002613af5565b6109b49190613b22565b6109be9190613b22565b811015610a1d5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d6178547820416d6f756e74206c6f776572207468604482015266616e20302e322560c81b6064820152608401610981565b60095460405182907f75f1c17bf623f0f7a2bd91ba61e89dff216960370e3e9a46b250750d03e4215e90600090a3600955565b6000610a5d848484611d8f565b610aaf8433610aaa85604051806060016040528060288152602001613e0a602891396001600160a01b038a1660009081526002602090815260408083203384529091529020549190612329565b611c6a565b5060019392505050565b6000546001600160a01b03163314610ae35760405162461bcd60e51b815260040161098190613aaa565b670de0b6b3a76400006103e8610af860035490565b610b03906014613af5565b610b0d9190613b22565b610b179190613b22565b811015610b725760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e322560e01b6064820152608401610981565b6008548103610bd75760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420757064617465206d617857616c6c6574416d6f756e7420746f60448201526a2073616d652076616c756560a81b6064820152608401610981565b60085460405182907f6d3e257c59a11116c3e97bb144abf5ba1a6a9da6bd509192ecf0d48f7be1fc7690600090a3600855565b6000546001600160a01b03163314610c345760405162461bcd60e51b815260040161098190613aaa565b6007805460ff60a01b1916600160a01b179055565b6000546001600160a01b03163314610c735760405162461bcd60e51b815260040161098190613aaa565b60075460405163031e79db60e41b81526001600160a01b038381166004830152909116906331e79db0906024015b600060405180830381600087803b158015610cbb57600080fd5b505af1158015610ccf573d6000803e3d6000fd5b5050505050565b3360008181526002602090815260408083206001600160a01b0387168452909152812054909161094d918590610aaa9086611c04565b610d163382612363565b50565b6000546001600160a01b03163314610d435760405162461bcd60e51b815260040161098190613aaa565b60075460405163163c7cef60e01b8152600481018390526001600160a01b039091169063163c7cef90602401610ca1565b600754604080516304ddf6ef60e11b815290516000926001600160a01b0316916309bbedde9160048083019260209291908290030181865afa158015610dbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de29190613b36565b905090565b6000546001600160a01b03163314610e115760405162461bcd60e51b815260040161098190613aaa565b478110610e6f5760405162461bcd60e51b815260206004820152602660248201527f43616e6e6f742073656e64206d6f7265207468616e20636f6e74726163742062604482015265616c616e636560d01b6064820152608401610981565b600080546040516001600160a01b039091169083908381818185875af1925050503d8060008114610ebc576040519150601f19603f3d011682016040523d82523d6000602084013e610ec1565b606091505b505090508015610f00576040518281527f848b39dfef0f44053e441e7fad749cf07535df460e6b67ff62a4e73666d5d9fd906020015b60405180910390a15b5050565b6007546040516370a0823160e01b81526001600160a01b03838116600483015260009216906370a08231906024015b602060405180830381865afa158015610f50573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109519190613b36565b6001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314610fb95760405162461bcd60e51b815260040161098190613aaa565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461102d5760405162461bcd60e51b815260040161098190613aaa565b6001600160a01b03821660009081526015602052604090205481151560ff90911615150361106d5760405162461bcd60e51b815260040161098190613b4f565b6001600160a01b038216600081815260156020908152604091829020805460ff191685151590811790915591519182527fb7eada217e08491d4a03c266f93cd278befd124ab34890a5e7f44d023cbade7391015b60405180910390a25050565b6000546001600160a01b031633146110f75760405162461bcd60e51b815260040161098190613aaa565b6001600160a01b03821660009081526014602052604090205481151560ff9091161515036111375760405162461bcd60e51b815260040161098190613b4f565b6001600160a01b038216600081815260146020908152604091829020805460ff191685151590811790915591519182527f30098fc83ab61b1a98835d32c4e611adedccfc260eeef586bd329d48e8a40a4091016110c1565b6000546001600160a01b031633146111b95760405162461bcd60e51b815260040161098190613aaa565b600c546001600160a01b0384811691161461131e576001600160a01b0383166112245760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610981565b7f000000000000000000000000c35ca88cdb6f66199ab7de6637ae7d71c06975e06001600160a01b0316836001600160a01b0316036112a55760405162461bcd60e51b815260206004820152601f60248201527f546865206c697175696469747957616c6c65742063616e6e6f742062652030006044820152606401610981565b600c546040516e1b1a5c5d5a591a5d1e55d85b1b195d608a1b81526001600160a01b0391821691851690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600c80546001600160a01b0319166001600160a01b0385161790555b600d546001600160a01b03838116911614611483576001600160a01b0382166113895760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610981565b7f000000000000000000000000c35ca88cdb6f66199ab7de6637ae7d71c06975e06001600160a01b0316826001600160a01b03160361140a5760405162461bcd60e51b815260206004820152601f60248201527f546865206d61726b6574696e6757616c6c65742063616e6e6f742062652030006044820152606401610981565b600d546040516e1b585c9ad95d1a5b99d5d85b1b195d608a1b81526001600160a01b0391821691841690600f01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600d80546001600160a01b0319166001600160a01b0384161790555b600e546001600160a01b038281169116146115e3576001600160a01b0381166114ee5760405162461bcd60e51b815260206004820152601a60248201527f546865207465616d57616c6c65742063616e6e6f7420626520300000000000006044820152606401610981565b7f000000000000000000000000c35ca88cdb6f66199ab7de6637ae7d71c06975e06001600160a01b0316816001600160a01b03160361156f5760405162461bcd60e51b815260206004820152601a60248201527f546865207465616d57616c6c65742063616e6e6f7420626520300000000000006044820152606401610981565b600e54604051691d19585b55d85b1b195d60b21b81526001600160a01b0391821691831690600a01604051908190038120907fd1fafbc3fb0c1fd12765451e803b8d5049dca18f8055298e7d18ebcd0d2ce31290600090a4600e80546001600160a01b0319166001600160a01b0383161790555b505050565b6060600580546108bd90613a70565b6000546001600160a01b031633146116215760405162461bcd60e51b815260040161098190613aaa565b6b1027e72f1f128130880000006008819055600955565b6000546001600160a01b031633146116625760405162461bcd60e51b815260040161098190613aaa565b80828461166f8789613b99565b6116799190613b99565b6116839190613b99565b61168d9190613b99565b60ff166005116116d35760405162461bcd60e51b81526020600482015260116024820152706d6178206275792066656520697320342560781b6044820152606401610981565b6116e2600f868686868661246e565b6040516b62617365466565732d42757960a01b8152600c015b6040805191829003822060ff8881168452878116602085015286811684840152858116606085015284166080840152905190917f9a3619059270a48acdf850268d8f96db29f0cfe103bc17b5b4040a05af4d4f67919081900360a00190a25050505050565b600061094d3384610aaa85604051806060016040528060258152602001613e32602591393360009081526002602090815260408083206001600160a01b038d1684529091529020549190612329565b6007546040516302a2e74960e61b81526001600160a01b038381166004830152600092169063a8b9d24090602401610f33565b600061094d338484611d8f565b610f008282612753565b6000546001600160a01b031633146118235760405162461bcd60e51b815260040161098190613aaa565b600b5481036118905760405162461bcd60e51b815260206004820152603360248201527f43616e6e6f7420757064617465206d696e696d756d546f6b656e734265666f72604482015272655377617020746f2073616d652076616c756560681b6064820152608401610981565b600b5460405182907f5b0491f767c1463bea8972339f785795be1a38784cc6483cf649cdcbb28c46b090600090a3600b55565b6000546001600160a01b031633146118ed5760405162461bcd60e51b815260040161098190613aaa565b8082846118fa8789613b99565b6119049190613b99565b61190e9190613b99565b6119189190613b99565b60ff1660061161195f5760405162461bcd60e51b81526020600482015260126024820152716d61782073656c6c2066656520697320352560701b6044820152606401610981565b61196e600f86868686866128db565b6040516c18985cd95199595ccb54d95b1b609a1b8152600d016116fb565b6000546001600160a01b031633146119b65760405162461bcd60e51b815260040161098190613aaa565b6001600160a01b03821660009081526013602052604090205481151560ff9091161515036119f65760405162461bcd60e51b815260040161098190613b4f565b6001600160a01b038216600081815260136020908152604091829020805460ff191685151590811790915591519182527fa856ba9fdc54a5434b2359874c95612f520a2d7f858864ae98d15c1b2099ca8b91016110c1565b6000546001600160a01b03163314611a785760405162461bcd60e51b815260040161098190613aaa565b6001600160a01b038216600081815260126020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d35091016110c1565b600754604080516342d359d760e11b815290516000926001600160a01b0316916385a6b3ae9160048083019260209291908290030181865afa158015610dbe573d6000803e3d6000fd5b6000546001600160a01b03163314611b445760405162461bcd60e51b815260040161098190613aaa565b6001600160a01b038116611ba95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610981565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600080611c118385613bb2565b905083811015611c635760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610981565b9392505050565b6001600160a01b038316611ccc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610981565b6001600160a01b038216611d2d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610981565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611db55760405162461bcd60e51b815260040161098190613bc5565b6001600160a01b038216611ddb5760405162461bcd60e51b815260040161098190613c0a565b80600003611def576115e383836000612bdc565b6001600160a01b03808416600081815260166020908152604080832054948716835280832054938352601290915290205460ff928316929182169116158015611e5157506001600160a01b03841660009081526012602052604090205460ff16155b15611ff857600754600160a01b900460ff16611eaf5760405162461bcd60e51b815260206004820152601e60248201527f54726164696e672069732063757272656e746c792064697361626c65642e00006044820152606401610981565b6001600160a01b03841660009081526014602052604090205460ff16158015611ef157506001600160a01b03851660009081526014602052604090205460ff16155b15611f5757600954831115611f575760405162461bcd60e51b815260206004820152602660248201527f42757920616d6f756e74206578636565647320746865206d617854784275794160448201526536b7bab73a1760d11b6064820152608401610981565b6001600160a01b03841660009081526015602052604090205460ff16611ff85760085483611f8486610f74565b611f8e9190613bb2565b1115611ff85760405162461bcd60e51b815260206004820152603360248201527f45787065637465642077616c6c657420616d6f756e742065786365656473207460448201527234329036b0bc2bb0b63632ba20b6b7bab73a1760691b6064820152608401610981565b6120028282612ce8565b6000600b5461201030610f74565b6007549111159150600160a01b900460ff16801561202b5750805b801561203a5750600a5460ff16155b80156120515750601754600160281b900460ff1615155b801561207557506001600160a01b03851660009081526016602052604090205460ff165b801561209a57506001600160a01b03861660009081526013602052604090205460ff16155b80156120bf57506001600160a01b03851660009081526013602052604090205460ff16155b156120e457600a805460ff191660011790556120d9612f60565b600a805460ff191690555b600a5460009060ff161580156121035750600754600160a01b900460ff165b6001600160a01b03881660009081526013602052604090205490915060ff168061214557506001600160a01b03861660009081526013602052604090205460ff165b1561214e575060005b8080156121665750601754600160281b900460ff1615155b1561222f5760175460009060649061218890600160281b900460ff1688613af5565b6121929190613b22565b6017549091506000906064906121b2906301000000900460ff1689613af5565b6121bc9190613b22565b90506121c88288613c4d565b96506121d5893084612bdc565b801561222c576121e53082612363565b60175460408051630100000090920460ff168252602082018390527ffecf12fd01122af77b8b8f1a0f126363142d14fba298ea36d9fe4909f61bb5a1910160405180910390a15b50505b61223a878787612bdc565b6007546001600160a01b031663e30443bc8861225581610f74565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561229b57600080fd5b505af19250505080156122ac575060015b506007546001600160a01b031663e30443bc876122c881610f74565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401600060405180830381600087803b15801561230e57600080fd5b505af192505050801561231f575060015b5050505050505050565b6000818484111561234d5760405162461bcd60e51b8152600401610981919061382f565b50600061235a8486613c4d565b95945050505050565b6001600160a01b0382166123c35760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610981565b61240081604051806060016040528060228152602001613da2602291396001600160a01b0385166000908152600160205260409020549190612329565b6001600160a01b038316600090815260016020526040902055600354612426908261338d565b6003556040518181526000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600286015460ff8681169116146124ef57604051706c69717569646974794665654f6e42757960781b815260110160405190819003812060028801548854919260ff9182169291891691600080516020613dea833981519152916124d59160481b90613c60565b60405180910390a460028601805460ff191660ff87161790555b600286015460ff85811662010000909204161461258357604051706d61726b6574696e674665654f6e42757960781b815260110160405190819003812060028801548854919260ff6201000090920482169291881691600080516020613dea833981519152916125629160481b90613c60565b60405180910390a460028601805462ff000019166201000060ff8716021790555b600286015460ff848116600160201b909204161461261a576040516e6275794261636b4665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160201b90920482169291871691600080516020613dea833981519152916125f69160481b90613c60565b60405180910390a460028601805464ff000000001916600160201b60ff8616021790555b600286015460ff838116600160301b90920416146126b0576040516b6275726e4665654f6e42757960a01b8152600c0160405190819003812060028801548854919260ff600160301b90920482169291861691600080516020613dea8339815191529161268a9160481b90613c60565b60405180910390a460028601805466ff0000000000001916600160301b60ff8516021790555b600286015460ff828116600160401b909204161461274b576040516e686f6c646572734665654f6e42757960881b8152600f0160405190819003812060028801548854919260ff600160401b90920482169291851691600080516020613dea833981519152916127239160481b90613c60565b60405180910390a460028601805468ff00000000000000001916600160401b60ff8416021790555b505050505050565b61275d82826133cf565b1561286657600a805460ff191660011790556007546040516302a2e74960e61b81523360048201526000916001600160a01b03169063a8b9d24090602401602060405180830381865afa1580156127b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dc9190613b36565b1115610f005760075460405163497ba70f60e11b8152336004820152600060248201526001600160a01b03909116906392f74e1e906044016020604051808303816000875af1158015612833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128579190613c77565b50600a805460ff191690555050565b60075460405163497ba70f60e11b8152336004820152600060248201526001600160a01b03909116906392f74e1e906044016020604051808303816000875af11580156128b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e39190613c77565b600286015460ff868116610100909204161461296c57604051711b1a5c5d5a591a5d1e51995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff61010090920482169291891691600080516020613dea8339815191529161294d9160481b90613c60565b60405180910390a460028601805461ff00191661010060ff8816021790555b600286015460ff85811663010000009092041614612a0557604051711b585c9ad95d1a5b99d1995953db94d95b1b60721b815260120160405190819003812060028801548854919260ff630100000090920482169291881691600080516020613dea833981519152916129e29160481b90613c60565b60405180910390a460028601805463ff0000001916630100000060ff8716021790555b600286015460ff848116600160281b9092041614612a9e576040516f189d5e509858dad1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160281b90920482169291871691600080516020613dea83398151915291612a799160481b90613c60565b60405180910390a460028601805465ff00000000001916600160281b60ff8616021790555b600286015460ff838116600160381b9092041614612b36576040516c189d5c9b91995953db94d95b1b609a1b8152600d0160405190819003812060028801548854919260ff600160381b90920482169291861691600080516020613dea83398151915291612b0f9160481b90613c60565b60405180910390a460028601805467ff000000000000001916600160381b60ff8516021790555b600286015460ff828116600160481b909204161461274b576040516f1a1bdb19195c9cd1995953db94d95b1b60821b815260100160405190819003812060028801548854919260ff600160481b90920482169291851691600080516020613dea83398151915291612baa9160481b90613c60565b60405180910390a460028601805460ff8316600160481b0269ff00000000000000000019909116179055505050505050565b6001600160a01b038316612c025760405162461bcd60e51b815260040161098190613bc5565b6001600160a01b038216612c285760405162461bcd60e51b815260040161098190613c0a565b612c6581604051806060016040528060268152602001613dc4602691396001600160a01b0386166000908152600160205260409020549190612329565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612c949082611c04565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d829085815260200190565b6017805464ffffffffff191690558115612d70576011546017805460ff80841661ffff1990921691909117610100620100008086048416919091029190911763ffff00001916600160201b80860484169290920263ff000000191617600160301b850483166301000000021764ff000000001916600160401b90940491909116029190911790555b8015612deb576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b80158015612df7575081155b15612e71576011546017805461010080840460ff90811661ffff199093169290921763010000008086048416929092021763ffff00001916600160281b85048316620100000263ff000000191617600160381b85048316919091021764ff000000001916600160481b90930416600160201b029190911790555b60175460ff600160201b820481169163010000008104821691620100008204811691612ea591610100820481169116613b99565b612eaf9190613b99565b612eb99190613b99565b612ec39190613b99565b6017805465ff0000000000198116600160281b60ff948516810291821793849055604080519386169286169290921783526101008404851660208401526201000084048516918301919091526301000000830484166060830152600160201b83048416608083015290910490911660a08201527f6c6977cb51242ec6e05aba0e2a29a5292ed1a8a5cffa3b87ff66395b7997d6d29060c001610ef7565b6000612f6b30610f74565b600b549091504790612f7e906007613af5565b821115612f9657600b54612f93906007613af5565b91505b601754600090819060029060ff600160281b8204811691612fb8911687613af5565b612fc29190613b22565b612fcc9190613b22565b60175490915060009060ff600160281b8204811691612ff491600160201b9091041687613af5565b612ffe9190613b22565b9050600061300c8284613bb2565b6130169087613c4d565b905061302181613630565b600061302d8647613c4d565b60175490915060009060ff600160201b8204811691630100000081048216916130599160029116613c94565b6130639190613b99565b61306d9190613b99565b6017546130849190600160281b900460ff16613cb6565b60175460ff918216925060009160029184916130a1911686613af5565b6130ab9190613b22565b6130b59190613b22565b60175490915060009083906130d290610100900460ff1686613af5565b6130dc9190613b22565b905060006130ea8284613bb2565b6130f49086613c4d565b600e546040519192506001600160a01b0316908290600081818185875af1925050503d8060008114613142576040519150601f19603f3d011682016040523d82523d6000602084013e613147565b606091505b505080995050886131855760405162461bcd60e51b8152602060048201526008602482015267737563636573732160c01b6044820152606401610981565b600d546040516001600160a01b03909116908390600081818185875af1925050503d80600081146131d2576040519150601f19603f3d011682016040523d82523d6000602084013e6131d7565b606091505b505080995050886132155760405162461bcd60e51b8152602060048201526008602482015267737563636573732160c01b6044820152606401610981565b8715613267576132258884613782565b60408051878152602081018590529081018990527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b60075460405163a9059cbb60e01b81526001600160a01b03909116600482015260248101889052600090309063a9059cbb906044016020604051808303816000875af11580156132bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132df9190613c77565b9050801561337f57600754604051636bf5ecd560e01b8152600481018a90526001600160a01b0390911690636bf5ecd590602401600060405180830381600087803b15801561332d57600080fd5b505af1158015613341573d6000803e3d6000fd5b505050507fa4049db804d87a845be4dd8b54ae7048131238fba985dd37234309ac8668d9698860405161337691815260200190565b60405180910390a15b505050505050505050505050565b6000611c6383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612329565b600754604051634e7b827f60e01b815233600482015260009182916001600160a01b0390911690634e7b827f90602401602060405180830381865afa15801561341c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134409190613c77565b61356e57601754600160281b900460ff16156134c85760175460009060649061347390600160281b900460ff1686613af5565b61347d9190613b22565b60175490915060009060649061349d906301000000900460ff1687613af5565b6134a79190613b22565b90506134b38286613c4d565b945080156134c5576134c53382612363565b50505b60006134d330610f74565b60175490915060009060029060ff600160281b82048116916134f6911685613af5565b6135009190613b22565b61350a9190613b22565b60175490915060009060ff600160281b820481169161353291600160201b9091041685613af5565b61353c9190613b22565b9050600061354a8284613bb2565b6135549085613c4d565b9050801561356157600194505b8495505050505050610951565b600061357930610f74565b111561358d576135898484612363565b5060005b600061359830610f74565b60175490915060009060029060ff600160281b82048116916135bb911685613af5565b6135c59190613b22565b6135cf9190613b22565b60175490915060009060ff600160281b82048116916135f791600160201b9091041685613af5565b6136019190613b22565b9050600061360f8284613bb2565b6136199085613c4d565b905080156135615750600094506109519350505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061366557613665613ccf565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156136be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e29190613ce5565b816001815181106136f5576136f5613ccf565b6001600160a01b03928316602091820292909201015260065461371b9130911684611c6a565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac94790613754908590600090869030904290600401613d02565b600060405180830381600087803b15801561376e57600080fd5b505af115801561274b573d6000803e3d6000fd5b60065461379a9030906001600160a01b031684611c6a565b600654600c5460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af115801561380a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610ccf9190613d73565b600060208083528351808285015260005b8181101561385c57858101830151858201604001528201613840565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d1657600080fd5b600080604083850312156138a557600080fd5b82356138b08161387d565b946020939093013593505050565b6000602082840312156138d057600080fd5b5035919050565b6000806000606084860312156138ec57600080fd5b83356138f78161387d565b925060208401356139078161387d565b929592945050506040919091013590565b60006020828403121561392a57600080fd5b8135611c638161387d565b8015158114610d1657600080fd5b6000806040838503121561395657600080fd5b82356139618161387d565b9150602083013561397181613935565b809150509250929050565b60008060006060848603121561399157600080fd5b833561399c8161387d565b925060208401356139ac8161387d565b915060408401356139bc8161387d565b809150509250925092565b803560ff811681146139d857600080fd5b919050565b600080600080600060a086880312156139f557600080fd5b6139fe866139c7565b9450613a0c602087016139c7565b9350613a1a604087016139c7565b9250613a28606087016139c7565b9150613a36608087016139c7565b90509295509295909350565b60008060408385031215613a5557600080fd5b8235613a608161387d565b915060208301356139718161387d565b600181811c90821680613a8457607f821691505b602082108103613aa457634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761095157610951613adf565b634e487b7160e01b600052601260045260246000fd5b600082613b3157613b31613b0c565b500490565b600060208284031215613b4857600080fd5b5051919050565b6020808252602a908201527f4163636f756e7420697320616c7265616479207468652076616c7565206f6620604082015269276578636c756465642760b01b606082015260800190565b60ff818116838216019081111561095157610951613adf565b8082018082111561095157610951613adf565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111561095157610951613adf565b68ffffffffffffffffff1991909116815260200190565b600060208284031215613c8957600080fd5b8151611c6381613935565b600060ff831680613ca757613ca7613b0c565b8060ff84160491505092915050565b60ff828116828216039081111561095157610951613adf565b634e487b7160e01b600052603260045260246000fd5b600060208284031215613cf757600080fd5b8151611c638161387d565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015613d525784516001600160a01b031683529383019391830191600101613d2d565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215613d8857600080fd5b835192506020840151915060408401519050925092509256fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636560975576d19e213edd380779de3d98d124954af135afba9d505729832b9384e445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e1fa20ba2226982272051b3f1a2a0fc0573d99cbc4968b9ff666fa128c05ddeb64736f6c63430008120033

Libraries Used


Deployed Bytecode Sourcemap

18807:28674:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19131:28;;;;;;;;;;-1:-1:-1;19131:28:0;;;;-1:-1:-1;;;19131:28:0;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;19131:28:0;;;;;;;;9495:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10475:194::-;;;;;;;;;;-1:-1:-1;10475:194:0;;;;;:::i;:::-;;:::i;18853:30::-;;;;;;;;;;-1:-1:-1;18853:30:0;;;;-1:-1:-1;;;;;18853:30:0;;;;;;-1:-1:-1;;;;;1394:32:1;;;1376:51;;1364:2;1349:18;18853:30:0;1215:218:1;9816:108:0;;;;;;;;;;-1:-1:-1;9904:12:0;;9816:108;;;1584:25:1;;;1572:2;1557:18;9816:108:0;1438:177:1;31109:323:0;;;;;;;;;;-1:-1:-1;31109:323:0;;;;;:::i;:::-;;:::i;:::-;;10677:454;;;;;;;;;;-1:-1:-1;10677:454:0;;;;;:::i;:::-;;:::i;31440:450::-;;;;;;;;;;-1:-1:-1;31440:450:0;;;;;:::i;:::-;;:::i;25416:85::-;;;;;;;;;;;;;:::i;19081:43::-;;;;;;;;;;-1:-1:-1;19081:43:0;;;;-1:-1:-1;;;;;19081:43:0;;;9715:93;;;;;;;;;;-1:-1:-1;9715:93:0;;9798:2;2653:36:1;;2641:2;2626:18;9715:93:0;2511:184:1;26567:130:0;;;;;;;;;;-1:-1:-1;26567:130:0;;;;;:::i;:::-;;:::i;11139:293::-;;;;;;;;;;-1:-1:-1;11139:293:0;;;;;:::i;:::-;;:::i;35150:81::-;;;;;;;;;;-1:-1:-1;35150:81:0;;;;;:::i;:::-;;:::i;18890:38::-;;;;;;;;;;;;;;;32260:169;;;;;;;;;;-1:-1:-1;32260:169:0;;;;;:::i;:::-;;:::i;35729:142::-;;;;;;;;;;;;;:::i;34797:345::-;;;;;;;;;;-1:-1:-1;34797:345:0;;;;;:::i;:::-;;:::i;35564:157::-;;;;;;;;;;-1:-1:-1;35564:157:0;;;;;:::i;:::-;;:::i;9932:143::-;;;;;;;;;;-1:-1:-1;9932:143:0;;;;;:::i;:::-;;:::i;8614:148::-;;;;;;;;;;;;;:::i;27123:396::-;;;;;;;;;;-1:-1:-1;27123:396:0;;;;;:::i;:::-;;:::i;26705:410::-;;;;;;;;;;-1:-1:-1;26705:410:0;;;;;:::i;:::-;;:::i;19311:54::-;;;;;;;;;;;;;;;;27527:1660;;;;;;;;;;-1:-1:-1;27527:1660:0;;;;;:::i;:::-;;:::i;8400:79::-;;;;;;;;;;-1:-1:-1;8438:7:0;8465:6;-1:-1:-1;;;;;8465:6:0;8400:79;;9603:104;;;;;;;;;;;;;:::i;47354:124::-;;;;;;;;;;;;;:::i;29195:937::-;;;;;;;;;;-1:-1:-1;29195:937:0;;;;;:::i;:::-;;:::i;11440:393::-;;;;;;;;;;-1:-1:-1;11440:393:0;;;;;:::i;:::-;;:::i;35386:170::-;;;;;;;;;;-1:-1:-1;35386:170:0;;;;;:::i;:::-;;:::i;10083:200::-;;;;;;;;;;-1:-1:-1;10083:200:0;;;;;:::i;:::-;;:::i;19246:58::-;;;;;;;;;;;;;;;;32437:101;;;;;;;;;;-1:-1:-1;32437:101:0;;;;;:::i;:::-;;:::i;31898:354::-;;;;;;;;;;-1:-1:-1;31898:354:0;;;;;:::i;:::-;;:::i;30140:961::-;;;;;;;;;;-1:-1:-1;30140:961:0;;;;;:::i;:::-;;:::i;20445:57::-;;;;;;;;;;-1:-1:-1;20445:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26203:356;;;;;;;;;;-1:-1:-1;26203:356:0;;;;;:::i;:::-;;:::i;35879:334::-;;;;;;;;;;-1:-1:-1;36028:23:0;;;;;;;36066;;;;;;-1:-1:-1;;;36104:21:0;;;;;-1:-1:-1;;;36140:18:0;;;;;-1:-1:-1;;;36173:21:0;;;;35879:334;;;;5103:4:1;5091:17;;;5073:36;;5145:17;;;5140:2;5125:18;;5118:45;5199:17;;;5179:18;;;5172:45;;;;5253:17;;5248:2;5233:18;;5226:45;5308:17;;;5302:3;5287:19;;5280:46;5060:3;5045:19;35879:334:0;4834:498:1;19403:64:0;;;;;;;;;;;;;;;;25953:242;;;;;;;;;;-1:-1:-1;25953:242:0;;;;;:::i;:::-;;:::i;10291:176::-;;;;;;;;;;-1:-1:-1;10291:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;10432:18:0;;;10405:7;10432:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10291:176;35239:139;;;;;;;;;;;;;:::i;8770:281::-;;;;;;;;;;-1:-1:-1;8770:281:0;;;;;:::i;:::-;;:::i;36221:340::-;;;;;;;;;;-1:-1:-1;36371:24:0;;;;;;;;;36410;;;;;;-1:-1:-1;;;36449:22:0;;;;;-1:-1:-1;;;36486:19:0;;;;;-1:-1:-1;;;36520:22:0;;;;36221:340;;9495:100;9549:13;9582:5;9575:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9495:100;:::o;10475:194::-;10583:4;10600:39;7788:10;10623:7;10632:6;10600:8;:39::i;:::-;-1:-1:-1;10657:4:0;10475:194;;;;;:::o;31109:323::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7788:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;;;;;;;;;31255:4:::1;31247;31226:13;9904:12:::0;;;9816:108;31226:13:::1;:17;::::0;31242:1:::1;31226:17;:::i;:::-;31225:26;;;;:::i;:::-;31224:35;;;;:::i;:::-;31212:8;:47;;31190:136;;;::::0;-1:-1:-1;;;31190:136:0;;7240:2:1;31190:136:0::1;::::0;::::1;7222:21:1::0;7279:2;7259:18;;;7252:30;7318:34;7298:18;;;7291:62;-1:-1:-1;;;7369:18:1;;;7362:37;7416:19;;31190:136:0::1;7038:403:1::0;31190:136:0::1;31379:11;::::0;31342:49:::1;::::0;31369:8;;31342:49:::1;::::0;;;::::1;31402:11;:22:::0;31109:323::o;10677:454::-;10817:4;10834:36;10844:6;10852:9;10863:6;10834:9;:36::i;:::-;10881:220;10904:6;7788:10;10952:138;11008:6;10952:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10952:19:0;;;;;;:11;:19;;;;;;;;7788:10;10952:33;;;;;;;;;;:37;:138::i;:::-;10881:8;:220::i;:::-;-1:-1:-1;11119:4:0;10677:454;;;;;:::o;31440:450::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7788:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;31582:4:::1;31574;31552:13;9904:12:::0;;;9816:108;31552:13:::1;:18;::::0;31568:2:::1;31552:18;:::i;:::-;31551:27;;;;:::i;:::-;31550:36;;;;:::i;:::-;31538:8;:48;;31516:134;;;::::0;-1:-1:-1;;;31516:134:0;;7648:2:1;31516:134:0::1;::::0;::::1;7630:21:1::0;7687:2;7667:18;;;7660:30;7726:34;7706:18;;;7699:62;-1:-1:-1;;;7777:18:1;;;7770:34;7821:19;;31516:134:0::1;7446:400:1::0;31516:134:0::1;31695:15;;31683:8;:27:::0;31661:120:::1;;;::::0;-1:-1:-1;;;31661:120:0;;8053:2:1;31661:120:0::1;::::0;::::1;8035:21:1::0;8092:2;8072:18;;;8065:30;8131:34;8111:18;;;8104:62;-1:-1:-1;;;8182:18:1;;;8175:41;8233:19;;31661:120:0::1;7851:407:1::0;31661:120:0::1;31829:15;::::0;31797:48:::1;::::0;31819:8;;31797:48:::1;::::0;;;::::1;31856:15;:26:::0;31440:450::o;25416:85::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7788:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;25470:16:::1;:23:::0;;-1:-1:-1;;;;25470:23:0::1;-1:-1:-1::0;;;25470:23:0::1;::::0;;25416:85::o;26567:130::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7788:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;26644:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;26644:45:0;;-1:-1:-1;;;;;1394:32:1;;;26644:45:0::1;::::0;::::1;1376:51:1::0;26644:15:0;;::::1;::::0;:36:::1;::::0;1349:18:1;;26644:45:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26567:130:::0;:::o;11139:293::-;7788:10;11252:4;11341:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11341:34:0;;;;;;;;;;11252:4;;11269:133;;11319:7;;11341:50;;11380:10;11341:38;:50::i;35150:81::-;35199:24;35205:10;35217:5;35199;:24::i;:::-;35150:81;:::o;32260:169::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7788:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;32368:15:::1;::::0;:53:::1;::::0;-1:-1:-1;;;32368:53:0;;::::1;::::0;::::1;1584:25:1::0;;;-1:-1:-1;;;;;32368:15:0;;::::1;::::0;:43:::1;::::0;1557:18:1;;32368:53:0::1;1438:177:1::0;35729:142:0;35822:15;;:41;;;-1:-1:-1;;;35822:41:0;;;;35795:7;;-1:-1:-1;;;;;35822:15:0;;:39;;:41;;;;;;;;;;;;;;:15;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35815:48;;35729:142;:::o;34797:345::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7788:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;34899:21:::1;34890:6;:30;34868:118;;;::::0;-1:-1:-1;;;34868:118:0;;8654:2:1;34868:118:0::1;::::0;::::1;8636:21:1::0;8693:2;8673:18;;;8666:30;8732:34;8712:18;;;8705:62;-1:-1:-1;;;8783:18:1;;;8776:36;8829:19;;34868:118:0::1;8452:402:1::0;34868:118:0::1;34998:12;8465:6:::0;;35016:40:::1;::::0;-1:-1:-1;;;;;8465:6:0;;;;35045;;34998:12;35016:40;34998:12;35016:40;35045:6;8465;35016:40:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34997:59;;;35071:7;35067:68;;;35100:23;::::0;1584:25:1;;;35100:23:0::1;::::0;1572:2:1;1557:18;35100:23:0::1;;;;;;;;35067:68;34857:285;34797:345:::0;:::o;35564:157::-;35679:15;;:34;;-1:-1:-1;;;35679:34:0;;-1:-1:-1;;;;;1394:32:1;;;35679:34:0;;;1376:51:1;35652:7:0;;35679:15;;:25;;1349:18:1;;35679:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;9932:143::-;-1:-1:-1;;;;;10049:18:0;10022:7;10049:18;;;:9;:18;;;;;;;9932:143::o;8614:148::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7788:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;8721:1:::1;8705:6:::0;;8684:40:::1;::::0;-1:-1:-1;;;;;8705:6:0;;::::1;::::0;8684:40:::1;::::0;8721:1;;8684:40:::1;8752:1;8735:19:::0;;-1:-1:-1;;;;;;8735:19:0::1;::::0;;8614:148::o;27123:396::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7788:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27267:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;:50;::::1;;:38;::::0;;::::1;:50;;::::0;27245:142:::1;;;;-1:-1:-1::0;;;27245:142:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27398:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:49;;-1:-1:-1;;27398:49:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27463:48;;154:41:1;;;27463:48:0::1;::::0;127:18:1;27463:48:0::1;;;;;;;;27123:396:::0;;:::o;26705:410::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7788:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26854:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;:55;::::1;;:43;::::0;;::::1;:55;;::::0;26832:147:::1;;;;-1:-1:-1::0;;;26832:147:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26990:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;;;;:54;;-1:-1:-1;;26990:54:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27060:47;;154:41:1;;;27060:47:0::1;::::0;127:18:1;27060:47:0::1;14:187:1::0;27527:1660:0;8527:6;;-1:-1:-1;;;;;8527:6:0;7788:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;27696:15:::1;::::0;-1:-1:-1;;;;;27696:37:0;;::::1;:15:::0;::::1;:37;27692:546;;-1:-1:-1::0;;;;;27776:32:0;::::1;27750:125;;;::::0;-1:-1:-1;;;27750:125:0;;9682:2:1;27750:125:0::1;::::0;::::1;9664:21:1::0;9721:2;9701:18;;;9694:30;9760:33;9740:18;;;9733:61;9811:18;;27750:125:0::1;9480:355:1::0;27750:125:0::1;27938:13;-1:-1:-1::0;;;;;27916:35:0::1;:18;-1:-1:-1::0;;;;;27916:35:0::1;::::0;27890:128:::1;;;::::0;-1:-1:-1;;;27890:128:0;;9682:2:1;27890:128:0::1;::::0;::::1;9664:21:1::0;9721:2;9701:18;;;9694:30;9760:33;9740:18;;;9733:61;9811:18;;27890:128:0::1;9480:355:1::0;27890:128:0::1;28145:15;::::0;28038:137:::1;::::0;-1:-1:-1;;;10042:30:1;;-1:-1:-1;;;;;28145:15:0;;::::1;::::0;28038:137;::::1;::::0;10097:2:1;10088:12;28038:137:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;28190:15;:36:::0;;-1:-1:-1;;;;;;28190:36:0::1;-1:-1:-1::0;;;;;28190:36:0;::::1;;::::0;;27692:546:::1;28252:15;::::0;-1:-1:-1;;;;;28252:37:0;;::::1;:15:::0;::::1;:37;28248:546;;-1:-1:-1::0;;;;;28332:32:0;::::1;28306:125;;;::::0;-1:-1:-1;;;28306:125:0;;10313:2:1;28306:125:0::1;::::0;::::1;10295:21:1::0;10352:2;10332:18;;;10325:30;10391:33;10371:18;;;10364:61;10442:18;;28306:125:0::1;10111:355:1::0;28306:125:0::1;28494:13;-1:-1:-1::0;;;;;28472:35:0::1;:18;-1:-1:-1::0;;;;;28472:35:0::1;::::0;28446:128:::1;;;::::0;-1:-1:-1;;;28446:128:0;;10313:2:1;28446:128:0::1;::::0;::::1;10295:21:1::0;10352:2;10332:18;;;10325:30;10391:33;10371:18;;;10364:61;10442:18;;28446:128:0::1;10111:355:1::0;28446:128:0::1;28701:15;::::0;28594:137:::1;::::0;-1:-1:-1;;;10673:30:1;;-1:-1:-1;;;;;28701:15:0;;::::1;::::0;28594:137;::::1;::::0;10728:2:1;10719:12;28594:137:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;28746:15;:36:::0;;-1:-1:-1;;;;;;28746:36:0::1;-1:-1:-1::0;;;;;28746:36:0;::::1;;::::0;;28248:546:::1;28808:10;::::0;-1:-1:-1;;;;;28808:27:0;;::::1;:10:::0;::::1;:27;28804:376;;-1:-1:-1::0;;;;;28860:27:0;::::1;28852:66;;;::::0;-1:-1:-1;;;28852:66:0;;10944:2:1;28852:66:0::1;::::0;::::1;10926:21:1::0;10983:2;10963:18;;;10956:30;11022:28;11002:18;;;10995:56;11068:18;;28852:66:0::1;10742:350:1::0;28852:66:0::1;28976:13;-1:-1:-1::0;;;;;28959:30:0::1;:13;-1:-1:-1::0;;;;;28959:30:0::1;::::0;28933:118:::1;;;::::0;-1:-1:-1;;;28933:118:0;;10944:2:1;28933:118:0::1;::::0;::::1;10926:21:1::0;10983:2;10963:18;;;10956:30;11022:28;11002:18;;;10995:56;11068:18;;28933:118:0::1;10742:350:1::0;28933:118:0::1;29116:10;::::0;29071:56:::1;::::0;-1:-1:-1;;;11299:25:1;;-1:-1:-1;;;;;29116:10:0;;::::1;::::0;29071:56;::::1;::::0;11349:2:1;11340:12;29071:56:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;29142:10;:26:::0;;-1:-1:-1;;;;;;29142:26:0::1;-1:-1:-1::0;;;;;29142:26:0;::::1;;::::0;;28804:376:::1;27527:1660:::0;;;:::o;9603:104::-;9659:13;9692:7;9685:14;;;;;:::i;47354:124::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7788:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;19216:23:::1;47409:15;:27:::0;;;47447:11:::1;:23:::0;47354:124::o;29195:937::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7788:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;29628:16;29591:13;29551:16;29467:60:::1;29509:18:::0;29467;:60:::1;:::i;:::-;:100;;;;:::i;:::-;:137;;;;:::i;:::-;:177;;;;:::i;:::-;29446:198;;:1;:198;29424:265;;;::::0;-1:-1:-1;;;29424:265:0;;11718:2:1;29424:265:0::1;::::0;::::1;11700:21:1::0;11757:2;11737:18;;;11730:30;-1:-1:-1;;;11776:18:1;;;11769:47;11833:18;;29424:265:0::1;11516:341:1::0;29424:265:0::1;29700:203;29731:5;29751:18;29784;29817:16;29848:13;29876:16;29700;:203::i;:::-;29919:205;::::0;-1:-1:-1;;;12064:27:1;;12116:2;12107:12;29919:205:0::1;;::::0;;;;;::::1;::::0;;5103:4:1;5091:17;;;5073:36;;5145:17;;;5140:2;5125:18;;5118:45;5199:17;;;5179:18;;;5172:45;5253:17;;;5248:2;5233:18;;5226:45;5308:17;;5302:3;5287:19;;5280:46;29919:205:0;;;;::::1;::::0;;;;;5060:3:1;29919:205:0;;::::1;29195:937:::0;;;;;:::o;11440:393::-;11558:4;11575:228;7788:10;11625:7;11647:145;11704:15;11647:145;;;;;;;;;;;;;;;;;7788:10;11647:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11647:34:0;;;;;;;;;;;;:38;:145::i;35386:170::-;35501:15;;:47;;-1:-1:-1;;;35501:47:0;;-1:-1:-1;;;;;1394:32:1;;;35501:47:0;;;1376:51:1;35474:7:0;;35501:15;;:38;;1349:18:1;;35501:47:0;1215:218:1;10083:200:0;10194:4;10211:42;7788:10;10235:9;10246:6;10211:9;:42::i;32437:101::-;32502:28;32517:4;32523:6;32502:14;:28::i;31898:354::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7788:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;32016:23:::1;;32004:8;:35:::0;31982:136:::1;;;::::0;-1:-1:-1;;;31982:136:0;;12332:2:1;31982:136:0::1;::::0;::::1;12314:21:1::0;12371:2;12351:18;;;12344:30;12410:34;12390:18;;;12383:62;-1:-1:-1;;;12461:18:1;;;12454:49;12520:19;;31982:136:0::1;12130:415:1::0;31982:136:0::1;32175:23;::::0;32134:65:::1;::::0;32165:8;;32134:65:::1;::::0;;;::::1;32210:23;:34:::0;31898:354::o;30140:961::-;8527:6;;-1:-1:-1;;;;;8527:6:0;7788:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;30583:17;30545:14;30504:17;30418:62:::1;30461:19:::0;30418;:62:::1;:::i;:::-;:103;;;;:::i;:::-;:141;;;;:::i;:::-;:182;;;;:::i;:::-;30397:203;;:1;:203;30375:271;;;::::0;-1:-1:-1;;;30375:271:0;;12752:2:1;30375:271:0::1;::::0;::::1;12734:21:1::0;12791:2;12771:18;;;12764:30;-1:-1:-1;;;12810:18:1;;;12803:48;12868:18;;30375:271:0::1;12550:342:1::0;30375:271:0::1;30657:209;30689:5;30709:19;30743;30777:17;30809:14;30838:17;30657;:209::i;:::-;30882:211;::::0;-1:-1:-1;;;13099:28:1;;13152:2;13143:12;30882:211:0::1;12897:264:1::0;26203:356:0;8527:6;;-1:-1:-1;;;;;8527:6:0;7788:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26337:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;:39;::::1;;:27;::::0;;::::1;:39;;::::0;26315:131:::1;;;;-1:-1:-1::0;;;26315:131:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26457:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;26457:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26511:40;;154:41:1;;;26511:40:0::1;::::0;127:18:1;26511:40:0::1;14:187:1::0;25953:242:0;8527:6;;-1:-1:-1;;;;;8527:6:0;7788:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26073:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;26073:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26137:50;;154:41:1;;;26137:50:0::1;::::0;127:18:1;26137:50:0::1;14:187:1::0;35239:139:0;35327:15;;:43;;;-1:-1:-1;;;35327:43:0;;;;35300:7;;-1:-1:-1;;;;;35327:15:0;;:41;;:43;;;;;;;;;;;;;;:15;:43;;;;;;;;;;;;;;8770:281;8527:6;;-1:-1:-1;;;;;8527:6:0;7788:10;8527:22;8519:67;;;;-1:-1:-1;;;8519:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;8873:22:0;::::1;8851:110;;;::::0;-1:-1:-1;;;8851:110:0;;13368:2:1;8851:110:0::1;::::0;::::1;13350:21:1::0;13407:2;13387:18;;;13380:30;13446:34;13426:18;;;13419:62;-1:-1:-1;;;13497:18:1;;;13490:36;13543:19;;8851:110:0::1;13166:402:1::0;8851:110:0::1;8998:6;::::0;;8977:38:::1;::::0;-1:-1:-1;;;;;8977:38:0;;::::1;::::0;8998:6;::::1;::::0;8977:38:::1;::::0;::::1;9026:6;:17:::0;;-1:-1:-1;;;;;;9026:17:0::1;-1:-1:-1::0;;;;;9026:17:0;;;::::1;::::0;;;::::1;::::0;;8770:281::o;2947:181::-;3005:7;;3037:5;3041:1;3037;:5;:::i;:::-;3025:17;;3066:1;3061;:6;;3053:46;;;;-1:-1:-1;;;3053:46:0;;13905:2:1;3053:46:0;;;13887:21:1;13944:2;13924:18;;;13917:30;13983:29;13963:18;;;13956:57;14030:18;;3053:46:0;13703:351:1;3053:46:0;3119:1;2947:181;-1:-1:-1;;;2947:181:0:o;13296:378::-;-1:-1:-1;;;;;13432:19:0;;13424:68;;;;-1:-1:-1;;;13424:68:0;;14261:2:1;13424:68:0;;;14243:21:1;14300:2;14280:18;;;14273:30;14339:34;14319:18;;;14312:62;-1:-1:-1;;;14390:18:1;;;14383:34;14434:19;;13424:68:0;14059:400:1;13424:68:0;-1:-1:-1;;;;;13511:21:0;;13503:68;;;;-1:-1:-1;;;13503:68:0;;14666:2:1;13503:68:0;;;14648:21:1;14705:2;14685:18;;;14678:30;14744:34;14724:18;;;14717:62;-1:-1:-1;;;14795:18:1;;;14788:32;14837:19;;13503:68:0;14464:398:1;13503:68:0;-1:-1:-1;;;;;13582:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13634:32;;1584:25:1;;;13634:32:0;;1557:18:1;13634:32:0;;;;;;;;13296:378;;;:::o;36582:2648::-;-1:-1:-1;;;;;36714:18:0;;36706:68;;;;-1:-1:-1;;;36706:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36793:16:0;;36785:64;;;;-1:-1:-1;;;36785:64:0;;;;;;;:::i;:::-;36866:6;36876:1;36866:11;36862:93;;36894:28;36910:4;36916:2;36920:1;36894:15;:28::i;36862:93::-;-1:-1:-1;;;;;36985:31:0;;;36967:15;36985:31;;;:25;:31;;;;;;;;;37041:29;;;;;;;;;37102:35;;;:29;:35;;;;;;36985:31;;;;;37041:29;;;;37102:35;37101:36;:87;;;;-1:-1:-1;;;;;;37155:33:0;;;;;;:29;:33;;;;;;;;37154:34;37101:87;37083:781;;;37223:16;;-1:-1:-1;;;37223:16:0;;;;37215:59;;;;-1:-1:-1;;;37215:59:0;;15879:2:1;37215:59:0;;;15861:21:1;15918:2;15898:18;;;15891:30;15957:32;15937:18;;;15930:60;16007:18;;37215:59:0;15677:354:1;37215:59:0;-1:-1:-1;;;;;37312:38:0;;;;;;:34;:38;;;;;;;;37311:39;:101;;;;-1:-1:-1;;;;;;37372:40:0;;;;;;:34;:40;;;;;;;;37371:41;37311:101;37289:307;;;37487:11;;37477:6;:21;;37447:133;;;;-1:-1:-1;;;37447:133:0;;16238:2:1;37447:133:0;;;16220:21:1;16277:2;16257:18;;;16250:30;16316:34;16296:18;;;16289:62;-1:-1:-1;;;16367:18:1;;;16360:36;16413:19;;37447:133:0;16036:402:1;37447:133:0;-1:-1:-1;;;;;37615:33:0;;;;;;:29;:33;;;;;;;;37610:243;;37727:15;;37716:6;37700:13;37710:2;37700:9;:13::i;:::-;:22;;;;:::i;:::-;37699:43;;37669:168;;;;-1:-1:-1;;;37669:168:0;;16645:2:1;37669:168:0;;;16627:21:1;16684:2;16664:18;;;16657:30;16723:34;16703:18;;;16696:62;-1:-1:-1;;;16774:18:1;;;16767:49;16833:19;;37669:168:0;16443:415:1;37669:168:0;37876:35;37892:10;37904:6;37876:15;:35::i;:::-;37958:12;38001:23;;37973:24;37991:4;37973:9;:24::i;:::-;38055:16;;-1:-1:-1;;37973:51:0;;-1:-1:-1;;;;38055:16:0;;;;:40;;;;;38088:7;38055:40;:67;;;;-1:-1:-1;38113:9:0;;;;38112:10;38055:67;:97;;;;-1:-1:-1;38139:9:0;;-1:-1:-1;;;38139:9:0;;;;:13;;38055:97;:143;;;;-1:-1:-1;;;;;;38169:29:0;;;;;;:25;:29;;;;;;;;38055:143;:185;;;;-1:-1:-1;;;;;;38216:24:0;;;;;;:18;:24;;;;;;;;38215:25;38055:185;:225;;;;-1:-1:-1;;;;;;38258:22:0;;;;;;:18;:22;;;;;;;;38257:23;38055:225;38037:362;;;38307:9;:16;;-1:-1:-1;;38307:16:0;38319:4;38307:16;;;38338:17;:15;:17::i;:::-;38370:9;:17;;-1:-1:-1;;38370:17:0;;;38037:362;38427:9;;38411:12;;38427:9;;38426:10;:30;;;;-1:-1:-1;38440:16:0;;-1:-1:-1;;;38440:16:0;;;;38426:30;-1:-1:-1;;;;;38473:24:0;;;;;;:18;:24;;;;;;38411:45;;-1:-1:-1;38473:24:0;;;:50;;-1:-1:-1;;;;;;38501:22:0;;;;;;:18;:22;;;;;;;;38473:50;38469:98;;;-1:-1:-1;38550:5:0;38469:98;38581:7;:24;;;;-1:-1:-1;38592:9:0;;-1:-1:-1;;;38592:9:0;;;;:13;;38581:24;38577:414;;;38646:9;;38622:11;;38659:3;;38637:18;;-1:-1:-1;;;38646:9:0;;;;38637:6;:18;:::i;:::-;38636:26;;;;:::i;:::-;38708:8;;38622:40;;-1:-1:-1;38677:18:0;;38720:3;;38699:17;;38708:8;;;;;38699:6;:17;:::i;:::-;38698:25;;;;:::i;:::-;38677:46;-1:-1:-1;38747:12:0;38756:3;38747:6;:12;:::i;:::-;38738:21;;38774:41;38790:4;38804;38811:3;38774:15;:41::i;:::-;38836:14;;38832:148;;38871:38;38891:4;38898:10;38871:11;:38::i;:::-;38943:8;;38933:31;;;38943:8;;;;;;17166:36:1;;17233:2;17218:18;;17211:34;;;38933:31:0;;17139:18:1;38933:31:0;;;;;;;38832:148;38607:384;;38577:414;39001:33;39017:4;39023:2;39027:6;39001:15;:33::i;:::-;39064:15;;-1:-1:-1;;;;;39064:15:0;:26;39099:4;39106:15;39099:4;39106:9;:15::i;:::-;39064:58;;-1:-1:-1;;;;;;39064:58:0;;;;;;;-1:-1:-1;;;;;17464:32:1;;;39064:58:0;;;17446:51:1;17513:18;;;17506:34;17419:18;;39064:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39047:96;39157:15;;-1:-1:-1;;;;;39157:15:0;:26;39192:2;39197:13;39192:2;39197:9;:13::i;:::-;39157:54;;-1:-1:-1;;;;;;39157:54:0;;;;;;;-1:-1:-1;;;;;17464:32:1;;;39157:54:0;;;17446:51:1;17513:18;;;17506:34;17419:18;;39157:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39153:70;36695:2535;;;;36582:2648;;;:::o;3280:226::-;3400:7;3436:12;3428:6;;;;3420:29;;;;-1:-1:-1;;;3420:29:0;;;;;;;;:::i;:::-;-1:-1:-1;3460:9:0;3472:5;3476:1;3472;:5;:::i;:::-;3460:17;3280:226;-1:-1:-1;;;;;3280:226:0:o;12837:451::-;-1:-1:-1;;;;;12921:21:0;;12913:67;;;;-1:-1:-1;;;12913:67:0;;17753:2:1;12913:67:0;;;17735:21:1;17792:2;17772:18;;;17765:30;17831:34;17811:18;;;17804:62;-1:-1:-1;;;17882:18:1;;;17875:31;17923:19;;12913:67:0;17551:397:1;12913:67:0;13072:105;13109:6;13072:105;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13072:18:0;;;;;;:9;:18;;;;;;;:105;:22;:105::i;:::-;-1:-1:-1;;;;;13051:18:0;;;;;;:9;:18;;;;;:126;13203:12;;:24;;13220:6;13203:16;:24::i;:::-;13188:12;:39;13243:37;;1584:25:1;;;13269:1:0;;-1:-1:-1;;;;;13243:37:0;;;;;1572:2:1;1557:18;13243:37:0;;;;;;;12837:451;;:::o;42558:1820::-;42818:21;;;;:43;;;;:21;;:43;42814:316;;42883:178;;-1:-1:-1;;;18155:32:1;;18212:2;18203:12;42883:178:0;;;;;;;;42954:21;;;;43032:14;;42883:178;;42954:21;;;;;42883:178;;;;-1:-1:-1;;;;;;;;;;;42883:178:0;;;43032:14;;;42883:178;:::i;:::-;;;;;;;;43076:21;;;:42;;-1:-1:-1;;43076:42:0;;;;;;;42814:316;43144:21;;;;:43;;;;:21;;;;;:43;43140:316;;43209:178;;-1:-1:-1;;;18642:32:1;;18699:2;18690:12;43209:178:0;;;;;;;;43280:21;;;;43358:14;;43209:178;;43280:21;;;;;;;;43209:178;;;;-1:-1:-1;;;;;;;;;;;43209:178:0;;;43358:14;;;43209:178;:::i;:::-;;;;;;;;43402:21;;;:42;;-1:-1:-1;;43402:42:0;;;;;;;;;43140:316;43470:19;;;;:39;;;;-1:-1:-1;;;43470:19:0;;;;:39;43466:302;;43531:172;;-1:-1:-1;;;18915:30:1;;18970:2;18961:12;43531:172:0;;;;;;;;43600:19;;;;43674:14;;43531:172;;43600:19;-1:-1:-1;;;43600:19:0;;;;;;43531:172;;;;-1:-1:-1;;;;;;;;;;;43531:172:0;;;43674:14;;;43531:172;:::i;:::-;;;;;;;;43718:19;;;:38;;-1:-1:-1;;43718:38:0;-1:-1:-1;;;43718:38:0;;;;;;;43466:302;43782:16;;;;:33;;;;-1:-1:-1;;;43782:16:0;;;;:33;43778:281;;43837:163;;-1:-1:-1;;;19186:27:1;;19238:2;19229:12;43837:163:0;;;;;;;;43903:16;;;;43971:14;;43837:163;;43903:16;-1:-1:-1;;;43903:16:0;;;;;;43837:163;;;;-1:-1:-1;;;;;;;;;;;43837:163:0;;;43971:14;;;43837:163;:::i;:::-;;;;;;;;44015:16;;;:32;;-1:-1:-1;;44015:32:0;-1:-1:-1;;;44015:32:0;;;;;;;43778:281;44073:19;;;;:39;;;;-1:-1:-1;;;44073:19:0;;;;:39;44069:302;;44134:172;;-1:-1:-1;;;19454:30:1;;19509:2;19500:12;44134:172:0;;;;;;;;44203:19;;;;44277:14;;44134:172;;44203:19;-1:-1:-1;;;44203:19:0;;;;;;44134:172;;;;-1:-1:-1;;;;;;;;;;;44134:172:0;;;44277:14;;;44134:172;:::i;:::-;;;;;;;;44321:19;;;:38;;-1:-1:-1;;44321:38:0;-1:-1:-1;;;44321:38:0;;;;;;;44069:302;42558:1820;;;;;;:::o;32546:496::-;32624:25;32636:4;32642:6;32624:11;:25::i;:::-;32620:415;;;32666:9;:16;;-1:-1:-1;;32666:16:0;32678:4;32666:16;;;32701:15;;:50;;-1:-1:-1;;;32701:50:0;;32740:10;32701:50;;;1376:51:1;-1:-1:-1;;;;;;;32701:15:0;;:38;;1349:18:1;;32701:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;32697:202;;;32776:15;;:60;;-1:-1:-1;;;32776:60:0;;32817:10;32776:60;;;19707:51:1;32776:15:0;19774:18:1;;;19767:50;-1:-1:-1;;;;;32776:15:0;;;;:32;;19680:18:1;;32776:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32913:9;:17;;-1:-1:-1;;32913:17:0;;;34857:285:::1;34797:345:::0;:::o;32620:415::-;32963:15;;:60;;-1:-1:-1;;;32963:60:0;;33004:10;32963:60;;;19707:51:1;32963:15:0;19774:18:1;;;19767:50;-1:-1:-1;;;;;32963:15:0;;;;:32;;19680:18:1;;32963:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40689:1861::-;40955:22;;;;:45;;;;:22;;;;;:45;40951:323;;41022:181;;-1:-1:-1;;;20280:33:1;;20338:2;20329:12;41022:181:0;;;;;;;;41094:22;;;;41174:14;;41022:181;;41094:22;;;;;;;;41022:181;;;;-1:-1:-1;;;;;;;;;;;41022:181:0;;;41174:14;;;41022:181;:::i;:::-;;;;;;;;41218:22;;;:44;;-1:-1:-1;;41218:44:0;;;;;;;;;40951:323;41288:22;;;;:45;;;;:22;;;;;:45;41284:323;;41355:181;;-1:-1:-1;;;20554:33:1;;20612:2;20603:12;41355:181:0;;;;;;;;41427:22;;;;41507:14;;41355:181;;41427:22;;;;;;;;41355:181;;;;-1:-1:-1;;;;;;;;;;;41355:181:0;;;41507:14;;;41355:181;:::i;:::-;;;;;;;;41551:22;;;:44;;-1:-1:-1;;41551:44:0;;;;;;;;;41284:323;41621:20;;;;:41;;;;-1:-1:-1;;;41621:20:0;;;;:41;41617:309;;41684:175;;-1:-1:-1;;;20828:31:1;;20884:2;20875:12;41684:175:0;;;;;;;;41754:20;;;;41830:14;;41684:175;;41754:20;-1:-1:-1;;;41754:20:0;;;;;;41684:175;;;;-1:-1:-1;;;;;;;;;;;41684:175:0;;;41830:14;;;41684:175;:::i;:::-;;;;;;;;41874:20;;;:40;;-1:-1:-1;;41874:40:0;-1:-1:-1;;;41874:40:0;;;;;;;41617:309;41940:17;;;;:35;;;;-1:-1:-1;;;41940:17:0;;;;:35;41936:288;;41997:166;;-1:-1:-1;;;21100:28:1;;21153:2;21144:12;41997:166:0;;;;;;;;42064:17;;;;42134:14;;41997:166;;42064:17;-1:-1:-1;;;42064:17:0;;;;;;41997:166;;;;-1:-1:-1;;;;;;;;;;;41997:166:0;;;42134:14;;;41997:166;:::i;:::-;;;;;;;;42178:17;;;:34;;-1:-1:-1;;42178:34:0;-1:-1:-1;;;42178:34:0;;;;;;;41936:288;42238:20;;;;:41;;;;-1:-1:-1;;;42238:20:0;;;;:41;42234:309;;42301:175;;-1:-1:-1;;;21369:31:1;;21425:2;21416:12;42301:175:0;;;;;;;;42371:20;;;;42447:14;;42301:175;;42371:20;-1:-1:-1;;;42371:20:0;;;;;;42301:175;;;;-1:-1:-1;;;;;;;;;;;42301:175:0;;;42447:14;;;42301:175;:::i;:::-;;;;;;;;42491:20;;;:40;;;;;-1:-1:-1;;;42491:40:0;-1:-1:-1;;42491:40:0;;;;;;40689:1861;;;;;;:::o;11841:606::-;-1:-1:-1;;;;;11981:20:0;;11973:70;;;;-1:-1:-1;;;11973:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12062:23:0;;12054:71;;;;-1:-1:-1;;;12054:71:0;;;;;;;:::i;:::-;12214:108;12250:6;12214:108;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12214:17:0;;;;;;:9;:17;;;;;;;:108;:21;:108::i;:::-;-1:-1:-1;;;;;12194:17:0;;;;;;;:9;:17;;;;;;:128;;;;12356:20;;;;;;;:32;;12381:6;12356:24;:32::i;:::-;-1:-1:-1;;;;;12333:20:0;;;;;;;:9;:20;;;;;;;:55;;;;12404:35;;;;;;;;;;12432:6;1584:25:1;;1572:2;1557:18;;1438:177;39238:1443:0;39312:13;:17;;-1:-1:-1;;39417:15:0;;;39445:280;;;;39492:23;;39476:13;:39;;39492:23;;;;-1:-1:-1;;39530:39:0;;;;;;;39492:23;39546;;;;;;39530:39;;;;;;;;-1:-1:-1;;39634:29:0;-1:-1:-1;;;39598:21:0;;;;;39584:35;;;;-1:-1:-1;;39634:29:0;;-1:-1:-1;;;39645:18:0;;;;39634:29;;;-1:-1:-1;;39678:35:0;-1:-1:-1;;;39692:21:0;;;;;;;39678:35;;;;;;;39445:280;39739:6;39735:281;;;39778:24;;39762:13;:40;;39778:24;;;;;;;;-1:-1:-1;;39817:40:0;;;;;;;39833:24;;;;;;39817:40;;;;;-1:-1:-1;;39923:30:0;-1:-1:-1;;;39886:22:0;;;;39872:36;;-1:-1:-1;;39923:30:0;;-1:-1:-1;;;39934:19:0;;;;39923:30;;;;;-1:-1:-1;;39968:36:0;-1:-1:-1;;;39982:22:0;;;;-1:-1:-1;;;39968:36:0;;;;;;;39735:281;40031:6;40030:7;:22;;;;;40042:10;40041:11;40030:22;40026:297;;;40085:24;;40069:13;:40;;40085:24;;;;;;;;-1:-1:-1;;40124:40:0;;;;;;;40140:24;;;;;;40124:40;;;;;-1:-1:-1;;40230:30:0;-1:-1:-1;;;40193:22:0;;;;40179:36;;-1:-1:-1;;40230:30:0;;-1:-1:-1;;;40241:19:0;;;;40230:30;;;;;-1:-1:-1;;40275:36:0;-1:-1:-1;;;40289:22:0;;;;-1:-1:-1;;;40275:36:0;;;;;;;40026:297;40469:11;;;-1:-1:-1;;;40469:11:0;;;;;40445:8;;;;;;40418:11;;;;;;40360:42;;40469:11;40389:13;;;;;40360;:42;:::i;:::-;:69;;;;:::i;:::-;:93;;;;:::i;:::-;:120;;;;:::i;:::-;40335:9;:145;;-1:-1:-1;;40335:145:0;;-1:-1:-1;;;40335:145:0;;;;;;;;;;;;;40496:177;;;40522:13;;;;;;;;;;21725:34:1;;40335:145:0;40550:13;;;;21790:2:1;21775:18;;21768:43;40578:11:0;;;;;21827:18:1;;;21820:43;;;;40604:8:0;;;;;21894:2:1;21879:18;;21872:43;-1:-1:-1;;;40627:11:0;;;;21946:3:1;21931:19;;21924:44;40653:9:0;;;;;;21999:3:1;21984:19;;21977:44;40496:177:0;;21689:3:1;21674:19;40496:177:0;21439:588:1;44386:2021:0;44432:23;44458:24;44476:4;44458:9;:24::i;:::-;44575:23;;44432:50;;-1:-1:-1;44521:21:0;;44575:27;;44601:1;44575:27;:::i;:::-;44557:15;:45;44553:123;;;44637:23;;:27;;44663:1;44637:27;:::i;:::-;44619:45;;44553:123;44784:9;;44686:12;;;;44809:1;;44784:9;-1:-1:-1;;;44784:9:0;;;;;44736:31;;44754:13;44736:15;:31;:::i;:::-;44735:58;;;;:::i;:::-;:75;;;;:::i;:::-;44882:9;;44709:101;;-1:-1:-1;44821:24:0;;44882:9;-1:-1:-1;;;44882:9:0;;;;;44849:29;;-1:-1:-1;;;44867:11:0;;;;44849:15;:29;:::i;:::-;44848:43;;;;:::i;:::-;44821:70;-1:-1:-1;44902:20:0;44957:34;44821:70;44957:15;:34;:::i;:::-;44925:67;;:15;:67;:::i;:::-;44902:90;;45005:31;45023:12;45005:17;:31::i;:::-;45049:27;45079:41;45103:17;45079:21;:41;:::i;:::-;45212:11;;45049:71;;-1:-1:-1;45131:19:0;;45212:11;-1:-1:-1;;;45212:11:0;;;;;45201:8;;;;;;45180:17;;45196:1;;45180:13;:17;:::i;:::-;45179:30;;;;:::i;:::-;:44;;;;:::i;:::-;45153:9;;:71;;;-1:-1:-1;;;45153:9:0;;;;:71;:::i;:::-;45287:13;;45131:93;;;;;-1:-1:-1;45235:26:0;;45344:1;;45131:93;;45265:35;;45287:13;45265:19;:35;:::i;:::-;45264:64;;;;:::i;:::-;:81;;;;:::i;:::-;45408:13;;45235:110;;-1:-1:-1;45356:26:0;;45438:11;;45386:35;;45408:13;;;;;45386:19;:35;:::i;:::-;45385:64;;;;:::i;:::-;45356:93;-1:-1:-1;45460:24:0;45523:39;45356:93;45523:18;:39;:::i;:::-;45487:76;;:19;:76;:::i;:::-;45598:10;;45590:53;;45460:103;;-1:-1:-1;;;;;;45598:10:0;;45460:103;;45590:53;;;;45460:103;45598:10;45590:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45576:67;;;;;45662:7;45654:28;;;;-1:-1:-1;;;45654:28:0;;22560:2:1;45654:28:0;;;22542:21:1;22599:1;22579:18;;;22572:29;-1:-1:-1;;;22617:18:1;;;22610:38;22665:18;;45654:28:0;22358:331:1;45654:28:0;45715:15;;45707:84;;-1:-1:-1;;;;;45715:15:0;;;;45744:18;;45707:84;;;;45744:18;45715:15;45707:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45693:98;;;;;45810:7;45802:28;;;;-1:-1:-1;;;45802:28:0;;22560:2:1;45802:28:0;;;22542:21:1;22599:1;22579:18;;;22572:29;-1:-1:-1;;;22617:18:1;;;22610:38;22665:18;;45802:28:0;22358:331:1;45802:28:0;45847:19;;45843:253;;45883:50;45897:15;45914:18;45883:13;:50::i;:::-;45953:131;;;22896:25:1;;;22952:2;22937:18;;22930:34;;;22980:18;;;22973:34;;;45953:131:0;;22884:2:1;22869:18;45953:131:0;;;;;;;45843:253;46176:15;;46123:111;;-1:-1:-1;;;46123:111:0;;-1:-1:-1;;;;;46176:15:0;;;46123:111;;;17446:51:1;17513:18;;;17506:34;;;46108:12:0;;46138:4;;46123:30;;17419:18:1;;46123:111:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46108:126;;46249:7;46245:155;;;46273:15;;:64;;-1:-1:-1;;;46273:64:0;;;;;1584:25:1;;;-1:-1:-1;;;;;46273:15:0;;;;:46;;1557:18:1;;46273:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46357:31;46371:16;46357:31;;;;1584:25:1;;1572:2;1557:18;;1438:177;46357:31:0;;;;;;;;46245:155;44421:1986;;;;;;;;;;;;44386:2021::o;3136:136::-;3194:7;3221:43;3225:1;3228;3221:43;;;;;;;;;;;;;;;;;:3;:43::i;33050:1739::-;33195:15;;:49;;-1:-1:-1;;;33195:49:0;;33233:10;33195:49;;;1376:51:1;33147:4:0;;;;-1:-1:-1;;;;;33195:15:0;;;;:37;;1349:18:1;;33195:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33190:1592;;33265:9;;-1:-1:-1;;;33265:9:0;;;;:13;33261:309;;33323:9;;33299:11;;33336:3;;33314:18;;-1:-1:-1;;;33323:9:0;;;;33314:6;:18;:::i;:::-;33313:26;;;;:::i;:::-;33389:8;;33299:40;;-1:-1:-1;33358:18:0;;33401:3;;33380:17;;33389:8;;;;;33380:6;:17;:::i;:::-;33379:25;;;;:::i;:::-;33358:46;-1:-1:-1;33432:12:0;33441:3;33432:6;:12;:::i;:::-;33423:21;-1:-1:-1;33467:14:0;;33463:92;;33506:29;33512:10;33524;33506:5;:29::i;:::-;33280:290;;33261:309;33584:23;33610:24;33628:4;33610:9;:24::i;:::-;33728:9;;33584:50;;-1:-1:-1;33649:23:0;;33757:1;;33728:9;-1:-1:-1;;;33728:9:0;;;;;33676:31;;33694:13;33584:50;33676:31;:::i;:::-;33675:62;;;;:::i;:::-;:83;;;;:::i;:::-;33851:9;;33649:109;;-1:-1:-1;33773:24:0;;33851:9;-1:-1:-1;;;33851:9:0;;;;;33801:29;;-1:-1:-1;;;33819:11:0;;;;33801:15;:29;:::i;:::-;33800:60;;;;:::i;:::-;33773:87;-1:-1:-1;33875:20:0;33934:34;33773:87;33934:15;:34;:::i;:::-;33898:71;;:15;:71;:::i;:::-;33875:94;-1:-1:-1;33988:16:0;;33984:74;;34038:4;34025:17;;33984:74;34079:10;34072:17;;;;;;;;;33190:1592;34153:1;34126:24;34144:4;34126:9;:24::i;:::-;:28;34122:128;;;34175:22;34181:7;34190:6;34175:5;:22::i;:::-;-1:-1:-1;34229:5:0;34122:128;34264:23;34290:24;34308:4;34290:9;:24::i;:::-;34408:9;;34264:50;;-1:-1:-1;34329:23:0;;34437:1;;34408:9;-1:-1:-1;;;34408:9:0;;;;;34356:31;;34374:13;34264:50;34356:31;:::i;:::-;34355:62;;;;:::i;:::-;:83;;;;:::i;:::-;34531:9;;34329:109;;-1:-1:-1;34453:24:0;;34531:9;-1:-1:-1;;;34531:9:0;;;;;34481:29;;-1:-1:-1;;;34499:11:0;;;;34481:15;:29;:::i;:::-;34480:60;;;;:::i;:::-;34453:87;-1:-1:-1;34555:20:0;34614:34;34453:87;34614:15;:34;:::i;:::-;34578:71;;:15;:71;:::i;:::-;34555:94;-1:-1:-1;34668:16:0;;34664:75;;-1:-1:-1;34718:5:0;;-1:-1:-1;34753:17:0;;-1:-1:-1;;;;34753:17:0;46415:500;46506:16;;;46520:1;46506:16;;;;;;;;46482:21;;46506:16;;;;;;;;;;-1:-1:-1;46506:16:0;46482:40;;46551:4;46533;46538:1;46533:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;46533:23:0;;;:7;;;;;;;;;;:23;;;;46577:15;;:22;;;-1:-1:-1;;;46577:22:0;;;;:15;;;;;:20;;:22;;;;;46533:7;;46577:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46567:4;46572:1;46567:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;46567:32:0;;;:7;;;;;;;;;:32;46642:15;;46610:62;;46627:4;;46642:15;46660:11;46610:8;:62::i;:::-;46683:15;;:224;;-1:-1:-1;;;46683:224:0;;-1:-1:-1;;;;;46683:15:0;;;;:66;;:224;;46764:11;;46683:15;;46834:4;;46861;;46881:15;;46683:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46923:423;47037:15;;47005:62;;47022:4;;-1:-1:-1;;;;;47037:15:0;47055:11;47005:8;:62::i;:::-;47078:15;;47282;;47078:260;;-1:-1:-1;;;47078:260:0;;47150:4;47078:260;;;25143:34:1;25193:18;;;25186:34;;;47078:15:0;25236:18:1;;;25229:34;;;25279:18;;;25272:34;-1:-1:-1;;;;;47282:15:0;;;25322:19:1;;;25315:44;47312:15:0;25375:19:1;;;25368:35;47078:15:0;;;:31;;47117:9;;25077:19:1;;47078:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;206:548:1:-;318:4;347:2;376;365:9;358:21;408:6;402:13;451:6;446:2;435:9;431:18;424:34;476:1;486:140;500:6;497:1;494:13;486:140;;;595:14;;;591:23;;585:30;561:17;;;580:2;557:26;550:66;515:10;;486:140;;;490:3;675:1;670:2;661:6;650:9;646:22;642:31;635:42;745:2;738;734:7;729:2;721:6;717:15;713:29;702:9;698:45;694:54;686:62;;;;206:548;;;;:::o;759:131::-;-1:-1:-1;;;;;834:31:1;;824:42;;814:70;;880:1;877;870:12;895:315;963:6;971;1024:2;1012:9;1003:7;999:23;995:32;992:52;;;1040:1;1037;1030:12;992:52;1079:9;1066:23;1098:31;1123:5;1098:31;:::i;:::-;1148:5;1200:2;1185:18;;;;1172:32;;-1:-1:-1;;;895:315:1:o;1620:180::-;1679:6;1732:2;1720:9;1711:7;1707:23;1703:32;1700:52;;;1748:1;1745;1738:12;1700:52;-1:-1:-1;1771:23:1;;1620:180;-1:-1:-1;1620:180:1:o;1805:456::-;1882:6;1890;1898;1951:2;1939:9;1930:7;1926:23;1922:32;1919:52;;;1967:1;1964;1957:12;1919:52;2006:9;1993:23;2025:31;2050:5;2025:31;:::i;:::-;2075:5;-1:-1:-1;2132:2:1;2117:18;;2104:32;2145:33;2104:32;2145:33;:::i;:::-;1805:456;;2197:7;;-1:-1:-1;;;2251:2:1;2236:18;;;;2223:32;;1805:456::o;2700:247::-;2759:6;2812:2;2800:9;2791:7;2787:23;2783:32;2780:52;;;2828:1;2825;2818:12;2780:52;2867:9;2854:23;2886:31;2911:5;2886:31;:::i;3160:118::-;3246:5;3239:13;3232:21;3225:5;3222:32;3212:60;;3268:1;3265;3258:12;3283:382;3348:6;3356;3409:2;3397:9;3388:7;3384:23;3380:32;3377:52;;;3425:1;3422;3415:12;3377:52;3464:9;3451:23;3483:31;3508:5;3483:31;:::i;:::-;3533:5;-1:-1:-1;3590:2:1;3575:18;;3562:32;3603:30;3562:32;3603:30;:::i;:::-;3652:7;3642:17;;;3283:382;;;;;:::o;3670:529::-;3747:6;3755;3763;3816:2;3804:9;3795:7;3791:23;3787:32;3784:52;;;3832:1;3829;3822:12;3784:52;3871:9;3858:23;3890:31;3915:5;3890:31;:::i;:::-;3940:5;-1:-1:-1;3997:2:1;3982:18;;3969:32;4010:33;3969:32;4010:33;:::i;:::-;4062:7;-1:-1:-1;4121:2:1;4106:18;;4093:32;4134:33;4093:32;4134:33;:::i;:::-;4186:7;4176:17;;;3670:529;;;;;:::o;4204:156::-;4270:20;;4330:4;4319:16;;4309:27;;4299:55;;4350:1;4347;4340:12;4299:55;4204:156;;;:::o;4365:464::-;4450:6;4458;4466;4474;4482;4535:3;4523:9;4514:7;4510:23;4506:33;4503:53;;;4552:1;4549;4542:12;4503:53;4575:27;4592:9;4575:27;:::i;:::-;4565:37;;4621:36;4653:2;4642:9;4638:18;4621:36;:::i;:::-;4611:46;;4676:36;4708:2;4697:9;4693:18;4676:36;:::i;:::-;4666:46;;4731:36;4763:2;4752:9;4748:18;4731:36;:::i;:::-;4721:46;;4786:37;4818:3;4807:9;4803:19;4786:37;:::i;:::-;4776:47;;4365:464;;;;;;;;:::o;5337:388::-;5405:6;5413;5466:2;5454:9;5445:7;5441:23;5437:32;5434:52;;;5482:1;5479;5472:12;5434:52;5521:9;5508:23;5540:31;5565:5;5540:31;:::i;:::-;5590:5;-1:-1:-1;5647:2:1;5632:18;;5619:32;5660:33;5619:32;5660:33;:::i;5730:380::-;5809:1;5805:12;;;;5852;;;5873:61;;5927:4;5919:6;5915:17;5905:27;;5873:61;5980:2;5972:6;5969:14;5949:18;5946:38;5943:161;;6026:10;6021:3;6017:20;6014:1;6007:31;6061:4;6058:1;6051:15;6089:4;6086:1;6079:15;5943:161;;5730:380;;;:::o;6115:356::-;6317:2;6299:21;;;6336:18;;;6329:30;6395:34;6390:2;6375:18;;6368:62;6462:2;6447:18;;6115:356::o;6476:127::-;6537:10;6532:3;6528:20;6525:1;6518:31;6568:4;6565:1;6558:15;6592:4;6589:1;6582:15;6608:168;6681:9;;;6712;;6729:15;;;6723:22;;6709:37;6699:71;;6750:18;;:::i;6781:127::-;6842:10;6837:3;6833:20;6830:1;6823:31;6873:4;6870:1;6863:15;6897:4;6894:1;6887:15;6913:120;6953:1;6979;6969:35;;6984:18;;:::i;:::-;-1:-1:-1;7018:9:1;;6913:120::o;8263:184::-;8333:6;8386:2;8374:9;8365:7;8361:23;8357:32;8354:52;;;8402:1;8399;8392:12;8354:52;-1:-1:-1;8425:16:1;;8263:184;-1:-1:-1;8263:184:1:o;9069:406::-;9271:2;9253:21;;;9310:2;9290:18;;;9283:30;9349:34;9344:2;9329:18;;9322:62;-1:-1:-1;;;9415:2:1;9400:18;;9393:40;9465:3;9450:19;;9069:406::o;11363:148::-;11451:4;11430:12;;;11444;;;11426:31;;11469:13;;11466:39;;;11485:18;;:::i;13573:125::-;13638:9;;;13659:10;;;13656:36;;;13672:18;;:::i;14867:401::-;15069:2;15051:21;;;15108:2;15088:18;;;15081:30;15147:34;15142:2;15127:18;;15120:62;-1:-1:-1;;;15213:2:1;15198:18;;15191:35;15258:3;15243:19;;14867:401::o;15273:399::-;15475:2;15457:21;;;15514:2;15494:18;;;15487:30;15553:34;15548:2;15533:18;;15526:62;-1:-1:-1;;;15619:2:1;15604:18;;15597:33;15662:3;15647:19;;15273:399::o;16863:128::-;16930:9;;;16951:11;;;16948:37;;;16965:18;;:::i;18226:209::-;-1:-1:-1;;18390:38:1;;;;18372:57;;18360:2;18345:18;;18226:209::o;19828:245::-;19895:6;19948:2;19936:9;19927:7;19923:23;19919:32;19916:52;;;19964:1;19961;19954:12;19916:52;19996:9;19990:16;20015:28;20037:5;20015:28;:::i;22032:165::-;22070:1;22104:4;22101:1;22097:12;22128:3;22118:37;;22135:18;;:::i;:::-;22187:3;22180:4;22177:1;22173:12;22169:22;22164:27;;;22032:165;;;;:::o;22202:151::-;22292:4;22285:12;;;22271;;;22267:31;;22310:14;;22307:40;;;22327:18;;:::i;23429:127::-;23490:10;23485:3;23481:20;23478:1;23471:31;23521:4;23518:1;23511:15;23545:4;23542:1;23535:15;23561:251;23631:6;23684:2;23672:9;23663:7;23659:23;23655:32;23652:52;;;23700:1;23697;23690:12;23652:52;23732:9;23726:16;23751:31;23776:5;23751:31;:::i;23817:980::-;24079:4;24127:3;24116:9;24112:19;24158:6;24147:9;24140:25;24184:2;24222:6;24217:2;24206:9;24202:18;24195:34;24265:3;24260:2;24249:9;24245:18;24238:31;24289:6;24324;24318:13;24355:6;24347;24340:22;24393:3;24382:9;24378:19;24371:26;;24432:2;24424:6;24420:15;24406:29;;24453:1;24463:195;24477:6;24474:1;24471:13;24463:195;;;24542:13;;-1:-1:-1;;;;;24538:39:1;24526:52;;24633:15;;;;24598:12;;;;24574:1;24492:9;24463:195;;;-1:-1:-1;;;;;;;24714:32:1;;;;24709:2;24694:18;;24687:60;-1:-1:-1;;;24778:3:1;24763:19;24756:35;24675:3;23817:980;-1:-1:-1;;;23817:980:1:o;25414:306::-;25502:6;25510;25518;25571:2;25559:9;25550:7;25546:23;25542:32;25539:52;;;25587:1;25584;25577:12;25539:52;25616:9;25610:16;25600:26;;25666:2;25655:9;25651:18;25645:25;25635:35;;25710:2;25699:9;25695:18;25689:25;25679:35;;25414:306;;;;;:::o

Swarm Source

ipfs://3463b6adb0f5bf100b1da9fd0dbdc7128ee6a8783918d4f3b161464e1283f5ca
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.