ETH Price: $3,106.41 (+1.15%)
Gas: 4 Gwei

Token

Twitter (TWTR)
 

Overview

Max Total Supply

1,000,000 TWTR

Holders

39

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
15,998.485491396145 TWTR

Value
$0.00
0x96245b1650d5c801b2099d2ca5bed56a74d9136e
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
TWTR

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-02
*/

/*
https://t.me/TwitterEntry

*/
// SPDX-License-Identifier: MIT
pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

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

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {_transferOwnership(_msgSender());}
    function owner() public view virtual returns (address) {return _owner;}
    modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner");  _; }
    function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0));}
    function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner);}
    function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner;  _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); }
}
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient,  uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IERC20Metadata is IERC20 {
   function name() external view returns (string memory);function symbol() external view returns (string memory);function decimals() external view returns (uint8);
}
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string private _name; string private _symbol;
    constructor(string memory name_, string memory symbol_) {  _name = name_; _symbol = symbol_;}
    function name() public view virtual override returns (string memory) { return _name;}
    function symbol() public view virtual override returns (string memory) { return _symbol; }
    function decimals() public view virtual override returns (uint8) {  return 18; }
    function totalSupply() public view virtual override returns (uint256) { return _totalSupply;}
    function balanceOf(address account) public view virtual override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {_transfer(_msgSender(), recipient, amount);return true;}
    function allowance(address owner, address spender) public view virtual override returns (uint256) {return _allowances[owner][spender];}
    function approve(address spender, uint256 amount) public virtual override returns (bool) {_approve(_msgSender(), spender, amount); return true;}
    function transferFrom(address sender, address recipient,uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount);uint256 currentAllowance = _allowances[sender][_msgSender()];require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");unchecked {_approve(sender, _msgSender(), currentAllowance - amount);}return true;}
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {_approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);return true;}
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {uint256 currentAllowance = _allowances[_msgSender()][spender];require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");unchecked {_approve(_msgSender(), spender, currentAllowance - subtractedValue);}return true;}
    function _transfer(address sender,address recipient,uint256 amount) internal virtual {require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address");_beforeTokenTransfer(sender, recipient, amount);uint256 senderBalance = _balances[sender];require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");unchecked { _balances[sender] = senderBalance - amount;}_balances[recipient] += amount;emit Transfer(sender, recipient, amount);_afterTokenTransfer(sender, recipient, amount);}
    function _mint(address account, uint256 amount) internal virtual {require(account != address(0), "ERC20: mint to the zero address");_beforeTokenTransfer(address(0), account, amount);_totalSupply += amount;_balances[account] += amount;emit Transfer(address(0), account, amount);_afterTokenTransfer(address(0), account, amount);}
    function _burn(address account, uint256 amount) internal virtual {require(account != address(0), "ERC20: burn from the zero address");_beforeTokenTransfer(account, address(0), amount);uint256 accountBalance = _balances[account];require(accountBalance >= amount, "ERC20: burn amount exceeds balance");unchecked { _balances[account] = accountBalance - amount;}_totalSupply -= amount;emit Transfer(account, address(0), amount);_afterTokenTransfer(account, address(0), amount);}
    function _approve(address owner, address spender,uint256 amount) internal virtual {require(owner != address(0), "ERC20: approve from the zero address");require(spender != address(0), "ERC20: approve to the zero address");_allowances[owner][spender] = amount;emit Approval(owner, spender, amount);}
    function _beforeTokenTransfer(address from,address to, uint256 amount) internal virtual {}
    function _afterTokenTransfer(address from,  address to, uint256 amount) internal virtual {}
}


