ERC-20
Overview
Max Total Supply
1,000,000 FARM
Holders
5
Total Transfers
-
Market
Price
$0.00 @ 0.000000 S
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
FARMER
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-03-03 */ /** *Submitted for verification at SonicScan.org on 2025-03-02 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.17; // OpenZeppelin Contracts v5.0.1 /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address from, address to, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Contract module that helps prevent reentrant calls to a function. */ abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "R1"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } /** * @dev Contract module which provides a basic access control mechanism */ abstract contract Ownable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor(address initialOwner) { if (initialOwner == address(0)) { revert("O1"); } _transferOwnership(initialOwner); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == msg.sender, "O2"); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "O1"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Implementation of the {IERC20} interface. */ contract ERC20 is IERC20 { 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 returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual returns (uint8) { return 18; } function totalSupply() public view virtual returns (uint256) { return _totalSupply; } function balanceOf(address account) public view virtual returns (uint256) { return _balances[account]; } function transfer(address to, uint256 amount) public virtual returns (bool) { address owner = msg.sender; _transfer(owner, to, amount); return true; } function allowance(address owner, address spender) public view virtual returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual returns (bool) { address owner = msg.sender; _approve(owner, spender, amount); return true; } function transferFrom(address from, address to, uint256 amount) public virtual returns (bool) { address spender = msg.sender; _spendAllowance(from, spender, amount); _transfer(from, to, amount); return true; } function _transfer(address from, address to, uint256 amount) internal virtual { require(from != address(0) && to != address(0), "E1"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "E2"); unchecked { _balances[from] = fromBalance - amount; _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, amount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "E3"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; unchecked { _balances[account] += amount; } emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0) && spender != address(0), "E4"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _spendAllowance(address owner, address spender, uint256 amount) internal virtual { uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= amount, "E5"); unchecked { _approve(owner, spender, currentAllowance - amount); } } function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual { // Boş implementasyon } function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual { // Boş implementasyon } } interface IMetropolisRouter { function factory() external pure returns (address); function WETH() external pure returns (address); // Mevcut fonksiyonlar function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); // Yeni eklenen fonksiyonlar function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactTokensForETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); // WETH ile ilgili fonksiyonlar function swapExactTokensForWETH( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactWETHForETH( uint wethAmount, uint amountOutMin, address to, uint deadline ) external returns (uint[] memory amounts); } interface IMetropolisFactory { function getPair(address tokenA, address tokenB) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); } // Pair interface'ini de ekleyelim interface IMetropolisPair { function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; } // FARMER Token Contract contract FARMER is ERC20, ReentrancyGuard, Ownable { // Constants uint256 private constant TOTAL_SUPPLY = 1_000_000 * 10**18; uint256 private constant TAX_RATE = 5; // 5% uint256 private constant LIQUIDITY_TAX = 25; // 2.5% uint256 private constant AIRDROP_TAX = 25; // 2.5% uint256 private constant MIN_HOLDER_AMOUNT = 10 * 10**18; // 10 tokens minimum for holder status uint256 private constant MIN_TOKENS_FOR_PROCESS = 100 * 10**18; // 100 tokens minimum for processing uint256 private constant SWAP_PERCENTAGE = 75; // 75% will be swapped uint256 private constant LIQUIDITY_PERCENTAGE = 25; // 25% will be used for liquidity uint256 private constant MAX_SLIPPAGE = 30; // 30% slippage tolerance // Metropolis DEX addresses IMetropolisRouter public metropolisRouter; IMetropolisFactory public metropolisFactory; address public sonicToken; address public liquidityPair; address public treasuryWallet; // Holder tracking mapping(address => bool) public isHolder; address[] public holders; // Events event LiquidityAdded(uint256 tokenAmount, uint256 sonicAmount); event AirdropDistributed(uint256 amount, uint256 holdersCount); event SwapFailed(string reason); event ProcessStarted(uint256 tokensForLiquidity, uint256 tokensForAirdrop); event SwapSuccessful(uint256 tokensSwapped, uint256 wethReceived); event TreasuryWalletUpdated(address oldTreasury, address newTreasury); event LiquidityAddFailed(string reason); event AirdropFailed(string reason); event ApprovalRefreshed(address token, address spender, uint256 amount); event WaitingForTreasuryTransfer(uint256 amount); uint256 private _pendingLiquidityTokens; uint256 private _pendingAirdropTokens; bool private _initialized; bool private _inSwap; constructor() ERC20("FARMER", "FARM") Ownable(msg.sender) { address _metropolisRouter = 0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3; address _metropolisFactory = 0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0; address _sonicToken = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38; address _treasuryWallet = 0x95503A306cD81e08c0c43C49FAae71165937d175; require(_metropolisRouter != address(0) && _metropolisFactory != address(0) && _sonicToken != address(0) && _treasuryWallet != address(0), "F1"); metropolisRouter = IMetropolisRouter(_metropolisRouter); metropolisFactory = IMetropolisFactory(_metropolisFactory); sonicToken = _sonicToken; treasuryWallet = _treasuryWallet; _mint(address(this), TOTAL_SUPPLY); } function initialize() external onlyOwner { require(!_initialized, "F2"); _initialized = true; // Try to get existing pair first liquidityPair = metropolisFactory.getPair(address(this), sonicToken); // If pair doesn't exist, create it if (liquidityPair == address(0)) { liquidityPair = metropolisFactory.createPair(address(this), sonicToken); } require(liquidityPair != address(0), "F3"); _approve(address(this), address(metropolisRouter), type(uint256).max); require(IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max), "F4"); IERC20(sonicToken).approve(liquidityPair, type(uint256).max); IERC20(address(this)).approve(liquidityPair, type(uint256).max); } function _transfer( address from, address to, uint256 amount ) internal virtual override { // Vergi işleme mantığı if ( !_inSwap && from != owner() && to != owner() && from != address(this) && to == liquidityPair ) { // Vergi hesapla uint256 taxAmount = amount * TAX_RATE / 100; if (taxAmount > 0) { // Vergiyi likidite ve airdrop için ayır uint256 liquidityTokens = taxAmount * LIQUIDITY_TAX / 100; uint256 airdropTokens = taxAmount * AIRDROP_TAX / 100; // Vergi miktarını ana miktardan düş uint256 transferAmount = amount - taxAmount; // Vergiyi kontrata aktar super._transfer(from, address(this), taxAmount); // Kalan miktarı alıcıya aktar super._transfer(from, to, transferAmount); // Bekleyen miktarları güncelle _pendingLiquidityTokens += liquidityTokens; _pendingAirdropTokens += airdropTokens; // Eğer yeterli miktarda token biriktiysek işlemi başlat if (_pendingLiquidityTokens + _pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS) { try this.processLiquidityAndAirdrop() {} catch {} } // Holder durumunu güncelle _updateHolder(from, balanceOf(from) >= MIN_HOLDER_AMOUNT); _updateHolder(to, balanceOf(to) >= MIN_HOLDER_AMOUNT); return; } } // Normal transfer super._transfer(from, to, amount); // Holder durumunu güncelle _updateHolder(from, balanceOf(from) >= MIN_HOLDER_AMOUNT); _updateHolder(to, balanceOf(to) >= MIN_HOLDER_AMOUNT); } function _updateHolder(address account, bool isHolderStatus) private { if (account != liquidityPair && account != address(this)) { if (isHolderStatus && !isHolder[account]) { isHolder[account] = true; holders.push(account); } else if (!isHolderStatus && isHolder[account]) { isHolder[account] = false; // Remove from holders array for (uint256 i = 0; i < holders.length; i++) { if (holders[i] == account) { holders[i] = holders[holders.length - 1]; holders.pop(); break; } } } } } function processLiquidityAndAirdrop() external nonReentrant { require(!_inSwap, "AP"); _inSwap = true; uint256 tokensForLiquidity = _pendingLiquidityTokens; uint256 tokensForAirdrop = _pendingAirdropTokens; if (tokensForLiquidity == 0 && tokensForAirdrop == 0) { _inSwap = false; return; } emit ProcessStarted(tokensForLiquidity, tokensForAirdrop); // Reset pending amounts _pendingLiquidityTokens = 0; _pendingAirdropTokens = 0; // Refresh approvals _approve(address(this), address(metropolisRouter), type(uint256).max); // Process swap uint256 totalTokensToSwap = tokensForLiquidity + tokensForAirdrop; uint256 wethReceived = _processSwap(totalTokensToSwap); if (wethReceived == 0) { _inSwap = false; return; } // Treasury wallet'tan WETH'yi kontrata transfer etmeyi dene uint256 treasuryWethBalance = IERC20(sonicToken).balanceOf(treasuryWallet); if (treasuryWethBalance >= wethReceived) { // Treasury wallet'ın WETH'yi kontrata transfer etmesi için onayı kontrol et if (IERC20(sonicToken).allowance(treasuryWallet, address(this)) >= wethReceived) { // Treasury wallet'tan WETH'yi kontrata transfer et bool success = IERC20(sonicToken).transferFrom(treasuryWallet, address(this), wethReceived); if (!success) { emit SwapFailed("WETH transfer from treasury failed"); _inSwap = false; return; } } else { emit SwapFailed("Treasury wallet has not approved WETH transfer"); _inSwap = false; return; } } else { emit SwapFailed("Treasury wallet does not have enough WETH"); _inSwap = false; return; } // Kontratın WETH bakiyesini kontrol et uint256 contractWETHBalance = IERC20(sonicToken).balanceOf(address(this)); if (contractWETHBalance == 0) { emit SwapFailed("No WETH received from treasury wallet"); _inSwap = false; return; } // Calculate amounts uint256 wethForLiquidity = contractWETHBalance * tokensForLiquidity / totalTokensToSwap; uint256 wethForAirdrop = contractWETHBalance - wethForLiquidity; // WETH'nin bir kısmını ETH'ye çevir ve likidite ekle if (wethForLiquidity > 0) { _processLiquidity(wethForLiquidity, tokensForLiquidity); } // Process airdrop with WETH if (wethForAirdrop > 0) { _processAirdropWithWETH(wethForAirdrop); } _inSwap = false; } // Likidite işlemini ayrı bir fonksiyona taşıdık function _processLiquidity(uint256 wethAmount, uint256 tokenAmount) private { // WETH -> ETH dönüşümü için onay ver IERC20(sonicToken).approve(address(metropolisRouter), wethAmount); // Adres dizisini oluştur address[] memory path = new address[](2); path[0] = sonicToken; path[1] = metropolisRouter.WETH(); try metropolisRouter.swapExactTokensForETH( wethAmount, 0, // Minimum çıktı miktarı path, address(this), block.timestamp + 600 ) { // ETH alındı, şimdi likidite ekle uint256 ethBalance = address(this).balance; if (ethBalance > 0) { _addLiquidity(ethBalance, tokenAmount); } } catch Error(string memory reason) { emit SwapFailed(reason); } catch { emit SwapFailed("WETH to ETH swap failed"); } } // Likidite ekleme işlemini ayrı bir fonksiyona taşıdık function _addLiquidity(uint256 ethAmount, uint256 tokenAmount) private { uint256 minTokenAmount = tokenAmount * (100 - MAX_SLIPPAGE) / 100; uint256 minEthAmount = ethAmount * (100 - MAX_SLIPPAGE) / 100; try metropolisRouter.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, minTokenAmount, minEthAmount, address(this), block.timestamp + 600 ) { emit LiquidityAdded(tokenAmount, ethAmount); } catch Error(string memory reason) { emit LiquidityAddFailed(reason); } catch { emit LiquidityAddFailed("E"); } } function _processSwap(uint256 tokenAmount) private returns (uint256) { if (tokenAmount == 0) return 0; address[] memory path = new address[](2); path[0] = address(this); path[1] = sonicToken; // FARMER -> WETH swap işlemi try metropolisRouter.swapExactTokensForTokens( tokenAmount, 0, // Minimum çıktı miktarı path, treasuryWallet, // WETH'yi treasury wallet'a gönder block.timestamp + 600 ) returns (uint[] memory amounts) { uint256 wethReceived = amounts[amounts.length - 1]; emit SwapSuccessful(tokenAmount, wethReceived); return wethReceived; } catch Error(string memory reason) { emit SwapFailed(reason); return 0; } catch { emit SwapFailed("E"); return 0; } } // WETH ile airdrop işlemi function _processAirdropWithWETH(uint256 amount) private { uint256 holdersCount = holders.length; if (holdersCount == 0 || amount == 0) return; uint256 amountPerHolder = amount / holdersCount; if (amountPerHolder == 0) return; for (uint256 i = 0; i < holdersCount; i++) { address holder = holders[i]; if (holder != address(0) && holder != address(this) && holder != liquidityPair) { bool success = IERC20(sonicToken).transfer(holder, amountPerHolder); if (!success) { // Başarısız olursa sessizce devam et } } } emit AirdropDistributed(amount, holdersCount); } // View functions function getHolderCount() external view returns (uint256) { return holders.length; } function getHolders() external view returns (address[] memory) { return holders; } // Initial liquidity function with WSonic function addInitialLiquidityWithWSonic(uint256 tokenAmount, uint256 sonicAmount) external onlyOwner { require(tokenAmount > 0, "NT"); require(sonicAmount > 0, "NS"); require( IERC20(address(this)).balanceOf(address(this)) >= tokenAmount, "IB" ); require( IERC20(sonicToken).balanceOf(msg.sender) >= sonicAmount, "IS" ); // WSonic token'ları kontrata transfer et require( IERC20(sonicToken).transferFrom(msg.sender, address(this), sonicAmount), "TF" ); // Onayları ver _approve(address(this), address(metropolisRouter), tokenAmount); IERC20(sonicToken).approve(address(metropolisRouter), sonicAmount); try metropolisRouter.addLiquidity( address(this), sonicToken, tokenAmount, sonicAmount, 0, // Minimum token miktarı 0 olarak ayarlandı 0, // Minimum sonic miktarı 0 olarak ayarlandı msg.sender, block.timestamp + 600 // Deadline'ı artırdık ) { emit LiquidityAdded(tokenAmount, sonicAmount); } catch Error(string memory reason) { _approve(address(this), address(metropolisRouter), 0); IERC20(sonicToken).approve(address(metropolisRouter), 0); // WSonic token'ları geri gönder IERC20(sonicToken).transfer(msg.sender, sonicAmount); revert(reason); // Hata mesajını döndür } catch { _approve(address(this), address(metropolisRouter), 0); IERC20(sonicToken).approve(address(metropolisRouter), 0); // WSonic token'ları geri gönder IERC20(sonicToken).transfer(msg.sender, sonicAmount); revert("FL"); } // Kalan WSonic token'ları geri gönder uint256 remainingWSonic = IERC20(sonicToken).balanceOf(address(this)); if (remainingWSonic > 0) { IERC20(sonicToken).transfer(msg.sender, remainingWSonic); } } // Tüm FARMER tokenlarını likiditeye eklemek için fonksiyon function addInitialLiquidityWithAllTokens(uint256 sonicAmount) external onlyOwner { uint256 tokenAmount = IERC20(address(this)).balanceOf(address(this)); require(tokenAmount > 0, "NT"); require(sonicAmount > 0, "NS"); require( IERC20(sonicToken).balanceOf(msg.sender) >= sonicAmount, "IS" ); // WSonic token'ları kontrata transfer et require( IERC20(sonicToken).transferFrom(msg.sender, address(this), sonicAmount), "TF" ); // Onayları ver _approve(address(this), address(metropolisRouter), tokenAmount); IERC20(sonicToken).approve(address(metropolisRouter), sonicAmount); try metropolisRouter.addLiquidity( address(this), sonicToken, tokenAmount, sonicAmount, 0, // Minimum token miktarı 0 olarak ayarlandı 0, // Minimum sonic miktarı 0 olarak ayarlandı msg.sender, block.timestamp + 600 // Deadline'ı artırdık ) { emit LiquidityAdded(tokenAmount, sonicAmount); } catch Error(string memory reason) { _approve(address(this), address(metropolisRouter), 0); IERC20(sonicToken).approve(address(metropolisRouter), 0); // WSonic token'ları geri gönder IERC20(sonicToken).transfer(msg.sender, sonicAmount); revert(reason); // Hata mesajını döndür } catch { _approve(address(this), address(metropolisRouter), 0); IERC20(sonicToken).approve(address(metropolisRouter), 0); // WSonic token'ları geri gönder IERC20(sonicToken).transfer(msg.sender, sonicAmount); revert("FL"); } // Kalan WSonic token'ları geri gönder uint256 remainingWSonic = IERC20(sonicToken).balanceOf(address(this)); if (remainingWSonic > 0) { IERC20(sonicToken).transfer(msg.sender, remainingWSonic); } } // ETH ile başlangıç likidite ekleme fonksiyonu function addInitialLiquidityWithETH(uint256 tokenAmount) external payable onlyOwner { require(tokenAmount > 0, "NT"); require(msg.value > 0, "NE"); require( IERC20(address(this)).balanceOf(address(this)) >= tokenAmount, "IB" ); // Onayları ver _approve(address(this), address(metropolisRouter), tokenAmount); try metropolisRouter.addLiquidityETH{value: msg.value}( address(this), tokenAmount, 0, // Minimum token miktarı 0 olarak ayarlandı 0, // Minimum ETH miktarı 0 olarak ayarlandı msg.sender, block.timestamp + 600 // Deadline'ı artırdık ) { emit LiquidityAdded(tokenAmount, msg.value); } catch Error(string memory reason) { _approve(address(this), address(metropolisRouter), 0); // ETH'yi geri gönder payable(msg.sender).transfer(address(this).balance); revert(reason); // Hata mesajını döndür } catch { _approve(address(this), address(metropolisRouter), 0); // ETH'yi geri gönder payable(msg.sender).transfer(address(this).balance); revert("FL"); } } // Tüm FARMER tokenlarını ETH ile likiditeye eklemek için fonksiyon function addInitialLiquidityWithAllTokensAndETH() external payable onlyOwner { uint256 tokenAmount = IERC20(address(this)).balanceOf(address(this)); require(tokenAmount > 0, "NT"); require(msg.value > 0, "NE"); // Onayları ver _approve(address(this), address(metropolisRouter), tokenAmount); try metropolisRouter.addLiquidityETH{value: msg.value}( address(this), tokenAmount, 0, // Minimum token miktarı 0 olarak ayarlandı 0, // Minimum ETH miktarı 0 olarak ayarlandı msg.sender, block.timestamp + 600 // Deadline'ı artırdık ) { emit LiquidityAdded(tokenAmount, msg.value); } catch Error(string memory reason) { _approve(address(this), address(metropolisRouter), 0); // ETH'yi geri gönder payable(msg.sender).transfer(address(this).balance); revert(reason); // Hata mesajını döndür } catch { _approve(address(this), address(metropolisRouter), 0); // ETH'yi geri gönder payable(msg.sender).transfer(address(this).balance); revert("FL"); } } function setRouter(address _router) external onlyOwner { require(_router != address(0), "IR"); metropolisRouter = IMetropolisRouter(_router); } function rescueTokens(address _token, uint256 _amount) external onlyOwner { require(_token != address(this), "CF"); IERC20(_token).transfer(owner(), _amount); } // View functions for pending amounts function getPendingLiquidityTokens() external view returns (uint256) { return _pendingLiquidityTokens; } function getPendingAirdropTokens() external view returns (uint256) { return _pendingAirdropTokens; } // Manual trigger for processing (only owner) function triggerProcessing() external onlyOwner { require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "NP"); require(holders.length > 0, "NH"); try this.processLiquidityAndAirdrop() { // Process successful } catch { emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens); } } // Router için onayları yenile function refreshAllApprovals() external onlyOwner { // Router için onayları yenile _approve(address(this), address(metropolisRouter), type(uint256).max); // Sonic token için onayları yenile try IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max) { emit ApprovalRefreshed(sonicToken, address(metropolisRouter), type(uint256).max); } catch {} // Likidite çifti için onayları yenile if (liquidityPair != address(0)) { try IERC20(sonicToken).approve(liquidityPair, type(uint256).max) { emit ApprovalRefreshed(sonicToken, liquidityPair, type(uint256).max); } catch {} try IERC20(address(this)).approve(liquidityPair, type(uint256).max) { emit ApprovalRefreshed(address(this), liquidityPair, type(uint256).max); } catch {} } } // Set treasury wallet (only owner) function setTreasuryWallet(address _treasuryWallet) external onlyOwner { require(_treasuryWallet != address(0), "IT"); address oldTreasury = treasuryWallet; treasuryWallet = _treasuryWallet; emit TreasuryWalletUpdated(oldTreasury, _treasuryWallet); } // Treasury wallet'ın kontrata WSonic token transferi için onay vermesini sağla function approveTreasuryToContract() external { require(msg.sender == treasuryWallet, "OT"); require(IERC20(sonicToken).approve(address(this), type(uint256).max), "AF"); } function manualLiquidityAndAirdrop() external onlyOwner { require(!_inSwap, "AP"); _inSwap = true; // Calculate amounts based on tax rates uint256 contractBalance = IERC20(address(this)).balanceOf(address(this)); require(contractBalance > 0, "NB"); uint256 tokensForLiquidity = contractBalance * LIQUIDITY_TAX / (LIQUIDITY_TAX + AIRDROP_TAX); uint256 tokensForAirdrop = contractBalance - tokensForLiquidity; emit ProcessStarted(tokensForLiquidity, tokensForAirdrop); // Refresh approvals _approve(address(this), address(metropolisRouter), type(uint256).max); // Process swap uint256 totalTokensToSwap = tokensForLiquidity + tokensForAirdrop; uint256 wethReceived = _processSwap(totalTokensToSwap); if (wethReceived == 0) { _inSwap = false; return; } // Treasury wallet'tan WETH transferini bekle emit WaitingForTreasuryTransfer(wethReceived); // Kontratın WETH bakiyesini kontrol et uint256 contractWETHBalance = IERC20(sonicToken).balanceOf(address(this)); if (contractWETHBalance == 0) { emit SwapFailed("No WETH received from treasury wallet"); _inSwap = false; return; } // Calculate amounts uint256 wethForLiquidity = contractWETHBalance * tokensForLiquidity / totalTokensToSwap; uint256 wethForAirdrop = contractWETHBalance - wethForLiquidity; // WETH'nin bir kısmını ETH'ye çevir ve likidite ekle if (wethForLiquidity > 0) { _processLiquidity(wethForLiquidity, tokensForLiquidity); } // Process airdrop with WETH if (wethForAirdrop > 0) { _processAirdropWithWETH(wethForAirdrop); } _inSwap = false; } receive() external payable {} // ETH ile airdrop işlemi function _processAirdropWithETH(uint256 amount) private { uint256 holdersCount = holders.length; if (holdersCount == 0 || amount == 0) return; uint256 amountPerHolder = amount / holdersCount; if (amountPerHolder == 0) return; for (uint256 i = 0; i < holdersCount; i++) { address holder = holders[i]; if (holder != address(0) && holder != address(this) && holder != liquidityPair) { (bool success, ) = payable(holder).call{value: amountPerHolder}(""); if (!success) { // Başarısız olursa sessizce devam et } } } emit AirdropDistributed(amount, holdersCount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"holdersCount","type":"uint256"}],"name":"AirdropDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"AirdropFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ApprovalRefreshed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"LiquidityAddFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensForAirdrop","type":"uint256"}],"name":"ProcessStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"SwapFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wethReceived","type":"uint256"}],"name":"SwapSuccessful","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":"oldTreasury","type":"address"},{"indexed":false,"internalType":"address","name":"newTreasury","type":"address"}],"name":"TreasuryWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WaitingForTreasuryTransfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"addInitialLiquidityWithAllTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addInitialLiquidityWithAllTokensAndETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"addInitialLiquidityWithETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"addInitialLiquidityWithWSonic","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":[],"name":"approveTreasuryToContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingAirdropTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPendingLiquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualLiquidityAndAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"metropolisFactory","outputs":[{"internalType":"contract IMetropolisFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metropolisRouter","outputs":[{"internalType":"contract IMetropolisRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processLiquidityAndAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refreshAllApprovals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWallet","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sonicToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"triggerProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040523480156200001157600080fd5b5033604051806040016040528060068152602001652320a926a2a960d11b815250604051806040016040528060048152602001634641524d60e01b815250816003908162000060919062000314565b5060046200006f828262000314565b50506001600555506001600160a01b038116620000b85760405162461bcd60e51b81526020600482015260026024820152614f3160f01b60448201526064015b60405180910390fd5b620000c38162000171565b50600780547395a7e403d7cf20f675ff9273d66e94d35ba49fa36001600160a01b0319918216811790925560088054731570300e9cfec66c9fb0c8bc14366c86eb170ad090831681179091556009805473039e2fb66102314ce7b64ce5ce3e5183bc94ad389084168117909155600b80547395503a306cd81e08c0c43c49faae71165937d1759416841790559091620001673069d3c21bcecceda1000000620001c3565b5050505062000408565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002005760405162461bcd60e51b8152602060048201526002602482015261453360f01b6044820152606401620000af565b8060026000828254620002149190620003e0565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200029b57607f821691505b602082108103620002bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026b57600081815260208120601f850160051c81016020861015620002eb5750805b601f850160051c820191505b818110156200030c57828155600101620002f7565b505050505050565b81516001600160401b0381111562000330576200033062000270565b620003488162000341845462000286565b84620002c2565b602080601f831160018114620003805760008415620003675750858301515b600019600386901b1c1916600185901b1785556200030c565b600085815260208120601f198616915b82811015620003b15788860151825594840194600190910190840162000390565b5085821015620003d05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200040257634e487b7160e01b600052601160045260246000fd5b92915050565b613eb280620004186000396000f3fe6080604052600436106102085760003560e01c80637ac84fc111610118578063ac3508e8116100a0578063dd62ed3e1161006f578063dd62ed3e146105ba578063e3a8fa5514610600578063ed9cacfe14610608578063f2fde38b1461061d578063fd7c9fab1461063d57600080fd5b8063ac3508e814610542578063c0d7865514610555578063c5eaf1e914610575578063d4d7b19a1461058a57600080fd5b80638da5cb5b116100e75780638da5cb5b146104af57806395d89b41146104cd578063975b87e8146104e2578063a8602fea14610502578063a9059cbb1461052257600080fd5b80637ac84fc1146104505780637ff793d314610465578063808a54571461047a5780638129fc1c1461049a57600080fd5b8063397883d21161019b5780635d76b04c1161016a5780635d76b04c146103ae5780635fe8e7cc146103c357806362b6327a146103e557806370a08231146104055780637136982b1461043b57600080fd5b8063397883d214610339578063461a3a951461034e5780634626402b1461036e578063573761981461038e57600080fd5b80631fed05c3116101d75780631fed05c3146102a357806323b872dd146102c55780632a11ced0146102e5578063313ce5671461031d57600080fd5b806306fdde031461021457806308dee2b41461023f578063095ea7b31461025e57806318160ddd1461028e57600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5061022961065d565b604051610236919061381b565b60405180910390f35b34801561024b57600080fd5b50600e545b604051908152602001610236565b34801561026a57600080fd5b5061027e61027936600461387e565b6106ef565b6040519015158152602001610236565b34801561029a57600080fd5b50600254610250565b3480156102af57600080fd5b506102c36102be3660046138aa565b610709565b005b3480156102d157600080fd5b5061027e6102e03660046138c3565b610ddb565b3480156102f157600080fd5b506103056103003660046138aa565b610dff565b6040516001600160a01b039091168152602001610236565b34801561032957600080fd5b5060405160128152602001610236565b34801561034557600080fd5b506102c3610e29565b34801561035a57600080fd5b50600954610305906001600160a01b031681565b34801561037a57600080fd5b50600b54610305906001600160a01b031681565b34801561039a57600080fd5b506102c36103a936600461387e565b610f42565b3480156103ba57600080fd5b50600f54610250565b3480156103cf57600080fd5b506103d8611009565b6040516102369190613948565b3480156103f157600080fd5b50600754610305906001600160a01b031681565b34801561041157600080fd5b50610250610420366004613962565b6001600160a01b031660009081526020819052604090205490565b34801561044757600080fd5b50600d54610250565b34801561045c57600080fd5b506102c361106a565b34801561047157600080fd5b506102c3611584565b34801561048657600080fd5b50600a54610305906001600160a01b031681565b3480156104a657600080fd5b506102c361166b565b3480156104bb57600080fd5b506006546001600160a01b0316610305565b3480156104d957600080fd5b506102296119e1565b3480156104ee57600080fd5b506102c36104fd36600461397f565b6119f0565b34801561050e57600080fd5b506102c361051d366004613962565b611f25565b34801561052e57600080fd5b5061027e61053d36600461387e565b611fc9565b6102c36105503660046138aa565b611fd7565b34801561056157600080fd5b506102c3610570366004613962565b612243565b34801561058157600080fd5b506102c36122a8565b34801561059657600080fd5b5061027e6105a5366004613962565b600c6020526000908152604090205460ff1681565b3480156105c657600080fd5b506102506105d53660046139a1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102c3612593565b34801561061457600080fd5b506102c3612654565b34801561062957600080fd5b506102c3610638366004613962565b6128cd565b34801561064957600080fd5b50600854610305906001600160a01b031681565b60606003805461066c906139da565b80601f0160208091040260200160405190810160405280929190818152602001828054610698906139da565b80156106e55780601f106106ba576101008083540402835291602001916106e5565b820191906000526020600020905b8154815290600101906020018083116106c857829003601f168201915b5050505050905090565b6000336106fd818585612919565b60019150505b92915050565b6107116129cb565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa15801561074f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107739190613a0e565b90506000811161079e5760405162461bcd60e51b815260040161079590613a27565b60405180910390fd5b600082116107d35760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610795565b6009546040516370a0823160e01b815233600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa15801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083f9190613a0e565b10156108725760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610795565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906108a690339030908790600401613a43565b6020604051808303816000875af11580156108c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e99190613a67565b61091a5760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610795565b6007546109329030906001600160a01b031683612919565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610968929116908690600401613a89565b6020604051808303816000875af1158015610987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ab9190613a67565b506007546009546001600160a01b039182169163e8e33700913091168486600080336109d942610258613ab8565b6040518963ffffffff1660e01b81526004016109fc989796959493929190613acb565b6060604051808303816000875af1925050508015610a37575060408051601f3d908101601f19168201909252610a3491810190613b14565b60015b610cbf57610a43613b42565b806308c379a003610b865750610a57613ba1565b80610a625750610b88565b600754610a7b9030906001600160a01b03166000612919565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610ab292911690600090600401613a89565b6020604051808303816000875af1158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af59190613a67565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610b289033908790600401613a89565b6020604051808303816000875af1158015610b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6b9190613a67565b508060405162461bcd60e51b8152600401610795919061381b565b505b600754610ba19030906001600160a01b03166000612919565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610bd892911690600090600401613a89565b6020604051808303816000875af1158015610bf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1b9190613a67565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610c4e9033908690600401613a89565b6020604051808303816000875af1158015610c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c919190613a67565b5060405162461bcd60e51b8152602060048201526002602482015261119360f21b6044820152606401610795565b50506040805183815260208101859052600080516020613e5d8339815191529250015b60405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d579190613a0e565b90508015610dd65760095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610d919033908590600401613a89565b6020604051808303816000875af1158015610db0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd49190613a67565b505b505050565b600033610de9858285612a19565b610df4858585612a81565b506001949350505050565b600d8181548110610e0f57600080fd5b6000918252602090912001546001600160a01b0316905081565b610e316129cb565b6000600e541180610e4457506000600f54115b610e755760405162461bcd60e51b815260206004820152600260248201526104e560f41b6044820152606401610795565b600d54610ea95760405162461bcd60e51b815260206004820152600260248201526109c960f31b6044820152606401610795565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ee457600080fd5b505af1925050508015610ef5575060015b610f40577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f54604051610f37929190918252602082015260400190565b60405180910390a15b565b610f4a6129cb565b306001600160a01b03831603610f875760405162461bcd60e51b815260206004820152600260248201526121a360f11b6044820152606401610795565b816001600160a01b031663a9059cbb610fa86006546001600160a01b031690565b836040518363ffffffff1660e01b8152600401610fc6929190613a89565b6020604051808303816000875af1158015610fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd69190613a67565b6060600d8054806020026020016040519081016040528092919081815260200182805480156106e557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611043575050505050905090565b6002600554036110a15760405162461bcd60e51b8152602060048201526002602482015261523160f01b6044820152606401610795565b6002600555601054610100900460ff16156110e35760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610795565b6010805461ff001916610100179055600e54600f5481158015611104575080155b1561111b5750506010805461ff001916905561157d565b60408051838152602081018390527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a16000600e819055600f556007546111789030906001600160a01b0316600019612919565b60006111848284613ab8565b9050600061119182612cd9565b9050806000036111b05750506010805461ff00191690555061157d9050565b600954600b546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611201573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112259190613a0e565b905081811061143257600954600b54604051636eb1769f60e11b81526001600160a01b0391821660048201523060248201528492919091169063dd62ed3e90604401602060405180830381865afa158015611284573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a89190613a0e565b106113b057600954600b546040516323b872dd60e01b81526000926001600160a01b03908116926323b872dd926112e9929091169030908890600401613a43565b6020604051808303816000875af1158015611308573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132c9190613a67565b9050806113aa57600080516020613e3d83398151915260405161138b9060208082526022908201527f57455448207472616e736665722066726f6d207472656173757279206661696c604082015261195960f21b606082015260800190565b60405180910390a150506010805461ff00191690555061157d92505050565b50611491565b600080516020613e3d833981519152604051611414906020808252602e908201527f54726561737572792077616c6c657420686173206e6f7420617070726f76656460408201526d102ba2aa24103a3930b739b332b960911b606082015260800190565b60405180910390a150506010805461ff00191690555061157d915050565b600080516020613e3d8339815191526040516114149060208082526029908201527f54726561737572792077616c6c657420646f6573206e6f74206861766520656e6040820152680deeaced040ae8aa8960bb1b606082015260800190565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156114da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fe9190613a0e565b90508060000361152357600080516020613e3d83398151915260405161138b90613c2b565b6000846115308884613c70565b61153a9190613c87565b905060006115488284613ca9565b9050811561155a5761155a8289612f04565b801561156957611569816131a3565b50506010805461ff00191690555050505050505b6001600555565b600b546001600160a01b031633146115c35760405162461bcd60e51b815260206004820152600260248201526113d560f21b6044820152606401610795565b60095460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906115f790309060001990600401613a89565b6020604051808303816000875af1158015611616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163a9190613a67565b610f405760405162461bcd60e51b815260206004820152600260248201526120a360f11b6044820152606401610795565b6116736129cb565b60105460ff16156116ab5760405162461bcd60e51b8152602060048201526002602482015261231960f11b6044820152606401610795565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa15801561170a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172e9190613cbc565b600a80546001600160a01b0319166001600160a01b039290921691821790556117ea576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af11580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c99190613cbc565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b03166118275760405162461bcd60e51b8152602060048201526002602482015261463360f01b6044820152606401610795565b6007546118419030906001600160a01b0316600019612919565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926118799291169060001990600401613a89565b6020604051808303816000875af1158015611898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bc9190613a67565b6118ed5760405162461bcd60e51b8152602060048201526002602482015261118d60f21b6044820152606401610795565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926119259291169060001990600401613a89565b6020604051808303816000875af1158015611944573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119689190613a67565b50600a5460405163095ea7b360e01b8152309163095ea7b39161199b916001600160a01b03169060001990600401613a89565b6020604051808303816000875af11580156119ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119de9190613a67565b50565b60606004805461066c906139da565b6119f86129cb565b60008211611a185760405162461bcd60e51b815260040161079590613a27565b60008111611a4d5760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610795565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa158015611a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aae9190613a0e565b1015611ae15760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610795565b6009546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015611b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4d9190613a0e565b1015611b805760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610795565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90611bb490339030908690600401613a43565b6020604051808303816000875af1158015611bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf79190613a67565b611c285760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610795565b600754611c409030906001600160a01b031684612919565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611c76929116908590600401613a89565b6020604051808303816000875af1158015611c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb99190613a67565b506007546009546001600160a01b039182169163e8e3370091309116858560008033611ce742610258613ab8565b6040518963ffffffff1660e01b8152600401611d0a989796959493929190613acb565b6060604051808303816000875af1925050508015611d45575060408051601f3d908101601f19168201909252611d4291810190613b14565b60015b611efe57611d51613b42565b806308c379a003611e365750611d65613ba1565b80611d705750611e38565b600754611d899030906001600160a01b03166000612919565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611dc092911690600090600401613a89565b6020604051808303816000875af1158015611ddf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e039190613a67565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610b289033908690600401613a89565b505b600754611e519030906001600160a01b03166000612919565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611e8892911690600090600401613a89565b6020604051808303816000875af1158015611ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecb9190613a67565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610c4e9033908590600401613a89565b50506040805184815260208101849052600080516020613e5d833981519152925001610ce2565b611f2d6129cb565b6001600160a01b038116611f685760405162461bcd60e51b8152602060048201526002602482015261125560f21b6044820152606401610795565b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb4910160405180910390a15050565b6000336106fd818585612a81565b611fdf6129cb565b60008111611fff5760405162461bcd60e51b815260040161079590613a27565b600034116120345760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610795565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa158015612071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120959190613a0e565b10156120c85760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610795565b6007546120e09030906001600160a01b031683612919565b6007546001600160a01b031663f305d7193430846000803361210442610258613ab8565b6040518863ffffffff1660e01b815260040161212596959493929190613cd9565b60606040518083038185885af193505050508015612160575060408051601f3d908101601f1916820190925261215d91810190613b14565b60015b6122175761216c613b42565b806308c379a0036121d05750612180613ba1565b8061218b57506121d2565b6007546121a49030906001600160a01b03166000612919565b60405133904780156108fc02916000818181858888f19350505050158015610b6b573d6000803e3d6000fd5b505b6007546121eb9030906001600160a01b03166000612919565b60405133904780156108fc02916000818181858888f19350505050158015610c91573d6000803e3d6000fd5b505060408051838152346020820152600080516020613e5d83398151915292500160405180910390a150565b61224b6129cb565b6001600160a01b0381166122865760405162461bcd60e51b815260206004820152600260248201526124a960f11b6044820152606401610795565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6122b06129cb565b601054610100900460ff16156122ed5760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610795565b6010805461ff0019166101001790556040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa15801561233a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235e9190613a0e565b9050600081116123955760405162461bcd60e51b8152602060048201526002602482015261272160f11b6044820152606401610795565b60006123a2601980613ab8565b6123ad601984613c70565b6123b79190613c87565b905060006123c58284613ca9565b60408051848152602081018390529192507f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a160075461241b9030906001600160a01b0316600019612919565b60006124278284613ab8565b9050600061243482612cd9565b9050806000036124545750506010805461ff001916905550610f40915050565b6040518181527f0feedab68cd870984eb1996ea868562d5f26bf492165c4ff94e43910877acdad9060200160405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156124d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f49190613a0e565b90508060000361253857600080516020613e3d83398151915260405161251990613c2b565b60405180910390a150506010805461ff001916905550610f4092505050565b6000836125458784613c70565b61254f9190613c87565b9050600061255d8284613ca9565b9050811561256f5761256f8288612f04565b801561257e5761257e816131a3565b50506010805461ff0019169055505050505050565b61259b6129cb565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa1580156125d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fd9190613a0e565b90506000811161261f5760405162461bcd60e51b815260040161079590613a27565b600034116120c85760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610795565b61265c6129cb565b6007546126769030906001600160a01b0316600019612919565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926126ae9291169060001990600401613a89565b6020604051808303816000875af19250505080156126e9575060408051601f3d908101601f191682019092526126e691810190613a67565b60015b1561273f57506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92612736926001600160a01b039182169291169060001990613a43565b60405180910390a15b600a546001600160a01b031615610f4057600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926127889291169060001990600401613a89565b6020604051808303816000875af19250505080156127c3575060408051601f3d908101601f191682019092526127c091810190613a67565b60015b156128195750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92612810926001600160a01b039182169291169060001990613a43565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b39161284b916001600160a01b03169060001990600401613a89565b6020604051808303816000875af1925050508015612886575060408051601f3d908101601f1916820190925261288391810190613a67565b60015b15610f405750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca91610f379130916001600160a01b03169060001990613a43565b6128d56129cb565b6001600160a01b0381166129105760405162461bcd60e51b81526020600482015260026024820152614f3160f01b6044820152606401610795565b6119de81613306565b6001600160a01b0383161580159061293957506001600160a01b03821615155b61296a5760405162461bcd60e51b8152602060048201526002602482015261114d60f21b6044820152606401610795565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b336129de6006546001600160a01b031690565b6001600160a01b031614610f405760405162461bcd60e51b8152602060048201526002602482015261279960f11b6044820152606401610795565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205481811015612a745760405162461bcd60e51b8152602060048201526002602482015261453560f01b6044820152606401610795565b610dd48484848403612919565b601054610100900460ff16158015612aa757506006546001600160a01b03848116911614155b8015612ac157506006546001600160a01b03838116911614155b8015612ad657506001600160a01b0383163014155b8015612aef5750600a546001600160a01b038381169116145b15612c765760006064612b03600584613c70565b612b0d9190613c87565b90508015612c745760006064612b24601984613c70565b612b2e9190613c87565b905060006064612b3f601985613c70565b612b499190613c87565b90506000612b578486613ca9565b9050612b64873086613358565b612b6f878783613358565b82600e6000828254612b819190613ab8565b9250508190555081600f6000828254612b9a9190613ab8565b9091555050600f54600e5468056bc75e2d6310000091612bb991613ab8565b10612c0c57306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612bf957600080fd5b505af1925050508015612c0a575060015b505b612c3f87678ac7230489e80000612c388a6001600160a01b031660009081526020819052604090205490565b101561345d565b612c6b86678ac7230489e80000612c38896001600160a01b031660009081526020819052604090205490565b50505050505050565b505b612c81838383613358565b612cad83678ac7230489e80000612c38866001600160a01b031660009081526020819052604090205490565b610dd682678ac7230489e80000612c38856001600160a01b031660009081526020819052604090205490565b600081600003612ceb57506000919050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d2057612d20613d14565b6001600160a01b039283166020918202929092010152600954825191169082906001908110612d5157612d51613d14565b6001600160a01b039283166020918202929092010152600754600b54908216916338ed1739918691600091869116612d8b42610258613ab8565b6040518663ffffffff1660e01b8152600401612dab959493929190613d2a565b6000604051808303816000875af1925050508015612deb57506040513d6000823e601f3d908101601f19168201604052612de89190810190613d66565b60015b612e8957612df7613b42565b806308c379a003612e455750612e0b613ba1565b80612e165750612e47565b600080516020613e3d83398151915281604051612e33919061381b565b60405180910390a15060009392505050565b505b600080516020613e3d833981519152604051612e78906020808252600190820152604560f81b604082015260600190565b60405180910390a150600092915050565b60008160018351612e9a9190613ca9565b81518110612eaa57612eaa613d14565b602002602001015190507fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc018582604051612eee929190918252602082015260400190565b60405180910390a1949350505050565b50919050565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612f3a929116908690600401613a89565b6020604051808303816000875af1158015612f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7d9190613a67565b50604080516002808252606082018352600092602083019080368337505060095482519293506001600160a01b031691839150600090612fbf57612fbf613d14565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613018573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303c9190613cbc565b8160018151811061304f5761304f613d14565b6001600160a01b039283166020918202929092010152600754166318cbafe5846000843061307f42610258613ab8565b6040518663ffffffff1660e01b815260040161309f959493929190613d2a565b6000604051808303816000875af19250505080156130df57506040513d6000823e601f3d908101601f191682016040526130dc9190810190613d66565b60015b613191576130eb613b42565b806308c379a00361313557506130ff613ba1565b8061310a5750613137565b600080516020613e3d83398151915281604051613127919061381b565b60405180910390a150505050565b505b600080516020613e3d8339815191526040516131849060208082526017908201527f5745544820746f204554482073776170206661696c6564000000000000000000604082015260600190565b60405180910390a1505050565b50478015610dd457610dd48184613670565b600d548015806131b1575081155b156131ba575050565b60006131c68284613c87565b9050806000036131d557505050565b60005b828110156132cf576000600d82815481106131f5576131f5613d14565b6000918252602090912001546001600160a01b03169050801580159061322457506001600160a01b0381163014155b801561323e5750600a546001600160a01b03828116911614155b156132bc5760095460405163a9059cbb60e01b81526000916001600160a01b03169063a9059cbb906132769085908890600401613a89565b6020604051808303816000875af1158015613295573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b99190613a67565b50505b50806132c781613e0d565b9150506131d8565b5060408051848152602081018490527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c2179101613184565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383161580159061337857506001600160a01b03821615155b6133a95760405162461bcd60e51b8152602060048201526002602482015261453160f01b6044820152606401610795565b6001600160a01b038316600090815260208190526040902054818110156133f75760405162461bcd60e51b8152602060048201526002602482015261229960f11b6044820152606401610795565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610dd4565b600a546001600160a01b0383811691161480159061348457506001600160a01b0382163014155b1561366c578080156134af57506001600160a01b0382166000908152600c602052604090205460ff16155b1561351b57506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b8015801561354157506001600160a01b0382166000908152600c602052604090205460ff165b1561366c576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d54811015610dd657826001600160a01b0316600d828154811061358e5761358e613d14565b6000918252602090912001546001600160a01b03160361365a57600d80546135b890600190613ca9565b815481106135c8576135c8613d14565b600091825260209091200154600d80546001600160a01b0390921691839081106135f4576135f4613d14565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d80548061363357613633613e26565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061366481613e0d565b915050613567565b5050565b6000606461367f601e82613ca9565b6136899084613c70565b6136939190613c87565b9050600060646136a4601e82613ca9565b6136ae9086613c70565b6136b89190613c87565b6007549091506001600160a01b031663f305d7198530868686836136de42610258613ab8565b6040518863ffffffff1660e01b81526004016136ff96959493929190613cd9565b60606040518083038185885af19350505050801561373a575060408051601f3d908101601f1916820190925261373791810190613b14565b60015b6137f457613746613b42565b806308c379a0036137a2575061375a613ba1565b8061376557506137a4565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad81604051613794919061381b565b60405180910390a150610dd4565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad6040516137e7906020808252600190820152604560f81b604082015260600190565b60405180910390a1610dd4565b50506040805185815260208101879052600080516020613e5d833981519152925001613127565b600060208083528351808285015260005b818110156138485785810183015185820160400152820161382c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146119de57600080fd5b6000806040838503121561389157600080fd5b823561389c81613869565b946020939093013593505050565b6000602082840312156138bc57600080fd5b5035919050565b6000806000606084860312156138d857600080fd5b83356138e381613869565b925060208401356138f381613869565b929592945050506040919091013590565b600081518084526020808501945080840160005b8381101561393d5781516001600160a01b031687529582019590820190600101613918565b509495945050505050565b60208152600061395b6020830184613904565b9392505050565b60006020828403121561397457600080fd5b813561395b81613869565b6000806040838503121561399257600080fd5b50508035926020909101359150565b600080604083850312156139b457600080fd5b82356139bf81613869565b915060208301356139cf81613869565b809150509250929050565b600181811c908216806139ee57607f821691505b602082108103612efe57634e487b7160e01b600052602260045260246000fd5b600060208284031215613a2057600080fd5b5051919050565b602080825260029082015261139560f21b604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215613a7957600080fd5b8151801515811461395b57600080fd5b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561070357610703613aa2565b6001600160a01b039889168152968816602088015260408701959095526060860193909352608085019190915260a084015290921660c082015260e08101919091526101000190565b600080600060608486031215613b2957600080fd5b8351925060208401519150604084015190509250925092565b600060033d1115613b5b5760046000803e5060005160e01c5b90565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715613b9a57613b9a613b5e565b6040525050565b600060443d1015613baf5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715613bdf57505050505090565b8285019150815181811115613bf75750505050505090565b843d8701016020828501011115613c115750505050505090565b613c2060208286010187613b74565b509095945050505050565b60208082526025908201527f4e6f20574554482072656365697665642066726f6d2074726561737572792077604082015264185b1b195d60da1b606082015260800190565b808202811582820484141761070357610703613aa2565b600082613ca457634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561070357610703613aa2565b600060208284031215613cce57600080fd5b815161395b81613869565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a060408201526000613d4960a0830186613904565b6001600160a01b0394909416606083015250608001529392505050565b60006020808385031215613d7957600080fd5b825167ffffffffffffffff80821115613d9157600080fd5b818501915085601f830112613da557600080fd5b815181811115613db757613db7613b5e565b8060051b9150604051613dcc85840182613b74565b81815291830184019184810188841115613de557600080fd5b938501935b83851015613e015784518152938501938501613dea565b50979650505050505050565b600060018201613e1f57613e1f613aa2565b5060010190565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072338f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515ba26469706673582212209ebb49f109b10fe59a5ca3dffd3d9f73aa15ba066a3dd8d264fa5df0afa82efa64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102085760003560e01c80637ac84fc111610118578063ac3508e8116100a0578063dd62ed3e1161006f578063dd62ed3e146105ba578063e3a8fa5514610600578063ed9cacfe14610608578063f2fde38b1461061d578063fd7c9fab1461063d57600080fd5b8063ac3508e814610542578063c0d7865514610555578063c5eaf1e914610575578063d4d7b19a1461058a57600080fd5b80638da5cb5b116100e75780638da5cb5b146104af57806395d89b41146104cd578063975b87e8146104e2578063a8602fea14610502578063a9059cbb1461052257600080fd5b80637ac84fc1146104505780637ff793d314610465578063808a54571461047a5780638129fc1c1461049a57600080fd5b8063397883d21161019b5780635d76b04c1161016a5780635d76b04c146103ae5780635fe8e7cc146103c357806362b6327a146103e557806370a08231146104055780637136982b1461043b57600080fd5b8063397883d214610339578063461a3a951461034e5780634626402b1461036e578063573761981461038e57600080fd5b80631fed05c3116101d75780631fed05c3146102a357806323b872dd146102c55780632a11ced0146102e5578063313ce5671461031d57600080fd5b806306fdde031461021457806308dee2b41461023f578063095ea7b31461025e57806318160ddd1461028e57600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5061022961065d565b604051610236919061381b565b60405180910390f35b34801561024b57600080fd5b50600e545b604051908152602001610236565b34801561026a57600080fd5b5061027e61027936600461387e565b6106ef565b6040519015158152602001610236565b34801561029a57600080fd5b50600254610250565b3480156102af57600080fd5b506102c36102be3660046138aa565b610709565b005b3480156102d157600080fd5b5061027e6102e03660046138c3565b610ddb565b3480156102f157600080fd5b506103056103003660046138aa565b610dff565b6040516001600160a01b039091168152602001610236565b34801561032957600080fd5b5060405160128152602001610236565b34801561034557600080fd5b506102c3610e29565b34801561035a57600080fd5b50600954610305906001600160a01b031681565b34801561037a57600080fd5b50600b54610305906001600160a01b031681565b34801561039a57600080fd5b506102c36103a936600461387e565b610f42565b3480156103ba57600080fd5b50600f54610250565b3480156103cf57600080fd5b506103d8611009565b6040516102369190613948565b3480156103f157600080fd5b50600754610305906001600160a01b031681565b34801561041157600080fd5b50610250610420366004613962565b6001600160a01b031660009081526020819052604090205490565b34801561044757600080fd5b50600d54610250565b34801561045c57600080fd5b506102c361106a565b34801561047157600080fd5b506102c3611584565b34801561048657600080fd5b50600a54610305906001600160a01b031681565b3480156104a657600080fd5b506102c361166b565b3480156104bb57600080fd5b506006546001600160a01b0316610305565b3480156104d957600080fd5b506102296119e1565b3480156104ee57600080fd5b506102c36104fd36600461397f565b6119f0565b34801561050e57600080fd5b506102c361051d366004613962565b611f25565b34801561052e57600080fd5b5061027e61053d36600461387e565b611fc9565b6102c36105503660046138aa565b611fd7565b34801561056157600080fd5b506102c3610570366004613962565b612243565b34801561058157600080fd5b506102c36122a8565b34801561059657600080fd5b5061027e6105a5366004613962565b600c6020526000908152604090205460ff1681565b3480156105c657600080fd5b506102506105d53660046139a1565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102c3612593565b34801561061457600080fd5b506102c3612654565b34801561062957600080fd5b506102c3610638366004613962565b6128cd565b34801561064957600080fd5b50600854610305906001600160a01b031681565b60606003805461066c906139da565b80601f0160208091040260200160405190810160405280929190818152602001828054610698906139da565b80156106e55780601f106106ba576101008083540402835291602001916106e5565b820191906000526020600020905b8154815290600101906020018083116106c857829003601f168201915b5050505050905090565b6000336106fd818585612919565b60019150505b92915050565b6107116129cb565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa15801561074f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107739190613a0e565b90506000811161079e5760405162461bcd60e51b815260040161079590613a27565b60405180910390fd5b600082116107d35760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610795565b6009546040516370a0823160e01b815233600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa15801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083f9190613a0e565b10156108725760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610795565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906108a690339030908790600401613a43565b6020604051808303816000875af11580156108c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e99190613a67565b61091a5760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610795565b6007546109329030906001600160a01b031683612919565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610968929116908690600401613a89565b6020604051808303816000875af1158015610987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ab9190613a67565b506007546009546001600160a01b039182169163e8e33700913091168486600080336109d942610258613ab8565b6040518963ffffffff1660e01b81526004016109fc989796959493929190613acb565b6060604051808303816000875af1925050508015610a37575060408051601f3d908101601f19168201909252610a3491810190613b14565b60015b610cbf57610a43613b42565b806308c379a003610b865750610a57613ba1565b80610a625750610b88565b600754610a7b9030906001600160a01b03166000612919565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610ab292911690600090600401613a89565b6020604051808303816000875af1158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af59190613a67565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610b289033908790600401613a89565b6020604051808303816000875af1158015610b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6b9190613a67565b508060405162461bcd60e51b8152600401610795919061381b565b505b600754610ba19030906001600160a01b03166000612919565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610bd892911690600090600401613a89565b6020604051808303816000875af1158015610bf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1b9190613a67565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610c4e9033908690600401613a89565b6020604051808303816000875af1158015610c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c919190613a67565b5060405162461bcd60e51b8152602060048201526002602482015261119360f21b6044820152606401610795565b50506040805183815260208101859052600080516020613e5d8339815191529250015b60405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d579190613a0e565b90508015610dd65760095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610d919033908590600401613a89565b6020604051808303816000875af1158015610db0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd49190613a67565b505b505050565b600033610de9858285612a19565b610df4858585612a81565b506001949350505050565b600d8181548110610e0f57600080fd5b6000918252602090912001546001600160a01b0316905081565b610e316129cb565b6000600e541180610e4457506000600f54115b610e755760405162461bcd60e51b815260206004820152600260248201526104e560f41b6044820152606401610795565b600d54610ea95760405162461bcd60e51b815260206004820152600260248201526109c960f31b6044820152606401610795565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ee457600080fd5b505af1925050508015610ef5575060015b610f40577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f54604051610f37929190918252602082015260400190565b60405180910390a15b565b610f4a6129cb565b306001600160a01b03831603610f875760405162461bcd60e51b815260206004820152600260248201526121a360f11b6044820152606401610795565b816001600160a01b031663a9059cbb610fa86006546001600160a01b031690565b836040518363ffffffff1660e01b8152600401610fc6929190613a89565b6020604051808303816000875af1158015610fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd69190613a67565b6060600d8054806020026020016040519081016040528092919081815260200182805480156106e557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611043575050505050905090565b6002600554036110a15760405162461bcd60e51b8152602060048201526002602482015261523160f01b6044820152606401610795565b6002600555601054610100900460ff16156110e35760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610795565b6010805461ff001916610100179055600e54600f5481158015611104575080155b1561111b5750506010805461ff001916905561157d565b60408051838152602081018390527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a16000600e819055600f556007546111789030906001600160a01b0316600019612919565b60006111848284613ab8565b9050600061119182612cd9565b9050806000036111b05750506010805461ff00191690555061157d9050565b600954600b546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611201573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112259190613a0e565b905081811061143257600954600b54604051636eb1769f60e11b81526001600160a01b0391821660048201523060248201528492919091169063dd62ed3e90604401602060405180830381865afa158015611284573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a89190613a0e565b106113b057600954600b546040516323b872dd60e01b81526000926001600160a01b03908116926323b872dd926112e9929091169030908890600401613a43565b6020604051808303816000875af1158015611308573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132c9190613a67565b9050806113aa57600080516020613e3d83398151915260405161138b9060208082526022908201527f57455448207472616e736665722066726f6d207472656173757279206661696c604082015261195960f21b606082015260800190565b60405180910390a150506010805461ff00191690555061157d92505050565b50611491565b600080516020613e3d833981519152604051611414906020808252602e908201527f54726561737572792077616c6c657420686173206e6f7420617070726f76656460408201526d102ba2aa24103a3930b739b332b960911b606082015260800190565b60405180910390a150506010805461ff00191690555061157d915050565b600080516020613e3d8339815191526040516114149060208082526029908201527f54726561737572792077616c6c657420646f6573206e6f74206861766520656e6040820152680deeaced040ae8aa8960bb1b606082015260800190565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156114da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fe9190613a0e565b90508060000361152357600080516020613e3d83398151915260405161138b90613c2b565b6000846115308884613c70565b61153a9190613c87565b905060006115488284613ca9565b9050811561155a5761155a8289612f04565b801561156957611569816131a3565b50506010805461ff00191690555050505050505b6001600555565b600b546001600160a01b031633146115c35760405162461bcd60e51b815260206004820152600260248201526113d560f21b6044820152606401610795565b60095460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906115f790309060001990600401613a89565b6020604051808303816000875af1158015611616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061163a9190613a67565b610f405760405162461bcd60e51b815260206004820152600260248201526120a360f11b6044820152606401610795565b6116736129cb565b60105460ff16156116ab5760405162461bcd60e51b8152602060048201526002602482015261231960f11b6044820152606401610795565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa15801561170a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172e9190613cbc565b600a80546001600160a01b0319166001600160a01b039290921691821790556117ea576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af11580156117a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c99190613cbc565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b03166118275760405162461bcd60e51b8152602060048201526002602482015261463360f01b6044820152606401610795565b6007546118419030906001600160a01b0316600019612919565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926118799291169060001990600401613a89565b6020604051808303816000875af1158015611898573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118bc9190613a67565b6118ed5760405162461bcd60e51b8152602060048201526002602482015261118d60f21b6044820152606401610795565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926119259291169060001990600401613a89565b6020604051808303816000875af1158015611944573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119689190613a67565b50600a5460405163095ea7b360e01b8152309163095ea7b39161199b916001600160a01b03169060001990600401613a89565b6020604051808303816000875af11580156119ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119de9190613a67565b50565b60606004805461066c906139da565b6119f86129cb565b60008211611a185760405162461bcd60e51b815260040161079590613a27565b60008111611a4d5760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610795565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa158015611a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aae9190613a0e565b1015611ae15760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610795565b6009546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015611b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4d9190613a0e565b1015611b805760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610795565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90611bb490339030908690600401613a43565b6020604051808303816000875af1158015611bd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf79190613a67565b611c285760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610795565b600754611c409030906001600160a01b031684612919565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611c76929116908590600401613a89565b6020604051808303816000875af1158015611c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb99190613a67565b506007546009546001600160a01b039182169163e8e3370091309116858560008033611ce742610258613ab8565b6040518963ffffffff1660e01b8152600401611d0a989796959493929190613acb565b6060604051808303816000875af1925050508015611d45575060408051601f3d908101601f19168201909252611d4291810190613b14565b60015b611efe57611d51613b42565b806308c379a003611e365750611d65613ba1565b80611d705750611e38565b600754611d899030906001600160a01b03166000612919565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611dc092911690600090600401613a89565b6020604051808303816000875af1158015611ddf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e039190613a67565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610b289033908690600401613a89565b505b600754611e519030906001600160a01b03166000612919565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611e8892911690600090600401613a89565b6020604051808303816000875af1158015611ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecb9190613a67565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610c4e9033908590600401613a89565b50506040805184815260208101849052600080516020613e5d833981519152925001610ce2565b611f2d6129cb565b6001600160a01b038116611f685760405162461bcd60e51b8152602060048201526002602482015261125560f21b6044820152606401610795565b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb4910160405180910390a15050565b6000336106fd818585612a81565b611fdf6129cb565b60008111611fff5760405162461bcd60e51b815260040161079590613a27565b600034116120345760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610795565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa158015612071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120959190613a0e565b10156120c85760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610795565b6007546120e09030906001600160a01b031683612919565b6007546001600160a01b031663f305d7193430846000803361210442610258613ab8565b6040518863ffffffff1660e01b815260040161212596959493929190613cd9565b60606040518083038185885af193505050508015612160575060408051601f3d908101601f1916820190925261215d91810190613b14565b60015b6122175761216c613b42565b806308c379a0036121d05750612180613ba1565b8061218b57506121d2565b6007546121a49030906001600160a01b03166000612919565b60405133904780156108fc02916000818181858888f19350505050158015610b6b573d6000803e3d6000fd5b505b6007546121eb9030906001600160a01b03166000612919565b60405133904780156108fc02916000818181858888f19350505050158015610c91573d6000803e3d6000fd5b505060408051838152346020820152600080516020613e5d83398151915292500160405180910390a150565b61224b6129cb565b6001600160a01b0381166122865760405162461bcd60e51b815260206004820152600260248201526124a960f11b6044820152606401610795565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6122b06129cb565b601054610100900460ff16156122ed5760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610795565b6010805461ff0019166101001790556040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa15801561233a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235e9190613a0e565b9050600081116123955760405162461bcd60e51b8152602060048201526002602482015261272160f11b6044820152606401610795565b60006123a2601980613ab8565b6123ad601984613c70565b6123b79190613c87565b905060006123c58284613ca9565b60408051848152602081018390529192507f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a160075461241b9030906001600160a01b0316600019612919565b60006124278284613ab8565b9050600061243482612cd9565b9050806000036124545750506010805461ff001916905550610f40915050565b6040518181527f0feedab68cd870984eb1996ea868562d5f26bf492165c4ff94e43910877acdad9060200160405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156124d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124f49190613a0e565b90508060000361253857600080516020613e3d83398151915260405161251990613c2b565b60405180910390a150506010805461ff001916905550610f4092505050565b6000836125458784613c70565b61254f9190613c87565b9050600061255d8284613ca9565b9050811561256f5761256f8288612f04565b801561257e5761257e816131a3565b50506010805461ff0019169055505050505050565b61259b6129cb565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa1580156125d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125fd9190613a0e565b90506000811161261f5760405162461bcd60e51b815260040161079590613a27565b600034116120c85760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610795565b61265c6129cb565b6007546126769030906001600160a01b0316600019612919565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926126ae9291169060001990600401613a89565b6020604051808303816000875af19250505080156126e9575060408051601f3d908101601f191682019092526126e691810190613a67565b60015b1561273f57506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92612736926001600160a01b039182169291169060001990613a43565b60405180910390a15b600a546001600160a01b031615610f4057600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926127889291169060001990600401613a89565b6020604051808303816000875af19250505080156127c3575060408051601f3d908101601f191682019092526127c091810190613a67565b60015b156128195750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92612810926001600160a01b039182169291169060001990613a43565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b39161284b916001600160a01b03169060001990600401613a89565b6020604051808303816000875af1925050508015612886575060408051601f3d908101601f1916820190925261288391810190613a67565b60015b15610f405750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca91610f379130916001600160a01b03169060001990613a43565b6128d56129cb565b6001600160a01b0381166129105760405162461bcd60e51b81526020600482015260026024820152614f3160f01b6044820152606401610795565b6119de81613306565b6001600160a01b0383161580159061293957506001600160a01b03821615155b61296a5760405162461bcd60e51b8152602060048201526002602482015261114d60f21b6044820152606401610795565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b336129de6006546001600160a01b031690565b6001600160a01b031614610f405760405162461bcd60e51b8152602060048201526002602482015261279960f11b6044820152606401610795565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205481811015612a745760405162461bcd60e51b8152602060048201526002602482015261453560f01b6044820152606401610795565b610dd48484848403612919565b601054610100900460ff16158015612aa757506006546001600160a01b03848116911614155b8015612ac157506006546001600160a01b03838116911614155b8015612ad657506001600160a01b0383163014155b8015612aef5750600a546001600160a01b038381169116145b15612c765760006064612b03600584613c70565b612b0d9190613c87565b90508015612c745760006064612b24601984613c70565b612b2e9190613c87565b905060006064612b3f601985613c70565b612b499190613c87565b90506000612b578486613ca9565b9050612b64873086613358565b612b6f878783613358565b82600e6000828254612b819190613ab8565b9250508190555081600f6000828254612b9a9190613ab8565b9091555050600f54600e5468056bc75e2d6310000091612bb991613ab8565b10612c0c57306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612bf957600080fd5b505af1925050508015612c0a575060015b505b612c3f87678ac7230489e80000612c388a6001600160a01b031660009081526020819052604090205490565b101561345d565b612c6b86678ac7230489e80000612c38896001600160a01b031660009081526020819052604090205490565b50505050505050565b505b612c81838383613358565b612cad83678ac7230489e80000612c38866001600160a01b031660009081526020819052604090205490565b610dd682678ac7230489e80000612c38856001600160a01b031660009081526020819052604090205490565b600081600003612ceb57506000919050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d2057612d20613d14565b6001600160a01b039283166020918202929092010152600954825191169082906001908110612d5157612d51613d14565b6001600160a01b039283166020918202929092010152600754600b54908216916338ed1739918691600091869116612d8b42610258613ab8565b6040518663ffffffff1660e01b8152600401612dab959493929190613d2a565b6000604051808303816000875af1925050508015612deb57506040513d6000823e601f3d908101601f19168201604052612de89190810190613d66565b60015b612e8957612df7613b42565b806308c379a003612e455750612e0b613ba1565b80612e165750612e47565b600080516020613e3d83398151915281604051612e33919061381b565b60405180910390a15060009392505050565b505b600080516020613e3d833981519152604051612e78906020808252600190820152604560f81b604082015260600190565b60405180910390a150600092915050565b60008160018351612e9a9190613ca9565b81518110612eaa57612eaa613d14565b602002602001015190507fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc018582604051612eee929190918252602082015260400190565b60405180910390a1949350505050565b50919050565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612f3a929116908690600401613a89565b6020604051808303816000875af1158015612f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7d9190613a67565b50604080516002808252606082018352600092602083019080368337505060095482519293506001600160a01b031691839150600090612fbf57612fbf613d14565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015613018573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303c9190613cbc565b8160018151811061304f5761304f613d14565b6001600160a01b039283166020918202929092010152600754166318cbafe5846000843061307f42610258613ab8565b6040518663ffffffff1660e01b815260040161309f959493929190613d2a565b6000604051808303816000875af19250505080156130df57506040513d6000823e601f3d908101601f191682016040526130dc9190810190613d66565b60015b613191576130eb613b42565b806308c379a00361313557506130ff613ba1565b8061310a5750613137565b600080516020613e3d83398151915281604051613127919061381b565b60405180910390a150505050565b505b600080516020613e3d8339815191526040516131849060208082526017908201527f5745544820746f204554482073776170206661696c6564000000000000000000604082015260600190565b60405180910390a1505050565b50478015610dd457610dd48184613670565b600d548015806131b1575081155b156131ba575050565b60006131c68284613c87565b9050806000036131d557505050565b60005b828110156132cf576000600d82815481106131f5576131f5613d14565b6000918252602090912001546001600160a01b03169050801580159061322457506001600160a01b0381163014155b801561323e5750600a546001600160a01b03828116911614155b156132bc5760095460405163a9059cbb60e01b81526000916001600160a01b03169063a9059cbb906132769085908890600401613a89565b6020604051808303816000875af1158015613295573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b99190613a67565b50505b50806132c781613e0d565b9150506131d8565b5060408051848152602081018490527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c2179101613184565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383161580159061337857506001600160a01b03821615155b6133a95760405162461bcd60e51b8152602060048201526002602482015261453160f01b6044820152606401610795565b6001600160a01b038316600090815260208190526040902054818110156133f75760405162461bcd60e51b8152602060048201526002602482015261229960f11b6044820152606401610795565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610dd4565b600a546001600160a01b0383811691161480159061348457506001600160a01b0382163014155b1561366c578080156134af57506001600160a01b0382166000908152600c602052604090205460ff16155b1561351b57506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b8015801561354157506001600160a01b0382166000908152600c602052604090205460ff165b1561366c576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d54811015610dd657826001600160a01b0316600d828154811061358e5761358e613d14565b6000918252602090912001546001600160a01b03160361365a57600d80546135b890600190613ca9565b815481106135c8576135c8613d14565b600091825260209091200154600d80546001600160a01b0390921691839081106135f4576135f4613d14565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d80548061363357613633613e26565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061366481613e0d565b915050613567565b5050565b6000606461367f601e82613ca9565b6136899084613c70565b6136939190613c87565b9050600060646136a4601e82613ca9565b6136ae9086613c70565b6136b89190613c87565b6007549091506001600160a01b031663f305d7198530868686836136de42610258613ab8565b6040518863ffffffff1660e01b81526004016136ff96959493929190613cd9565b60606040518083038185885af19350505050801561373a575060408051601f3d908101601f1916820190925261373791810190613b14565b60015b6137f457613746613b42565b806308c379a0036137a2575061375a613ba1565b8061376557506137a4565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad81604051613794919061381b565b60405180910390a150610dd4565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad6040516137e7906020808252600190820152604560f81b604082015260600190565b60405180910390a1610dd4565b50506040805185815260208101879052600080516020613e5d833981519152925001613127565b600060208083528351808285015260005b818110156138485785810183015185820160400152820161382c565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146119de57600080fd5b6000806040838503121561389157600080fd5b823561389c81613869565b946020939093013593505050565b6000602082840312156138bc57600080fd5b5035919050565b6000806000606084860312156138d857600080fd5b83356138e381613869565b925060208401356138f381613869565b929592945050506040919091013590565b600081518084526020808501945080840160005b8381101561393d5781516001600160a01b031687529582019590820190600101613918565b509495945050505050565b60208152600061395b6020830184613904565b9392505050565b60006020828403121561397457600080fd5b813561395b81613869565b6000806040838503121561399257600080fd5b50508035926020909101359150565b600080604083850312156139b457600080fd5b82356139bf81613869565b915060208301356139cf81613869565b809150509250929050565b600181811c908216806139ee57607f821691505b602082108103612efe57634e487b7160e01b600052602260045260246000fd5b600060208284031215613a2057600080fd5b5051919050565b602080825260029082015261139560f21b604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215613a7957600080fd5b8151801515811461395b57600080fd5b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561070357610703613aa2565b6001600160a01b039889168152968816602088015260408701959095526060860193909352608085019190915260a084015290921660c082015260e08101919091526101000190565b600080600060608486031215613b2957600080fd5b8351925060208401519150604084015190509250925092565b600060033d1115613b5b5760046000803e5060005160e01c5b90565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff81118282101715613b9a57613b9a613b5e565b6040525050565b600060443d1015613baf5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715613bdf57505050505090565b8285019150815181811115613bf75750505050505090565b843d8701016020828501011115613c115750505050505090565b613c2060208286010187613b74565b509095945050505050565b60208082526025908201527f4e6f20574554482072656365697665642066726f6d2074726561737572792077604082015264185b1b195d60da1b606082015260800190565b808202811582820484141761070357610703613aa2565b600082613ca457634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561070357610703613aa2565b600060208284031215613cce57600080fd5b815161395b81613869565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a060408201526000613d4960a0830186613904565b6001600160a01b0394909416606083015250608001529392505050565b60006020808385031215613d7957600080fd5b825167ffffffffffffffff80821115613d9157600080fd5b818501915085601f830112613da557600080fd5b815181811115613db757613db7613b5e565b8060051b9150604051613dcc85840182613b74565b81815291830184019184810188841115613de557600080fd5b938501935b83851015613e015784518152938501938501613dea565b50979650505050505050565b600060018201613e1f57613e1f613aa2565b5060010190565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072338f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515ba26469706673582212209ebb49f109b10fe59a5ca3dffd3d9f73aa15ba066a3dd8d264fa5df0afa82efa64736f6c63430008110033
Deployed Bytecode Sourcemap
9147:26354:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2873:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30324:118;;;;;;;;;;-1:-1:-1;30411:23:0;;30324:118;;;713:25:1;;;701:2;686:18;30324:118:0;567:177:1;3740:190:0;;;;;;;;;;-1:-1:-1;3740:190:0;;;;;:::i;:::-;;:::i;:::-;;;1370:14:1;;1363:22;1345:41;;1333:2;1318:18;3740:190:0;1205:187:1;3167:99:0;;;;;;;;;;-1:-1:-1;3246:12:0;;3167:99;;24872:2187;;;;;;;;;;-1:-1:-1;24872:2187:0;;;;;:::i;:::-;;:::i;:::-;;3938:250;;;;;;;;;;-1:-1:-1;3938:250:0;;;;;:::i;:::-;;:::i;10210:24::-;;;;;;;;;;-1:-1:-1;10210:24:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2207:32:1;;;2189:51;;2177:2;2162:18;10210:24:0;2043:203:1;3075:84:0;;;;;;;;;;-1:-1:-1;3075:84:0;;3149:2;2393:36:1;;2381:2;2366:18;3075:84:0;2251:184:1;30623:378:0;;;;;;;;;;;;;:::i;10034:25::-;;;;;;;;;;-1:-1:-1;10034:25:0;;;;-1:-1:-1;;;;;10034:25:0;;;10101:29;;;;;;;;;;-1:-1:-1;10101:29:0;;;;-1:-1:-1;;;;;10101:29:0;;;30090:183;;;;;;;;;;-1:-1:-1;30090:183:0;;;;;:::i;:::-;;:::i;30450:114::-;;;;;;;;;;-1:-1:-1;30535:21:0;;30450:114;;22384:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9936:41::-;;;;;;;;;;-1:-1:-1;9936:41:0;;;;-1:-1:-1;;;;;9936:41:0;;;3274:118;;;;;;;;;;-1:-1:-1;3274:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;22274:98;;;;;;;;;;-1:-1:-1;22350:7:0;:14;22274:98;;15591:3036;;;;;;;;;;;;;:::i;32441:194::-;;;;;;;;;;;;;:::i;10066:28::-;;;;;;;;;;-1:-1:-1;10066:28:0;;;;-1:-1:-1;;;;;10066:28:0;;;11846:836;;;;;;;;;;;;;:::i;1861:87::-;;;;;;;;;;-1:-1:-1;1934:6:0;;-1:-1:-1;;;;;1934:6:0;1861:87;;2972:95;;;;;;;;;;;;;:::i;22535:2260::-;;;;;;;;;;-1:-1:-1;22535:2260:0;;;;;:::i;:::-;;:::i;32054:291::-;;;;;;;;;;-1:-1:-1;32054:291:0;;;;;:::i;:::-;;:::i;3400:182::-;;;;;;;;;;-1:-1:-1;3400:182:0;;;;;:::i;:::-;;:::i;27123:1381::-;;;;;;:::i;:::-;;:::i;29916:166::-;;;;;;;;;;-1:-1:-1;29916:166:0;;;;;:::i;:::-;;:::i;32643:2007::-;;;;;;;;;;;;;:::i;10163:40::-;;;;;;;;;;-1:-1:-1;10163:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3590:142;;;;;;;;;;-1:-1:-1;3590:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;3697:18:0;;;3670:7;3697:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3590:142;28589:1319;;;:::i;31047:958::-;;;;;;;;;;;;;:::i;2064:165::-;;;;;;;;;;-1:-1:-1;2064:165:0;;;;;:::i;:::-;;:::i;9984:43::-;;;;;;;;;;-1:-1:-1;9984:43:0;;;;-1:-1:-1;;;;;9984:43:0;;;2873:91;2918:13;2951:5;2944:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2873:91;:::o;3740:190::-;3814:4;3847:10;3868:32;3847:10;3884:7;3893:6;3868:8;:32::i;:::-;3918:4;3911:11;;;3740:190;;;;;:::o;24872:2187::-;1820:13;:11;:13::i;:::-;24987:46:::1;::::0;-1:-1:-1;;;24987:46:0;;25002:4:::1;24987:46;::::0;::::1;2189:51:1::0;;;24965:19:0::1;::::0;24987:31:::1;::::0;2162:18:1;;24987:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24965:68;;25066:1;25052:11;:15;25044:30;;;;-1:-1:-1::0;;;25044:30:0::1;;;;;;;:::i;:::-;;;;;;;;;25107:1;25093:11;:15;25085:30;;;::::0;-1:-1:-1;;;25085:30:0;;5643:2:1;25085:30:0::1;::::0;::::1;5625:21:1::0;5682:1;5662:18;;;5655:29;-1:-1:-1;;;5700:18:1;;;5693:32;5742:18;;25085:30:0::1;5441:325:1::0;25085:30:0::1;25165:10;::::0;25158:40:::1;::::0;-1:-1:-1;;;25158:40:0;;25187:10:::1;25158:40;::::0;::::1;2189:51:1::0;25202:11:0;;-1:-1:-1;;;;;25165:10:0::1;::::0;25158:28:::1;::::0;2162:18:1;;25158:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;25136:107;;;::::0;-1:-1:-1;;;25136:107:0;;5973:2:1;25136:107:0::1;::::0;::::1;5955:21:1::0;6012:1;5992:18;;;5985:29;-1:-1:-1;;;6030:18:1;;;6023:32;6072:18;;25136:107:0::1;5771:325:1::0;25136:107:0::1;25345:10;::::0;25338:71:::1;::::0;-1:-1:-1;;;25338:71:0;;-1:-1:-1;;;;;25345:10:0;;::::1;::::0;25338:31:::1;::::0;:71:::1;::::0;25370:10:::1;::::0;25390:4:::1;::::0;25397:11;;25338:71:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25316:123;;;::::0;-1:-1:-1;;;25316:123:0;;6965:2:1;25316:123:0::1;::::0;::::1;6947:21:1::0;7004:1;6984:18;;;6977:29;-1:-1:-1;;;7022:18:1;;;7015:32;7064:18;;25316:123:0::1;6763:325:1::0;25316:123:0::1;25518:16;::::0;25486:63:::1;::::0;25503:4:::1;::::0;-1:-1:-1;;;;;25518:16:0::1;25537:11:::0;25486:8:::1;:63::i;:::-;25567:10;::::0;25595:16:::1;::::0;25560:66:::1;::::0;-1:-1:-1;;;25560:66:0;;-1:-1:-1;;;;;25567:10:0;;::::1;::::0;25560:26:::1;::::0;:66:::1;::::0;25595:16;::::1;::::0;25614:11;;25560:66:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25651:16:0::1;::::0;25723:10:::1;::::0;-1:-1:-1;;;;;25651:16:0;;::::1;::::0;:29:::1;::::0;25703:4:::1;::::0;25723:10:::1;25748:11:::0;25774;25651:16:::1;::::0;25924:10:::1;25949:21;:15;25967:3;25949:21;:::i;:::-;25651:356;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25651:356:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;25651:356:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;25647:1147;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;26162:16;::::0;26130:53:::1;::::0;26147:4:::1;::::0;-1:-1:-1;;;;;26162:16:0::1;;26130:8;:53::i;:::-;26205:10;::::0;26233:16:::1;::::0;26198:56:::1;::::0;-1:-1:-1;;;26198:56:0;;-1:-1:-1;;;;;26205:10:0;;::::1;::::0;26198:26:::1;::::0;:56:::1;::::0;26233:16;::::1;::::0;26205:10:::1;::::0;26198:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;26338:10:0::1;::::0;26331:52:::1;::::0;-1:-1:-1;;;26331:52:0;;-1:-1:-1;;;;;26338:10:0;;::::1;::::0;26331:27:::1;::::0;:52:::1;::::0;26359:10:::1;::::0;26371:11;;26331:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26419:6;26412:14;;-1:-1:-1::0;;;26412:14:0::1;;;;;;;;:::i;25647:1147::-;;;26520:16;::::0;26488:53:::1;::::0;26505:4:::1;::::0;-1:-1:-1;;;;;26520:16:0::1;;26488:8;:53::i;:::-;26563:10;::::0;26591:16:::1;::::0;26556:56:::1;::::0;-1:-1:-1;;;26556:56:0;;-1:-1:-1;;;;;26563:10:0;;::::1;::::0;26556:26:::1;::::0;:56:::1;::::0;26591:16;::::1;::::0;26563:10:::1;::::0;26556:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;26696:10:0::1;::::0;26689:52:::1;::::0;-1:-1:-1;;;26689:52:0;;-1:-1:-1;;;;;26696:10:0;;::::1;::::0;26689:27:::1;::::0;:52:::1;::::0;26717:10:::1;::::0;26729:11;;26689:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;26770:12:0::1;::::0;-1:-1:-1;;;26770:12:0;;10445:2:1;26770:12:0::1;::::0;::::1;10427:21:1::0;10484:1;10464:18;;;10457:29;-1:-1:-1;;;10502:18:1;;;10495:32;10544:18;;26770:12:0::1;10243:325:1::0;25647:1147:0::1;-1:-1:-1::0;;26028:40:0::1;::::0;;10747:25:1;;;10803:2;10788:18;;10781:34;;;-1:-1:-1;;;;;;;;;;;26028:40:0;-1:-1:-1;10720:18:1;26028:40:0::1;;;;;;;;26897:10;::::0;26890:43:::1;::::0;-1:-1:-1;;;26890:43:0;;26927:4:::1;26890:43;::::0;::::1;2189:51:1::0;26864:23:0::1;::::0;-1:-1:-1;;;;;26897:10:0::1;::::0;26890:28:::1;::::0;2162:18:1;;26890:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26864:69:::0;-1:-1:-1;26948:19:0;;26944:108:::1;;26991:10;::::0;26984:56:::1;::::0;-1:-1:-1;;;26984:56:0;;-1:-1:-1;;;;;26991:10:0;;::::1;::::0;26984:27:::1;::::0;:56:::1;::::0;27012:10:::1;::::0;27024:15;;26984:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26944:108;24954:2105;;24872:2187:::0;:::o;3938:250::-;4026:4;4061:10;4082:38;4098:4;4061:10;4113:6;4082:15;:38::i;:::-;4131:27;4141:4;4147:2;4151:6;4131:9;:27::i;:::-;-1:-1:-1;4176:4:0;;3938:250;-1:-1:-1;;;;3938:250:0:o;10210:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10210:24:0;;-1:-1:-1;10210:24:0;:::o;30623:378::-;1820:13;:11;:13::i;:::-;30716:1:::1;30690:23;;:27;:56;;;;30745:1;30721:21;;:25;30690:56;30682:71;;;::::0;-1:-1:-1;;;30682:71:0;;11028:2:1;30682:71:0::1;::::0;::::1;11010:21:1::0;11067:1;11047:18;;;11040:29;-1:-1:-1;;;11085:18:1;;;11078:32;11127:18;;30682:71:0::1;10826:325:1::0;30682:71:0::1;30772:7;:14:::0;30764:33:::1;;;::::0;-1:-1:-1;;;30764:33:0;;11358:2:1;30764:33:0::1;::::0;::::1;11340:21:1::0;11397:1;11377:18;;;11370:29;-1:-1:-1;;;11415:18:1;;;11408:32;11457:18;;30764:33:0::1;11156:325:1::0;30764:33:0::1;30812:4;-1:-1:-1::0;;;;;30812:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;30808:186;;30920:62;30935:23;;30960:21;;30920:62;;;;;;10747:25:1::0;;;10803:2;10788:18;;10781:34;10735:2;10720:18;;10573:248;30920:62:0::1;;;;;;;;30808:186;30623:378::o:0;30090:183::-;1820:13;:11;:13::i;:::-;30201:4:::1;-1:-1:-1::0;;;;;30183:23:0;::::1;::::0;30175:38:::1;;;::::0;-1:-1:-1;;;30175:38:0;;11688:2:1;30175:38:0::1;::::0;::::1;11670:21:1::0;11727:1;11707:18;;;11700:29;-1:-1:-1;;;11745:18:1;;;11738:32;11787:18;;30175:38:0::1;11486:325:1::0;30175:38:0::1;30231:6;-1:-1:-1::0;;;;;30224:23:0::1;;30248:7;1934:6:::0;;-1:-1:-1;;;;;1934:6:0;;1861:87;30248:7:::1;30257;30224:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22384:96::-:0;22429:16;22465:7;22458:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22458:14:0;;;;;;;;;;;;;;;;;;;;;;22384:96;:::o;15591:3036::-;1114:1;1260:7;;:19;1252:34;;;;-1:-1:-1;;;1252:34:0;;12018:2:1;1252:34:0;;;12000:21:1;12057:1;12037:18;;;12030:29;-1:-1:-1;;;12075:18:1;;;12068:32;12117:18;;1252:34:0;11816:325:1;1252:34:0;1114:1;1297:7;:18;15671:7:::1;::::0;::::1;::::0;::::1;;;15670:8;15662:23;;;::::0;-1:-1:-1;;;15662:23:0;;12348:2:1;15662:23:0::1;::::0;::::1;12330:21:1::0;12387:1;12367:18;;;12360:29;-1:-1:-1;;;12405:18:1;;;12398:32;12447:18;;15662:23:0::1;12146:325:1::0;15662:23:0::1;15696:7;:14:::0;;-1:-1:-1;;15696:14:0::1;;;::::0;;15760:23:::1;::::0;15821:21:::1;::::0;15867:23;;:48;::::1;;;-1:-1:-1::0;15894:21:0;;15867:48:::1;15863:117;;;-1:-1:-1::0;;15932:7:0::1;:15:::0;;-1:-1:-1;;15932:15:0::1;::::0;;15962:7:::1;;15863:117;16005:52;::::0;;10747:25:1;;;10803:2;10788:18;;10781:34;;;16005:52:0::1;::::0;10720:18:1;16005:52:0::1;;;;;;;16138:1;16112:23;:27:::0;;;16150:21:::1;:25:::0;16258:16:::1;::::0;16226:69:::1;::::0;16243:4:::1;::::0;-1:-1:-1;;;;;16258:16:0::1;-1:-1:-1::0;;16226:8:0::1;:69::i;:::-;16341:25;16369:37;16390:16:::0;16369:18;:37:::1;:::i;:::-;16341:65;;16417:20;16440:31;16453:17;16440:12;:31::i;:::-;16417:54;;16496:12;16512:1;16496:17:::0;16492:86:::1;;-1:-1:-1::0;;16530:7:0::1;:15:::0;;-1:-1:-1;;16530:15:0::1;::::0;;-1:-1:-1;16560:7:0::1;::::0;-1:-1:-1;16560:7:0::1;16492:86;16705:10;::::0;16727:14:::1;::::0;16698:44:::1;::::0;-1:-1:-1;;;16698:44:0;;-1:-1:-1;;;;;16727:14:0;;::::1;16698:44;::::0;::::1;2189:51:1::0;16668:27:0::1;::::0;16705:10;;;::::1;::::0;16698:28:::1;::::0;2162:18:1;;16698:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16668:74;;16780:12;16757:19;:35;16753:958;;16913:10;::::0;16935:14:::1;::::0;16906:59:::1;::::0;-1:-1:-1;;;16906:59:0;;-1:-1:-1;;;;;16935:14:0;;::::1;16906:59;::::0;::::1;12688:34:1::0;16959:4:0::1;12738:18:1::0;;;12731:43;16969:12:0;;16913:10;;;::::1;::::0;16906:28:::1;::::0;12623:18:1;;16906:59:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:75;16902:654;;17093:10;::::0;17118:14:::1;::::0;17086:76:::1;::::0;-1:-1:-1;;;17086:76:0;;17071:12:::1;::::0;-1:-1:-1;;;;;17093:10:0;;::::1;::::0;17086:31:::1;::::0;:76:::1;::::0;17118:14;;::::1;::::0;17142:4:::1;::::0;17149:12;;17086:76:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17071:91;;17204:7;17199:177;;-1:-1:-1::0;;;;;;;;;;;17241:48:0::1;;;;12987:2:1::0;12969:21;;;13026:2;13006:18;;;12999:30;13065:34;13060:2;13045:18;;13038:62;-1:-1:-1;;;13131:2:1;13116:18;;13109:32;13173:3;13158:19;;12785:398;17241:48:0::1;;;;;;;;-1:-1:-1::0;;17312:7:0::1;:15:::0;;-1:-1:-1;;17312:15:0::1;::::0;;-1:-1:-1;17350:7:0::1;::::0;-1:-1:-1;;;17350:7:0::1;17199:177;16983:408;16753:958;;16902:654;-1:-1:-1::0;;;;;;;;;;;17421:60:0::1;;;;13390:2:1::0;13372:21;;;13429:2;13409:18;;;13402:30;13468:34;13463:2;13448:18;;13441:62;-1:-1:-1;;;13534:2:1;13519:18;;13512:44;13588:3;13573:19;;13188:410;17421:60:0::1;;;;;;;;-1:-1:-1::0;;17500:7:0::1;:15:::0;;-1:-1:-1;;17500:15:0::1;::::0;;-1:-1:-1;17534:7:0::1;::::0;-1:-1:-1;;17534:7:0::1;16753:958;-1:-1:-1::0;;;;;;;;;;;17593:55:0::1;;;;13805:2:1::0;13787:21;;;13844:2;13824:18;;;13817:30;13883:34;13878:2;13863:18;;13856:62;-1:-1:-1;;;13949:2:1;13934:18;;13927:39;13998:3;13983:19;;13603:405;16753:958:0::1;17818:10;::::0;17811:43:::1;::::0;-1:-1:-1;;;17811:43:0;;17848:4:::1;17811:43;::::0;::::1;2189:51:1::0;17781:27:0::1;::::0;-1:-1:-1;;;;;17818:10:0::1;::::0;17811:28:::1;::::0;2162:18:1;;17811:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17781:73;;17869:19;17892:1;17869:24:::0;17865:164:::1;;-1:-1:-1::0;;;;;;;;;;;17915:51:0::1;;;;;:::i;17865:164::-;18079:24;18149:17:::0;18106:40:::1;18128:18:::0;18106:19;:40:::1;:::i;:::-;:60;;;;:::i;:::-;18079:87:::0;-1:-1:-1;18177:22:0::1;18202:38;18079:87:::0;18202:19;:38:::1;:::i;:::-;18177:63:::0;-1:-1:-1;18332:20:0;;18328:108:::1;;18369:55;18387:16;18405:18;18369:17;:55::i;:::-;18498:18:::0;;18494:90:::1;;18533:39;18557:14;18533:23;:39::i;:::-;-1:-1:-1::0;;18604:7:0::1;:15:::0;;-1:-1:-1;;18604:15:0::1;::::0;;-1:-1:-1;;;;;;1326:1:0::1;1070::::0;1338:7;:22;15591:3036::o;32441:194::-;32520:14;;-1:-1:-1;;;;;32520:14:0;32506:10;:28;32498:43;;;;-1:-1:-1;;;32498:43:0;;15149:2:1;32498:43:0;;;15131:21:1;15188:1;15168:18;;;15161:29;-1:-1:-1;;;15206:18:1;;;15199:32;15248:18;;32498:43:0;14947:325:1;32498:43:0;32567:10;;32560:60;;-1:-1:-1;;;32560:60:0;;-1:-1:-1;;;;;32567:10:0;;;;32560:26;;:60;;32595:4;;-1:-1:-1;;32602:17:0;32560:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32552:75;;;;-1:-1:-1;;;32552:75:0;;15479:2:1;32552:75:0;;;15461:21:1;15518:1;15498:18;;;15491:29;-1:-1:-1;;;15536:18:1;;;15529:32;15578:18;;32552:75:0;15277:325:1;11846:836:0;1820:13;:11;:13::i;:::-;11907:12:::1;::::0;::::1;;11906:13;11898:28;;;::::0;-1:-1:-1;;;11898:28:0;;15809:2:1;11898:28:0::1;::::0;::::1;15791:21:1::0;15848:1;15828:18;;;15821:29;-1:-1:-1;;;15866:18:1;;;15859:32;15908:18;;11898:28:0::1;15607:325:1::0;11898:28:0::1;11937:12;:19:::0;;-1:-1:-1;;11937:19:0::1;11952:4;11937:19;::::0;;12028:17:::1;::::0;12069:10:::1;::::0;12028:52:::1;::::0;-1:-1:-1;;;12028:52:0;;12062:4:::1;12028:52;::::0;::::1;12688:34:1::0;-1:-1:-1;;;;;12069:10:0;;::::1;12738:18:1::0;;;12731:43;12028:17:0;::::1;::::0;:25:::1;::::0;12623:18:1;;12028:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12012:13;:68:::0;;-1:-1:-1;;;;;;12012:68:0::1;-1:-1:-1::0;;;;;12012:68:0;;;::::1;::::0;;::::1;::::0;;12146:131:::1;;12210:17;::::0;12254:10:::1;::::0;12210:55:::1;::::0;-1:-1:-1;;;12210:55:0;;12247:4:::1;12210:55;::::0;::::1;12688:34:1::0;-1:-1:-1;;;;;12254:10:0;;::::1;12738:18:1::0;;;12731:43;12210:17:0;::::1;::::0;:28:::1;::::0;12623:18:1;;12210:55:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12194:13;:71:::0;;-1:-1:-1;;;;;;12194:71:0::1;-1:-1:-1::0;;;;;12194:71:0;;;::::1;::::0;;;::::1;::::0;;12146:131:::1;12305:13;::::0;-1:-1:-1;;;;;12305:13:0::1;12297:42;;;::::0;-1:-1:-1;;;12297:42:0;;16395:2:1;12297:42:0::1;::::0;::::1;16377:21:1::0;16434:1;16414:18;;;16407:29;-1:-1:-1;;;16452:18:1;;;16445:32;16494:18;;12297:42:0::1;16193:325:1::0;12297:42:0::1;12384:16;::::0;12352:69:::1;::::0;12369:4:::1;::::0;-1:-1:-1;;;;;12384:16:0::1;-1:-1:-1::0;;12352:8:0::1;:69::i;:::-;12457:10;::::0;12485:16:::1;::::0;12450:72:::1;::::0;-1:-1:-1;;;12450:72:0;;-1:-1:-1;;;;;12457:10:0;;::::1;::::0;12450:26:::1;::::0;:72:::1;::::0;12485:16;::::1;::::0;-1:-1:-1;;12504:17:0;12450:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12442:87;;;::::0;-1:-1:-1;;;12442:87:0;;16725:2:1;12442:87:0::1;::::0;::::1;16707:21:1::0;16764:1;16744:18;;;16737:29;-1:-1:-1;;;16782:18:1;;;16775:32;16824:18;;12442:87:0::1;16523:325:1::0;12442:87:0::1;12547:10;::::0;12567:13:::1;::::0;12540:60:::1;::::0;-1:-1:-1;;;12540:60:0;;-1:-1:-1;;;;;12547:10:0;;::::1;::::0;12540:26:::1;::::0;:60:::1;::::0;12567:13;::::1;::::0;-1:-1:-1;;12582:17:0;12540:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;12641:13:0::1;::::0;12611:63:::1;::::0;-1:-1:-1;;;12611:63:0;;12626:4:::1;::::0;12611:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;12641:13:0::1;::::0;-1:-1:-1;;12656:17:0;12611:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11846:836::o:0;2972:95::-;3019:13;3052:7;3045:14;;;;;:::i;22535:2260::-;1820:13;:11;:13::i;:::-;22668:1:::1;22654:11;:15;22646:30;;;;-1:-1:-1::0;;;22646:30:0::1;;;;;;;:::i;:::-;22709:1;22695:11;:15;22687:30;;;::::0;-1:-1:-1;;;22687:30:0;;5643:2:1;22687:30:0::1;::::0;::::1;5625:21:1::0;5682:1;5662:18;;;5655:29;-1:-1:-1;;;5700:18:1;;;5693:32;5742:18;;22687:30:0::1;5441:325:1::0;22687:30:0::1;22760:46;::::0;-1:-1:-1;;;22760:46:0;;22775:4:::1;22760:46;::::0;::::1;2189:51:1::0;;;22810:11:0;;22760:31:::1;::::0;2162:18:1;;22760:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;22738:113;;;::::0;-1:-1:-1;;;22738:113:0;;17055:2:1;22738:113:0::1;::::0;::::1;17037:21:1::0;17094:1;17074:18;;;17067:29;-1:-1:-1;;;17112:18:1;;;17105:32;17154:18;;22738:113:0::1;16853:325:1::0;22738:113:0::1;22901:10;::::0;22894:40:::1;::::0;-1:-1:-1;;;22894:40:0;;22923:10:::1;22894:40;::::0;::::1;2189:51:1::0;22938:11:0;;-1:-1:-1;;;;;22901:10:0::1;::::0;22894:28:::1;::::0;2162:18:1;;22894:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;22872:107;;;::::0;-1:-1:-1;;;22872:107:0;;5973:2:1;22872:107:0::1;::::0;::::1;5955:21:1::0;6012:1;5992:18;;;5985:29;-1:-1:-1;;;6030:18:1;;;6023:32;6072:18;;22872:107:0::1;5771:325:1::0;22872:107:0::1;23081:10;::::0;23074:71:::1;::::0;-1:-1:-1;;;23074:71:0;;-1:-1:-1;;;;;23081:10:0;;::::1;::::0;23074:31:::1;::::0;:71:::1;::::0;23106:10:::1;::::0;23126:4:::1;::::0;23133:11;;23074:71:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23052:123;;;::::0;-1:-1:-1;;;23052:123:0;;6965:2:1;23052:123:0::1;::::0;::::1;6947:21:1::0;7004:1;6984:18;;;6977:29;-1:-1:-1;;;7022:18:1;;;7015:32;7064:18;;23052:123:0::1;6763:325:1::0;23052:123:0::1;23254:16;::::0;23222:63:::1;::::0;23239:4:::1;::::0;-1:-1:-1;;;;;23254:16:0::1;23273:11:::0;23222:8:::1;:63::i;:::-;23303:10;::::0;23331:16:::1;::::0;23296:66:::1;::::0;-1:-1:-1;;;23296:66:0;;-1:-1:-1;;;;;23303:10:0;;::::1;::::0;23296:26:::1;::::0;:66:::1;::::0;23331:16;::::1;::::0;23350:11;;23296:66:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;23387:16:0::1;::::0;23459:10:::1;::::0;-1:-1:-1;;;;;23387:16:0;;::::1;::::0;:29:::1;::::0;23439:4:::1;::::0;23459:10:::1;23484:11:::0;23510;23387:16:::1;::::0;23660:10:::1;23685:21;:15;23703:3;23685:21;:::i;:::-;23387:356;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;23387:356:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;23387:356:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;23383:1147;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;23898:16;::::0;23866:53:::1;::::0;23883:4:::1;::::0;-1:-1:-1;;;;;23898:16:0::1;;23866:8;:53::i;:::-;23941:10;::::0;23969:16:::1;::::0;23934:56:::1;::::0;-1:-1:-1;;;23934:56:0;;-1:-1:-1;;;;;23941:10:0;;::::1;::::0;23934:26:::1;::::0;:56:::1;::::0;23969:16;::::1;::::0;23941:10:::1;::::0;23934:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;24074:10:0::1;::::0;24067:52:::1;::::0;-1:-1:-1;;;24067:52:0;;-1:-1:-1;;;;;24074:10:0;;::::1;::::0;24067:27:::1;::::0;:52:::1;::::0;24095:10:::1;::::0;24107:11;;24067:52:::1;;;:::i;23383:1147::-;;;24256:16;::::0;24224:53:::1;::::0;24241:4:::1;::::0;-1:-1:-1;;;;;24256:16:0::1;;24224:8;:53::i;:::-;24299:10;::::0;24327:16:::1;::::0;24292:56:::1;::::0;-1:-1:-1;;;24292:56:0;;-1:-1:-1;;;;;24299:10:0;;::::1;::::0;24292:26:::1;::::0;:56:::1;::::0;24327:16;::::1;::::0;24299:10:::1;::::0;24292:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;24432:10:0::1;::::0;24425:52:::1;::::0;-1:-1:-1;;;24425:52:0;;-1:-1:-1;;;;;24432:10:0;;::::1;::::0;24425:27:::1;::::0;:52:::1;::::0;24453:10:::1;::::0;24465:11;;24425:52:::1;;;:::i;23383:1147::-;-1:-1:-1::0;;23764:40:0::1;::::0;;10747:25:1;;;10803:2;10788:18;;10781:34;;;-1:-1:-1;;;;;;;;;;;23764:40:0;-1:-1:-1;10720:18:1;23764:40:0::1;10573:248:1::0;32054:291:0;1820:13;:11;:13::i;:::-;-1:-1:-1;;;;;32144:29:0;::::1;32136:44;;;::::0;-1:-1:-1;;;32136:44:0;;17385:2:1;32136:44:0::1;::::0;::::1;17367:21:1::0;17424:1;17404:18;;;17397:29;-1:-1:-1;;;17442:18:1;;;17435:32;17484:18;;32136:44:0::1;17183:325:1::0;32136:44:0::1;32213:14;::::0;;-1:-1:-1;;;;;32238:32:0;;::::1;-1:-1:-1::0;;;;;;32238:32:0;::::1;::::0;::::1;::::0;;;32286:51:::1;::::0;;32213:14;;;::::1;12688:34:1::0;;;12753:2;12738:18;;12731:43;;;;32286:51:0::1;::::0;12623:18:1;32286:51:0::1;;;;;;;32125:220;32054:291:::0;:::o;3400:182::-;3470:4;3503:10;3524:28;3503:10;3541:2;3545:6;3524:9;:28::i;27123:1381::-;1820:13;:11;:13::i;:::-;27240:1:::1;27226:11;:15;27218:30;;;;-1:-1:-1::0;;;27218:30:0::1;;;;;;;:::i;:::-;27279:1;27267:9;:13;27259:28;;;::::0;-1:-1:-1;;;27259:28:0;;17715:2:1;27259:28:0::1;::::0;::::1;17697:21:1::0;17754:1;17734:18;;;17727:29;-1:-1:-1;;;17772:18:1;;;17765:32;17814:18;;27259:28:0::1;17513:325:1::0;27259:28:0::1;27330:46;::::0;-1:-1:-1;;;27330:46:0;;27345:4:::1;27330:46;::::0;::::1;2189:51:1::0;;;27380:11:0;;27330:31:::1;::::0;2162:18:1;;27330:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;27308:113;;;::::0;-1:-1:-1;;;27308:113:0;;17055:2:1;27308:113:0::1;::::0;::::1;17037:21:1::0;17094:1;17074:18;;;17067:29;-1:-1:-1;;;17112:18:1;;;17105:32;17154:18;;27308:113:0::1;16853:325:1::0;27308:113:0::1;27500:16;::::0;27468:63:::1;::::0;27485:4:::1;::::0;-1:-1:-1;;;;;27500:16:0::1;27519:11:::0;27468:8:::1;:63::i;:::-;27556:16;::::0;-1:-1:-1;;;;;27556:16:0::1;:32;27596:9;27629:4;27649:11:::0;27556:16:::1;::::0;27797:10:::1;27822:21;:15;27840:3;27822:21;:::i;:::-;27556:324;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;27556:324:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;27556:324:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;27552:945;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;28033:16;::::0;28001:53:::1;::::0;28018:4:::1;::::0;-1:-1:-1;;;;;28033:16:0::1;;28001:8;:53::i;:::-;28119:51;::::0;28127:10:::1;::::0;28148:21:::1;28119:51:::0;::::1;;;::::0;::::1;::::0;;;28148:21;28127:10;28119:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;27552:945;;;28307:16;::::0;28275:53:::1;::::0;28292:4:::1;::::0;-1:-1:-1;;;;;28307:16:0::1;;28275:8;:53::i;:::-;28393:51;::::0;28401:10:::1;::::0;28422:21:::1;28393:51:::0;::::1;;;::::0;::::1;::::0;;;28422:21;28401:10;28393:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;27552:945;-1:-1:-1::0;;27901:38:0::1;::::0;;10747:25:1;;;27929:9:0::1;10803:2:1::0;10788:18;;10781:34;-1:-1:-1;;;;;;;;;;;27901:38:0;-1:-1:-1;10720:18:1;27901:38:0::1;;;;;;;27123:1381:::0;:::o;29916:166::-;1820:13;:11;:13::i;:::-;-1:-1:-1;;;;;29990:21:0;::::1;29982:36;;;::::0;-1:-1:-1;;;29982:36:0;;18657:2:1;29982:36:0::1;::::0;::::1;18639:21:1::0;18696:1;18676:18;;;18669:29;-1:-1:-1;;;18714:18:1;;;18707:32;18756:18;;29982:36:0::1;18455:325:1::0;29982:36:0::1;30029:16;:45:::0;;-1:-1:-1;;;;;;30029:45:0::1;-1:-1:-1::0;;;;;30029:45:0;;;::::1;::::0;;;::::1;::::0;;29916:166::o;32643:2007::-;1820:13;:11;:13::i;:::-;32719:7:::1;::::0;::::1;::::0;::::1;;;32718:8;32710:23;;;::::0;-1:-1:-1;;;32710:23:0;;12348:2:1;32710:23:0::1;::::0;::::1;12330:21:1::0;12387:1;12367:18;;;12360:29;-1:-1:-1;;;12405:18:1;;;12398:32;12447:18;;32710:23:0::1;12146:325:1::0;32710:23:0::1;32744:7;:14:::0;;-1:-1:-1;;32744:14:0::1;;;::::0;;32854:46:::1;::::0;-1:-1:-1;;;32854:46:0;;32869:4:::1;32854:46;::::0;::::1;2189:51:1::0;;;-1:-1:-1;;32854:31:0::1;::::0;2162:18:1;;32854:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32828:72;;32937:1;32919:15;:19;32911:34;;;::::0;-1:-1:-1;;;32911:34:0;;18987:2:1;32911:34:0::1;::::0;::::1;18969:21:1::0;19026:1;19006:18;;;18999:29;-1:-1:-1;;;19044:18:1;;;19037:32;19086:18;;32911:34:0::1;18785:325:1::0;32911:34:0::1;32966:26;33030:27;9435:2;::::0;33030:27:::1;:::i;:::-;32995:31;9379:2;32995:15:::0;:31:::1;:::i;:::-;:63;;;;:::i;:::-;32966:92:::0;-1:-1:-1;33069:24:0::1;33096:36;32966:92:::0;33096:15;:36:::1;:::i;:::-;33158:52;::::0;;10747:25:1;;;10803:2;10788:18;;10781:34;;;33069:63:0;;-1:-1:-1;33158:52:0::1;::::0;10720:18:1;33158:52:0::1;;;;;;;33293:16;::::0;33261:69:::1;::::0;33278:4:::1;::::0;-1:-1:-1;;;;;33293:16:0::1;-1:-1:-1::0;;33261:8:0::1;:69::i;:::-;33376:25;33404:37;33425:16:::0;33404:18;:37:::1;:::i;:::-;33376:65;;33452:20;33475:31;33488:17;33475:12;:31::i;:::-;33452:54;;33531:12;33547:1;33531:17:::0;33527:86:::1;;-1:-1:-1::0;;33565:7:0::1;:15:::0;;-1:-1:-1;;33565:15:0::1;::::0;;-1:-1:-1;33595:7:0::1;::::0;-1:-1:-1;;33595:7:0::1;33527:86;33693:40;::::0;713:25:1;;;33693:40:0::1;::::0;701:2:1;686:18;33693:40:0::1;;;;;;;33841:10;::::0;33834:43:::1;::::0;-1:-1:-1;;;33834:43:0;;33871:4:::1;33834:43;::::0;::::1;2189:51:1::0;33804:27:0::1;::::0;-1:-1:-1;;;;;33841:10:0::1;::::0;33834:28:::1;::::0;2162:18:1;;33834:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33804:73;;33892:19;33915:1;33892:24:::0;33888:164:::1;;-1:-1:-1::0;;;;;;;;;;;33938:51:0::1;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;34004:7:0::1;:15:::0;;-1:-1:-1;;34004:15:0::1;::::0;;-1:-1:-1;34034:7:0::1;::::0;-1:-1:-1;;;34034:7:0::1;33888:164;34102:24;34172:17:::0;34129:40:::1;34151:18:::0;34129:19;:40:::1;:::i;:::-;:60;;;;:::i;:::-;34102:87:::0;-1:-1:-1;34200:22:0::1;34225:38;34102:87:::0;34225:19;:38:::1;:::i;:::-;34200:63:::0;-1:-1:-1;34355:20:0;;34351:108:::1;;34392:55;34410:16;34428:18;34392:17;:55::i;:::-;34521:18:::0;;34517:90:::1;;34556:39;34580:14;34556:23;:39::i;:::-;-1:-1:-1::0;;34627:7:0::1;:15:::0;;-1:-1:-1;;34627:15:0::1;::::0;;-1:-1:-1;;;;;;32643:2007:0:o;28589:1319::-;1820:13;:11;:13::i;:::-;28699:46:::1;::::0;-1:-1:-1;;;28699:46:0;;28714:4:::1;28699:46;::::0;::::1;2189:51:1::0;;;28677:19:0::1;::::0;28699:31:::1;::::0;2162:18:1;;28699:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28677:68;;28778:1;28764:11;:15;28756:30;;;;-1:-1:-1::0;;;28756:30:0::1;;;;;;;:::i;:::-;28817:1;28805:9;:13;28797:28;;;::::0;-1:-1:-1;;;28797:28:0;;17715:2:1;28797:28:0::1;::::0;::::1;17697:21:1::0;17754:1;17734:18;;;17727:29;-1:-1:-1;;;17772:18:1;;;17765:32;17814:18;;28797:28:0::1;17513:325:1::0;31047:958:0;1820:13;:11;:13::i;:::-;31182:16:::1;::::0;31150:69:::1;::::0;31167:4:::1;::::0;-1:-1:-1;;;;;31182:16:0::1;-1:-1:-1::0;;31150:8:0::1;:69::i;:::-;31298:10;::::0;31326:16:::1;::::0;31291:72:::1;::::0;-1:-1:-1;;;31291:72:0;;-1:-1:-1;;;;;31298:10:0;;::::1;::::0;31291:26:::1;::::0;:72:::1;::::0;31326:16;::::1;::::0;-1:-1:-1;;31345:17:0;31291:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;31291:72:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;31291:72:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;31287:193:::0;::::1;;-1:-1:-1::0;31402:10:0::1;::::0;31422:16:::1;::::0;31384:75:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;31402:10:0;;::::1;::::0;31422:16;::::1;::::0;-1:-1:-1;;31441:17:0;31384:75:::1;:::i;:::-;;;;;;;;31287:193;31555:13;::::0;-1:-1:-1;;;;;31555:13:0::1;:27:::0;31551:447:::1;;31610:10;::::0;31630:13:::1;::::0;31603:60:::1;::::0;-1:-1:-1;;;31603:60:0;;-1:-1:-1;;;;;31610:10:0;;::::1;::::0;31603:26:::1;::::0;:60:::1;::::0;31630:13;::::1;::::0;-1:-1:-1;;31645:17:0;31603:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;31603:60:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;31603:60:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;31599:177:::0;::::1;;-1:-1:-1::0;31706:10:0::1;::::0;31718:13:::1;::::0;31688:63:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;31706:10:0;;::::1;::::0;31718:13;::::1;::::0;-1:-1:-1;;31733:17:0;31688:63:::1;:::i;:::-;;;;;;;;31599:177;31838:13;::::0;31808:63:::1;::::0;-1:-1:-1;;;31808:63:0;;31823:4:::1;::::0;31808:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;31838:13:0::1;::::0;-1:-1:-1;;31853:17:0;31808:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;31808:63:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;31808:63:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;31804:183:::0;::::1;;-1:-1:-1::0;31929:13:0::1;::::0;31896:66:::1;::::0;::::1;::::0;::::1;::::0;31922:4:::1;::::0;-1:-1:-1;;;;;31929:13:0::1;::::0;-1:-1:-1;;31944:17:0;31896:66:::1;:::i;2064:165::-:0;1820:13;:11;:13::i;:::-;-1:-1:-1;;;;;2153:22:0;::::1;2145:37;;;::::0;-1:-1:-1;;;2145:37:0;;19317:2:1;2145:37:0::1;::::0;::::1;19299:21:1::0;19356:1;19336:18;;;19329:29;-1:-1:-1;;;19374:18:1;;;19367:32;19416:18;;2145:37:0::1;19115:325:1::0;2145:37:0::1;2193:28;2212:8;2193:18;:28::i;5119:256::-:0;-1:-1:-1;;;;;5221:19:0;;;;;;:44;;-1:-1:-1;;;;;;5244:21:0;;;;5221:44;5213:59;;;;-1:-1:-1;;;5213:59:0;;19647:2:1;5213:59:0;;;19629:21:1;19686:1;19666:18;;;19659:29;-1:-1:-1;;;19704:18:1;;;19697:32;19746:18;;5213:59:0;19445:325:1;5213:59:0;-1:-1:-1;;;;;5283:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5335:32;;713:25:1;;;5335:32:0;;686:18:1;5335:32:0;;;;;;;5119:256;;;:::o;1956:100::-;2031:10;2020:7;1934:6;;-1:-1:-1;;;;;1934:6:0;;1861:87;2020:7;-1:-1:-1;;;;;2020:21:0;;2012:36;;;;-1:-1:-1;;;2012:36:0;;19977:2:1;2012:36:0;;;19959:21:1;20016:1;19996:18;;;19989:29;-1:-1:-1;;;20034:18:1;;;20027:32;20076:18;;2012:36:0;19775:325:1;5383:311:0;-1:-1:-1;;;;;3697:18:0;;;5484:24;3697:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;5555:26;;;;5547:41;;;;-1:-1:-1;;;5547:41:0;;20307:2:1;5547:41:0;;;20289:21:1;20346:1;20326:18;;;20319:29;-1:-1:-1;;;20364:18:1;;;20357:32;20406:18;;5547:41:0;20105:325:1;5547:41:0;5624:51;5633:5;5640:7;5668:6;5649:16;:25;5624:8;:51::i;12690:2106::-;12878:7;;;;;;;12877:8;:41;;;;-1:-1:-1;1934:6:0;;-1:-1:-1;;;;;12903:15:0;;;1934:6;;12903:15;;12877:41;:72;;;;-1:-1:-1;1934:6:0;;-1:-1:-1;;;;;12936:13:0;;;1934:6;;12936:13;;12877:72;:111;;;;-1:-1:-1;;;;;;12967:21:0;;12983:4;12967:21;;12877:111;:148;;;;-1:-1:-1;13012:13:0;;-1:-1:-1;;;;;13006:19:0;;;13012:13;;13006:19;12877:148;12859:1668;;;13082:17;13122:3;13102:17;9324:1;13102:6;:17;:::i;:::-;:23;;;;:::i;:::-;13082:43;-1:-1:-1;13158:13:0;;13154:1362;;13252:23;13306:3;13278:25;9379:2;13278:9;:25;:::i;:::-;:31;;;;:::i;:::-;13252:57;-1:-1:-1;13328:21:0;13378:3;13352:23;9435:2;13352:9;:23;:::i;:::-;:29;;;;:::i;:::-;13328:53;-1:-1:-1;13476:22:0;13501:18;13510:9;13501:6;:18;:::i;:::-;13476:43;;13599:47;13615:4;13629;13636:9;13599:15;:47::i;:::-;13734:41;13750:4;13756:2;13760:14;13734:15;:41::i;:::-;13890:15;13863:23;;:42;;;;;;;:::i;:::-;;;;;;;;13949:13;13924:21;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;14106:21:0;;14080:23;;9604:12;;14080:47;;;:::i;:::-;:73;14076:170;;14182:4;-1:-1:-1;;;;;14182:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14178:49;;14328:57;14342:4;9497:11;14348:15;14358:4;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;14348:15;:36;;14328:13;:57::i;:::-;14404:53;14418:2;9497:11;14422:13;14432:2;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;14404:53;14494:7;;;;12690:2106;;;:::o;13154:1362::-;13037:1490;12859:1668;14575:33;14591:4;14597:2;14601:6;14575:15;:33::i;:::-;14667:57;14681:4;9497:11;14687:15;14697:4;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;14667:57;14735:53;14749:2;9497:11;14753:13;14763:2;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;20488:942;20548:7;20572:11;20587:1;20572:16;20568:30;;-1:-1:-1;20597:1:0;;20488:942;-1:-1:-1;20488:942:0:o;20568:30::-;20643:16;;;20657:1;20643:16;;;;;;;;20619:21;;20643:16;;;;;;;;;;-1:-1:-1;20643:16:0;20619:40;;20688:4;20670;20675:1;20670:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20670:23:0;;;:7;;;;;;;;;:23;20714:10;;20704:7;;20714:10;;;20704:4;;20714:10;;20704:7;;;;;;:::i;:::-;-1:-1:-1;;;;;20704:20:0;;;:7;;;;;;;;;:20;20789:16;;20935:14;;20789:16;;;;:41;;20845:11;;20789:16;;20916:4;;20935:14;21001:21;:15;21019:3;21001:21;:::i;:::-;20789:244;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20789:244:0;;;;;;;;;;;;:::i;:::-;;;20785:638;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;21304:6:0;21293:18;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;21333:1:0;;20488:942;-1:-1:-1;;;20488:942:0:o;20785:638::-;;;-1:-1:-1;;;;;;;;;;;21373:15:0;;;;22338:2:1;22320:21;;;22377:1;22357:18;;;22350:29;-1:-1:-1;;;22410:2:1;22395:18;;22388:31;22451:2;22436:18;;22136:324;21373:15:0;;;;;;;;-1:-1:-1;21410:1:0;;20488:942;-1:-1:-1;;20488:942:0:o;20785:638::-;21081:20;21104:7;21129:1;21112:7;:14;:18;;;;:::i;:::-;21104:27;;;;;;;;:::i;:::-;;;;;;;21081:50;;21151:41;21166:11;21179:12;21151:41;;;;;;10747:25:1;;;10803:2;10788:18;;10781:34;10735:2;10720:18;;10573:248;21151:41:0;;;;;;;;21214:12;20488:942;-1:-1:-1;;;;20488:942:0:o;20785:638::-;20557:873;20488:942;;;:::o;18694:1000::-;18841:10;;18869:16;;18834:65;;-1:-1:-1;;;18834:65:0;;-1:-1:-1;;;;;18841:10:0;;;;18834:26;;:65;;18869:16;;;18888:10;;18834:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18980:16:0;;;18994:1;18980:16;;;;;;;;18956:21;;18980:16;;;;;;;;-1:-1:-1;;19017:10:0;;19007:7;;;;-1:-1:-1;;;;;;19017:10:0;;19007:7;;-1:-1:-1;19017:10:0;;19007:7;;;;:::i;:::-;-1:-1:-1;;;;;19007:20:0;;;:7;;;;;;;;;;:20;;;;19048:16;;:23;;;-1:-1:-1;;;19048:23:0;;;;:16;;;;;:21;;:23;;;;;19007:7;;19048:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19038:4;19043:1;19038:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19038:33:0;;;:7;;;;;;;;;:33;19096:16;;;:38;19149:10;19096:16;19219:4;19246;19266:21;:15;19284:3;19266:21;:::i;:::-;19096:202;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19096:202:0;;;;;;;;;;;;:::i;:::-;;;19092:595;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;19592:6:0;19581:18;;;;;;:::i;:::-;;;;;;;;19527:84;24954:2105:::1;;24872:2187:::0;:::o;19092:595::-;;;-1:-1:-1;;;;;;;;;;;19638:37:0;;;;22667:2:1;22649:21;;;22706:2;22686:18;;;22679:30;22745:25;22740:2;22725:18;;22718:53;22803:2;22788:18;;22465:347;19638:37:0;;;;;;;;24954:2105:::1;;24872:2187:::0;:::o;19092:595::-;-1:-1:-1;19386:21:0;19426:14;;19422:93;;19461:38;19475:10;19487:11;19461:13;:38::i;21471:772::-;21562:7;:14;21591:17;;;:32;;-1:-1:-1;21612:11:0;;21591:32;21587:45;;;21625:7;21471:772;:::o;21587:45::-;21652:23;21678:21;21687:12;21678:6;:21;:::i;:::-;21652:47;;21714:15;21733:1;21714:20;21710:33;;21736:7;;21471:772;:::o;21710:33::-;21768:9;21763:407;21787:12;21783:1;:16;21763:407;;;21821:14;21838:7;21846:1;21838:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;21838:10:0;;-1:-1:-1;21867:20:0;;;;;:47;;-1:-1:-1;;;;;;21891:23:0;;21909:4;21891:23;;21867:47;:74;;;;-1:-1:-1;21928:13:0;;-1:-1:-1;;;;;21918:23:0;;;21928:13;;21918:23;;21867:74;21863:296;;;21984:10;;21977:52;;-1:-1:-1;;;21977:52:0;;21962:12;;-1:-1:-1;;;;;21984:10:0;;21977:27;;:52;;22005:6;;22013:15;;21977:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;21863:296:0;-1:-1:-1;21801:3:0;;;;:::i;:::-;;;;21763:407;;;-1:-1:-1;22195:40:0;;;10747:25:1;;;10803:2;10788:18;;10781:34;;;22195:40:0;;10720:18:1;22195:40:0;10573:248:1;2237:191:0;2330:6;;;-1:-1:-1;;;;;2347:17:0;;;-1:-1:-1;;;;;;2347:17:0;;;;;;;2380:40;;2330:6;;;2347:17;2330:6;;2380:40;;2311:16;;2380:40;2300:128;2237:191;:::o;4196:507::-;-1:-1:-1;;;;;4293:18:0;;;;;;:38;;-1:-1:-1;;;;;;4315:16:0;;;;4293:38;4285:53;;;;-1:-1:-1;;;4285:53:0;;23159:2:1;4285:53:0;;;23141:21:1;23198:1;23178:18;;;23171:29;-1:-1:-1;;;23216:18:1;;;23209:32;23258:18;;4285:53:0;22957:325:1;4285:53:0;-1:-1:-1;;;;;4420:15:0;;4398:19;4420:15;;;;;;;;;;;4454:21;;;;4446:36;;;;-1:-1:-1;;;4446:36:0;;23489:2:1;4446:36:0;;;23471:21:1;23528:1;23508:18;;;23501:29;-1:-1:-1;;;23546:18:1;;;23539:32;23588:18;;4446:36:0;23287:325:1;4446:36:0;-1:-1:-1;;;;;4518:15:0;;;:9;:15;;;;;;;;;;;4536:20;;;4518:38;;4571:13;;;;;;;;;;:23;;;;;;4621:26;;713:25:1;;;4571:13:0;;4621:26;;686:18:1;4621:26:0;;;;;;;4658:37;24872:2187;14804:779;14899:13;;-1:-1:-1;;;;;14888:24:0;;;14899:13;;14888:24;;;;:52;;-1:-1:-1;;;;;;14916:24:0;;14935:4;14916:24;;14888:52;14884:692;;;14961:14;:36;;;;-1:-1:-1;;;;;;14980:17:0;;;;;;:8;:17;;;;;;;;14979:18;14961:36;14957:608;;;-1:-1:-1;;;;;;15018:17:0;;;;;:8;:17;;;;;:24;;-1:-1:-1;;15018:24:0;15038:4;15018:24;;;;;;15061:7;:21;;;;;;;;;;;;;;-1:-1:-1;;;;;;15061:21:0;;;;;;14804:779::o;14957:608::-;15109:14;15108:15;:36;;;;-1:-1:-1;;;;;;15127:17:0;;;;;;:8;:17;;;;;;;;15108:36;15104:461;;;-1:-1:-1;;;;;15165:17:0;;15185:5;15165:17;;;:8;:17;;;;;:25;;-1:-1:-1;;15165:25:0;;;15273:277;15297:7;:14;15293:18;;15273:277;;;15359:7;-1:-1:-1;;;;;15345:21:0;:7;15353:1;15345:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;15345:10:0;:21;15341:190;;15408:7;15416:14;;:18;;15433:1;;15416:18;:::i;:::-;15408:27;;;;;;;;:::i;:::-;;;;;;;;;;;15395:7;:10;;-1:-1:-1;;;;;15408:27:0;;;;15403:1;;15395:10;;;;;;:::i;:::-;;;;;;;;;:40;;;;;-1:-1:-1;;;;;15395:40:0;;;;;-1:-1:-1;;;;;15395:40:0;;;;;;15462:7;:13;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;15462:13:0;;;;;-1:-1:-1;;;;;;15462:13:0;;;;;;24954:2105:::1;;24872:2187:::0;:::o;15341:190::-;15313:3;;;;:::i;:::-;;;;15273:277;;15104:461;14804:779;;:::o;19768:712::-;19850:22;19912:3;19890:18;9866:2;19912:3;19890:18;:::i;:::-;19875:34;;:11;:34;:::i;:::-;:40;;;;:::i;:::-;19850:65;-1:-1:-1;19926:20:0;19984:3;19962:18;9866:2;19984:3;19962:18;:::i;:::-;19949:32;;:9;:32;:::i;:::-;:38;;;;:::i;:::-;20012:16;;19926:61;;-1:-1:-1;;;;;;20012:16:0;:32;20052:9;20085:4;20105:11;20131:14;19926:61;20085:4;20215:21;:15;20233:3;20215:21;:::i;:::-;20012:235;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20012:235:0;;;;;;;;-1:-1:-1;;20012:235:0;;;;;;;;;;;;:::i;:::-;;;20008:465;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;20373:26;20392:6;20373:26;;;;;;:::i;:::-;;;;;;;;20319:92;20008:465;;;;;20438:23;;;;;22338:2:1;22320:21;;;22377:1;22357:18;;;22350:29;-1:-1:-1;;;22410:2:1;22395:18;;22388:31;22451:2;22436:18;;22136:324;20438:23:0;;;;;;;;20008:465;;;-1:-1:-1;;20268:38:0;;;10747:25:1;;;10803:2;10788:18;;10781:34;;;-1:-1:-1;;;;;;;;;;;20268:38:0;-1:-1:-1;10720:18:1;20268:38:0;10573:248:1;14:548;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:315;953:6;961;1014:2;1002:9;993:7;989:23;985:32;982:52;;;1030:1;1027;1020:12;982:52;1069:9;1056:23;1088:31;1113:5;1088:31;:::i;:::-;1138:5;1190:2;1175:18;;;;1162:32;;-1:-1:-1;;;885:315:1:o;1397:180::-;1456:6;1509:2;1497:9;1488:7;1484:23;1480:32;1477:52;;;1525:1;1522;1515:12;1477:52;-1:-1:-1;1548:23:1;;1397:180;-1:-1:-1;1397:180:1:o;1582:456::-;1659:6;1667;1675;1728:2;1716:9;1707:7;1703:23;1699:32;1696:52;;;1744:1;1741;1734:12;1696:52;1783:9;1770:23;1802:31;1827:5;1802:31;:::i;:::-;1852:5;-1:-1:-1;1909:2:1;1894:18;;1881:32;1922:33;1881:32;1922:33;:::i;:::-;1582:456;;1974:7;;-1:-1:-1;;;2028:2:1;2013:18;;;;2000:32;;1582:456::o;2440:461::-;2493:3;2531:5;2525:12;2558:6;2553:3;2546:19;2584:4;2613:2;2608:3;2604:12;2597:19;;2650:2;2643:5;2639:14;2671:1;2681:195;2695:6;2692:1;2689:13;2681:195;;;2760:13;;-1:-1:-1;;;;;2756:39:1;2744:52;;2816:12;;;;2851:15;;;;2792:1;2710:9;2681:195;;;-1:-1:-1;2892:3:1;;2440:461;-1:-1:-1;;;;;2440:461:1:o;2906:261::-;3085:2;3074:9;3067:21;3048:4;3105:56;3157:2;3146:9;3142:18;3134:6;3105:56;:::i;:::-;3097:64;2906:261;-1:-1:-1;;;2906:261:1:o;3405:247::-;3464:6;3517:2;3505:9;3496:7;3492:23;3488:32;3485:52;;;3533:1;3530;3523:12;3485:52;3572:9;3559:23;3591:31;3616:5;3591:31;:::i;3657:248::-;3725:6;3733;3786:2;3774:9;3765:7;3761:23;3757:32;3754:52;;;3802:1;3799;3792:12;3754:52;-1:-1:-1;;3825:23:1;;;3895:2;3880:18;;;3867:32;;-1:-1:-1;3657:248:1:o;3910:388::-;3978:6;3986;4039:2;4027:9;4018:7;4014:23;4010:32;4007:52;;;4055:1;4052;4045:12;4007:52;4094:9;4081:23;4113:31;4138:5;4113:31;:::i;:::-;4163:5;-1:-1:-1;4220:2:1;4205:18;;4192:32;4233:33;4192:32;4233:33;:::i;:::-;4285:7;4275:17;;;3910:388;;;;;:::o;4537:380::-;4616:1;4612:12;;;;4659;;;4680:61;;4734:4;4726:6;4722:17;4712:27;;4680:61;4787:2;4779:6;4776:14;4756:18;4753:38;4750:161;;4833:10;4828:3;4824:20;4821:1;4814:31;4868:4;4865:1;4858:15;4896:4;4893:1;4886:15;4922:184;4992:6;5045:2;5033:9;5024:7;5020:23;5016:32;5013:52;;;5061:1;5058;5051:12;5013:52;-1:-1:-1;5084:16:1;;4922:184;-1:-1:-1;4922:184:1:o;5111:325::-;5313:2;5295:21;;;5352:1;5332:18;;;5325:29;-1:-1:-1;;;5385:2:1;5370:18;;5363:32;5427:2;5412:18;;5111:325::o;6101:375::-;-1:-1:-1;;;;;6359:15:1;;;6341:34;;6411:15;;;;6406:2;6391:18;;6384:43;6458:2;6443:18;;6436:34;;;;6291:2;6276:18;;6101:375::o;6481:277::-;6548:6;6601:2;6589:9;6580:7;6576:23;6572:32;6569:52;;;6617:1;6614;6607:12;6569:52;6649:9;6643:16;6702:5;6695:13;6688:21;6681:5;6678:32;6668:60;;6724:1;6721;6714:12;7093:274;-1:-1:-1;;;;;7285:32:1;;;;7267:51;;7349:2;7334:18;;7327:34;7255:2;7240:18;;7093:274::o;7372:127::-;7433:10;7428:3;7424:20;7421:1;7414:31;7464:4;7461:1;7454:15;7488:4;7485:1;7478:15;7504:125;7569:9;;;7590:10;;;7587:36;;;7603:18;;:::i;7634:760::-;-1:-1:-1;;;;;8049:15:1;;;8031:34;;8101:15;;;8096:2;8081:18;;8074:43;8148:2;8133:18;;8126:34;;;;8191:2;8176:18;;8169:34;;;;8234:3;8219:19;;8212:35;;;;8011:3;8263:19;;8256:35;8328:15;;;8322:3;8307:19;;8300:44;8375:3;8360:19;;8353:35;;;;7980:3;7965:19;;7634:760::o;8399:306::-;8487:6;8495;8503;8556:2;8544:9;8535:7;8531:23;8527:32;8524:52;;;8572:1;8569;8562:12;8524:52;8601:9;8595:16;8585:26;;8651:2;8640:9;8636:18;8630:25;8620:35;;8695:2;8684:9;8680:18;8674:25;8664:35;;8399:306;;;;;:::o;8710:179::-;8745:3;8787:1;8769:16;8766:23;8763:120;;;8833:1;8830;8827;8812:23;-1:-1:-1;8870:1:1;8864:8;8859:3;8855:18;8763:120;8710:179;:::o;8894:127::-;8955:10;8950:3;8946:20;8943:1;8936:31;8986:4;8983:1;8976:15;9010:4;9007:1;9000:15;9026:249;9136:2;9117:13;;-1:-1:-1;;9113:27:1;9101:40;;9171:18;9156:34;;9192:22;;;9153:62;9150:88;;;9218:18;;:::i;:::-;9254:2;9247:22;-1:-1:-1;;9026:249:1:o;9280:671::-;9319:3;9361:4;9343:16;9340:26;9337:39;;;9280:671;:::o;9337:39::-;9403:2;9397:9;-1:-1:-1;;9468:16:1;9464:25;;9461:1;9397:9;9440:50;9519:4;9513:11;9543:16;9578:18;9649:2;9642:4;9634:6;9630:17;9627:25;9622:2;9614:6;9611:14;9608:45;9605:58;;;9656:5;;;;;9280:671;:::o;9605:58::-;9693:6;9687:4;9683:17;9672:28;;9729:3;9723:10;9756:2;9748:6;9745:14;9742:27;;;9762:5;;;;;;9280:671;:::o;9742:27::-;9846:2;9827:16;9821:4;9817:27;9813:36;9806:4;9797:6;9792:3;9788:16;9784:27;9781:69;9778:82;;;9853:5;;;;;;9280:671;:::o;9778:82::-;9869:57;9920:4;9911:6;9903;9899:19;9895:30;9889:4;9869:57;:::i;:::-;-1:-1:-1;9942:3:1;;9280:671;-1:-1:-1;;;;;9280:671:1:o;14013:401::-;14215:2;14197:21;;;14254:2;14234:18;;;14227:30;14293:34;14288:2;14273:18;;14266:62;-1:-1:-1;;;14359:2:1;14344:18;;14337:35;14404:3;14389:19;;14013:401::o;14419:168::-;14492:9;;;14523;;14540:15;;;14534:22;;14520:37;14510:71;;14561:18;;:::i;14592:217::-;14632:1;14658;14648:132;;14702:10;14697:3;14693:20;14690:1;14683:31;14737:4;14734:1;14727:15;14765:4;14762:1;14755:15;14648:132;-1:-1:-1;14794:9:1;;14592:217::o;14814:128::-;14881:9;;;14902:11;;;14899:37;;;14916:18;;:::i;15937:251::-;16007:6;16060:2;16048:9;16039:7;16035:23;16031:32;16028:52;;;16076:1;16073;16066:12;16028:52;16108:9;16102:16;16127:31;16152:5;16127:31;:::i;17843:607::-;-1:-1:-1;;;;;18202:15:1;;;18184:34;;18249:2;18234:18;;18227:34;;;;18292:2;18277:18;;18270:34;;;;18335:2;18320:18;;18313:34;;;;18384:15;;;18378:3;18363:19;;18356:44;18164:3;18416:19;;18409:35;;;;18133:3;18118:19;;17843:607::o;20435:127::-;20496:10;20491:3;20487:20;20484:1;20477:31;20527:4;20524:1;20517:15;20551:4;20548:1;20541:15;20567:582;20866:6;20855:9;20848:25;20909:6;20904:2;20893:9;20889:18;20882:34;20952:3;20947:2;20936:9;20932:18;20925:31;20829:4;20973:57;21025:3;21014:9;21010:19;21002:6;20973:57;:::i;:::-;-1:-1:-1;;;;;21066:32:1;;;;21061:2;21046:18;;21039:60;-1:-1:-1;21130:3:1;21115:19;21108:35;20965:65;20567:582;-1:-1:-1;;;20567:582:1:o;21154:977::-;21249:6;21280:2;21323;21311:9;21302:7;21298:23;21294:32;21291:52;;;21339:1;21336;21329:12;21291:52;21372:9;21366:16;21401:18;21442:2;21434:6;21431:14;21428:34;;;21458:1;21455;21448:12;21428:34;21496:6;21485:9;21481:22;21471:32;;21541:7;21534:4;21530:2;21526:13;21522:27;21512:55;;21563:1;21560;21553:12;21512:55;21592:2;21586:9;21614:2;21610;21607:10;21604:36;;;21620:18;;:::i;:::-;21666:2;21663:1;21659:10;21649:20;;21698:2;21692:9;21710:40;21746:2;21742;21738:11;21730:6;21710:40;:::i;:::-;21785:18;;;21861:11;;;21857:20;;;21819:15;;;21889:19;;;21886:39;;;21921:1;21918;21911:12;21886:39;21945:11;;;;21965:135;21981:6;21976:3;21973:15;21965:135;;;22047:10;;22035:23;;21998:12;;;;22078;;21965:135;;;-1:-1:-1;22119:6:1;21154:977;-1:-1:-1;;;;;;;21154:977:1:o;22817:135::-;22856:3;22877:17;;;22874:43;;22897:18;;:::i;:::-;-1:-1:-1;22944:1:1;22933:13;;22817:135::o;23617:127::-;23678:10;23673:3;23669:20;23666:1;23659:31;23709:4;23706:1;23699:15;23733:4;23730:1;23723:15
Swarm Source
ipfs://9ebb49f109b10fe59a5ca3dffd3d9f73aa15ba066a3dd8d264fa5df0afa82efa
[ 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.