Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 LOCKER
Holders
651
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
LockerV2
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-11-15 */ // SPDX-License-Identifier: MIT /* * __ ____ ________ __ __________ * / / / __ \/ ____/ //_// ____/ __ \ * / / / / / / / / ,< / __/ / /_/ / * / /___/ /_/ / /___/ /| |/ /___/ _, _/ * /_____/\____/\____/_/ |_/_____/_/ |_| * * * TG: https://t.me/lockertoken_public * WEB: https://locker-token.com * TW: https://twitter.com/lockertoken * * LOCKER migration from: 0x1cc29ee9dd8d9ed4148f6600ba5ec84d7ee85d12 * Legacy LOCKER Holders to receive 100% Tokens at TGE with an imposed 0.5 ETH daily sell limit. * * CONTRACT DEV: @seanking52 * */ pragma solidity 0.8.17; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ 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"); 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); } function _createInitialSupply(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, 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); } } contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view returns (address) { return _owner; } modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership(bool confirmRenounce) external virtual onlyOwner { require(confirmRenounce, "Please confirm renounce!"); emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface ILpPair { function sync() external; } interface IDexRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForETHSupportingFeeOnTransferTokens( 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 addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); } interface IDexFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } contract LockerV2 is ERC20, Ownable { uint256 public maxBuyAmount; uint256 public maxSellAmount; uint256 public maxWallet; IDexRouter public dexRouter; address public lpPair; bool private swapping; uint256 public swapTokensAtAmount; address public operationsAddress; uint256 public tradingActiveBlock = 0; uint256 public blockForPenaltyEnd; address[] public botBuyers; uint256 public botsCaught; mapping(address => bool) public flaggedAsBot; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; mapping(address => uint256) private _holderLastTransferTimestamp; bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyOperationsFee; uint256 public buyLiquidityFee; uint256 private originalSellOperationsFee; uint256 private originalSellLiquidityFee; uint256 public sellTotalFees; uint256 public sellOperationsFee; uint256 public sellLiquidityFee; uint256 public tokensForOperations; uint256 public tokensForLiquidity; bool public oldHolderSellLimitsEnabled = true; uint256 public oldHolderCooldown = 1 minutes; uint256 public oldHolderTimeBetweenBuys = 24 hours; mapping(address => bool) public oldHolderWallets; mapping(address => uint256) public nextOldHolderSellDate; uint256 public maxOldHolderSell = .5 ether; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event EnabledTrading(); event ExcludeFromFees(address indexed account, bool isExcluded); event UpdatedMaxBuyAmount(uint256 newAmount); event UpdatedMaxSellAmount(uint256 newAmount); event UpdatedMaxWalletAmount(uint256 newAmount); event UpdatedOperationsAddress(address indexed newWallet); event MaxTransactionExclusion(address _address, bool excluded); event OwnerForcedSwapBack(uint256 timestamp); event CaughtEarlyBuyer(address sniper); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event TransferForeignToken(address token, uint256 amount); event UpdatedOldHolderMaxSell(uint256 amount); constructor() payable ERC20("LOCKER", "LOCKER") { address newOwner = msg.sender; // can leave alone if owner is deployer. address _dexRouter; if (block.chainid == 1) { _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2 } else if (block.chainid == 5) { _dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Goerli } else { revert("Chain not configured"); } // initialize router dexRouter = IDexRouter(_dexRouter); // create pair lpPair = IDexFactory(dexRouter.factory()).createPair( address(this), dexRouter.WETH() ); _excludeFromMaxTransaction(address(lpPair), true); _setAutomatedMarketMakerPair(address(lpPair), true); uint256 totalSupply = 1 * 1e9 * 1e18; maxBuyAmount = (totalSupply * 25) / 10000; // 0.25% maxSellAmount = (totalSupply * 25) / 10000; // 0.25% maxWallet = (totalSupply * 15) / 1000; // 1.5% swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05 % buyOperationsFee = 6; buyLiquidityFee = 3; buyTotalFees = buyOperationsFee + buyLiquidityFee; originalSellOperationsFee = 6; originalSellLiquidityFee = 3; sellOperationsFee = 12; // increased sell tax at launch sellLiquidityFee = 3; sellTotalFees = sellOperationsFee + sellLiquidityFee; operationsAddress = address(0x258cb94167f233D2E6cf1C868873164321064664); _excludeFromMaxTransaction(newOwner, true); _excludeFromMaxTransaction(address(this), true); _excludeFromMaxTransaction(address(0xdead), true); _excludeFromMaxTransaction(address(operationsAddress), true); _excludeFromMaxTransaction(address(dexRouter), true); excludeFromFees(newOwner, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromFees(address(operationsAddress), true); excludeFromFees(address(dexRouter), true); _createInitialSupply( address(0x258cb94167f233D2E6cf1C868873164321064664), (totalSupply * 50) / 100 ); // Tokens for exchanges, additional liq, etc. _createInitialSupply(address(0xdead), (totalSupply * 25) / 100); // Burn _createInitialSupply(address(this), (totalSupply * 5) / 100); // Tokens for liquidity _createInitialSupply(newOwner, (totalSupply * 20) / 100); // Airdrop old holders transferOwnership(newOwner); } receive() external payable {} function enableTrading(uint256 blocksForPenalty) external onlyOwner { require(!tradingActive, "Cannot reenable trading"); require( blocksForPenalty <= 10, "Cannot make penalty blocks more than 10" ); tradingActive = true; swapEnabled = true; tradingActiveBlock = block.number; blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty; emit EnabledTrading(); } function getBotBuyers() external view returns (address[] memory) { return botBuyers; } function unflagBot(address wallet) external onlyOwner { require(flaggedAsBot[wallet], "Wallet is already not flagged."); flaggedAsBot[wallet] = false; } function flagBot(address wallet) external onlyOwner { require(!flaggedAsBot[wallet], "Wallet is already flagged."); flaggedAsBot[wallet] = true; } function flagV1Holder(address wallet) external onlyOwner { require(!oldHolderWallets[wallet], "Wallet is already flagged."); oldHolderWallets[wallet] = true; } function unflagV1Holder(address wallet) external onlyOwner { require(oldHolderWallets[wallet], "Wallet is already not flagged."); oldHolderWallets[wallet] = false; } function flagMultipleBots(address[] memory wallets) external onlyOwner { require( wallets.length < 600, "Can only mark 600 wallets per txn due to gas limits" ); for (uint256 i = 0; i < wallets.length; i++) { address wallet = wallets[i]; flaggedAsBot[wallet] = true; } } function unflagMultipleBots(address[] memory wallets) external onlyOwner { require( wallets.length < 600, "Can only mark 600 wallets per txn due to gas limits" ); for (uint256 i = 0; i < wallets.length; i++) { address wallet = wallets[i]; flaggedAsBot[wallet] = false; } } function emergencyUpdateRouter(address router) external onlyOwner { require(!tradingActive, "Cannot update after trading is functional"); dexRouter = IDexRouter(router); } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner { transferDelayEnabled = false; } function updateMaxBuyAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 25) / 10000) / 1e18, "Cannot set max buy amount lower than 0.25%" ); require( newNum <= ((totalSupply() * 2) / 100) / 1e18, "Cannot set buy sell amount higher than 2%" ); maxBuyAmount = newNum * (10**18); emit UpdatedMaxBuyAmount(maxBuyAmount); } function updateMaxSellAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 25) / 10000) / 1e18, "Cannot set max sell amount lower than 0.25%" ); require( newNum <= ((totalSupply() * 2) / 100) / 1e18, "Cannot set max sell amount higher than 2%" ); maxSellAmount = newNum * (10**18); emit UpdatedMaxSellAmount(maxSellAmount); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 5) / 1000) / 1e18, "Cannot set max wallet amount lower than 0.5%" ); require( newNum <= ((totalSupply() * 4) / 100) / 1e18, "Cannot set max wallet amount higher than 4%" ); maxWallet = newNum * (10**18); emit UpdatedMaxWalletAmount(maxWallet); } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner { require( newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply." ); require( newAmount <= (totalSupply() * 1) / 1000, "Swap amount cannot be higher than 0.1% total supply." ); swapTokensAtAmount = newAmount; } function _excludeFromMaxTransaction(address updAds, bool isExcluded) private { _isExcludedMaxTransactionAmount[updAds] = isExcluded; emit MaxTransactionExclusion(updAds, isExcluded); } function excludeFromMaxTransaction(address updAds, bool isEx) external onlyOwner { if (!isEx) { require( updAds != lpPair, "Cannot remove uniswap pair from max txn" ); } _isExcludedMaxTransactionAmount[updAds] = isEx; } function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner { require( pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs" ); _setAutomatedMarketMakerPair(pair, value); emit SetAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; _excludeFromMaxTransaction(pair, value); emit SetAutomatedMarketMakerPair(pair, value); } function updateBuyFees(uint256 _operationsFee, uint256 _liquidityFee) external onlyOwner { buyOperationsFee = _operationsFee; buyLiquidityFee = _liquidityFee; buyTotalFees = buyOperationsFee + buyLiquidityFee; require(buyTotalFees <= 15, "Must keep fees at 15% or less"); } function updateSellFees(uint256 _operationsFee, uint256 _liquidityFee) external onlyOwner { sellOperationsFee = _operationsFee; sellLiquidityFee = _liquidityFee; sellTotalFees = sellOperationsFee + sellLiquidityFee; require(sellTotalFees <= 20, "Must keep fees at 20% or less"); } function restoreTaxes() external onlyOwner { buyOperationsFee = originalSellOperationsFee; buyLiquidityFee = originalSellLiquidityFee; buyTotalFees = buyOperationsFee + buyLiquidityFee; sellOperationsFee = originalSellOperationsFee; sellLiquidityFee = originalSellLiquidityFee; sellTotalFees = sellOperationsFee + sellLiquidityFee; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } 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"); require(amount > 0, "amount must be greater than 0"); if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } if (!earlyBuyPenaltyInEffect() && tradingActive) { require( !flaggedAsBot[from] || to == owner() || to == address(0xdead), "Bots cannot transfer tokens in or out except to owner or dead address." ); } if (oldHolderSellLimitsEnabled) { if (oldHolderWallets[from]) { if (automatedMarketMakerPairs[to]) { //enforce max sell restrictions. require( nextOldHolderSellDate[from] <= block.timestamp, "Cannot sell yet" ); require( amount <= getOldHolderMaxSell(), "Attempting to sell over max sell amount. Check max." ); nextOldHolderSellDate[from] = block.timestamp + oldHolderTimeBetweenBuys; } else if (!_isExcludedFromFees[to]) { revert( "V1 Holders cannot transfer and must sell only or transfer to a whitelisted address." ); } } } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0xdead) && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { if (transferDelayEnabled) { if (to != address(dexRouter) && to != address(lpPair)) { require( _holderLastTransferTimestamp[tx.origin] < block.number - 2 && _holderLastTransferTimestamp[to] < block.number - 2, "_transfer:: Transfer Delay enabled. Try again later." ); _holderLastTransferTimestamp[tx.origin] = block.number; _holderLastTransferTimestamp[to] = block.number; } } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxBuyAmount, "Buy transfer amount exceeds the max buy." ); require( amount + balanceOf(to) <= maxWallet, "Max Wallet Exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxSellAmount, "Sell transfer amount exceeds the max sell." ); } 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[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = true; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // bot/sniper penalty. if ( (earlyBuyPenaltyInEffect() || (amount >= maxBuyAmount - .9 ether && blockForPenaltyEnd + 8 >= block.number)) && automatedMarketMakerPairs[from] && !automatedMarketMakerPairs[to] && !_isExcludedFromFees[to] && buyTotalFees > 0 ) { if (!earlyBuyPenaltyInEffect()) { // reduce by 1 wei per max buy over what Uniswap will allow to revert bots as best as possible to limit erroneously blacklisted wallets. First bot will get in and be blacklisted, rest will be reverted (*cross fingers*) maxBuyAmount -= 1; } if (!flaggedAsBot[to]) { flaggedAsBot[to] = true; botsCaught += 1; botBuyers.push(to); emit CaughtEarlyBuyer(to); } fees = (amount * 99) / 100; tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForOperations += (fees * buyOperationsFee) / buyTotalFees; } // on sell else if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = (amount * sellTotalFees) / 100; tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees; tokensForOperations += (fees * sellOperationsFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = (amount * buyTotalFees) / 100; tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForOperations += (fees * buyOperationsFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function getOldHolderMaxSell() public view returns (uint256) { address[] memory path = new address[](2); path[0] = dexRouter.WETH(); path[1] = address(this); uint256[] memory amounts = new uint256[](2); amounts = dexRouter.getAmountsOut(maxOldHolderSell, path); return amounts[1] + (amounts[1] * (sellLiquidityFee + sellOperationsFee)) / 100; } function earlyBuyPenaltyInEffect() public view returns (bool) { return block.number < blockForPenaltyEnd; } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = dexRouter.WETH(); _approve(address(this), address(dexRouter), tokenAmount); // make the swap dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(dexRouter), tokenAmount); // add the liquidity dexRouter.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(0xdead), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 10) { contractBalance = swapTokensAtAmount * 10; } bool success; // Halve the amount of liquidity tokens uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2; swapTokensForEth(contractBalance - liquidityTokens); uint256 ethBalance = address(this).balance; uint256 ethForLiquidity = ethBalance; uint256 ethForOperations = (ethBalance * tokensForOperations) / (totalTokensToSwap - (tokensForLiquidity / 2)); ethForLiquidity -= ethForOperations; tokensForLiquidity = 0; tokensForOperations = 0; if (liquidityTokens > 0 && ethForLiquidity > 0) { addLiquidity(liquidityTokens, ethForLiquidity); } (success, ) = address(operationsAddress).call{ value: address(this).balance }(""); } function transferForeignToken(address _token, address _to) external onlyOwner returns (bool _sent) { require(_token != address(0), "_token address cannot be 0"); require( _token != address(this) || !tradingActive, "Can't withdraw native tokens while trading is active" ); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); _sent = IERC20(_token).transfer(_to, _contractBalance); emit TransferForeignToken(_token, _contractBalance); } // withdraw ETH if stuck or someone sends to the address function withdrawStuckETH() external onlyOwner { bool success; (success, ) = address(msg.sender).call{value: address(this).balance}( "" ); } function setOperationsAddress(address _operationsAddress) external onlyOwner { require( _operationsAddress != address(0), "_operationsAddress address cannot be 0" ); operationsAddress = payable(_operationsAddress); emit UpdatedOperationsAddress(_operationsAddress); } // force Swap back if slippage issues. function forceSwapBack() external onlyOwner { require( balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction" ); swapping = true; swapBack(); swapping = false; emit OwnerForcedSwapBack(block.timestamp); } // remove limits after token is stable function removeLimits() external onlyOwner { limitsInEffect = false; } function restoreLimits() external onlyOwner { limitsInEffect = true; } function setOldHolderMaxSell(uint256 amount) external onlyOwner { require( amount >= 10 && amount <= 2500, "Must set between 0.10 and 25 ETH" ); maxOldHolderSell = amount * 1e16; emit UpdatedOldHolderMaxSell(amount); } function emergencyToggleOldHolderSellLimits(bool _enabled) public onlyOwner { oldHolderSellLimitsEnabled = _enabled; } function updateOldHolderCooldown(uint256 timeInMinutes) external onlyOwner { require(timeInMinutes > 0 && timeInMinutes <= 1440); oldHolderCooldown = timeInMinutes * 1 minutes; } function updateOldHolderTimeBetweenBuys(uint256 timeInMinutes) external onlyOwner { require(timeInMinutes > 0 && timeInMinutes <= 1440); oldHolderTimeBetweenBuys = timeInMinutes * 1 minutes; } function launchToken(uint256 blocksForPenalty) external onlyOwner { require(!tradingActive, "Trading is already active, cannot relaunch."); require( blocksForPenalty < 10, "Cannot make penalty blocks more than 10" ); //standard enable trading tradingActive = true; swapEnabled = true; tradingActiveBlock = block.number; blockForPenaltyEnd = tradingActiveBlock + blocksForPenalty; emit EnabledTrading(); // add the liquidity require( address(this).balance > 0, "Must have ETH on contract to launch" ); require( balanceOf(address(this)) > 0, "Must have Tokens on contract to launch" ); _approve(address(this), address(dexRouter), balanceOf(address(this))); dexRouter.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, // slippage is unavoidable 0, // slippage is unavoidable msg.sender, block.timestamp ); } function addLpWithoutLaunch(bool confirmAddLp) external onlyOwner { require(confirmAddLp, "Please confirm adding of the LP"); require(!tradingActive, "Trading is already active, cannot relaunch."); // add the liquidity require( address(this).balance > 0, "Must have ETH on contract to launch" ); require( balanceOf(address(this)) > 0, "Must have Tokens on contract to launch" ); _approve(address(this), address(dexRouter), balanceOf(address(this))); dexRouter.addLiquidityETH{value: address(this).balance}( address(this), balanceOf(address(this)), 0, // slippage is unavoidable 0, // slippage is unavoidable msg.sender, block.timestamp ); } /** * Airdrop WITHOUT applying sell restrictions */ function airdropToWallets( address[] memory wallets, uint256[] memory amountsInTokens ) external onlyOwner { require( wallets.length == amountsInTokens.length, "arrays must be the same length" ); require( wallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits" ); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input. for (uint256 i = 0; i < wallets.length; i++) { address wallet = wallets[i]; uint256 amount = amountsInTokens[i]; super._transfer(msg.sender, wallet, amount); } } /** * Sell restrictions will be applied to V1 Holders */ function airdropV1Holders( address[] memory wallets, uint256[] memory amountsInTokens ) external onlyOwner { require( wallets.length == amountsInTokens.length, "arrays must be the same length" ); require( wallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits" ); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input. for (uint256 i = 0; i < wallets.length; i++) { address wallet = wallets[i]; uint256 amount = amountsInTokens[i]; oldHolderWallets[wallet] = true; nextOldHolderSellDate[wallet] = block.timestamp + oldHolderCooldown; super._transfer(msg.sender, wallet, amount); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","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":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","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":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxBuyAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxSellAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"UpdatedMaxWalletAmount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"UpdatedOldHolderMaxSell","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmAddLp","type":"bool"}],"name":"addLpWithoutLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"amountsInTokens","type":"uint256[]"}],"name":"airdropV1Holders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blockForPenaltyEnd","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"botBuyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botsCaught","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":"buyOperationsFee","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":"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":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"earlyBuyPenaltyInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"emergencyToggleOldHolderSellLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"router","type":"address"}],"name":"emergencyUpdateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"flagBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"flagMultipleBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"flagV1Holder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"flaggedAsBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBotBuyers","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOldHolderMaxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocksForPenalty","type":"uint256"}],"name":"launchToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxOldHolderSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","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":[{"internalType":"address","name":"","type":"address"}],"name":"nextOldHolderSellDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldHolderCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldHolderSellLimitsEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"oldHolderTimeBetweenBuys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"oldHolderWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"confirmRenounce","type":"bool"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","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":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setOldHolderMaxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"unflagBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"unflagMultipleBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"unflagV1Holder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInMinutes","type":"uint256"}],"name":"updateOldHolderCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"timeInMinutes","type":"uint256"}],"name":"updateOldHolderTimeBetweenBuys","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6000600d556012805462ffffff191660019081179091556014805460ff199081168317909155601f80549091169091179055603c602055620151806021556706f05b59d3b2000060245560066080818152652627a1a5a2a960d11b60a081905261010060405260c092835260e0529060036200007c838262000971565b5060046200008b828262000971565b5050506000620000a06200056d60201b60201c565b600580546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005777833981519152908290a35033600046600103620001055750737a250d5630b4cf539739df2c5dacb4c659f2488d62000177565b466005036200012a5750737a250d5630b4cf539739df2c5dacb4c659f2488d62000177565b60405162461bcd60e51b815260206004820152601460248201527f436861696e206e6f7420636f6e6669677572656400000000000000000000000060448201526064015b60405180910390fd5b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001d1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f7919062000a3d565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200025a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000280919062000a3d565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f4919062000a3d565b600a80546001600160a01b0319166001600160a01b039290921691821790556200032090600162000571565b600a5462000339906001600160a01b03166001620005d4565b6b033b2e3c9fd0803ce80000006127106200035682601962000a85565b62000362919062000aa5565b6006556127106200037582601962000a85565b62000381919062000aa5565b6007556103e86200039482600f62000a85565b620003a0919062000aa5565b600855612710620003b382600562000a85565b620003bf919062000aa5565b600b556006601681905560036017819055620003db9162000ac8565b601555600660185560036019819055600c601b819055601c82905562000402919062000ac8565b601a55600c80546001600160a01b03191673258cb94167f233d2e6cf1c8688731643210646641790556200043883600162000571565b6200044530600162000571565b6200045461dead600162000571565b600c546200046d906001600160a01b0316600162000571565b60095462000486906001600160a01b0316600162000571565b6200049383600162000640565b620004a030600162000640565b620004af61dead600162000640565b600c54620004c8906001600160a01b0316600162000640565b600954620004e1906001600160a01b0316600162000640565b6200051b73258cb94167f233d2e6cf1c86887316432106466460646200050984603262000a85565b62000515919062000aa5565b620006ea565b6200053161dead60646200050984601962000a85565b620005453060646200050984600562000a85565b620005598360646200050984601462000a85565b6200056483620007cf565b50505062000ade565b3390565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152602760205260409020805460ff191682151517905562000604828262000571565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031633146200068b5760405162461bcd60e51b815260206004820181905260248201526000805160206200575783398151915260448201526064016200016e565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007425760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200016e565b806002600082825462000756919062000ac8565b90915550506001600160a01b038216600090815260208190526040812080548392906200078590849062000ac8565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200081a5760405162461bcd60e51b815260206004820181905260248201526000805160206200575783398151915260448201526064016200016e565b6001600160a01b038116620008815760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016200016e565b6005546040516001600160a01b038084169216906000805160206200577783398151915290600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008f757607f821691505b6020821081036200091857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200096c57600081815260208120601f850160051c81016020861015620009475750805b601f850160051c820191505b81811015620009685782815560010162000953565b5050505b505050565b81516001600160401b038111156200098d576200098d620008cc565b620009a5816200099e8454620008e2565b846200091e565b602080601f831160018114620009dd5760008415620009c45750858301515b600019600386901b1c1916600185901b17855562000968565b600085815260208120601f198616915b8281101562000a0e57888601518255948401946001909101908401620009ed565b508582101562000a2d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60006020828403121562000a5057600080fd5b81516001600160a01b038116811462000a6857600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000a9f5762000a9f62000a6f565b92915050565b60008262000ac357634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000a9f5762000a9f62000a6f565b614c698062000aee6000396000f3fe60806040526004361061048d5760003560e01c806385e5431811610255578063c876d0b911610144578063ea4cfe12116100c1578063f5648a4f11610085578063f5648a4f14610db0578063f637434214610dc5578063f8b45b0514610ddb578063fb002c9714610df1578063fdfbeb8114610e07578063fed20c7814610e3457600080fd5b8063ea4cfe1214610d24578063ee40166e14610d44578063f0f3668514610d5a578063f11a24d314610d7a578063f2fde38b14610d9057600080fd5b8063dc3f0d0f11610108578063dc3f0d0f14610c73578063dd62ed3e14610c93578063e1d9888f14610cd9578063e2f4560514610cf9578063e884f26014610d0f57600080fd5b8063c876d0b914610be3578063cbf9f12414610bfd578063d257b34f14610c1d578063d5fb5b1714610c3d578063d85ba06314610c5d57600080fd5b8063a62068ce116101d2578063b62496f511610196578063b62496f514610b3e578063b949ca3414610b6e578063bbc0c74214610b84578063c024666814610ba3578063c18bc19514610bc357600080fd5b8063a62068ce14610aa3578063a89eb90a14610ab9578063a9059cbb14610ad9578063ac277bf214610af9578063b2b4c9ed14610b0e57600080fd5b806394f421481161021957806394f4214814610a1957806395d89b4114610a395780639a7a23d614610a4e578063a28e86d314610a6e578063a457c2d714610a8357600080fd5b806385e543181461099557806388e765ff146109af5780638d1085b9146109c55780638da5cb5b146109db5780639496df3e146109f957600080fd5b80634a62bb651161037c5780636a19197b116102f9578063713318c1116102bd578063713318c1146108e0578063751039fc146109005780637571336a146109155780637e926b4b1461093557806382aa7c68146109555780638366e79a1461097557600080fd5b80636a19197b146108545780636a486a8e146108745780636b0a894c1461088a5780636ddd1713146108a057806370a08231146108c057600080fd5b80635a139dd4116103405780635a139dd4146107d15780635eed98e2146107e757806366ca9b83146107fc57806366d602ae1461081c5780636a11afc61461083257600080fd5b80634a62bb65146107555780634eeef4d31461076f5780634f77f6c01461078f57806351f205e4146107a557806358a6d531146107ba57600080fd5b80631a8145bb1161040a5780632be32b61116103ce5780632be32b61146106b9578063313ce567146106d957806339509351146106f5578063452ed4f114610715578063499b83941461073557600080fd5b80631a8145bb146106235780631b151b13146106395780632307b4411461065957806323b872dd14610679578063243c20f71461069957600080fd5b8063095ea7b311610451578063095ea7b31461057a57806309cc80a81461059a57806310d5de53146105be5780631805805b146105ee57806318160ddd1461060e57600080fd5b8063017e01921461049957806302dbd8f8146104de5780630357cd171461050057806306fdde03146105205780630758d9241461054257600080fd5b3661049457005b600080fd5b3480156104a557600080fd5b506104c96104b436600461439e565b60116020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156104ea57600080fd5b506104fe6104f93660046143c2565b610e54565b005b34801561050c57600080fd5b506104fe61051b3660046143e4565b610ef4565b34801561052c57600080fd5b50610535610f4a565b6040516104d591906143fd565b34801561054e57600080fd5b50600954610562906001600160a01b031681565b6040516001600160a01b0390911681526020016104d5565b34801561058657600080fd5b506104c961059536600461444b565b610fdc565b3480156105a657600080fd5b506105b060205481565b6040519081526020016104d5565b3480156105ca57600080fd5b506104c96105d936600461439e565b60266020526000908152604090205460ff1681565b3480156105fa57600080fd5b506104fe61060936600461439e565b610ff3565b34801561061a57600080fd5b506002546105b0565b34801561062f57600080fd5b506105b0601e5481565b34801561064557600080fd5b506104fe610654366004614485565b6110a9565b34801561066557600080fd5b506104fe610674366004614581565b61127a565b34801561068557600080fd5b506104c961069436600461463c565b611383565b3480156106a557600080fd5b506104fe6106b436600461439e565b61142d565b3480156106c557600080fd5b506104fe6106d43660046143e4565b6114e4565b3480156106e557600080fd5b50604051601281526020016104d5565b34801561070157600080fd5b506104c961071036600461444b565b611686565b34801561072157600080fd5b50600a54610562906001600160a01b031681565b34801561074157600080fd5b506104fe61075036600461439e565b6116bd565b34801561076157600080fd5b506012546104c99060ff1681565b34801561077b57600080fd5b506104fe61078a3660046143e4565b611796565b34801561079b57600080fd5b506105b0601b5481565b3480156107b157600080fd5b506104fe6117ec565b3480156107c657600080fd5b50600e5443106104c9565b3480156107dd57600080fd5b506105b060165481565b3480156107f357600080fd5b506104fe6118f5565b34801561080857600080fd5b506104fe6108173660046143c2565b611959565b34801561082857600080fd5b506105b060075481565b34801561083e57600080fd5b506108476119ec565b6040516104d591906146c1565b34801561086057600080fd5b506104fe61086f3660046143e4565b611a4d565b34801561088057600080fd5b506105b0601a5481565b34801561089657600080fd5b506105b060105481565b3480156108ac57600080fd5b506012546104c99062010000900460ff1681565b3480156108cc57600080fd5b506105b06108db36600461439e565b611b2d565b3480156108ec57600080fd5b506104fe6108fb3660046146d4565b611b48565b34801561090c57600080fd5b506104fe611bf2565b34801561092157600080fd5b506104fe610930366004614711565b611c28565b34801561094157600080fd5b506104fe610950366004614485565b611cf0565b34801561096157600080fd5b506104fe6109703660046143e4565b611db2565b34801561098157600080fd5b506104c961099036600461474a565b611ea6565b3480156109a157600080fd5b50601f546104c99060ff1681565b3480156109bb57600080fd5b506105b060065481565b3480156109d157600080fd5b506105b060215481565b3480156109e757600080fd5b506005546001600160a01b0316610562565b348015610a0557600080fd5b506104fe610a14366004614581565b6120e0565b348015610a2557600080fd5b506104fe610a343660046143e4565b612230565b348015610a4557600080fd5b506105356122fd565b348015610a5a57600080fd5b506104fe610a69366004614711565b61230c565b348015610a7a57600080fd5b506104fe612400565b348015610a8f57600080fd5b506104c9610a9e36600461444b565b612439565b348015610aaf57600080fd5b506105b0600e5481565b348015610ac557600080fd5b506104fe610ad436600461439e565b6124d2565b348015610ae557600080fd5b506104c9610af436600461444b565b612589565b348015610b0557600080fd5b506105b0612596565b348015610b1a57600080fd5b506104c9610b2936600461439e565b60226020526000908152604090205460ff1681565b348015610b4a57600080fd5b506104c9610b5936600461439e565b60276020526000908152604090205460ff1681565b348015610b7a57600080fd5b506105b060245481565b348015610b9057600080fd5b506012546104c990610100900460ff1681565b348015610baf57600080fd5b506104fe610bbe366004614711565b612792565b348015610bcf57600080fd5b506104fe610bde3660046143e4565b61281b565b348015610bef57600080fd5b506014546104c99060ff1681565b348015610c0957600080fd5b506104fe610c1836600461439e565b6129ba565b348015610c2957600080fd5b506104fe610c383660046143e4565b612a6d565b348015610c4957600080fd5b50610562610c583660046143e4565b612bb8565b348015610c6957600080fd5b506105b060155481565b348015610c7f57600080fd5b506104fe610c8e3660046143e4565b612be2565b348015610c9f57600080fd5b506105b0610cae36600461474a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ce557600080fd5b506104fe610cf43660046146d4565b612d7e565b348015610d0557600080fd5b506105b0600b5481565b348015610d1b57600080fd5b506104fe612e2b565b348015610d3057600080fd5b50600c54610562906001600160a01b031681565b348015610d5057600080fd5b506105b0600d5481565b348015610d6657600080fd5b506104fe610d75366004614485565b612e61565b348015610d8657600080fd5b506105b060175481565b348015610d9c57600080fd5b506104fe610dab36600461439e565b612e9e565b348015610dbc57600080fd5b506104fe612f89565b348015610dd157600080fd5b506105b0601c5481565b348015610de757600080fd5b506105b060085481565b348015610dfd57600080fd5b506105b0601d5481565b348015610e1357600080fd5b506105b0610e2236600461439e565b60236020526000908152604090205481565b348015610e4057600080fd5b506104fe610e4f36600461439e565b612ff5565b6005546001600160a01b03163314610e875760405162461bcd60e51b8152600401610e7e90614778565b60405180910390fd5b601b829055601c819055610e9b81836147c3565b601a81905560141015610ef05760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610e7e565b5050565b6005546001600160a01b03163314610f1e5760405162461bcd60e51b8152600401610e7e90614778565b600081118015610f3057506105a08111155b610f3957600080fd5b610f4481603c6147d6565b60215550565b606060038054610f59906147ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610f85906147ed565b8015610fd25780601f10610fa757610100808354040283529160200191610fd2565b820191906000526020600020905b815481529060010190602001808311610fb557829003601f168201915b5050505050905090565b6000610fe93384846130a8565b5060015b92915050565b6005546001600160a01b0316331461101d5760405162461bcd60e51b8152600401610e7e90614778565b601254610100900460ff16156110875760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610e7e565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110d35760405162461bcd60e51b8152600401610e7e90614778565b806111205760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610e7e565b601254610100900460ff16156111485760405162461bcd60e51b8152600401610e7e90614827565b600047116111685760405162461bcd60e51b8152600401610e7e90614872565b600061117330611b2d565b116111cf5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610e7e565b6009546111ef9030906001600160a01b03166111ea82611b2d565b6130a8565b6009546001600160a01b031663f305d719473061120b81611b2d565b60008033426040518863ffffffff1660e01b8152600401611231969594939291906148b5565b60606040518083038185885af115801561124f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061127491906148f0565b50505050565b6005546001600160a01b031633146112a45760405162461bcd60e51b8152600401610e7e90614778565b80518251146112f55760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610e7e565b60c88251106113165760405162461bcd60e51b8152600401610e7e9061491e565b60005b825181101561137e57600083828151811061133657611336614974565b60200260200101519050600083838151811061135457611354614974565b602002602001015190506113693383836131cc565b505080806113769061498a565b915050611319565b505050565b6000611390848484613321565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156114155760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610e7e565b61142285338584036130a8565b506001949350505050565b6005546001600160a01b031633146114575760405162461bcd60e51b8152600401610e7e90614778565b6001600160a01b03811660009081526011602052604090205460ff16156114c05760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610e7e565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6005546001600160a01b0316331461150e5760405162461bcd60e51b8152600401610e7e90614778565b670de0b6b3a764000061271061152360025490565b61152e9060196147d6565b61153891906149a3565b61154291906149a3565b8110156115a45760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152697468616e20302e32352560b01b6064820152608401610e7e565b670de0b6b3a764000060646115b860025490565b6115c39060026147d6565b6115cd91906149a3565b6115d791906149a3565b8111156116385760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206275792073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610e7e565b61164a81670de0b6b3a76400006147d6565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610fe99185906111ea9086906147c3565b6005546001600160a01b031633146116e75760405162461bcd60e51b8152600401610e7e90614778565b6001600160a01b03811661174c5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610e7e565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146117c05760405162461bcd60e51b8152600401610e7e90614778565b6000811180156117d257506105a08111155b6117db57600080fd5b6117e681603c6147d6565b60205550565b6005546001600160a01b031633146118165760405162461bcd60e51b8152600401610e7e90614778565b600b5461182230611b2d565b1015611898576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610e7e565b600a805460ff60a01b1916600160a01b1790556118b3613f98565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461191f5760405162461bcd60e51b8152600401610e7e90614778565b60185460168190556019546017819055611938916147c3565b601555601854601b819055601954601c819055611954916147c3565b601a55565b6005546001600160a01b031633146119835760405162461bcd60e51b8152600401610e7e90614778565b6016829055601781905561199781836147c3565b6015819055600f1015610ef05760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610e7e565b6060600f805480602002602001604051908101604052809291908181526020018280548015610fd257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a26575050505050905090565b6005546001600160a01b03163314611a775760405162461bcd60e51b8152600401610e7e90614778565b601254610100900460ff1615611a9f5760405162461bcd60e51b8152600401610e7e90614827565b600a8110611abf5760405162461bcd60e51b8152600401610e7e906149c5565b6012805462ffff0019166201010017905543600d819055611ae19082906147c3565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600047116111685760405162461bcd60e51b8152600401610e7e90614872565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314611b725760405162461bcd60e51b8152600401610e7e90614778565b610258815110611b945760405162461bcd60e51b8152600401610e7e90614a0c565b60005b8151811015610ef0576000828281518110611bb457611bb4614974565b6020908102919091018101516001600160a01b03166000908152601190915260409020805460ff191690555080611bea8161498a565b915050611b97565b6005546001600160a01b03163314611c1c5760405162461bcd60e51b8152600401610e7e90614778565b6012805460ff19169055565b6005546001600160a01b03163314611c525760405162461bcd60e51b8152600401610e7e90614778565b80611cc557600a546001600160a01b0390811690831603611cc55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610e7e565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611d1a5760405162461bcd60e51b8152600401610e7e90614778565b80611d675760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610e7e565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b03163314611ddc5760405162461bcd60e51b8152600401610e7e90614778565b601254610100900460ff1615611e345760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610e7e565b600a811115611e555760405162461bcd60e51b8152600401610e7e906149c5565b6012805462ffff0019166201010017905543600d819055611e779082906147c3565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b03163314611ed35760405162461bcd60e51b8152600401610e7e90614778565b6001600160a01b038316611f295760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610e7e565b6001600160a01b03831630141580611f495750601254610100900460ff16155b611fb25760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610e7e565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201d9190614a5f565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015612070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120949190614a78565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461210a5760405162461bcd60e51b8152600401610e7e90614778565b805182511461215b5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610e7e565b60c882511061217c5760405162461bcd60e51b8152600401610e7e9061491e565b60005b825181101561137e57600083828151811061219c5761219c614974565b6020026020010151905060008383815181106121ba576121ba614974565b6020908102919091018101516001600160a01b03841660009081526022835260409020805460ff1916600117905590549091506121f790426147c3565b6001600160a01b03831660009081526023602052604090205561221b3383836131cc565b505080806122289061498a565b91505061217f565b6005546001600160a01b0316331461225a5760405162461bcd60e51b8152600401610e7e90614778565b600a811015801561226d57506109c48111155b6122b95760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e313020616e64203235204554486044820152606401610e7e565b6122ca81662386f26fc100006147d6565b6024556040518181527ff72da0374d1de504317eedd19f99e3a7121189442594b167bd7fa2dd12104c4f9060200161167b565b606060048054610f59906147ed565b6005546001600160a01b031633146123365760405162461bcd60e51b8152600401610e7e90614778565b600a546001600160a01b03908116908316036123ba5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610e7e565b6123c482826140fa565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b0316331461242a5760405162461bcd60e51b8152600401610e7e90614778565b6012805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156124bb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e7e565b6124c833858584036130a8565b5060019392505050565b6005546001600160a01b031633146124fc5760405162461bcd60e51b8152600401610e7e90614778565b6001600160a01b03811660009081526022602052604090205460ff16156125655760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610e7e565b6001600160a01b03166000908152602260205260409020805460ff19166001179055565b6000610fe9338484613321565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612604573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126289190614a95565b8160008151811061263b5761263b614974565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061266f5761266f614974565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060095460245460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f916126de918690600401614ab2565b600060405180830381865afa1580156126fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127239190810190614acb565b90506064601b54601c5461273791906147c3565b8260018151811061274a5761274a614974565b602002602001015161275c91906147d6565b61276691906149a3565b8160018151811061277957612779614974565b602002602001015161278b91906147c3565b9250505090565b6005546001600160a01b031633146127bc5760405162461bcd60e51b8152600401610e7e90614778565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146128455760405162461bcd60e51b8152600401610e7e90614778565b670de0b6b3a76400006103e861285a60025490565b6128659060056147d6565b61286f91906149a3565b61287991906149a3565b8110156128dd5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610e7e565b670de0b6b3a764000060646128f160025490565b6128fc9060046147d6565b61290691906149a3565b61291091906149a3565b8111156129735760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20342560a81b6064820152608401610e7e565b61298581670de0b6b3a76400006147d6565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc9060200161167b565b6005546001600160a01b031633146129e45760405162461bcd60e51b8152600401610e7e90614778565b6001600160a01b03811660009081526022602052604090205460ff16612a4c5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610e7e565b6001600160a01b03166000908152602260205260409020805460ff19169055565b6005546001600160a01b03163314612a975760405162461bcd60e51b8152600401610e7e90614778565b620186a0612aa460025490565b612aaf9060016147d6565b612ab991906149a3565b811015612b265760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610e7e565b6103e8612b3260025490565b612b3d9060016147d6565b612b4791906149a3565b811115612bb35760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610e7e565b600b55565b600f8181548110612bc857600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612c0c5760405162461bcd60e51b8152600401610e7e90614778565b670de0b6b3a7640000612710612c2160025490565b612c2c9060196147d6565b612c3691906149a3565b612c4091906149a3565b811015612ca35760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260448201526a207468616e20302e32352560a81b6064820152608401610e7e565b670de0b6b3a76400006064612cb760025490565b612cc29060026147d6565b612ccc91906149a3565b612cd691906149a3565b811115612d375760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610e7e565b612d4981670de0b6b3a76400006147d6565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e9060200161167b565b6005546001600160a01b03163314612da85760405162461bcd60e51b8152600401610e7e90614778565b610258815110612dca5760405162461bcd60e51b8152600401610e7e90614a0c565b60005b8151811015610ef0576000828281518110612dea57612dea614974565b6020908102919091018101516001600160a01b03166000908152601190915260409020805460ff191660011790555080612e238161498a565b915050612dcd565b6005546001600160a01b03163314612e555760405162461bcd60e51b8152600401610e7e90614778565b6014805460ff19169055565b6005546001600160a01b03163314612e8b5760405162461bcd60e51b8152600401610e7e90614778565b601f805460ff1916911515919091179055565b6005546001600160a01b03163314612ec85760405162461bcd60e51b8152600401610e7e90614778565b6001600160a01b038116612f2d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e7e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612fb35760405162461bcd60e51b8152600401610e7e90614778565b604051600090339047908381818185875af1925050503d8060008114611274576040519150601f19603f3d011682016040523d82523d6000602084013e611274565b6005546001600160a01b0316331461301f5760405162461bcd60e51b8152600401610e7e90614778565b6001600160a01b03811660009081526011602052604090205460ff166130875760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610e7e565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6001600160a01b03831661310a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e7e565b6001600160a01b03821661316b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e7e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166131f25760405162461bcd60e51b8152600401610e7e90614b5c565b6001600160a01b0382166132185760405162461bcd60e51b8152600401610e7e90614ba1565b6001600160a01b038316600090815260208190526040902054818110156132905760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610e7e565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906132c79084906147c3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161331391815260200190565b60405180910390a350505050565b6001600160a01b0383166133475760405162461bcd60e51b8152600401610e7e90614b5c565b6001600160a01b03821661336d5760405162461bcd60e51b8152600401610e7e90614ba1565b600081116133bd5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610e7e565b601254610100900460ff16613450576001600160a01b03831660009081526025602052604090205460ff168061340b57506001600160a01b03821660009081526025602052604090205460ff165b6134505760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610e7e565b600e5443101580156134695750601254610100900460ff165b15613539576001600160a01b03831660009081526011602052604090205460ff1615806134a357506005546001600160a01b038381169116145b806134b857506001600160a01b03821661dead145b6135395760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610e7e565b601f5460ff1615613729576001600160a01b03831660009081526022602052604090205460ff1615613729576001600160a01b03821660009081526027602052604090205460ff161561367f576001600160a01b0383166000908152602360205260409020544210156135e05760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610e7e565b6135e8612596565b8111156136545760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610e7e565b60215461366190426147c3565b6001600160a01b038416600090815260236020526040902055613729565b6001600160a01b03821660009081526025602052604090205460ff166137295760405162461bcd60e51b815260206004820152605360248201527f563120486f6c646572732063616e6e6f74207472616e7366657220616e64206d60448201527f7573742073656c6c206f6e6c79206f72207472616e7366657220746f206120776064820152723434ba32b634b9ba32b21030b2323932b9b99760691b608482015260a401610e7e565b60125460ff1615613b07576005546001600160a01b0384811691161480159061376057506005546001600160a01b03838116911614155b801561377757506001600160a01b03821661dead14155b801561379c57506001600160a01b03831660009081526025602052604090205460ff16155b80156137c157506001600160a01b03821660009081526025602052604090205460ff16155b15613b075760145460ff16156138da576009546001600160a01b038381169116148015906137fd5750600a546001600160a01b03838116911614155b156138da5761380d600243614be4565b3260009081526013602052604090205410801561384b5750613830600243614be4565b6001600160a01b038316600090815260136020526040902054105b6138b55760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610e7e565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526027602052604090205460ff16801561391b57506001600160a01b03821660009081526026602052604090205460ff16155b156139e2576006548111156139835760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610e7e565b60085461398f83611b2d565b61399990836147c3565b11156139dd5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610e7e565b613b07565b6001600160a01b03821660009081526027602052604090205460ff168015613a2357506001600160a01b03831660009081526026602052604090205460ff16155b15613a8d576007548111156139dd5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610e7e565b6001600160a01b03821660009081526026602052604090205460ff16613b0757600854613ab983611b2d565b613ac390836147c3565b1115613b075760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610e7e565b6000613b1230611b2d565b600b5490915081108015908190613b31575060125462010000900460ff165b8015613b475750600a54600160a01b900460ff16155b8015613b6b57506001600160a01b03841660009081526027602052604090205460ff165b15613b9957600a805460ff60a01b1916600160a01b179055613b8b613f98565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff1680613bdb57506001600160a01b03851660009081526025602052604090205460ff165b15613be4575060005b60008115613f8457600e54431080613c2a5750670c7d713b49da0000600654613c0d9190614be4565b8510158015613c2a575043600e546008613c2791906147c3565b10155b8015613c4e57506001600160a01b03871660009081526027602052604090205460ff165b8015613c7357506001600160a01b03861660009081526027602052604090205460ff16155b8015613c9857506001600160a01b03861660009081526025602052604090205460ff16155b8015613ca657506000601554115b15613e2d57600e544310613ccd57600160066000828254613cc79190614be4565b90915550505b6001600160a01b03861660009081526011602052604090205460ff16613dad576001600160a01b0386166000908152601160205260408120805460ff191660019081179091556010805491929091613d269084906147c3565b9091555050600f80546001810182556000919091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064613dba8660636147d6565b613dc491906149a3565b905060155460175482613dd791906147d6565b613de191906149a3565b601e6000828254613df291906147c3565b9091555050601554601654613e0790836147d6565b613e1191906149a3565b601d6000828254613e2291906147c3565b90915550613f669050565b6001600160a01b03861660009081526027602052604090205460ff168015613e5757506000601a54115b15613eb9576064601a5486613e6c91906147d6565b613e7691906149a3565b9050601a54601c5482613e8991906147d6565b613e9391906149a3565b601e6000828254613ea491906147c3565b9091555050601a54601b54613e0790836147d6565b6001600160a01b03871660009081526027602052604090205460ff168015613ee357506000601554115b15613f6657606460155486613ef891906147d6565b613f0291906149a3565b905060155460175482613f1591906147d6565b613f1f91906149a3565b601e6000828254613f3091906147c3565b9091555050601554601654613f4590836147d6565b613f4f91906149a3565b601d6000828254613f6091906147c3565b90915550505b8015613f7757613f778730836131cc565b613f818186614be4565b94505b613f8f8787876131cc565b50505050505050565b6000613fa330611b2d565b90506000601d54601e54613fb791906147c3565b9050811580613fc4575080155b15613fcd575050565b600b54613fdb90600a6147d6565b821115613ff357600b54613ff090600a6147d6565b91505b600080600283601e548661400791906147d6565b61401191906149a3565b61401b91906149a3565b905061402f61402a8286614be4565b614128565b601e5447908190600090614045906002906149a3565b61404f9087614be4565b601d5461405c90856147d6565b61406691906149a3565b90506140728183614be4565b6000601e819055601d559150831580159061408d5750600082115b1561409c5761409c8483614282565b600c546040516001600160a01b03909116904790600081818185875af1925050503d80600081146140e9576040519150601f19603f3d011682016040523d82523d6000602084013e6140ee565b606091505b50505050505050505050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556123c48282614323565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061415d5761415d614974565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156141b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141da9190614a95565b816001815181106141ed576141ed614974565b6001600160a01b03928316602091820292909201015260095461421391309116846130a8565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061424c908590600090869030904290600401614bf7565b600060405180830381600087803b15801561426657600080fd5b505af115801561427a573d6000803e3d6000fd5b505050505050565b60095461429a9030906001600160a01b0316846130a8565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906142d99030908790600090819061dead9042906004016148b5565b60606040518083038185885af11580156142f7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061431c91906148f0565b5050505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038116811461439b57600080fd5b50565b6000602082840312156143b057600080fd5b81356143bb81614386565b9392505050565b600080604083850312156143d557600080fd5b50508035926020909101359150565b6000602082840312156143f657600080fd5b5035919050565b600060208083528351808285015260005b8181101561442a5785810183015185820160400152820161440e565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561445e57600080fd5b823561446981614386565b946020939093013593505050565b801515811461439b57600080fd5b60006020828403121561449757600080fd5b81356143bb81614477565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156144e1576144e16144a2565b604052919050565b600067ffffffffffffffff821115614503576145036144a2565b5060051b60200190565b600082601f83011261451e57600080fd5b8135602061453361452e836144e9565b6144b8565b82815260059290921b8401810191818101908684111561455257600080fd5b8286015b8481101561457657803561456981614386565b8352918301918301614556565b509695505050505050565b6000806040838503121561459457600080fd5b823567ffffffffffffffff808211156145ac57600080fd5b6145b88683870161450d565b93506020915081850135818111156145cf57600080fd5b85019050601f810186136145e257600080fd5b80356145f061452e826144e9565b81815260059190911b8201830190838101908883111561460f57600080fd5b928401925b8284101561462d57833582529284019290840190614614565b80955050505050509250929050565b60008060006060848603121561465157600080fd5b833561465c81614386565b9250602084013561466c81614386565b929592945050506040919091013590565b600081518084526020808501945080840160005b838110156146b65781516001600160a01b031687529582019590820190600101614691565b509495945050505050565b6020815260006143bb602083018461467d565b6000602082840312156146e657600080fd5b813567ffffffffffffffff8111156146fd57600080fd5b6147098482850161450d565b949350505050565b6000806040838503121561472457600080fd5b823561472f81614386565b9150602083013561473f81614477565b809150509250929050565b6000806040838503121561475d57600080fd5b823561476881614386565b9150602083013561473f81614386565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610fed57610fed6147ad565b8082028115828204841417610fed57610fed6147ad565b600181811c9082168061480157607f821691505b60208210810361482157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561490557600080fd5b8351925060208401519150604084015190509250925092565b60208082526036908201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726040820152752074786e2064756520746f20676173206c696d69747360501b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006001820161499c5761499c6147ad565b5060010190565b6000826149c057634e487b7160e01b600052601260045260246000fd5b500490565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60208082526033908201527f43616e206f6e6c79206d61726b203630302077616c6c657473207065722074786040820152726e2064756520746f20676173206c696d69747360681b606082015260800190565b600060208284031215614a7157600080fd5b5051919050565b600060208284031215614a8a57600080fd5b81516143bb81614477565b600060208284031215614aa757600080fd5b81516143bb81614386565b828152604060208201526000614709604083018461467d565b60006020808385031215614ade57600080fd5b825167ffffffffffffffff811115614af557600080fd5b8301601f81018513614b0657600080fd5b8051614b1461452e826144e9565b81815260059190911b82018301908381019087831115614b3357600080fd5b928401925b82841015614b5157835182529284019290840190614b38565b979650505050505050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610fed57610fed6147ad565b85815284602082015260a060408201526000614c1660a083018661467d565b6001600160a01b039490941660608301525060800152939250505056fea264697066735822122039b248f683e6ee08f7c9c155d2a136e50cde090202c5e08c0cad60493ec1e9e864736f6c634300081100334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0
Deployed Bytecode
0x60806040526004361061048d5760003560e01c806385e5431811610255578063c876d0b911610144578063ea4cfe12116100c1578063f5648a4f11610085578063f5648a4f14610db0578063f637434214610dc5578063f8b45b0514610ddb578063fb002c9714610df1578063fdfbeb8114610e07578063fed20c7814610e3457600080fd5b8063ea4cfe1214610d24578063ee40166e14610d44578063f0f3668514610d5a578063f11a24d314610d7a578063f2fde38b14610d9057600080fd5b8063dc3f0d0f11610108578063dc3f0d0f14610c73578063dd62ed3e14610c93578063e1d9888f14610cd9578063e2f4560514610cf9578063e884f26014610d0f57600080fd5b8063c876d0b914610be3578063cbf9f12414610bfd578063d257b34f14610c1d578063d5fb5b1714610c3d578063d85ba06314610c5d57600080fd5b8063a62068ce116101d2578063b62496f511610196578063b62496f514610b3e578063b949ca3414610b6e578063bbc0c74214610b84578063c024666814610ba3578063c18bc19514610bc357600080fd5b8063a62068ce14610aa3578063a89eb90a14610ab9578063a9059cbb14610ad9578063ac277bf214610af9578063b2b4c9ed14610b0e57600080fd5b806394f421481161021957806394f4214814610a1957806395d89b4114610a395780639a7a23d614610a4e578063a28e86d314610a6e578063a457c2d714610a8357600080fd5b806385e543181461099557806388e765ff146109af5780638d1085b9146109c55780638da5cb5b146109db5780639496df3e146109f957600080fd5b80634a62bb651161037c5780636a19197b116102f9578063713318c1116102bd578063713318c1146108e0578063751039fc146109005780637571336a146109155780637e926b4b1461093557806382aa7c68146109555780638366e79a1461097557600080fd5b80636a19197b146108545780636a486a8e146108745780636b0a894c1461088a5780636ddd1713146108a057806370a08231146108c057600080fd5b80635a139dd4116103405780635a139dd4146107d15780635eed98e2146107e757806366ca9b83146107fc57806366d602ae1461081c5780636a11afc61461083257600080fd5b80634a62bb65146107555780634eeef4d31461076f5780634f77f6c01461078f57806351f205e4146107a557806358a6d531146107ba57600080fd5b80631a8145bb1161040a5780632be32b61116103ce5780632be32b61146106b9578063313ce567146106d957806339509351146106f5578063452ed4f114610715578063499b83941461073557600080fd5b80631a8145bb146106235780631b151b13146106395780632307b4411461065957806323b872dd14610679578063243c20f71461069957600080fd5b8063095ea7b311610451578063095ea7b31461057a57806309cc80a81461059a57806310d5de53146105be5780631805805b146105ee57806318160ddd1461060e57600080fd5b8063017e01921461049957806302dbd8f8146104de5780630357cd171461050057806306fdde03146105205780630758d9241461054257600080fd5b3661049457005b600080fd5b3480156104a557600080fd5b506104c96104b436600461439e565b60116020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156104ea57600080fd5b506104fe6104f93660046143c2565b610e54565b005b34801561050c57600080fd5b506104fe61051b3660046143e4565b610ef4565b34801561052c57600080fd5b50610535610f4a565b6040516104d591906143fd565b34801561054e57600080fd5b50600954610562906001600160a01b031681565b6040516001600160a01b0390911681526020016104d5565b34801561058657600080fd5b506104c961059536600461444b565b610fdc565b3480156105a657600080fd5b506105b060205481565b6040519081526020016104d5565b3480156105ca57600080fd5b506104c96105d936600461439e565b60266020526000908152604090205460ff1681565b3480156105fa57600080fd5b506104fe61060936600461439e565b610ff3565b34801561061a57600080fd5b506002546105b0565b34801561062f57600080fd5b506105b0601e5481565b34801561064557600080fd5b506104fe610654366004614485565b6110a9565b34801561066557600080fd5b506104fe610674366004614581565b61127a565b34801561068557600080fd5b506104c961069436600461463c565b611383565b3480156106a557600080fd5b506104fe6106b436600461439e565b61142d565b3480156106c557600080fd5b506104fe6106d43660046143e4565b6114e4565b3480156106e557600080fd5b50604051601281526020016104d5565b34801561070157600080fd5b506104c961071036600461444b565b611686565b34801561072157600080fd5b50600a54610562906001600160a01b031681565b34801561074157600080fd5b506104fe61075036600461439e565b6116bd565b34801561076157600080fd5b506012546104c99060ff1681565b34801561077b57600080fd5b506104fe61078a3660046143e4565b611796565b34801561079b57600080fd5b506105b0601b5481565b3480156107b157600080fd5b506104fe6117ec565b3480156107c657600080fd5b50600e5443106104c9565b3480156107dd57600080fd5b506105b060165481565b3480156107f357600080fd5b506104fe6118f5565b34801561080857600080fd5b506104fe6108173660046143c2565b611959565b34801561082857600080fd5b506105b060075481565b34801561083e57600080fd5b506108476119ec565b6040516104d591906146c1565b34801561086057600080fd5b506104fe61086f3660046143e4565b611a4d565b34801561088057600080fd5b506105b0601a5481565b34801561089657600080fd5b506105b060105481565b3480156108ac57600080fd5b506012546104c99062010000900460ff1681565b3480156108cc57600080fd5b506105b06108db36600461439e565b611b2d565b3480156108ec57600080fd5b506104fe6108fb3660046146d4565b611b48565b34801561090c57600080fd5b506104fe611bf2565b34801561092157600080fd5b506104fe610930366004614711565b611c28565b34801561094157600080fd5b506104fe610950366004614485565b611cf0565b34801561096157600080fd5b506104fe6109703660046143e4565b611db2565b34801561098157600080fd5b506104c961099036600461474a565b611ea6565b3480156109a157600080fd5b50601f546104c99060ff1681565b3480156109bb57600080fd5b506105b060065481565b3480156109d157600080fd5b506105b060215481565b3480156109e757600080fd5b506005546001600160a01b0316610562565b348015610a0557600080fd5b506104fe610a14366004614581565b6120e0565b348015610a2557600080fd5b506104fe610a343660046143e4565b612230565b348015610a4557600080fd5b506105356122fd565b348015610a5a57600080fd5b506104fe610a69366004614711565b61230c565b348015610a7a57600080fd5b506104fe612400565b348015610a8f57600080fd5b506104c9610a9e36600461444b565b612439565b348015610aaf57600080fd5b506105b0600e5481565b348015610ac557600080fd5b506104fe610ad436600461439e565b6124d2565b348015610ae557600080fd5b506104c9610af436600461444b565b612589565b348015610b0557600080fd5b506105b0612596565b348015610b1a57600080fd5b506104c9610b2936600461439e565b60226020526000908152604090205460ff1681565b348015610b4a57600080fd5b506104c9610b5936600461439e565b60276020526000908152604090205460ff1681565b348015610b7a57600080fd5b506105b060245481565b348015610b9057600080fd5b506012546104c990610100900460ff1681565b348015610baf57600080fd5b506104fe610bbe366004614711565b612792565b348015610bcf57600080fd5b506104fe610bde3660046143e4565b61281b565b348015610bef57600080fd5b506014546104c99060ff1681565b348015610c0957600080fd5b506104fe610c1836600461439e565b6129ba565b348015610c2957600080fd5b506104fe610c383660046143e4565b612a6d565b348015610c4957600080fd5b50610562610c583660046143e4565b612bb8565b348015610c6957600080fd5b506105b060155481565b348015610c7f57600080fd5b506104fe610c8e3660046143e4565b612be2565b348015610c9f57600080fd5b506105b0610cae36600461474a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ce557600080fd5b506104fe610cf43660046146d4565b612d7e565b348015610d0557600080fd5b506105b0600b5481565b348015610d1b57600080fd5b506104fe612e2b565b348015610d3057600080fd5b50600c54610562906001600160a01b031681565b348015610d5057600080fd5b506105b0600d5481565b348015610d6657600080fd5b506104fe610d75366004614485565b612e61565b348015610d8657600080fd5b506105b060175481565b348015610d9c57600080fd5b506104fe610dab36600461439e565b612e9e565b348015610dbc57600080fd5b506104fe612f89565b348015610dd157600080fd5b506105b0601c5481565b348015610de757600080fd5b506105b060085481565b348015610dfd57600080fd5b506105b0601d5481565b348015610e1357600080fd5b506105b0610e2236600461439e565b60236020526000908152604090205481565b348015610e4057600080fd5b506104fe610e4f36600461439e565b612ff5565b6005546001600160a01b03163314610e875760405162461bcd60e51b8152600401610e7e90614778565b60405180910390fd5b601b829055601c819055610e9b81836147c3565b601a81905560141015610ef05760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610e7e565b5050565b6005546001600160a01b03163314610f1e5760405162461bcd60e51b8152600401610e7e90614778565b600081118015610f3057506105a08111155b610f3957600080fd5b610f4481603c6147d6565b60215550565b606060038054610f59906147ed565b80601f0160208091040260200160405190810160405280929190818152602001828054610f85906147ed565b8015610fd25780601f10610fa757610100808354040283529160200191610fd2565b820191906000526020600020905b815481529060010190602001808311610fb557829003601f168201915b5050505050905090565b6000610fe93384846130a8565b5060015b92915050565b6005546001600160a01b0316331461101d5760405162461bcd60e51b8152600401610e7e90614778565b601254610100900460ff16156110875760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f74207570646174652061667465722074726164696e6720697320666044820152681d5b98dd1a5bdb985b60ba1b6064820152608401610e7e565b600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146110d35760405162461bcd60e51b8152600401610e7e90614778565b806111205760405162461bcd60e51b815260206004820152601f60248201527f506c6561736520636f6e6669726d20616464696e67206f6620746865204c50006044820152606401610e7e565b601254610100900460ff16156111485760405162461bcd60e51b8152600401610e7e90614827565b600047116111685760405162461bcd60e51b8152600401610e7e90614872565b600061117330611b2d565b116111cf5760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610e7e565b6009546111ef9030906001600160a01b03166111ea82611b2d565b6130a8565b6009546001600160a01b031663f305d719473061120b81611b2d565b60008033426040518863ffffffff1660e01b8152600401611231969594939291906148b5565b60606040518083038185885af115801561124f573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061127491906148f0565b50505050565b6005546001600160a01b031633146112a45760405162461bcd60e51b8152600401610e7e90614778565b80518251146112f55760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610e7e565b60c88251106113165760405162461bcd60e51b8152600401610e7e9061491e565b60005b825181101561137e57600083828151811061133657611336614974565b60200260200101519050600083838151811061135457611354614974565b602002602001015190506113693383836131cc565b505080806113769061498a565b915050611319565b505050565b6000611390848484613321565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156114155760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610e7e565b61142285338584036130a8565b506001949350505050565b6005546001600160a01b031633146114575760405162461bcd60e51b8152600401610e7e90614778565b6001600160a01b03811660009081526011602052604090205460ff16156114c05760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610e7e565b6001600160a01b03166000908152601160205260409020805460ff19166001179055565b6005546001600160a01b0316331461150e5760405162461bcd60e51b8152600401610e7e90614778565b670de0b6b3a764000061271061152360025490565b61152e9060196147d6565b61153891906149a3565b61154291906149a3565b8110156115a45760405162461bcd60e51b815260206004820152602a60248201527f43616e6e6f7420736574206d61782062757920616d6f756e74206c6f776572206044820152697468616e20302e32352560b01b6064820152608401610e7e565b670de0b6b3a764000060646115b860025490565b6115c39060026147d6565b6115cd91906149a3565b6115d791906149a3565b8111156116385760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206275792073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610e7e565b61164a81670de0b6b3a76400006147d6565b60068190556040519081527ffcc0366804aaa8dbf88a2924100c733b70dec8445957a5d5f8ff92898de41009906020015b60405180910390a150565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610fe99185906111ea9086906147c3565b6005546001600160a01b031633146116e75760405162461bcd60e51b8152600401610e7e90614778565b6001600160a01b03811661174c5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610e7e565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b6005546001600160a01b031633146117c05760405162461bcd60e51b8152600401610e7e90614778565b6000811180156117d257506105a08111155b6117db57600080fd5b6117e681603c6147d6565b60205550565b6005546001600160a01b031633146118165760405162461bcd60e51b8152600401610e7e90614778565b600b5461182230611b2d565b1015611898576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610e7e565b600a805460ff60a01b1916600160a01b1790556118b3613f98565b600a805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b0316331461191f5760405162461bcd60e51b8152600401610e7e90614778565b60185460168190556019546017819055611938916147c3565b601555601854601b819055601954601c819055611954916147c3565b601a55565b6005546001600160a01b031633146119835760405162461bcd60e51b8152600401610e7e90614778565b6016829055601781905561199781836147c3565b6015819055600f1015610ef05760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313525206f72206c6573730000006044820152606401610e7e565b6060600f805480602002602001604051908101604052809291908181526020018280548015610fd257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611a26575050505050905090565b6005546001600160a01b03163314611a775760405162461bcd60e51b8152600401610e7e90614778565b601254610100900460ff1615611a9f5760405162461bcd60e51b8152600401610e7e90614827565b600a8110611abf5760405162461bcd60e51b8152600401610e7e906149c5565b6012805462ffff0019166201010017905543600d819055611ae19082906147c3565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1600047116111685760405162461bcd60e51b8152600401610e7e90614872565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b03163314611b725760405162461bcd60e51b8152600401610e7e90614778565b610258815110611b945760405162461bcd60e51b8152600401610e7e90614a0c565b60005b8151811015610ef0576000828281518110611bb457611bb4614974565b6020908102919091018101516001600160a01b03166000908152601190915260409020805460ff191690555080611bea8161498a565b915050611b97565b6005546001600160a01b03163314611c1c5760405162461bcd60e51b8152600401610e7e90614778565b6012805460ff19169055565b6005546001600160a01b03163314611c525760405162461bcd60e51b8152600401610e7e90614778565b80611cc557600a546001600160a01b0390811690831603611cc55760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610e7e565b6001600160a01b03919091166000908152602660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611d1a5760405162461bcd60e51b8152600401610e7e90614778565b80611d675760405162461bcd60e51b815260206004820152601860248201527f506c6561736520636f6e6669726d2072656e6f756e63652100000000000000006044820152606401610e7e565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a350600580546001600160a01b0319169055565b6005546001600160a01b03163314611ddc5760405162461bcd60e51b8152600401610e7e90614778565b601254610100900460ff1615611e345760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610e7e565b600a811115611e555760405162461bcd60e51b8152600401610e7e906149c5565b6012805462ffff0019166201010017905543600d819055611e779082906147c3565b600e556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a150565b6005546000906001600160a01b03163314611ed35760405162461bcd60e51b8152600401610e7e90614778565b6001600160a01b038316611f295760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610e7e565b6001600160a01b03831630141580611f495750601254610100900460ff16155b611fb25760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610e7e565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015611ff9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201d9190614a5f565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015612070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120949190614a78565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6005546001600160a01b0316331461210a5760405162461bcd60e51b8152600401610e7e90614778565b805182511461215b5760405162461bcd60e51b815260206004820152601e60248201527f617272617973206d757374206265207468652073616d65206c656e67746800006044820152606401610e7e565b60c882511061217c5760405162461bcd60e51b8152600401610e7e9061491e565b60005b825181101561137e57600083828151811061219c5761219c614974565b6020026020010151905060008383815181106121ba576121ba614974565b6020908102919091018101516001600160a01b03841660009081526022835260409020805460ff1916600117905590549091506121f790426147c3565b6001600160a01b03831660009081526023602052604090205561221b3383836131cc565b505080806122289061498a565b91505061217f565b6005546001600160a01b0316331461225a5760405162461bcd60e51b8152600401610e7e90614778565b600a811015801561226d57506109c48111155b6122b95760405162461bcd60e51b815260206004820181905260248201527f4d75737420736574206265747765656e20302e313020616e64203235204554486044820152606401610e7e565b6122ca81662386f26fc100006147d6565b6024556040518181527ff72da0374d1de504317eedd19f99e3a7121189442594b167bd7fa2dd12104c4f9060200161167b565b606060048054610f59906147ed565b6005546001600160a01b031633146123365760405162461bcd60e51b8152600401610e7e90614778565b600a546001600160a01b03908116908316036123ba5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610e7e565b6123c482826140fa565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b0316331461242a5760405162461bcd60e51b8152600401610e7e90614778565b6012805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156124bb5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e7e565b6124c833858584036130a8565b5060019392505050565b6005546001600160a01b031633146124fc5760405162461bcd60e51b8152600401610e7e90614778565b6001600160a01b03811660009081526022602052604090205460ff16156125655760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610e7e565b6001600160a01b03166000908152602260205260409020805460ff19166001179055565b6000610fe9338484613321565b604080516002808252606082018352600092839291906020830190803683375050600954604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015612604573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126289190614a95565b8160008151811061263b5761263b614974565b60200260200101906001600160a01b031690816001600160a01b031681525050308160018151811061266f5761266f614974565b6001600160a01b039290921660209283029190910182015260408051600280825260608201835260009391929091830190803683370190505060095460245460405163d06ca61f60e01b81529293506001600160a01b039091169163d06ca61f916126de918690600401614ab2565b600060405180830381865afa1580156126fb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127239190810190614acb565b90506064601b54601c5461273791906147c3565b8260018151811061274a5761274a614974565b602002602001015161275c91906147d6565b61276691906149a3565b8160018151811061277957612779614974565b602002602001015161278b91906147c3565b9250505090565b6005546001600160a01b031633146127bc5760405162461bcd60e51b8152600401610e7e90614778565b6001600160a01b038216600081815260256020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146128455760405162461bcd60e51b8152600401610e7e90614778565b670de0b6b3a76400006103e861285a60025490565b6128659060056147d6565b61286f91906149a3565b61287991906149a3565b8110156128dd5760405162461bcd60e51b815260206004820152602c60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e74206c6f7760448201526b6572207468616e20302e352560a01b6064820152608401610e7e565b670de0b6b3a764000060646128f160025490565b6128fc9060046147d6565b61290691906149a3565b61291091906149a3565b8111156129735760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782077616c6c657420616d6f756e742068696760448201526a686572207468616e20342560a81b6064820152608401610e7e565b61298581670de0b6b3a76400006147d6565b60088190556040519081527fefc9add9a9b7382de284ef5ad69d8ea863e2680492b21a81948c2d5f04a442bc9060200161167b565b6005546001600160a01b031633146129e45760405162461bcd60e51b8152600401610e7e90614778565b6001600160a01b03811660009081526022602052604090205460ff16612a4c5760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610e7e565b6001600160a01b03166000908152602260205260409020805460ff19169055565b6005546001600160a01b03163314612a975760405162461bcd60e51b8152600401610e7e90614778565b620186a0612aa460025490565b612aaf9060016147d6565b612ab991906149a3565b811015612b265760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610e7e565b6103e8612b3260025490565b612b3d9060016147d6565b612b4791906149a3565b811115612bb35760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171892903a37ba30b61039bab838363c9760611b6064820152608401610e7e565b600b55565b600f8181548110612bc857600080fd5b6000918252602090912001546001600160a01b0316905081565b6005546001600160a01b03163314612c0c5760405162461bcd60e51b8152600401610e7e90614778565b670de0b6b3a7640000612710612c2160025490565b612c2c9060196147d6565b612c3691906149a3565b612c4091906149a3565b811015612ca35760405162461bcd60e51b815260206004820152602b60248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e74206c6f77657260448201526a207468616e20302e32352560a81b6064820152608401610e7e565b670de0b6b3a76400006064612cb760025490565b612cc29060026147d6565b612ccc91906149a3565b612cd691906149a3565b811115612d375760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61782073656c6c20616d6f756e7420686967686560448201526872207468616e20322560b81b6064820152608401610e7e565b612d4981670de0b6b3a76400006147d6565b60078190556040519081527f53c4eb831d8cfeb750f1c62590d8cd30f4c6f0380d29a05caa09f0d92588560e9060200161167b565b6005546001600160a01b03163314612da85760405162461bcd60e51b8152600401610e7e90614778565b610258815110612dca5760405162461bcd60e51b8152600401610e7e90614a0c565b60005b8151811015610ef0576000828281518110612dea57612dea614974565b6020908102919091018101516001600160a01b03166000908152601190915260409020805460ff191660011790555080612e238161498a565b915050612dcd565b6005546001600160a01b03163314612e555760405162461bcd60e51b8152600401610e7e90614778565b6014805460ff19169055565b6005546001600160a01b03163314612e8b5760405162461bcd60e51b8152600401610e7e90614778565b601f805460ff1916911515919091179055565b6005546001600160a01b03163314612ec85760405162461bcd60e51b8152600401610e7e90614778565b6001600160a01b038116612f2d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e7e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314612fb35760405162461bcd60e51b8152600401610e7e90614778565b604051600090339047908381818185875af1925050503d8060008114611274576040519150601f19603f3d011682016040523d82523d6000602084013e611274565b6005546001600160a01b0316331461301f5760405162461bcd60e51b8152600401610e7e90614778565b6001600160a01b03811660009081526011602052604090205460ff166130875760405162461bcd60e51b815260206004820152601e60248201527f57616c6c657420697320616c7265616479206e6f7420666c61676765642e00006044820152606401610e7e565b6001600160a01b03166000908152601160205260409020805460ff19169055565b6001600160a01b03831661310a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e7e565b6001600160a01b03821661316b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e7e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166131f25760405162461bcd60e51b8152600401610e7e90614b5c565b6001600160a01b0382166132185760405162461bcd60e51b8152600401610e7e90614ba1565b6001600160a01b038316600090815260208190526040902054818110156132905760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610e7e565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906132c79084906147c3565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161331391815260200190565b60405180910390a350505050565b6001600160a01b0383166133475760405162461bcd60e51b8152600401610e7e90614b5c565b6001600160a01b03821661336d5760405162461bcd60e51b8152600401610e7e90614ba1565b600081116133bd5760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610e7e565b601254610100900460ff16613450576001600160a01b03831660009081526025602052604090205460ff168061340b57506001600160a01b03821660009081526025602052604090205460ff165b6134505760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610e7e565b600e5443101580156134695750601254610100900460ff165b15613539576001600160a01b03831660009081526011602052604090205460ff1615806134a357506005546001600160a01b038381169116145b806134b857506001600160a01b03821661dead145b6135395760405162461bcd60e51b815260206004820152604660248201527f426f74732063616e6e6f74207472616e7366657220746f6b656e7320696e206f60448201527f72206f75742065786365707420746f206f776e6572206f722064656164206164606482015265323932b9b99760d11b608482015260a401610e7e565b601f5460ff1615613729576001600160a01b03831660009081526022602052604090205460ff1615613729576001600160a01b03821660009081526027602052604090205460ff161561367f576001600160a01b0383166000908152602360205260409020544210156135e05760405162461bcd60e51b815260206004820152600f60248201526e10d85b9b9bdd081cd95b1b081e595d608a1b6044820152606401610e7e565b6135e8612596565b8111156136545760405162461bcd60e51b815260206004820152603460248201527f417474656d7074696e6720746f2073656c6c206f766572206d61782073656c6c6044820152731030b6b7bab73a17101021b432b1b59036b0bc1760611b6064820152608401610e7e565b60215461366190426147c3565b6001600160a01b038416600090815260236020526040902055613729565b6001600160a01b03821660009081526025602052604090205460ff166137295760405162461bcd60e51b815260206004820152605360248201527f563120486f6c646572732063616e6e6f74207472616e7366657220616e64206d60448201527f7573742073656c6c206f6e6c79206f72207472616e7366657220746f206120776064820152723434ba32b634b9ba32b21030b2323932b9b99760691b608482015260a401610e7e565b60125460ff1615613b07576005546001600160a01b0384811691161480159061376057506005546001600160a01b03838116911614155b801561377757506001600160a01b03821661dead14155b801561379c57506001600160a01b03831660009081526025602052604090205460ff16155b80156137c157506001600160a01b03821660009081526025602052604090205460ff16155b15613b075760145460ff16156138da576009546001600160a01b038381169116148015906137fd5750600a546001600160a01b03838116911614155b156138da5761380d600243614be4565b3260009081526013602052604090205410801561384b5750613830600243614be4565b6001600160a01b038316600090815260136020526040902054105b6138b55760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610e7e565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526027602052604090205460ff16801561391b57506001600160a01b03821660009081526026602052604090205460ff16155b156139e2576006548111156139835760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610e7e565b60085461398f83611b2d565b61399990836147c3565b11156139dd5760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610e7e565b613b07565b6001600160a01b03821660009081526027602052604090205460ff168015613a2357506001600160a01b03831660009081526026602052604090205460ff16155b15613a8d576007548111156139dd5760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610e7e565b6001600160a01b03821660009081526026602052604090205460ff16613b0757600854613ab983611b2d565b613ac390836147c3565b1115613b075760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610e7e565b6000613b1230611b2d565b600b5490915081108015908190613b31575060125462010000900460ff165b8015613b475750600a54600160a01b900460ff16155b8015613b6b57506001600160a01b03841660009081526027602052604090205460ff165b15613b9957600a805460ff60a01b1916600160a01b179055613b8b613f98565b600a805460ff60a01b191690555b6001600160a01b03851660009081526025602052604090205460019060ff1680613bdb57506001600160a01b03851660009081526025602052604090205460ff165b15613be4575060005b60008115613f8457600e54431080613c2a5750670c7d713b49da0000600654613c0d9190614be4565b8510158015613c2a575043600e546008613c2791906147c3565b10155b8015613c4e57506001600160a01b03871660009081526027602052604090205460ff165b8015613c7357506001600160a01b03861660009081526027602052604090205460ff16155b8015613c9857506001600160a01b03861660009081526025602052604090205460ff16155b8015613ca657506000601554115b15613e2d57600e544310613ccd57600160066000828254613cc79190614be4565b90915550505b6001600160a01b03861660009081526011602052604090205460ff16613dad576001600160a01b0386166000908152601160205260408120805460ff191660019081179091556010805491929091613d269084906147c3565b9091555050600f80546001810182556000919091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b0319166001600160a01b0388169081179091556040519081527f55678e47d0a699d3ab99b0184c4ff14f2246ba80522deb921aa0c8823578c44a9060200160405180910390a15b6064613dba8660636147d6565b613dc491906149a3565b905060155460175482613dd791906147d6565b613de191906149a3565b601e6000828254613df291906147c3565b9091555050601554601654613e0790836147d6565b613e1191906149a3565b601d6000828254613e2291906147c3565b90915550613f669050565b6001600160a01b03861660009081526027602052604090205460ff168015613e5757506000601a54115b15613eb9576064601a5486613e6c91906147d6565b613e7691906149a3565b9050601a54601c5482613e8991906147d6565b613e9391906149a3565b601e6000828254613ea491906147c3565b9091555050601a54601b54613e0790836147d6565b6001600160a01b03871660009081526027602052604090205460ff168015613ee357506000601554115b15613f6657606460155486613ef891906147d6565b613f0291906149a3565b905060155460175482613f1591906147d6565b613f1f91906149a3565b601e6000828254613f3091906147c3565b9091555050601554601654613f4590836147d6565b613f4f91906149a3565b601d6000828254613f6091906147c3565b90915550505b8015613f7757613f778730836131cc565b613f818186614be4565b94505b613f8f8787876131cc565b50505050505050565b6000613fa330611b2d565b90506000601d54601e54613fb791906147c3565b9050811580613fc4575080155b15613fcd575050565b600b54613fdb90600a6147d6565b821115613ff357600b54613ff090600a6147d6565b91505b600080600283601e548661400791906147d6565b61401191906149a3565b61401b91906149a3565b905061402f61402a8286614be4565b614128565b601e5447908190600090614045906002906149a3565b61404f9087614be4565b601d5461405c90856147d6565b61406691906149a3565b90506140728183614be4565b6000601e819055601d559150831580159061408d5750600082115b1561409c5761409c8483614282565b600c546040516001600160a01b03909116904790600081818185875af1925050503d80600081146140e9576040519150601f19603f3d011682016040523d82523d6000602084013e6140ee565b606091505b50505050505050505050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556123c48282614323565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061415d5761415d614974565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156141b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141da9190614a95565b816001815181106141ed576141ed614974565b6001600160a01b03928316602091820292909201015260095461421391309116846130a8565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac9479061424c908590600090869030904290600401614bf7565b600060405180830381600087803b15801561426657600080fd5b505af115801561427a573d6000803e3d6000fd5b505050505050565b60095461429a9030906001600160a01b0316846130a8565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906142d99030908790600090819061dead9042906004016148b5565b60606040518083038185885af11580156142f7573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061431c91906148f0565b5050505050565b6001600160a01b038216600081815260266020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b038116811461439b57600080fd5b50565b6000602082840312156143b057600080fd5b81356143bb81614386565b9392505050565b600080604083850312156143d557600080fd5b50508035926020909101359150565b6000602082840312156143f657600080fd5b5035919050565b600060208083528351808285015260005b8181101561442a5785810183015185820160400152820161440e565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561445e57600080fd5b823561446981614386565b946020939093013593505050565b801515811461439b57600080fd5b60006020828403121561449757600080fd5b81356143bb81614477565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156144e1576144e16144a2565b604052919050565b600067ffffffffffffffff821115614503576145036144a2565b5060051b60200190565b600082601f83011261451e57600080fd5b8135602061453361452e836144e9565b6144b8565b82815260059290921b8401810191818101908684111561455257600080fd5b8286015b8481101561457657803561456981614386565b8352918301918301614556565b509695505050505050565b6000806040838503121561459457600080fd5b823567ffffffffffffffff808211156145ac57600080fd5b6145b88683870161450d565b93506020915081850135818111156145cf57600080fd5b85019050601f810186136145e257600080fd5b80356145f061452e826144e9565b81815260059190911b8201830190838101908883111561460f57600080fd5b928401925b8284101561462d57833582529284019290840190614614565b80955050505050509250929050565b60008060006060848603121561465157600080fd5b833561465c81614386565b9250602084013561466c81614386565b929592945050506040919091013590565b600081518084526020808501945080840160005b838110156146b65781516001600160a01b031687529582019590820190600101614691565b509495945050505050565b6020815260006143bb602083018461467d565b6000602082840312156146e657600080fd5b813567ffffffffffffffff8111156146fd57600080fd5b6147098482850161450d565b949350505050565b6000806040838503121561472457600080fd5b823561472f81614386565b9150602083013561473f81614477565b809150509250929050565b6000806040838503121561475d57600080fd5b823561476881614386565b9150602083013561473f81614386565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610fed57610fed6147ad565b8082028115828204841417610fed57610fed6147ad565b600181811c9082168061480157607f821691505b60208210810361482157634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602b908201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60408201526a3a103932b630bab731b41760a91b606082015260800190565b60208082526023908201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756040820152620dcc6d60eb1b606082015260800190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561490557600080fd5b8351925060208401519150604084015190509250925092565b60208082526036908201527f43616e206f6e6c792061697264726f70203230302077616c6c657473207065726040820152752074786e2064756520746f20676173206c696d69747360501b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b60006001820161499c5761499c6147ad565b5060010190565b6000826149c057634e487b7160e01b600052601260045260246000fd5b500490565b60208082526027908201527f43616e6e6f74206d616b652070656e616c747920626c6f636b73206d6f72652060408201526607468616e2031360cc1b606082015260800190565b60208082526033908201527f43616e206f6e6c79206d61726b203630302077616c6c657473207065722074786040820152726e2064756520746f20676173206c696d69747360681b606082015260800190565b600060208284031215614a7157600080fd5b5051919050565b600060208284031215614a8a57600080fd5b81516143bb81614477565b600060208284031215614aa757600080fd5b81516143bb81614386565b828152604060208201526000614709604083018461467d565b60006020808385031215614ade57600080fd5b825167ffffffffffffffff811115614af557600080fd5b8301601f81018513614b0657600080fd5b8051614b1461452e826144e9565b81815260059190911b82018301908381019087831115614b3357600080fd5b928401925b82841015614b5157835182529284019290840190614b38565b979650505050505050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610fed57610fed6147ad565b85815284602082015260a060408201526000614c1660a083018661467d565b6001600160a01b039490941660608301525060800152939250505056fea264697066735822122039b248f683e6ee08f7c9c155d2a136e50cde090202c5e08c0cad60493ec1e9e864736f6c63430008110033
Deployed Bytecode Sourcemap
11230:28536:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11699:44;;;;;;;;;;-1:-1:-1;11699:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;567:14:1;;560:22;542:41;;530:2;515:18;11699:44:0;;;;;;;;22559:344;;;;;;;;;;-1:-1:-1;22559:344:0;;;;;:::i;:::-;;:::i;:::-;;35740:238;;;;;;;;;;-1:-1:-1;35740:238:0;;;;;:::i;:::-;;:::i;4582:100::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11375:27::-;;;;;;;;;;-1:-1:-1;11375:27:0;;;;-1:-1:-1;;;;;11375:27:0;;;;;;-1:-1:-1;;;;;1767:32:1;;;1749:51;;1737:2;1722:18;11375:27:0;1585:221:1;5637:210:0;;;;;;;;;;-1:-1:-1;5637:210:0;;;;;:::i;:::-;;:::i;12448:44::-;;;;;;;;;;;;;;;;;;;2277:25:1;;;2265:2;2250:18;12448:44:0;2131:177:1;12867:63:0;;;;;;;;;;-1:-1:-1;12867:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18771:194;;;;;;;;;;-1:-1:-1;18771:194:0;;;;;:::i;:::-;;:::i;4903:108::-;;;;;;;;;;-1:-1:-1;4991:12:0;;4903:108;;12354:33;;;;;;;;;;;;;;;;37165:871;;;;;;;;;;-1:-1:-1;37165:871:0;;;;;:::i;:::-;;:::i;38113:719::-;;;;;;;;;;-1:-1:-1;38113:719:0;;;;;:::i;:::-;;:::i;5855:529::-;;;;;;;;;;-1:-1:-1;5855:529:0;;;;;:::i;:::-;;:::i;17465:169::-;;;;;;;;;;-1:-1:-1;17465:169:0;;;;;:::i;:::-;;:::i;19132:459::-;;;;;;;;;;-1:-1:-1;19132:459:0;;;;;:::i;:::-;;:::i;4802:93::-;;;;;;;;;;-1:-1:-1;4802:93:0;;4885:2;5770:36:1;;5758:2;5743:18;4802:93:0;5628:184:1;6392:297:0;;;;;;;;;;-1:-1:-1;6392:297:0;;;;;:::i;:::-;;:::i;11409:21::-;;;;;;;;;;-1:-1:-1;11409:21:0;;;;-1:-1:-1;;;;;11409:21:0;;;34081:357;;;;;;;;;;-1:-1:-1;34081:357:0;;;;;:::i;:::-;;:::i;11752:33::-;;;;;;;;;;-1:-1:-1;11752:33:0;;;;;;;;35531:201;;;;;;;;;;-1:-1:-1;35531:201:0;;;;;:::i;:::-;;:::i;12234:32::-;;;;;;;;;;;;;;;;34490:349;;;;;;;;;;;;;:::i;30749:121::-;;;;;;;;;;-1:-1:-1;30844:18:0;;30829:12;:33;30749:121;;12025:31;;;;;;;;;;;;;;;;22911:394;;;;;;;;;;;;;:::i;22214:337::-;;;;;;;;;;-1:-1:-1;22214:337:0;;;;;:::i;:::-;;:::i;11307:28::-;;;;;;;;;;;;;;;;17174:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;35986:1171::-;;;;;;;;;;-1:-1:-1;35986:1171:0;;;;;:::i;:::-;;:::i;12199:28::-;;;;;;;;;;;;;;;;11667:25;;;;;;;;;;;;;;;;11832:31;;;;;;;;;;-1:-1:-1;11832:31:0;;;;;;;;;;;5019:177;;;;;;;;;;-1:-1:-1;5019:177:0;;;;;:::i;:::-;;:::i;18398:365::-;;;;;;;;;;-1:-1:-1;18398:365:0;;;;;:::i;:::-;;:::i;34891:84::-;;;;;;;;;;;;;:::i;21267:334::-;;;;;;;;;;-1:-1:-1;21267:334:0;;;;;:::i;:::-;;:::i;9113:265::-;;;;;;;;;;-1:-1:-1;9113:265:0;;;;;:::i;:::-;;:::i;16702:464::-;;;;;;;;;;-1:-1:-1;16702:464:0;;;;;:::i;:::-;;:::i;33251:567::-;;;;;;;;;;-1:-1:-1;33251:567:0;;;;;:::i;:::-;;:::i;12396:45::-;;;;;;;;;;-1:-1:-1;12396:45:0;;;;;;;;11273:27;;;;;;;;;;;;;;;;12499:50;;;;;;;;;;;;;;;;8899:79;;;;;;;;;;-1:-1:-1;8964:6:0;;-1:-1:-1;;;;;8964:6:0;8899:79;;38914:849;;;;;;;;;;-1:-1:-1;38914:849:0;;;;;:::i;:::-;;:::i;35075:285::-;;;;;;;;;;-1:-1:-1;35075:285:0;;;;;:::i;:::-;;:::i;4690:104::-;;;;;;;;;;;;;:::i;21609:353::-;;;;;;;;;;-1:-1:-1;21609:353:0;;;;;:::i;:::-;;:::i;34983:84::-;;;;;;;;;;;;;:::i;6697:482::-;;;;;;;;;;-1:-1:-1;6697:482:0;;;;;:::i;:::-;;:::i;11594:33::-;;;;;;;;;;;;;;;;17642:182;;;;;;;;;;-1:-1:-1;17642:182:0;;;;;:::i;:::-;;:::i;5204:216::-;;;;;;;;;;-1:-1:-1;5204:216:0;;;;;:::i;:::-;;:::i;30297:444::-;;;;;;;;;;;;;:::i;12558:48::-;;;;;;;;;;-1:-1:-1;12558:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;13088:57;;;;;;;;;;-1:-1:-1;13088:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;12676:42;;;;;;;;;;;;;;;;11792:33;;;;;;;;;;-1:-1:-1;11792:33:0;;;;;;;;;;;23313:182;;;;;;;;;;-1:-1:-1;23313:182:0;;;;;:::i;:::-;;:::i;20071:461::-;;;;;;;;;;-1:-1:-1;20071:461:0;;;;;:::i;:::-;;:::i;11943:39::-;;;;;;;;;;-1:-1:-1;11943:39:0;;;;;;;;17832:188;;;;;;;;;;-1:-1:-1;17832:188:0;;;;;:::i;:::-;;:::i;20602:428::-;;;;;;;;;;-1:-1:-1;20602:428:0;;;;;:::i;:::-;;:::i;11634:26::-;;;;;;;;;;-1:-1:-1;11634:26:0;;;;;:::i;:::-;;:::i;11991:27::-;;;;;;;;;;;;;;;;19599:464;;;;;;;;;;-1:-1:-1;19599:464:0;;;;;:::i;:::-;;:::i;5428:201::-;;;;;;;;;;-1:-1:-1;5428:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;5594:18:0;;;5562:7;5594:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5428:201;18028:362;;;;;;;;;;-1:-1:-1;18028:362:0;;;;;:::i;:::-;;:::i;11467:33::-;;;;;;;;;;;;;;;;19026:98;;;;;;;;;;;;;:::i;11509:32::-;;;;;;;;;;-1:-1:-1;11509:32:0;;;;-1:-1:-1;;;;;11509:32:0;;;11550:37;;;;;;;;;;;;;;;;35368:155;;;;;;;;;;-1:-1:-1;35368:155:0;;;;;:::i;:::-;;:::i;12063:30::-;;;;;;;;;;;;;;;;9386:281;;;;;;;;;;-1:-1:-1;9386:281:0;;;;;:::i;:::-;;:::i;33888:185::-;;;;;;;;;;;;;:::i;12273:31::-;;;;;;;;;;;;;;;;11342:24;;;;;;;;;;;;;;;;12313:34;;;;;;;;;;;;;;;;12613:56;;;;;;;;;;-1:-1:-1;12613:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;17282:175;;;;;;;;;;-1:-1:-1;17282:175:0;;;;;:::i;:::-;;:::i;22559:344::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;;;;;;;;;22683:17:::1;:34:::0;;;22728:16:::1;:32:::0;;;22787:36:::1;22747:13:::0;22703:14;22787:36:::1;:::i;:::-;22771:13;:52:::0;;;22859:2:::1;-1:-1:-1::0;22842:19:0::1;22834:61;;;::::0;-1:-1:-1;;;22834:61:0;;8715:2:1;22834:61:0::1;::::0;::::1;8697:21:1::0;8754:2;8734:18;;;8727:30;8793:31;8773:18;;;8766:59;8842:18;;22834:61:0::1;8513:353:1::0;22834:61:0::1;22559:344:::0;;:::o;35740:238::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;35880:1:::1;35864:13;:17;:42;;;;;35902:4;35885:13;:21;;35864:42;35856:51;;;::::0;::::1;;35945:25;:13:::0;35961:9:::1;35945:25;:::i;:::-;35918:24;:52:::0;-1:-1:-1;35740:238:0:o;4582:100::-;4636:13;4669:5;4662:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4582:100;:::o;5637:210::-;5756:4;5778:39;732:10;5801:7;5810:6;5778:8;:39::i;:::-;-1:-1:-1;5835:4:0;5637:210;;;;;:::o;18771:194::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;18857:13:::1;::::0;::::1;::::0;::::1;;;18856:14;18848:68;;;::::0;-1:-1:-1;;;18848:68:0;;9631:2:1;18848:68:0::1;::::0;::::1;9613:21:1::0;9670:2;9650:18;;;9643:30;9709:34;9689:18;;;9682:62;-1:-1:-1;;;9760:18:1;;;9753:39;9809:19;;18848:68:0::1;9429:405:1::0;18848:68:0::1;18927:9;:30:::0;;-1:-1:-1;;;;;;18927:30:0::1;-1:-1:-1::0;;;;;18927:30:0;;;::::1;::::0;;;::::1;::::0;;18771:194::o;37165:871::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;37250:12:::1;37242:56;;;::::0;-1:-1:-1;;;37242:56:0;;10041:2:1;37242:56:0::1;::::0;::::1;10023:21:1::0;10080:2;10060:18;;;10053:30;10119:33;10099:18;;;10092:61;10170:18;;37242:56:0::1;9839:355:1::0;37242:56:0::1;37318:13;::::0;::::1;::::0;::::1;;;37317:14;37309:70;;;;-1:-1:-1::0;;;37309:70:0::1;;;;;;;:::i;:::-;37468:1;37444:21;:25;37422:110;;;;-1:-1:-1::0;;;37422:110:0::1;;;;;;;:::i;:::-;37592:1;37565:24;37583:4;37565:9;:24::i;:::-;:28;37543:116;;;::::0;-1:-1:-1;;;37543:116:0;;11217:2:1;37543:116:0::1;::::0;::::1;11199:21:1::0;11256:2;11236:18;;;11229:30;11295:34;11275:18;;;11268:62;-1:-1:-1;;;11346:18:1;;;11339:36;11392:19;;37543:116:0::1;11015:402:1::0;37543:116:0::1;37704:9;::::0;37672:69:::1;::::0;37689:4:::1;::::0;-1:-1:-1;;;;;37704:9:0::1;37716:24;37689:4:::0;37716:9:::1;:24::i;:::-;37672:8;:69::i;:::-;37754:9;::::0;-1:-1:-1;;;;;37754:9:0::1;:25;37787:21;37832:4;37852:24;37832:4:::0;37852:9:::1;:24::i;:::-;37891:1;37934::::0;37977:10:::1;38002:15;37754:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37165:871:::0;:::o;38113:719::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;38294:15:::1;:22;38276:7;:14;:40;38254:120;;;::::0;-1:-1:-1;;;38254:120:0;;12547:2:1;38254:120:0::1;::::0;::::1;12529:21:1::0;12586:2;12566:18;;;12559:30;12625:32;12605:18;;;12598:60;12675:18;;38254:120:0::1;12345:354:1::0;38254:120:0::1;38424:3;38407:7;:14;:20;38385:124;;;;-1:-1:-1::0;;;38385:124:0::1;;;;;;;:::i;:::-;38623:9;38618:207;38642:7;:14;38638:1;:18;38618:207;;;38678:14;38695:7;38703:1;38695:10;;;;;;;;:::i;:::-;;;;;;;38678:27;;38720:14;38737:15;38753:1;38737:18;;;;;;;;:::i;:::-;;;;;;;38720:35;;38770:43;38786:10;38798:6;38806;38770:15;:43::i;:::-;38663:162;;38658:3;;;;;:::i;:::-;;;;38618:207;;;;38113:719:::0;;:::o;5855:529::-;5995:4;6012:36;6022:6;6030:9;6041:6;6012:9;:36::i;:::-;-1:-1:-1;;;;;6088:19:0;;6061:24;6088:19;;;:11;:19;;;;;;;;732:10;6088:33;;;;;;;;6154:26;;;;6132:116;;;;-1:-1:-1;;;6132:116:0;;13601:2:1;6132:116:0;;;13583:21:1;13640:2;13620:18;;;13613:30;13679:34;13659:18;;;13652:62;-1:-1:-1;;;13730:18:1;;;13723:38;13778:19;;6132:116:0;13399:404:1;6132:116:0;6284:57;6293:6;732:10;6334:6;6315:16;:25;6284:8;:57::i;:::-;-1:-1:-1;6372:4:0;;5855:529;-1:-1:-1;;;;5855:529:0:o;17465:169::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17537:20:0;::::1;;::::0;;;:12:::1;:20;::::0;;;;;::::1;;17536:21;17528:60;;;::::0;-1:-1:-1;;;17528:60:0;;14010:2:1;17528:60:0::1;::::0;::::1;13992:21:1::0;14049:2;14029:18;;;14022:30;14088:28;14068:18;;;14061:56;14134:18;;17528:60:0::1;13808:350:1::0;17528:60:0::1;-1:-1:-1::0;;;;;17599:20:0::1;;::::0;;;:12:::1;:20;::::0;;;;:27;;-1:-1:-1;;17599:27:0::1;17622:4;17599:27;::::0;;17465:169::o;19132:459::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;19271:4:::1;19262:5;19240:13;4991:12:::0;;;4903:108;19240:13:::1;:18;::::0;19256:2:::1;19240:18;:::i;:::-;19239:28;;;;:::i;:::-;19238:37;;;;:::i;:::-;19228:6;:47;;19206:139;;;::::0;-1:-1:-1;;;19206:139:0;;14587:2:1;19206:139:0::1;::::0;::::1;14569:21:1::0;14626:2;14606:18;;;14599:30;14665:34;14645:18;;;14638:62;-1:-1:-1;;;14716:18:1;;;14709:40;14766:19;;19206:139:0::1;14385:406:1::0;19206:139:0::1;19418:4;19411:3;19390:13;4991:12:::0;;;4903:108;19390:13:::1;:17;::::0;19406:1:::1;19390:17;:::i;:::-;19389:25;;;;:::i;:::-;19388:34;;;;:::i;:::-;19378:6;:44;;19356:135;;;::::0;-1:-1:-1;;;19356:135:0;;14998:2:1;19356:135:0::1;::::0;::::1;14980:21:1::0;15037:2;15017:18;;;15010:30;15076:34;15056:18;;;15049:62;-1:-1:-1;;;15127:18:1;;;15120:39;15176:19;;19356:135:0::1;14796:405:1::0;19356:135:0::1;19517:17;:6:::0;19527::::1;19517:17;:::i;:::-;19502:12;:32:::0;;;19550:33:::1;::::0;2277:25:1;;;19550:33:0::1;::::0;2265:2:1;2250:18;19550:33:0::1;;;;;;;;19132:459:::0;:::o;6392:297::-;732:10;6507:4;6601:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6601:34:0;;;;;;;;;;6507:4;;6529:130;;6579:7;;6601:47;;6638:10;;6601:47;:::i;34081:357::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34214:32:0;::::1;34192:120;;;::::0;-1:-1:-1;;;34192:120:0;;15408:2:1;34192:120:0::1;::::0;::::1;15390:21:1::0;15447:2;15427:18;;;15420:30;15486:34;15466:18;;;15459:62;-1:-1:-1;;;15537:18:1;;;15530:36;15583:19;;34192:120:0::1;15206:402:1::0;34192:120:0::1;34323:17;:47:::0;;-1:-1:-1;;;;;;34323:47:0::1;-1:-1:-1::0;;;;;34323:47:0;::::1;::::0;;::::1;::::0;;;34386:44:::1;::::0;::::1;::::0;-1:-1:-1;;34386:44:0::1;34081:357:::0;:::o;35531:201::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;35641:1:::1;35625:13;:17;:42;;;;;35663:4;35646:13;:21;;35625:42;35617:51;;;::::0;::::1;;35699:25;:13:::0;35715:9:::1;35699:25;:::i;:::-;35679:17;:45:::0;-1:-1:-1;35531:201:0:o;34490:349::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;34595:18:::1;;34567:24;34585:4;34567:9;:24::i;:::-;:46;;34545:160;;;::::0;;-1:-1:-1;;;34545:160:0;;15815:2:1;34545:160:0::1;::::0;::::1;15797:21:1::0;15834:18;;;15827:30;;;;15893:34;15873:18;;;15866:62;15964:34;15944:18;;;15937:62;16016:19;;34545:160:0::1;15613:428:1::0;34545:160:0::1;34716:8;:15:::0;;-1:-1:-1;;;;34716:15:0::1;-1:-1:-1::0;;;34716:15:0::1;::::0;;34742:10:::1;:8;:10::i;:::-;34763:8;:16:::0;;-1:-1:-1;;;;34763:16:0::1;::::0;;34795:36:::1;::::0;34815:15:::1;2277:25:1::0;;34795:36:0::1;::::0;2265:2:1;2250:18;34795:36:0::1;;;;;;;34490:349::o:0;22911:394::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;22984:25:::1;::::0;22965:16:::1;:44:::0;;;23038:24:::1;::::0;23020:15:::1;:42:::0;;;23088:34:::1;::::0;::::1;:::i;:::-;23073:12;:49:::0;23155:25:::1;::::0;23135:17:::1;:45:::0;;;23210:24:::1;::::0;23191:16:::1;:43:::0;;;23261:36:::1;::::0;::::1;:::i;:::-;23245:13;:52:::0;22911:394::o;22214:337::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;22337:16:::1;:33:::0;;;22381:15:::1;:31:::0;;;22438:34:::1;22399:13:::0;22356:14;22438:34:::1;:::i;:::-;22423:12;:49:::0;;;22507:2:::1;-1:-1:-1::0;22491:18:0::1;22483:60;;;::::0;-1:-1:-1;;;22483:60:0;;16248:2:1;22483:60:0::1;::::0;::::1;16230:21:1::0;16287:2;16267:18;;;16260:30;16326:31;16306:18;;;16299:59;16375:18;;22483:60:0::1;16046:353:1::0;17174:100:0;17221:16;17257:9;17250:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17250:16:0;;;;;;;;;;;;;;;;;;;;;;17174:100;:::o;35986:1171::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;36072:13:::1;::::0;::::1;::::0;::::1;;;36071:14;36063:70;;;;-1:-1:-1::0;;;36063:70:0::1;;;;;;;:::i;:::-;36185:2;36166:16;:21;36144:110;;;;-1:-1:-1::0;;;36144:110:0::1;;;;;;;:::i;:::-;36302:13;:20:::0;;-1:-1:-1;;36333:18:0;;;;;36383:12:::1;36362:18;:33:::0;;;36427:37:::1;::::0;36448:16;;36427:37:::1;:::i;:::-;36406:18;:58:::0;36480:16:::1;::::0;::::1;::::0;;;::::1;36587:1;36563:21;:25;36541:110;;;;-1:-1:-1::0;;;36541:110:0::1;;;;;;;:::i;5019:177::-:0;-1:-1:-1;;;;;5170:18:0;5138:7;5170:18;;;;;;;;;;;;5019:177::o;18398:365::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;18521:3:::1;18504:7;:14;:20;18482:121;;;;-1:-1:-1::0;;;18482:121:0::1;;;;;;;:::i;:::-;18619:9;18614:142;18638:7;:14;18634:1;:18;18614:142;;;18674:14;18691:7;18699:1;18691:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;18716:20:0::1;18739:5;18716:20:::0;;;:12:::1;:20:::0;;;;;;:28;;-1:-1:-1;;18716:28:0::1;::::0;;-1:-1:-1;18654:3:0;::::1;::::0;::::1;:::i;:::-;;;;18614:142;;34891:84:::0;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;34945:14:::1;:22:::0;;-1:-1:-1;;34945:22:0::1;::::0;;34891:84::o;21267:334::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;21387:4:::1;21382:155;;21444:6;::::0;-1:-1:-1;;;;;21444:6:0;;::::1;21434:16:::0;;::::1;::::0;21408:117:::1;;;::::0;-1:-1:-1;;;21408:117:0;;17434:2:1;21408:117:0::1;::::0;::::1;17416:21:1::0;17473:2;17453:18;;;17446:30;17512:34;17492:18;;;17485:62;-1:-1:-1;;;17563:18:1;;;17556:37;17610:19;;21408:117:0::1;17232:403:1::0;21408:117:0::1;-1:-1:-1::0;;;;;21547:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;21547:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;21267:334::o;9113:265::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;9240:15:::1;9232:52;;;::::0;-1:-1:-1;;;9232:52:0;;17842:2:1;9232:52:0::1;::::0;::::1;17824:21:1::0;17881:2;17861:18;;;17854:30;17920:26;17900:18;;;17893:54;17964:18;;9232:52:0::1;17640:348:1::0;9232:52:0::1;9321:6;::::0;9300:40:::1;::::0;9337:1:::1;::::0;-1:-1:-1;;;;;9321:6:0::1;::::0;9300:40:::1;::::0;9337:1;;9300:40:::1;-1:-1:-1::0;9351:6:0::1;:19:::0;;-1:-1:-1;;;;;;9351:19:0::1;::::0;;9113:265::o;16702:464::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;16790:13:::1;::::0;::::1;::::0;::::1;;;16789:14;16781:50;;;::::0;-1:-1:-1;;;16781:50:0;;18195:2:1;16781:50:0::1;::::0;::::1;18177:21:1::0;18234:2;18214:18;;;18207:30;18273:25;18253:18;;;18246:53;18316:18;;16781:50:0::1;17993:347:1::0;16781:50:0::1;16884:2;16864:16;:22;;16842:111;;;;-1:-1:-1::0;;;16842:111:0::1;;;;;;;:::i;:::-;16964:13;:20:::0;;-1:-1:-1;;16995:18:0;;;;;17045:12:::1;17024:18;:33:::0;;;17089:37:::1;::::0;17110:16;;17089:37:::1;:::i;:::-;17068:18;:58:::0;17142:16:::1;::::0;::::1;::::0;;;::::1;16702:464:::0;:::o;33251:567::-;9026:6;;33365:10;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;33401:20:0;::::1;33393:59;;;::::0;-1:-1:-1;;;33393:59:0;;18547:2:1;33393:59:0::1;::::0;::::1;18529:21:1::0;18586:2;18566:18;;;18559:30;18625:28;18605:18;;;18598:56;18671:18;;33393:59:0::1;18345:350:1::0;33393:59:0::1;-1:-1:-1::0;;;;;33485:23:0;::::1;33503:4;33485:23;;::::0;:41:::1;;-1:-1:-1::0;33513:13:0::1;::::0;::::1;::::0;::::1;;;33512:14;33485:41;33463:143;;;::::0;-1:-1:-1;;;33463:143:0;;18902:2:1;33463:143:0::1;::::0;::::1;18884:21:1::0;18941:2;18921:18;;;18914:30;18980:34;18960:18;;;18953:62;-1:-1:-1;;;19031:18:1;;;19024:50;19091:19;;33463:143:0::1;18700:416:1::0;33463:143:0::1;33644:39;::::0;-1:-1:-1;;;33644:39:0;;33677:4:::1;33644:39;::::0;::::1;1749:51:1::0;33617:24:0::1;::::0;-1:-1:-1;;;;;33644:24:0;::::1;::::0;::::1;::::0;1722:18:1;;33644:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33702:46;::::0;-1:-1:-1;;;33702:46:0;;-1:-1:-1;;;;;19502:32:1;;;33702:46:0::1;::::0;::::1;19484:51:1::0;19551:18;;;19544:34;;;33617:66:0;;-1:-1:-1;33702:23:0;;::::1;::::0;::::1;::::0;19457:18:1;;33702:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33764;::::0;;-1:-1:-1;;;;;19502:32:1;;19484:51;;19566:2;19551:18;;19544:34;;;33694:54:0;;-1:-1:-1;33764:46:0::1;::::0;19457:18:1;33764:46:0::1;;;;;;;33382:436;33251:567:::0;;;;:::o;38914:849::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;39095:15:::1;:22;39077:7;:14;:40;39055:120;;;::::0;-1:-1:-1;;;39055:120:0;;12547:2:1;39055:120:0::1;::::0;::::1;12529:21:1::0;12586:2;12566:18;;;12559:30;12625:32;12605:18;;;12598:60;12675:18;;39055:120:0::1;12345:354:1::0;39055:120:0::1;39225:3;39208:7;:14;:20;39186:124;;;;-1:-1:-1::0;;;39186:124:0::1;;;;;;;:::i;:::-;39424:9;39419:337;39443:7;:14;39439:1;:18;39419:337;;;39479:14;39496:7;39504:1;39496:10;;;;;;;;:::i;:::-;;;;;;;39479:27;;39521:14;39538:15;39554:1;39538:18;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;39573:24:0;::::1;;::::0;;;:16:::1;:24:::0;;;;;:31;;-1:-1:-1;;39573:31:0::1;39600:4;39573:31;::::0;;39669:17;;39538:18;;-1:-1:-1;39651:35:0::1;::::0;:15:::1;:35;:::i;:::-;-1:-1:-1::0;;;;;39619:29:0;::::1;;::::0;;;:21:::1;:29;::::0;;;;:67;39701:43:::1;39717:10;39641:6:::0;39737;39701:15:::1;:43::i;:::-;39464:292;;39459:3;;;;;:::i;:::-;;;;39419:337;;35075:285:::0;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;35182:2:::1;35172:6;:12;;:30;;;;;35198:4;35188:6;:14;;35172:30;35150:112;;;::::0;-1:-1:-1;;;35150:112:0;;20041:2:1;35150:112:0::1;::::0;::::1;20023:21:1::0;;;20060:18;;;20053:30;20119:34;20099:18;;;20092:62;20171:18;;35150:112:0::1;19839:356:1::0;35150:112:0::1;35292:13;:6:::0;35301:4:::1;35292:13;:::i;:::-;35273:16;:32:::0;35321:31:::1;::::0;2277:25:1;;;35321:31:0::1;::::0;2265:2:1;2250:18;35321:31:0::1;2131:177:1::0;4690:104:0;4746:13;4779:7;4772:14;;;;;:::i;21609:353::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;21755:6:::1;::::0;-1:-1:-1;;;;;21755:6:0;;::::1;21747:14:::0;;::::1;::::0;21725:121:::1;;;::::0;-1:-1:-1;;;21725:121:0;;20402:2:1;21725:121:0::1;::::0;::::1;20384:21:1::0;20441:2;20421:18;;;20414:30;20480:34;20460:18;;;20453:62;20551:27;20531:18;;;20524:55;20596:19;;21725:121:0::1;20200:421:1::0;21725:121:0::1;21857:41;21886:4;21892:5;21857:28;:41::i;:::-;21914:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;21914:40:0;::::1;::::0;::::1;::::0;;;::::1;21609:353:::0;;:::o;34983:84::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;35038:14:::1;:21:::0;;-1:-1:-1;;35038:21:0::1;35055:4;35038:21;::::0;;34983:84::o;6697:482::-;732:10;6817:4;6866:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6866:34:0;;;;;;;;;;6933:35;;;;6911:122;;;;-1:-1:-1;;;6911:122:0;;20828:2:1;6911:122:0;;;20810:21:1;20867:2;20847:18;;;20840:30;20906:34;20886:18;;;20879:62;-1:-1:-1;;;20957:18:1;;;20950:35;21002:19;;6911:122:0;20626:401:1;6911:122:0;7069:67;732:10;7092:7;7120:15;7101:16;:34;7069:8;:67::i;:::-;-1:-1:-1;7167:4:0;;6697:482;-1:-1:-1;;;6697:482:0:o;17642:182::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17719:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;;::::1;;17718:25;17710:64;;;::::0;-1:-1:-1;;;17710:64:0;;14010:2:1;17710:64:0::1;::::0;::::1;13992:21:1::0;14049:2;14029:18;;;14022:30;14088:28;14068:18;;;14061:56;14134:18;;17710:64:0::1;13808:350:1::0;17710:64:0::1;-1:-1:-1::0;;;;;17785:24:0::1;;::::0;;;:16:::1;:24;::::0;;;;:31;;-1:-1:-1;;17785:31:0::1;17812:4;17785:31;::::0;;17642:182::o;5204:216::-;5326:4;5348:42;732:10;5372:9;5383:6;5348:9;:42::i;30297:444::-;30393:16;;;30407:1;30393:16;;;;;;;;30349:7;;;;30393:16;30407:1;30393:16;;;;;;;;-1:-1:-1;;30430:9:0;;:16;;;-1:-1:-1;;;30430:16:0;;;;30369:40;;-1:-1:-1;;;;;;30430:9:0;;;;:14;;-1:-1:-1;30430:16:0;;;;;;;;;;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30420:4;30425:1;30420:7;;;;;;;;:::i;:::-;;;;;;:26;-1:-1:-1;;;;;30420:26:0;;;-1:-1:-1;;;;;30420:26:0;;;;;30475:4;30457;30462:1;30457:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30457:23:0;;;;:7;;;;;;;;;;:23;30520:16;;;30534:1;30520:16;;;;;;;;30493:24;;30520:16;;30534:1;;30520:16;;;;;;;;;-1:-1:-1;;30557:9:0;;30581:16;;30557:47;;-1:-1:-1;;;30557:47:0;;30493:43;;-1:-1:-1;;;;;;30557:9:0;;;;:23;;:47;;30599:4;;30557:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30557:47:0;;;;;;;;;;;;:::i;:::-;30547:57;;30730:3;30695:17;;30676:16;;:36;;;;:::i;:::-;30662:7;30670:1;30662:10;;;;;;;;:::i;:::-;;;;;;;:51;;;;:::i;:::-;30661:72;;;;:::i;:::-;30635:7;30643:1;30635:10;;;;;;;;:::i;:::-;;;;;;;:98;;;;:::i;:::-;30615:118;;;;30297:444;:::o;23313:182::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23398:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;23398:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;23453:34;;542:41:1;;;23453:34:0::1;::::0;515:18:1;23453:34:0::1;;;;;;;23313:182:::0;;:::o;20071:461::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;20211:4:::1;20203;20182:13;4991:12:::0;;;4903:108;20182:13:::1;:17;::::0;20198:1:::1;20182:17;:::i;:::-;20181:26;;;;:::i;:::-;20180:35;;;;:::i;:::-;20170:6;:45;;20148:139;;;::::0;-1:-1:-1;;;20148:139:0;;22713:2:1;20148:139:0::1;::::0;::::1;22695:21:1::0;22752:2;22732:18;;;22725:30;22791:34;22771:18;;;22764:62;-1:-1:-1;;;22842:18:1;;;22835:42;22894:19;;20148:139:0::1;22511:408:1::0;20148:139:0::1;20360:4;20353:3;20332:13;4991:12:::0;;;4903:108;20332:13:::1;:17;::::0;20348:1:::1;20332:17;:::i;:::-;20331:25;;;;:::i;:::-;20330:34;;;;:::i;:::-;20320:6;:44;;20298:137;;;::::0;-1:-1:-1;;;20298:137:0;;23126:2:1;20298:137:0::1;::::0;::::1;23108:21:1::0;23165:2;23145:18;;;23138:30;23204:34;23184:18;;;23177:62;-1:-1:-1;;;23255:18:1;;;23248:41;23306:19;;20298:137:0::1;22924:407:1::0;20298:137:0::1;20458:17;:6:::0;20468::::1;20458:17;:::i;:::-;20446:9;:29:::0;;;20491:33:::1;::::0;2277:25:1;;;20491:33:0::1;::::0;2265:2:1;2250:18;20491:33:0::1;2131:177:1::0;17832:188:0;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17910:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;;::::1;;17902:67;;;::::0;-1:-1:-1;;;17902:67:0;;23538:2:1;17902:67:0::1;::::0;::::1;23520:21:1::0;23577:2;23557:18;;;23550:30;23616:32;23596:18;;;23589:60;23666:18;;17902:67:0::1;23336:354:1::0;17902:67:0::1;-1:-1:-1::0;;;;;17980:24:0::1;18007:5;17980:24:::0;;;:16:::1;:24;::::0;;;;:32;;-1:-1:-1;;17980:32:0::1;::::0;;17832:188::o;20602:428::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;20742:6:::1;20721:13;4991:12:::0;;;4903:108;20721:13:::1;:17;::::0;20737:1:::1;20721:17;:::i;:::-;20720:28;;;;:::i;:::-;20707:9;:41;;20685:144;;;::::0;-1:-1:-1;;;20685:144:0;;23897:2:1;20685:144:0::1;::::0;::::1;23879:21:1::0;23936:2;23916:18;;;23909:30;23975:34;23955:18;;;23948:62;-1:-1:-1;;;24026:18:1;;;24019:51;24087:19;;20685:144:0::1;23695:417:1::0;20685:144:0::1;20897:4;20876:13;4991:12:::0;;;4903:108;20876:13:::1;:17;::::0;20892:1:::1;20876:17;:::i;:::-;20875:26;;;;:::i;:::-;20862:9;:39;;20840:141;;;::::0;-1:-1:-1;;;20840:141:0;;24319:2:1;20840:141:0::1;::::0;::::1;24301:21:1::0;24358:2;24338:18;;;24331:30;24397:34;24377:18;;;24370:62;-1:-1:-1;;;24448:18:1;;;24441:50;24508:19;;20840:141:0::1;24117:416:1::0;20840:141:0::1;20992:18;:30:::0;20602:428::o;11634:26::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11634:26:0;;-1:-1:-1;11634:26:0;:::o;19599:464::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;19739:4:::1;19730:5;19708:13;4991:12:::0;;;4903:108;19708:13:::1;:18;::::0;19724:2:::1;19708:18;:::i;:::-;19707:28;;;;:::i;:::-;19706:37;;;;:::i;:::-;19696:6;:47;;19674:140;;;::::0;-1:-1:-1;;;19674:140:0;;24740:2:1;19674:140:0::1;::::0;::::1;24722:21:1::0;24779:2;24759:18;;;24752:30;24818:34;24798:18;;;24791:62;-1:-1:-1;;;24869:18:1;;;24862:41;24920:19;;19674:140:0::1;24538:407:1::0;19674:140:0::1;19887:4;19880:3;19859:13;4991:12:::0;;;4903:108;19859:13:::1;:17;::::0;19875:1:::1;19859:17;:::i;:::-;19858:25;;;;:::i;:::-;19857:34;;;;:::i;:::-;19847:6;:44;;19825:135;;;::::0;-1:-1:-1;;;19825:135:0;;25152:2:1;19825:135:0::1;::::0;::::1;25134:21:1::0;25191:2;25171:18;;;25164:30;25230:34;25210:18;;;25203:62;-1:-1:-1;;;25281:18:1;;;25274:39;25330:19;;19825:135:0::1;24950:405:1::0;19825:135:0::1;19987:17;:6:::0;19997::::1;19987:17;:::i;:::-;19971:13;:33:::0;;;20020:35:::1;::::0;2277:25:1;;;20020:35:0::1;::::0;2265:2:1;2250:18;20020:35:0::1;2131:177:1::0;18028:362:0;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;18149:3:::1;18132:7;:14;:20;18110:121;;;;-1:-1:-1::0;;;18110:121:0::1;;;;;;;:::i;:::-;18247:9;18242:141;18266:7;:14;18262:1;:18;18242:141;;;18302:14;18319:7;18327:1;18319:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;18344:20:0::1;;::::0;;;:12:::1;:20:::0;;;;;;:27;;-1:-1:-1;;18344:27:0::1;18367:4;18344:27;::::0;;-1:-1:-1;18282:3:0;::::1;::::0;::::1;:::i;:::-;;;;18242:141;;19026:98:::0;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;19088:20:::1;:28:::0;;-1:-1:-1;;19088:28:0::1;::::0;;19026:98::o;35368:155::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;35478:26:::1;:37:::0;;-1:-1:-1;;35478:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35368:155::o;9386:281::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9489:22:0;::::1;9467:110;;;::::0;-1:-1:-1;;;9467:110:0;;25562:2:1;9467:110:0::1;::::0;::::1;25544:21:1::0;25601:2;25581:18;;;25574:30;25640:34;25620:18;;;25613:62;-1:-1:-1;;;25691:18:1;;;25684:36;25737:19;;9467:110:0::1;25360:402:1::0;9467:110:0::1;9614:6;::::0;9593:38:::1;::::0;-1:-1:-1;;;;;9593:38:0;;::::1;::::0;9614:6:::1;::::0;9593:38:::1;::::0;9614:6:::1;::::0;9593:38:::1;9642:6;:17:::0;;-1:-1:-1;;;;;;9642:17:0::1;-1:-1:-1::0;;;;;9642:17:0;;;::::1;::::0;;;::::1;::::0;;9386:281::o;33888:185::-;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;33983:82:::1;::::0;33946:12:::1;::::0;33991:10:::1;::::0;34015:21:::1;::::0;33946:12;33983:82;33946:12;33983:82;34015:21;33991:10;33983:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17282:175:::0;9026:6;;-1:-1:-1;;;;;9026:6:0;732:10;9026:22;9018:67;;;;-1:-1:-1;;;9018:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17355:20:0;::::1;;::::0;;;:12:::1;:20;::::0;;;;;::::1;;17347:63;;;::::0;-1:-1:-1;;;17347:63:0;;23538:2:1;17347:63:0::1;::::0;::::1;23520:21:1::0;23577:2;23557:18;;;23550:30;23616:32;23596:18;;;23589:60;23666:18;;17347:63:0::1;23336:354:1::0;17347:63:0::1;-1:-1:-1::0;;;;;17421:20:0::1;17444:5;17421:20:::0;;;:12:::1;:20;::::0;;;;:28;;-1:-1:-1;;17421:28:0::1;::::0;;17282:175::o;8168:380::-;-1:-1:-1;;;;;8304:19:0;;8296:68;;;;-1:-1:-1;;;8296:68:0;;26179:2:1;8296:68:0;;;26161:21:1;26218:2;26198:18;;;26191:30;26257:34;26237:18;;;26230:62;-1:-1:-1;;;26308:18:1;;;26301:34;26352:19;;8296:68:0;25977:400:1;8296:68:0;-1:-1:-1;;;;;8383:21:0;;8375:68;;;;-1:-1:-1;;;8375:68:0;;26584:2:1;8375:68:0;;;26566:21:1;26623:2;26603:18;;;26596:30;26662:34;26642:18;;;26635:62;-1:-1:-1;;;26713:18:1;;;26706:32;26755:19;;8375:68:0;26382:398:1;8375:68:0;-1:-1:-1;;;;;8456:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8508:32;;2277:25:1;;;8508:32:0;;2250:18:1;8508:32:0;;;;;;;8168:380;;;:::o;7187:651::-;-1:-1:-1;;;;;7327:20:0;;7319:70;;;;-1:-1:-1;;;7319:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7408:23:0;;7400:71;;;;-1:-1:-1;;;7400:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7508:17:0;;7484:21;7508:17;;;;;;;;;;;7558:23;;;;7536:111;;;;-1:-1:-1;;;7536:111:0;;27797:2:1;7536:111:0;;;27779:21:1;27836:2;27816:18;;;27809:30;27875:34;27855:18;;;27848:62;-1:-1:-1;;;27926:18:1;;;27919:36;27972:19;;7536:111:0;27595:402:1;7536:111:0;-1:-1:-1;;;;;7683:17:0;;;:9;:17;;;;;;;;;;;7703:22;;;7683:42;;7747:20;;;;;;;;:30;;7719:6;;7683:9;7747:30;;7719:6;;7747:30;:::i;:::-;;;;;;;;7812:9;-1:-1:-1;;;;;7795:35:0;7804:6;-1:-1:-1;;;;;7795:35:0;;7823:6;7795:35;;;;2277:25:1;;2265:2;2250:18;;2131:177;7795:35:0;;;;;;;;7308:530;7187:651;;;:::o;23503:6786::-;-1:-1:-1;;;;;23635:18:0;;23627:68;;;;-1:-1:-1;;;23627:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23714:16:0;;23706:64;;;;-1:-1:-1;;;23706:64:0;;;;;;;:::i;:::-;23798:1;23789:6;:10;23781:52;;;;-1:-1:-1;;;23781:52:0;;28204:2:1;23781:52:0;;;28186:21:1;28243:2;28223:18;;;28216:30;28282:31;28262:18;;;28255:59;28331:18;;23781:52:0;28002:353:1;23781:52:0;23851:13;;;;;;;23846:183;;-1:-1:-1;;;;;23907:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23936:23:0;;;;;;:19;:23;;;;;;;;23907:52;23881:136;;;;-1:-1:-1;;;23881:136:0;;28562:2:1;23881:136:0;;;28544:21:1;28601:2;28581:18;;;28574:30;-1:-1:-1;;;28620:18:1;;;28613:52;28682:18;;23881:136:0;28360:346:1;23881:136:0;30844:18;;30829:12;:33;24045:26;:43;;;;-1:-1:-1;24075:13:0;;;;;;;24045:43;24041:269;;;-1:-1:-1;;;;;24132:18:0;;;;;;:12;:18;;;;;;;;24131:19;;:36;;-1:-1:-1;8964:6:0;;-1:-1:-1;;;;;24154:13:0;;;8964:6;;24154:13;24131:36;:61;;;-1:-1:-1;;;;;;24171:21:0;;24185:6;24171:21;24131:61;24105:193;;;;-1:-1:-1;;;24105:193:0;;28913:2:1;24105:193:0;;;28895:21:1;28952:2;28932:18;;;28925:30;28991:34;28971:18;;;28964:62;29062:34;29042:18;;;29035:62;-1:-1:-1;;;29113:19:1;;;29106:37;29160:19;;24105:193:0;28711:474:1;24105:193:0;24326:26;;;;24322:956;;;-1:-1:-1;;;;;24373:22:0;;;;;;:16;:22;;;;;;;;24369:898;;;-1:-1:-1;;;;;24420:29:0;;;;;;:25;:29;;;;;;;;24416:836;;;-1:-1:-1;;;;;24562:27:0;;;;;;:21;:27;;;;;;24593:15;-1:-1:-1;24562:46:0;24528:147;;;;-1:-1:-1;;;24528:147:0;;29392:2:1;24528:147:0;;;29374:21:1;29431:2;29411:18;;;29404:30;-1:-1:-1;;;29450:18:1;;;29443:45;29505:18;;24528:147:0;29190:339:1;24528:147:0;24742:21;:19;:21::i;:::-;24732:6;:31;;24698:169;;;;-1:-1:-1;;;24698:169:0;;29736:2:1;24698:169:0;;;29718:21:1;29775:2;29755:18;;;29748:30;29814:34;29794:18;;;29787:62;-1:-1:-1;;;29865:18:1;;;29858:50;29925:19;;24698:169:0;29534:416:1;24698:169:0;24988:24;;24945:67;;:15;:67;:::i;:::-;-1:-1:-1;;;;;24890:27:0;;;;;;:21;:27;;;;;:122;24416:836;;;-1:-1:-1;;;;;25043:23:0;;;;;;:19;:23;;;;;;;;25038:214;;25091:141;;-1:-1:-1;;;25091:141:0;;30157:2:1;25091:141:0;;;30139:21:1;30196:2;30176:18;;;30169:30;30235:34;30215:18;;;30208:62;30306:34;30286:18;;;30279:62;-1:-1:-1;;;30357:19:1;;;30350:50;30417:19;;25091:141:0;29955:487:1;25038:214:0;25294:14;;;;25290:2148;;;8964:6;;-1:-1:-1;;;;;25347:15:0;;;8964:6;;25347:15;;;;:49;;-1:-1:-1;8964:6:0;;-1:-1:-1;;;;;25383:13:0;;;8964:6;;25383:13;;25347:49;:91;;;;-1:-1:-1;;;;;;25417:21:0;;25431:6;25417:21;;25347:91;:138;;;;-1:-1:-1;;;;;;25460:25:0;;;;;;:19;:25;;;;;;;;25459:26;25347:138;:183;;;;-1:-1:-1;;;;;;25507:23:0;;;;;;:19;:23;;;;;;;;25506:24;25347:183;25325:2102;;;25569:20;;;;25565:692;;;25632:9;;-1:-1:-1;;;;;25618:24:0;;;25632:9;;25618:24;;;;:49;;-1:-1:-1;25660:6:0;;-1:-1:-1;;;;;25646:21:0;;;25660:6;;25646:21;;25618:49;25614:624;;;25809:16;25824:1;25809:12;:16;:::i;:::-;25763:9;25734:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;25930:16:0;25945:1;25930:12;:16;:::i;:::-;-1:-1:-1;;;;;25862:32:0;;;;;;:28;:32;;;;;;:84;25734:212;25696:363;;;;-1:-1:-1;;;25696:363:0;;30782:2:1;25696:363:0;;;30764:21:1;30821:2;30801:18;;;30794:30;30860:34;30840:18;;;30833:62;-1:-1:-1;;;30911:18:1;;;30904:51;30972:19;;25696:363:0;30580:417:1;25696:363:0;26115:9;26086:39;;;;:28;:39;;;;;;26128:12;26086:54;;;;-1:-1:-1;;;;;26167:32:0;;;;;;:47;25614:624;-1:-1:-1;;;;;26331:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;26388:35:0;;;;;;:31;:35;;;;;;;;26387:36;26331:92;26305:1107;;;26510:12;;26500:6;:22;;26466:148;;;;-1:-1:-1;;;26466:148:0;;31204:2:1;26466:148:0;;;31186:21:1;31243:2;31223:18;;;31216:30;31282:34;31262:18;;;31255:62;-1:-1:-1;;;31333:18:1;;;31326:38;31381:19;;26466:148:0;31002:404:1;26466:148:0;26697:9;;26680:13;26690:2;26680:9;:13::i;:::-;26671:22;;:6;:22;:::i;:::-;:35;;26637:140;;;;-1:-1:-1;;;26637:140:0;;31613:2:1;26637:140:0;;;31595:21:1;31652:2;31632:18;;;31625:30;-1:-1:-1;;;31671:18:1;;;31664:49;31730:18;;26637:140:0;31411:343:1;26637:140:0;26305:1107;;;-1:-1:-1;;;;;26875:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;26930:37:0;;;;;;:31;:37;;;;;;;;26929:38;26875:92;26849:563;;;27054:13;;27044:6;:23;;27010:151;;;;-1:-1:-1;;;27010:151:0;;31961:2:1;27010:151:0;;;31943:21:1;32000:2;31980:18;;;31973:30;32039:34;32019:18;;;32012:62;-1:-1:-1;;;32090:18:1;;;32083:40;32140:19;;27010:151:0;31759:406:1;26849:563:0;-1:-1:-1;;;;;27192:35:0;;;;;;:31;:35;;;;;;;;27187:225;;27312:9;;27295:13;27305:2;27295:9;:13::i;:::-;27286:22;;:6;:22;:::i;:::-;:35;;27252:140;;;;-1:-1:-1;;;27252:140:0;;31613:2:1;27252:140:0;;;31595:21:1;31652:2;31632:18;;;31625:30;-1:-1:-1;;;31671:18:1;;;31664:49;31730:18;;27252:140:0;31411:343:1;27252:140:0;27450:28;27481:24;27499:4;27481:9;:24::i;:::-;27557:18;;27450:55;;-1:-1:-1;27533:42:0;;;;;;;27606:22;;-1:-1:-1;27617:11:0;;;;;;;27606:22;:35;;;;-1:-1:-1;27633:8:0;;-1:-1:-1;;;27633:8:0;;;;27632:9;27606:35;:68;;;;-1:-1:-1;;;;;;27645:29:0;;;;;;:25;:29;;;;;;;;27606:68;27588:196;;;27701:8;:15;;-1:-1:-1;;;;27701:15:0;-1:-1:-1;;;27701:15:0;;;27731:10;:8;:10::i;:::-;27756:8;:16;;-1:-1:-1;;;;27756:16:0;;;27588:196;-1:-1:-1;;;;;27915:25:0;;27796:12;27915:25;;;:19;:25;;;;;;27811:4;;27915:25;;;:52;;-1:-1:-1;;;;;;27944:23:0;;;;;;:19;:23;;;;;;;;27915:52;27911:100;;;-1:-1:-1;27994:5:0;27911:100;28023:12;28128:7;28124:2112;;;30844:18;;30829:12;:33;28211:152;;;;28287:8;28272:12;;:23;;;;:::i;:::-;28262:6;:33;;:100;;;;;28350:12;28324:18;;28345:1;28324:22;;;;:::i;:::-;:38;;28262:100;28210:206;;;;-1:-1:-1;;;;;;28385:31:0;;;;;;:25;:31;;;;;;;;28210:206;:257;;;;-1:-1:-1;;;;;;28438:29:0;;;;;;:25;:29;;;;;;;;28437:30;28210:257;:302;;;;-1:-1:-1;;;;;;28489:23:0;;;;;;:19;:23;;;;;;;;28488:24;28210:302;:339;;;;;28548:1;28533:12;;:16;28210:339;28188:1899;;;30844:18;;30829:12;:33;28584:332;;28895:1;28879:12;;:17;;;;;;;:::i;:::-;;;;-1:-1:-1;;28584:332:0;-1:-1:-1;;;;;28941:16:0;;;;;;:12;:16;;;;;;;;28936:216;;-1:-1:-1;;;;;28982:16:0;;;;;;:12;:16;;;;;:23;;-1:-1:-1;;28982:23:0;29001:4;28982:23;;;;;;29028:10;:15;;29001:4;;29028:10;;:15;;29001:4;;29028:15;:::i;:::-;;;;-1:-1:-1;;29066:9:0;:18;;;;;;;-1:-1:-1;29066:18:0;;;;;;;;-1:-1:-1;;;;;;29066:18:0;-1:-1:-1;;;;;29066:18:0;;;;;;;;29112:20;;1749:51:1;;;29112:20:0;;1737:2:1;1722:18;29112:20:0;;;;;;;28936:216;29195:3;29180:11;:6;29189:2;29180:11;:::i;:::-;29179:19;;;;:::i;:::-;29172:26;;29266:12;;29247:15;;29240:4;:22;;;;:::i;:::-;29239:39;;;;:::i;:::-;29217:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;29348:12:0;;29328:16;;29321:23;;:4;:23;:::i;:::-;29320:40;;;;:::i;:::-;29297:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;28188:1899:0;;-1:-1:-1;28188:1899:0;;-1:-1:-1;;;;;29423:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;29472:1;29456:13;;:17;29423:50;29419:668;;;29528:3;29511:13;;29502:6;:22;;;;:::i;:::-;29501:30;;;;:::i;:::-;29494:37;;29600:13;;29580:16;;29573:4;:23;;;;:::i;:::-;29572:41;;;;:::i;:::-;29550:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;29726:13:0;;29684:17;;29677:24;;:4;:24;:::i;29419:668::-;-1:-1:-1;;;;;29801:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;29851:1;29836:12;;:16;29801:51;29797:290;;;29906:3;29890:12;;29881:6;:21;;;;:::i;:::-;29880:29;;;;:::i;:::-;29873:36;;29977:12;;29958:15;;29951:4;:22;;;;:::i;:::-;29950:39;;;;:::i;:::-;29928:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;30059:12:0;;30039:16;;30032:23;;:4;:23;:::i;:::-;30031:40;;;;:::i;:::-;30008:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;29797:290:0;30107:8;;30103:91;;30136:42;30152:4;30166;30173;30136:15;:42::i;:::-;30210:14;30220:4;30210:14;;:::i;:::-;;;28124:2112;30248:33;30264:4;30270:2;30274:6;30248:15;:33::i;:::-;23616:6673;;;;23503:6786;;;:::o;31974:1269::-;32013:23;32039:24;32057:4;32039:9;:24::i;:::-;32013:50;;32074:25;32123:19;;32102:18;;:40;;;;:::i;:::-;32074:68;-1:-1:-1;32159:20:0;;;:46;;-1:-1:-1;32183:22:0;;32159:46;32155:85;;;32222:7;;31974:1269::o;32155:85::-;32274:18;;:23;;32295:2;32274:23;:::i;:::-;32256:15;:41;32252:115;;;32332:18;;:23;;32353:2;32332:23;:::i;:::-;32314:41;;32252:115;32379:12;32453:23;32566:1;32533:17;32498:18;;32480:15;:36;;;;:::i;:::-;32479:71;;;;:::i;:::-;:88;;;;:::i;:::-;32453:114;-1:-1:-1;32580:51:0;32597:33;32453:114;32597:15;:33;:::i;:::-;32580:16;:51::i;:::-;32845:18;;32665:21;;;;32644:18;;32845:22;;32866:1;;32845:22;:::i;:::-;32824:44;;:17;:44;:::i;:::-;32787:19;;32774:32;;:10;:32;:::i;:::-;32773:96;;;;:::i;:::-;32746:123;-1:-1:-1;32882:35:0;32746:123;32882:35;;:::i;:::-;32951:1;32930:18;:22;;;32963:19;:23;32882:35;-1:-1:-1;33003:19:0;;;;;:42;;;33044:1;33026:15;:19;33003:42;32999:121;;;33062:46;33075:15;33092;33062:12;:46::i;:::-;33154:17;;33146:89;;-1:-1:-1;;;;;33154:17:0;;;;33199:21;;33146:89;;;;33199:21;33154:17;33146:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;31974:1269:0:o;21970:236::-;-1:-1:-1;;;;;22053:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;22053:39:0;;;;;;;22103;22053:31;:39;22103:26;:39::i;30878:571::-;31028:16;;;31042:1;31028:16;;;;;;;;31004:21;;31028:16;;;;;;;;;;-1:-1:-1;31028:16:0;31004:40;;31073:4;31055;31060:1;31055:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31055:23:0;;;:7;;;;;;;;;;:23;;;;31099:9;;:16;;;-1:-1:-1;;;31099:16:0;;;;:9;;;;;:14;;:16;;;;;31055:7;;31099:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31089:4;31094:1;31089:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31089:26:0;;;:7;;;;;;;;;:26;31160:9;;31128:56;;31145:4;;31160:9;31172:11;31128:8;:56::i;:::-;31223:9;;:218;;-1:-1:-1;;;31223:218:0;;-1:-1:-1;;;;;31223:9:0;;;;:60;;:218;;31298:11;;31223:9;;31368:4;;31395;;31415:15;;31223:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30933:516;30878:571;:::o;31457:509::-;31637:9;;31605:56;;31622:4;;-1:-1:-1;;;;;31637:9:0;31649:11;31605:8;:56::i;:::-;31704:9;;:254;;-1:-1:-1;;;31704:254:0;;-1:-1:-1;;;;;31704:9:0;;;;:25;;31737:9;;31704:254;;31770:4;;31790:11;;31704:9;;;;31910:6;;31932:15;;31704:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31457:509;;:::o;21038:221::-;-1:-1:-1;;;;;21140:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;21140:52:0;;;;;;;;;;21208:43;;32925:51:1;;;32992:18;;;32985:50;21208:43:0;;32898:18:1;21208:43:0;;;;;;;21038:221;;:::o;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:247::-;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:1:o;594:248::-;662:6;670;723:2;711:9;702:7;698:23;694:32;691:52;;;739:1;736;729:12;691:52;-1:-1:-1;;762:23:1;;;832:2;817:18;;;804:32;;-1:-1:-1;594:248:1:o;847:180::-;906:6;959:2;947:9;938:7;934:23;930:32;927:52;;;975:1;972;965:12;927:52;-1:-1:-1;998:23:1;;847:180;-1:-1:-1;847:180:1:o;1032:548::-;1144:4;1173:2;1202;1191:9;1184:21;1234:6;1228:13;1277:6;1272:2;1261:9;1257:18;1250:34;1302:1;1312:140;1326:6;1323:1;1320:13;1312:140;;;1421:14;;;1417:23;;1411:30;1387:17;;;1406:2;1383:26;1376:66;1341:10;;1312:140;;;1316:3;1501:1;1496:2;1487:6;1476:9;1472:22;1468:31;1461:42;1571:2;1564;1560:7;1555:2;1547:6;1543:15;1539:29;1528:9;1524:45;1520:54;1512:62;;;;1032:548;;;;:::o;1811:315::-;1879:6;1887;1940:2;1928:9;1919:7;1915:23;1911:32;1908:52;;;1956:1;1953;1946:12;1908:52;1995:9;1982:23;2014:31;2039:5;2014:31;:::i;:::-;2064:5;2116:2;2101:18;;;;2088:32;;-1:-1:-1;;;1811:315:1:o;2313:118::-;2399:5;2392:13;2385:21;2378:5;2375:32;2365:60;;2421:1;2418;2411:12;2436:241;2492:6;2545:2;2533:9;2524:7;2520:23;2516:32;2513:52;;;2561:1;2558;2551:12;2513:52;2600:9;2587:23;2619:28;2641:5;2619:28;:::i;2682:127::-;2743:10;2738:3;2734:20;2731:1;2724:31;2774:4;2771:1;2764:15;2798:4;2795:1;2788:15;2814:275;2885:2;2879:9;2950:2;2931:13;;-1:-1:-1;;2927:27:1;2915:40;;2985:18;2970:34;;3006:22;;;2967:62;2964:88;;;3032:18;;:::i;:::-;3068:2;3061:22;2814:275;;-1:-1:-1;2814:275:1:o;3094:183::-;3154:4;3187:18;3179:6;3176:30;3173:56;;;3209:18;;:::i;:::-;-1:-1:-1;3254:1:1;3250:14;3266:4;3246:25;;3094:183::o;3282:737::-;3336:5;3389:3;3382:4;3374:6;3370:17;3366:27;3356:55;;3407:1;3404;3397:12;3356:55;3443:6;3430:20;3469:4;3493:60;3509:43;3549:2;3509:43;:::i;:::-;3493:60;:::i;:::-;3587:15;;;3673:1;3669:10;;;;3657:23;;3653:32;;;3618:12;;;;3697:15;;;3694:35;;;3725:1;3722;3715:12;3694:35;3761:2;3753:6;3749:15;3773:217;3789:6;3784:3;3781:15;3773:217;;;3869:3;3856:17;3886:31;3911:5;3886:31;:::i;:::-;3930:18;;3968:12;;;;3806;;3773:217;;;-1:-1:-1;4008:5:1;3282:737;-1:-1:-1;;;;;;3282:737:1:o;4024:1138::-;4142:6;4150;4203:2;4191:9;4182:7;4178:23;4174:32;4171:52;;;4219:1;4216;4209:12;4171:52;4259:9;4246:23;4288:18;4329:2;4321:6;4318:14;4315:34;;;4345:1;4342;4335:12;4315:34;4368:61;4421:7;4412:6;4401:9;4397:22;4368:61;:::i;:::-;4358:71;;4448:2;4438:12;;4503:2;4492:9;4488:18;4475:32;4532:2;4522:8;4519:16;4516:36;;;4548:1;4545;4538:12;4516:36;4571:24;;;-1:-1:-1;4626:4:1;4618:13;;4614:27;-1:-1:-1;4604:55:1;;4655:1;4652;4645:12;4604:55;4691:2;4678:16;4714:60;4730:43;4770:2;4730:43;:::i;4714:60::-;4808:15;;;4890:1;4886:10;;;;4878:19;;4874:28;;;4839:12;;;;4914:19;;;4911:39;;;4946:1;4943;4936:12;4911:39;4970:11;;;;4990:142;5006:6;5001:3;4998:15;4990:142;;;5072:17;;5060:30;;5023:12;;;;5110;;;;4990:142;;;5151:5;5141:15;;;;;;;4024:1138;;;;;:::o;5167:456::-;5244:6;5252;5260;5313:2;5301:9;5292:7;5288:23;5284:32;5281:52;;;5329:1;5326;5319:12;5281:52;5368:9;5355:23;5387:31;5412:5;5387:31;:::i;:::-;5437:5;-1:-1:-1;5494:2:1;5479:18;;5466:32;5507:33;5466:32;5507:33;:::i;:::-;5167:456;;5559:7;;-1:-1:-1;;;5613:2:1;5598:18;;;;5585:32;;5167:456::o;6025:461::-;6078:3;6116:5;6110:12;6143:6;6138:3;6131:19;6169:4;6198:2;6193:3;6189:12;6182:19;;6235:2;6228:5;6224:14;6256:1;6266:195;6280:6;6277:1;6274:13;6266:195;;;6345:13;;-1:-1:-1;;;;;6341:39:1;6329:52;;6401:12;;;;6436:15;;;;6377:1;6295:9;6266:195;;;-1:-1:-1;6477:3:1;;6025:461;-1:-1:-1;;;;;6025:461:1:o;6491:261::-;6670:2;6659:9;6652:21;6633:4;6690:56;6742:2;6731:9;6727:18;6719:6;6690:56;:::i;6757:348::-;6841:6;6894:2;6882:9;6873:7;6869:23;6865:32;6862:52;;;6910:1;6907;6900:12;6862:52;6950:9;6937:23;6983:18;6975:6;6972:30;6969:50;;;7015:1;7012;7005:12;6969:50;7038:61;7091:7;7082:6;7071:9;7067:22;7038:61;:::i;:::-;7028:71;6757:348;-1:-1:-1;;;;6757:348:1:o;7110:382::-;7175:6;7183;7236:2;7224:9;7215:7;7211:23;7207:32;7204:52;;;7252:1;7249;7242:12;7204:52;7291:9;7278:23;7310:31;7335:5;7310:31;:::i;:::-;7360:5;-1:-1:-1;7417:2:1;7402:18;;7389:32;7430:30;7389:32;7430:30;:::i;:::-;7479:7;7469:17;;;7110:382;;;;;:::o;7497:388::-;7565:6;7573;7626:2;7614:9;7605:7;7601:23;7597:32;7594:52;;;7642:1;7639;7632:12;7594:52;7681:9;7668:23;7700:31;7725:5;7700:31;:::i;:::-;7750:5;-1:-1:-1;7807:2:1;7792:18;;7779:32;7820:33;7779:32;7820:33;:::i;7890:356::-;8092:2;8074:21;;;8111:18;;;8104:30;8170:34;8165:2;8150:18;;8143:62;8237:2;8222:18;;7890:356::o;8251:127::-;8312:10;8307:3;8303:20;8300:1;8293:31;8343:4;8340:1;8333:15;8367:4;8364:1;8357:15;8383:125;8448:9;;;8469:10;;;8466:36;;;8482:18;;:::i;8871:168::-;8944:9;;;8975;;8992:15;;;8986:22;;8972:37;8962:71;;9013:18;;:::i;9044:380::-;9123:1;9119:12;;;;9166;;;9187:61;;9241:4;9233:6;9229:17;9219:27;;9187:61;9294:2;9286:6;9283:14;9263:18;9260:38;9257:161;;9340:10;9335:3;9331:20;9328:1;9321:31;9375:4;9372:1;9365:15;9403:4;9400:1;9393:15;9257:161;;9044:380;;;:::o;10199:407::-;10401:2;10383:21;;;10440:2;10420:18;;;10413:30;10479:34;10474:2;10459:18;;10452:62;-1:-1:-1;;;10545:2:1;10530:18;;10523:41;10596:3;10581:19;;10199:407::o;10611:399::-;10813:2;10795:21;;;10852:2;10832:18;;;10825:30;10891:34;10886:2;10871:18;;10864:62;-1:-1:-1;;;10957:2:1;10942:18;;10935:33;11000:3;10985:19;;10611:399::o;11422:607::-;-1:-1:-1;;;;;11781:15:1;;;11763:34;;11828:2;11813:18;;11806:34;;;;11871:2;11856:18;;11849:34;;;;11914:2;11899:18;;11892:34;;;;11963:15;;;11957:3;11942:19;;11935:44;11743:3;11995:19;;11988:35;;;;11712:3;11697:19;;11422:607::o;12034:306::-;12122:6;12130;12138;12191:2;12179:9;12170:7;12166:23;12162:32;12159:52;;;12207:1;12204;12197:12;12159:52;12236:9;12230:16;12220:26;;12286:2;12275:9;12271:18;12265:25;12255:35;;12330:2;12319:9;12315:18;12309:25;12299:35;;12034:306;;;;;:::o;12704:418::-;12906:2;12888:21;;;12945:2;12925:18;;;12918:30;12984:34;12979:2;12964:18;;12957:62;-1:-1:-1;;;13050:2:1;13035:18;;13028:52;13112:3;13097:19;;12704:418::o;13127:127::-;13188:10;13183:3;13179:20;13176:1;13169:31;13219:4;13216:1;13209:15;13243:4;13240:1;13233:15;13259:135;13298:3;13319:17;;;13316:43;;13339:18;;:::i;:::-;-1:-1:-1;13386:1:1;13375:13;;13259:135::o;14163:217::-;14203:1;14229;14219:132;;14273:10;14268:3;14264:20;14261:1;14254:31;14308:4;14305:1;14298:15;14336:4;14333:1;14326:15;14219:132;-1:-1:-1;14365:9:1;;14163:217::o;16404:403::-;16606:2;16588:21;;;16645:2;16625:18;;;16618:30;16684:34;16679:2;16664:18;;16657:62;-1:-1:-1;;;16750:2:1;16735:18;;16728:37;16797:3;16782:19;;16404:403::o;16812:415::-;17014:2;16996:21;;;17053:2;17033:18;;;17026:30;17092:34;17087:2;17072:18;;17065:62;-1:-1:-1;;;17158:2:1;17143:18;;17136:49;17217:3;17202:19;;16812:415::o;19121:184::-;19191:6;19244:2;19232:9;19223:7;19219:23;19215:32;19212:52;;;19260:1;19257;19250:12;19212:52;-1:-1:-1;19283:16:1;;19121:184;-1:-1:-1;19121:184:1:o;19589:245::-;19656:6;19709:2;19697:9;19688:7;19684:23;19680:32;19677:52;;;19725:1;19722;19715:12;19677:52;19757:9;19751:16;19776:28;19798:5;19776:28;:::i;21032:251::-;21102:6;21155:2;21143:9;21134:7;21130:23;21126:32;21123:52;;;21171:1;21168;21161:12;21123:52;21203:9;21197:16;21222:31;21247:5;21222:31;:::i;21288:332::-;21495:6;21484:9;21477:25;21538:2;21533;21522:9;21518:18;21511:30;21458:4;21558:56;21610:2;21599:9;21595:18;21587:6;21558:56;:::i;21625:881::-;21720:6;21751:2;21794;21782:9;21773:7;21769:23;21765:32;21762:52;;;21810:1;21807;21800:12;21762:52;21843:9;21837:16;21876:18;21868:6;21865:30;21862:50;;;21908:1;21905;21898:12;21862:50;21931:22;;21984:4;21976:13;;21972:27;-1:-1:-1;21962:55:1;;22013:1;22010;22003:12;21962:55;22042:2;22036:9;22065:60;22081:43;22121:2;22081:43;:::i;22065:60::-;22159:15;;;22241:1;22237:10;;;;22229:19;;22225:28;;;22190:12;;;;22265:19;;;22262:39;;;22297:1;22294;22287:12;22262:39;22321:11;;;;22341:135;22357:6;22352:3;22349:15;22341:135;;;22423:10;;22411:23;;22374:12;;;;22454;;;;22341:135;;;22495:5;21625:881;-1:-1:-1;;;;;;;21625:881:1:o;26785:401::-;26987:2;26969:21;;;27026:2;27006:18;;;26999:30;27065:34;27060:2;27045:18;;27038:62;-1:-1:-1;;;27131:2:1;27116:18;;27109:35;27176:3;27161:19;;26785:401::o;27191:399::-;27393:2;27375:21;;;27432:2;27412:18;;;27405:30;27471:34;27466:2;27451:18;;27444:62;-1:-1:-1;;;27537:2:1;27522:18;;27515:33;27580:3;27565:19;;27191:399::o;30447:128::-;30514:9;;;30535:11;;;30532:37;;;30549:18;;:::i;32170:582::-;32469:6;32458:9;32451:25;32512:6;32507:2;32496:9;32492:18;32485:34;32555:3;32550:2;32539:9;32535:18;32528:31;32432:4;32576:57;32628:3;32617:9;32613:19;32605:6;32576:57;:::i;:::-;-1:-1:-1;;;;;32669:32:1;;;;32664:2;32649:18;;32642:60;-1:-1:-1;32733:3:1;32718:19;32711:35;32568:65;32170:582;-1:-1:-1;;;32170:582:1:o
Swarm Source
ipfs://39b248f683e6ee08f7c9c155d2a136e50cde090202c5e08c0cad60493ec1e9e8
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.