library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {unchecked { uint256 c = a + b;if (c < a) return (false, 0); return (true, c);}}
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {unchecked {if (b > a) return (false, 0); return (true, a - b);}}
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {unchecked { if (a == 0) return (true, 0);uint256 c = a * b;if (c / a != b) return (false, 0); return (true, c);}}
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {unchecked {if (b == 0) return (false, 0);return (true, a / b); }}
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b);}}
    function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; }
    function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b;  }
    function sub( uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {unchecked { require(b <= a, errorMessage); return a - b;  } }
    function div(uint256 a,  uint256 b,  string memory errorMessage ) internal pure returns (uint256) {unchecked {   require(b > 0, errorMessage);  return a / b; }}
    function mod(uint256 a, uint256 b,  string memory errorMessage) internal pure returns (uint256) { unchecked {  require(b > 0, errorMessage);    return a % b;  }}
}
interface IUniswapV2Factory {
    event PairCreated( address indexed token0, address indexed token1, address pair, uint256);
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);
    function createPair(address tokenA, address tokenB)external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender,uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender)external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom( address from,address to,uint256 value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint256);
    function permit(address owner, address spender, uint256 value, uint256 deadline,  uint8 v, bytes32 r,bytes32 s) external;
    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(address indexed sender,uint256 amount0,uint256 amount1,address indexed to);
    event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);
    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves()external view returns ( uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function Last() external view returns (uint256);
    function mint(address to) external returns (uint256 liquidity);
    function burn(address to)external returns (uint256 amount0, uint256 amount1);
    function swap(uint256 amount0Out,uint256 amount1Out,address to,bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}
interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline) external returns ( uint256 amountA,  uint256 amountB,uint256 liquidity);
    function addLiquidityETH(address token,  uint256 amountTokenDesired,  uint256 amountTokenMin,  uint256 amountETHMin, address to, uint256 deadline) external payable returns (uint256 amountToken,uint256 amountETH, uint256 liquidity);
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(uint256 amountIn,uint256 amountOutMin,address[] calldata path,address to,uint256 deadline) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin,address[] calldata path,address to,uint256 deadline) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(uint256 amountIn,uint256 amountOutMin,address[] calldata path,address to,uint256 deadline) external;
}
contract TWTR is ERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    bool private swapping;
    address public marketingWallet;address public devWallet;
    uint256 public maxTransactionAmount;uint256 public maxWallet;uint256 public swapTokensAtAmount;
    bool public lpBurnEnabled = true;uint256 public lpBurnFrequency = 3600 seconds;uint256 public lastLpBurnTime;uint256 public manualBurnFrequency = 30 minutes; uint256 public lastManualLpBurnTime;uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public swapEnabled = true; bool public limitsInEffect = true;
    mapping(address => uint256) private _holderLastTransferTimestamp; bool public transferDelayEnabled = true;
    uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee;uint256 public sellTotalFees;uint256 public sellMarketingFee;uint256 public sellLiquidityFee;
    uint256 public sellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity;uint256 public tokensForDev;
    /******************/
    mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; mapping(address => bool) public automatedMarketMakerPairs;
    event UpdateUniswapV2Router(address indexed newAddress,address indexed oldAddress);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event marketingWalletUpdated(address indexed newWallet,address indexed oldWallet);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 ethReceived,uint256 tokensIntoLiquidity);
    event devWalletUpdated(address indexed newWallet,address indexed oldWallet);
    event ManualNukeLP(); 
    event AutoNukeLP();

    constructor() ERC20("Twitter", "TWTR") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);  uniswapV2Router = _uniswapV2Router;  uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true);_setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        uint256 _buyMarketingFee = 0; uint256 _buyLiquidityFee = 0; uint256 _buyDevFee = 20; uint256 _sellMarketingFee = 0;uint256 _sellLiquidityFee = 0;uint256 _sellDevFee = 80;uint256 totalSupply = 1_000_000 * 1e18;
        maxTransactionAmount = 20_000 * 1e18;  maxWallet = 20_000 * 1e18; swapTokensAtAmount = (totalSupply * 10) / 10000; 
        buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee;sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        marketingWallet = address(0xC66ea23935313a673eac55476eAB33843FF58906); // set as marketing wallet
        devWallet = address(0xC66ea23935313a673eac55476eAB33843FF58906); // set as dev wallet
        excludeFromFees(owner(), true);excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true);excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); _mint(msg.sender, totalSupply);
    }

    receive() external payable {}
    function disableLimits() external onlyOwner returns (bool) { limitsInEffect = false;return true;}
    function disableTransferDelay() external onlyOwner returns (bool) {transferDelayEnabled = false;return true;}
    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require( newAmount >= (totalSupply() * 1) / 100000,"Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= (totalSupply() * 5) / 1000,"Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true;}
    function updateTransactionLimits(uint256 newNumTx, uint256 newNumWallet) external onlyOwner { require(newNumTx >= ((totalSupply() * 1) / 1000) / 1e18,"Cannot set maxTransactionAmount lower than 0.1%");maxTransactionAmount = newNumTx * (10**18);require(newNumWallet >= ((totalSupply() * 5) / 1000) / 1e18,"Cannot set maxWallet lower than 0.5%");maxWallet = newNumWallet * (10**18);}
    function excludeFromMaxTransaction(address updAds, bool isEx)  public onlyOwner{_isExcludedMaxTransactionAmount[updAds] = isEx;}
    function setSwapback(bool enabled) external onlyOwner {swapEnabled = enabled;}
    function updateFeePercent(uint256 _buyMarketingFee,  uint256 _buyLiquidityFee, uint256 _buyDevFee,  uint256 _sellMarketingFee, uint256 _sellLiquidityFee, uint256 _sellDevFee) external onlyOwner{buyMarketingFee = _buyMarketingFee;buyLiquidityFee = _buyLiquidityFee;buyDevFee = _buyDevFee;buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;require(buyTotalFees <= 33, "Must keep fees at 33% or less"); sellMarketingFee = _sellMarketingFee;sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee;sellTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;require(buyTotalFees <= 30, "Must keep fees at 30% or less");}
    function excludeFromFees(address account, bool excluded) public onlyOwner {_isExcludedFromFees[account] = excluded;emit ExcludeFromFees(account, excluded);}
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner{require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value);}
    function _setAutomatedMarketMakerPair(address pair, bool value) private {automatedMarketMakerPairs[pair] = value;emit SetAutomatedMarketMakerPair(pair, value);}
    function updateMarketingWallet(address newMarketingWallet) external onlyOwner{emit marketingWalletUpdated(newMarketingWallet, marketingWallet);marketingWallet = newMarketingWallet;}
    function updateDevWallet(address newWallet) external onlyOwner {emit devWalletUpdated(newWallet, devWallet);devWallet = newWallet;}
    function isExcludedFromFees(address account) public view returns (bool) {return _isExcludedFromFees[account];}
    event BoughtEarly(address indexed sniper);
    function _transfer(address from, address to,uint256 amount) internal override {require(from != address(0), "ERC20: transfer from the zero address");require(to != address(0), "ERC20: transfer to the zero address");if (amount == 0) {super._transfer(from, to, 0); return;}if (limitsInEffect) {if (from != owner() && to != owner() &&to != address(0) &&to != address(0xdead) &&!swapping) {if (transferDelayEnabled) { if ( to != owner() &&to != address(uniswapV2Router) &&to != address(uniswapV2Pair)) {require(_holderLastTransferTimestamp[tx.origin] <block.number,"_transfer:: Transfer Delay enabled.  Only one purchase per block allowed.");_holderLastTransferTimestamp[tx.origin] = block.number;}} if (automatedMarketMakerPairs[from] &&!_isExcludedMaxTransactionAmount[to]) {require(amount <= maxTransactionAmount,"Buy transfer amount exceeds the maxTransactionAmount.");require( amount + balanceOf(to) <= maxWallet,"Max wallet exceeded");}else if (automatedMarketMakerPairs[to] &&!_isExcludedMaxTransactionAmount[from]) {require(amount <= maxTransactionAmount,"Sell transfer amount exceeds the maxTransactionAmount.");} else if (!_isExcludedMaxTransactionAmount[to]) {require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");}}}uint256 contractTokenBalance = balanceOf(address(this));bool canSwap = contractTokenBalance >= swapTokensAtAmount;if (canSwap &&swapEnabled &&!swapping &&!automatedMarketMakerPairs[from] &&!_isExcludedFromFees[from] &&!_isExcludedFromFees[to]) {swapping = true;swapBack();swapping = false;}if (!swapping &&automatedMarketMakerPairs[to] &&lpBurnEnabled &&block.timestamp >= lastLpBurnTime + lpBurnFrequency &&!_isExcludedFromFees[from]) {autoBurnLiquidityPairTokens();}bool takeFee = !swapping;if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {takeFee = false;}uint256 fees = 0; if (takeFee) {if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {fees = amount.mul(sellTotalFees).div(100);tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;tokensForDev += (fees * sellDevFee) / sellTotalFees;tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;}else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {fees = amount.mul(buyTotalFees).div(100);tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;tokensForDev += (fees * buyDevFee) / buyTotalFees;tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;}if (fees > 0) {super._transfer(from, address(this), fees);}amount -= fees;}super._transfer(from, to, amount);}
    function swapTokensForEth(uint256 tokenAmount) private {address[] memory path = new address[](2);path[0] = address(this);path[1] = uniswapV2Router.WETH();_approve(address(this), address(uniswapV2Router), tokenAmount);uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(tokenAmount,0, path,address(this), block.timestamp);}
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {_approve(address(this), address(uniswapV2Router), tokenAmount);uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this),tokenAmount,0, 0, deadAddress,block.timestamp);}
    function swapBack() private {uint256 contractBalance = balanceOf(address(this));uint256 totalTokensToSwap = tokensForLiquidity +tokensForMarketing +tokensForDev;bool success;if (contractBalance == 0 || totalTokensToSwap == 0) { return;}if (contractBalance > swapTokensAtAmount * 20) {contractBalance = swapTokensAtAmount * 20;}uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /totalTokensToSwap /2;uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);uint256 initialETHBalance = address(this).balance;swapTokensForEth(amountToSwapForETH);uint256 ethBalance = address(this).balance.sub(initialETHBalance);uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;tokensForLiquidity = 0;tokensForMarketing = 0;tokensForDev = 0;(success, ) = address(devWallet).call{value: ethForDev}("");if (liquidityTokens > 0 && ethForLiquidity > 0) {addLiquidity(liquidityTokens, ethForLiquidity);emit SwapAndLiquify(amountToSwapForETH,ethForLiquidity,tokensForLiquidity);}(success, ) = address(marketingWallet).call{value: address(this).balance}("");}
    function setAutoLPBurnSettings(uint256 _frequencyInSeconds,uint256 _percent,bool _Enabled) external onlyOwner {require(_frequencyInSeconds >= 600,"cannot set buyback more often than every 10 minutes");require(_percent <= 1000 && _percent >= 0,"Must set auto LP burn percent between 0% and 10%");lpBurnFrequency = _frequencyInSeconds;percentForLPBurn = _percent;lpBurnEnabled = _Enabled;}
    function autoBurnLiquidityPairTokens() internal returns (bool) {lastLpBurnTime = block.timestamp;uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000);if (amountToBurn > 0) {super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);}IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);pair.sync();emit AutoNukeLP();return true;}
    function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency,"Must wait for cooldown to finish");require(percent <= 1000, "May not nuke more than 10% of tokens in LP");lastManualLpBurnTime = block.timestamp;uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);if (amountToBurn > 0) {super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);} IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);pair.sync(); emit ManualNukeLP();return true;}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buyDevFee","type":"uint256"},{"internalType":"uint256","name":"_sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"_sellLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"_sellDevFee","type":"uint256"}],"name":"updateFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNumTx","type":"uint256"},{"internalType":"uint256","name":"newNumWallet","type":"uint256"}],"name":"updateTransactionLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b60006101000a81548160ff021916908315150217905550610e10600c55610708600e5560196010556001601160006101000a81548160ff0219169083151502179055506001601160016101000a81548160ff0219169083151502179055506001601360006101000a81548160ff0219169083151502179055503480156200008e57600080fd5b506040518060400160405280600781526020017f54776974746572000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f545754520000000000000000000000000000000000000000000000000000000081525081600390805190602001906200011392919062000aee565b5080600490805190602001906200012c92919062000aee565b5050506200014f62000143620005ae60201b60201c565b620005b660201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200017b8160016200067c60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000221919062000c08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000289573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002af919062000c08565b6040518363ffffffff1660e01b8152600401620002ce92919062000c4b565b6020604051808303816000875af1158015620002ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000314919062000c08565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200035c60a05160016200067c60201b60201c565b6200037160a05160016200076660201b60201c565b600080600060149050600080600060509050600069d3c21bcecceda1000000905069043c33c193756480000060088190555069043c33c1937564800000600981905550612710600a82620003c6919062000cb1565b620003d2919062000d41565b600a8190555086601581905550856016819055508460178190555060175460165460155462000402919062000d79565b6200040e919062000d79565b6014819055508360198190555082601a8190555081601b81905550601b54601a546019546200043e919062000d79565b6200044a919062000d79565b60188190555073c66ea23935313a673eac55476eab33843ff58906600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c66ea23935313a673eac55476eab33843ff58906600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200051c6200050e6200080760201b60201c565b60016200083160201b60201c565b6200052f3060016200083160201b60201c565b6200054461dead60016200083160201b60201c565b62000566620005586200080760201b60201c565b60016200067c60201b60201c565b620005793060016200067c60201b60201c565b6200058e61dead60016200067c60201b60201c565b620005a033826200096b60201b60201c565b505050505050505062000f98565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200068c620005ae60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006b26200080760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200070b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007029062000e37565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000841620005ae60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008676200080760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b79062000e37565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200095f919062000e76565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009d59062000ee3565b60405180910390fd5b620009f26000838362000ae460201b60201c565b806002600082825462000a06919062000d79565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a5d919062000d79565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ac4919062000f16565b60405180910390a362000ae06000838362000ae960201b60201c565b5050565b505050565b505050565b82805462000afc9062000f62565b90600052602060002090601f01602090048101928262000b20576000855562000b6c565b82601f1062000b3b57805160ff191683800117855562000b6c565b8280016001018555821562000b6c579182015b8281111562000b6b57825182559160200191906001019062000b4e565b5b50905062000b7b919062000b7f565b5090565b5b8082111562000b9a57600081600090555060010162000b80565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bd08262000ba3565b9050919050565b62000be28162000bc3565b811462000bee57600080fd5b50565b60008151905062000c028162000bd7565b92915050565b60006020828403121562000c215762000c2062000b9e565b5b600062000c318482850162000bf1565b91505092915050565b62000c458162000bc3565b82525050565b600060408201905062000c62600083018562000c3a565b62000c71602083018462000c3a565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cbe8262000c78565b915062000ccb8362000c78565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d075762000d0662000c82565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d4e8262000c78565b915062000d5b8362000c78565b92508262000d6e5762000d6d62000d12565b5b828204905092915050565b600062000d868262000c78565b915062000d938362000c78565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000dcb5762000dca62000c82565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e1f60208362000dd6565b915062000e2c8262000de7565b602082019050919050565b6000602082019050818103600083015262000e528162000e10565b9050919050565b60008115159050919050565b62000e708162000e59565b82525050565b600060208201905062000e8d600083018462000e65565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ecb601f8362000dd6565b915062000ed88262000e93565b602082019050919050565b6000602082019050818103600083015262000efe8162000ebc565b9050919050565b62000f108162000c78565b82525050565b600060208201905062000f2d600083018462000f05565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f7b57607f821691505b6020821081141562000f925762000f9162000f33565b5b50919050565b60805160a0516158c762001020600039600081816112b701528181611974015281816124bd01528181612574015281816125a101528181612af001528181613bf401528181613cad0152613cda015260008181610f6901528181612a9801528181613e5001528181613f3101528181613f5801528181613ff4015261401b01526158c76000f3fe6080604052600436106103855760003560e01c80638da5cb5b116101d1578063b62496f511610102578063e884f260116100a0578063f63743421161006f578063f637434214610d41578063f8b45b0514610d6c578063f928364c14610d97578063fe72b27a14610dc25761038c565b8063e884f26014610c99578063e96a65d014610cc4578063f11a24d314610ced578063f2fde38b14610d185761038c565b8063c8c8ebe4116100dc578063c8c8ebe414610bdb578063d85ba06314610c06578063dd62ed3e14610c31578063e2f4560514610c6e5761038c565b8063b62496f514610b4a578063c024666814610b87578063c876d0b914610bb05761038c565b80639fccce321161016f578063a4c82a0011610149578063a4c82a0014610a7c578063a9059cbb14610aa7578063aacebbe314610ae4578063afa4f3b214610b0d5761038c565b80639fccce32146109e9578063a0d82dc514610a14578063a457c2d714610a3f5761038c565b806395d89b41116101ab57806395d89b411461093f5780639a7a23d61461096a5780639c3b4fdc146109935780639ec22c0e146109be5761038c565b80638da5cb5b146108be5780638ea5220f146108e957806392136913146109145761038c565b80632e82f1a0116102b65780636ddd1713116102545780637571336a116102235780637571336a1461081657806375f0a8741461083f5780637bce5a041461086a5780637ebb640a146108955761038c565b80636ddd17131461076e57806370a0823114610799578063715018a6146107d6578063730c1888146107ed5761038c565b806349bd5a5e1161029057806349bd5a5e146106b05780634a62bb65146106db5780634fbee193146107065780636a486a8e146107435761038c565b80632e82f1a01461061d578063313ce5671461064857806339509351146106735761038c565b8063184c16c5116103235780631f3fed8f116102fd5780631f3fed8f1461055f57806323b872dd1461058a57806327c8f835146105c75780632c3e486c146105f25761038c565b8063184c16c5146104de578063199ffc72146105095780631a8145bb146105345761038c565b806310d5de531161035f57806310d5de53146104225780631694505e1461045f57806318160ddd1461048a5780631816467f146104b55761038c565b806306fdde0314610391578063095ea7b3146103bc57806310a4cc66146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dff565b6040516103b39190614163565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de919061421e565b610e91565b6040516103f09190614279565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b91906142c0565b610eaf565b005b34801561042e57600080fd5b50610449600480360381019061044491906142ed565b610f48565b6040516104569190614279565b60405180910390f35b34801561046b57600080fd5b50610474610f67565b6040516104819190614379565b60405180910390f35b34801561049657600080fd5b5061049f610f8b565b6040516104ac91906143a3565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d791906142ed565b610f95565b005b3480156104ea57600080fd5b506104f36110d1565b60405161050091906143a3565b60405180910390f35b34801561051557600080fd5b5061051e6110d7565b60405161052b91906143a3565b60405180910390f35b34801561054057600080fd5b506105496110dd565b60405161055691906143a3565b60405180910390f35b34801561056b57600080fd5b506105746110e3565b60405161058191906143a3565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac91906143be565b6110e9565b6040516105be9190614279565b60405180910390f35b3480156105d357600080fd5b506105dc6111e1565b6040516105e99190614420565b60405180910390f35b3480156105fe57600080fd5b506106076111e7565b60405161061491906143a3565b60405180910390f35b34801561062957600080fd5b506106326111ed565b60405161063f9190614279565b60405180910390f35b34801561065457600080fd5b5061065d611200565b60405161066a9190614457565b60405180910390f35b34801561067f57600080fd5b5061069a6004803603810190610695919061421e565b611209565b6040516106a79190614279565b60405180910390f35b3480156106bc57600080fd5b506106c56112b5565b6040516106d29190614420565b60405180910390f35b3480156106e757600080fd5b506106f06112d9565b6040516106fd9190614279565b60405180910390f35b34801561071257600080fd5b5061072d600480360381019061072891906142ed565b6112ec565b60405161073a9190614279565b60405180910390f35b34801561074f57600080fd5b50610758611342565b60405161076591906143a3565b60405180910390f35b34801561077a57600080fd5b50610783611348565b6040516107909190614279565b60405180910390f35b3480156107a557600080fd5b506107c060048036038101906107bb91906142ed565b61135b565b6040516107cd91906143a3565b60405180910390f35b3480156107e257600080fd5b506107eb6113a3565b005b3480156107f957600080fd5b50610814600480360381019061080f9190614472565b61142b565b005b34801561082257600080fd5b5061083d600480360381019061083891906144c5565b61156b565b005b34801561084b57600080fd5b50610854611642565b6040516108619190614420565b60405180910390f35b34801561087657600080fd5b5061087f611668565b60405161088c91906143a3565b60405180910390f35b3480156108a157600080fd5b506108bc60048036038101906108b79190614505565b61166e565b005b3480156108ca57600080fd5b506108d361180e565b6040516108e09190614420565b60405180910390f35b3480156108f557600080fd5b506108fe611838565b60405161090b9190614420565b60405180910390f35b34801561092057600080fd5b5061092961185e565b60405161093691906143a3565b60405180910390f35b34801561094b57600080fd5b50610954611864565b6040516109619190614163565b60405180910390f35b34801561097657600080fd5b50610991600480360381019061098c91906144c5565b6118f6565b005b34801561099f57600080fd5b506109a8611a0f565b6040516109b591906143a3565b60405180910390f35b3480156109ca57600080fd5b506109d3611a15565b6040516109e091906143a3565b60405180910390f35b3480156109f557600080fd5b506109fe611a1b565b604051610a0b91906143a3565b60405180910390f35b348015610a2057600080fd5b50610a29611a21565b604051610a3691906143a3565b60405180910390f35b348015610a4b57600080fd5b50610a666004803603810190610a61919061421e565b611a27565b604051610a739190614279565b60405180910390f35b348015610a8857600080fd5b50610a91611b12565b604051610a9e91906143a3565b60405180910390f35b348015610ab357600080fd5b50610ace6004803603810190610ac9919061421e565b611b18565b604051610adb9190614279565b60405180910390f35b348015610af057600080fd5b50610b0b6004803603810190610b0691906142ed565b611b36565b005b348015610b1957600080fd5b50610b346004803603810190610b2f9190614545565b611c72565b604051610b419190614279565b60405180910390f35b348015610b5657600080fd5b50610b716004803603810190610b6c91906142ed565b611dc7565b604051610b7e9190614279565b60405180910390f35b348015610b9357600080fd5b50610bae6004803603810190610ba991906144c5565b611de7565b005b348015610bbc57600080fd5b50610bc5611f0c565b604051610bd29190614279565b60405180910390f35b348015610be757600080fd5b50610bf0611f1f565b604051610bfd91906143a3565b60405180910390f35b348015610c1257600080fd5b50610c1b611f25565b604051610c2891906143a3565b60405180910390f35b348015610c3d57600080fd5b50610c586004803603810190610c539190614572565b611f2b565b604051610c6591906143a3565b60405180910390f35b348015610c7a57600080fd5b50610c83611fb2565b604051610c9091906143a3565b60405180910390f35b348015610ca557600080fd5b50610cae611fb8565b604051610cbb9190614279565b60405180910390f35b348015610cd057600080fd5b50610ceb6004803603810190610ce691906145b2565b612058565b005b348015610cf957600080fd5b50610d026121d8565b604051610d0f91906143a3565b60405180910390f35b348015610d2457600080fd5b50610d3f6004803603810190610d3a91906142ed565b6121de565b005b348015610d4d57600080fd5b50610d566122d6565b604051610d6391906143a3565b60405180910390f35b348015610d7857600080fd5b50610d816122dc565b604051610d8e91906143a3565b60405180910390f35b348015610da357600080fd5b50610dac6122e2565b604051610db99190614279565b60405180910390f35b348015610dce57600080fd5b50610de96004803603810190610de49190614545565b612382565b604051610df69190614279565b60405180910390f35b606060038054610e0e9061466e565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3a9061466e565b8015610e875780601f10610e5c57610100808354040283529160200191610e87565b820191906000526020600020905b815481529060010190602001808311610e6a57829003601f168201915b5050505050905090565b6000610ea5610e9e61265a565b8484612662565b6001905092915050565b610eb761265a565b73ffffffffffffffffffffffffffffffffffffffff16610ed561180e565b73ffffffffffffffffffffffffffffffffffffffff1614610f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f22906146ec565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610f9d61265a565b73ffffffffffffffffffffffffffffffffffffffff16610fbb61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611008906146ec565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b60105481565b601d5481565b601c5481565b60006110f684848461282d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061114161265a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b89061477e565b60405180910390fd5b6111d5856111cd61265a565b858403612662565b60019150509392505050565b61dead81565b600c5481565b600b60009054906101000a900460ff1681565b60006012905090565b60006112ab61121661265a565b84846001600061122461265a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112a691906147cd565b612662565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601160019054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113ab61265a565b73ffffffffffffffffffffffffffffffffffffffff166113c961180e565b73ffffffffffffffffffffffffffffffffffffffff161461141f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611416906146ec565b60405180910390fd5b61142960006134d0565b565b61143361265a565b73ffffffffffffffffffffffffffffffffffffffff1661145161180e565b73ffffffffffffffffffffffffffffffffffffffff16146114a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149e906146ec565b60405180910390fd5b6102588310156114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390614895565b60405180910390fd5b6103e882111580156114ff575060008210155b61153e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153590614927565b60405180910390fd5b82600c819055508160108190555080600b60006101000a81548160ff021916908315150217905550505050565b61157361265a565b73ffffffffffffffffffffffffffffffffffffffff1661159161180e565b73ffffffffffffffffffffffffffffffffffffffff16146115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de906146ec565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61167661265a565b73ffffffffffffffffffffffffffffffffffffffff1661169461180e565b73ffffffffffffffffffffffffffffffffffffffff16146116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e1906146ec565b60405180910390fd5b670de0b6b3a76400006103e86001611700610f8b565b61170a9190614947565b61171491906149d0565b61171e91906149d0565b821015611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790614a73565b60405180910390fd5b670de0b6b3a7640000826117749190614947565b600881905550670de0b6b3a76400006103e86005611790610f8b565b61179a9190614947565b6117a491906149d0565b6117ae91906149d0565b8110156117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e790614b05565b60405180910390fd5b670de0b6b3a7640000816118049190614947565b6009819055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6060600480546118739061466e565b80601f016020809104026020016040519081016040528092919081815260200182805461189f9061466e565b80156118ec5780601f106118c1576101008083540402835291602001916118ec565b820191906000526020600020905b8154815290600101906020018083116118cf57829003601f168201915b5050505050905090565b6118fe61265a565b73ffffffffffffffffffffffffffffffffffffffff1661191c61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611972576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611969906146ec565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f890614b97565b60405180910390fd5b611a0b8282613596565b5050565b60175481565b600f5481565b601e5481565b601b5481565b60008060016000611a3661265a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aea90614c29565b60405180910390fd5b611b07611afe61265a565b85858403612662565b600191505092915050565b600d5481565b6000611b2c611b2561265a565b848461282d565b6001905092915050565b611b3e61265a565b73ffffffffffffffffffffffffffffffffffffffff16611b5c61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba9906146ec565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611c7c61265a565b73ffffffffffffffffffffffffffffffffffffffff16611c9a61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce7906146ec565b60405180910390fd5b620186a06001611cfe610f8b565b611d089190614947565b611d1291906149d0565b821015611d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4b90614cbb565b60405180910390fd5b6103e86005611d61610f8b565b611d6b9190614947565b611d7591906149d0565b821115611db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dae90614d4d565b60405180910390fd5b81600a8190555060019050919050565b60216020528060005260406000206000915054906101000a900460ff1681565b611def61265a565b73ffffffffffffffffffffffffffffffffffffffff16611e0d61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a906146ec565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f009190614279565b60405180910390a25050565b601360009054906101000a900460ff1681565b60085481565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6000611fc261265a565b73ffffffffffffffffffffffffffffffffffffffff16611fe061180e565b73ffffffffffffffffffffffffffffffffffffffff1614612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202d906146ec565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b61206061265a565b73ffffffffffffffffffffffffffffffffffffffff1661207e61180e565b73ffffffffffffffffffffffffffffffffffffffff16146120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb906146ec565b60405180910390fd5b8560158190555084601681905550836017819055506017546016546015546120fc91906147cd565b61210691906147cd565b60148190555060216014541115612152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214990614db9565b60405180910390fd5b8260198190555081601a8190555080601b8190555060175460165460155461217a91906147cd565b61218491906147cd565b601881905550601e60145411156121d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c790614e25565b60405180910390fd5b505050505050565b60165481565b6121e661265a565b73ffffffffffffffffffffffffffffffffffffffff1661220461180e565b73ffffffffffffffffffffffffffffffffffffffff161461225a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612251906146ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c190614eb7565b60405180910390fd5b6122d3816134d0565b50565b601a5481565b60095481565b60006122ec61265a565b73ffffffffffffffffffffffffffffffffffffffff1661230a61180e565b73ffffffffffffffffffffffffffffffffffffffff1614612360576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612357906146ec565b60405180910390fd5b6000601160016101000a81548160ff0219169083151502179055506001905090565b600061238c61265a565b73ffffffffffffffffffffffffffffffffffffffff166123aa61180e565b73ffffffffffffffffffffffffffffffffffffffff1614612400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f7906146ec565b60405180910390fd5b600e54600f5461241091906147cd565b4211612451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244890614f23565b60405180910390fd5b6103e8821115612496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248d90614fb5565b60405180910390fd5b42600f8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016124f89190614420565b602060405180830381865afa158015612515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125399190614fea565b90506000612564612710612556868561363790919063ffffffff16565b61364d90919063ffffffff16565b9050600081111561259d5761259c7f000000000000000000000000000000000000000000000000000000000000000061dead83613663565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561260a57600080fd5b505af115801561261e573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c990615089565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612742576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127399061511b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161282091906143a3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561289d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612894906151ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561290d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129049061523f565b60405180910390fd5b60008114156129275761292283836000613663565b6134cb565b601160019054906101000a900460ff1615612ef55761294461180e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129b2575061298261180e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129eb5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a25575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a3e5750600560149054906101000a900460ff16155b15612ef457601360009054906101000a900460ff1615612c0b57612a6061180e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ae757507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b3f57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c0a5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc906152f7565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cae5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d5557600854811115612cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cef90615389565b60405180910390fd5b600954612d048361135b565b82612d0f91906147cd565b1115612d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d47906153f5565b60405180910390fd5b612ef3565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612df85750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e4757600854811115612e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3990615487565b60405180910390fd5b612ef2565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ef157600954612ea48361135b565b82612eaf91906147cd565b1115612ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee7906153f5565b60405180910390fd5b5b5b5b5b5b6000612f003061135b565b90506000600a548210159050808015612f255750601160009054906101000a900460ff165b8015612f3e5750600560149054906101000a900460ff16155b8015612f945750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612fea5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130405750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613084576001600560146101000a81548160ff0219169083151502179055506130686138e4565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156130ea5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156131025750600b60009054906101000a900460ff165b801561311d5750600c54600d5461311991906147cd565b4210155b80156131735750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561318257613180613bcb565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132385750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561324257600090505b600081156134bb57602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132a557506000601854115b15613372576132d260646132c46018548861363790919063ffffffff16565b61364d90919063ffffffff16565b9050601854601a54826132e59190614947565b6132ef91906149d0565b601d600082825461330091906147cd565b92505081905550601854601b54826133189190614947565b61332291906149d0565b601e600082825461333391906147cd565b925050819055506018546019548261334b9190614947565b61335591906149d0565b601c600082825461336691906147cd565b92505081905550613497565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133cd57506000601454115b15613496576133fa60646133ec6014548861363790919063ffffffff16565b61364d90919063ffffffff16565b90506014546016548261340d9190614947565b61341791906149d0565b601d600082825461342891906147cd565b92505081905550601454601754826134409190614947565b61344a91906149d0565b601e600082825461345b91906147cd565b92505081905550601454601554826134739190614947565b61347d91906149d0565b601c600082825461348e91906147cd565b925050819055505b5b60008111156134ac576134ab873083613663565b5b80856134b891906154a7565b94505b6134c6878787613663565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836136459190614947565b905092915050565b6000818361365b91906149d0565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ca906151ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373a9061523f565b60405180910390fd5b61374e838383613d91565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156137d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137cb9061554d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461386791906147cd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138cb91906143a3565b60405180910390a36138de848484613d96565b50505050565b60006138ef3061135b565b90506000601e54601c54601d5461390691906147cd565b61391091906147cd565b90506000808314806139225750600082145b1561392f57505050613bc9565b6014600a5461393e9190614947565b831115613957576014600a546139549190614947565b92505b6000600283601d548661396a9190614947565b61397491906149d0565b61397e91906149d0565b905060006139958286613d9b90919063ffffffff16565b905060004790506139a582613db1565b60006139ba8247613d9b90919063ffffffff16565b905060006139e5876139d7601c548561363790919063ffffffff16565b61364d90919063ffffffff16565b90506000613a1088613a02601e548661363790919063ffffffff16565b61364d90919063ffffffff16565b90506000818385613a2191906154a7565b613a2b91906154a7565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613a8b9061559e565b60006040518083038185875af1925050503d8060008114613ac8576040519150601f19603f3d011682016040523d82523d6000602084013e613acd565b606091505b505080985050600087118015613ae35750600081115b15613b3057613af28782613fee565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613b27939291906155b3565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b769061559e565b60006040518083038185875af1925050503d8060008114613bb3576040519150601f19603f3d011682016040523d82523d6000602084013e613bb8565b606091505b505080985050505050505050505050505b565b600042600d8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401613c2f9190614420565b602060405180830381865afa158015613c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c709190614fea565b90506000613c9d612710613c8f6010548561363790919063ffffffff16565b61364d90919063ffffffff16565b90506000811115613cd657613cd57f000000000000000000000000000000000000000000000000000000000000000061dead83613663565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d4357600080fd5b505af1158015613d57573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613da991906154a7565b905092915050565b6000600267ffffffffffffffff811115613dce57613dcd6155ea565b5b604051908082528060200260200182016040528015613dfc5781602001602082028036833780820191505090505b5090503081600081518110613e1457613e13615619565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613edd919061565d565b81600181518110613ef157613ef0615619565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f56307f000000000000000000000000000000000000000000000000000000000000000084612662565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fb8959493929190615783565b600060405180830381600087803b158015613fd257600080fd5b505af1158015613fe6573d6000803e3d6000fd5b505050505050565b614019307f000000000000000000000000000000000000000000000000000000000000000084612662565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401614080969594939291906157dd565b60606040518083038185885af115801561409e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140c3919061583e565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141045780820151818401526020810190506140e9565b83811115614113576000848401525b50505050565b6000601f19601f8301169050919050565b6000614135826140ca565b61413f81856140d5565b935061414f8185602086016140e6565b61415881614119565b840191505092915050565b6000602082019050818103600083015261417d818461412a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141b58261418a565b9050919050565b6141c5816141aa565b81146141d057600080fd5b50565b6000813590506141e2816141bc565b92915050565b6000819050919050565b6141fb816141e8565b811461420657600080fd5b50565b600081359050614218816141f2565b92915050565b6000806040838503121561423557614234614185565b5b6000614243858286016141d3565b925050602061425485828601614209565b9150509250929050565b60008115159050919050565b6142738161425e565b82525050565b600060208201905061428e600083018461426a565b92915050565b61429d8161425e565b81146142a857600080fd5b50565b6000813590506142ba81614294565b92915050565b6000602082840312156142d6576142d5614185565b5b60006142e4848285016142ab565b91505092915050565b60006020828403121561430357614302614185565b5b6000614311848285016141d3565b91505092915050565b6000819050919050565b600061433f61433a6143358461418a565b61431a565b61418a565b9050919050565b600061435182614324565b9050919050565b600061436382614346565b9050919050565b61437381614358565b82525050565b600060208201905061438e600083018461436a565b92915050565b61439d816141e8565b82525050565b60006020820190506143b86000830184614394565b92915050565b6000806000606084860312156143d7576143d6614185565b5b60006143e5868287016141d3565b93505060206143f6868287016141d3565b925050604061440786828701614209565b9150509250925092565b61441a816141aa565b82525050565b60006020820190506144356000830184614411565b92915050565b600060ff82169050919050565b6144518161443b565b82525050565b600060208201905061446c6000830184614448565b92915050565b60008060006060848603121561448b5761448a614185565b5b600061449986828701614209565b93505060206144aa86828701614209565b92505060406144bb868287016142ab565b9150509250925092565b600080604083850312156144dc576144db614185565b5b60006144ea858286016141d3565b92505060206144fb858286016142ab565b9150509250929050565b6000806040838503121561451c5761451b614185565b5b600061452a85828601614209565b925050602061453b85828601614209565b9150509250929050565b60006020828403121561455b5761455a614185565b5b600061456984828501614209565b91505092915050565b6000806040838503121561458957614588614185565b5b6000614597858286016141d3565b92505060206145a8858286016141d3565b9150509250929050565b60008060008060008060c087890312156145cf576145ce614185565b5b60006145dd89828a01614209565b96505060206145ee89828a01614209565b95505060406145ff89828a01614209565b945050606061461089828a01614209565b935050608061462189828a01614209565b92505060a061463289828a01614209565b9150509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061468657607f821691505b6020821081141561469a5761469961463f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146d66020836140d5565b91506146e1826146a0565b602082019050919050565b60006020820190508181036000830152614705816146c9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006147686028836140d5565b91506147738261470c565b604082019050919050565b600060208201905081810360008301526147978161475b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147d8826141e8565b91506147e3836141e8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148185761481761479e565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061487f6033836140d5565b915061488a82614823565b604082019050919050565b600060208201905081810360008301526148ae81614872565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b60006149116030836140d5565b915061491c826148b5565b604082019050919050565b6000602082019050818103600083015261494081614904565b9050919050565b6000614952826141e8565b915061495d836141e8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149965761499561479e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149db826141e8565b91506149e6836141e8565b9250826149f6576149f56149a1565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614a5d602f836140d5565b9150614a6882614a01565b604082019050919050565b60006020820190508181036000830152614a8c81614a50565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614aef6024836140d5565b9150614afa82614a93565b604082019050919050565b60006020820190508181036000830152614b1e81614ae2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614b816039836140d5565b9150614b8c82614b25565b604082019050919050565b60006020820190508181036000830152614bb081614b74565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614c136025836140d5565b9150614c1e82614bb7565b604082019050919050565b60006020820190508181036000830152614c4281614c06565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614ca56035836140d5565b9150614cb082614c49565b604082019050919050565b60006020820190508181036000830152614cd481614c98565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614d376034836140d5565b9150614d4282614cdb565b604082019050919050565b60006020820190508181036000830152614d6681614d2a565b9050919050565b7f4d757374206b656570206665657320617420333325206f72206c657373000000600082015250565b6000614da3601d836140d5565b9150614dae82614d6d565b602082019050919050565b60006020820190508181036000830152614dd281614d96565b9050919050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000614e0f601d836140d5565b9150614e1a82614dd9565b602082019050919050565b60006020820190508181036000830152614e3e81614e02565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ea16026836140d5565b9150614eac82614e45565b604082019050919050565b60006020820190508181036000830152614ed081614e94565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614f0d6020836140d5565b9150614f1882614ed7565b602082019050919050565b60006020820190508181036000830152614f3c81614f00565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614f9f602a836140d5565b9150614faa82614f43565b604082019050919050565b60006020820190508181036000830152614fce81614f92565b9050919050565b600081519050614fe4816141f2565b92915050565b60006020828403121561500057614fff614185565b5b600061500e84828501614fd5565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150736024836140d5565b915061507e82615017565b604082019050919050565b600060208201905081810360008301526150a281615066565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151056022836140d5565b9150615110826150a9565b604082019050919050565b60006020820190508181036000830152615134816150f8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151976025836140d5565b91506151a28261513b565b604082019050919050565b600060208201905081810360008301526151c68161518a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006152296023836140d5565b9150615234826151cd565b604082019050919050565b600060208201905081810360008301526152588161521c565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006152e16049836140d5565b91506152ec8261525f565b606082019050919050565b60006020820190508181036000830152615310816152d4565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006153736035836140d5565b915061537e82615317565b604082019050919050565b600060208201905081810360008301526153a281615366565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006153df6013836140d5565b91506153ea826153a9565b602082019050919050565b6000602082019050818103600083015261540e816153d2565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006154716036836140d5565b915061547c82615415565b604082019050919050565b600060208201905081810360008301526154a081615464565b9050919050565b60006154b2826141e8565b91506154bd836141e8565b9250828210156154d0576154cf61479e565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006155376026836140d5565b9150615542826154db565b604082019050919050565b600060208201905081810360008301526155668161552a565b9050919050565b600081905092915050565b50565b600061558860008361556d565b915061559382615578565b600082019050919050565b60006155a98261557b565b9150819050919050565b60006060820190506155c86000830186614394565b6155d56020830185614394565b6155e26040830184614394565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615657816141bc565b92915050565b60006020828403121561567357615672614185565b5b600061568184828501615648565b91505092915050565b6000819050919050565b60006156af6156aa6156a58461568a565b61431a565b6141e8565b9050919050565b6156bf81615694565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6156fa816141aa565b82525050565b600061570c83836156f1565b60208301905092915050565b6000602082019050919050565b6000615730826156c5565b61573a81856156d0565b9350615745836156e1565b8060005b8381101561577657815161575d8882615700565b975061576883615718565b925050600181019050615749565b5085935050505092915050565b600060a0820190506157986000830188614394565b6157a560208301876156b6565b81810360408301526157b78186615725565b90506157c66060830185614411565b6157d36080830184614394565b9695505050505050565b600060c0820190506157f26000830189614411565b6157ff6020830188614394565b61580c60408301876156b6565b61581960608301866156b6565b6158266080830185614411565b61583360a0830184614394565b979650505050505050565b60008060006060848603121561585757615856614185565b5b600061586586828701614fd5565b935050602061587686828701614fd5565b925050604061588786828701614fd5565b915050925092509256fea26469706673582212202d8c8b3bc029b3062315d364406e9aede6072510e1eda3f0c390f90c843d56d464736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103855760003560e01c80638da5cb5b116101d1578063b62496f511610102578063e884f260116100a0578063f63743421161006f578063f637434214610d41578063f8b45b0514610d6c578063f928364c14610d97578063fe72b27a14610dc25761038c565b8063e884f26014610c99578063e96a65d014610cc4578063f11a24d314610ced578063f2fde38b14610d185761038c565b8063c8c8ebe4116100dc578063c8c8ebe414610bdb578063d85ba06314610c06578063dd62ed3e14610c31578063e2f4560514610c6e5761038c565b8063b62496f514610b4a578063c024666814610b87578063c876d0b914610bb05761038c565b80639fccce321161016f578063a4c82a0011610149578063a4c82a0014610a7c578063a9059cbb14610aa7578063aacebbe314610ae4578063afa4f3b214610b0d5761038c565b80639fccce32146109e9578063a0d82dc514610a14578063a457c2d714610a3f5761038c565b806395d89b41116101ab57806395d89b411461093f5780639a7a23d61461096a5780639c3b4fdc146109935780639ec22c0e146109be5761038c565b80638da5cb5b146108be5780638ea5220f146108e957806392136913146109145761038c565b80632e82f1a0116102b65780636ddd1713116102545780637571336a116102235780637571336a1461081657806375f0a8741461083f5780637bce5a041461086a5780637ebb640a146108955761038c565b80636ddd17131461076e57806370a0823114610799578063715018a6146107d6578063730c1888146107ed5761038c565b806349bd5a5e1161029057806349bd5a5e146106b05780634a62bb65146106db5780634fbee193146107065780636a486a8e146107435761038c565b80632e82f1a01461061d578063313ce5671461064857806339509351146106735761038c565b8063184c16c5116103235780631f3fed8f116102fd5780631f3fed8f1461055f57806323b872dd1461058a57806327c8f835146105c75780632c3e486c146105f25761038c565b8063184c16c5146104de578063199ffc72146105095780631a8145bb146105345761038c565b806310d5de531161035f57806310d5de53146104225780631694505e1461045f57806318160ddd1461048a5780631816467f146104b55761038c565b806306fdde0314610391578063095ea7b3146103bc57806310a4cc66146103f95761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dff565b6040516103b39190614163565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de919061421e565b610e91565b6040516103f09190614279565b60405180910390f35b34801561040557600080fd5b50610420600480360381019061041b91906142c0565b610eaf565b005b34801561042e57600080fd5b50610449600480360381019061044491906142ed565b610f48565b6040516104569190614279565b60405180910390f35b34801561046b57600080fd5b50610474610f67565b6040516104819190614379565b60405180910390f35b34801561049657600080fd5b5061049f610f8b565b6040516104ac91906143a3565b60405180910390f35b3480156104c157600080fd5b506104dc60048036038101906104d791906142ed565b610f95565b005b3480156104ea57600080fd5b506104f36110d1565b60405161050091906143a3565b60405180910390f35b34801561051557600080fd5b5061051e6110d7565b60405161052b91906143a3565b60405180910390f35b34801561054057600080fd5b506105496110dd565b60405161055691906143a3565b60405180910390f35b34801561056b57600080fd5b506105746110e3565b60405161058191906143a3565b60405180910390f35b34801561059657600080fd5b506105b160048036038101906105ac91906143be565b6110e9565b6040516105be9190614279565b60405180910390f35b3480156105d357600080fd5b506105dc6111e1565b6040516105e99190614420565b60405180910390f35b3480156105fe57600080fd5b506106076111e7565b60405161061491906143a3565b60405180910390f35b34801561062957600080fd5b506106326111ed565b60405161063f9190614279565b60405180910390f35b34801561065457600080fd5b5061065d611200565b60405161066a9190614457565b60405180910390f35b34801561067f57600080fd5b5061069a6004803603810190610695919061421e565b611209565b6040516106a79190614279565b60405180910390f35b3480156106bc57600080fd5b506106c56112b5565b6040516106d29190614420565b60405180910390f35b3480156106e757600080fd5b506106f06112d9565b6040516106fd9190614279565b60405180910390f35b34801561071257600080fd5b5061072d600480360381019061072891906142ed565b6112ec565b60405161073a9190614279565b60405180910390f35b34801561074f57600080fd5b50610758611342565b60405161076591906143a3565b60405180910390f35b34801561077a57600080fd5b50610783611348565b6040516107909190614279565b60405180910390f35b3480156107a557600080fd5b506107c060048036038101906107bb91906142ed565b61135b565b6040516107cd91906143a3565b60405180910390f35b3480156107e257600080fd5b506107eb6113a3565b005b3480156107f957600080fd5b50610814600480360381019061080f9190614472565b61142b565b005b34801561082257600080fd5b5061083d600480360381019061083891906144c5565b61156b565b005b34801561084b57600080fd5b50610854611642565b6040516108619190614420565b60405180910390f35b34801561087657600080fd5b5061087f611668565b60405161088c91906143a3565b60405180910390f35b3480156108a157600080fd5b506108bc60048036038101906108b79190614505565b61166e565b005b3480156108ca57600080fd5b506108d361180e565b6040516108e09190614420565b60405180910390f35b3480156108f557600080fd5b506108fe611838565b60405161090b9190614420565b60405180910390f35b34801561092057600080fd5b5061092961185e565b60405161093691906143a3565b60405180910390f35b34801561094b57600080fd5b50610954611864565b6040516109619190614163565b60405180910390f35b34801561097657600080fd5b50610991600480360381019061098c91906144c5565b6118f6565b005b34801561099f57600080fd5b506109a8611a0f565b6040516109b591906143a3565b60405180910390f35b3480156109ca57600080fd5b506109d3611a15565b6040516109e091906143a3565b60405180910390f35b3480156109f557600080fd5b506109fe611a1b565b604051610a0b91906143a3565b60405180910390f35b348015610a2057600080fd5b50610a29611a21565b604051610a3691906143a3565b60405180910390f35b348015610a4b57600080fd5b50610a666004803603810190610a61919061421e565b611a27565b604051610a739190614279565b60405180910390f35b348015610a8857600080fd5b50610a91611b12565b604051610a9e91906143a3565b60405180910390f35b348015610ab357600080fd5b50610ace6004803603810190610ac9919061421e565b611b18565b604051610adb9190614279565b60405180910390f35b348015610af057600080fd5b50610b0b6004803603810190610b0691906142ed565b611b36565b005b348015610b1957600080fd5b50610b346004803603810190610b2f9190614545565b611c72565b604051610b419190614279565b60405180910390f35b348015610b5657600080fd5b50610b716004803603810190610b6c91906142ed565b611dc7565b604051610b7e9190614279565b60405180910390f35b348015610b9357600080fd5b50610bae6004803603810190610ba991906144c5565b611de7565b005b348015610bbc57600080fd5b50610bc5611f0c565b604051610bd29190614279565b60405180910390f35b348015610be757600080fd5b50610bf0611f1f565b604051610bfd91906143a3565b60405180910390f35b348015610c1257600080fd5b50610c1b611f25565b604051610c2891906143a3565b60405180910390f35b348015610c3d57600080fd5b50610c586004803603810190610c539190614572565b611f2b565b604051610c6591906143a3565b60405180910390f35b348015610c7a57600080fd5b50610c83611fb2565b604051610c9091906143a3565b60405180910390f35b348015610ca557600080fd5b50610cae611fb8565b604051610cbb9190614279565b60405180910390f35b348015610cd057600080fd5b50610ceb6004803603810190610ce691906145b2565b612058565b005b348015610cf957600080fd5b50610d026121d8565b604051610d0f91906143a3565b60405180910390f35b348015610d2457600080fd5b50610d3f6004803603810190610d3a91906142ed565b6121de565b005b348015610d4d57600080fd5b50610d566122d6565b604051610d6391906143a3565b60405180910390f35b348015610d7857600080fd5b50610d816122dc565b604051610d8e91906143a3565b60405180910390f35b348015610da357600080fd5b50610dac6122e2565b604051610db99190614279565b60405180910390f35b348015610dce57600080fd5b50610de96004803603810190610de49190614545565b612382565b604051610df69190614279565b60405180910390f35b606060038054610e0e9061466e565b80601f0160208091040260200160405190810160405280929190818152602001828054610e3a9061466e565b8015610e875780601f10610e5c57610100808354040283529160200191610e87565b820191906000526020600020905b815481529060010190602001808311610e6a57829003601f168201915b5050505050905090565b6000610ea5610e9e61265a565b8484612662565b6001905092915050565b610eb761265a565b73ffffffffffffffffffffffffffffffffffffffff16610ed561180e565b73ffffffffffffffffffffffffffffffffffffffff1614610f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f22906146ec565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610f9d61265a565b73ffffffffffffffffffffffffffffffffffffffff16610fbb61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611011576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611008906146ec565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b60105481565b601d5481565b601c5481565b60006110f684848461282d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061114161265a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b89061477e565b60405180910390fd5b6111d5856111cd61265a565b858403612662565b60019150509392505050565b61dead81565b600c5481565b600b60009054906101000a900460ff1681565b60006012905090565b60006112ab61121661265a565b84846001600061122461265a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112a691906147cd565b612662565b6001905092915050565b7f000000000000000000000000689c4cb51c330500888aa8cf5fc70e782d6ceb4d81565b601160019054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160009054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113ab61265a565b73ffffffffffffffffffffffffffffffffffffffff166113c961180e565b73ffffffffffffffffffffffffffffffffffffffff161461141f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611416906146ec565b60405180910390fd5b61142960006134d0565b565b61143361265a565b73ffffffffffffffffffffffffffffffffffffffff1661145161180e565b73ffffffffffffffffffffffffffffffffffffffff16146114a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149e906146ec565b60405180910390fd5b6102588310156114ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e390614895565b60405180910390fd5b6103e882111580156114ff575060008210155b61153e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153590614927565b60405180910390fd5b82600c819055508160108190555080600b60006101000a81548160ff021916908315150217905550505050565b61157361265a565b73ffffffffffffffffffffffffffffffffffffffff1661159161180e565b73ffffffffffffffffffffffffffffffffffffffff16146115e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115de906146ec565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b61167661265a565b73ffffffffffffffffffffffffffffffffffffffff1661169461180e565b73ffffffffffffffffffffffffffffffffffffffff16146116ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e1906146ec565b60405180910390fd5b670de0b6b3a76400006103e86001611700610f8b565b61170a9190614947565b61171491906149d0565b61171e91906149d0565b821015611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790614a73565b60405180910390fd5b670de0b6b3a7640000826117749190614947565b600881905550670de0b6b3a76400006103e86005611790610f8b565b61179a9190614947565b6117a491906149d0565b6117ae91906149d0565b8110156117f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e790614b05565b60405180910390fd5b670de0b6b3a7640000816118049190614947565b6009819055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60195481565b6060600480546118739061466e565b80601f016020809104026020016040519081016040528092919081815260200182805461189f9061466e565b80156118ec5780601f106118c1576101008083540402835291602001916118ec565b820191906000526020600020905b8154815290600101906020018083116118cf57829003601f168201915b5050505050905090565b6118fe61265a565b73ffffffffffffffffffffffffffffffffffffffff1661191c61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611972576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611969906146ec565b60405180910390fd5b7f000000000000000000000000689c4cb51c330500888aa8cf5fc70e782d6ceb4d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a01576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f890614b97565b60405180910390fd5b611a0b8282613596565b5050565b60175481565b600f5481565b601e5481565b601b5481565b60008060016000611a3661265a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611af3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aea90614c29565b60405180910390fd5b611b07611afe61265a565b85858403612662565b600191505092915050565b600d5481565b6000611b2c611b2561265a565b848461282d565b6001905092915050565b611b3e61265a565b73ffffffffffffffffffffffffffffffffffffffff16611b5c61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611bb2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba9906146ec565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611c7c61265a565b73ffffffffffffffffffffffffffffffffffffffff16611c9a61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611cf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce7906146ec565b60405180910390fd5b620186a06001611cfe610f8b565b611d089190614947565b611d1291906149d0565b821015611d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4b90614cbb565b60405180910390fd5b6103e86005611d61610f8b565b611d6b9190614947565b611d7591906149d0565b821115611db7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dae90614d4d565b60405180910390fd5b81600a8190555060019050919050565b60216020528060005260406000206000915054906101000a900460ff1681565b611def61265a565b73ffffffffffffffffffffffffffffffffffffffff16611e0d61180e565b73ffffffffffffffffffffffffffffffffffffffff1614611e63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5a906146ec565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f009190614279565b60405180910390a25050565b601360009054906101000a900460ff1681565b60085481565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b6000611fc261265a565b73ffffffffffffffffffffffffffffffffffffffff16611fe061180e565b73ffffffffffffffffffffffffffffffffffffffff1614612036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202d906146ec565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b61206061265a565b73ffffffffffffffffffffffffffffffffffffffff1661207e61180e565b73ffffffffffffffffffffffffffffffffffffffff16146120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb906146ec565b60405180910390fd5b8560158190555084601681905550836017819055506017546016546015546120fc91906147cd565b61210691906147cd565b60148190555060216014541115612152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214990614db9565b60405180910390fd5b8260198190555081601a8190555080601b8190555060175460165460155461217a91906147cd565b61218491906147cd565b601881905550601e60145411156121d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c790614e25565b60405180910390fd5b505050505050565b60165481565b6121e661265a565b73ffffffffffffffffffffffffffffffffffffffff1661220461180e565b73ffffffffffffffffffffffffffffffffffffffff161461225a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612251906146ec565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156122ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c190614eb7565b60405180910390fd5b6122d3816134d0565b50565b601a5481565b60095481565b60006122ec61265a565b73ffffffffffffffffffffffffffffffffffffffff1661230a61180e565b73ffffffffffffffffffffffffffffffffffffffff1614612360576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612357906146ec565b60405180910390fd5b6000601160016101000a81548160ff0219169083151502179055506001905090565b600061238c61265a565b73ffffffffffffffffffffffffffffffffffffffff166123aa61180e565b73ffffffffffffffffffffffffffffffffffffffff1614612400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f7906146ec565b60405180910390fd5b600e54600f5461241091906147cd565b4211612451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244890614f23565b60405180910390fd5b6103e8821115612496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248d90614fb5565b60405180910390fd5b42600f8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000689c4cb51c330500888aa8cf5fc70e782d6ceb4d6040518263ffffffff1660e01b81526004016124f89190614420565b602060405180830381865afa158015612515573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125399190614fea565b90506000612564612710612556868561363790919063ffffffff16565b61364d90919063ffffffff16565b9050600081111561259d5761259c7f000000000000000000000000689c4cb51c330500888aa8cf5fc70e782d6ceb4d61dead83613663565b5b60007f000000000000000000000000689c4cb51c330500888aa8cf5fc70e782d6ceb4d90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561260a57600080fd5b505af115801561261e573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c990615089565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612742576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127399061511b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161282091906143a3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561289d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612894906151ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561290d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129049061523f565b60405180910390fd5b60008114156129275761292283836000613663565b6134cb565b601160019054906101000a900460ff1615612ef55761294461180e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156129b2575061298261180e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129eb5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a25575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612a3e5750600560149054906101000a900460ff16155b15612ef457601360009054906101000a900460ff1615612c0b57612a6061180e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ae757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b3f57507f000000000000000000000000689c4cb51c330500888aa8cf5fc70e782d6ceb4d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612c0a5743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612bc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbc906152f7565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cae5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d5557600854811115612cf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cef90615389565b60405180910390fd5b600954612d048361135b565b82612d0f91906147cd565b1115612d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d47906153f5565b60405180910390fd5b612ef3565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612df85750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e4757600854811115612e42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3990615487565b60405180910390fd5b612ef2565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612ef157600954612ea48361135b565b82612eaf91906147cd565b1115612ef0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ee7906153f5565b60405180910390fd5b5b5b5b5b5b6000612f003061135b565b90506000600a548210159050808015612f255750601160009054906101000a900460ff165b8015612f3e5750600560149054906101000a900460ff16155b8015612f945750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612fea5750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130405750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613084576001600560146101000a81548160ff0219169083151502179055506130686138e4565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156130ea5750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156131025750600b60009054906101000a900460ff165b801561311d5750600c54600d5461311991906147cd565b4210155b80156131735750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561318257613180613bcb565b505b6000600560149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132385750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561324257600090505b600081156134bb57602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132a557506000601854115b15613372576132d260646132c46018548861363790919063ffffffff16565b61364d90919063ffffffff16565b9050601854601a54826132e59190614947565b6132ef91906149d0565b601d600082825461330091906147cd565b92505081905550601854601b54826133189190614947565b61332291906149d0565b601e600082825461333391906147cd565b925050819055506018546019548261334b9190614947565b61335591906149d0565b601c600082825461336691906147cd565b92505081905550613497565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133cd57506000601454115b15613496576133fa60646133ec6014548861363790919063ffffffff16565b61364d90919063ffffffff16565b90506014546016548261340d9190614947565b61341791906149d0565b601d600082825461342891906147cd565b92505081905550601454601754826134409190614947565b61344a91906149d0565b601e600082825461345b91906147cd565b92505081905550601454601554826134739190614947565b61347d91906149d0565b601c600082825461348e91906147cd565b925050819055505b5b60008111156134ac576134ab873083613663565b5b80856134b891906154a7565b94505b6134c6878787613663565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836136459190614947565b905092915050565b6000818361365b91906149d0565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136ca906151ad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161373a9061523f565b60405180910390fd5b61374e838383613d91565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156137d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137cb9061554d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461386791906147cd565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138cb91906143a3565b60405180910390a36138de848484613d96565b50505050565b60006138ef3061135b565b90506000601e54601c54601d5461390691906147cd565b61391091906147cd565b90506000808314806139225750600082145b1561392f57505050613bc9565b6014600a5461393e9190614947565b831115613957576014600a546139549190614947565b92505b6000600283601d548661396a9190614947565b61397491906149d0565b61397e91906149d0565b905060006139958286613d9b90919063ffffffff16565b905060004790506139a582613db1565b60006139ba8247613d9b90919063ffffffff16565b905060006139e5876139d7601c548561363790919063ffffffff16565b61364d90919063ffffffff16565b90506000613a1088613a02601e548661363790919063ffffffff16565b61364d90919063ffffffff16565b90506000818385613a2191906154a7565b613a2b91906154a7565b90506000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613a8b9061559e565b60006040518083038185875af1925050503d8060008114613ac8576040519150601f19603f3d011682016040523d82523d6000602084013e613acd565b606091505b505080985050600087118015613ae35750600081115b15613b3057613af28782613fee565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601d54604051613b27939291906155b3565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613b769061559e565b60006040518083038185875af1925050503d8060008114613bb3576040519150601f19603f3d011682016040523d82523d6000602084013e613bb8565b606091505b505080985050505050505050505050505b565b600042600d8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000689c4cb51c330500888aa8cf5fc70e782d6ceb4d6040518263ffffffff1660e01b8152600401613c2f9190614420565b602060405180830381865afa158015613c4c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c709190614fea565b90506000613c9d612710613c8f6010548561363790919063ffffffff16565b61364d90919063ffffffff16565b90506000811115613cd657613cd57f000000000000000000000000689c4cb51c330500888aa8cf5fc70e782d6ceb4d61dead83613663565b5b60007f000000000000000000000000689c4cb51c330500888aa8cf5fc70e782d6ceb4d90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d4357600080fd5b505af1158015613d57573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613da991906154a7565b905092915050565b6000600267ffffffffffffffff811115613dce57613dcd6155ea565b5b604051908082528060200260200182016040528015613dfc5781602001602082028036833780820191505090505b5090503081600081518110613e1457613e13615619565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613eb9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613edd919061565d565b81600181518110613ef157613ef0615619565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613f56307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612662565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613fb8959493929190615783565b600060405180830381600087803b158015613fd257600080fd5b505af1158015613fe6573d6000803e3d6000fd5b505050505050565b614019307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612662565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401614080969594939291906157dd565b60606040518083038185885af115801561409e573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906140c3919061583e565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141045780820151818401526020810190506140e9565b83811115614113576000848401525b50505050565b6000601f19601f8301169050919050565b6000614135826140ca565b61413f81856140d5565b935061414f8185602086016140e6565b61415881614119565b840191505092915050565b6000602082019050818103600083015261417d818461412a565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006141b58261418a565b9050919050565b6141c5816141aa565b81146141d057600080fd5b50565b6000813590506141e2816141bc565b92915050565b6000819050919050565b6141fb816141e8565b811461420657600080fd5b50565b600081359050614218816141f2565b92915050565b6000806040838503121561423557614234614185565b5b6000614243858286016141d3565b925050602061425485828601614209565b9150509250929050565b60008115159050919050565b6142738161425e565b82525050565b600060208201905061428e600083018461426a565b92915050565b61429d8161425e565b81146142a857600080fd5b50565b6000813590506142ba81614294565b92915050565b6000602082840312156142d6576142d5614185565b5b60006142e4848285016142ab565b91505092915050565b60006020828403121561430357614302614185565b5b6000614311848285016141d3565b91505092915050565b6000819050919050565b600061433f61433a6143358461418a565b61431a565b61418a565b9050919050565b600061435182614324565b9050919050565b600061436382614346565b9050919050565b61437381614358565b82525050565b600060208201905061438e600083018461436a565b92915050565b61439d816141e8565b82525050565b60006020820190506143b86000830184614394565b92915050565b6000806000606084860312156143d7576143d6614185565b5b60006143e5868287016141d3565b93505060206143f6868287016141d3565b925050604061440786828701614209565b9150509250925092565b61441a816141aa565b82525050565b60006020820190506144356000830184614411565b92915050565b600060ff82169050919050565b6144518161443b565b82525050565b600060208201905061446c6000830184614448565b92915050565b60008060006060848603121561448b5761448a614185565b5b600061449986828701614209565b93505060206144aa86828701614209565b92505060406144bb868287016142ab565b9150509250925092565b600080604083850312156144dc576144db614185565b5b60006144ea858286016141d3565b92505060206144fb858286016142ab565b9150509250929050565b6000806040838503121561451c5761451b614185565b5b600061452a85828601614209565b925050602061453b85828601614209565b9150509250929050565b60006020828403121561455b5761455a614185565b5b600061456984828501614209565b91505092915050565b6000806040838503121561458957614588614185565b5b6000614597858286016141d3565b92505060206145a8858286016141d3565b9150509250929050565b60008060008060008060c087890312156145cf576145ce614185565b5b60006145dd89828a01614209565b96505060206145ee89828a01614209565b95505060406145ff89828a01614209565b945050606061461089828a01614209565b935050608061462189828a01614209565b92505060a061463289828a01614209565b9150509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061468657607f821691505b6020821081141561469a5761469961463f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006146d66020836140d5565b91506146e1826146a0565b602082019050919050565b60006020820190508181036000830152614705816146c9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006147686028836140d5565b91506147738261470c565b604082019050919050565b600060208201905081810360008301526147978161475b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006147d8826141e8565b91506147e3836141e8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148185761481761479e565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061487f6033836140d5565b915061488a82614823565b604082019050919050565b600060208201905081810360008301526148ae81614872565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b60006149116030836140d5565b915061491c826148b5565b604082019050919050565b6000602082019050818103600083015261494081614904565b9050919050565b6000614952826141e8565b915061495d836141e8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156149965761499561479e565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149db826141e8565b91506149e6836141e8565b9250826149f6576149f56149a1565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614a5d602f836140d5565b9150614a6882614a01565b604082019050919050565b60006020820190508181036000830152614a8c81614a50565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614aef6024836140d5565b9150614afa82614a93565b604082019050919050565b60006020820190508181036000830152614b1e81614ae2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614b816039836140d5565b9150614b8c82614b25565b604082019050919050565b60006020820190508181036000830152614bb081614b74565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614c136025836140d5565b9150614c1e82614bb7565b604082019050919050565b60006020820190508181036000830152614c4281614c06565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614ca56035836140d5565b9150614cb082614c49565b604082019050919050565b60006020820190508181036000830152614cd481614c98565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614d376034836140d5565b9150614d4282614cdb565b604082019050919050565b60006020820190508181036000830152614d6681614d2a565b9050919050565b7f4d757374206b656570206665657320617420333325206f72206c657373000000600082015250565b6000614da3601d836140d5565b9150614dae82614d6d565b602082019050919050565b60006020820190508181036000830152614dd281614d96565b9050919050565b7f4d757374206b656570206665657320617420333025206f72206c657373000000600082015250565b6000614e0f601d836140d5565b9150614e1a82614dd9565b602082019050919050565b60006020820190508181036000830152614e3e81614e02565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ea16026836140d5565b9150614eac82614e45565b604082019050919050565b60006020820190508181036000830152614ed081614e94565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614f0d6020836140d5565b9150614f1882614ed7565b602082019050919050565b60006020820190508181036000830152614f3c81614f00565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614f9f602a836140d5565b9150614faa82614f43565b604082019050919050565b60006020820190508181036000830152614fce81614f92565b9050919050565b600081519050614fe4816141f2565b92915050565b60006020828403121561500057614fff614185565b5b600061500e84828501614fd5565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150736024836140d5565b915061507e82615017565b604082019050919050565b600060208201905081810360008301526150a281615066565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151056022836140d5565b9150615110826150a9565b604082019050919050565b60006020820190508181036000830152615134816150f8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151976025836140d5565b91506151a28261513b565b604082019050919050565b600060208201905081810360008301526151c68161518a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006152296023836140d5565b9150615234826151cd565b604082019050919050565b600060208201905081810360008301526152588161521c565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b60006152e16049836140d5565b91506152ec8261525f565b606082019050919050565b60006020820190508181036000830152615310816152d4565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006153736035836140d5565b915061537e82615317565b604082019050919050565b600060208201905081810360008301526153a281615366565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006153df6013836140d5565b91506153ea826153a9565b602082019050919050565b6000602082019050818103600083015261540e816153d2565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006154716036836140d5565b915061547c82615415565b604082019050919050565b600060208201905081810360008301526154a081615464565b9050919050565b60006154b2826141e8565b91506154bd836141e8565b9250828210156154d0576154cf61479e565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006155376026836140d5565b9150615542826154db565b604082019050919050565b600060208201905081810360008301526155668161552a565b9050919050565b600081905092915050565b50565b600061558860008361556d565b915061559382615578565b600082019050919050565b60006155a98261557b565b9150819050919050565b60006060820190506155c86000830186614394565b6155d56020830185614394565b6155e26040830184614394565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615657816141bc565b92915050565b60006020828403121561567357615672614185565b5b600061568184828501615648565b91505092915050565b6000819050919050565b60006156af6156aa6156a58461568a565b61431a565b6141e8565b9050919050565b6156bf81615694565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6156fa816141aa565b82525050565b600061570c83836156f1565b60208301905092915050565b6000602082019050919050565b6000615730826156c5565b61573a81856156d0565b9350615745836156e1565b8060005b8381101561577657815161575d8882615700565b975061576883615718565b925050600181019050615749565b5085935050505092915050565b600060a0820190506157986000830188614394565b6157a560208301876156b6565b81810360408301526157b78186615725565b90506157c66060830185614411565b6157d36080830184614394565b9695505050505050565b600060c0820190506157f26000830189614411565b6157ff6020830188614394565b61580c60408301876156b6565b61581960608301866156b6565b6158266080830185614411565b61583360a0830184614394565b979650505050505050565b60008060006060848603121561585757615856614185565b5b600061586586828701614fd5565b935050602061587686828701614fd5565b925050604061588786828701614fd5565b915050925092509256fea26469706673582212202d8c8b3bc029b3062315d364406e9aede6072510e1eda3f0c390f90c843d56d464736f6c634300080a0033

