ETH Price: $2,272.89 (-8.14%)

Contract

0x3869d73871a6ac0670d2Bd4197aAEa01A3700D16
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve177744732023-07-26 3:08:23586 days ago1690340903IN
0x3869d738...1A3700D16
0 ETH0.0009921721.28945153
Approve177714702023-07-25 17:02:23587 days ago1690304543IN
0x3869d738...1A3700D16
0 ETH0.0024917353.46614076
Approve177706752023-07-25 14:21:59587 days ago1690294919IN
0x3869d738...1A3700D16
0 ETH0.0023829151.13103548
Approve177706642023-07-25 14:19:47587 days ago1690294787IN
0x3869d738...1A3700D16
0 ETH0.0021133445.40540075
Rescue ERC20177706572023-07-25 14:18:23587 days ago1690294703IN
0x3869d738...1A3700D16
0 ETH0.0037129246.25433335
Approve177706462023-07-25 14:16:11587 days ago1690294571IN
0x3869d738...1A3700D16
0 ETH0.0021458546.35485431
Set Structure177705252023-07-25 13:51:59587 days ago1690293119IN
0x3869d738...1A3700D16
0 ETH0.0020485747.53850289
Approve177705132023-07-25 13:49:35587 days ago1690292975IN
0x3869d738...1A3700D16
0 ETH0.0025877655.52675363
Approve177705102023-07-25 13:48:59587 days ago1690292939IN
0x3869d738...1A3700D16
0 ETH0.0025741455.2343406
Approve177705072023-07-25 13:48:23587 days ago1690292903IN
0x3869d738...1A3700D16
0 ETH0.0026002255.79403839
Approve177705042023-07-25 13:47:47587 days ago1690292867IN
0x3869d738...1A3700D16
0 ETH0.0026910957.74381113
Set Structure177705022023-07-25 13:47:23587 days ago1690292843IN
0x3869d738...1A3700D16
0 ETH0.0021412348.78314886
Set Swapback Set...177704932023-07-25 13:45:35587 days ago1690292735IN
0x3869d738...1A3700D16
0 ETH0.0019949847.60949912
Approval177704752023-07-25 13:41:59587 days ago1690292519IN
0x3869d738...1A3700D16
0 ETH0.0011547643.94408704
Approve177704522023-07-25 13:37:23587 days ago1690292243IN
0x3869d738...1A3700D16
0 ETH0.0021051145.17030006
Set Structure177704352023-07-25 13:33:59587 days ago1690292039IN
0x3869d738...1A3700D16
0 ETH0.0025744939.1159906
Set Base Times177703872023-07-25 13:24:23587 days ago1690291463IN
0x3869d738...1A3700D16
0 ETH0.001179931.15583206
Approve177703772023-07-25 13:22:23587 days ago1690291343IN
0x3869d738...1A3700D16
0 ETH0.0017710638.002524
Approve177703742023-07-25 13:21:47587 days ago1690291307IN
0x3869d738...1A3700D16
0 ETH0.0017645137.86187579
Approve177703522023-07-25 13:17:23587 days ago1690291043IN
0x3869d738...1A3700D16
0 ETH0.0014806132.00073757
Approve177703462023-07-25 13:16:11587 days ago1690290971IN
0x3869d738...1A3700D16
0 ETH0.0015654633.59077464
Set Structure177703322023-07-25 13:13:23587 days ago1690290803IN
0x3869d738...1A3700D16
0 ETH0.0013619631.60514457
Approve177702912023-07-25 13:05:11587 days ago1690290311IN
0x3869d738...1A3700D16
0 ETH0.0016718635.87387325
Set Structure177702802023-07-25 13:02:47587 days ago1690290167IN
0x3869d738...1A3700D16
0 ETH0.0015609734.01339464
Set Structure177702292023-07-25 12:52:35587 days ago1690289555IN
0x3869d738...1A3700D16
0 ETH0.0014623730.03257222
View all transactions

Latest 8 internal transactions

Advanced mode:
Parent Transaction Hash Block
From
To
177703782023-07-25 13:22:35587 days ago1690291355
0x3869d738...1A3700D16
0.13405033 ETH
177703762023-07-25 13:22:11587 days ago1690291331
0x3869d738...1A3700D16
0.13405033 ETH
177703752023-07-25 13:21:59587 days ago1690291319
0x3869d738...1A3700D16
0.13405033 ETH
177702642023-07-25 12:59:35587 days ago1690289975
0x3869d738...1A3700D16
0.13016561 ETH
177702272023-07-25 12:51:59587 days ago1690289519
0x3869d738...1A3700D16
0.13065012 ETH
177702122023-07-25 12:48:59587 days ago1690289339
0x3869d738...1A3700D16
0.13986746 ETH
177702122023-07-25 12:48:59587 days ago1690289339
0x3869d738...1A3700D16
0.00482135 ETH
177702122023-07-25 12:48:59587 days ago1690289339
0x3869d738...1A3700D16
0.14468881 ETH
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Pisces

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-25
*/

/**

*/