Deployed Bytecode Sourcemap

12196:12318:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2456:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3241:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16972:78;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13483:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12268:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2729:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18433:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12731:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12816:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13335:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13300;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3391:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12371:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12655:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12622:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2643:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3771:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12326:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12904:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18570:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13174:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12872:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2828:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;769:88;;;;;;;;;;;;;:::i;:::-;;23077:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16838:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12459:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13085;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16451:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;588:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12490:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13203:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2547:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17858:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13149:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12780:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13369:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13273:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3966:341;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12701:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2945:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18246:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16101:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13548:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17696:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13010:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12521:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13056:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3100:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12582:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15986:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17056:634;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13117:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;863:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13235:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12557:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15883:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23892:619;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2456:85;2510:13;2534:5;2527:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2456:85;:::o;3241:144::-;3324:4;3331:39;3340:12;:10;:12::i;:::-;3354:7;3363:6;3331:8;:39::i;:::-;3379:4;3372:11;;3241:144;;;;:::o;16972:78::-;707:12;:10;:12::i;:::-;696:23;;:7;:5;:7::i;:::-;:23;;;688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17041:7:::1;17027:11;;:21;;;;;;;;;;;;;;;;;;16972:78:::0;:::o;13483:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;12268:51::-;;;:::o;2729:93::-;2790:7;2808:12;;2801:19;;2729:93;:::o;18433:131::-;707:12;:10;:12::i;:::-;696:23;;:7;:5;:7::i;:::-;:23;;;688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18530:9:::1;;;;;;;;;;;18502:38;;18519:9;18502:38;;;;;;;;;;;;18553:9;18541;;:21;;;;;;;;;;;;;;;;;;18433:131:::0;:::o;12731:47::-;;;;:::o;12816:36::-;;;;:::o;13335:33::-;;;;:::o;13300:::-;;;;:::o;3391:374::-;3496:4;3504:36;3514:6;3522:9;3533:6;3504:9;:36::i;:::-;3541:24;3568:11;:19;3580:6;3568:19;;;;;;;;;;;;;;;:33;3588:12;:10;:12::i;:::-;3568:33;;;;;;;;;;;;;;;;3541:60;;3630:6;3610:16;:26;;3602:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;3693:57;3702:6;3710:12;:10;:12::i;:::-;3743:6;3724:16;:25;3693:8;:57::i;:::-;3759:4;3752:11;;;3391:374;;;;;:::o;12371:53::-;12417:6;12371:53;:::o;12655:45::-;;;;:::o;12622:32::-;;;;;;;;;;;;;:::o;2643:80::-;2701:5;2718:2;2711:9;;2643:80;:::o;3771:189::-;3859:4;3866:80;3875:12;:10;:12::i;:::-;3889:7;3935:10;3898:11;:25;3910:12;:10;:12::i;:::-;3898:25;;;;;;;;;;;;;;;:34;3924:7;3898:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;3866:8;:80::i;:::-;3954:4;3947:11;;3771:189;;;;:::o;12326:38::-;;;:::o;12904:33::-;;;;;;;;;;;;;:::o;18570:110::-;18636:4;18650:19;:28;18670:7;18650:28;;;;;;;;;;;;;;;;;;;;;;;;;18643:35;;18570:110;;;:::o;13174:28::-;;;;:::o;12872:30::-;;;;;;;;;;;;;:::o;2828:111::-;2902:7;2919:9;:18;2929:7;2919:18;;;;;;;;;;;;;;;;2912:25;;2828:111;;;:::o;769:88::-;707:12;:10;:12::i;:::-;696:23;;:7;:5;:7::i;:::-;:23;;;688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;825:30:::1;852:1;825:18;:30::i;:::-;769:88::o:0;23077:387::-;707:12;:10;:12::i;:::-;696:23;;:7;:5;:7::i;:::-;:23;;;688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23219:3:::1;23196:19;:26;;23188:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;23298:4;23286:8;:16;;:33;;;;;23318:1;23306:8;:13;;23286:33;23278:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;23390:19;23372:15;:37;;;;23429:8;23410:16;:27;;;;23454:8;23438:13;;:24;;;;;;;;;;;;;;;;;;23077:387:::0;;;:::o;16838:128::-;707:12;:10;:12::i;:::-;696:23;;:7;:5;:7::i;:::-;:23;;;688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16960:4:::1;16918:31;:39;16950:6;16918:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;16838:128:::0;;:::o;12459:30::-;;;;;;;;;;;;;:::o;13085:::-;;;;:::o;16451:381::-;707:12;:10;:12::i;:::-;696:23;;:7;:5;:7::i;:::-;:23;;;688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16596:4:::1;16588;16583:1;16567:13;:11;:13::i;:::-;:17;;;;:::i;:::-;16566:26;;;;:::i;:::-;16565:35;;;;:::i;:::-;16553:8;:47;;16545:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;16687:6;16675:8;:19;;;;:::i;:::-;16652:20;:42;;;;16750:4;16742;16737:1;16721:13;:11;:13::i;:::-;:17;;;;:::i;:::-;16720:26;;;;:::i;:::-;16719:35;;;;:::i;:::-;16703:12;:51;;16695:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;16823:6;16807:12;:23;;;;:::i;:::-;16795:9;:35;;;;16451:381:::0;;:::o;588:71::-;634:7;651:6;;;;;;;;;;;644:13;;588:71;:::o;12490:24::-;;;;;;;;;;;;;:::o;13203:31::-;;;;:::o;2547:90::-;2603:13;2627:7;2620:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2547:90;:::o;17858:216::-;707:12;:10;:12::i;:::-;696:23;;:7;:5;:7::i;:::-;:23;;;688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17954:13:::1;17946:21;;:4;:21;;;;17938:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;18031:41;18060:4;18066:5;18031:28;:41::i;:::-;17858:216:::0;;:::o;13149:24::-;;;;:::o;12780:35::-;;;;:::o;13369:27::-;;;;:::o;13273:25::-;;;;:::o;3966:341::-;4059:4;4066:24;4093:11;:25;4105:12;:10;:12::i;:::-;4093:25;;;;;;;;;;;;;;;:34;4119:7;4093:34;;;;;;;;;;;;;;;;4066:61;;4156:15;4136:16;:35;;4128:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4225:67;4234:12;:10;:12::i;:::-;4248:7;4276:15;4257:16;:34;4225:8;:67::i;:::-;4301:4;4294:11;;;3966:341;;;;:::o;12701:29::-;;;;:::o;2945:149::-;3031:4;3038:42;3048:12;:10;:12::i;:::-;3062:9;3073:6;3038:9;:42::i;:::-;3088:4;3081:11;;2945:149;;;;:::o;18246:181::-;707:12;:10;:12::i;:::-;696:23;;:7;:5;:7::i;:::-;:23;;;688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18372:15:::1;;;;;;;;;;;18329:59;;18352:18;18329:59;;;;;;;;;;;;18407:18;18389:15;;:36;;;;;;;;;;;;;;;;;;18246:181:::0;:::o;16101:344::-;16179:4;707:12;:10;:12::i;:::-;696:23;;:7;:5;:7::i;:::-;:23;;;688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16230:6:::1;16225:1;16209:13;:11;:13::i;:::-;:17;;;;:::i;:::-;16208:28;;;;:::i;:::-;16195:9;:41;;16186:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;16338:4;16333:1;16317:13;:11;:13::i;:::-;:17;;;;:::i;:::-;16316:26;;;;:::i;:::-;16303:9;:39;;16295:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;16421:9;16400:18;:30;;;;16439:4;16432:11;;16101:344:::0;;;:::o;13548:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;17696:156::-;707:12;:10;:12::i;:::-;696:23;;:7;:5;:7::i;:::-;:23;;;688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17802:8:::1;17771:19;:28;17791:7;17771:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;17832:7;17816:34;;;17841:8;17816:34;;;;;;:::i;:::-;;;;;;;;17696:156:::0;;:::o;13010:39::-;;;;;;;;;;;;;:::o;12521:35::-;;;;:::o;13056:27::-;;;;:::o;3100:135::-;3189:7;3206:11;:18;3218:5;3206:18;;;;;;;;;;;;;;;:27;3225:7;3206:27;;;;;;;;;;;;;;;;3199:34;;3100:135;;;;:::o;12582:33::-;;;;:::o;15986:109::-;16046:4;707:12;:10;:12::i;:::-;696:23;;:7;:5;:7::i;:::-;:23;;;688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16076:5:::1;16053:20;;:28;;;;;;;;;;;;;;;;;;16089:4;16082:11;;15986:109:::0;:::o;17056:634::-;707:12;:10;:12::i;:::-;696:23;;:7;:5;:7::i;:::-;:23;;;688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17268:16:::1;17250:15;:34;;;;17303:16;17285:15;:34;;;;17332:10;17320:9;:22;;;;17394:9;;17376:15;;17358;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;17343:12;:60;;;;17428:2;17412:12;;:18;;17404:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;17485:17;17466:16;:36;;;;17522:17;17503:16;:36;;;;17554:11;17541:10;:24;;;;17618:9;;17600:15;;17582;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;17566:13;:61;;;;17652:2;17636:12;;:18;;17628:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;17056:634:::0;;;;;;:::o;13117:30::-;;;;:::o;863:177::-;707:12;:10;:12::i;:::-;696:23;;:7;:5;:7::i;:::-;:23;;;688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;963:1:::1;943:22;;:8;:22;;;;935:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1010:28;1029:8;1010:18;:28::i;:::-;863:177:::0;:::o;13235:31::-;;;;:::o;12557:24::-;;;;:::o;15883:97::-;15936:4;707:12;:10;:12::i;:::-;696:23;;:7;:5;:7::i;:::-;:23;;;688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15961:5:::1;15944:14;;:22;;;;;;;;;;;;;;;;;;15974:4;15967:11;;15883:97:::0;:::o;23892:619::-;23976:4;707:12;:10;:12::i;:::-;696:23;;:7;:5;:7::i;:::-;:23;;;688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24031:19:::1;;24008:20;;:42;;;;:::i;:::-;23990:15;:60;23982:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;24106:4;24095:7;:15;;24087:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24181:15;24158:20;:38;;;;24197:28;24228:4;:14;;;24243:13;24228:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24197:60;;24258:20;24281:44;24319:5;24281:33;24306:7;24281:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;24258:67;;24345:1;24330:12;:16;24326:86;;;24349:61;24365:13;24388:6;24397:12;24349:15;:61::i;:::-;24326:86;24413:19;24450:13;24413:51;;24465:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24483:14;;;;;;;;;;24505:4;24498:11;;;;;23892:619:::0;;;:::o;186:92::-;239:7;266:10;259:17;;186:92;:::o;5703:297::-;5811:1;5794:19;;:5;:19;;;;5786:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5882:1;5863:21;;:7;:21;;;;5855:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5954:6;5924:11;:18;5936:5;5924:18;;;;;;;;;;;;;;;:27;5943:7;5924:27;;;;;;;;;;;;;;;:36;;;;5982:7;5966:32;;5975:5;5966:32;;;5991:6;5966:32;;;;;;:::i;:::-;;;;;;;;5703:297;;;:::o;18734:2506::-;18837:1;18821:18;;:4;:18;;;;18813:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18904:1;18890:16;;:2;:16;;;;18882:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;18961:1;18951:6;:11;18947:56;;;18965:28;18981:4;18987:2;18991:1;18965:15;:28::i;:::-;18995:7;;18947:56;19007:14;;;;;;;;;;;19003:967;;;19036:7;:5;:7::i;:::-;19028:15;;:4;:15;;;;:32;;;;;19053:7;:5;:7::i;:::-;19047:13;;:2;:13;;;;19028:32;:51;;;;;19077:1;19063:16;;:2;:16;;;;19028:51;:75;;;;;19096:6;19082:21;;:2;:21;;;;19028:75;:87;;;;;19107:8;;;;;;;;;;;19106:9;19028:87;19024:945;;;19122:20;;;;;;;;;;;19118:309;;;19157:7;:5;:7::i;:::-;19151:13;;:2;:13;;;;:46;;;;;19181:15;19167:30;;:2;:30;;;;19151:46;:77;;;;;19214:13;19200:28;;:2;:28;;;;19151:77;19146:280;;;19280:12;19239:28;:39;19268:9;19239:39;;;;;;;;;;;;;;;;:53;19231:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;19412:12;19370:28;:39;19399:9;19370:39;;;;;;;;;;;;;;;:54;;;;19146:280;19118:309;19432:25;:31;19458:4;19432:31;;;;;;;;;;;;;;;;;;;;;;;;;:70;;;;;19467:31;:35;19499:2;19467:35;;;;;;;;;;;;;;;;;;;;;;;;;19466:36;19432:70;19428:540;;;19523:20;;19513:6;:30;;19505:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;19636:9;;19619:13;19629:2;19619:9;:13::i;:::-;19610:6;:22;;;;:::i;:::-;:35;;19601:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19428:540;;;19679:25;:29;19705:2;19679:29;;;;;;;;;;;;;;;;;;;;;;;;;:70;;;;;19712:31;:37;19744:4;19712:37;;;;;;;;;;;;;;;;;;;;;;;;;19711:38;19679:70;19675:293;;;19770:20;;19760:6;:30;;19752:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;19675:293;;;19861:31;:35;19893:2;19861:35;;;;;;;;;;;;;;;;;;;;;;;;;19856:112;;19933:9;;19916:13;19926:2;19916:9;:13::i;:::-;19907:6;:22;;;;:::i;:::-;:35;;19899:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19856:112;19675:293;19428:540;19024:945;19003:967;19970:28;20001:24;20019:4;20001:9;:24::i;:::-;19970:55;;20026:12;20065:18;;20041:20;:42;;20026:57;;20088:7;:21;;;;;20098:11;;;;;;;;;;;20088:21;:33;;;;;20113:8;;;;;;;;;;;20112:9;20088:33;:68;;;;;20125:25;:31;20151:4;20125:31;;;;;;;;;;;;;;;;;;;;;;;;;20124:32;20088:68;:97;;;;;20160:19;:25;20180:4;20160:25;;;;;;;;;;;;;;;;;;;;;;;;;20159:26;20088:97;:124;;;;;20189:19;:23;20209:2;20189:23;;;;;;;;;;;;;;;;;;;;;;;;;20188:24;20088:124;20084:176;;;20226:4;20215:8;;:15;;;;;;;;;;;;;;;;;;20231:10;:8;:10::i;:::-;20253:5;20242:8;;:16;;;;;;;;;;;;;;;;;;20084:176;20265:8;;;;;;;;;;;20264:9;:41;;;;;20276:25;:29;20302:2;20276:29;;;;;;;;;;;;;;;;;;;;;;;;;20264:41;:57;;;;;20308:13;;;;;;;;;;;20264:57;:111;;;;;20360:15;;20343:14;;:32;;;;:::i;:::-;20324:15;:51;;20264:111;:140;;;;;20379:19;:25;20399:4;20379:25;;;;;;;;;;;;;;;;;;;;;;;;;20378:26;20264:140;20260:178;;;20407:29;:27;:29::i;:::-;;20260:178;20438:12;20454:8;;;;;;;;;;;20453:9;20438:24;;20467:19;:25;20487:4;20467:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;20496:19;:23;20516:2;20496:23;;;;;;;;;;;;;;;;;;;;;;;;;20467:52;20463:76;;;20532:5;20522:15;;20463:76;20539:12;20561:7;20557:648;;;20575:25;:29;20601:2;20575:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;20624:1;20608:13;;:17;20575:50;20571:559;;;20635:34;20665:3;20635:25;20646:13;;20635:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;20628:41;;20720:13;;20700:16;;20693:4;:23;;;;:::i;:::-;20692:41;;;;:::i;:::-;20670:18;;:63;;;;;;;:::i;:::-;;;;;;;;20772:13;;20758:10;;20751:4;:17;;;;:::i;:::-;20750:35;;;;:::i;:::-;20734:12;;:51;;;;;;;:::i;:::-;;;;;;;;20836:13;;20816:16;;20809:4;:23;;;;:::i;:::-;20808:41;;;;:::i;:::-;20786:18;;:63;;;;;;;:::i;:::-;;;;;;;;20571:559;;;20860:25;:31;20886:4;20860:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;20910:1;20895:12;;:16;20860:51;20856:274;;;20921:33;20950:3;20921:24;20932:12;;20921:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;20914:40;;21004:12;;20985:15;;20978:4;:22;;;;:::i;:::-;20977:39;;;;:::i;:::-;20955:18;;:61;;;;;;;:::i;:::-;;;;;;;;21054:12;;21041:9;;21034:4;:16;;;;:::i;:::-;21033:33;;;;:::i;:::-;21017:12;;:49;;;;;;;:::i;:::-;;;;;;;;21116:12;;21097:15;;21090:4;:22;;;;:::i;:::-;21089:39;;;;:::i;:::-;21067:18;;:61;;;;;;;:::i;:::-;;;;;;;;20856:274;20571:559;21141:1;21134:4;:8;21130:59;;;21145:42;21161:4;21175;21182;21145:15;:42::i;:::-;21130:59;21199:4;21189:14;;;;;:::i;:::-;;;20557:648;21205:33;21221:4;21227:2;21231:6;21205:15;:33::i;:::-;18812:2428;;;;18734:2506;;;;:::o;1046:160::-;1111:16;1130:6;;;;;;;;;;;1111:25;;1148:8;1139:6;;:17;;;;;;;;;;;;;;;;;;1194:8;1163:40;;1184:8;1163:40;;;;;;;;;;;;1109:97;1046:160;:::o;18080:::-;18187:5;18153:25;:31;18179:4;18153:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;18232:5;18198:40;;18226:4;18198:40;;;;;;;;;;;;18080:160;;:::o;7207:84::-;7265:7;7287:1;7283;:5;;;;:::i;:::-;7276:12;;7207:84;;;;:::o;7297:::-;7355:7;7377:1;7373;:5;;;;:::i;:::-;7366:12;;7297:84;;;;:::o;4313:571::-;4425:1;4407:20;;:6;:20;;;;4399:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;4500:1;4479:23;;:9;:23;;;;4471:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;4543:47;4564:6;4572:9;4583:6;4543:20;:47::i;:::-;4591:21;4615:9;:17;4625:6;4615:17;;;;;;;;;;;;;;;;4591:41;;4658:6;4641:13;:23;;4633:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;4756:6;4740:13;:22;4720:9;:17;4730:6;4720:17;;;;;;;;;;;;;;;:42;;;;4788:6;4764:9;:20;4774:9;4764:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;4817:9;4800:35;;4809:6;4800:35;;;4828:6;4800:35;;;;;;:::i;:::-;;;;;;;;4836:46;4856:6;4864:9;4875:6;4836:19;:46::i;:::-;4398:486;4313:571;;;:::o;21841:1230::-;21870:23;21896:24;21914:4;21896:9;:24::i;:::-;21870:50;;21921:25;21989:12;;21969:18;;21949;;:38;;;;:::i;:::-;:52;;;;:::i;:::-;21921:80;;22002:12;22038:1;22019:15;:20;:46;;;;22064:1;22043:17;:22;22019:46;22015:62;;;22069:7;;;;;22015:62;22120:2;22099:18;;:23;;;;:::i;:::-;22081:15;:41;22077:91;;;22164:2;22143:18;;:23;;;;:::i;:::-;22125:41;;22077:91;22168:23;22253:1;22234:17;22213:18;;22195:15;:36;;;;:::i;:::-;22194:57;;;;:::i;:::-;:60;;;;:::i;:::-;22168:86;;22255:26;22284:36;22304:15;22284;:19;;:36;;;;:::i;:::-;22255:65;;22321:25;22349:21;22321:49;;22371:36;22388:18;22371:16;:36::i;:::-;22408:18;22429:44;22455:17;22429:21;:25;;:44;;;;:::i;:::-;22408:65;;22474:23;22500:57;22539:17;22500:34;22515:18;;22500:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;22474:83;;22558:17;22578:51;22611:17;22578:28;22593:12;;22578:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;22558:71;;22630:23;22687:9;22669:15;22656:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;22630:66;;22718:1;22697:18;:22;;;;22741:1;22720:18;:22;;;;22758:1;22743:12;:16;;;;22782:9;;;;;;;;;;;22774:23;;22805:9;22774:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22760:59;;;;;22842:1;22824:15;:19;:42;;;;;22865:1;22847:15;:19;22824:42;22820:172;;;22869:46;22882:15;22899;22869:12;:46::i;:::-;22921:69;22936:18;22955:15;22971:18;;22921:69;;;;;;;;:::i;:::-;;;;;;;;22820:172;23014:15;;;;;;;;;;;23006:29;;23043:21;23006:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22992:77;;;;;21869:1202;;;;;;;;;;21841:1230;:::o;23470:416::-;23527:4;23551:15;23534:14;:32;;;;23567:28;23598:4;:14;;;23613:13;23598:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23567:60;;23628:20;23651:53;23698:5;23651:42;23676:16;;23651:20;:24;;:42;;;;:::i;:::-;:46;;:53;;;;:::i;:::-;23628:76;;23724:1;23709:12;:16;23705:86;;;23728:61;23744:13;23767:6;23776:12;23728:15;:61::i;:::-;23705:86;23791:19;23828:13;23791:51;;23843:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23860:12;;;;;;;;;;23880:4;23873:11;;;;;23470:416;:::o;6006:90::-;;;;:::o;6102:91::-;;;;:::o;7118:83::-;7176:7;7198:1;7194;:5;;;;:::i;:::-;7187:12;;7118:83;;;;:::o;21246:337::-;21302:21;21340:1;21326:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21302:40;;21361:4;21343;21348:1;21343:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;21377:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21367:4;21372:1;21367:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;21400:62;21417:4;21432:15;21450:11;21400:8;:62::i;:::-;21463:15;:66;;;21530:11;21542:1;21545:4;21558;21565:15;21463:118;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21301:282;21246:337;:::o;21589:246::-;21660:62;21677:4;21692:15;21710:11;21660:8;:62::i;:::-;21723:15;:31;;;21762:9;21781:4;21787:11;21799:1;21802;12417:6;21817:15;21723:110;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21589:246;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:116::-;3564:21;3579:5;3564:21;:::i;:::-;3557:5;3554:32;3544:60;;3600:1;3597;3590:12;3544:60;3494:116;:::o;3616:133::-;3659:5;3697:6;3684:20;3675:29;;3713:30;3737:5;3713:30;:::i;:::-;3616:133;;;;:::o;3755:323::-;3811:6;3860:2;3848:9;3839:7;3835:23;3831:32;3828:119;;;3866:79;;:::i;:::-;3828:119;3986:1;4011:50;4053:7;4044:6;4033:9;4029:22;4011:50;:::i;:::-;4001:60;;3957:114;3755:323;;;;:::o;4084:329::-;4143:6;4192:2;4180:9;4171:7;4167:23;4163:32;4160:119;;;4198:79;;:::i;:::-;4160:119;4318:1;4343:53;4388:7;4379:6;4368:9;4364:22;4343:53;:::i;:::-;4333:63;;4289:117;4084:329;;;;:::o;4419:60::-;4447:3;4468:5;4461:12;;4419:60;;;:::o;4485:142::-;4535:9;4568:53;4586:34;4595:24;4613:5;4595:24;:::i;:::-;4586:34;:::i;:::-;4568:53;:::i;:::-;4555:66;;4485:142;;;:::o;4633:126::-;4683:9;4716:37;4747:5;4716:37;:::i;:::-;4703:50;;4633:126;;;:::o;4765:153::-;4842:9;4875:37;4906:5;4875:37;:::i;:::-;4862:50;;4765:153;;;:::o;4924:185::-;5038:64;5096:5;5038:64;:::i;:::-;5033:3;5026:77;4924:185;;:::o;5115:276::-;5235:4;5273:2;5262:9;5258:18;5250:26;;5286:98;5381:1;5370:9;5366:17;5357:6;5286:98;:::i;:::-;5115:276;;;;:::o;5397:118::-;5484:24;5502:5;5484:24;:::i;:::-;5479:3;5472:37;5397:118;;:::o;5521:222::-;5614:4;5652:2;5641:9;5637:18;5629:26;;5665:71;5733:1;5722:9;5718:17;5709:6;5665:71;:::i;:::-;5521:222;;;;:::o;5749:619::-;5826:6;5834;5842;5891:2;5879:9;5870:7;5866:23;5862:32;5859:119;;;5897:79;;:::i;:::-;5859:119;6017:1;6042:53;6087:7;6078:6;6067:9;6063:22;6042:53;:::i;:::-;6032:63;;5988:117;6144:2;6170:53;6215:7;6206:6;6195:9;6191:22;6170:53;:::i;:::-;6160:63;;6115:118;6272:2;6298:53;6343:7;6334:6;6323:9;6319:22;6298:53;:::i;:::-;6288:63;;6243:118;5749:619;;;;;:::o;6374:118::-;6461:24;6479:5;6461:24;:::i;:::-;6456:3;6449:37;6374:118;;:::o;6498:222::-;6591:4;6629:2;6618:9;6614:18;6606:26;;6642:71;6710:1;6699:9;6695:17;6686:6;6642:71;:::i;:::-;6498:222;;;;:::o;6726:86::-;6761:7;6801:4;6794:5;6790:16;6779:27;;6726:86;;;:::o;6818:112::-;6901:22;6917:5;6901:22;:::i;:::-;6896:3;6889:35;6818:112;;:::o;6936:214::-;7025:4;7063:2;7052:9;7048:18;7040:26;;7076:67;7140:1;7129:9;7125:17;7116:6;7076:67;:::i;:::-;6936:214;;;;:::o;7156:613::-;7230:6;7238;7246;7295:2;7283:9;7274:7;7270:23;7266:32;7263:119;;;7301:79;;:::i;:::-;7263:119;7421:1;7446:53;7491:7;7482:6;7471:9;7467:22;7446:53;:::i;:::-;7436:63;;7392:117;7548:2;7574:53;7619:7;7610:6;7599:9;7595:22;7574:53;:::i;:::-;7564:63;;7519:118;7676:2;7702:50;7744:7;7735:6;7724:9;7720:22;7702:50;:::i;:::-;7692:60;;7647:115;7156:613;;;;;:::o;7775:468::-;7840:6;7848;7897:2;7885:9;7876:7;7872:23;7868:32;7865:119;;;7903:79;;:::i;:::-;7865:119;8023:1;8048:53;8093:7;8084:6;8073:9;8069:22;8048:53;:::i;:::-;8038:63;;7994:117;8150:2;8176:50;8218:7;8209:6;8198:9;8194:22;8176:50;:::i;:::-;8166:60;;8121:115;7775:468;;;;;:::o;8249:474::-;8317:6;8325;8374:2;8362:9;8353:7;8349:23;8345:32;8342:119;;;8380:79;;:::i;:::-;8342:119;8500:1;8525:53;8570:7;8561:6;8550:9;8546:22;8525:53;:::i;:::-;8515:63;;8471:117;8627:2;8653:53;8698:7;8689:6;8678:9;8674:22;8653:53;:::i;:::-;8643:63;;8598:118;8249:474;;;;;:::o;8729:329::-;8788:6;8837:2;8825:9;8816:7;8812:23;8808:32;8805:119;;;8843:79;;:::i;:::-;8805:119;8963:1;8988:53;9033:7;9024:6;9013:9;9009:22;8988:53;:::i;:::-;8978:63;;8934:117;8729:329;;;;:::o;9064:474::-;9132:6;9140;9189:2;9177:9;9168:7;9164:23;9160:32;9157:119;;;9195:79;;:::i;:::-;9157:119;9315:1;9340:53;9385:7;9376:6;9365:9;9361:22;9340:53;:::i;:::-;9330:63;;9286:117;9442:2;9468:53;9513:7;9504:6;9493:9;9489:22;9468:53;:::i;:::-;9458:63;;9413:118;9064:474;;;;;:::o;9544:1057::-;9648:6;9656;9664;9672;9680;9688;9737:3;9725:9;9716:7;9712:23;9708:33;9705:120;;;9744:79;;:::i;:::-;9705:120;9864:1;9889:53;9934:7;9925:6;9914:9;9910:22;9889:53;:::i;:::-;9879:63;;9835:117;9991:2;10017:53;10062:7;10053:6;10042:9;10038:22;10017:53;:::i;:::-;10007:63;;9962:118;10119:2;10145:53;10190:7;10181:6;10170:9;10166:22;10145:53;:::i;:::-;10135:63;;10090:118;10247:2;10273:53;10318:7;10309:6;10298:9;10294:22;10273:53;:::i;:::-;10263:63;;10218:118;10375:3;10402:53;10447:7;10438:6;10427:9;10423:22;10402:53;:::i;:::-;10392:63;;10346:119;10504:3;10531:53;10576:7;10567:6;10556:9;10552:22;10531:53;:::i;:::-;10521:63;;10475:119;9544:1057;;;;;;;;:::o;10607:180::-;10655:77;10652:1;10645:88;10752:4;10749:1;10742:15;10776:4;10773:1;10766:15;10793:320;10837:6;10874:1;10868:4;10864:12;10854:22;;10921:1;10915:4;10911:12;10942:18;10932:81;;10998:4;10990:6;10986:17;10976:27;;10932:81;11060:2;11052:6;11049:14;11029:18;11026:38;11023:84;;;11079:18;;:::i;:::-;11023:84;10844:269;10793:320;;;:::o;11119:182::-;11259:34;11255:1;11247:6;11243:14;11236:58;11119:182;:::o;11307:366::-;11449:3;11470:67;11534:2;11529:3;11470:67;:::i;:::-;11463:74;;11546:93;11635:3;11546:93;:::i;:::-;11664:2;11659:3;11655:12;11648:19;;11307:366;;;:::o;11679:419::-;11845:4;11883:2;11872:9;11868:18;11860:26;;11932:9;11926:4;11922:20;11918:1;11907:9;11903:17;11896:47;11960:131;12086:4;11960:131;:::i;:::-;11952:139;;11679:419;;;:::o;12104:227::-;12244:34;12240:1;12232:6;12228:14;12221:58;12313:10;12308:2;12300:6;12296:15;12289:35;12104:227;:::o;12337:366::-;12479:3;12500:67;12564:2;12559:3;12500:67;:::i;:::-;12493:74;;12576:93;12665:3;12576:93;:::i;:::-;12694:2;12689:3;12685:12;12678:19;;12337:366;;;:::o;12709:419::-;12875:4;12913:2;12902:9;12898:18;12890:26;;12962:9;12956:4;12952:20;12948:1;12937:9;12933:17;12926:47;12990:131;13116:4;12990:131;:::i;:::-;12982:139;;12709:419;;;:::o;13134:180::-;13182:77;13179:1;13172:88;13279:4;13276:1;13269:15;13303:4;13300:1;13293:15;13320:305;13360:3;13379:20;13397:1;13379:20;:::i;:::-;13374:25;;13413:20;13431:1;13413:20;:::i;:::-;13408:25;;13567:1;13499:66;13495:74;13492:1;13489:81;13486:107;;;13573:18;;:::i;:::-;13486:107;13617:1;13614;13610:9;13603:16;;13320:305;;;;:::o;13631:238::-;13771:34;13767:1;13759:6;13755:14;13748:58;13840:21;13835:2;13827:6;13823:15;13816:46;13631:238;:::o;13875:366::-;14017:3;14038:67;14102:2;14097:3;14038:67;:::i;:::-;14031:74;;14114:93;14203:3;14114:93;:::i;:::-;14232:2;14227:3;14223:12;14216:19;;13875:366;;;:::o;14247:419::-;14413:4;14451:2;14440:9;14436:18;14428:26;;14500:9;14494:4;14490:20;14486:1;14475:9;14471:17;14464:47;14528:131;14654:4;14528:131;:::i;:::-;14520:139;;14247:419;;;:::o;14672:235::-;14812:34;14808:1;14800:6;14796:14;14789:58;14881:18;14876:2;14868:6;14864:15;14857:43;14672:235;:::o;14913:366::-;15055:3;15076:67;15140:2;15135:3;15076:67;:::i;:::-;15069:74;;15152:93;15241:3;15152:93;:::i;:::-;15270:2;15265:3;15261:12;15254:19;;14913:366;;;:::o;15285:419::-;15451:4;15489:2;15478:9;15474:18;15466:26;;15538:9;15532:4;15528:20;15524:1;15513:9;15509:17;15502:47;15566:131;15692:4;15566:131;:::i;:::-;15558:139;;15285:419;;;:::o;15710:348::-;15750:7;15773:20;15791:1;15773:20;:::i;:::-;15768:25;;15807:20;15825:1;15807:20;:::i;:::-;15802:25;;15995:1;15927:66;15923:74;15920:1;15917:81;15912:1;15905:9;15898:17;15894:105;15891:131;;;16002:18;;:::i;:::-;15891:131;16050:1;16047;16043:9;16032:20;;15710:348;;;;:::o;16064:180::-;16112:77;16109:1;16102:88;16209:4;16206:1;16199:15;16233:4;16230:1;16223:15;16250:185;16290:1;16307:20;16325:1;16307:20;:::i;:::-;16302:25;;16341:20;16359:1;16341:20;:::i;:::-;16336:25;;16380:1;16370:35;;16385:18;;:::i;:::-;16370:35;16427:1;16424;16420:9;16415:14;;16250:185;;;;:::o;16441:234::-;16581:34;16577:1;16569:6;16565:14;16558:58;16650:17;16645:2;16637:6;16633:15;16626:42;16441:234;:::o;16681:366::-;16823:3;16844:67;16908:2;16903:3;16844:67;:::i;:::-;16837:74;;16920:93;17009:3;16920:93;:::i;:::-;17038:2;17033:3;17029:12;17022:19;;16681:366;;;:::o;17053:419::-;17219:4;17257:2;17246:9;17242:18;17234:26;;17306:9;17300:4;17296:20;17292:1;17281:9;17277:17;17270:47;17334:131;17460:4;17334:131;:::i;:::-;17326:139;;17053:419;;;:::o;17478:223::-;17618:34;17614:1;17606:6;17602:14;17595:58;17687:6;17682:2;17674:6;17670:15;17663:31;17478:223;:::o;17707:366::-;17849:3;17870:67;17934:2;17929:3;17870:67;:::i;:::-;17863:74;;17946:93;18035:3;17946:93;:::i;:::-;18064:2;18059:3;18055:12;18048:19;;17707:366;;;:::o;18079:419::-;18245:4;18283:2;18272:9;18268:18;18260:26;;18332:9;18326:4;18322:20;18318:1;18307:9;18303:17;18296:47;18360:131;18486:4;18360:131;:::i;:::-;18352:139;;18079:419;;;:::o;18504:244::-;18644:34;18640:1;18632:6;18628:14;18621:58;18713:27;18708:2;18700:6;18696:15;18689:52;18504:244;:::o;18754:366::-;18896:3;18917:67;18981:2;18976:3;18917:67;:::i;:::-;18910:74;;18993:93;19082:3;18993:93;:::i;:::-;19111:2;19106:3;19102:12;19095:19;;18754:366;;;:::o;19126:419::-;19292:4;19330:2;19319:9;19315:18;19307:26;;19379:9;19373:4;19369:20;19365:1;19354:9;19350:17;19343:47;19407:131;19533:4;19407:131;:::i;:::-;19399:139;;19126:419;;;:::o;19551:224::-;19691:34;19687:1;19679:6;19675:14;19668:58;19760:7;19755:2;19747:6;19743:15;19736:32;19551:224;:::o;19781:366::-;19923:3;19944:67;20008:2;20003:3;19944:67;:::i;:::-;19937:74;;20020:93;20109:3;20020:93;:::i;:::-;20138:2;20133:3;20129:12;20122:19;;19781:366;;;:::o;20153:419::-;20319:4;20357:2;20346:9;20342:18;20334:26;;20406:9;20400:4;20396:20;20392:1;20381:9;20377:17;20370:47;20434:131;20560:4;20434:131;:::i;:::-;20426:139;;20153:419;;;:::o;20578:240::-;20718:34;20714:1;20706:6;20702:14;20695:58;20787:23;20782:2;20774:6;20770:15;20763:48;20578:240;:::o;20824:366::-;20966:3;20987:67;21051:2;21046:3;20987:67;:::i;:::-;20980:74;;21063:93;21152:3;21063:93;:::i;:::-;21181:2;21176:3;21172:12;21165:19;;20824:366;;;:::o;21196:419::-;21362:4;21400:2;21389:9;21385:18;21377:26;;21449:9;21443:4;21439:20;21435:1;21424:9;21420:17;21413:47;21477:131;21603:4;21477:131;:::i;:::-;21469:139;;21196:419;;;:::o;21621:239::-;21761:34;21757:1;21749:6;21745:14;21738:58;21830:22;21825:2;21817:6;21813:15;21806:47;21621:239;:::o;21866:366::-;22008:3;22029:67;22093:2;22088:3;22029:67;:::i;:::-;22022:74;;22105:93;22194:3;22105:93;:::i;:::-;22223:2;22218:3;22214:12;22207:19;;21866:366;;;:::o;22238:419::-;22404:4;22442:2;22431:9;22427:18;22419:26;;22491:9;22485:4;22481:20;22477:1;22466:9;22462:17;22455:47;22519:131;22645:4;22519:131;:::i;:::-;22511:139;;22238:419;;;:::o;22663:179::-;22803:31;22799:1;22791:6;22787:14;22780:55;22663:179;:::o;22848:366::-;22990:3;23011:67;23075:2;23070:3;23011:67;:::i;:::-;23004:74;;23087:93;23176:3;23087:93;:::i;:::-;23205:2;23200:3;23196:12;23189:19;;22848:366;;;:::o;23220:419::-;23386:4;23424:2;23413:9;23409:18;23401:26;;23473:9;23467:4;23463:20;23459:1;23448:9;23444:17;23437:47;23501:131;23627:4;23501:131;:::i;:::-;23493:139;;23220:419;;;:::o;23645:179::-;23785:31;23781:1;23773:6;23769:14;23762:55;23645:179;:::o;23830:366::-;23972:3;23993:67;24057:2;24052:3;23993:67;:::i;:::-;23986:74;;24069:93;24158:3;24069:93;:::i;:::-;24187:2;24182:3;24178:12;24171:19;;23830:366;;;:::o;24202:419::-;24368:4;24406:2;24395:9;24391:18;24383:26;;24455:9;24449:4;24445:20;24441:1;24430:9;24426:17;24419:47;24483:131;24609:4;24483:131;:::i;:::-;24475:139;;24202:419;;;:::o;24627:225::-;24767:34;24763:1;24755:6;24751:14;24744:58;24836:8;24831:2;24823:6;24819:15;24812:33;24627:225;:::o;24858:366::-;25000:3;25021:67;25085:2;25080:3;25021:67;:::i;:::-;25014:74;;25097:93;25186:3;25097:93;:::i;:::-;25215:2;25210:3;25206:12;25199:19;;24858:366;;;:::o;25230:419::-;25396:4;25434:2;25423:9;25419:18;25411:26;;25483:9;25477:4;25473:20;25469:1;25458:9;25454:17;25447:47;25511:131;25637:4;25511:131;:::i;:::-;25503:139;;25230:419;;;:::o;25655:182::-;25795:34;25791:1;25783:6;25779:14;25772:58;25655:182;:::o;25843:366::-;25985:3;26006:67;26070:2;26065:3;26006:67;:::i;:::-;25999:74;;26082:93;26171:3;26082:93;:::i;:::-;26200:2;26195:3;26191:12;26184:19;;25843:366;;;:::o;26215:419::-;26381:4;26419:2;26408:9;26404:18;26396:26;;26468:9;26462:4;26458:20;26454:1;26443:9;26439:17;26432:47;26496:131;26622:4;26496:131;:::i;:::-;26488:139;;26215:419;;;:::o;26640:229::-;26780:34;26776:1;26768:6;26764:14;26757:58;26849:12;26844:2;26836:6;26832:15;26825:37;26640:229;:::o;26875:366::-;27017:3;27038:67;27102:2;27097:3;27038:67;:::i;:::-;27031:74;;27114:93;27203:3;27114:93;:::i;:::-;27232:2;27227:3;27223:12;27216:19;;26875:366;;;:::o;27247:419::-;27413:4;27451:2;27440:9;27436:18;27428:26;;27500:9;27494:4;27490:20;27486:1;27475:9;27471:17;27464:47;27528:131;27654:4;27528:131;:::i;:::-;27520:139;;27247:419;;;:::o;27672:143::-;27729:5;27760:6;27754:13;27745:22;;27776:33;27803:5;27776:33;:::i;:::-;27672:143;;;;:::o;27821:351::-;27891:6;27940:2;27928:9;27919:7;27915:23;27911:32;27908:119;;;27946:79;;:::i;:::-;27908:119;28066:1;28091:64;28147:7;28138:6;28127:9;28123:22;28091:64;:::i;:::-;28081:74;;28037:128;27821:351;;;;:::o;28178:223::-;28318:34;28314:1;28306:6;28302:14;28295:58;28387:6;28382:2;28374:6;28370:15;28363:31;28178:223;:::o;28407:366::-;28549:3;28570:67;28634:2;28629:3;28570:67;:::i;:::-;28563:74;;28646:93;28735:3;28646:93;:::i;:::-;28764:2;28759:3;28755:12;28748:19;;28407:366;;;:::o;28779:419::-;28945:4;28983:2;28972:9;28968:18;28960:26;;29032:9;29026:4;29022:20;29018:1;29007:9;29003:17;28996:47;29060:131;29186:4;29060:131;:::i;:::-;29052:139;;28779:419;;;:::o;29204:221::-;29344:34;29340:1;29332:6;29328:14;29321:58;29413:4;29408:2;29400:6;29396:15;29389:29;29204:221;:::o;29431:366::-;29573:3;29594:67;29658:2;29653:3;29594:67;:::i;:::-;29587:74;;29670:93;29759:3;29670:93;:::i;:::-;29788:2;29783:3;29779:12;29772:19;;29431:366;;;:::o;29803:419::-;29969:4;30007:2;29996:9;29992:18;29984:26;;30056:9;30050:4;30046:20;30042:1;30031:9;30027:17;30020:47;30084:131;30210:4;30084:131;:::i;:::-;30076:139;;29803:419;;;:::o;30228:224::-;30368:34;30364:1;30356:6;30352:14;30345:58;30437:7;30432:2;30424:6;30420:15;30413:32;30228:224;:::o;30458:366::-;30600:3;30621:67;30685:2;30680:3;30621:67;:::i;:::-;30614:74;;30697:93;30786:3;30697:93;:::i;:::-;30815:2;30810:3;30806:12;30799:19;;30458:366;;;:::o;30830:419::-;30996:4;31034:2;31023:9;31019:18;31011:26;;31083:9;31077:4;31073:20;31069:1;31058:9;31054:17;31047:47;31111:131;31237:4;31111:131;:::i;:::-;31103:139;;30830:419;;;:::o;31255:222::-;31395:34;31391:1;31383:6;31379:14;31372:58;31464:5;31459:2;31451:6;31447:15;31440:30;31255:222;:::o;31483:366::-;31625:3;31646:67;31710:2;31705:3;31646:67;:::i;:::-;31639:74;;31722:93;31811:3;31722:93;:::i;:::-;31840:2;31835:3;31831:12;31824:19;;31483:366;;;:::o;31855:419::-;32021:4;32059:2;32048:9;32044:18;32036:26;;32108:9;32102:4;32098:20;32094:1;32083:9;32079:17;32072:47;32136:131;32262:4;32136:131;:::i;:::-;32128:139;;31855:419;;;:::o;32280:297::-;32420:34;32416:1;32408:6;32404:14;32397:58;32489:34;32484:2;32476:6;32472:15;32465:59;32558:11;32553:2;32545:6;32541:15;32534:36;32280:297;:::o;32583:366::-;32725:3;32746:67;32810:2;32805:3;32746:67;:::i;:::-;32739:74;;32822:93;32911:3;32822:93;:::i;:::-;32940:2;32935:3;32931:12;32924:19;;32583:366;;;:::o;32955:419::-;33121:4;33159:2;33148:9;33144:18;33136:26;;33208:9;33202:4;33198:20;33194:1;33183:9;33179:17;33172:47;33236:131;33362:4;33236:131;:::i;:::-;33228:139;;32955:419;;;:::o;33380:240::-;33520:34;33516:1;33508:6;33504:14;33497:58;33589:23;33584:2;33576:6;33572:15;33565:48;33380:240;:::o;33626:366::-;33768:3;33789:67;33853:2;33848:3;33789:67;:::i;:::-;33782:74;;33865:93;33954:3;33865:93;:::i;:::-;33983:2;33978:3;33974:12;33967:19;;33626:366;;;:::o;33998:419::-;34164:4;34202:2;34191:9;34187:18;34179:26;;34251:9;34245:4;34241:20;34237:1;34226:9;34222:17;34215:47;34279:131;34405:4;34279:131;:::i;:::-;34271:139;;33998:419;;;:::o;34423:169::-;34563:21;34559:1;34551:6;34547:14;34540:45;34423:169;:::o;34598:366::-;34740:3;34761:67;34825:2;34820:3;34761:67;:::i;:::-;34754:74;;34837:93;34926:3;34837:93;:::i;:::-;34955:2;34950:3;34946:12;34939:19;;34598:366;;;:::o;34970:419::-;35136:4;35174:2;35163:9;35159:18;35151:26;;35223:9;35217:4;35213:20;35209:1;35198:9;35194:17;35187:47;35251:131;35377:4;35251:131;:::i;:::-;35243:139;;34970:419;;;:::o;35395:241::-;35535:34;35531:1;35523:6;35519:14;35512:58;35604:24;35599:2;35591:6;35587:15;35580:49;35395:241;:::o;35642:366::-;35784:3;35805:67;35869:2;35864:3;35805:67;:::i;:::-;35798:74;;35881:93;35970:3;35881:93;:::i;:::-;35999:2;35994:3;35990:12;35983:19;;35642:366;;;:::o;36014:419::-;36180:4;36218:2;36207:9;36203:18;36195:26;;36267:9;36261:4;36257:20;36253:1;36242:9;36238:17;36231:47;36295:131;36421:4;36295:131;:::i;:::-;36287:139;;36014:419;;;:::o;36439:191::-;36479:4;36499:20;36517:1;36499:20;:::i;:::-;36494:25;;36533:20;36551:1;36533:20;:::i;:::-;36528:25;;36572:1;36569;36566:8;36563:34;;;36577:18;;:::i;:::-;36563:34;36622:1;36619;36615:9;36607:17;;36439:191;;;;:::o;36636:225::-;36776:34;36772:1;36764:6;36760:14;36753:58;36845:8;36840:2;36832:6;36828:15;36821:33;36636:225;:::o;36867:366::-;37009:3;37030:67;37094:2;37089:3;37030:67;:::i;:::-;37023:74;;37106:93;37195:3;37106:93;:::i;:::-;37224:2;37219:3;37215:12;37208:19;;36867:366;;;:::o;37239:419::-;37405:4;37443:2;37432:9;37428:18;37420:26;;37492:9;37486:4;37482:20;37478:1;37467:9;37463:17;37456:47;37520:131;37646:4;37520:131;:::i;:::-;37512:139;;37239:419;;;:::o;37664:147::-;37765:11;37802:3;37787:18;;37664:147;;;;:::o;37817:114::-;;:::o;37937:398::-;38096:3;38117:83;38198:1;38193:3;38117:83;:::i;:::-;38110:90;;38209:93;38298:3;38209:93;:::i;:::-;38327:1;38322:3;38318:11;38311:18;;37937:398;;;:::o;38341:379::-;38525:3;38547:147;38690:3;38547:147;:::i;:::-;38540:154;;38711:3;38704:10;;38341:379;;;:::o;38726:442::-;38875:4;38913:2;38902:9;38898:18;38890:26;;38926:71;38994:1;38983:9;38979:17;38970:6;38926:71;:::i;:::-;39007:72;39075:2;39064:9;39060:18;39051:6;39007:72;:::i;:::-;39089;39157:2;39146:9;39142:18;39133:6;39089:72;:::i;:::-;38726:442;;;;;;:::o;39174:180::-;39222:77;39219:1;39212:88;39319:4;39316:1;39309:15;39343:4;39340:1;39333:15;39360:180;39408:77;39405:1;39398:88;39505:4;39502:1;39495:15;39529:4;39526:1;39519:15;39546:143;39603:5;39634:6;39628:13;39619:22;;39650:33;39677:5;39650:33;:::i;:::-;39546:143;;;;:::o;39695:351::-;39765:6;39814:2;39802:9;39793:7;39789:23;39785:32;39782:119;;;39820:79;;:::i;:::-;39782:119;39940:1;39965:64;40021:7;40012:6;40001:9;39997:22;39965:64;:::i;:::-;39955:74;;39911:128;39695:351;;;;:::o;40052:85::-;40097:7;40126:5;40115:16;;40052:85;;;:::o;40143:158::-;40201:9;40234:61;40252:42;40261:32;40287:5;40261:32;:::i;:::-;40252:42;:::i;:::-;40234:61;:::i;:::-;40221:74;;40143:158;;;:::o;40307:147::-;40402:45;40441:5;40402:45;:::i;:::-;40397:3;40390:58;40307:147;;:::o;40460:114::-;40527:6;40561:5;40555:12;40545:22;;40460:114;;;:::o;40580:184::-;40679:11;40713:6;40708:3;40701:19;40753:4;40748:3;40744:14;40729:29;;40580:184;;;;:::o;40770:132::-;40837:4;40860:3;40852:11;;40890:4;40885:3;40881:14;40873:22;;40770:132;;;:::o;40908:108::-;40985:24;41003:5;40985:24;:::i;:::-;40980:3;40973:37;40908:108;;:::o;41022:179::-;41091:10;41112:46;41154:3;41146:6;41112:46;:::i;:::-;41190:4;41185:3;41181:14;41167:28;;41022:179;;;;:::o;41207:113::-;41277:4;41309;41304:3;41300:14;41292:22;;41207:113;;;:::o;41356:732::-;41475:3;41504:54;41552:5;41504:54;:::i;:::-;41574:86;41653:6;41648:3;41574:86;:::i;:::-;41567:93;;41684:56;41734:5;41684:56;:::i;:::-;41763:7;41794:1;41779:284;41804:6;41801:1;41798:13;41779:284;;;41880:6;41874:13;41907:63;41966:3;41951:13;41907:63;:::i;:::-;41900:70;;41993:60;42046:6;41993:60;:::i;:::-;41983:70;;41839:224;41826:1;41823;41819:9;41814:14;;41779:284;;;41783:14;42079:3;42072:10;;41480:608;;;41356:732;;;;:::o;42094:831::-;42357:4;42395:3;42384:9;42380:19;42372:27;;42409:71;42477:1;42466:9;42462:17;42453:6;42409:71;:::i;:::-;42490:80;42566:2;42555:9;42551:18;42542:6;42490:80;:::i;:::-;42617:9;42611:4;42607:20;42602:2;42591:9;42587:18;42580:48;42645:108;42748:4;42739:6;42645:108;:::i;:::-;42637:116;;42763:72;42831:2;42820:9;42816:18;42807:6;42763:72;:::i;:::-;42845:73;42913:3;42902:9;42898:19;42889:6;42845:73;:::i;:::-;42094:831;;;;;;;;:::o;42931:807::-;43180:4;43218:3;43207:9;43203:19;43195:27;;43232:71;43300:1;43289:9;43285:17;43276:6;43232:71;:::i;:::-;43313:72;43381:2;43370:9;43366:18;43357:6;43313:72;:::i;:::-;43395:80;43471:2;43460:9;43456:18;43447:6;43395:80;:::i;:::-;43485;43561:2;43550:9;43546:18;43537:6;43485:80;:::i;:::-;43575:73;43643:3;43632:9;43628:19;43619:6;43575:73;:::i;:::-;43658;43726:3;43715:9;43711:19;43702:6;43658:73;:::i;:::-;42931:807;;;;;;;;;:::o;43744:663::-;43832:6;43840;43848;43897:2;43885:9;43876:7;43872:23;43868:32;43865:119;;;43903:79;;:::i;:::-;43865:119;44023:1;44048:64;44104:7;44095:6;44084:9;44080:22;44048:64;:::i;:::-;44038:74;;43994:128;44161:2;44187:64;44243:7;44234:6;44223:9;44219:22;44187:64;:::i;:::-;44177:74;;44132:129;44300:2;44326:64;44382:7;44373:6;44362:9;44358:22;44326:64;:::i;:::-;44316:74;;44271:129;43744:663;;;;;:::o

Swarm Source

ipfs://2d8c8b3bc029b3062315d364406e9aede6072510e1eda3f0c390f90c843d56d4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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