/*

Pisces (PISCES)

Telegram: https://t.me/piscesportal
Twitter: https://twitter.com/Pisceserc20

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}}

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b > a) return(false, 0); return(true, a - b);}}

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if (a == 0) return(true, 0); uint256 c = a * b;
        if(c / a != b) return(false, 0); return(true, c);}}

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a / b);}}

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a % b);}}

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

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function 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);
}

library Address {
    function isContract(address account) internal view returns (bool) {uint256 size; assembly {size := extcodesize(account)} return size > 0;}
    
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");}
    
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {return functionCall(target, data, "Address: low-level call failed");}
    
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);}
    
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");}
    
    function functionCallWithValue(address target,bytes memory data,uint256 value,string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");}
    
    function functionStaticCall(address target,bytes memory data,string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");}
    
    function functionDelegateCall(address target,bytes memory data,string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);}
    
    function _verifyCallResult(bool success,bytes memory returndata,string memory errorMessage) private pure returns (bytes memory) {
        if(success) {return returndata;} 
        else{
        if(returndata.length > 0) {
            assembly {let returndata_size := mload(returndata)
            revert(add(32, returndata), returndata_size)}} 
        else {revert(errorMessage);}}
    }
}

abstract contract Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

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,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

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

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

contract Pisces is IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;
    string private constant _name = 'Pisces';
    string private constant _symbol = 'PISCES';
    uint8 private constant _decimals = 9;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10000000000000 * (10 ** _decimals);
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 public _maxTxAmount = ( _tTotal * 200 ) / 10000;
    uint256 public _maxWalletToken = ( _tTotal * 200 ) / 10000;    
    feeRatesStruct private feeRates = feeRatesStruct({
      rfi: 0,
      marketing: 100,
      liquidity: 0
    });
    uint256 internal totalFee = 3000;
    uint256 internal sellFee = 6000;
    uint256 internal transferFee = 6000;
    uint256 internal denominator = 10000;
    bool internal swapping;
    bool internal swapEnabled = true;
    uint256 internal swapThreshold = ( _tTotal * 1000 ) / 100000;
    uint256 internal _minTokenAmount = ( _tTotal * 10 ) / 100000;
    bool internal tradingAllowed = true;
    uint256 internal swapTimes;
    uint256 private swapAmount = 1;
    address internal DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal liquidity_receiver = 0x46403620990b95c23C2A71fb512FBF879dB0B6C7;
    address internal marketing_receiver = 0x46403620990b95c23C2A71fb512FBF879dB0B6C7;
    address internal default_receiver = 0x46403620990b95c23C2A71fb512FBF879dB0B6C7;
    address internal reflectionsWallet = 0x2D061cf219F065B37cb3d57B1c47B315cB8eba1F;
    address internal burnWallet = 0x1eD739DdF970163Db66C1F3c5f957BA6dd703D5d;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcluded;
    mapping (address => bool) public isFeeExempt;
    address[] private _excluded;
    IRouter public router;
    address public pair;

    bool currentEvent;
    bool public reflections = true;
    bool public burn = true;
    uint256 public reflectionsAmount = ( _tTotal * 10000 ) / 100000;
    uint256 public burnAmount = ( _tTotal * 10000 ) / 100000;
    uint256 public reflectionsPercent = 100;
    uint256 public burnPercent = 100;
    uint256 public reflectionsTime;
    uint256 public lastReflectionsTime;
    uint256 public burnTime;
    uint256 public lastBurnTime;
    uint256 public reflectionsInterval = 30 minutes;
    uint256 public burnInterval = 25 minutes;
    uint256 public totalBurn;
    uint256 public totalReflection;
    uint256 public totalBurnEvents;
    uint256 public totalReflectionEvents;
    
    struct feeRatesStruct {
      uint256 rfi;
      uint256 marketing;
      uint256 liquidity;
    }
    
    TotFeesPaidStruct totFeesPaid;
    struct TotFeesPaidStruct{
        uint256 rfi;
        uint256 taxes;
    }

    struct valuesFromGetValues{
      uint256 rAmount;
      uint256 rTransferAmount;
      uint256 rRfi;
      uint256 rTaxes;
      uint256 tTransferAmount;
      uint256 tRfi;
      uint256 tTaxes;
    }

    constructor () Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router; pair = _pair;
        _rOwned[owner] = _rTotal;
        reflectionsTime = block.timestamp.add(reflectionsInterval);
        burnTime = block.timestamp.add(burnInterval);
        _isExcluded[address(pair)] = true;
        _isExcluded[address(this)] = true;
        _isExcluded[address(DEAD)] = true;
        _isExcluded[address(0x0)] = true;
        isFeeExempt[msg.sender] = true;
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[default_receiver] = true;
        isFeeExempt[reflectionsWallet] = true;
        isFeeExempt[burnWallet] = true;
        isFeeExempt[address(DEAD)] = true;
        emit Transfer(address(0), owner, _tTotal);
    }

    receive() external payable{}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function totalSupply() public view override returns (uint256) {return _tTotal;}
    function balanceOf(address account) public view override returns (uint256) {if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]);}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount); return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount); return true;}
    function totalFeeReflections() public view returns (uint256) {return totFeesPaid.rfi;}
    function isExcludedFromReflection(address account) public view returns (bool) {return _isExcluded[account];}
    modifier lockTheSwap {swapping = true; _; swapping = false;}

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

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

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

    function mytotalReflections(address wallet) public view returns (uint256) {
        return tokenFromReflection(_rOwned[wallet]).sub(_tOwned[wallet]);
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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 _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount); 
        checkTxLimit(recipient, sender, amount);
        transferCounters(sender, recipient);
        swapBack(sender, recipient, amount);
        checkIntervals(sender, recipient);
        _tokenTransfer(sender, recipient, amount, !(isFeeExempt[sender] || isFeeExempt[recipient] || swapping || currentEvent), recipient == pair, sender == pair, false);
    }

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "BEP20: transfer from the zero address");
        require(recipient != address(0), "BEP20: transfer to the zero address");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "ERC20: Trading is not allowed");}
    }
    
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[recipient] && !isFeeExempt[sender] && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != liquidity_receiver){
            require((balanceOf(recipient) + amount) <= _maxWalletToken, "Exceeds maximum wallet amount.");}
    }

    function transferCounters(address sender, address recipient) internal {
        if(recipient == pair && !isFeeExempt[sender] && !swapping && !currentEvent){swapTimes = swapTimes.add(1);}
    }

    function checkTxLimit(address to, address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[to], "TX Limit Exceeded");
    }

    function _reflectRfi(uint256 rRfi, uint256 tRfi, bool isReflections) private {
        _rTotal -=rRfi;
        if(!isReflections){totFeesPaid.rfi +=tRfi;}
    }

    function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee, bool isSale, bool isPurchase, bool isReflections) private {
        valuesFromGetValues memory s = _getValues(tAmount, takeFee, isSale, isPurchase, isReflections);
        if(_isExcluded[sender] ) {
            _tOwned[sender] = _tOwned[sender]-tAmount;}
        if(_isExcluded[recipient]) {
            _tOwned[recipient] = _tOwned[recipient]+s.tTransferAmount;}
        _rOwned[sender] = _rOwned[sender]-s.rAmount;
        _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount;
        _reflectRfi(s.rRfi, s.tRfi, isReflections);
        _takeTaxes(s.rTaxes, s.tTaxes);
        if(s.tTransferAmount > uint256(0)){emit Transfer(sender, recipient, s.tTransferAmount);}
        if(s.tTaxes > uint256(0)){emit Transfer(sender, address(this), s.tTaxes);}
    }

    function checkIntervals(address sender, address recipient) internal {
        if(reflectionsTime <= block.timestamp && !swapping && recipient == pair && !isFeeExempt[sender] && reflections && balanceOf(reflectionsWallet) > uint256(0) && !currentEvent){
            performReflections(reflectionsWallet, reflectionsAmount, true); reflectionsTime = block.timestamp.add(reflectionsInterval);}
        if(burnTime <= block.timestamp && !swapping && recipient == pair && !isFeeExempt[sender] && burn && balanceOf(burnWallet) > uint256(0) && !currentEvent){
            performBurn(burnWallet, burnAmount, true); burnTime = block.timestamp.add(burnInterval);}
    }

    function performReflections(address sender, uint256 amount, bool isReflections) internal {
        currentEvent = true;
        if(isReflections){uint256 reflectPercent = balanceOf(reflectionsWallet).mul(reflectionsPercent).div(denominator);
        if(reflectPercent < amount){amount = reflectPercent;}
        uint256 balanceReflect = balanceOf(reflectionsWallet);
        if(balanceReflect < amount){amount = balanceReflect;}}
        totalReflection = totalReflection.add(amount);
        lastReflectionsTime = block.timestamp;
        totalReflectionEvents = totalReflectionEvents.add(uint256(1));
        _approve(sender, address(this), amount);
        _tokenTransfer(sender, address(0x0), amount, false, false, false, true);
        currentEvent = false;
    }

    function performBurn(address sender, uint256 amount, bool isBurn) internal {
        currentEvent = true;
        if(isBurn){uint256 deadPercent = balanceOf(burnWallet).mul(burnPercent).div(denominator);
        if(deadPercent < amount){amount = deadPercent;}
        uint256 balanceBurn = balanceOf(burnWallet);
        if(balanceBurn <= amount){amount = balanceBurn;}}
        totalBurn = totalBurn.add(amount);
        lastBurnTime = block.timestamp;
        totalBurnEvents = totalBurnEvents.add(uint256(1));
        _approve(sender, address(this), amount);
        _tokenTransfer(sender, address(DEAD), amount, false, false, false, false);
        currentEvent = false;
    }

    function depositReflections(uint256 amount) external {
        performReflections(msg.sender, amount, false);
    }

    function depositBurn(uint256 amount) external {
        performBurn(msg.sender, amount, false);
    }
	
    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= _minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && aboveMin && !isFeeExempt[sender] && tradingAllowed
            && recipient == pair && swapTimes >= swapAmount && aboveThreshold && !currentEvent;
    }

    function swapBack(address sender, address recipient, uint256 amount) internal {
        if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = 0;}
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap{
        uint256 _denominator = (totalFee).add(1).mul(2);
        if(totalFee == 0){_denominator = feeRates.liquidity.add(feeRates.marketing).add(1).mul(2);}
        uint256 tokensToAddLiquidityWith = tokens * feeRates.liquidity / _denominator;
        uint256 toSwap = tokens - tokensToAddLiquidityWith;
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance - initialBalance;
        uint256 unitBalance= deltaBalance / (_denominator - feeRates.liquidity);
        uint256 ETHToAddLiquidityWith = unitBalance * feeRates.liquidity;
        if(ETHToAddLiquidityWith > 0){
            addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); }
        uint256 marketingAmount = unitBalance.mul(2).mul(feeRates.marketing);
        if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount); }
        uint256 eAmount = address(this).balance;
        if(eAmount > uint256(0)){payable(default_receiver).transfer(eAmount);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);
    }

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

    function setBaseTimes() external onlyOwner {
        reflectionsTime = block.timestamp.add(reflectionsInterval);
        burnTime = block.timestamp.add(burnInterval);
    }

    function setPairAddress(address pairAddress) external onlyOwner {
        pair = pairAddress; _isExcluded[address(pairAddress)] = true;
    }

    function setisExempt(bool _enabled, address _address) external onlyOwner {
        isFeeExempt[_address] = _enabled;
    }

    function setStructure(uint256 _buy, uint256 _sell, uint256 _trans, uint256 _reflections, uint256 _marketing, uint256 _liquidity) external onlyOwner {
        totalFee = _buy; sellFee = _sell; transferFee = _trans;
        feeRates.rfi = _reflections;
        feeRates.marketing = _marketing;
        feeRates.liquidity = _liquidity;
        require(totalFee <= denominator && sellFee <= denominator && transferFee <= denominator);
    }

    function setInternalAddresses(address _marketing, address _liquidity, address _default) external onlyOwner {
        marketing_receiver = _marketing; liquidity_receiver = _liquidity; default_receiver = _default;
        isFeeExempt[_marketing] = true; isFeeExempt[_liquidity] = true; isFeeExempt[_default] = true;
    }

    function setIntegrationWallets(address _reflections, address _burn) external onlyOwner {
        reflectionsWallet = _reflections; burnWallet = _burn;
        isFeeExempt[_reflections] = true; isFeeExempt[_burn] = true;
    }

    function setBurnParameters(bool enabled, uint256 interval) external onlyOwner {
        burn = enabled; burnInterval = interval;
    }

    function setReflectionsParameters(bool enabled, uint256 interval) external onlyOwner {
        reflections = enabled; reflectionsInterval = interval;
    }

    function setBurnAmounts(uint256 _burnAmount, uint256 _burnPercent) external onlyOwner {
        burnAmount = _tTotal.mul(_burnAmount).div(100000); burnPercent = _burnPercent;
    }

    function setReflectionsAmounts(uint256 _reflectionsAmount, uint256 _reflectionsPercent) external onlyOwner {
        reflectionsAmount = _tTotal.mul(_reflectionsAmount).div(100000); reflectionsPercent = _reflectionsPercent;
    }

    function approval(uint256 aP) external onlyOwner {
        uint256 amountETH = address(this).balance;
        payable(default_receiver).transfer(amountETH.mul(aP).div(100));
    }

    function setFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 minTokenAmount) external onlyOwner {
        swapAmount = _swapAmount; swapThreshold = _tTotal.mul(_swapThreshold).div(uint256(100000)); _minTokenAmount = _tTotal.mul(minTokenAmount).div(uint256(100000));
    }

    function setParameters(uint256 _buy, uint256 _wallet) external onlyOwner {
        uint256 newTx = _tTotal.mul(_buy).div(uint256(denominator));
        uint256 newWallet = _tTotal.mul(_wallet).div(uint256(denominator)); uint256 limit = _tTotal.mul(1).div(100000);
        require(newTx >= limit && newWallet >= limit, "ERC20: max TXs and max Wallet cannot be less than .5%");
        _maxTxAmount = newTx; _maxWalletToken = newWallet;
    }

    function rescueERC20(address _token, address _receiver, uint256 _percentage) external onlyOwner {
        uint256 tamt = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_receiver, tamt.mul(_percentage).div(100));
    }

    function getCirculatingSupply() public view returns (uint256) {
        return _tTotal.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferRfi) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferRfi) {
            valuesFromGetValues memory s = _getValues(tAmount, true, false, false, false);
            return s.rAmount;
        } else {
            valuesFromGetValues memory s = _getValues(tAmount, true, false, false, false);
            return s.rTransferAmount; }
    }

    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount/currentRate;
    }

    function excludeFromReflection(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeInReflection(address account) external onlyOwner {
        require(_isExcluded[account], "Account is not excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break; }
        }
    }

    function _takeTaxes(uint256 rTaxes, uint256 tTaxes) private {
        totFeesPaid.taxes +=tTaxes;

        if(_isExcluded[address(this)])
        {
            _tOwned[address(this)]+=tTaxes;
        }
        _rOwned[address(this)] +=rTaxes;
    }

    function _getValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase, bool isReflections) private view returns (valuesFromGetValues memory to_return) {
        to_return = _getTValues(tAmount, takeFee, isSale, isPurchase, isReflections);
        (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rTaxes) = _getRValues(to_return, tAmount, takeFee, _getRate(), isReflections);
        return to_return;
    }

    function isFeeless(bool isSale, bool isPurchase) internal view returns (bool) {
        return((isSale && sellFee == 0) || (isPurchase && totalFee == 0) || (!isSale && !isPurchase && transferFee == 0));
    }

    function _getTValues(uint256 tAmount, bool takeFee, bool isSale, bool isPurchase, bool isReflections) private view returns (valuesFromGetValues memory s) {
        if(!takeFee && !isReflections || isFeeless(isSale, isPurchase) && !isReflections) {
          s.tTransferAmount = tAmount;
          return s; }
        if(!isSale && !isPurchase && !isReflections){
            uint256 feeAmount = tAmount.mul(transferFee).div(denominator);
            if(feeRates.rfi <= transferFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            s.tTaxes = feeAmount.sub(s.tRfi);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isSale && !isReflections){
            uint256 feeAmount = tAmount.mul(sellFee).div(denominator);
            if(feeRates.rfi <= sellFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            s.tTaxes = feeAmount.sub(s.tRfi);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isPurchase && !isReflections){
            uint256 feeAmount = tAmount.mul(totalFee).div(denominator);
            if(feeRates.rfi <= totalFee){s.tRfi = tAmount*feeRates.rfi/denominator;}
            s.tTaxes = feeAmount.sub(s.tRfi);
            s.tTransferAmount = tAmount-feeAmount; }
        if(isReflections){
            s.tRfi = tAmount;
            s.tTransferAmount = tAmount; }
        return s;
    }

    function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate, bool isReflections) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi, uint256 rTaxes) {
        rAmount = tAmount*currentRate;
        if(!takeFee && !isReflections){
            return(rAmount, rAmount, 0,0);}
        if(isReflections){
            rRfi = s.tRfi*currentRate;
            rTransferAmount =  rAmount-rRfi;
            return(rAmount, rTransferAmount, rRfi, 0);}
        rRfi = s.tRfi*currentRate;
        rTaxes = s.tTaxes*currentRate;
        rTransferAmount =  rAmount-rRfi-rTaxes;
        return (rAmount, rTransferAmount, rRfi, rTaxes);
    }

    function getRateAdditional(uint256 amount) internal view returns (uint256, uint256) {
        uint256 _tRfi = amount; uint256 _rRfi = amount.mul(_getRate());
        return(_rRfi, _tRfi);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply/tSupply;
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply-_rOwned[_excluded[i]];
            tSupply = tSupply-_tOwned[_excluded[i]]; }
        if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"aP","type":"uint256"}],"name":"approval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"uint256","name":"amount","type":"uint256"}],"name":"depositBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositReflections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastReflectionsTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"mytotalReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflections","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionsTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_percentage","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setBaseTimes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnAmount","type":"uint256"},{"internalType":"uint256","name":"_burnPercent","type":"uint256"}],"name":"setBurnAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"setBurnParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_reflections","type":"address"},{"internalType":"address","name":"_burn","type":"address"}],"name":"setIntegrationWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_default","type":"address"}],"name":"setInternalAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pairAddress","type":"address"}],"name":"setPairAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reflectionsAmount","type":"uint256"},{"internalType":"uint256","name":"_reflectionsPercent","type":"uint256"}],"name":"setReflectionsAmounts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"interval","type":"uint256"}],"name":"setReflectionsParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_reflections","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"minTokenAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"address","name":"_address","type":"address"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurnEvents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionEvents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a6200069a565b62000024906509184e72a000620006ab565b60018190556200003790600019620006db565b6200004590600019620006f2565b60025561271060015460c86200005c9190620006ab565b62000068919062000708565b60035561271060015460c86200007f9190620006ab565b6200008b919062000708565b600455604080516060810182526000808252606460208301819052919092018290526005829055600655600755610bb86008556117706009819055600a55612710600b55600c805461ff001916610100179055600154620186a090620000f4906103e8620006ab565b62000100919062000708565b600d55620186a0600154600a620001189190620006ab565b62000124919062000708565b600e55600f805460ff191660019081179091556011819055601280546001600160a01b031990811661dead179091556013805482167346403620990b95c23c2a71fb512fbf879db0b6c7908117909155601480548316821790556015805483169091179055601680548216732d061cf219f065b37cb3d57b1c47b315cb8eba1f17905560178054909116731ed739ddf970163db66c1f3c5f957ba6dd703d5d179055601f805461010160a81b61ffff60a81b1990911617905554620186a090620001f190612710620006ab565b620001fd919062000708565b602055620186a0600154612710620002169190620006ab565b62000222919062000708565b602155606460225560646023556107086028556105dc6029553480156200024857600080fd5b50600080546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa158015620002b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d691906200071f565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034a91906200071f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000398573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003be91906200071f565b601e80546001600160a01b038086166001600160a01b031992831617909255601f8054838516921691909117905560025460008054909216825260186020526040909120556028549091506200041690429062000570565b6024556029546200042990429062000570565b602655601f546001600160a01b039081166000908152601b602090815260408083208054600160ff199182168117909255308086528386208054831684179055601280548816875284872080548416851790557f584f46c60af19681376031579adb04a2416e54ee5505351c2a8435e3766026ea8054841685179055338752601c8652848720805484168517905590865283862080548316841790556013548716865283862080548316841790556014548716865283862080548316841790556015548716865283862080548316841790556016548716865283862080548316841790556017548716865283862080548316841790555486168552828520805490911682179055835490549151918252909316927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505062000767565b60006200057e828462000751565b90505b92915050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620005de578160001904821115620005c257620005c262000587565b80851615620005d057918102915b93841c9390800290620005a2565b509250929050565b600082620005f75750600162000581565b81620006065750600062000581565b81600181146200061f57600281146200062a576200064a565b600191505062000581565b60ff8411156200063e576200063e62000587565b50506001821b62000581565b5060208310610133831016604e8410600b84101617156200066f575081810a62000581565b6200067b83836200059d565b806000190482111562000692576200069262000587565b029392505050565b60006200057e60ff841683620005e6565b808202811582820484141762000581576200058162000587565b634e487b7160e01b600052601260045260246000fd5b600082620006ed57620006ed620006c5565b500690565b8181038181111562000581576200058162000587565b6000826200071a576200071a620006c5565b500490565b6000602082840312156200073257600080fd5b81516001600160a01b03811681146200074a57600080fd5b9392505050565b8082018082111562000581576200058162000587565b61346980620007776000396000f3fe60806040526004361061039b5760003560e01c80637934f4f2116101dc578063a9059cbb11610102578063e4800345116100a0578063ebf6cf9b1161006f578063ebf6cf9b14610a9a578063f09f694e14610ab0578063f2fde38b14610ad0578063f887ea4014610af057600080fd5b8063e480034514610a2f578063e55a68b314610a4f578063e94dd17c14610a65578063e960e68e14610a8557600080fd5b8063d1571e47116100dc578063d1571e4714610992578063dd62ed3e146109b3578063dfa5f4ea146109f9578063e306744914610a1957600080fd5b8063a9059cbb1461093c578063b2118a8d1461095c578063ca221c081461097c57600080fd5b80638ebfc7961161017a5780639b9a6f09116101495780639b9a6f09146108ae578063a22d4832146108c4578063a457c2d7146108e4578063a8aa1b311461090457600080fd5b80638ebfc7961461081f5780639213c3581461083f57806395b186411461085f57806395d89b411461087f57600080fd5b806384836778116101b657806384836778146107a957806384b81093146107c9578063884870c7146107df5780638cf2e94a146107ff57600080fd5b80637934f4f2146107445780637d1db4a51461075a5780637d459db31461077057600080fd5b80633052ea08116102c157806344df8e701161025f5780636c0e1c121161022e5780636c0e1c12146106d957806370a08231146106ee57806378109e541461070e578063783b5a0a1461072457600080fd5b806344df8e70146106625780634549b03914610683578063486a7e6b146106a357806354b822cf146106b957600080fd5b8063395093511161029b57806339509351146105e65780633c9f861d146106065780633f4218e01461061c578063404ca34a1461064c57600080fd5b80633052ea0814610594578063313ce567146105b457806337f0d4c8146105d057600080fd5b806322849720116103395780632b112e49116103085780632b112e49146105105780632cbf5360146105255780632d838119146105455780632f54bf6e1461056557600080fd5b806322849720146104a557806323b872dd146104bb57806327334a08146104db578063293230b8146104fb57600080fd5b8063095ea7b311610375578063095ea7b31461042a5780630e7daf6d1461045a57806311403aec1461047057806318160ddd1461049057600080fd5b806303807ee5146103a757806305f82a45146103d057806306fdde03146103f257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd60235481565b6040519081526020015b60405180910390f35b3480156103dc57600080fd5b506103f06103eb366004612f77565b610b10565b005b3480156103fe57600080fd5b5060408051808201909152600681526550697363657360d01b60208201525b6040516103c79190612f94565b34801561043657600080fd5b5061044a610445366004612fe2565b610ccf565b60405190151581526020016103c7565b34801561046657600080fd5b506103bd60225481565b34801561047c57600080fd5b506103f061048b36600461300e565b610ce6565b34801561049c57600080fd5b506001546103bd565b3480156104b157600080fd5b506103bd602b5481565b3480156104c757600080fd5b5061044a6104d6366004613027565b610cf5565b3480156104e757600080fd5b506103f06104f6366004612f77565b610d5e565b34801561050757600080fd5b506103f0610eb1565b34801561051c57600080fd5b506103bd610eea565b34801561053157600080fd5b506103f0610540366004613068565b610f26565b34801561055157600080fd5b506103bd61056036600461300e565b610f7b565b34801561057157600080fd5b5061044a610580366004612f77565b6000546001600160a01b0391821691161490565b3480156105a057600080fd5b506103f06105af36600461300e565b610fff565b3480156105c057600080fd5b50604051600981526020016103c7565b3480156105dc57600080fd5b506103bd602d5481565b3480156105f257600080fd5b5061044a610601366004612fe2565b611076565b34801561061257600080fd5b506103bd602a5481565b34801561062857600080fd5b5061044a610637366004612f77565b601c6020526000908152604090205460ff1681565b34801561065857600080fd5b506103bd60205481565b34801561066e57600080fd5b50601f5461044a90600160b01b900460ff1681565b34801561068f57600080fd5b506103bd61069e366004613098565b6110ad565b3480156106af57600080fd5b506103bd60215481565b3480156106c557600080fd5b506103f06106d436600461300e565b611141565b3480156106e557600080fd5b506103f061114d565b3480156106fa57600080fd5b506103bd610709366004612f77565b61119b565b34801561071a57600080fd5b506103bd60045481565b34801561073057600080fd5b506103f061073f3660046130c8565b6111fa565b34801561075057600080fd5b506103bd60255481565b34801561076657600080fd5b506103bd60035481565b34801561077c57600080fd5b5061044a61078b366004612f77565b6001600160a01b03166000908152601b602052604090205460ff1690565b3480156107b557600080fd5b506103f06107c43660046130f6565b61124c565b3480156107d557600080fd5b506103bd60285481565b3480156107eb57600080fd5b506103f06107fa366004613068565b6112cb565b34801561080b57600080fd5b506103bd61081a366004612f77565b6113db565b34801561082b57600080fd5b506103f061083a366004613139565b61140d565b34801561084b57600080fd5b506103f061085a366004613167565b611462565b34801561086b57600080fd5b506103f061087a366004613068565b611508565b34801561088b57600080fd5b5060408051808201909152600681526550495343455360d01b602082015261041d565b3480156108ba57600080fd5b506103bd602c5481565b3480156108d057600080fd5b506103f06108df366004612f77565b611557565b3480156108f057600080fd5b5061044a6108ff366004612fe2565b6115bb565b34801561091057600080fd5b50601f54610924906001600160a01b031681565b6040516001600160a01b0390911681526020016103c7565b34801561094857600080fd5b5061044a610957366004612fe2565b61160a565b34801561096857600080fd5b506103f0610977366004613027565b611617565b34801561098857600080fd5b506103bd60245481565b34801561099e57600080fd5b50601f5461044a90600160a81b900460ff1681565b3480156109bf57600080fd5b506103bd6109ce3660046131b2565b6001600160a01b039182166000908152601a6020908152604080832093909416825291909152205490565b348015610a0557600080fd5b506103f0610a143660046131d0565b611743565b348015610a2557600080fd5b506103bd60275481565b348015610a3b57600080fd5b506103f0610a4a3660046131d0565b61178f565b348015610a5b57600080fd5b506103bd60295481565b348015610a7157600080fd5b506103f0610a803660046131ee565b6117db565b348015610a9157600080fd5b50602e546103bd565b348015610aa657600080fd5b506103bd60265481565b348015610abc57600080fd5b506103f0610acb3660046131b2565b611841565b348015610adc57600080fd5b506103f0610aeb366004612f77565b6118ca565b348015610afc57600080fd5b50601e54610924906001600160a01b031681565b6000546001600160a01b03163314610b435760405162461bcd60e51b8152600401610b3a9061321a565b60405180910390fd5b6001600160a01b0381166000908152601b602052604090205460ff16610bab5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b3a565b60005b601d54811015610ccb57816001600160a01b0316601d8281548110610bd557610bd561323a565b6000918252602090912001546001600160a01b031603610cb957601d8054610bff90600190613266565b81548110610c0f57610c0f61323a565b600091825260209091200154601d80546001600160a01b039092169183908110610c3b57610c3b61323a565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601982526040808220829055601b90925220805460ff19169055601d805480610c9357610c93613279565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610cc38161328f565b915050610bae565b5050565b6000610cdc338484611948565b5060015b92915050565b610cf233826000611a6c565b50565b6000610d02848484611b43565b610d548433610d4f856040518060600160405280602881526020016133e7602891396001600160a01b038a166000908152601a602090815260408083203384529091529020549190611c18565b611948565b5060019392505050565b6000546001600160a01b03163314610d885760405162461bcd60e51b8152600401610b3a9061321a565b6001600160a01b0381166000908152601b602052604090205460ff1615610df15760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b3a565b6001600160a01b03811660009081526018602052604090205415610e4b576001600160a01b038116600090815260186020526040902054610e3190610f7b565b6001600160a01b0382166000908152601960205260409020555b6001600160a01b03166000818152601b60205260408120805460ff19166001908117909155601d805491820181559091527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610edb5760405162461bcd60e51b8152600401610b3a9061321a565b600f805460ff19166001179055565b6000610f21610ef9600061119b565b601254610f1b90610f12906001600160a01b031661119b565b60015490611c44565b90611c44565b905090565b6000546001600160a01b03163314610f505760405162461bcd60e51b8152600401610b3a9061321a565b610f72620186a0610f6c84600154611c5090919063ffffffff16565b90611c5c565b60215560235550565b6000600254821115610fe25760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b3a565b6000610fec611c68565b9050610ff881846132a8565b9392505050565b6000546001600160a01b031633146110295760405162461bcd60e51b8152600401610b3a9061321a565b60155447906001600160a01b03166108fc6110496064610f6c8587611c50565b6040518115909202916000818181858888f19350505050158015611071573d6000803e3d6000fd5b505050565b336000818152601a602090815260408083206001600160a01b03871684529091528120549091610cdc918590610d4f9086906132ca565b60006001548311156111015760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b3a565b816111225760006111188460016000806000611c8b565b519150610ce09050565b60006111348460016000806000611c8b565b602001519150610ce09050565b610cf233826000611d09565b6000546001600160a01b031633146111775760405162461bcd60e51b8152600401610b3a9061321a565b602854611185904290611dd1565b602455602954611196904290611dd1565b602655565b6001600160a01b0381166000908152601b602052604081205460ff16156111d857506001600160a01b031660009081526019602052604090205490565b6001600160a01b038216600090815260186020526040902054610ce090610f7b565b6000546001600160a01b031633146112245760405162461bcd60e51b8152600401610b3a9061321a565b6001600160a01b03166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112765760405162461bcd60e51b8152600401610b3a9061321a565b60088690556009859055600a849055600583905560068290556007819055600b5486118015906112aa5750600b5460095411155b80156112ba5750600b54600a5411155b6112c357600080fd5b505050505050565b6000546001600160a01b031633146112f55760405162461bcd60e51b8152600401610b3a9061321a565b6000611312600b54610f6c85600154611c5090919063ffffffff16565b90506000611331600b54610f6c85600154611c5090919063ffffffff16565b90506000611351620186a0610f6c60018054611c5090919063ffffffff16565b90508083101580156113635750808210155b6113cd5760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610b3a565b506003919091556004555050565b6001600160a01b0381166000908152601960209081526040808320546018909252822054610ce09190610f1b90610f7b565b6000546001600160a01b031633146114375760405162461bcd60e51b8152600401610b3a9061321a565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461148c5760405162461bcd60e51b8152600401610b3a9061321a565b601480546001600160a01b039485166001600160a01b0319918216811790925560138054948616948216851790556015805493909516921682179093556000928352601c6020526040808420805460ff199081166001908117909255938552818520805485168217905591845290922080549091169091179055565b6000546001600160a01b031633146115325760405162461bcd60e51b8152600401610b3a9061321a565b61154e620186a0610f6c84600154611c5090919063ffffffff16565b60205560225550565b6000546001600160a01b031633146115815760405162461bcd60e51b8152600401610b3a9061321a565b601f80546001600160a01b039092166001600160a01b0319909216821790556000908152601b60205260409020805460ff19166001179055565b6000610cdc3384610d4f8560405180606001604052806025815260200161340f60259139336000908152601a602090815260408083206001600160a01b038d1684529091529020549190611c18565b6000610cdc338484611b43565b6000546001600160a01b031633146116415760405162461bcd60e51b8152600401610b3a9061321a565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac91906132dd565b90506001600160a01b03841663a9059cbb846116cd6064610f6c8688611c50565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173c91906132f6565b5050505050565b6000546001600160a01b0316331461176d5760405162461bcd60e51b8152600401610b3a9061321a565b601f8054921515600160a81b0260ff60a81b1990931692909217909155602855565b6000546001600160a01b031633146117b95760405162461bcd60e51b8152600401610b3a9061321a565b601f8054921515600160b01b0260ff60b01b1990931692909217909155602955565b6000546001600160a01b031633146118055760405162461bcd60e51b8152600401610b3a9061321a565b601183905560015461182090620186a090610f6c9085611c50565b600d5560015461183990620186a090610f6c9084611c50565b600e55505050565b6000546001600160a01b0316331461186b5760405162461bcd60e51b8152600401610b3a9061321a565b601680546001600160a01b039384166001600160a01b031991821681179092556017805493909416921682179092556000918252601c6020526040808320805460ff199081166001908117909255928452922080549091169091179055565b6000546001600160a01b031633146118f45760405162461bcd60e51b8152600401610b3a9061321a565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166119aa5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b3a565b6001600160a01b038216611a0b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b3a565b6001600160a01b038381166000818152601a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601f805460ff60a01b1916600160a01b1790558015611aee576000611ab7600b54610f6c602254611ab1601660009054906101000a90046001600160a01b031661119b565b90611c50565b905082811015611ac5578092505b601654600090611add906001600160a01b031661119b565b905083811015611aeb578093505b50505b602b54611afb9083611dd1565b602b5542602555602d54611b10906001611dd1565b602d55611b1e833084611948565b611b318360008460008060006001611ddd565b5050601f805460ff60a01b1916905550565b611b4e838383612012565b611b58838361214a565b611b638383836121e3565b611b6e8284836122f2565b611b78838361237e565b611b838383836123f3565b611b8d8383612418565b6001600160a01b0383166000908152601c60205260409020546110719084908490849060ff1680611bd657506001600160a01b0386166000908152601c602052604090205460ff165b80611be35750600c5460ff165b80611bf75750601f54600160a01b900460ff165b601f549015906001600160a01b039081168882168114918a16146000611ddd565b60008184841115611c3c5760405162461bcd60e51b8152600401610b3a9190612f94565b505050900390565b6000610ff88284613266565b6000610ff88284613313565b6000610ff882846132a8565b6000806000611c756125bd565b9092509050611c8481836132a8565b9250505090565b611ccb6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b611cd88686868686612740565b9050611cee818787611ce8611c68565b86612968565b60608501526040840152602083015281525b95945050505050565b601f805460ff60a01b1916600160a01b1790558015611d84576000611d4e600b54610f6c602354611ab1601760009054906101000a90046001600160a01b031661119b565b905082811015611d5c578092505b601754600090611d74906001600160a01b031661119b565b9050838111611d81578093505b50505b602a54611d919083611dd1565b602a5542602755602c54611da6906001611dd1565b602c55611db4833084611948565b601254611b319084906001600160a01b0316846000808080611ddd565b6000610ff882846132ca565b6000611dec8686868686611c8b565b6001600160a01b0389166000908152601b602052604090205490915060ff1615611e4e576001600160a01b038816600090815260196020526040902054611e34908790613266565b6001600160a01b0389166000908152601960205260409020555b6001600160a01b0387166000908152601b602052604090205460ff1615611eb15760808101516001600160a01b038816600090815260196020526040902054611e9791906132ca565b6001600160a01b0388166000908152601960205260409020555b80516001600160a01b038916600090815260186020526040902054611ed69190613266565b6001600160a01b03808a16600090815260186020908152604080832094909455840151918a1681529190912054611f0d91906132ca565b6001600160a01b038816600090815260186020526040908190209190915581015160a0820151611f3e919084612a0d565b611f5081606001518260c00151612a49565b608081015115611fac57866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051611fa391815260200190565b60405180910390a35b60c08101511561200857306001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611fff91815260200190565b60405180910390a35b5050505050505050565b6001600160a01b0383166120765760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b3a565b6001600160a01b0382166120d85760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b3a565b6120e18361119b565b8111156110715760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b3a565b6001600160a01b0382166000908152601c602052604090205460ff1615801561218c57506001600160a01b0381166000908152601c602052604090205460ff16155b15610ccb57600f5460ff16610ccb5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610b3a565b6001600160a01b0382166000908152601c602052604090205460ff1615801561222557506001600160a01b0383166000908152601c602052604090205460ff16155b801561223a57506001600160a01b0382163014155b801561225457506012546001600160a01b03838116911614155b801561226e5750601f546001600160a01b03838116911614155b801561228857506013546001600160a01b03838116911614155b15611071576004548161229a8461119b565b6122a491906132ca565b11156110715760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610b3a565b6003548111158061231b57506001600160a01b0382166000908152601c602052604090205460ff165b8061233e57506001600160a01b0383166000908152601c602052604090205460ff165b6110715760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b3a565b601f546001600160a01b0382811691161480156123b457506001600160a01b0382166000908152601c602052604090205460ff16155b80156123c35750600c5460ff16155b80156123d95750601f54600160a01b900460ff16155b15610ccb576010546123ec906001611dd1565b6010555050565b6123fe838383612ac8565b156110715761240e600d54612b8e565b6000601055505050565b426024541115801561242d5750600c5460ff16155b80156124465750601f546001600160a01b038281169116145b801561246b57506001600160a01b0382166000908152601c602052604090205460ff16155b80156124805750601f54600160a81b900460ff165b80156124a1575060165460009061249f906001600160a01b031661119b565b115b80156124b75750601f54600160a01b900460ff16155b156124e9576016546020546124d7916001600160a01b0316906001611a6c565b6028546124e5904290611dd1565b6024555b42602654111580156124fe5750600c5460ff16155b80156125175750601f546001600160a01b038281169116145b801561253c57506001600160a01b0382166000908152601c602052604090205460ff16155b80156125515750601f54600160b01b900460ff165b80156125725750601754600090612570906001600160a01b031661119b565b115b80156125885750601f54600160a01b900460ff16155b15610ccb576017546021546125a8916001600160a01b0316906001611d09565b6029546125b6904290611dd1565b6026555050565b6002546001546000918291825b601d5481101561270f578260186000601d84815481106125ec576125ec61323a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061265757508160196000601d84815481106126305761263061323a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561266d57600254600154945094505050509091565b60186000601d83815481106126845761268461323a565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126b39084613266565b925060196000601d83815481106126cc576126cc61323a565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126fb9083613266565b9150806127078161328f565b9150506125ca565b5060015460025461272091906132a8565b821015612737576002546001549350935050509091565b90939092509050565b6127806040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8415801561278c575081155b806127a6575061279c8484612d1d565b80156127a6575081155b156127b75760808101869052611d00565b831580156127c3575082155b80156127cd575081155b156128455760006127ef600b54610f6c600a548a611c5090919063ffffffff16565b9050600a546005600001541161281f57600b5460055461280f9089613313565b61281991906132a8565b60a08301525b60a082015161282f908290611c44565b60c083015261283e8188613266565b6080830152505b838015612850575081155b156128c8576000612872600b54610f6c6009548a611c5090919063ffffffff16565b9050600954600560000154116128a257600b546005546128929089613313565b61289c91906132a8565b60a08301525b60a08201516128b2908290611c44565b60c08301526128c18188613266565b6080830152505b8280156128d3575081155b1561294b5760006128f5600b54610f6c6008548a611c5090919063ffffffff16565b90506008546005600001541161292557600b546005546129159089613313565b61291f91906132a8565b60a08301525b60a0820151612935908290611c44565b60c08301526129448188613266565b6080830152505b8115611d005760a081018690526080810186905295945050505050565b60008080806129778689613313565b935086158015612985575084155b1561299857508291506000905080612a01565b84156129c557858960a001516129ae9190613313565b91506129ba8285613266565b925060009050612a01565b858960a001516129d59190613313565b9150858960c001516129e79190613313565b9050806129f48386613266565b6129fe9190613266565b92505b95509550955095915050565b8260026000828254612a1f9190613266565b909155508190506110715781602e6000016000828254612a3f91906132ca565b9091555050505050565b80602e6001016000828254612a5e91906132ca565b9091555050306000908152601b602052604090205460ff1615612aa0573060009081526019602052604081208054839290612a9a9084906132ca565b90915550505b3060009081526018602052604081208054849290612abf9084906132ca565b90915550505050565b600080600e5483101590506000600d54612ae13061119b565b600c54911115915060ff16158015612b005750600c54610100900460ff165b8015612b095750815b8015612b2e57506001600160a01b0386166000908152601c602052604090205460ff16155b8015612b3c5750600f5460ff165b8015612b555750601f546001600160a01b038681169116145b8015612b65575060115460105410155b8015612b6e5750805b8015612b845750601f54600160a01b900460ff16155b9695505050505050565b600c805460ff19166001908117909155600854600091612bb591600291611ab19190611dd1565b9050600854600003612be757600654600754612be491600291611ab191600191612bde91611dd1565b90611dd1565b90505b6007546000908290612bf99085613313565b612c0391906132a8565b90506000612c118285613266565b905047612c1d82612d63565b6000612c298247613266565b600754909150600090612c3c9087613266565b612c4690836132a8565b600754909150600090612c599083613313565b90508015612c6b57612c6b8682612eb5565b600654600090612c8090611ab1856002611c50565b90508015612cc4576014546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612cc2573d6000803e3d6000fd5b505b478015612d07576015546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612d05573d6000803e3d6000fd5b505b5050600c805460ff191690555050505050505050565b6000828015612d2c5750600954155b80612d3f5750818015612d3f5750600854155b80610ff8575082158015612d51575081155b8015610ff8575050600a541592915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d9857612d9861323a565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e15919061332a565b81600181518110612e2857612e2861323a565b6001600160a01b039283166020918202929092010152601e54612e4e9130911684611948565b601e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e87908590600090869030904290600401613347565b600060405180830381600087803b158015612ea157600080fd5b505af11580156112c3573d6000803e3d6000fd5b601e54612ecd9030906001600160a01b031684611948565b601e5460135460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612f3d573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061173c91906133b8565b6001600160a01b0381168114610cf257600080fd5b600060208284031215612f8957600080fd5b8135610ff881612f62565b600060208083528351808285015260005b81811015612fc157858101830151858201604001528201612fa5565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612ff557600080fd5b823561300081612f62565b946020939093013593505050565b60006020828403121561302057600080fd5b5035919050565b60008060006060848603121561303c57600080fd5b833561304781612f62565b9250602084013561305781612f62565b929592945050506040919091013590565b6000806040838503121561307b57600080fd5b50508035926020909101359150565b8015158114610cf257600080fd5b600080604083850312156130ab57600080fd5b8235915060208301356130bd8161308a565b809150509250929050565b600080604083850312156130db57600080fd5b82356130e68161308a565b915060208301356130bd81612f62565b60008060008060008060c0878903121561310f57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561314c57600080fd5b823561315781612f62565b915060208301356130bd8161308a565b60008060006060848603121561317c57600080fd5b833561318781612f62565b9250602084013561319781612f62565b915060408401356131a781612f62565b809150509250925092565b600080604083850312156131c557600080fd5b82356130e681612f62565b600080604083850312156131e357600080fd5b82356130008161308a565b60008060006060848603121561320357600080fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610ce057610ce0613250565b634e487b7160e01b600052603160045260246000fd5b6000600182016132a1576132a1613250565b5060010190565b6000826132c557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ce057610ce0613250565b6000602082840312156132ef57600080fd5b5051919050565b60006020828403121561330857600080fd5b8151610ff88161308a565b8082028115828204841417610ce057610ce0613250565b60006020828403121561333c57600080fd5b8151610ff881612f62565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133975784516001600160a01b031683529383019391830191600101613372565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156133cd57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207a333b0febcb20c09115ad73dbe2d4290f7f7733719e724c558047f83869ce8c64736f6c63430008130033

Deployed Bytecode

0x60806040526004361061039b5760003560e01c80637934f4f2116101dc578063a9059cbb11610102578063e4800345116100a0578063ebf6cf9b1161006f578063ebf6cf9b14610a9a578063f09f694e14610ab0578063f2fde38b14610ad0578063f887ea4014610af057600080fd5b8063e480034514610a2f578063e55a68b314610a4f578063e94dd17c14610a65578063e960e68e14610a8557600080fd5b8063d1571e47116100dc578063d1571e4714610992578063dd62ed3e146109b3578063dfa5f4ea146109f9578063e306744914610a1957600080fd5b8063a9059cbb1461093c578063b2118a8d1461095c578063ca221c081461097c57600080fd5b80638ebfc7961161017a5780639b9a6f09116101495780639b9a6f09146108ae578063a22d4832146108c4578063a457c2d7146108e4578063a8aa1b311461090457600080fd5b80638ebfc7961461081f5780639213c3581461083f57806395b186411461085f57806395d89b411461087f57600080fd5b806384836778116101b657806384836778146107a957806384b81093146107c9578063884870c7146107df5780638cf2e94a146107ff57600080fd5b80637934f4f2146107445780637d1db4a51461075a5780637d459db31461077057600080fd5b80633052ea08116102c157806344df8e701161025f5780636c0e1c121161022e5780636c0e1c12146106d957806370a08231146106ee57806378109e541461070e578063783b5a0a1461072457600080fd5b806344df8e70146106625780634549b03914610683578063486a7e6b146106a357806354b822cf146106b957600080fd5b8063395093511161029b57806339509351146105e65780633c9f861d146106065780633f4218e01461061c578063404ca34a1461064c57600080fd5b80633052ea0814610594578063313ce567146105b457806337f0d4c8146105d057600080fd5b806322849720116103395780632b112e49116103085780632b112e49146105105780632cbf5360146105255780632d838119146105455780632f54bf6e1461056557600080fd5b806322849720146104a557806323b872dd146104bb57806327334a08146104db578063293230b8146104fb57600080fd5b8063095ea7b311610375578063095ea7b31461042a5780630e7daf6d1461045a57806311403aec1461047057806318160ddd1461049057600080fd5b806303807ee5146103a757806305f82a45146103d057806306fdde03146103f257600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103bd60235481565b6040519081526020015b60405180910390f35b3480156103dc57600080fd5b506103f06103eb366004612f77565b610b10565b005b3480156103fe57600080fd5b5060408051808201909152600681526550697363657360d01b60208201525b6040516103c79190612f94565b34801561043657600080fd5b5061044a610445366004612fe2565b610ccf565b60405190151581526020016103c7565b34801561046657600080fd5b506103bd60225481565b34801561047c57600080fd5b506103f061048b36600461300e565b610ce6565b34801561049c57600080fd5b506001546103bd565b3480156104b157600080fd5b506103bd602b5481565b3480156104c757600080fd5b5061044a6104d6366004613027565b610cf5565b3480156104e757600080fd5b506103f06104f6366004612f77565b610d5e565b34801561050757600080fd5b506103f0610eb1565b34801561051c57600080fd5b506103bd610eea565b34801561053157600080fd5b506103f0610540366004613068565b610f26565b34801561055157600080fd5b506103bd61056036600461300e565b610f7b565b34801561057157600080fd5b5061044a610580366004612f77565b6000546001600160a01b0391821691161490565b3480156105a057600080fd5b506103f06105af36600461300e565b610fff565b3480156105c057600080fd5b50604051600981526020016103c7565b3480156105dc57600080fd5b506103bd602d5481565b3480156105f257600080fd5b5061044a610601366004612fe2565b611076565b34801561061257600080fd5b506103bd602a5481565b34801561062857600080fd5b5061044a610637366004612f77565b601c6020526000908152604090205460ff1681565b34801561065857600080fd5b506103bd60205481565b34801561066e57600080fd5b50601f5461044a90600160b01b900460ff1681565b34801561068f57600080fd5b506103bd61069e366004613098565b6110ad565b3480156106af57600080fd5b506103bd60215481565b3480156106c557600080fd5b506103f06106d436600461300e565b611141565b3480156106e557600080fd5b506103f061114d565b3480156106fa57600080fd5b506103bd610709366004612f77565b61119b565b34801561071a57600080fd5b506103bd60045481565b34801561073057600080fd5b506103f061073f3660046130c8565b6111fa565b34801561075057600080fd5b506103bd60255481565b34801561076657600080fd5b506103bd60035481565b34801561077c57600080fd5b5061044a61078b366004612f77565b6001600160a01b03166000908152601b602052604090205460ff1690565b3480156107b557600080fd5b506103f06107c43660046130f6565b61124c565b3480156107d557600080fd5b506103bd60285481565b3480156107eb57600080fd5b506103f06107fa366004613068565b6112cb565b34801561080b57600080fd5b506103bd61081a366004612f77565b6113db565b34801561082b57600080fd5b506103f061083a366004613139565b61140d565b34801561084b57600080fd5b506103f061085a366004613167565b611462565b34801561086b57600080fd5b506103f061087a366004613068565b611508565b34801561088b57600080fd5b5060408051808201909152600681526550495343455360d01b602082015261041d565b3480156108ba57600080fd5b506103bd602c5481565b3480156108d057600080fd5b506103f06108df366004612f77565b611557565b3480156108f057600080fd5b5061044a6108ff366004612fe2565b6115bb565b34801561091057600080fd5b50601f54610924906001600160a01b031681565b6040516001600160a01b0390911681526020016103c7565b34801561094857600080fd5b5061044a610957366004612fe2565b61160a565b34801561096857600080fd5b506103f0610977366004613027565b611617565b34801561098857600080fd5b506103bd60245481565b34801561099e57600080fd5b50601f5461044a90600160a81b900460ff1681565b3480156109bf57600080fd5b506103bd6109ce3660046131b2565b6001600160a01b039182166000908152601a6020908152604080832093909416825291909152205490565b348015610a0557600080fd5b506103f0610a143660046131d0565b611743565b348015610a2557600080fd5b506103bd60275481565b348015610a3b57600080fd5b506103f0610a4a3660046131d0565b61178f565b348015610a5b57600080fd5b506103bd60295481565b348015610a7157600080fd5b506103f0610a803660046131ee565b6117db565b348015610a9157600080fd5b50602e546103bd565b348015610aa657600080fd5b506103bd60265481565b348015610abc57600080fd5b506103f0610acb3660046131b2565b611841565b348015610adc57600080fd5b506103f0610aeb366004612f77565b6118ca565b348015610afc57600080fd5b50601e54610924906001600160a01b031681565b6000546001600160a01b03163314610b435760405162461bcd60e51b8152600401610b3a9061321a565b60405180910390fd5b6001600160a01b0381166000908152601b602052604090205460ff16610bab5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610b3a565b60005b601d54811015610ccb57816001600160a01b0316601d8281548110610bd557610bd561323a565b6000918252602090912001546001600160a01b031603610cb957601d8054610bff90600190613266565b81548110610c0f57610c0f61323a565b600091825260209091200154601d80546001600160a01b039092169183908110610c3b57610c3b61323a565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152601982526040808220829055601b90925220805460ff19169055601d805480610c9357610c93613279565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610cc38161328f565b915050610bae565b5050565b6000610cdc338484611948565b5060015b92915050565b610cf233826000611a6c565b50565b6000610d02848484611b43565b610d548433610d4f856040518060600160405280602881526020016133e7602891396001600160a01b038a166000908152601a602090815260408083203384529091529020549190611c18565b611948565b5060019392505050565b6000546001600160a01b03163314610d885760405162461bcd60e51b8152600401610b3a9061321a565b6001600160a01b0381166000908152601b602052604090205460ff1615610df15760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610b3a565b6001600160a01b03811660009081526018602052604090205415610e4b576001600160a01b038116600090815260186020526040902054610e3190610f7b565b6001600160a01b0382166000908152601960205260409020555b6001600160a01b03166000818152601b60205260408120805460ff19166001908117909155601d805491820181559091527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b0319169091179055565b6000546001600160a01b03163314610edb5760405162461bcd60e51b8152600401610b3a9061321a565b600f805460ff19166001179055565b6000610f21610ef9600061119b565b601254610f1b90610f12906001600160a01b031661119b565b60015490611c44565b90611c44565b905090565b6000546001600160a01b03163314610f505760405162461bcd60e51b8152600401610b3a9061321a565b610f72620186a0610f6c84600154611c5090919063ffffffff16565b90611c5c565b60215560235550565b6000600254821115610fe25760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b3a565b6000610fec611c68565b9050610ff881846132a8565b9392505050565b6000546001600160a01b031633146110295760405162461bcd60e51b8152600401610b3a9061321a565b60155447906001600160a01b03166108fc6110496064610f6c8587611c50565b6040518115909202916000818181858888f19350505050158015611071573d6000803e3d6000fd5b505050565b336000818152601a602090815260408083206001600160a01b03871684529091528120549091610cdc918590610d4f9086906132ca565b60006001548311156111015760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610b3a565b816111225760006111188460016000806000611c8b565b519150610ce09050565b60006111348460016000806000611c8b565b602001519150610ce09050565b610cf233826000611d09565b6000546001600160a01b031633146111775760405162461bcd60e51b8152600401610b3a9061321a565b602854611185904290611dd1565b602455602954611196904290611dd1565b602655565b6001600160a01b0381166000908152601b602052604081205460ff16156111d857506001600160a01b031660009081526019602052604090205490565b6001600160a01b038216600090815260186020526040902054610ce090610f7b565b6000546001600160a01b031633146112245760405162461bcd60e51b8152600401610b3a9061321a565b6001600160a01b03166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146112765760405162461bcd60e51b8152600401610b3a9061321a565b60088690556009859055600a849055600583905560068290556007819055600b5486118015906112aa5750600b5460095411155b80156112ba5750600b54600a5411155b6112c357600080fd5b505050505050565b6000546001600160a01b031633146112f55760405162461bcd60e51b8152600401610b3a9061321a565b6000611312600b54610f6c85600154611c5090919063ffffffff16565b90506000611331600b54610f6c85600154611c5090919063ffffffff16565b90506000611351620186a0610f6c60018054611c5090919063ffffffff16565b90508083101580156113635750808210155b6113cd5760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b6064820152608401610b3a565b506003919091556004555050565b6001600160a01b0381166000908152601960209081526040808320546018909252822054610ce09190610f1b90610f7b565b6000546001600160a01b031633146114375760405162461bcd60e51b8152600401610b3a9061321a565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461148c5760405162461bcd60e51b8152600401610b3a9061321a565b601480546001600160a01b039485166001600160a01b0319918216811790925560138054948616948216851790556015805493909516921682179093556000928352601c6020526040808420805460ff199081166001908117909255938552818520805485168217905591845290922080549091169091179055565b6000546001600160a01b031633146115325760405162461bcd60e51b8152600401610b3a9061321a565b61154e620186a0610f6c84600154611c5090919063ffffffff16565b60205560225550565b6000546001600160a01b031633146115815760405162461bcd60e51b8152600401610b3a9061321a565b601f80546001600160a01b039092166001600160a01b0319909216821790556000908152601b60205260409020805460ff19166001179055565b6000610cdc3384610d4f8560405180606001604052806025815260200161340f60259139336000908152601a602090815260408083206001600160a01b038d1684529091529020549190611c18565b6000610cdc338484611b43565b6000546001600160a01b031633146116415760405162461bcd60e51b8152600401610b3a9061321a565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611688573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ac91906132dd565b90506001600160a01b03841663a9059cbb846116cd6064610f6c8688611c50565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611718573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173c91906132f6565b5050505050565b6000546001600160a01b0316331461176d5760405162461bcd60e51b8152600401610b3a9061321a565b601f8054921515600160a81b0260ff60a81b1990931692909217909155602855565b6000546001600160a01b031633146117b95760405162461bcd60e51b8152600401610b3a9061321a565b601f8054921515600160b01b0260ff60b01b1990931692909217909155602955565b6000546001600160a01b031633146118055760405162461bcd60e51b8152600401610b3a9061321a565b601183905560015461182090620186a090610f6c9085611c50565b600d5560015461183990620186a090610f6c9084611c50565b600e55505050565b6000546001600160a01b0316331461186b5760405162461bcd60e51b8152600401610b3a9061321a565b601680546001600160a01b039384166001600160a01b031991821681179092556017805493909416921682179092556000918252601c6020526040808320805460ff199081166001908117909255928452922080549091169091179055565b6000546001600160a01b031633146118f45760405162461bcd60e51b8152600401610b3a9061321a565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6001600160a01b0383166119aa5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b3a565b6001600160a01b038216611a0b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b3a565b6001600160a01b038381166000818152601a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601f805460ff60a01b1916600160a01b1790558015611aee576000611ab7600b54610f6c602254611ab1601660009054906101000a90046001600160a01b031661119b565b90611c50565b905082811015611ac5578092505b601654600090611add906001600160a01b031661119b565b905083811015611aeb578093505b50505b602b54611afb9083611dd1565b602b5542602555602d54611b10906001611dd1565b602d55611b1e833084611948565b611b318360008460008060006001611ddd565b5050601f805460ff60a01b1916905550565b611b4e838383612012565b611b58838361214a565b611b638383836121e3565b611b6e8284836122f2565b611b78838361237e565b611b838383836123f3565b611b8d8383612418565b6001600160a01b0383166000908152601c60205260409020546110719084908490849060ff1680611bd657506001600160a01b0386166000908152601c602052604090205460ff165b80611be35750600c5460ff165b80611bf75750601f54600160a01b900460ff165b601f549015906001600160a01b039081168882168114918a16146000611ddd565b60008184841115611c3c5760405162461bcd60e51b8152600401610b3a9190612f94565b505050900390565b6000610ff88284613266565b6000610ff88284613313565b6000610ff882846132a8565b6000806000611c756125bd565b9092509050611c8481836132a8565b9250505090565b611ccb6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b611cd88686868686612740565b9050611cee818787611ce8611c68565b86612968565b60608501526040840152602083015281525b95945050505050565b601f805460ff60a01b1916600160a01b1790558015611d84576000611d4e600b54610f6c602354611ab1601760009054906101000a90046001600160a01b031661119b565b905082811015611d5c578092505b601754600090611d74906001600160a01b031661119b565b9050838111611d81578093505b50505b602a54611d919083611dd1565b602a5542602755602c54611da6906001611dd1565b602c55611db4833084611948565b601254611b319084906001600160a01b0316846000808080611ddd565b6000610ff882846132ca565b6000611dec8686868686611c8b565b6001600160a01b0389166000908152601b602052604090205490915060ff1615611e4e576001600160a01b038816600090815260196020526040902054611e34908790613266565b6001600160a01b0389166000908152601960205260409020555b6001600160a01b0387166000908152601b602052604090205460ff1615611eb15760808101516001600160a01b038816600090815260196020526040902054611e9791906132ca565b6001600160a01b0388166000908152601960205260409020555b80516001600160a01b038916600090815260186020526040902054611ed69190613266565b6001600160a01b03808a16600090815260186020908152604080832094909455840151918a1681529190912054611f0d91906132ca565b6001600160a01b038816600090815260186020526040908190209190915581015160a0820151611f3e919084612a0d565b611f5081606001518260c00151612a49565b608081015115611fac57866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360800151604051611fa391815260200190565b60405180910390a35b60c08101511561200857306001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051611fff91815260200190565b60405180910390a35b5050505050505050565b6001600160a01b0383166120765760405162461bcd60e51b815260206004820152602560248201527f42455032303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b3a565b6001600160a01b0382166120d85760405162461bcd60e51b815260206004820152602360248201527f42455032303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b3a565b6120e18361119b565b8111156110715760405162461bcd60e51b815260206004820152603160248201527f596f752061726520747279696e6720746f207472616e73666572206d6f7265206044820152707468616e20796f75722062616c616e636560781b6064820152608401610b3a565b6001600160a01b0382166000908152601c602052604090205460ff1615801561218c57506001600160a01b0381166000908152601c602052604090205460ff16155b15610ccb57600f5460ff16610ccb5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f7765640000006044820152606401610b3a565b6001600160a01b0382166000908152601c602052604090205460ff1615801561222557506001600160a01b0383166000908152601c602052604090205460ff16155b801561223a57506001600160a01b0382163014155b801561225457506012546001600160a01b03838116911614155b801561226e5750601f546001600160a01b03838116911614155b801561228857506013546001600160a01b03838116911614155b15611071576004548161229a8461119b565b6122a491906132ca565b11156110715760405162461bcd60e51b815260206004820152601e60248201527f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00006044820152606401610b3a565b6003548111158061231b57506001600160a01b0382166000908152601c602052604090205460ff165b8061233e57506001600160a01b0383166000908152601c602052604090205460ff165b6110715760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b3a565b601f546001600160a01b0382811691161480156123b457506001600160a01b0382166000908152601c602052604090205460ff16155b80156123c35750600c5460ff16155b80156123d95750601f54600160a01b900460ff16155b15610ccb576010546123ec906001611dd1565b6010555050565b6123fe838383612ac8565b156110715761240e600d54612b8e565b6000601055505050565b426024541115801561242d5750600c5460ff16155b80156124465750601f546001600160a01b038281169116145b801561246b57506001600160a01b0382166000908152601c602052604090205460ff16155b80156124805750601f54600160a81b900460ff165b80156124a1575060165460009061249f906001600160a01b031661119b565b115b80156124b75750601f54600160a01b900460ff16155b156124e9576016546020546124d7916001600160a01b0316906001611a6c565b6028546124e5904290611dd1565b6024555b42602654111580156124fe5750600c5460ff16155b80156125175750601f546001600160a01b038281169116145b801561253c57506001600160a01b0382166000908152601c602052604090205460ff16155b80156125515750601f54600160b01b900460ff165b80156125725750601754600090612570906001600160a01b031661119b565b115b80156125885750601f54600160a01b900460ff16155b15610ccb576017546021546125a8916001600160a01b0316906001611d09565b6029546125b6904290611dd1565b6026555050565b6002546001546000918291825b601d5481101561270f578260186000601d84815481106125ec576125ec61323a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061265757508160196000601d84815481106126305761263061323a565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561266d57600254600154945094505050509091565b60186000601d83815481106126845761268461323a565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126b39084613266565b925060196000601d83815481106126cc576126cc61323a565b60009182526020808320909101546001600160a01b031683528201929092526040019020546126fb9083613266565b9150806127078161328f565b9150506125ca565b5060015460025461272091906132a8565b821015612737576002546001549350935050509091565b90939092509050565b6127806040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b8415801561278c575081155b806127a6575061279c8484612d1d565b80156127a6575081155b156127b75760808101869052611d00565b831580156127c3575082155b80156127cd575081155b156128455760006127ef600b54610f6c600a548a611c5090919063ffffffff16565b9050600a546005600001541161281f57600b5460055461280f9089613313565b61281991906132a8565b60a08301525b60a082015161282f908290611c44565b60c083015261283e8188613266565b6080830152505b838015612850575081155b156128c8576000612872600b54610f6c6009548a611c5090919063ffffffff16565b9050600954600560000154116128a257600b546005546128929089613313565b61289c91906132a8565b60a08301525b60a08201516128b2908290611c44565b60c08301526128c18188613266565b6080830152505b8280156128d3575081155b1561294b5760006128f5600b54610f6c6008548a611c5090919063ffffffff16565b90506008546005600001541161292557600b546005546129159089613313565b61291f91906132a8565b60a08301525b60a0820151612935908290611c44565b60c08301526129448188613266565b6080830152505b8115611d005760a081018690526080810186905295945050505050565b60008080806129778689613313565b935086158015612985575084155b1561299857508291506000905080612a01565b84156129c557858960a001516129ae9190613313565b91506129ba8285613266565b925060009050612a01565b858960a001516129d59190613313565b9150858960c001516129e79190613313565b9050806129f48386613266565b6129fe9190613266565b92505b95509550955095915050565b8260026000828254612a1f9190613266565b909155508190506110715781602e6000016000828254612a3f91906132ca565b9091555050505050565b80602e6001016000828254612a5e91906132ca565b9091555050306000908152601b602052604090205460ff1615612aa0573060009081526019602052604081208054839290612a9a9084906132ca565b90915550505b3060009081526018602052604081208054849290612abf9084906132ca565b90915550505050565b600080600e5483101590506000600d54612ae13061119b565b600c54911115915060ff16158015612b005750600c54610100900460ff165b8015612b095750815b8015612b2e57506001600160a01b0386166000908152601c602052604090205460ff16155b8015612b3c5750600f5460ff165b8015612b555750601f546001600160a01b038681169116145b8015612b65575060115460105410155b8015612b6e5750805b8015612b845750601f54600160a01b900460ff16155b9695505050505050565b600c805460ff19166001908117909155600854600091612bb591600291611ab19190611dd1565b9050600854600003612be757600654600754612be491600291611ab191600191612bde91611dd1565b90611dd1565b90505b6007546000908290612bf99085613313565b612c0391906132a8565b90506000612c118285613266565b905047612c1d82612d63565b6000612c298247613266565b600754909150600090612c3c9087613266565b612c4690836132a8565b600754909150600090612c599083613313565b90508015612c6b57612c6b8682612eb5565b600654600090612c8090611ab1856002611c50565b90508015612cc4576014546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612cc2573d6000803e3d6000fd5b505b478015612d07576015546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015612d05573d6000803e3d6000fd5b505b5050600c805460ff191690555050505050505050565b6000828015612d2c5750600954155b80612d3f5750818015612d3f5750600854155b80610ff8575082158015612d51575081155b8015610ff8575050600a541592915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d9857612d9861323a565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e15919061332a565b81600181518110612e2857612e2861323a565b6001600160a01b039283166020918202929092010152601e54612e4e9130911684611948565b601e5460405163791ac94760e01b81526001600160a01b039091169063791ac94790612e87908590600090869030904290600401613347565b600060405180830381600087803b158015612ea157600080fd5b505af11580156112c3573d6000803e3d6000fd5b601e54612ecd9030906001600160a01b031684611948565b601e5460135460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990839060c40160606040518083038185885af1158015612f3d573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061173c91906133b8565b6001600160a01b0381168114610cf257600080fd5b600060208284031215612f8957600080fd5b8135610ff881612f62565b600060208083528351808285015260005b81811015612fc157858101830151858201604001528201612fa5565b506000604082860101526040601f19601f8301168501019250505092915050565b60008060408385031215612ff557600080fd5b823561300081612f62565b946020939093013593505050565b60006020828403121561302057600080fd5b5035919050565b60008060006060848603121561303c57600080fd5b833561304781612f62565b9250602084013561305781612f62565b929592945050506040919091013590565b6000806040838503121561307b57600080fd5b50508035926020909101359150565b8015158114610cf257600080fd5b600080604083850312156130ab57600080fd5b8235915060208301356130bd8161308a565b809150509250929050565b600080604083850312156130db57600080fd5b82356130e68161308a565b915060208301356130bd81612f62565b60008060008060008060c0878903121561310f57600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b6000806040838503121561314c57600080fd5b823561315781612f62565b915060208301356130bd8161308a565b60008060006060848603121561317c57600080fd5b833561318781612f62565b9250602084013561319781612f62565b915060408401356131a781612f62565b809150509250925092565b600080604083850312156131c557600080fd5b82356130e681612f62565b600080604083850312156131e357600080fd5b82356130008161308a565b60008060006060848603121561320357600080fd5b505081359360208301359350604090920135919050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b81810381811115610ce057610ce0613250565b634e487b7160e01b600052603160045260246000fd5b6000600182016132a1576132a1613250565b5060010190565b6000826132c557634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610ce057610ce0613250565b6000602082840312156132ef57600080fd5b5051919050565b60006020828403121561330857600080fd5b8151610ff88161308a565b8082028115828204841417610ce057610ce0613250565b60006020828403121561333c57600080fd5b8151610ff881612f62565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156133975784516001600160a01b031683529383019391830191600101613372565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156133cd57600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207a333b0febcb20c09115ad73dbe2d4290f7f7733719e724c558047f83869ce8c64736f6c63430008130033

Deployed Bytecode Sourcemap

7463:23963:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9751:32;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;9751:32:0;;;;;;;;27034:464;;;;;;;;;;-1:-1:-1;27034:464:0;;;;;:::i;:::-;;:::i;:::-;;11692:67;;;;;;;;;;-1:-1:-1;11752:5:0;;;;;;;;;;;;-1:-1:-1;;;11752:5:0;;;;11692:67;;;;;;;:::i;12458:134::-;;;;;;;;;;-1:-1:-1;12458:134:0;;;;;:::i;:::-;;:::i;:::-;;;1622:14:1;;1615:22;1597:41;;1585:2;1570:18;12458:134:0;1457:187:1;9705:39:0;;;;;;;;;;;;;;;;19367:117;;;;;;;;;;-1:-1:-1;19367:117:0;;;;;:::i;:::-;;:::i;11915:79::-;;;;;;;;;;-1:-1:-1;11985:7:0;;11915:79;;10064:30;;;;;;;;;;;;;;;;12872:309;;;;;;;;;;-1:-1:-1;12872:309:0;;;;;:::i;:::-;;:::i;26691:335::-;;;;;;;;;;-1:-1:-1;26691:335:0;;;;;:::i;:::-;;:::i;22152:83::-;;;;;;;;;;;;;:::i;25787:143::-;;;;;;;;;;;;;:::i;24034:182::-;;;;;;;;;;-1:-1:-1;24034:182:0;;;;;:::i;:::-;;:::i;26435:248::-;;;;;;;;;;-1:-1:-1;26435:248:0;;;;;:::i;:::-;;:::i;6168:87::-;;;;;;;;;;-1:-1:-1;6168:87:0;;;;;:::i;:::-;6223:4;6248:5;-1:-1:-1;;;;;6237:16:0;;;6248:5;;6237:16;;6168:87;24463:182;;;;;;;;;;-1:-1:-1;24463:182:0;;;;;:::i;:::-;;:::i;11842:67::-;;;;;;;;;;-1:-1:-1;11842:67:0;;7701:1;2690:36:1;;2678:2;2663:18;11842:67:0;2548:184:1;10138:36:0;;;;;;;;;;;;;;;;13189:209;;;;;;;;;;-1:-1:-1;13189:209:0;;;;;:::i;:::-;;:::i;10033:24::-;;;;;;;;;;;;;;;;9340:44;;;;;;;;;;-1:-1:-1;9340:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;9572:63;;;;;;;;;;;;;;;;9542:23;;;;;;;;;;-1:-1:-1;9542:23:0;;;;-1:-1:-1;;;9542:23:0;;;;;;25938:489;;;;;;;;;;-1:-1:-1;25938:489:0;;;;;:::i;:::-;;:::i;9642:56::-;;;;;;;;;;;;;;;;19492:103;;;;;;;;;;-1:-1:-1;19492:103:0;;;;;:::i;:::-;;:::i;22243:175::-;;;;;;;;;;;;;:::i;12000:173::-;;;;;;;;;;-1:-1:-1;12000:173:0;;;;;:::i;:::-;;:::i;7943:58::-;;;;;;;;;;;;;;;;22577:124;;;;;;;;;;-1:-1:-1;22577:124:0;;;;;:::i;:::-;;:::i;9827:34::-;;;;;;;;;;;;;;;;7881:55;;;;;;;;;;;;;;;;12690:108;;;;;;;;;;-1:-1:-1;12690:108:0;;;;;:::i;:::-;-1:-1:-1;;;;;12776:20:0;12762:4;12776:20;;;:11;:20;;;;;;;;;12690:108;22709:442;;;;;;;;;;-1:-1:-1;22709:442:0;;;;;:::i;:::-;;:::i;9932:47::-;;;;;;;;;;;;;;;;25080:445;;;;;;;;;;-1:-1:-1;25080:445:0;;;;;:::i;:::-;;:::i;13679:157::-;;;;;;;;;;-1:-1:-1;13679:157:0;;;;;:::i;:::-;;:::i;24653:117::-;;;;;;;;;;-1:-1:-1;24653:117:0;;;;;:::i;:::-;;:::i;23159:322::-;;;;;;;;;;-1:-1:-1;23159:322:0;;;;;:::i;:::-;;:::i;24224:231::-;;;;;;;;;;-1:-1:-1;24224:231:0;;;;;:::i;:::-;;:::i;11765:71::-;;;;;;;;;;-1:-1:-1;11827:7:0;;;;;;;;;;;;-1:-1:-1;;;11827:7:0;;;;11765:71;;10101:30;;;;;;;;;;;;;;;;22426:143;;;;;;;;;;-1:-1:-1;22426:143:0;;;;;:::i;:::-;;:::i;13406:265::-;;;;;;;;;;-1:-1:-1;13406:265:0;;;;;:::i;:::-;;:::i;9453:19::-;;;;;;;;;;-1:-1:-1;9453:19:0;;;;-1:-1:-1;;;;;9453:19:0;;;;;;-1:-1:-1;;;;;5174:32:1;;;5156:51;;5144:2;5129:18;9453:19:0;5010:203:1;12179:140:0;;;;;;;;;;-1:-1:-1;12179:140:0;;;;;:::i;:::-;;:::i;25533:246::-;;;;;;;;;;-1:-1:-1;25533:246:0;;;;;:::i;:::-;;:::i;9790:30::-;;;;;;;;;;;;;;;;9505;;;;;;;;;;-1:-1:-1;9505:30:0;;;;-1:-1:-1;;;9505:30:0;;;;;;12325:127;;;;;;;;;;-1:-1:-1;12325:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;12423:18:0;;;12406:7;12423:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;12325:127;23869:157;;;;;;;;;;-1:-1:-1;23869:157:0;;;;;:::i;:::-;;:::i;9898:27::-;;;;;;;;;;;;;;;;23725:136;;;;;;;;;;-1:-1:-1;23725:136:0;;;;;:::i;:::-;;:::i;9986:40::-;;;;;;;;;;;;;;;;24778:294;;;;;;;;;;-1:-1:-1;24778:294:0;;;;;:::i;:::-;;:::i;12598:86::-;;;;;;;;;;-1:-1:-1;12667:11:0;:15;12598:86;;9868:23;;;;;;;;;;;;;;;;23489:228;;;;;;;;;;-1:-1:-1;23489:228:0;;;;;:::i;:::-;;:::i;6261:111::-;;;;;;;;;;-1:-1:-1;6261:111:0;;;;;:::i;:::-;;:::i;9425:21::-;;;;;;;;;;-1:-1:-1;9425:21:0;;;;-1:-1:-1;;;;;9425:21:0;;;27034:464;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;27118:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27110:56;;;::::0;-1:-1:-1;;;27110:56:0;;7265:2:1;27110:56:0::1;::::0;::::1;7247:21:1::0;7304:2;7284:18;;;7277:30;7343:25;7323:18;;;7316:53;7386:18;;27110:56:0::1;7063:347:1::0;27110:56:0::1;27182:9;27177:314;27201:9;:16:::0;27197:20;::::1;27177:314;;;27259:7;-1:-1:-1::0;;;;;27243:23:0::1;:9;27253:1;27243:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27243:12:0::1;:23:::0;27239:241:::1;;27302:9;27312:16:::0;;:20:::1;::::0;27331:1:::1;::::0;27312:20:::1;:::i;:::-;27302:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;27287:9:::1;:12:::0;;-1:-1:-1;;;;;27302:31:0;;::::1;::::0;27297:1;;27287:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;27287:46:0::1;-1:-1:-1::0;;;;;27287:46:0;;::::1;;::::0;;27352:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;27391:11:::1;:20:::0;;;;:28;;-1:-1:-1;;27391:28:0::1;::::0;;27438:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;27438:15:0;;;;;-1:-1:-1;;;;;;27438:15:0::1;::::0;;;;;27177:314:::1;27034:464:::0;:::o;27239:241::-:1;27219:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27177:314;;;;27034:464:::0;:::o;12458:134::-;12533:4;12540:37;12549:10;12561:7;12570:6;12540:8;:37::i;:::-;-1:-1:-1;12586:4:0;12458:134;;;;;:::o;19367:117::-;19431:45;19450:10;19462:6;19470:5;19431:18;:45::i;:::-;19367:117;:::o;12872:309::-;12970:4;12987:36;12997:6;13005:9;13016:6;12987:9;:36::i;:::-;13034:117;13043:6;13051:10;13063:87;13099:6;13063:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13063:19:0;;;;;;:11;:19;;;;;;;;13083:10;13063:31;;;;;;;;;:87;:35;:87::i;:::-;13034:8;:117::i;:::-;-1:-1:-1;13169:4:0;12872:309;;;;;:::o;26691:335::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26776:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26775:21;26767:61;;;::::0;-1:-1:-1;;;26767:61:0;;8286:2:1;26767:61:0::1;::::0;::::1;8268:21:1::0;8325:2;8305:18;;;8298:30;8364:29;8344:18;;;8337:57;8411:18;;26767:61:0::1;8084:351:1::0;26767:61:0::1;-1:-1:-1::0;;;;;26842:16:0;::::1;26861:1;26842:16:::0;;;:7:::1;:16;::::0;;;;;:20;26839:108:::1;;-1:-1:-1::0;;;;;26918:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;26898:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;26879:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;26839:108:::1;-1:-1:-1::0;;;;;26957:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;26957:27:0::1;26980:4;26957:27:::0;;::::1;::::0;;;26995:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;26995:23:0::1;::::0;;::::1;::::0;;26691:335::o;22152:83::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;22206:14:::1;:21:::0;;-1:-1:-1;;22206:21:0::1;22223:4;22206:21;::::0;;22152:83::o;25787:143::-;25840:7;25867:55;25900:21;25918:1;25900:9;:21::i;:::-;25889:4;;25867:28;;25879:15;;-1:-1:-1;;;;;25889:4:0;25879:9;:15::i;:::-;25867:7;;;:11;:28::i;:::-;:32;;:55::i;:::-;25860:62;;25787:143;:::o;24034:182::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;24144:36:::1;24173:6;24144:24;24156:11;24144:7;;:11;;:24;;;;:::i;:::-;:28:::0;::::1;:36::i;:::-;24131:10;:49:::0;24182:11:::1;:26:::0;-1:-1:-1;24034:182:0:o;26435:248::-;26501:7;26540;;26529;:18;;26521:73;;;;-1:-1:-1;;;26521:73:0;;8642:2:1;26521:73:0;;;8624:21:1;8681:2;8661:18;;;8654:30;8720:34;8700:18;;;8693:62;-1:-1:-1;;;8771:18:1;;;8764:40;8821:19;;26521:73:0;8440:406:1;26521:73:0;26605:19;26628:10;:8;:10::i;:::-;26605:33;-1:-1:-1;26656:19:0;26605:33;26656:7;:19;:::i;:::-;26649:26;26435:248;-1:-1:-1;;;26435:248:0:o;24463:182::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;24583:16:::1;::::0;24543:21:::1;::::0;-1:-1:-1;;;;;24583:16:0::1;24575:62;24610:26;24632:3;24610:17;24543:21:::0;24624:2;24610:13:::1;:17::i;:26::-;24575:62;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;24512:133;24463:182:::0;:::o;13189:209::-;13303:10;13277:4;13324:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13324:32:0;;;;;;;;;;13277:4;;13294:74;;13315:7;;13324:43;;13357:10;;13324:43;:::i;25938:489::-;26028:7;26067;;26056;:18;;26048:62;;;;-1:-1:-1;;;26048:62:0;;9405:2:1;26048:62:0;;;9387:21:1;9444:2;9424:18;;;9417:30;9483:33;9463:18;;;9456:61;9534:18;;26048:62:0;9203:355:1;26048:62:0;26126:17;26121:299;;26160:28;26191:46;26202:7;26211:4;26217:5;26224;26231;26191:10;:46::i;:::-;26259:9;;-1:-1:-1;26252:16:0;;-1:-1:-1;26252:16:0;26121:299;26301:28;26332:46;26343:7;26352:4;26358:5;26365;26372;26332:10;:46::i;:::-;26400:17;;;;-1:-1:-1;26393:24:0;;-1:-1:-1;26393:24:0;19492:103;19549:38;19561:10;19573:6;19581:5;19549:11;:38::i;22243:175::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;22335:19:::1;::::0;22315:40:::1;::::0;:15:::1;::::0;:19:::1;:40::i;:::-;22297:15;:58:::0;22397:12:::1;::::0;22377:33:::1;::::0;:15:::1;::::0;:19:::1;:33::i;:::-;22366:8;:44:::0;22243:175::o;12000:173::-;-1:-1:-1;;;;;12080:20:0;;12066:7;12080:20;;;:11;:20;;;;;;;;12076:49;;;-1:-1:-1;;;;;;12109:16:0;;;;;:7;:16;;;;;;;12000:173::o;12076:49::-;-1:-1:-1;;;;;12154:16:0;;;;;;:7;:16;;;;;;12134:37;;:19;:37::i;22577:124::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22661:21:0::1;;::::0;;;:11:::1;:21;::::0;;;;:32;;-1:-1:-1;;22661:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22577:124::o;22709:442::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;22868:8:::1;:15:::0;;;22885:7:::1;:15:::0;;;22902:11:::1;:20:::0;;;22933:8:::1;:27:::0;;;22971:18;:31;;;23013:18;:31;;;23075:11:::1;::::0;23063:23;::::1;::::0;::::1;::::0;:49:::1;;;23101:11;;23090:7;;:22;;23063:49;:79;;;;;23131:11;;23116;;:26;;23063:79;23055:88;;;::::0;::::1;;22709:442:::0;;;;;;:::o;25080:445::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;25164:13:::1;25180:43;25210:11;;25180:17;25192:4;25180:7;;:11;;:17;;;;:::i;:43::-;25164:59;;25234:17;25254:46;25287:11;;25254:20;25266:7;25254;;:11;;:20;;;;:::i;:46::-;25234:66;;25302:13;25318:26;25337:6;25318:14;25330:1;25318:7:::0;::::1;:11;;:14;;;;:::i;:26::-;25302:42;;25372:5;25363;:14;;:36;;;;;25394:5;25381:9;:18;;25363:36;25355:102;;;::::0;-1:-1:-1;;;25355:102:0;;9765:2:1;25355:102:0::1;::::0;::::1;9747:21:1::0;9804:2;9784:18;;;9777:30;9843:34;9823:18;;;9816:62;-1:-1:-1;;;9894:18:1;;;9887:51;9955:19;;25355:102:0::1;9563:417:1::0;25355:102:0::1;-1:-1:-1::0;25468:12:0::1;:20:::0;;;;25490:15:::1;:27:::0;-1:-1:-1;;25080:445:0:o;13679:157::-;-1:-1:-1;;;;;13812:15:0;;13744:7;13812:15;;;:7;:15;;;;;;;;;13791:7;:15;;;;;;13771:57;;13812:15;13771:36;;:19;:36::i;24653:117::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24734:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;24734:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24653:117::o;23159:322::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;23277:18:::1;:31:::0;;-1:-1:-1;;;;;23277:31:0;;::::1;-1:-1:-1::0;;;;;;23277:31:0;;::::1;::::0;::::1;::::0;;;23310:18:::1;:31:::0;;;;::::1;::::0;;::::1;::::0;::::1;::::0;;23343:16:::1;:27:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;23277:18:::1;23381:23:::0;;;:11:::1;:23;::::0;;;;;:30;;-1:-1:-1;;23381:30:0;;::::1;23277:31:::0;23381:30;;::::1;::::0;;;23413:23;;;;;;:30;;;::::1;::::0;::::1;::::0;;23445:21;;;;;;:28;;;;::::1;::::0;;::::1;::::0;;23159:322::o;24224:231::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;24362:43:::1;24398:6;24362:31;24374:18;24362:7;;:11;;:31;;;;:::i;:43::-;24342:17;:63:::0;24407:18:::1;:40:::0;-1:-1:-1;24224:231:0:o;22426:143::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;22501:4:::1;:18:::0;;-1:-1:-1;;;;;22501:18:0;;::::1;-1:-1:-1::0;;;;;;22501:18:0;;::::1;::::0;::::1;::::0;;:4:::1;22521:33:::0;;;:11:::1;:33;::::0;;;;:40;;-1:-1:-1;;22521:40:0::1;22501:18:::0;22521:40:::1;::::0;;22426:143::o;13406:265::-;13499:4;13516:125;13525:10;13537:7;13546:94;13583:15;13546:94;;;;;;;;;;;;;;;;;13558:10;13546:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;13546:32:0;;;;;;;;;;;:94;:36;:94::i;12179:140::-;12257:4;12264:40;12274:10;12286:9;12297:6;12264:9;:40::i;25533:246::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;25655:39:::1;::::0;-1:-1:-1;;;25655:39:0;;25688:4:::1;25655:39;::::0;::::1;5156:51:1::0;25640:12:0::1;::::0;-1:-1:-1;;;;;25655:24:0;::::1;::::0;::::1;::::0;5129:18:1;;25655:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25640:54:::0;-1:-1:-1;;;;;;25705:23:0;::::1;;25729:9:::0;25740:30:::1;25766:3;25740:21;25640:54:::0;25749:11;25740:8:::1;:21::i;:30::-;25705:66;::::0;-1:-1:-1;;;;;;25705:66:0::1;::::0;;;;;;-1:-1:-1;;;;;10366:32:1;;;25705:66:0::1;::::0;::::1;10348:51:1::0;10415:18;;;10408:34;10321:18;;25705:66:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25629:150;25533:246:::0;;;:::o;23869:157::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;23965:11:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;23965:21:0::1;-1:-1:-1::0;;;;23965:21:0;;::::1;::::0;;;::::1;::::0;;;23988:19:::1;:30:::0;23869:157::o;23725:136::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;23814:4:::1;:14:::0;;;::::1;;-1:-1:-1::0;;;23814:14:0::1;-1:-1:-1::0;;;;23814:14:0;;::::1;::::0;;;::::1;::::0;;;23830:12:::1;:23:::0;23725:136::o;24778:294::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;24906:10:::1;:24:::0;;;24948:7:::1;::::0;:48:::1;::::0;24988:6:::1;::::0;24948:27:::1;::::0;24960:14;24948:11:::1;:27::i;:48::-;24932:13;:64:::0;25016:7:::1;::::0;:48:::1;::::0;25056:6:::1;::::0;25016:27:::1;::::0;25028:14;25016:11:::1;:27::i;:48::-;24998:15;:66:::0;-1:-1:-1;;;24778:294:0:o;23489:228::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;23587:17:::1;:32:::0;;-1:-1:-1;;;;;23587:32:0;;::::1;-1:-1:-1::0;;;;;;23587:32:0;;::::1;::::0;::::1;::::0;;;23621:10:::1;:18:::0;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;23587:17:::1;23650:25:::0;;;:11:::1;:25;::::0;;;;;:32;;-1:-1:-1;;23650:32:0;;::::1;23587::::0;23650;;::::1;::::0;;;23684:18;;;;;:25;;;;::::1;::::0;;::::1;::::0;;23489:228::o;6261:111::-;6223:4;6248:5;-1:-1:-1;;;;;6248:5:0;6135:10;6237:16;6119:38;;;;-1:-1:-1;;;6119:38:0;;;;;;;:::i;:::-;6327:5:::1;:11:::0;;-1:-1:-1;;;;;;6327:11:0::1;-1:-1:-1::0;;;;;6327:11:0;::::1;::::0;;::::1;::::0;;;6345:25:::1;::::0;5156:51:1;;;6345:25:0::1;::::0;5144:2:1;5129:18;6345:25:0::1;;;;;;;6261:111:::0;:::o;13844:335::-;-1:-1:-1;;;;;13937:19:0;;13929:68;;;;-1:-1:-1;;;13929:68:0;;11121:2:1;13929:68:0;;;11103:21:1;11160:2;11140:18;;;11133:30;11199:34;11179:18;;;11172:62;-1:-1:-1;;;11250:18:1;;;11243:34;11294:19;;13929:68:0;10919:400:1;13929:68:0;-1:-1:-1;;;;;14016:21:0;;14008:68;;;;-1:-1:-1;;;14008:68:0;;11526:2:1;14008:68:0;;;11508:21:1;11565:2;11545:18;;;11538:30;11604:34;11584:18;;;11577:62;-1:-1:-1;;;11655:18:1;;;11648:32;11697:19;;14008:68:0;11324:398:1;14008:68:0;-1:-1:-1;;;;;14087:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;14139:32;;160:25:1;;;14139:32:0;;133:18:1;14139:32:0;;;;;;;13844:335;;;:::o;17879:780::-;17979:12;:19;;-1:-1:-1;;;;17979:19:0;-1:-1:-1;;;17979:19:0;;;18009:304;;;;18027:22;18052:69;18109:11;;18052:52;18085:18;;18052:28;18062:17;;;;;;;;;-1:-1:-1;;;;;18062:17:0;18052:9;:28::i;:::-;:32;;:52::i;:69::-;18027:94;;18152:6;18135:14;:23;18132:53;;;18169:14;18160:23;;18132:53;18230:17;;18195:22;;18220:28;;-1:-1:-1;;;;;18230:17:0;18220:9;:28::i;:::-;18195:53;;18279:6;18262:14;:23;18259:53;;;18296:14;18287:23;;18259:53;18026:287;;18009:304;18341:15;;:27;;18361:6;18341:19;:27::i;:::-;18323:15;:45;18401:15;18379:19;:37;18451:21;;:37;;18485:1;18451:25;:37::i;:::-;18427:21;:61;18499:39;18508:6;18524:4;18531:6;18499:8;:39::i;:::-;18549:71;18564:6;18580:3;18586:6;18594:5;18601;18608;18615:4;18549:14;:71::i;:::-;-1:-1:-1;;18631:12:0;:20;;-1:-1:-1;;;;18631:20:0;;;-1:-1:-1;17879:780:0:o;14187:594::-;14276:37;14287:6;14295:9;14306:6;14276:10;:37::i;:::-;14324:38;14344:6;14352:9;14324:19;:38::i;:::-;14373:41;14388:6;14396:9;14407:6;14373:14;:41::i;:::-;14426:39;14439:9;14450:6;14458;14426:12;:39::i;:::-;14476:35;14493:6;14501:9;14476:16;:35::i;:::-;14522;14531:6;14539:9;14550:6;14522:8;:35::i;:::-;14568:33;14583:6;14591:9;14568:14;:33::i;:::-;-1:-1:-1;;;;;14656:19:0;;;;;;:11;:19;;;;;;14612:161;;14627:6;;14635:9;;14646:6;;14656:19;;;:45;;-1:-1:-1;;;;;;14679:22:0;;;;;;:11;:22;;;;;;;;14656:45;:57;;;-1:-1:-1;14705:8:0;;;;14656:57;:73;;;-1:-1:-1;14717:12:0;;-1:-1:-1;;;14717:12:0;;;;14656:73;14745:4;;14654:76;;;-1:-1:-1;;;;;14745:4:0;;;14732:17;;;;;;14751:14;;;14745:4;14612:14;:161::i;1512:162::-;1598:7;1644:12;1636:6;;;;1628:29;;;;-1:-1:-1;;;1628:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1666:5:0;;;1512:162::o;299:82::-;357:7;374:5;378:1;374;:5;:::i;387:82::-;445:7;462:5;466:1;462;:5;:::i;475:82::-;533:7;550:5;554:1;550;:5;:::i;30726:158::-;30767:7;30788:15;30805;30824:19;:17;:19::i;:::-;30787:56;;-1:-1:-1;30787:56:0;-1:-1:-1;30861:15:0;30787:56;;30861:15;:::i;:::-;30854:22;;;;30726:158;:::o;27770:444::-;27893:36;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27893:36:0;27954:64;27966:7;27975;27984:6;27992:10;28004:13;27954:11;:64::i;:::-;27942:76;;28112:67;28124:9;28135:7;28144;28153:10;:8;:10::i;:::-;28165:13;28112:11;:67::i;:::-;28092:16;;;28029:150;28076:14;;;28029:150;28049:25;;;28029:150;;;27770:444;;;;;;;;:::o;18667:692::-;18753:12;:19;;-1:-1:-1;;;;18753:19:0;-1:-1:-1;;;18753:19:0;;;18783:259;;;;18794:19;18816:55;18859:11;;18816:38;18842:11;;18816:21;18826:10;;;;;;;;;-1:-1:-1;;;;;18826:10:0;18816:9;:21::i;:55::-;18794:77;;18899:6;18885:11;:20;18882:47;;;18916:11;18907:20;;18882:47;18971:10;;18939:19;;18961:21;;-1:-1:-1;;;;;18971:10:0;18961:9;:21::i;:::-;18939:43;;19011:6;18996:11;:21;18993:48;;19028:11;19019:20;;18993:48;18793:249;;18783:259;19064:9;;:21;;19078:6;19064:13;:21::i;:::-;19052:9;:33;19111:15;19096:12;:30;19155:15;;:31;;19183:1;19155:19;:31::i;:::-;19137:15;:49;19197:39;19206:6;19222:4;19229:6;19197:8;:39::i;:::-;19278:4;;19247:73;;19262:6;;-1:-1:-1;;;;;19278:4:0;19285:6;19278:4;;;;19247:14;:73::i;211:82::-;269:7;286:5;290:1;286;:5;:::i;16336:863::-;16495:28;16526:63;16537:7;16546;16555:6;16563:10;16575:13;16526:10;:63::i;:::-;-1:-1:-1;;;;;16603:19:0;;;;;;:11;:19;;;;;;16495:94;;-1:-1:-1;16603:19:0;;16600:83;;;-1:-1:-1;;;;;16658:15:0;;;;;;:7;:15;;;;;;:23;;16674:7;;16658:23;:::i;:::-;-1:-1:-1;;;;;16640:15:0;;;;;;:7;:15;;;;;:41;16600:83;-1:-1:-1;;;;;16696:22:0;;;;;;:11;:22;;;;;;;;16693:101;;;16775:17;;;;-1:-1:-1;;;;;16756:18:0;;;;;;:7;:18;;;;;;:36;;16775:17;16756:36;:::i;:::-;-1:-1:-1;;;;;16735:18:0;;;;;;:7;:18;;;;;:57;16693:101;16838:9;;-1:-1:-1;;;;;16822:15:0;;16838:9;16822:15;;;:7;:15;;;;;;:25;;16838:9;16822:25;:::i;:::-;-1:-1:-1;;;;;16804:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;16898:17;;;16879:18;;;;;;;;;;:36;;16898:17;16879:36;:::i;:::-;-1:-1:-1;;;;;16858:18:0;;;;;;:7;:18;;;;;;;:57;;;;16938:6;;;16946;;;;16926:42;;16938:6;16954:13;16926:11;:42::i;:::-;16979:30;16990:1;:8;;;17000:1;:8;;;16979:10;:30::i;:::-;17023:17;;;;:30;17020:88;;17077:9;-1:-1:-1;;;;;17060:46:0;17069:6;-1:-1:-1;;;;;17060:46:0;;17088:1;:17;;;17060:46;;;;160:25:1;;148:2;133:18;;14:177;17060:46:0;;;;;;;;17020:88;17121:8;;;;:21;17118:74;;17174:4;-1:-1:-1;;;;;17149:41:0;17158:6;-1:-1:-1;;;;;17149:41:0;;17181:1;:8;;;17149:41;;;;160:25:1;;148:2;133:18;;14:177;17149:41:0;;;;;;;;17118:74;16484:715;16336:863;;;;;;;:::o;14789:355::-;-1:-1:-1;;;;;14893:20:0;;14885:70;;;;-1:-1:-1;;;14885:70:0;;12102:2:1;14885:70:0;;;12084:21:1;12141:2;12121:18;;;12114:30;12180:34;12160:18;;;12153:62;-1:-1:-1;;;12231:18:1;;;12224:35;12276:19;;14885:70:0;11900:401:1;14885:70:0;-1:-1:-1;;;;;14974:23:0;;14966:71;;;;-1:-1:-1;;;14966:71:0;;12508:2:1;14966:71:0;;;12490:21:1;12547:2;12527:18;;;12520:30;12586:34;12566:18;;;12559:62;-1:-1:-1;;;12637:18:1;;;12630:33;12680:19;;14966:71:0;12306:399:1;14966:71:0;15066:17;15076:6;15066:9;:17::i;:::-;15056:6;:27;;15048:88;;;;-1:-1:-1;;;15048:88:0;;12912:2:1;15048:88:0;;;12894:21:1;12951:2;12931:18;;;12924:30;12990:34;12970:18;;;12963:62;-1:-1:-1;;;13041:18:1;;;13034:47;13098:19;;15048:88:0;12710:413:1;15152:206:0;-1:-1:-1;;;;;15245:19:0;;;;;;:11;:19;;;;;;;;15244:20;:47;;;;-1:-1:-1;;;;;;15269:22:0;;;;;;:11;:22;;;;;;;;15268:23;15244:47;15241:110;;;15301:14;;;;15293:56;;;;-1:-1:-1;;;15293:56:0;;13330:2:1;15293:56:0;;;13312:21:1;13369:2;13349:18;;;13342:30;13408:31;13388:18;;;13381:59;13457:18;;15293:56:0;13128:353:1;15370:384:0;-1:-1:-1;;;;;15474:22:0;;;;;;:11;:22;;;;;;;;15473:23;:47;;;;-1:-1:-1;;;;;;15501:19:0;;;;;;:11;:19;;;;;;;;15500:20;15473:47;:77;;;;-1:-1:-1;;;;;;15524:26:0;;15545:4;15524:26;;15473:77;:107;;;;-1:-1:-1;15575:4:0;;-1:-1:-1;;;;;15554:26:0;;;15575:4;;15554:26;;15473:107;:128;;;;-1:-1:-1;15597:4:0;;-1:-1:-1;;;;;15584:17:0;;;15597:4;;15584:17;;15473:128;:163;;;;-1:-1:-1;15618:18:0;;-1:-1:-1;;;;;15605:31:0;;;15618:18;;15605:31;;15473:163;15470:277;;;15695:15;;15684:6;15661:20;15671:9;15661;:20::i;:::-;:29;;;;:::i;:::-;15660:50;;15652:93;;;;-1:-1:-1;;;15652:93:0;;13688:2:1;15652:93:0;;;13670:21:1;13727:2;13707:18;;;13700:30;13766:32;13746:18;;;13739:60;13816:18;;15652:93:0;13486:354:1;15964:193:0;16073:12;;16063:6;:22;;:45;;;-1:-1:-1;;;;;;16089:19:0;;;;;;:11;:19;;;;;;;;16063:45;:64;;;-1:-1:-1;;;;;;16112:15:0;;;;;;:11;:15;;;;;;;;16063:64;16055:94;;;;-1:-1:-1;;;16055:94:0;;14047:2:1;16055:94:0;;;14029:21:1;14086:2;14066:18;;;14059:30;-1:-1:-1;;;14105:18:1;;;14098:47;14162:18;;16055:94:0;13845:341:1;15762:194:0;15859:4;;-1:-1:-1;;;;;15846:17:0;;;15859:4;;15846:17;:41;;;;-1:-1:-1;;;;;;15868:19:0;;;;;;:11;:19;;;;;;;;15867:20;15846:41;:54;;;;-1:-1:-1;15892:8:0;;;;15891:9;15846:54;:71;;;;-1:-1:-1;15905:12:0;;-1:-1:-1;;;15905:12:0;;;;15904:13;15846:71;15843:106;;;15931:9;;:16;;15945:1;15931:13;:16::i;:::-;15919:9;:28;15762:194;;:::o;20042:188::-;20134:41;20149:6;20157:9;20168:6;20134:14;:41::i;:::-;20131:92;;;20177:29;20192:13;;20177:14;:29::i;:::-;20220:1;20208:9;:13;20042:188;;;:::o;17207:664::-;17308:15;17289;;:34;;:47;;;;-1:-1:-1;17328:8:0;;;;17327:9;17289:47;:68;;;;-1:-1:-1;17353:4:0;;-1:-1:-1;;;;;17340:17:0;;;17353:4;;17340:17;17289:68;:92;;;;-1:-1:-1;;;;;;17362:19:0;;;;;;:11;:19;;;;;;;;17361:20;17289:92;:107;;;;-1:-1:-1;17385:11:0;;-1:-1:-1;;;17385:11:0;;;;17289:107;:152;;;;-1:-1:-1;17410:17:0;;17439:1;;17400:28;;-1:-1:-1;;;;;17410:17:0;17400:9;:28::i;:::-;:41;17289:152;:169;;;;-1:-1:-1;17446:12:0;;-1:-1:-1;;;17446:12:0;;;;17445:13;17289:169;17286:312;;;17493:17;;17512;;17474:62;;-1:-1:-1;;;;;17493:17:0;;;17474:18;:62::i;:::-;17576:19;;17556:40;;:15;;:19;:40::i;:::-;17538:15;:58;17286:312;17623:15;17611:8;;:27;;:40;;;;-1:-1:-1;17643:8:0;;;;17642:9;17611:40;:61;;;;-1:-1:-1;17668:4:0;;-1:-1:-1;;;;;17655:17:0;;;17668:4;;17655:17;17611:61;:85;;;;-1:-1:-1;;;;;;17677:19:0;;;;;;:11;:19;;;;;;;;17676:20;17611:85;:93;;;;-1:-1:-1;17700:4:0;;-1:-1:-1;;;17700:4:0;;;;17611:93;:131;;;;-1:-1:-1;17718:10:0;;17740:1;;17708:21;;-1:-1:-1;;;;;17718:10:0;17708:9;:21::i;:::-;:34;17611:131;:148;;;;-1:-1:-1;17747:12:0;;-1:-1:-1;;;17747:12:0;;;;17746:13;17611:148;17608:256;;;17787:10;;17799;;17775:41;;-1:-1:-1;;;;;17787:10:0;;;17775:11;:41::i;:::-;17849:12;;17829:33;;:15;;:19;:33::i;:::-;17818:8;:44;17207:664;;:::o;30892:531::-;30989:7;;31025;;30942;;;;;31043:270;31067:9;:16;31063:20;;31043:270;;;31133:7;31109;:21;31117:9;31127:1;31117:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31117:12:0;31109:21;;;;;;;;;;;;;:31;;:66;;;31168:7;31144;:21;31152:9;31162:1;31152:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31152:12:0;31144:21;;;;;;;;;;;;;:31;31109:66;31105:97;;;31185:7;;31194;;31177:25;;;;;;;30892:531;;:::o;31105:97::-;31235:7;:21;31243:9;31253:1;31243:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31243:12:0;31235:21;;;;;;;;;;;;;31227:29;;:7;:29;:::i;:::-;31217:39;;31289:7;:21;31297:9;31307:1;31297:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;31297:12:0;31289:21;;;;;;;;;;;;;31281:29;;:7;:29;:::i;:::-;31271:39;-1:-1:-1;31085:3:0;;;;:::i;:::-;;;;31043:270;;;;31345:7;;31337;;:15;;;;:::i;:::-;31327:7;:25;31323:56;;;31362:7;;31371;;31354:25;;;;;;30892:531;;:::o;31323:56::-;31398:7;;31407;;-1:-1:-1;30892:531:0;-1:-1:-1;30892:531:0:o;28440:1361::-;28564:28;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28564:28:0;28609:7;28608:8;:26;;;;;28621:13;28620:14;28608:26;:77;;;;28638:29;28648:6;28656:10;28638:9;:29::i;:::-;:47;;;;;28672:13;28671:14;28638:47;28605:146;;;28700:17;;;:27;;;28740:8;;28605:146;28765:6;28764:7;:22;;;;;28776:10;28775:11;28764:22;:40;;;;;28791:13;28790:14;28764:40;28761:311;;;28820:17;28840:41;28869:11;;28840:24;28852:11;;28840:7;:11;;:24;;;;:::i;:41::-;28820:61;;28915:11;;28899:8;:12;;;:27;28896:75;;28958:11;;28945:8;:12;28937:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;28928:6;;;:41;28896:75;29010:6;;;;28996:21;;:9;;:13;:21::i;:::-;28985:8;;;:32;29052:17;29060:9;29052:7;:17;:::i;:::-;29032;;;:37;-1:-1:-1;28761:311:0;29085:6;:24;;;;;29096:13;29095:14;29085:24;29082:287;;;29125:17;29145:37;29170:11;;29145:20;29157:7;;29145;:11;;:20;;;;:::i;:37::-;29125:57;;29216:7;;29200:8;:12;;;:23;29197:71;;29255:11;;29242:8;:12;29234:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;29225:6;;;:41;29197:71;29307:6;;;;29293:21;;:9;;:13;:21::i;:::-;29282:8;;;:32;29349:17;29357:9;29349:7;:17;:::i;:::-;29329;;;:37;-1:-1:-1;29082:287:0;29382:10;:28;;;;;29397:13;29396:14;29382:28;29379:293;;;29426:17;29446:38;29472:11;;29446:21;29458:8;;29446:7;:11;;:21;;;;:::i;:38::-;29426:58;;29518:8;;29502;:12;;;:24;29499:72;;29558:11;;29545:8;:12;29537:20;;:7;:20;:::i;:::-;:32;;;;:::i;:::-;29528:6;;;:41;29499:72;29610:6;;;;29596:21;;:9;;:13;:21::i;:::-;29585:8;;;:32;29652:17;29660:9;29652:7;:17;:::i;:::-;29632;;;:37;-1:-1:-1;29379:293:0;29685:13;29682:93;;;29714:6;;;:16;;;29745:17;;;:27;;;28440:1361;;;;;;;:::o;29809:705::-;29954:15;;;;30047:19;30055:11;30047:7;:19;:::i;:::-;30037:29;;30081:7;30080:8;:26;;;;;30093:13;30092:14;30080:26;30077:76;;;-1:-1:-1;30129:7:0;;-1:-1:-1;30147:1:0;;-1:-1:-1;30147:1:0;30122:29;;30077:76;30166:13;30163:161;;;30209:11;30202:1;:6;;;:18;;;;:::i;:::-;30195:25;-1:-1:-1;30254:12:0;30195:25;30254:7;:12;:::i;:::-;30235:31;-1:-1:-1;30320:1:0;;-1:-1:-1;30281:41:0;;30163:161;30348:11;30341:1;:6;;;:18;;;;:::i;:::-;30334:25;;30388:11;30379:1;:8;;;:20;;;;:::i;:::-;30370:29;-1:-1:-1;30370:29:0;30429:12;30437:4;30429:7;:12;:::i;:::-;:19;;;;:::i;:::-;30410:38;;29809:705;;;;;;;;;;;:::o;16165:163::-;16263:4;16253:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;16282:13:0;;-1:-1:-1;16278:43:0;;16315:4;16297:11;:15;;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;16165:163:0;;;:::o;27506:256::-;27597:6;27577:11;:17;;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;27639:4:0;27619:26;;;;:11;:26;;;;;;;;27616:97;;;27687:4;27671:22;;;;:7;:22;;;;;:30;;27695:6;;27671:22;:30;;27695:6;;27671:30;:::i;:::-;;;;-1:-1:-1;;27616:97:0;27739:4;27723:22;;;;:7;:22;;;;;:31;;27748:6;;27723:22;:31;;27748:6;;27723:31;:::i;:::-;;;;-1:-1:-1;;;;27506:256:0:o;19604:430::-;19702:4;19719:13;19745:15;;19735:6;:25;;19719:41;;19771:19;19821:13;;19793:24;19811:4;19793:9;:24::i;:::-;19853:8;;19793:41;-1:-1:-1;19793:41:0;;-1:-1:-1;19853:8:0;;19852:9;:24;;;;-1:-1:-1;19865:11:0;;;;;;;19852:24;:36;;;;;19880:8;19852:36;:60;;;;-1:-1:-1;;;;;;19893:19:0;;;;;;:11;:19;;;;;;;;19892:20;19852:60;:78;;;;-1:-1:-1;19916:14:0;;;;19852:78;:112;;;;-1:-1:-1;19960:4:0;;-1:-1:-1;;;;;19947:17:0;;;19960:4;;19947:17;19852:112;:139;;;;;19981:10;;19968:9;;:23;;19852:139;:157;;;;;19995:14;19852:157;:174;;;;-1:-1:-1;20014:12:0;;-1:-1:-1;;;20014:12:0;;;;20013:13;19852:174;19845:181;19604:430;-1:-1:-1;;;;;;19604:430:0:o;20238:1113::-;12826:8;:15;;-1:-1:-1;;12826:15:0;12837:4;12826:15;;;;;;20332:8:::1;::::0;12826;;20331:24:::1;::::0;20353:1:::1;::::0;20331:17:::1;::::0;20332:8;20331:14:::1;:17::i;:24::-;20308:47;;20369:8;;20381:1;20369:13:::0;20366:91:::1;;20422:18:::0;;20399;;:56:::1;::::0;20453:1:::1;::::0;20399:49:::1;::::0;20446:1:::1;::::0;20399:42:::1;::::0;:22:::1;:42::i;:::-;:46:::0;::::1;:49::i;:56::-;20384:71;;20366:91;20511:18:::0;;20467:32:::1;::::0;20532:12;;20502:27:::1;::::0;:6;:27:::1;:::i;:::-;:42;;;;:::i;:::-;20467:77:::0;-1:-1:-1;20555:14:0::1;20572:33;20467:77:::0;20572:6;:33:::1;:::i;:::-;20555:50:::0;-1:-1:-1;20641:21:0::1;20673:24;20555:50:::0;20673:16:::1;:24::i;:::-;20708:20;20731:38;20755:14:::0;20731:21:::1;:38;:::i;:::-;20832:18:::0;;20708:61;;-1:-1:-1;20780:19:0::1;::::0;20817:33:::1;::::0;:12;:33:::1;:::i;:::-;20801:50;::::0;:12;:50:::1;:::i;:::-;20908:18:::0;;20780:71;;-1:-1:-1;20862:29:0::1;::::0;20894:32:::1;::::0;20780:71;20894:32:::1;:::i;:::-;20862:64:::0;-1:-1:-1;20940:25:0;;20937:108:::1;;20981:61;20994:24;21020:21;20981:12;:61::i;:::-;21104:18:::0;;21055:23:::1;::::0;21081:42:::1;::::0;:18:::1;:11:::0;21097:1:::1;21081:15;:18::i;:42::-;21055:68:::0;-1:-1:-1;21137:19:0;;21134:80:::1;;21166:18;::::0;21158:53:::1;::::0;-1:-1:-1;;;;;21166:18:0;;::::1;::::0;21158:53;::::1;;;::::0;21195:15;;21166:18:::1;21158:53:::0;21166:18;21158:53;21195:15;21166:18;21158:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21134:80;21242:21;21277:20:::0;;21274:70:::1;;21307:16;::::0;21299:43:::1;::::0;-1:-1:-1;;;;;21307:16:0;;::::1;::::0;21299:43;::::1;;;::::0;21334:7;;21307:16:::1;21299:43:::0;21307:16;21299:43;21334:7;21307:16;21299:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;21274:70;-1:-1:-1::0;;12846:8:0;:16;;-1:-1:-1;;12846:16:0;;;-1:-1:-1;;;;;;;;20238:1113:0:o;28222:210::-;28294:4;28319:6;:22;;;;-1:-1:-1;28329:7:0;;:12;28319:22;28318:57;;;;28347:10;:27;;;;-1:-1:-1;28361:8:0;;:13;28347:27;28318:105;;;;28381:6;28380:7;:22;;;;;28392:10;28391:11;28380:22;:42;;;;-1:-1:-1;;28406:11:0;;:16;;28222:210;-1:-1:-1;;28222:210:0:o;21710:434::-;21800:16;;;21814:1;21800:16;;;;;;;;21776:21;;21800:16;;;;;;;;;;-1:-1:-1;21800:16:0;21776:40;;21845:4;21827;21832:1;21827:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21827:23:0;;;:7;;;;;;;;;;:23;;;;21871:6;;:13;;;-1:-1:-1;;;21871:13:0;;;;:6;;;;;:11;;:13;;;;;21827:7;;21871:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21861:4;21866:1;21861:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21861:23:0;;;:7;;;;;;;;;:23;21927:6;;21895:53;;21912:4;;21927:6;21936:11;21895:8;:53::i;:::-;21959:6;;:177;;-1:-1:-1;;;21959:177:0;;-1:-1:-1;;;;;21959:6:0;;;;:57;;:177;;22031:11;;21959:6;;22073:4;;22100;;22120:15;;21959:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21359:343;21472:6;;21440:53;;21457:4;;-1:-1:-1;;;;;21472:6:0;21481:11;21440:8;:53::i;:::-;21504:6;;21645:18;;21504:190;;-1:-1:-1;;;21504:190:0;;21567:4;21504:190;;;15905:34:1;15955:18;;;15948:34;;;21504:6:0;15998:18:1;;;15991:34;;;16041:18;;;16034:34;-1:-1:-1;;;;;21645:18:0;;;16084:19:1;;;16077:44;21678:15:0;16137:19:1;;;16130:35;21504:6:0;;;:22;;21534:9;;15839:19:1;;21504:190:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;196:131:1:-;-1:-1:-1;;;;;271:31:1;;261:42;;251:70;;317:1;314;307:12;332:247;391:6;444:2;432:9;423:7;419:23;415:32;412:52;;;460:1;457;450:12;412:52;499:9;486:23;518:31;543:5;518:31;:::i;584:548::-;696:4;725:2;754;743:9;736:21;786:6;780:13;829:6;824:2;813:9;809:18;802:34;854:1;864:140;878:6;875:1;872:13;864:140;;;973:14;;;969:23;;963:30;939:17;;;958:2;935:26;928:66;893:10;;864:140;;;868:3;1053:1;1048:2;1039:6;1028:9;1024:22;1020:31;1013:42;1123:2;1116;1112:7;1107:2;1099:6;1095:15;1091:29;1080:9;1076:45;1072:54;1064:62;;;;584:548;;;;:::o;1137:315::-;1205:6;1213;1266:2;1254:9;1245:7;1241:23;1237:32;1234:52;;;1282:1;1279;1272:12;1234:52;1321:9;1308:23;1340:31;1365:5;1340:31;:::i;:::-;1390:5;1442:2;1427:18;;;;1414:32;;-1:-1:-1;;;1137:315:1:o;1649:180::-;1708:6;1761:2;1749:9;1740:7;1736:23;1732:32;1729:52;;;1777:1;1774;1767:12;1729:52;-1:-1:-1;1800:23:1;;1649:180;-1:-1:-1;1649:180:1:o;1834:456::-;1911:6;1919;1927;1980:2;1968:9;1959:7;1955:23;1951:32;1948:52;;;1996:1;1993;1986:12;1948:52;2035:9;2022:23;2054:31;2079:5;2054:31;:::i;:::-;2104:5;-1:-1:-1;2161:2:1;2146:18;;2133:32;2174:33;2133:32;2174:33;:::i;:::-;1834:456;;2226:7;;-1:-1:-1;;;2280:2:1;2265:18;;;;2252:32;;1834:456::o;2295:248::-;2363:6;2371;2424:2;2412:9;2403:7;2399:23;2395:32;2392:52;;;2440:1;2437;2430:12;2392:52;-1:-1:-1;;2463:23:1;;;2533:2;2518:18;;;2505:32;;-1:-1:-1;2295:248:1:o;2737:118::-;2823:5;2816:13;2809:21;2802:5;2799:32;2789:60;;2845:1;2842;2835:12;2860:309;2925:6;2933;2986:2;2974:9;2965:7;2961:23;2957:32;2954:52;;;3002:1;2999;2992:12;2954:52;3038:9;3025:23;3015:33;;3098:2;3087:9;3083:18;3070:32;3111:28;3133:5;3111:28;:::i;:::-;3158:5;3148:15;;;2860:309;;;;;:::o;3174:382::-;3239:6;3247;3300:2;3288:9;3279:7;3275:23;3271:32;3268:52;;;3316:1;3313;3306:12;3268:52;3355:9;3342:23;3374:28;3396:5;3374:28;:::i;:::-;3421:5;-1:-1:-1;3478:2:1;3463:18;;3450:32;3491:33;3450:32;3491:33;:::i;3561:523::-;3665:6;3673;3681;3689;3697;3705;3758:3;3746:9;3737:7;3733:23;3729:33;3726:53;;;3775:1;3772;3765:12;3726:53;-1:-1:-1;;3798:23:1;;;3868:2;3853:18;;3840:32;;-1:-1:-1;3919:2:1;3904:18;;3891:32;;3970:2;3955:18;;3942:32;;-1:-1:-1;4021:3:1;4006:19;;3993:33;;-1:-1:-1;4073:3:1;4058:19;4045:33;;-1:-1:-1;3561:523:1;-1:-1:-1;3561:523:1:o;4089:382::-;4154:6;4162;4215:2;4203:9;4194:7;4190:23;4186:32;4183:52;;;4231:1;4228;4221:12;4183:52;4270:9;4257:23;4289:31;4314:5;4289:31;:::i;:::-;4339:5;-1:-1:-1;4396:2:1;4381:18;;4368:32;4409:30;4368:32;4409:30;:::i;4476:529::-;4553:6;4561;4569;4622:2;4610:9;4601:7;4597:23;4593:32;4590:52;;;4638:1;4635;4628:12;4590:52;4677:9;4664:23;4696:31;4721:5;4696:31;:::i;:::-;4746:5;-1:-1:-1;4803:2:1;4788:18;;4775:32;4816:33;4775:32;4816:33;:::i;:::-;4868:7;-1:-1:-1;4927:2:1;4912:18;;4899:32;4940:33;4899:32;4940:33;:::i;:::-;4992:7;4982:17;;;4476:529;;;;;:::o;5218:388::-;5286:6;5294;5347:2;5335:9;5326:7;5322:23;5318:32;5315:52;;;5363:1;5360;5353:12;5315:52;5402:9;5389:23;5421:31;5446:5;5421:31;:::i;5611:309::-;5676:6;5684;5737:2;5725:9;5716:7;5712:23;5708:32;5705:52;;;5753:1;5750;5743:12;5705:52;5792:9;5779:23;5811:28;5833:5;5811:28;:::i;5925:316::-;6002:6;6010;6018;6071:2;6059:9;6050:7;6046:23;6042:32;6039:52;;;6087:1;6084;6077:12;6039:52;-1:-1:-1;;6110:23:1;;;6180:2;6165:18;;6152:32;;-1:-1:-1;6231:2:1;6216:18;;;6203:32;;5925:316;-1:-1:-1;5925:316:1:o;6729:329::-;6931:2;6913:21;;;6970:1;6950:18;;;6943:29;-1:-1:-1;;;7003:2:1;6988:18;;6981:36;7049:2;7034:18;;6729:329::o;7415:127::-;7476:10;7471:3;7467:20;7464:1;7457:31;7507:4;7504:1;7497:15;7531:4;7528:1;7521:15;7547:127;7608:10;7603:3;7599:20;7596:1;7589:31;7639:4;7636:1;7629:15;7663:4;7660:1;7653:15;7679:128;7746:9;;;7767:11;;;7764:37;;;7781:18;;:::i;7812:127::-;7873:10;7868:3;7864:20;7861:1;7854:31;7904:4;7901:1;7894:15;7928:4;7925:1;7918:15;7944:135;7983:3;8004:17;;;8001:43;;8024:18;;:::i;:::-;-1:-1:-1;8071:1:1;8060:13;;7944:135::o;8851:217::-;8891:1;8917;8907:132;;8961:10;8956:3;8952:20;8949:1;8942:31;8996:4;8993:1;8986:15;9024:4;9021:1;9014:15;8907:132;-1:-1:-1;9053:9:1;;8851:217::o;9073:125::-;9138:9;;;9159:10;;;9156:36;;;9172:18;;:::i;9985:184::-;10055:6;10108:2;10096:9;10087:7;10083:23;10079:32;10076:52;;;10124:1;10121;10114:12;10076:52;-1:-1:-1;10147:16:1;;9985:184;-1:-1:-1;9985:184:1:o;10453:245::-;10520:6;10573:2;10561:9;10552:7;10548:23;10544:32;10541:52;;;10589:1;10586;10579:12;10541:52;10621:9;10615:16;10640:28;10662:5;10640:28;:::i;11727:168::-;11800:9;;;11831;;11848:15;;;11842:22;;11828:37;11818:71;;11869:18;;:::i;14323:251::-;14393:6;14446:2;14434:9;14425:7;14421:23;14417:32;14414:52;;;14462:1;14459;14452:12;14414:52;14494:9;14488:16;14513:31;14538:5;14513:31;:::i;14579:980::-;14841:4;14889:3;14878:9;14874:19;14920:6;14909:9;14902:25;14946:2;14984:6;14979:2;14968:9;14964:18;14957:34;15027:3;15022:2;15011:9;15007:18;15000:31;15051:6;15086;15080:13;15117:6;15109;15102:22;15155:3;15144:9;15140:19;15133:26;;15194:2;15186:6;15182:15;15168:29;;15215:1;15225:195;15239:6;15236:1;15233:13;15225:195;;;15304:13;;-1:-1:-1;;;;;15300:39:1;15288:52;;15395:15;;;;15360:12;;;;15336:1;15254:9;15225:195;;;-1:-1:-1;;;;;;;15476:32:1;;;;15471:2;15456:18;;15449:60;-1:-1:-1;;;15540:3:1;15525:19;15518:35;15437:3;14579:980;-1:-1:-1;;;14579:980:1:o;16176:306::-;16264:6;16272;16280;16333:2;16321:9;16312:7;16308:23;16304:32;16301:52;;;16349:1;16346;16339:12;16301:52;16378:9;16372:16;16362:26;;16428:2;16417:9;16413:18;16407:25;16397:35;;16472:2;16461:9;16457:18;16451:25;16441:35;;16176:306;;;;;:::o

Swarm Source

ipfs://7a333b0febcb20c09115ad73dbe2d4290f7f7733719e724c558047f83869ce8c

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.