ERC-20
Overview
Max Total Supply
1,000,000 FARM
Holders
5
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 = 50 * 10**18; // 50 tokens minimum for processing (azaltıldı) 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 = 80; // 80% slippage tolerance (artırıldı) // 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; // Büyük miktarlarda satış için işlem sınırlaması // Eğer bekleyen tokenlar belirli bir miktarı aşarsa, işlemi başlatmadan önce bekle // Bu, arka arkaya büyük satışlarda slippage sorununu önlemeye yardımcı olur if (_pendingLiquidityTokens + _pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS) { // Satış limitini kaldırdık, her miktarda satış yapılabilir // Ancak işlem başına maksimum 500 token işlenir 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); // Büyük miktarlarda işlem için kontrol uint256 totalTokensToSwap = tokensForLiquidity + tokensForAirdrop; // Eğer toplam token miktarı çok büyükse, işlemi daha küçük parçalara böl if (totalTokensToSwap > 500 * 10**18) { // 500 token üst sınırı (azaltıldı) uint256 processAmount = 500 * 10**18; // İşlenecek maksimum miktar (azaltıldı) uint256 remainingAmount = totalTokensToSwap - processAmount; // Kalan miktarı bekleyen tokenlara geri ekle _pendingLiquidityTokens = remainingAmount * tokensForLiquidity / totalTokensToSwap; _pendingAirdropTokens = remainingAmount * tokensForAirdrop / totalTokensToSwap; // İşlenecek miktarları güncelle tokensForLiquidity = processAmount * tokensForLiquidity / totalTokensToSwap; tokensForAirdrop = processAmount * tokensForAirdrop / totalTokensToSwap; totalTokensToSwap = processAmount; } // Process swap uint256 wethReceived = _processSwap(totalTokensToSwap); if (wethReceived == 0) { _inSwap = false; return; } // Treasury wallet'tan WETH transferini bekle emit WaitingForTreasuryTransfer(wethReceived); // 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(); // WETH -> ETH dönüşümü için fee-on-transfer destekli fonksiyonu kullan try metropolisRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( wethAmount, 0, // Minimum çıktı miktarı 0 olarak ayarlandı (slippage toleransını artırmak için) path, address(this), block.timestamp + 1200 // Deadline'ı artırdık ) { // 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 { // Daha yüksek slippage toleransı için minimum miktarları düşür 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 + 1200 // Deadline'ı artırdık ) { 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; // Swap işlemi için minimum çıktı miktarını hesapla // Daha yüksek slippage toleransı için minimum çıktı miktarını düşük tutuyoruz uint256 minAmountOut = 0; // Minimum çıktı miktarı 0 olarak ayarlandı // Swap işleminden önce onayları yenile _approve(address(this), address(metropolisRouter), tokenAmount); // FARMER -> WETH swap işlemi try metropolisRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, minAmountOut, path, treasuryWallet, // WETH'yi treasury wallet'a gönder block.timestamp + 1200 // Deadline'ı artırdık ) { // Swap başarılı oldu, treasury wallet'ın WETH bakiyesini kontrol et uint256 treasuryWethBalance = IERC20(sonicToken).balanceOf(treasuryWallet); emit SwapSuccessful(tokenAmount, treasuryWethBalance); return treasuryWethBalance; } 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
60806040523480156200001157600080fd5b5033604051806040016040528060068152602001652320a926a2a960d11b815250604051806040016040528060048152602001634641524d60e01b815250816003908162000060919062000314565b5060046200006f828262000314565b50506001600555506001600160a01b038116620000b85760405162461bcd60e51b81526020600482015260026024820152614f3160f01b60448201526064015b60405180910390fd5b620000c38162000171565b50600780547395a7e403d7cf20f675ff9273d66e94d35ba49fa36001600160a01b0319918216811790925560088054731570300e9cfec66c9fb0c8bc14366c86eb170ad090831681179091556009805473039e2fb66102314ce7b64ce5ce3e5183bc94ad389084168117909155600b80547395503a306cd81e08c0c43c49faae71165937d1759416841790559091620001673069d3c21bcecceda1000000620001c3565b5050505062000408565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002005760405162461bcd60e51b8152602060048201526002602482015261453360f01b6044820152606401620000af565b8060026000828254620002149190620003e0565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200029b57607f821691505b602082108103620002bc57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200026b57600081815260208120601f850160051c81016020861015620002eb5750805b601f850160051c820191505b818110156200030c57828155600101620002f7565b505050505050565b81516001600160401b0381111562000330576200033062000270565b620003488162000341845462000286565b84620002c2565b602080601f831160018114620003805760008415620003675750858301515b600019600386901b1c1916600185901b1785556200030c565b600085815260208120601f198616915b82811015620003b15788860151825594840194600190910190840162000390565b5085821015620003d05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200040257634e487b7160e01b600052601160045260246000fd5b92915050565b613ef780620004186000396000f3fe6080604052600436106102085760003560e01c80637ac84fc111610118578063ac3508e8116100a0578063dd62ed3e1161006f578063dd62ed3e146105ba578063e3a8fa5514610600578063ed9cacfe14610608578063f2fde38b1461061d578063fd7c9fab1461063d57600080fd5b8063ac3508e814610542578063c0d7865514610555578063c5eaf1e914610575578063d4d7b19a1461058a57600080fd5b80638da5cb5b116100e75780638da5cb5b146104af57806395d89b41146104cd578063975b87e8146104e2578063a8602fea14610502578063a9059cbb1461052257600080fd5b80637ac84fc1146104505780637ff793d314610465578063808a54571461047a5780638129fc1c1461049a57600080fd5b8063397883d21161019b5780635d76b04c1161016a5780635d76b04c146103ae5780635fe8e7cc146103c357806362b6327a146103e557806370a08231146104055780637136982b1461043b57600080fd5b8063397883d214610339578063461a3a951461034e5780634626402b1461036e578063573761981461038e57600080fd5b80631fed05c3116101d75780631fed05c3146102a357806323b872dd146102c55780632a11ced0146102e5578063313ce5671461031d57600080fd5b806306fdde031461021457806308dee2b41461023f578063095ea7b31461025e57806318160ddd1461028e57600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5061022961065d565b6040516102369190613909565b60405180910390f35b34801561024b57600080fd5b50600e545b604051908152602001610236565b34801561026a57600080fd5b5061027e61027936600461396c565b6106ef565b6040519015158152602001610236565b34801561029a57600080fd5b50600254610250565b3480156102af57600080fd5b506102c36102be366004613998565b610709565b005b3480156102d157600080fd5b5061027e6102e03660046139b1565b610ddb565b3480156102f157600080fd5b50610305610300366004613998565b610dff565b6040516001600160a01b039091168152602001610236565b34801561032957600080fd5b5060405160128152602001610236565b34801561034557600080fd5b506102c3610e29565b34801561035a57600080fd5b50600954610305906001600160a01b031681565b34801561037a57600080fd5b50600b54610305906001600160a01b031681565b34801561039a57600080fd5b506102c36103a936600461396c565b610f42565b3480156103ba57600080fd5b50600f54610250565b3480156103cf57600080fd5b506103d8611009565b6040516102369190613a36565b3480156103f157600080fd5b50600754610305906001600160a01b031681565b34801561041157600080fd5b50610250610420366004613a50565b6001600160a01b031660009081526020819052604090205490565b34801561044757600080fd5b50600d54610250565b34801561045c57600080fd5b506102c361106a565b34801561047157600080fd5b506102c3611643565b34801561048657600080fd5b50600a54610305906001600160a01b031681565b3480156104a657600080fd5b506102c361172a565b3480156104bb57600080fd5b506006546001600160a01b0316610305565b3480156104d957600080fd5b50610229611aa0565b3480156104ee57600080fd5b506102c36104fd366004613a6d565b611aaf565b34801561050e57600080fd5b506102c361051d366004613a50565b611fe4565b34801561052e57600080fd5b5061027e61053d36600461396c565b612088565b6102c3610550366004613998565b612096565b34801561056157600080fd5b506102c3610570366004613a50565b612302565b34801561058157600080fd5b506102c3612367565b34801561059657600080fd5b5061027e6105a5366004613a50565b600c6020526000908152604090205460ff1681565b3480156105c657600080fd5b506102506105d5366004613a8f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102c3612652565b34801561061457600080fd5b506102c3612713565b34801561062957600080fd5b506102c3610638366004613a50565b61298c565b34801561064957600080fd5b50600854610305906001600160a01b031681565b60606003805461066c90613ac8565b80601f016020809104026020016040519081016040528092919081815260200182805461069890613ac8565b80156106e55780601f106106ba576101008083540402835291602001916106e5565b820191906000526020600020905b8154815290600101906020018083116106c857829003601f168201915b5050505050905090565b6000336106fd8185856129d8565b60019150505b92915050565b610711612a8a565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa15801561074f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107739190613b02565b90506000811161079e5760405162461bcd60e51b815260040161079590613b1b565b60405180910390fd5b600082116107d35760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610795565b6009546040516370a0823160e01b815233600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa15801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083f9190613b02565b10156108725760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610795565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906108a690339030908790600401613b37565b6020604051808303816000875af11580156108c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e99190613b5b565b61091a5760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610795565b6007546109329030906001600160a01b0316836129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610968929116908690600401613b7d565b6020604051808303816000875af1158015610987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ab9190613b5b565b506007546009546001600160a01b039182169163e8e33700913091168486600080336109d942610258613bac565b6040518963ffffffff1660e01b81526004016109fc989796959493929190613bbf565b6060604051808303816000875af1925050508015610a37575060408051601f3d908101601f19168201909252610a3491810190613c08565b60015b610cbf57610a43613c36565b806308c379a003610b865750610a57613c8d565b80610a625750610b88565b600754610a7b9030906001600160a01b031660006129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610ab292911690600090600401613b7d565b6020604051808303816000875af1158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af59190613b5b565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610b289033908790600401613b7d565b6020604051808303816000875af1158015610b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6b9190613b5b565b508060405162461bcd60e51b81526004016107959190613909565b505b600754610ba19030906001600160a01b031660006129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610bd892911690600090600401613b7d565b6020604051808303816000875af1158015610bf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1b9190613b5b565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610c4e9033908690600401613b7d565b6020604051808303816000875af1158015610c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c919190613b5b565b5060405162461bcd60e51b8152602060048201526002602482015261119360f21b6044820152606401610795565b50506040805183815260208101859052600080516020613ea28339815191529250015b60405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d579190613b02565b90508015610dd65760095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610d919033908590600401613b7d565b6020604051808303816000875af1158015610db0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd49190613b5b565b505b505050565b600033610de9858285612ad8565b610df4858585612b40565b506001949350505050565b600d8181548110610e0f57600080fd5b6000918252602090912001546001600160a01b0316905081565b610e31612a8a565b6000600e541180610e4457506000600f54115b610e755760405162461bcd60e51b815260206004820152600260248201526104e560f41b6044820152606401610795565b600d54610ea95760405162461bcd60e51b815260206004820152600260248201526109c960f31b6044820152606401610795565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ee457600080fd5b505af1925050508015610ef5575060015b610f40577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f54604051610f37929190918252602082015260400190565b60405180910390a15b565b610f4a612a8a565b306001600160a01b03831603610f875760405162461bcd60e51b815260206004820152600260248201526121a360f11b6044820152606401610795565b816001600160a01b031663a9059cbb610fa86006546001600160a01b031690565b836040518363ffffffff1660e01b8152600401610fc6929190613b7d565b6020604051808303816000875af1158015610fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd69190613b5b565b6060600d8054806020026020016040519081016040528092919081815260200182805480156106e557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611043575050505050905090565b6002600554036110a15760405162461bcd60e51b8152602060048201526002602482015261523160f01b6044820152606401610795565b6002600555601054610100900460ff16156110e35760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610795565b6010805461ff001916610100179055600e54600f5481158015611104575080155b1561111b5750506010805461ff001916905561163c565b60408051838152602081018390527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a16000600e819055600f556007546111789030906001600160a01b03166000196129d8565b60006111848284613bac565b9050681b1ae4d6e2ef50000081111561121257681b1ae4d6e2ef50000060006111ad8284613d17565b9050826111ba8683613d2a565b6111c49190613d41565b600e55826111d28583613d2a565b6111dc9190613d41565b600f55826111ea8684613d2a565b6111f49190613d41565b9450826112018584613d2a565b61120b9190613d41565b9350909150505b600061121d82612d98565b90508060000361123c5750506010805461ff00191690555061163c9050565b6040518181527f0feedab68cd870984eb1996ea868562d5f26bf492165c4ff94e43910877acdad9060200160405180910390a1600954600b546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156112c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e49190613b02565b90508181106114f157600954600b54604051636eb1769f60e11b81526001600160a01b0391821660048201523060248201528492919091169063dd62ed3e90604401602060405180830381865afa158015611343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113679190613b02565b1061146f57600954600b546040516323b872dd60e01b81526000926001600160a01b03908116926323b872dd926113a8929091169030908890600401613b37565b6020604051808303816000875af11580156113c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113eb9190613b5b565b90508061146957600080516020613e8283398151915260405161144a9060208082526022908201527f57455448207472616e736665722066726f6d207472656173757279206661696c604082015261195960f21b606082015260800190565b60405180910390a150506010805461ff00191690555061163c92505050565b50611550565b600080516020613e828339815191526040516114d3906020808252602e908201527f54726561737572792077616c6c657420686173206e6f7420617070726f76656460408201526d102ba2aa24103a3930b739b332b960911b606082015260800190565b60405180910390a150506010805461ff00191690555061163c915050565b600080516020613e828339815191526040516114d39060208082526029908201527f54726561737572792077616c6c657420646f6573206e6f74206861766520656e6040820152680deeaced040ae8aa8960bb1b606082015260800190565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bd9190613b02565b9050806000036115e257600080516020613e8283398151915260405161144a90613d63565b6000846115ef8884613d2a565b6115f99190613d41565b905060006116078284613d17565b90508115611619576116198289613008565b80156116285761162881613291565b50506010805461ff00191690555050505050505b6001600555565b600b546001600160a01b031633146116825760405162461bcd60e51b815260206004820152600260248201526113d560f21b6044820152606401610795565b60095460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906116b690309060001990600401613b7d565b6020604051808303816000875af11580156116d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f99190613b5b565b610f405760405162461bcd60e51b815260206004820152600260248201526120a360f11b6044820152606401610795565b611732612a8a565b60105460ff161561176a5760405162461bcd60e51b8152602060048201526002602482015261231960f11b6044820152606401610795565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa1580156117c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ed9190613da8565b600a80546001600160a01b0319166001600160a01b039290921691821790556118a9576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015611864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118889190613da8565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b03166118e65760405162461bcd60e51b8152602060048201526002602482015261463360f01b6044820152606401610795565b6007546119009030906001600160a01b03166000196129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926119389291169060001990600401613b7d565b6020604051808303816000875af1158015611957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197b9190613b5b565b6119ac5760405162461bcd60e51b8152602060048201526002602482015261118d60f21b6044820152606401610795565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926119e49291169060001990600401613b7d565b6020604051808303816000875af1158015611a03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a279190613b5b565b50600a5460405163095ea7b360e01b8152309163095ea7b391611a5a916001600160a01b03169060001990600401613b7d565b6020604051808303816000875af1158015611a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9d9190613b5b565b50565b60606004805461066c90613ac8565b611ab7612a8a565b60008211611ad75760405162461bcd60e51b815260040161079590613b1b565b60008111611b0c5760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610795565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa158015611b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6d9190613b02565b1015611ba05760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610795565b6009546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015611be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0c9190613b02565b1015611c3f5760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610795565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90611c7390339030908690600401613b37565b6020604051808303816000875af1158015611c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb69190613b5b565b611ce75760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610795565b600754611cff9030906001600160a01b0316846129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611d35929116908590600401613b7d565b6020604051808303816000875af1158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190613b5b565b506007546009546001600160a01b039182169163e8e3370091309116858560008033611da642610258613bac565b6040518963ffffffff1660e01b8152600401611dc9989796959493929190613bbf565b6060604051808303816000875af1925050508015611e04575060408051601f3d908101601f19168201909252611e0191810190613c08565b60015b611fbd57611e10613c36565b806308c379a003611ef55750611e24613c8d565b80611e2f5750611ef7565b600754611e489030906001600160a01b031660006129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611e7f92911690600090600401613b7d565b6020604051808303816000875af1158015611e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec29190613b5b565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610b289033908690600401613b7d565b505b600754611f109030906001600160a01b031660006129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611f4792911690600090600401613b7d565b6020604051808303816000875af1158015611f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8a9190613b5b565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610c4e9033908590600401613b7d565b50506040805184815260208101849052600080516020613ea2833981519152925001610ce2565b611fec612a8a565b6001600160a01b0381166120275760405162461bcd60e51b8152602060048201526002602482015261125560f21b6044820152606401610795565b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb4910160405180910390a15050565b6000336106fd818585612b40565b61209e612a8a565b600081116120be5760405162461bcd60e51b815260040161079590613b1b565b600034116120f35760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610795565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa158015612130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121549190613b02565b10156121875760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610795565b60075461219f9030906001600160a01b0316836129d8565b6007546001600160a01b031663f305d719343084600080336121c342610258613bac565b6040518863ffffffff1660e01b81526004016121e496959493929190613dc5565b60606040518083038185885af19350505050801561221f575060408051601f3d908101601f1916820190925261221c91810190613c08565b60015b6122d65761222b613c36565b806308c379a00361228f575061223f613c8d565b8061224a5750612291565b6007546122639030906001600160a01b031660006129d8565b60405133904780156108fc02916000818181858888f19350505050158015610b6b573d6000803e3d6000fd5b505b6007546122aa9030906001600160a01b031660006129d8565b60405133904780156108fc02916000818181858888f19350505050158015610c91573d6000803e3d6000fd5b505060408051838152346020820152600080516020613ea283398151915292500160405180910390a150565b61230a612a8a565b6001600160a01b0381166123455760405162461bcd60e51b815260206004820152600260248201526124a960f11b6044820152606401610795565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b61236f612a8a565b601054610100900460ff16156123ac5760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610795565b6010805461ff0019166101001790556040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa1580156123f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241d9190613b02565b9050600081116124545760405162461bcd60e51b8152602060048201526002602482015261272160f11b6044820152606401610795565b6000612461601980613bac565b61246c601984613d2a565b6124769190613d41565b905060006124848284613d17565b60408051848152602081018390529192507f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a16007546124da9030906001600160a01b03166000196129d8565b60006124e68284613bac565b905060006124f382612d98565b9050806000036125135750506010805461ff001916905550610f40915050565b6040518181527f0feedab68cd870984eb1996ea868562d5f26bf492165c4ff94e43910877acdad9060200160405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561258f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b39190613b02565b9050806000036125f757600080516020613e828339815191526040516125d890613d63565b60405180910390a150506010805461ff001916905550610f4092505050565b6000836126048784613d2a565b61260e9190613d41565b9050600061261c8284613d17565b9050811561262e5761262e8288613008565b801561263d5761263d81613291565b50506010805461ff0019169055505050505050565b61265a612a8a565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015612698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bc9190613b02565b9050600081116126de5760405162461bcd60e51b815260040161079590613b1b565b600034116121875760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610795565b61271b612a8a565b6007546127359030906001600160a01b03166000196129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261276d9291169060001990600401613b7d565b6020604051808303816000875af19250505080156127a8575060408051601f3d908101601f191682019092526127a591810190613b5b565b60015b156127fe57506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca926127f5926001600160a01b039182169291169060001990613b37565b60405180910390a15b600a546001600160a01b031615610f4057600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926128479291169060001990600401613b7d565b6020604051808303816000875af1925050508015612882575060408051601f3d908101601f1916820190925261287f91810190613b5b565b60015b156128d85750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca926128cf926001600160a01b039182169291169060001990613b37565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b39161290a916001600160a01b03169060001990600401613b7d565b6020604051808303816000875af1925050508015612945575060408051601f3d908101601f1916820190925261294291810190613b5b565b60015b15610f405750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca91610f379130916001600160a01b03169060001990613b37565b612994612a8a565b6001600160a01b0381166129cf5760405162461bcd60e51b81526020600482015260026024820152614f3160f01b6044820152606401610795565b611a9d816133f4565b6001600160a01b038316158015906129f857506001600160a01b03821615155b612a295760405162461bcd60e51b8152602060048201526002602482015261114d60f21b6044820152606401610795565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b33612a9d6006546001600160a01b031690565b6001600160a01b031614610f405760405162461bcd60e51b8152602060048201526002602482015261279960f11b6044820152606401610795565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205481811015612b335760405162461bcd60e51b8152602060048201526002602482015261453560f01b6044820152606401610795565b610dd484848484036129d8565b601054610100900460ff16158015612b6657506006546001600160a01b03848116911614155b8015612b8057506006546001600160a01b03838116911614155b8015612b9557506001600160a01b0383163014155b8015612bae5750600a546001600160a01b038381169116145b15612d355760006064612bc2600584613d2a565b612bcc9190613d41565b90508015612d335760006064612be3601984613d2a565b612bed9190613d41565b905060006064612bfe601985613d2a565b612c089190613d41565b90506000612c168486613d17565b9050612c23873086613446565b612c2e878783613446565b82600e6000828254612c409190613bac565b9250508190555081600f6000828254612c599190613bac565b9091555050600f54600e546802b5e3af16b188000091612c7891613bac565b10612ccb57306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cb857600080fd5b505af1925050508015612cc9575060015b505b612cfe87678ac7230489e80000612cf78a6001600160a01b031660009081526020819052604090205490565b101561354b565b612d2a86678ac7230489e80000612cf7896001600160a01b031660009081526020819052604090205490565b50505050505050565b505b612d40838383613446565b612d6c83678ac7230489e80000612cf7866001600160a01b031660009081526020819052604090205490565b610dd682678ac7230489e80000612cf7856001600160a01b031660009081526020819052604090205490565b600081600003612daa57506000919050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ddf57612ddf613e00565b6001600160a01b039283166020918202929092010152600954825191169082906001908110612e1057612e10613e00565b6001600160a01b039283166020918202929092010152600754600091612e3991309116866129d8565b600754600b546001600160a01b0391821691635c11d7959187918591879116612e64426104b0613bac565b6040518663ffffffff1660e01b8152600401612e84959493929190613e16565b600060405180830381600087803b158015612e9e57600080fd5b505af1925050508015612eaf575060015b612f4f57612ebb613c36565b806308c379a003612f0a5750612ecf613c8d565b80612eda5750612f0c565b600080516020613e8283398151915281604051612ef79190613909565b60405180910390a1506000949350505050565b505b600080516020613e82833981519152604051612f3d906020808252600190820152604560f81b604082015260600190565b60405180910390a15060009392505050565b600954600b546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612fa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc49190613b02565b60408051878152602081018390529192507fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc01910160405180910390a1949350505050565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261303e929116908690600401613b7d565b6020604051808303816000875af115801561305d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130819190613b5b565b50604080516002808252606082018352600092602083019080368337505060095482519293506001600160a01b0316918391506000906130c3576130c3613e00565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561311c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131409190613da8565b8160018151811061315357613153613e00565b6001600160a01b0392831660209182029290920101526007541663791ac9478460008430613183426104b0613bac565b6040518663ffffffff1660e01b81526004016131a3959493929190613e16565b600060405180830381600087803b1580156131bd57600080fd5b505af19250505080156131ce575060015b613280576131da613c36565b806308c379a00361322457506131ee613c8d565b806131f95750613226565b600080516020613e82833981519152816040516132169190613909565b60405180910390a150505050565b505b600080516020613e828339815191526040516132739060208082526017908201527f5745544820746f204554482073776170206661696c6564000000000000000000604082015260600190565b60405180910390a1505050565b478015610dd457610dd4818461375e565b600d5480158061329f575081155b156132a8575050565b60006132b48284613d41565b9050806000036132c357505050565b60005b828110156133bd576000600d82815481106132e3576132e3613e00565b6000918252602090912001546001600160a01b03169050801580159061331257506001600160a01b0381163014155b801561332c5750600a546001600160a01b03828116911614155b156133aa5760095460405163a9059cbb60e01b81526000916001600160a01b03169063a9059cbb906133649085908890600401613b7d565b6020604051808303816000875af1158015613383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a79190613b5b565b50505b50806133b581613e52565b9150506132c6565b5060408051848152602081018490527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c2179101613273565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383161580159061346657506001600160a01b03821615155b6134975760405162461bcd60e51b8152602060048201526002602482015261453160f01b6044820152606401610795565b6001600160a01b038316600090815260208190526040902054818110156134e55760405162461bcd60e51b8152602060048201526002602482015261229960f11b6044820152606401610795565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610dd4565b600a546001600160a01b0383811691161480159061357257506001600160a01b0382163014155b1561375a5780801561359d57506001600160a01b0382166000908152600c602052604090205460ff16155b1561360957506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b8015801561362f57506001600160a01b0382166000908152600c602052604090205460ff165b1561375a576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d54811015610dd657826001600160a01b0316600d828154811061367c5761367c613e00565b6000918252602090912001546001600160a01b03160361374857600d80546136a690600190613d17565b815481106136b6576136b6613e00565b600091825260209091200154600d80546001600160a01b0390921691839081106136e2576136e2613e00565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d80548061372157613721613e6b565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061375281613e52565b915050613655565b5050565b6000606461376d605082613d17565b6137779084613d2a565b6137819190613d41565b905060006064613792605082613d17565b61379c9086613d2a565b6137a69190613d41565b6007549091506001600160a01b031663f305d7198530868686836137cc426104b0613bac565b6040518863ffffffff1660e01b81526004016137ed96959493929190613dc5565b60606040518083038185885af193505050508015613828575060408051601f3d908101601f1916820190925261382591810190613c08565b60015b6138e257613834613c36565b806308c379a0036138905750613848613c8d565b806138535750613892565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad816040516138829190613909565b60405180910390a150610dd4565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad6040516138d5906020808252600190820152604560f81b604082015260600190565b60405180910390a1610dd4565b50506040805185815260208101879052600080516020613ea2833981519152925001613216565b600060208083528351808285015260005b818110156139365785810183015185820160400152820161391a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611a9d57600080fd5b6000806040838503121561397f57600080fd5b823561398a81613957565b946020939093013593505050565b6000602082840312156139aa57600080fd5b5035919050565b6000806000606084860312156139c657600080fd5b83356139d181613957565b925060208401356139e181613957565b929592945050506040919091013590565b600081518084526020808501945080840160005b83811015613a2b5781516001600160a01b031687529582019590820190600101613a06565b509495945050505050565b602081526000613a4960208301846139f2565b9392505050565b600060208284031215613a6257600080fd5b8135613a4981613957565b60008060408385031215613a8057600080fd5b50508035926020909101359150565b60008060408385031215613aa257600080fd5b8235613aad81613957565b91506020830135613abd81613957565b809150509250929050565b600181811c90821680613adc57607f821691505b602082108103613afc57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215613b1457600080fd5b5051919050565b602080825260029082015261139560f21b604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215613b6d57600080fd5b81518015158114613a4957600080fd5b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561070357610703613b96565b6001600160a01b039889168152968816602088015260408701959095526060860193909352608085019190915260a084015290921660c082015260e08101919091526101000190565b600080600060608486031215613c1d57600080fd5b8351925060208401519150604084015190509250925092565b600060033d1115613c4f5760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff81118282101715613c8657634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d1015613c9b5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715613ccb57505050505090565b8285019150815181811115613ce35750505050505090565b843d8701016020828501011115613cfd5750505050505090565b613d0c60208286010187613c52565b509095945050505050565b8181038181111561070357610703613b96565b808202811582820484141761070357610703613b96565b600082613d5e57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f4e6f20574554482072656365697665642066726f6d2074726561737572792077604082015264185b1b195d60da1b606082015260800190565b600060208284031215613dba57600080fd5b8151613a4981613957565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a060408201526000613e3560a08301866139f2565b6001600160a01b0394909416606083015250608001529392505050565b600060018201613e6457613e64613b96565b5060010190565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072338f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515ba26469706673582212205476af6120611413f2c78e02a286e2932f2d0a565dfb81b68b75bf364ce031ac64736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102085760003560e01c80637ac84fc111610118578063ac3508e8116100a0578063dd62ed3e1161006f578063dd62ed3e146105ba578063e3a8fa5514610600578063ed9cacfe14610608578063f2fde38b1461061d578063fd7c9fab1461063d57600080fd5b8063ac3508e814610542578063c0d7865514610555578063c5eaf1e914610575578063d4d7b19a1461058a57600080fd5b80638da5cb5b116100e75780638da5cb5b146104af57806395d89b41146104cd578063975b87e8146104e2578063a8602fea14610502578063a9059cbb1461052257600080fd5b80637ac84fc1146104505780637ff793d314610465578063808a54571461047a5780638129fc1c1461049a57600080fd5b8063397883d21161019b5780635d76b04c1161016a5780635d76b04c146103ae5780635fe8e7cc146103c357806362b6327a146103e557806370a08231146104055780637136982b1461043b57600080fd5b8063397883d214610339578063461a3a951461034e5780634626402b1461036e578063573761981461038e57600080fd5b80631fed05c3116101d75780631fed05c3146102a357806323b872dd146102c55780632a11ced0146102e5578063313ce5671461031d57600080fd5b806306fdde031461021457806308dee2b41461023f578063095ea7b31461025e57806318160ddd1461028e57600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5061022961065d565b6040516102369190613909565b60405180910390f35b34801561024b57600080fd5b50600e545b604051908152602001610236565b34801561026a57600080fd5b5061027e61027936600461396c565b6106ef565b6040519015158152602001610236565b34801561029a57600080fd5b50600254610250565b3480156102af57600080fd5b506102c36102be366004613998565b610709565b005b3480156102d157600080fd5b5061027e6102e03660046139b1565b610ddb565b3480156102f157600080fd5b50610305610300366004613998565b610dff565b6040516001600160a01b039091168152602001610236565b34801561032957600080fd5b5060405160128152602001610236565b34801561034557600080fd5b506102c3610e29565b34801561035a57600080fd5b50600954610305906001600160a01b031681565b34801561037a57600080fd5b50600b54610305906001600160a01b031681565b34801561039a57600080fd5b506102c36103a936600461396c565b610f42565b3480156103ba57600080fd5b50600f54610250565b3480156103cf57600080fd5b506103d8611009565b6040516102369190613a36565b3480156103f157600080fd5b50600754610305906001600160a01b031681565b34801561041157600080fd5b50610250610420366004613a50565b6001600160a01b031660009081526020819052604090205490565b34801561044757600080fd5b50600d54610250565b34801561045c57600080fd5b506102c361106a565b34801561047157600080fd5b506102c3611643565b34801561048657600080fd5b50600a54610305906001600160a01b031681565b3480156104a657600080fd5b506102c361172a565b3480156104bb57600080fd5b506006546001600160a01b0316610305565b3480156104d957600080fd5b50610229611aa0565b3480156104ee57600080fd5b506102c36104fd366004613a6d565b611aaf565b34801561050e57600080fd5b506102c361051d366004613a50565b611fe4565b34801561052e57600080fd5b5061027e61053d36600461396c565b612088565b6102c3610550366004613998565b612096565b34801561056157600080fd5b506102c3610570366004613a50565b612302565b34801561058157600080fd5b506102c3612367565b34801561059657600080fd5b5061027e6105a5366004613a50565b600c6020526000908152604090205460ff1681565b3480156105c657600080fd5b506102506105d5366004613a8f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102c3612652565b34801561061457600080fd5b506102c3612713565b34801561062957600080fd5b506102c3610638366004613a50565b61298c565b34801561064957600080fd5b50600854610305906001600160a01b031681565b60606003805461066c90613ac8565b80601f016020809104026020016040519081016040528092919081815260200182805461069890613ac8565b80156106e55780601f106106ba576101008083540402835291602001916106e5565b820191906000526020600020905b8154815290600101906020018083116106c857829003601f168201915b5050505050905090565b6000336106fd8185856129d8565b60019150505b92915050565b610711612a8a565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa15801561074f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107739190613b02565b90506000811161079e5760405162461bcd60e51b815260040161079590613b1b565b60405180910390fd5b600082116107d35760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610795565b6009546040516370a0823160e01b815233600482015283916001600160a01b0316906370a0823190602401602060405180830381865afa15801561081b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061083f9190613b02565b10156108725760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610795565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906108a690339030908790600401613b37565b6020604051808303816000875af11580156108c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e99190613b5b565b61091a5760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610795565b6007546109329030906001600160a01b0316836129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610968929116908690600401613b7d565b6020604051808303816000875af1158015610987573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ab9190613b5b565b506007546009546001600160a01b039182169163e8e33700913091168486600080336109d942610258613bac565b6040518963ffffffff1660e01b81526004016109fc989796959493929190613bbf565b6060604051808303816000875af1925050508015610a37575060408051601f3d908101601f19168201909252610a3491810190613c08565b60015b610cbf57610a43613c36565b806308c379a003610b865750610a57613c8d565b80610a625750610b88565b600754610a7b9030906001600160a01b031660006129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610ab292911690600090600401613b7d565b6020604051808303816000875af1158015610ad1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610af59190613b5b565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610b289033908790600401613b7d565b6020604051808303816000875af1158015610b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6b9190613b5b565b508060405162461bcd60e51b81526004016107959190613909565b505b600754610ba19030906001600160a01b031660006129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392610bd892911690600090600401613b7d565b6020604051808303816000875af1158015610bf7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1b9190613b5b565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610c4e9033908690600401613b7d565b6020604051808303816000875af1158015610c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c919190613b5b565b5060405162461bcd60e51b8152602060048201526002602482015261119360f21b6044820152606401610795565b50506040805183815260208101859052600080516020613ea28339815191529250015b60405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610d33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d579190613b02565b90508015610dd65760095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610d919033908590600401613b7d565b6020604051808303816000875af1158015610db0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd49190613b5b565b505b505050565b600033610de9858285612ad8565b610df4858585612b40565b506001949350505050565b600d8181548110610e0f57600080fd5b6000918252602090912001546001600160a01b0316905081565b610e31612a8a565b6000600e541180610e4457506000600f54115b610e755760405162461bcd60e51b815260206004820152600260248201526104e560f41b6044820152606401610795565b600d54610ea95760405162461bcd60e51b815260206004820152600260248201526109c960f31b6044820152606401610795565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610ee457600080fd5b505af1925050508015610ef5575060015b610f40577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f54604051610f37929190918252602082015260400190565b60405180910390a15b565b610f4a612a8a565b306001600160a01b03831603610f875760405162461bcd60e51b815260206004820152600260248201526121a360f11b6044820152606401610795565b816001600160a01b031663a9059cbb610fa86006546001600160a01b031690565b836040518363ffffffff1660e01b8152600401610fc6929190613b7d565b6020604051808303816000875af1158015610fe5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd69190613b5b565b6060600d8054806020026020016040519081016040528092919081815260200182805480156106e557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611043575050505050905090565b6002600554036110a15760405162461bcd60e51b8152602060048201526002602482015261523160f01b6044820152606401610795565b6002600555601054610100900460ff16156110e35760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610795565b6010805461ff001916610100179055600e54600f5481158015611104575080155b1561111b5750506010805461ff001916905561163c565b60408051838152602081018390527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a16000600e819055600f556007546111789030906001600160a01b03166000196129d8565b60006111848284613bac565b9050681b1ae4d6e2ef50000081111561121257681b1ae4d6e2ef50000060006111ad8284613d17565b9050826111ba8683613d2a565b6111c49190613d41565b600e55826111d28583613d2a565b6111dc9190613d41565b600f55826111ea8684613d2a565b6111f49190613d41565b9450826112018584613d2a565b61120b9190613d41565b9350909150505b600061121d82612d98565b90508060000361123c5750506010805461ff00191690555061163c9050565b6040518181527f0feedab68cd870984eb1996ea868562d5f26bf492165c4ff94e43910877acdad9060200160405180910390a1600954600b546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa1580156112c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e49190613b02565b90508181106114f157600954600b54604051636eb1769f60e11b81526001600160a01b0391821660048201523060248201528492919091169063dd62ed3e90604401602060405180830381865afa158015611343573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113679190613b02565b1061146f57600954600b546040516323b872dd60e01b81526000926001600160a01b03908116926323b872dd926113a8929091169030908890600401613b37565b6020604051808303816000875af11580156113c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113eb9190613b5b565b90508061146957600080516020613e8283398151915260405161144a9060208082526022908201527f57455448207472616e736665722066726f6d207472656173757279206661696c604082015261195960f21b606082015260800190565b60405180910390a150506010805461ff00191690555061163c92505050565b50611550565b600080516020613e828339815191526040516114d3906020808252602e908201527f54726561737572792077616c6c657420686173206e6f7420617070726f76656460408201526d102ba2aa24103a3930b739b332b960911b606082015260800190565b60405180910390a150506010805461ff00191690555061163c915050565b600080516020613e828339815191526040516114d39060208082526029908201527f54726561737572792077616c6c657420646f6573206e6f74206861766520656e6040820152680deeaced040ae8aa8960bb1b606082015260800190565b6009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611599573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115bd9190613b02565b9050806000036115e257600080516020613e8283398151915260405161144a90613d63565b6000846115ef8884613d2a565b6115f99190613d41565b905060006116078284613d17565b90508115611619576116198289613008565b80156116285761162881613291565b50506010805461ff00191690555050505050505b6001600555565b600b546001600160a01b031633146116825760405162461bcd60e51b815260206004820152600260248201526113d560f21b6044820152606401610795565b60095460405163095ea7b360e01b81526001600160a01b039091169063095ea7b3906116b690309060001990600401613b7d565b6020604051808303816000875af11580156116d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116f99190613b5b565b610f405760405162461bcd60e51b815260206004820152600260248201526120a360f11b6044820152606401610795565b611732612a8a565b60105460ff161561176a5760405162461bcd60e51b8152602060048201526002602482015261231960f11b6044820152606401610795565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa1580156117c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ed9190613da8565b600a80546001600160a01b0319166001600160a01b039290921691821790556118a9576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af1158015611864573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118889190613da8565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b03166118e65760405162461bcd60e51b8152602060048201526002602482015261463360f01b6044820152606401610795565b6007546119009030906001600160a01b03166000196129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926119389291169060001990600401613b7d565b6020604051808303816000875af1158015611957573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197b9190613b5b565b6119ac5760405162461bcd60e51b8152602060048201526002602482015261118d60f21b6044820152606401610795565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926119e49291169060001990600401613b7d565b6020604051808303816000875af1158015611a03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a279190613b5b565b50600a5460405163095ea7b360e01b8152309163095ea7b391611a5a916001600160a01b03169060001990600401613b7d565b6020604051808303816000875af1158015611a79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9d9190613b5b565b50565b60606004805461066c90613ac8565b611ab7612a8a565b60008211611ad75760405162461bcd60e51b815260040161079590613b1b565b60008111611b0c5760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610795565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa158015611b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6d9190613b02565b1015611ba05760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610795565b6009546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa158015611be8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0c9190613b02565b1015611c3f5760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610795565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90611c7390339030908690600401613b37565b6020604051808303816000875af1158015611c92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb69190613b5b565b611ce75760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610795565b600754611cff9030906001600160a01b0316846129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611d35929116908590600401613b7d565b6020604051808303816000875af1158015611d54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d789190613b5b565b506007546009546001600160a01b039182169163e8e3370091309116858560008033611da642610258613bac565b6040518963ffffffff1660e01b8152600401611dc9989796959493929190613bbf565b6060604051808303816000875af1925050508015611e04575060408051601f3d908101601f19168201909252611e0191810190613c08565b60015b611fbd57611e10613c36565b806308c379a003611ef55750611e24613c8d565b80611e2f5750611ef7565b600754611e489030906001600160a01b031660006129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611e7f92911690600090600401613b7d565b6020604051808303816000875af1158015611e9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec29190613b5b565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610b289033908690600401613b7d565b505b600754611f109030906001600160a01b031660006129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611f4792911690600090600401613b7d565b6020604051808303816000875af1158015611f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8a9190613b5b565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610c4e9033908590600401613b7d565b50506040805184815260208101849052600080516020613ea2833981519152925001610ce2565b611fec612a8a565b6001600160a01b0381166120275760405162461bcd60e51b8152602060048201526002602482015261125560f21b6044820152606401610795565b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb4910160405180910390a15050565b6000336106fd818585612b40565b61209e612a8a565b600081116120be5760405162461bcd60e51b815260040161079590613b1b565b600034116120f35760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610795565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa158015612130573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121549190613b02565b10156121875760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610795565b60075461219f9030906001600160a01b0316836129d8565b6007546001600160a01b031663f305d719343084600080336121c342610258613bac565b6040518863ffffffff1660e01b81526004016121e496959493929190613dc5565b60606040518083038185885af19350505050801561221f575060408051601f3d908101601f1916820190925261221c91810190613c08565b60015b6122d65761222b613c36565b806308c379a00361228f575061223f613c8d565b8061224a5750612291565b6007546122639030906001600160a01b031660006129d8565b60405133904780156108fc02916000818181858888f19350505050158015610b6b573d6000803e3d6000fd5b505b6007546122aa9030906001600160a01b031660006129d8565b60405133904780156108fc02916000818181858888f19350505050158015610c91573d6000803e3d6000fd5b505060408051838152346020820152600080516020613ea283398151915292500160405180910390a150565b61230a612a8a565b6001600160a01b0381166123455760405162461bcd60e51b815260206004820152600260248201526124a960f11b6044820152606401610795565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b61236f612a8a565b601054610100900460ff16156123ac5760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610795565b6010805461ff0019166101001790556040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa1580156123f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241d9190613b02565b9050600081116124545760405162461bcd60e51b8152602060048201526002602482015261272160f11b6044820152606401610795565b6000612461601980613bac565b61246c601984613d2a565b6124769190613d41565b905060006124848284613d17565b60408051848152602081018390529192507f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a16007546124da9030906001600160a01b03166000196129d8565b60006124e68284613bac565b905060006124f382612d98565b9050806000036125135750506010805461ff001916905550610f40915050565b6040518181527f0feedab68cd870984eb1996ea868562d5f26bf492165c4ff94e43910877acdad9060200160405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561258f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125b39190613b02565b9050806000036125f757600080516020613e828339815191526040516125d890613d63565b60405180910390a150506010805461ff001916905550610f4092505050565b6000836126048784613d2a565b61260e9190613d41565b9050600061261c8284613d17565b9050811561262e5761262e8288613008565b801561263d5761263d81613291565b50506010805461ff0019169055505050505050565b61265a612a8a565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015612698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bc9190613b02565b9050600081116126de5760405162461bcd60e51b815260040161079590613b1b565b600034116121875760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610795565b61271b612a8a565b6007546127359030906001600160a01b03166000196129d8565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261276d9291169060001990600401613b7d565b6020604051808303816000875af19250505080156127a8575060408051601f3d908101601f191682019092526127a591810190613b5b565b60015b156127fe57506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca926127f5926001600160a01b039182169291169060001990613b37565b60405180910390a15b600a546001600160a01b031615610f4057600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926128479291169060001990600401613b7d565b6020604051808303816000875af1925050508015612882575060408051601f3d908101601f1916820190925261287f91810190613b5b565b60015b156128d85750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca926128cf926001600160a01b039182169291169060001990613b37565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b39161290a916001600160a01b03169060001990600401613b7d565b6020604051808303816000875af1925050508015612945575060408051601f3d908101601f1916820190925261294291810190613b5b565b60015b15610f405750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca91610f379130916001600160a01b03169060001990613b37565b612994612a8a565b6001600160a01b0381166129cf5760405162461bcd60e51b81526020600482015260026024820152614f3160f01b6044820152606401610795565b611a9d816133f4565b6001600160a01b038316158015906129f857506001600160a01b03821615155b612a295760405162461bcd60e51b8152602060048201526002602482015261114d60f21b6044820152606401610795565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b33612a9d6006546001600160a01b031690565b6001600160a01b031614610f405760405162461bcd60e51b8152602060048201526002602482015261279960f11b6044820152606401610795565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205481811015612b335760405162461bcd60e51b8152602060048201526002602482015261453560f01b6044820152606401610795565b610dd484848484036129d8565b601054610100900460ff16158015612b6657506006546001600160a01b03848116911614155b8015612b8057506006546001600160a01b03838116911614155b8015612b9557506001600160a01b0383163014155b8015612bae5750600a546001600160a01b038381169116145b15612d355760006064612bc2600584613d2a565b612bcc9190613d41565b90508015612d335760006064612be3601984613d2a565b612bed9190613d41565b905060006064612bfe601985613d2a565b612c089190613d41565b90506000612c168486613d17565b9050612c23873086613446565b612c2e878783613446565b82600e6000828254612c409190613bac565b9250508190555081600f6000828254612c599190613bac565b9091555050600f54600e546802b5e3af16b188000091612c7891613bac565b10612ccb57306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612cb857600080fd5b505af1925050508015612cc9575060015b505b612cfe87678ac7230489e80000612cf78a6001600160a01b031660009081526020819052604090205490565b101561354b565b612d2a86678ac7230489e80000612cf7896001600160a01b031660009081526020819052604090205490565b50505050505050565b505b612d40838383613446565b612d6c83678ac7230489e80000612cf7866001600160a01b031660009081526020819052604090205490565b610dd682678ac7230489e80000612cf7856001600160a01b031660009081526020819052604090205490565b600081600003612daa57506000919050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612ddf57612ddf613e00565b6001600160a01b039283166020918202929092010152600954825191169082906001908110612e1057612e10613e00565b6001600160a01b039283166020918202929092010152600754600091612e3991309116866129d8565b600754600b546001600160a01b0391821691635c11d7959187918591879116612e64426104b0613bac565b6040518663ffffffff1660e01b8152600401612e84959493929190613e16565b600060405180830381600087803b158015612e9e57600080fd5b505af1925050508015612eaf575060015b612f4f57612ebb613c36565b806308c379a003612f0a5750612ecf613c8d565b80612eda5750612f0c565b600080516020613e8283398151915281604051612ef79190613909565b60405180910390a1506000949350505050565b505b600080516020613e82833981519152604051612f3d906020808252600190820152604560f81b604082015260600190565b60405180910390a15060009392505050565b600954600b546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015612fa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc49190613b02565b60408051878152602081018390529192507fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc01910160405180910390a1949350505050565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261303e929116908690600401613b7d565b6020604051808303816000875af115801561305d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130819190613b5b565b50604080516002808252606082018352600092602083019080368337505060095482519293506001600160a01b0316918391506000906130c3576130c3613e00565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561311c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131409190613da8565b8160018151811061315357613153613e00565b6001600160a01b0392831660209182029290920101526007541663791ac9478460008430613183426104b0613bac565b6040518663ffffffff1660e01b81526004016131a3959493929190613e16565b600060405180830381600087803b1580156131bd57600080fd5b505af19250505080156131ce575060015b613280576131da613c36565b806308c379a00361322457506131ee613c8d565b806131f95750613226565b600080516020613e82833981519152816040516132169190613909565b60405180910390a150505050565b505b600080516020613e828339815191526040516132739060208082526017908201527f5745544820746f204554482073776170206661696c6564000000000000000000604082015260600190565b60405180910390a1505050565b478015610dd457610dd4818461375e565b600d5480158061329f575081155b156132a8575050565b60006132b48284613d41565b9050806000036132c357505050565b60005b828110156133bd576000600d82815481106132e3576132e3613e00565b6000918252602090912001546001600160a01b03169050801580159061331257506001600160a01b0381163014155b801561332c5750600a546001600160a01b03828116911614155b156133aa5760095460405163a9059cbb60e01b81526000916001600160a01b03169063a9059cbb906133649085908890600401613b7d565b6020604051808303816000875af1158015613383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133a79190613b5b565b50505b50806133b581613e52565b9150506132c6565b5060408051848152602081018490527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c2179101613273565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383161580159061346657506001600160a01b03821615155b6134975760405162461bcd60e51b8152602060048201526002602482015261453160f01b6044820152606401610795565b6001600160a01b038316600090815260208190526040902054818110156134e55760405162461bcd60e51b8152602060048201526002602482015261229960f11b6044820152606401610795565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610dd4565b600a546001600160a01b0383811691161480159061357257506001600160a01b0382163014155b1561375a5780801561359d57506001600160a01b0382166000908152600c602052604090205460ff16155b1561360957506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b8015801561362f57506001600160a01b0382166000908152600c602052604090205460ff165b1561375a576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d54811015610dd657826001600160a01b0316600d828154811061367c5761367c613e00565b6000918252602090912001546001600160a01b03160361374857600d80546136a690600190613d17565b815481106136b6576136b6613e00565b600091825260209091200154600d80546001600160a01b0390921691839081106136e2576136e2613e00565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d80548061372157613721613e6b565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b8061375281613e52565b915050613655565b5050565b6000606461376d605082613d17565b6137779084613d2a565b6137819190613d41565b905060006064613792605082613d17565b61379c9086613d2a565b6137a69190613d41565b6007549091506001600160a01b031663f305d7198530868686836137cc426104b0613bac565b6040518863ffffffff1660e01b81526004016137ed96959493929190613dc5565b60606040518083038185885af193505050508015613828575060408051601f3d908101601f1916820190925261382591810190613c08565b60015b6138e257613834613c36565b806308c379a0036138905750613848613c8d565b806138535750613892565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad816040516138829190613909565b60405180910390a150610dd4565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad6040516138d5906020808252600190820152604560f81b604082015260600190565b60405180910390a1610dd4565b50506040805185815260208101879052600080516020613ea2833981519152925001613216565b600060208083528351808285015260005b818110156139365785810183015185820160400152820161391a565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114611a9d57600080fd5b6000806040838503121561397f57600080fd5b823561398a81613957565b946020939093013593505050565b6000602082840312156139aa57600080fd5b5035919050565b6000806000606084860312156139c657600080fd5b83356139d181613957565b925060208401356139e181613957565b929592945050506040919091013590565b600081518084526020808501945080840160005b83811015613a2b5781516001600160a01b031687529582019590820190600101613a06565b509495945050505050565b602081526000613a4960208301846139f2565b9392505050565b600060208284031215613a6257600080fd5b8135613a4981613957565b60008060408385031215613a8057600080fd5b50508035926020909101359150565b60008060408385031215613aa257600080fd5b8235613aad81613957565b91506020830135613abd81613957565b809150509250929050565b600181811c90821680613adc57607f821691505b602082108103613afc57634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215613b1457600080fd5b5051919050565b602080825260029082015261139560f21b604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215613b6d57600080fd5b81518015158114613a4957600080fd5b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052601160045260246000fd5b8082018082111561070357610703613b96565b6001600160a01b039889168152968816602088015260408701959095526060860193909352608085019190915260a084015290921660c082015260e08101919091526101000190565b600080600060608486031215613c1d57600080fd5b8351925060208401519150604084015190509250925092565b600060033d1115613c4f5760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff81118282101715613c8657634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d1015613c9b5790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715613ccb57505050505090565b8285019150815181811115613ce35750505050505090565b843d8701016020828501011115613cfd5750505050505090565b613d0c60208286010187613c52565b509095945050505050565b8181038181111561070357610703613b96565b808202811582820484141761070357610703613b96565b600082613d5e57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f4e6f20574554482072656365697665642066726f6d2074726561737572792077604082015264185b1b195d60da1b606082015260800190565b600060208284031215613dba57600080fd5b8151613a4981613957565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a060408201526000613e3560a08301866139f2565b6001600160a01b0394909416606083015250608001529392505050565b600060018201613e6457613e64613b96565b5060010190565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072338f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515ba26469706673582212205476af6120611413f2c78e02a286e2932f2d0a565dfb81b68b75bf364ce031ac64736f6c63430008110033
Deployed Bytecode Sourcemap
9147:28700:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2873:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32670:118;;;;;;;;;;-1:-1:-1;32757:23:0;;32670:118;;;713:25:1;;;701:2;686:18;32670: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;;27218:2187;;;;;;;;;;-1:-1:-1;27218:2187:0;;;;;:::i;:::-;;:::i;:::-;;3938:250;;;;;;;;;;-1:-1:-1;3938:250:0;;;;;:::i;:::-;;:::i;10237:24::-;;;;;;;;;;-1:-1:-1;10237:24:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2207:32:1;;;2189:51;;2177:2;2162:18;10237: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;32969:378:0;;;;;;;;;;;;;:::i;10061:25::-;;;;;;;;;;-1:-1:-1;10061:25:0;;;;-1:-1:-1;;;;;10061:25:0;;;10128:29;;;;;;;;;;-1:-1:-1;10128:29:0;;;;-1:-1:-1;;;;;10128:29:0;;;32436:183;;;;;;;;;;-1:-1:-1;32436:183:0;;;;;:::i;:::-;;:::i;32796:114::-;;;;;;;;;;-1:-1:-1;32881:21:0;;32796:114;;24730:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9963:41::-;;;;;;;;;;-1:-1:-1;9963:41:0;;;;-1:-1:-1;;;;;9963:41:0;;;3274:118;;;;;;;;;;-1:-1:-1;3274:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;24620:98;;;;;;;;;;-1:-1:-1;24696:7:0;:14;24620:98;;15987:4148;;;;;;;;;;;;;:::i;34787:194::-;;;;;;;;;;;;;:::i;10093:28::-;;;;;;;;;;-1:-1:-1;10093:28:0;;;;-1:-1:-1;;;;;10093:28:0;;;11873:836;;;;;;;;;;;;;:::i;1861:87::-;;;;;;;;;;-1:-1:-1;1934:6:0;;-1:-1:-1;;;;;1934:6:0;1861:87;;2972:95;;;;;;;;;;;;;:::i;24881:2260::-;;;;;;;;;;-1:-1:-1;24881:2260:0;;;;;:::i;:::-;;:::i;34400:291::-;;;;;;;;;;-1:-1:-1;34400:291:0;;;;;:::i;:::-;;:::i;3400:182::-;;;;;;;;;;-1:-1:-1;3400:182:0;;;;;:::i;:::-;;:::i;29469:1381::-;;;;;;:::i;:::-;;:::i;32262:166::-;;;;;;;;;;-1:-1:-1;32262:166:0;;;;;:::i;:::-;;:::i;34989:2007::-;;;;;;;;;;;;;:::i;10190:40::-;;;;;;;;;;-1:-1:-1;10190: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;30935:1319;;;:::i;33393:958::-;;;;;;;;;;;;;:::i;2064:165::-;;;;;;;;;;-1:-1:-1;2064:165:0;;;;;:::i;:::-;;:::i;10011:43::-;;;;;;;;;;-1:-1:-1;10011:43:0;;;;-1:-1:-1;;;;;10011: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;27218:2187::-;1820:13;:11;:13::i;:::-;27333:46:::1;::::0;-1:-1:-1;;;27333:46:0;;27348:4:::1;27333:46;::::0;::::1;2189:51:1::0;;;27311:19:0::1;::::0;27333:31:::1;::::0;2162:18:1;;27333:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27311:68;;27412:1;27398:11;:15;27390:30;;;;-1:-1:-1::0;;;27390:30:0::1;;;;;;;:::i;:::-;;;;;;;;;27453:1;27439:11;:15;27431:30;;;::::0;-1:-1:-1;;;27431:30:0;;5643:2:1;27431: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;;27431:30:0::1;5441:325:1::0;27431:30:0::1;27511:10;::::0;27504:40:::1;::::0;-1:-1:-1;;;27504:40:0;;27533:10:::1;27504:40;::::0;::::1;2189:51:1::0;27548:11:0;;-1:-1:-1;;;;;27511:10:0::1;::::0;27504:28:::1;::::0;2162:18:1;;27504:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;27482:107;;;::::0;-1:-1:-1;;;27482:107:0;;5973:2:1;27482: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;;27482:107:0::1;5771:325:1::0;27482:107:0::1;27691:10;::::0;27684:71:::1;::::0;-1:-1:-1;;;27684:71:0;;-1:-1:-1;;;;;27691:10:0;;::::1;::::0;27684:31:::1;::::0;:71:::1;::::0;27716:10:::1;::::0;27736:4:::1;::::0;27743:11;;27684:71:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27662:123;;;::::0;-1:-1:-1;;;27662:123:0;;6965:2:1;27662: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;;27662:123:0::1;6763:325:1::0;27662:123:0::1;27864:16;::::0;27832:63:::1;::::0;27849:4:::1;::::0;-1:-1:-1;;;;;27864:16:0::1;27883:11:::0;27832:8:::1;:63::i;:::-;27913:10;::::0;27941:16:::1;::::0;27906:66:::1;::::0;-1:-1:-1;;;27906:66:0;;-1:-1:-1;;;;;27913:10:0;;::::1;::::0;27906:26:::1;::::0;:66:::1;::::0;27941:16;::::1;::::0;27960:11;;27906:66:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27997:16:0::1;::::0;28069:10:::1;::::0;-1:-1:-1;;;;;27997:16:0;;::::1;::::0;:29:::1;::::0;28049:4:::1;::::0;28069:10:::1;28094:11:::0;28120;27997:16:::1;::::0;28270:10:::1;28295:21;:15;28313:3;28295:21;:::i;:::-;27997:356;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;27997:356:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;27997:356:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;27993:1147;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;28508:16;::::0;28476:53:::1;::::0;28493:4:::1;::::0;-1:-1:-1;;;;;28508:16:0::1;;28476:8;:53::i;:::-;28551:10;::::0;28579:16:::1;::::0;28544:56:::1;::::0;-1:-1:-1;;;28544:56:0;;-1:-1:-1;;;;;28551:10:0;;::::1;::::0;28544:26:::1;::::0;:56:::1;::::0;28579:16;::::1;::::0;28551:10:::1;::::0;28544:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28684:10:0::1;::::0;28677:52:::1;::::0;-1:-1:-1;;;28677:52:0;;-1:-1:-1;;;;;28684:10:0;;::::1;::::0;28677:27:::1;::::0;:52:::1;::::0;28705:10:::1;::::0;28717:11;;28677:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28765:6;28758:14;;-1:-1:-1::0;;;28758:14:0::1;;;;;;;;:::i;27993:1147::-;;;28866:16;::::0;28834:53:::1;::::0;28851:4:::1;::::0;-1:-1:-1;;;;;28866:16:0::1;;28834:8;:53::i;:::-;28909:10;::::0;28937:16:::1;::::0;28902:56:::1;::::0;-1:-1:-1;;;28902:56:0;;-1:-1:-1;;;;;28909:10:0;;::::1;::::0;28902:26:::1;::::0;:56:::1;::::0;28937:16;::::1;::::0;28909:10:::1;::::0;28902:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;29042:10:0::1;::::0;29035:52:::1;::::0;-1:-1:-1;;;29035:52:0;;-1:-1:-1;;;;;29042:10:0;;::::1;::::0;29035:27:::1;::::0;:52:::1;::::0;29063:10:::1;::::0;29075:11;;29035:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;29116:12:0::1;::::0;-1:-1:-1;;;29116:12:0;;10542:2:1;29116:12:0::1;::::0;::::1;10524:21:1::0;10581:1;10561:18;;;10554:29;-1:-1:-1;;;10599:18:1;;;10592:32;10641:18;;29116:12:0::1;10340:325:1::0;27993:1147:0::1;-1:-1:-1::0;;28374:40:0::1;::::0;;10844:25:1;;;10900:2;10885:18;;10878:34;;;-1:-1:-1;;;;;;;;;;;28374:40:0;-1:-1:-1;10817:18:1;28374:40:0::1;;;;;;;;29243:10;::::0;29236:43:::1;::::0;-1:-1:-1;;;29236:43:0;;29273:4:::1;29236:43;::::0;::::1;2189:51:1::0;29210:23:0::1;::::0;-1:-1:-1;;;;;29243:10:0::1;::::0;29236:28:::1;::::0;2162:18:1;;29236:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29210:69:::0;-1:-1:-1;29294:19:0;;29290:108:::1;;29337:10;::::0;29330:56:::1;::::0;-1:-1:-1;;;29330:56:0;;-1:-1:-1;;;;;29337:10:0;;::::1;::::0;29330:27:::1;::::0;:56:::1;::::0;29358:10:::1;::::0;29370:15;;29330:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29290:108;27300:2105;;27218: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;10237:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10237:24:0;;-1:-1:-1;10237:24:0;:::o;32969:378::-;1820:13;:11;:13::i;:::-;33062:1:::1;33036:23;;:27;:56;;;;33091:1;33067:21;;:25;33036:56;33028:71;;;::::0;-1:-1:-1;;;33028:71:0;;11125:2:1;33028:71:0::1;::::0;::::1;11107:21:1::0;11164:1;11144:18;;;11137:29;-1:-1:-1;;;11182:18:1;;;11175:32;11224:18;;33028:71:0::1;10923:325:1::0;33028:71:0::1;33118:7;:14:::0;33110:33:::1;;;::::0;-1:-1:-1;;;33110:33:0;;11455:2:1;33110:33:0::1;::::0;::::1;11437:21:1::0;11494:1;11474:18;;;11467:29;-1:-1:-1;;;11512:18:1;;;11505:32;11554:18;;33110:33:0::1;11253:325:1::0;33110:33:0::1;33158:4;-1:-1:-1::0;;;;;33158:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;33154:186;;33266:62;33281:23;;33306:21;;33266:62;;;;;;10844:25:1::0;;;10900:2;10885:18;;10878:34;10832:2;10817:18;;10670:248;33266:62:0::1;;;;;;;;33154:186;32969:378::o:0;32436:183::-;1820:13;:11;:13::i;:::-;32547:4:::1;-1:-1:-1::0;;;;;32529:23:0;::::1;::::0;32521:38:::1;;;::::0;-1:-1:-1;;;32521:38:0;;11785:2:1;32521:38:0::1;::::0;::::1;11767:21:1::0;11824:1;11804:18;;;11797:29;-1:-1:-1;;;11842:18:1;;;11835:32;11884:18;;32521:38:0::1;11583:325:1::0;32521:38:0::1;32577:6;-1:-1:-1::0;;;;;32570:23:0::1;;32594:7;1934:6:::0;;-1:-1:-1;;;;;1934:6:0;;1861:87;32594:7:::1;32603;32570:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24730:96::-:0;24775:16;24811:7;24804:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24804:14:0;;;;;;;;;;;;;;;;;;;;;;24730:96;:::o;15987:4148::-;1114:1;1260:7;;:19;1252:34;;;;-1:-1:-1;;;1252:34:0;;12115:2:1;1252:34:0;;;12097:21:1;12154:1;12134:18;;;12127:29;-1:-1:-1;;;12172:18:1;;;12165:32;12214:18;;1252:34:0;11913:325:1;1252:34:0;1114:1;1297:7;:18;16067:7:::1;::::0;::::1;::::0;::::1;;;16066:8;16058:23;;;::::0;-1:-1:-1;;;16058:23:0;;12445:2:1;16058:23:0::1;::::0;::::1;12427:21:1::0;12484:1;12464:18;;;12457:29;-1:-1:-1;;;12502:18:1;;;12495:32;12544:18;;16058:23:0::1;12243:325:1::0;16058:23:0::1;16092:7;:14:::0;;-1:-1:-1;;16092:14:0::1;;;::::0;;16156:23:::1;::::0;16217:21:::1;::::0;16263:23;;:48;::::1;;;-1:-1:-1::0;16290:21:0;;16263:48:::1;16259:117;;;-1:-1:-1::0;;16328:7:0::1;:15:::0;;-1:-1:-1;;16328:15:0::1;::::0;;16358:7:::1;;16259:117;16401:52;::::0;;10844:25:1;;;10900:2;10885:18;;10878:34;;;16401:52:0::1;::::0;10817:18:1;16401:52:0::1;;;;;;;16534:1;16508:23;:27:::0;;;16546:21:::1;:25:::0;16654:16:::1;::::0;16622:69:::1;::::0;16639:4:::1;::::0;-1:-1:-1;;;;;16654:16:0::1;-1:-1:-1::0;;16622:8:0::1;:69::i;:::-;16765:25;16793:37;16814:16:::0;16793:18;:37:::1;:::i;:::-;16765:65;;16969:12;16949:17;:32;16945:814;;;17064:12;17040:21;17162:33;17064:12:::0;17162:17;:33:::1;:::i;:::-;17136:59:::0;-1:-1:-1;17349:17:0;17310:36:::1;17328:18:::0;17136:59;17310:36:::1;:::i;:::-;:56;;;;:::i;:::-;17284:23;:82:::0;17442:17;17405:34:::1;17423:16:::0;17405:15;:34:::1;:::i;:::-;:54;;;;:::i;:::-;17381:21;:78:::0;17596:17;17559:34:::1;17575:18:::0;17559:13;:34:::1;:::i;:::-;:54;;;;:::i;:::-;17538:75:::0;-1:-1:-1;17682:17:0;17647:32:::1;17663:16:::0;17647:13;:32:::1;:::i;:::-;:52;;;;:::i;:::-;17628:71:::0;-1:-1:-1;17734:13:0;;-1:-1:-1;;16945:814:0::1;17804:20;17827:31;17840:17;17827:12;:31::i;:::-;17804:54;;17883:12;17899:1;17883:17:::0;17879:86:::1;;-1:-1:-1::0;;17917:7:0::1;:15:::0;;-1:-1:-1;;17917:15:0::1;::::0;;-1:-1:-1;17947:7:0::1;::::0;-1:-1:-1;17947:7:0::1;17879:86;18045:40;::::0;713:25:1;;;18045:40:0::1;::::0;701:2:1;686:18;18045:40:0::1;;;;;;;18213:10;::::0;18235:14:::1;::::0;18206:44:::1;::::0;-1:-1:-1;;;18206:44:0;;-1:-1:-1;;;;;18235:14:0;;::::1;18206:44;::::0;::::1;2189:51:1::0;18176:27:0::1;::::0;18213:10;;;::::1;::::0;18206:28:::1;::::0;2162:18:1;;18206:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18176:74;;18288:12;18265:19;:35;18261:958;;18421:10;::::0;18443:14:::1;::::0;18414:59:::1;::::0;-1:-1:-1;;;18414:59:0;;-1:-1:-1;;;;;18443:14:0;;::::1;18414:59;::::0;::::1;13313:34:1::0;18467:4:0::1;13363:18:1::0;;;13356:43;18477:12:0;;18421:10;;;::::1;::::0;18414:28:::1;::::0;13248:18:1;;18414:59:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:75;18410:654;;18601:10;::::0;18626:14:::1;::::0;18594:76:::1;::::0;-1:-1:-1;;;18594:76:0;;18579:12:::1;::::0;-1:-1:-1;;;;;18601:10:0;;::::1;::::0;18594:31:::1;::::0;:76:::1;::::0;18626:14;;::::1;::::0;18650:4:::1;::::0;18657:12;;18594:76:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18579:91;;18712:7;18707:177;;-1:-1:-1::0;;;;;;;;;;;18749:48:0::1;;;;13612:2:1::0;13594:21;;;13651:2;13631:18;;;13624:30;13690:34;13685:2;13670:18;;13663:62;-1:-1:-1;;;13756:2:1;13741:18;;13734:32;13798:3;13783:19;;13410:398;18749:48:0::1;;;;;;;;-1:-1:-1::0;;18820:7:0::1;:15:::0;;-1:-1:-1;;18820:15:0::1;::::0;;-1:-1:-1;18858:7:0::1;::::0;-1:-1:-1;;;18858:7:0::1;18707:177;18491:408;18261:958;;18410:654;-1:-1:-1::0;;;;;;;;;;;18929:60:0::1;;;;14015:2:1::0;13997:21;;;14054:2;14034:18;;;14027:30;14093:34;14088:2;14073:18;;14066:62;-1:-1:-1;;;14159:2:1;14144:18;;14137:44;14213:3;14198:19;;13813:410;18929:60:0::1;;;;;;;;-1:-1:-1::0;;19008:7:0::1;:15:::0;;-1:-1:-1;;19008:15:0::1;::::0;;-1:-1:-1;19042:7:0::1;::::0;-1:-1:-1;;19042:7:0::1;18261:958;-1:-1:-1::0;;;;;;;;;;;19101:55:0::1;;;;14430:2:1::0;14412:21;;;14469:2;14449:18;;;14442:30;14508:34;14503:2;14488:18;;14481:62;-1:-1:-1;;;14574:2:1;14559:18;;14552:39;14623:3;14608:19;;14228:405;18261:958:0::1;19326:10;::::0;19319:43:::1;::::0;-1:-1:-1;;;19319:43:0;;19356:4:::1;19319:43;::::0;::::1;2189:51:1::0;19289:27:0::1;::::0;-1:-1:-1;;;;;19326:10:0::1;::::0;19319:28:::1;::::0;2162:18:1;;19319:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19289:73;;19377:19;19400:1;19377:24:::0;19373:164:::1;;-1:-1:-1::0;;;;;;;;;;;19423:51:0::1;;;;;:::i;19373:164::-;19587:24;19657:17:::0;19614:40:::1;19636:18:::0;19614:19;:40:::1;:::i;:::-;:60;;;;:::i;:::-;19587:87:::0;-1:-1:-1;19685:22:0::1;19710:38;19587:87:::0;19710:19;:38:::1;:::i;:::-;19685:63:::0;-1:-1:-1;19840:20:0;;19836:108:::1;;19877:55;19895:16;19913:18;19877:17;:55::i;:::-;20006:18:::0;;20002:90:::1;;20041:39;20065:14;20041:23;:39::i;:::-;-1:-1:-1::0;;20112:7:0::1;:15:::0;;-1:-1:-1;;20112:15:0::1;::::0;;-1:-1:-1;;;;;;1326:1:0::1;1070::::0;1338:7;:22;15987:4148::o;34787:194::-;34866:14;;-1:-1:-1;;;;;34866:14:0;34852:10;:28;34844:43;;;;-1:-1:-1;;;34844:43:0;;15246:2:1;34844:43:0;;;15228:21:1;15285:1;15265:18;;;15258:29;-1:-1:-1;;;15303:18:1;;;15296:32;15345:18;;34844:43:0;15044:325:1;34844:43:0;34913:10;;34906:60;;-1:-1:-1;;;34906:60:0;;-1:-1:-1;;;;;34913:10:0;;;;34906:26;;:60;;34941:4;;-1:-1:-1;;34948:17:0;34906:60;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34898:75;;;;-1:-1:-1;;;34898:75:0;;15576:2:1;34898:75:0;;;15558:21:1;15615:1;15595:18;;;15588:29;-1:-1:-1;;;15633:18:1;;;15626:32;15675:18;;34898:75:0;15374:325:1;11873:836:0;1820:13;:11;:13::i;:::-;11934:12:::1;::::0;::::1;;11933:13;11925:28;;;::::0;-1:-1:-1;;;11925:28:0;;15906:2:1;11925:28:0::1;::::0;::::1;15888:21:1::0;15945:1;15925:18;;;15918:29;-1:-1:-1;;;15963:18:1;;;15956:32;16005:18;;11925:28:0::1;15704:325:1::0;11925:28:0::1;11964:12;:19:::0;;-1:-1:-1;;11964:19:0::1;11979:4;11964:19;::::0;;12055:17:::1;::::0;12096:10:::1;::::0;12055:52:::1;::::0;-1:-1:-1;;;12055:52:0;;12089:4:::1;12055:52;::::0;::::1;13313:34:1::0;-1:-1:-1;;;;;12096:10:0;;::::1;13363:18:1::0;;;13356:43;12055:17:0;::::1;::::0;:25:::1;::::0;13248:18:1;;12055:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12039:13;:68:::0;;-1:-1:-1;;;;;;12039:68:0::1;-1:-1:-1::0;;;;;12039:68:0;;;::::1;::::0;;::::1;::::0;;12173:131:::1;;12237:17;::::0;12281:10:::1;::::0;12237:55:::1;::::0;-1:-1:-1;;;12237:55:0;;12274:4:::1;12237:55;::::0;::::1;13313:34:1::0;-1:-1:-1;;;;;12281:10:0;;::::1;13363:18:1::0;;;13356:43;12237:17:0;::::1;::::0;:28:::1;::::0;13248:18:1;;12237:55:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12221:13;:71:::0;;-1:-1:-1;;;;;;12221:71:0::1;-1:-1:-1::0;;;;;12221:71:0;;;::::1;::::0;;;::::1;::::0;;12173:131:::1;12332:13;::::0;-1:-1:-1;;;;;12332:13:0::1;12324:42;;;::::0;-1:-1:-1;;;12324:42:0;;16492:2:1;12324:42:0::1;::::0;::::1;16474:21:1::0;16531:1;16511:18;;;16504:29;-1:-1:-1;;;16549:18:1;;;16542:32;16591:18;;12324:42:0::1;16290:325:1::0;12324:42:0::1;12411:16;::::0;12379:69:::1;::::0;12396:4:::1;::::0;-1:-1:-1;;;;;12411:16:0::1;-1:-1:-1::0;;12379:8:0::1;:69::i;:::-;12484:10;::::0;12512:16:::1;::::0;12477:72:::1;::::0;-1:-1:-1;;;12477:72:0;;-1:-1:-1;;;;;12484:10:0;;::::1;::::0;12477:26:::1;::::0;:72:::1;::::0;12512:16;::::1;::::0;-1:-1:-1;;12531:17:0;12477:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12469:87;;;::::0;-1:-1:-1;;;12469:87:0;;16822:2:1;12469:87:0::1;::::0;::::1;16804:21:1::0;16861:1;16841:18;;;16834:29;-1:-1:-1;;;16879:18:1;;;16872:32;16921:18;;12469:87:0::1;16620:325:1::0;12469:87:0::1;12574:10;::::0;12594:13:::1;::::0;12567:60:::1;::::0;-1:-1:-1;;;12567:60:0;;-1:-1:-1;;;;;12574:10:0;;::::1;::::0;12567:26:::1;::::0;:60:::1;::::0;12594:13;::::1;::::0;-1:-1:-1;;12609:17:0;12567:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;12668:13:0::1;::::0;12638:63:::1;::::0;-1:-1:-1;;;12638:63:0;;12653:4:::1;::::0;12638:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;12668:13:0::1;::::0;-1:-1:-1;;12683:17:0;12638:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11873:836::o:0;2972:95::-;3019:13;3052:7;3045:14;;;;;:::i;24881:2260::-;1820:13;:11;:13::i;:::-;25014:1:::1;25000:11;:15;24992:30;;;;-1:-1:-1::0;;;24992:30:0::1;;;;;;;:::i;:::-;25055:1;25041:11;:15;25033:30;;;::::0;-1:-1:-1;;;25033:30:0;;5643:2:1;25033: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;;25033:30:0::1;5441:325:1::0;25033:30:0::1;25106:46;::::0;-1:-1:-1;;;25106:46:0;;25121:4:::1;25106:46;::::0;::::1;2189:51:1::0;;;25156:11:0;;25106:31:::1;::::0;2162:18:1;;25106:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;25084:113;;;::::0;-1:-1:-1;;;25084:113:0;;17152:2:1;25084:113:0::1;::::0;::::1;17134:21:1::0;17191:1;17171:18;;;17164:29;-1:-1:-1;;;17209:18:1;;;17202:32;17251:18;;25084:113:0::1;16950:325:1::0;25084:113:0::1;25247:10;::::0;25240:40:::1;::::0;-1:-1:-1;;;25240:40:0;;25269:10:::1;25240:40;::::0;::::1;2189:51:1::0;25284:11:0;;-1:-1:-1;;;;;25247:10:0::1;::::0;25240:28:::1;::::0;2162:18:1;;25240:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;25218:107;;;::::0;-1:-1:-1;;;25218:107:0;;5973:2:1;25218: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;;25218:107:0::1;5771:325:1::0;25218:107:0::1;25427:10;::::0;25420:71:::1;::::0;-1:-1:-1;;;25420:71:0;;-1:-1:-1;;;;;25427:10:0;;::::1;::::0;25420:31:::1;::::0;:71:::1;::::0;25452:10:::1;::::0;25472:4:::1;::::0;25479:11;;25420:71:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25398:123;;;::::0;-1:-1:-1;;;25398:123:0;;6965:2:1;25398: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;;25398:123:0::1;6763:325:1::0;25398:123:0::1;25600:16;::::0;25568:63:::1;::::0;25585:4:::1;::::0;-1:-1:-1;;;;;25600:16:0::1;25619:11:::0;25568:8:::1;:63::i;:::-;25649:10;::::0;25677:16:::1;::::0;25642:66:::1;::::0;-1:-1:-1;;;25642:66:0;;-1:-1:-1;;;;;25649:10:0;;::::1;::::0;25642:26:::1;::::0;:66:::1;::::0;25677:16;::::1;::::0;25696:11;;25642:66:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;25733:16:0::1;::::0;25805:10:::1;::::0;-1:-1:-1;;;;;25733:16:0;;::::1;::::0;:29:::1;::::0;25785:4:::1;::::0;25805:10:::1;25830:11:::0;25856;25733:16:::1;::::0;26006:10:::1;26031:21;:15;26049:3;26031:21;:::i;:::-;25733:356;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;25733:356:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;25733:356:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;25729:1147;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;26244:16;::::0;26212:53:::1;::::0;26229:4:::1;::::0;-1:-1:-1;;;;;26244:16:0::1;;26212:8;:53::i;:::-;26287:10;::::0;26315:16:::1;::::0;26280:56:::1;::::0;-1:-1:-1;;;26280:56:0;;-1:-1:-1;;;;;26287:10:0;;::::1;::::0;26280:26:::1;::::0;:56:::1;::::0;26315:16;::::1;::::0;26287:10:::1;::::0;26280:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;26420:10:0::1;::::0;26413:52:::1;::::0;-1:-1:-1;;;26413:52:0;;-1:-1:-1;;;;;26420:10:0;;::::1;::::0;26413:27:::1;::::0;:52:::1;::::0;26441:10:::1;::::0;26453:11;;26413:52:::1;;;:::i;25729:1147::-;;;26602:16;::::0;26570:53:::1;::::0;26587:4:::1;::::0;-1:-1:-1;;;;;26602:16:0::1;;26570:8;:53::i;:::-;26645:10;::::0;26673:16:::1;::::0;26638:56:::1;::::0;-1:-1:-1;;;26638:56:0;;-1:-1:-1;;;;;26645:10:0;;::::1;::::0;26638:26:::1;::::0;:56:::1;::::0;26673:16;::::1;::::0;26645:10:::1;::::0;26638:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;26778:10:0::1;::::0;26771:52:::1;::::0;-1:-1:-1;;;26771:52:0;;-1:-1:-1;;;;;26778:10:0;;::::1;::::0;26771:27:::1;::::0;:52:::1;::::0;26799:10:::1;::::0;26811:11;;26771:52:::1;;;:::i;25729:1147::-;-1:-1:-1::0;;26110:40:0::1;::::0;;10844:25:1;;;10900:2;10885:18;;10878:34;;;-1:-1:-1;;;;;;;;;;;26110:40:0;-1:-1:-1;10817:18:1;26110:40:0::1;10670:248:1::0;34400:291:0;1820:13;:11;:13::i;:::-;-1:-1:-1;;;;;34490:29:0;::::1;34482:44;;;::::0;-1:-1:-1;;;34482:44:0;;17482:2:1;34482:44:0::1;::::0;::::1;17464:21:1::0;17521:1;17501:18;;;17494:29;-1:-1:-1;;;17539:18:1;;;17532:32;17581:18;;34482:44:0::1;17280:325:1::0;34482:44:0::1;34559:14;::::0;;-1:-1:-1;;;;;34584:32:0;;::::1;-1:-1:-1::0;;;;;;34584:32:0;::::1;::::0;::::1;::::0;;;34632:51:::1;::::0;;34559:14;;;::::1;13313:34:1::0;;;13378:2;13363:18;;13356:43;;;;34632:51:0::1;::::0;13248:18:1;34632:51:0::1;;;;;;;34471:220;34400:291:::0;:::o;3400:182::-;3470:4;3503:10;3524:28;3503:10;3541:2;3545:6;3524:9;:28::i;29469:1381::-;1820:13;:11;:13::i;:::-;29586:1:::1;29572:11;:15;29564:30;;;;-1:-1:-1::0;;;29564:30:0::1;;;;;;;:::i;:::-;29625:1;29613:9;:13;29605:28;;;::::0;-1:-1:-1;;;29605:28:0;;17812:2:1;29605:28:0::1;::::0;::::1;17794:21:1::0;17851:1;17831:18;;;17824:29;-1:-1:-1;;;17869:18:1;;;17862:32;17911:18;;29605:28:0::1;17610:325:1::0;29605:28:0::1;29676:46;::::0;-1:-1:-1;;;29676:46:0;;29691:4:::1;29676:46;::::0;::::1;2189:51:1::0;;;29726:11:0;;29676:31:::1;::::0;2162:18:1;;29676:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;29654:113;;;::::0;-1:-1:-1;;;29654:113:0;;17152:2:1;29654:113:0::1;::::0;::::1;17134:21:1::0;17191:1;17171:18;;;17164:29;-1:-1:-1;;;17209:18:1;;;17202:32;17251:18;;29654:113:0::1;16950:325:1::0;29654:113:0::1;29846:16;::::0;29814:63:::1;::::0;29831:4:::1;::::0;-1:-1:-1;;;;;29846:16:0::1;29865:11:::0;29814:8:::1;:63::i;:::-;29902:16;::::0;-1:-1:-1;;;;;29902:16:0::1;:32;29942:9;29975:4;29995:11:::0;29902:16:::1;::::0;30143:10:::1;30168:21;:15;30186:3;30168:21;:::i;:::-;29902:324;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;29902:324:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;29902:324:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;29898:945;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;30379:16;::::0;30347:53:::1;::::0;30364:4:::1;::::0;-1:-1:-1;;;;;30379:16:0::1;;30347:8;:53::i;:::-;30465:51;::::0;30473:10:::1;::::0;30494:21:::1;30465:51:::0;::::1;;;::::0;::::1;::::0;;;30494:21;30473:10;30465:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;29898:945;;;30653:16;::::0;30621:53:::1;::::0;30638:4:::1;::::0;-1:-1:-1;;;;;30653:16:0::1;;30621:8;:53::i;:::-;30739:51;::::0;30747:10:::1;::::0;30768:21:::1;30739:51:::0;::::1;;;::::0;::::1;::::0;;;30768:21;30747:10;30739:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;29898:945;-1:-1:-1::0;;30247:38:0::1;::::0;;10844:25:1;;;30275:9:0::1;10900:2:1::0;10885:18;;10878:34;-1:-1:-1;;;;;;;;;;;30247:38:0;-1:-1:-1;10817:18:1;30247:38:0::1;;;;;;;29469:1381:::0;:::o;32262:166::-;1820:13;:11;:13::i;:::-;-1:-1:-1;;;;;32336:21:0;::::1;32328:36;;;::::0;-1:-1:-1;;;32328:36:0;;18754:2:1;32328:36:0::1;::::0;::::1;18736:21:1::0;18793:1;18773:18;;;18766:29;-1:-1:-1;;;18811:18:1;;;18804:32;18853:18;;32328:36:0::1;18552:325:1::0;32328:36:0::1;32375:16;:45:::0;;-1:-1:-1;;;;;;32375:45:0::1;-1:-1:-1::0;;;;;32375:45:0;;;::::1;::::0;;;::::1;::::0;;32262:166::o;34989:2007::-;1820:13;:11;:13::i;:::-;35065:7:::1;::::0;::::1;::::0;::::1;;;35064:8;35056:23;;;::::0;-1:-1:-1;;;35056:23:0;;12445:2:1;35056:23:0::1;::::0;::::1;12427:21:1::0;12484:1;12464:18;;;12457:29;-1:-1:-1;;;12502:18:1;;;12495:32;12544:18;;35056:23:0::1;12243:325:1::0;35056:23:0::1;35090:7;:14:::0;;-1:-1:-1;;35090:14:0::1;;;::::0;;35200:46:::1;::::0;-1:-1:-1;;;35200:46:0;;35215:4:::1;35200:46;::::0;::::1;2189:51:1::0;;;-1:-1:-1;;35200:31:0::1;::::0;2162:18:1;;35200:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35174:72;;35283:1;35265:15;:19;35257:34;;;::::0;-1:-1:-1;;;35257:34:0;;19084:2:1;35257:34:0::1;::::0;::::1;19066:21:1::0;19123:1;19103:18;;;19096:29;-1:-1:-1;;;19141:18:1;;;19134:32;19183:18;;35257:34:0::1;18882:325:1::0;35257:34:0::1;35312:26;35376:27;9435:2;::::0;35376:27:::1;:::i;:::-;35341:31;9379:2;35341:15:::0;:31:::1;:::i;:::-;:63;;;;:::i;:::-;35312:92:::0;-1:-1:-1;35415:24:0::1;35442:36;35312:92:::0;35442:15;:36:::1;:::i;:::-;35504:52;::::0;;10844:25:1;;;10900:2;10885:18;;10878:34;;;35415:63:0;;-1:-1:-1;35504:52:0::1;::::0;10817:18:1;35504:52:0::1;;;;;;;35639:16;::::0;35607:69:::1;::::0;35624:4:::1;::::0;-1:-1:-1;;;;;35639:16:0::1;-1:-1:-1::0;;35607:8:0::1;:69::i;:::-;35722:25;35750:37;35771:16:::0;35750:18;:37:::1;:::i;:::-;35722:65;;35798:20;35821:31;35834:17;35821:12;:31::i;:::-;35798:54;;35877:12;35893:1;35877:17:::0;35873:86:::1;;-1:-1:-1::0;;35911:7:0::1;:15:::0;;-1:-1:-1;;35911:15:0::1;::::0;;-1:-1:-1;35941:7:0::1;::::0;-1:-1:-1;;35941:7:0::1;35873:86;36039:40;::::0;713:25:1;;;36039:40:0::1;::::0;701:2:1;686:18;36039:40:0::1;;;;;;;36187:10;::::0;36180:43:::1;::::0;-1:-1:-1;;;36180:43:0;;36217:4:::1;36180:43;::::0;::::1;2189:51:1::0;36150:27:0::1;::::0;-1:-1:-1;;;;;36187:10:0::1;::::0;36180:28:::1;::::0;2162:18:1;;36180:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36150:73;;36238:19;36261:1;36238:24:::0;36234:164:::1;;-1:-1:-1::0;;;;;;;;;;;36284:51:0::1;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;36350:7:0::1;:15:::0;;-1:-1:-1;;36350:15:0::1;::::0;;-1:-1:-1;36380:7:0::1;::::0;-1:-1:-1;;;36380:7:0::1;36234:164;36448:24;36518:17:::0;36475:40:::1;36497:18:::0;36475:19;:40:::1;:::i;:::-;:60;;;;:::i;:::-;36448:87:::0;-1:-1:-1;36546:22:0::1;36571:38;36448:87:::0;36571:19;:38:::1;:::i;:::-;36546:63:::0;-1:-1:-1;36701:20:0;;36697:108:::1;;36738:55;36756:16;36774:18;36738:17;:55::i;:::-;36867:18:::0;;36863:90:::1;;36902:39;36926:14;36902:23;:39::i;:::-;-1:-1:-1::0;;36973:7:0::1;:15:::0;;-1:-1:-1;;36973:15:0::1;::::0;;-1:-1:-1;;;;;;34989:2007:0:o;30935:1319::-;1820:13;:11;:13::i;:::-;31045:46:::1;::::0;-1:-1:-1;;;31045:46:0;;31060:4:::1;31045:46;::::0;::::1;2189:51:1::0;;;31023:19:0::1;::::0;31045:31:::1;::::0;2162:18:1;;31045:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31023:68;;31124:1;31110:11;:15;31102:30;;;;-1:-1:-1::0;;;31102:30:0::1;;;;;;;:::i;:::-;31163:1;31151:9;:13;31143:28;;;::::0;-1:-1:-1;;;31143:28:0;;17812:2:1;31143:28:0::1;::::0;::::1;17794:21:1::0;17851:1;17831:18;;;17824:29;-1:-1:-1;;;17869:18:1;;;17862:32;17911:18;;31143:28:0::1;17610:325:1::0;33393:958:0;1820:13;:11;:13::i;:::-;33528:16:::1;::::0;33496:69:::1;::::0;33513:4:::1;::::0;-1:-1:-1;;;;;33528:16:0::1;-1:-1:-1::0;;33496:8:0::1;:69::i;:::-;33644:10;::::0;33672:16:::1;::::0;33637:72:::1;::::0;-1:-1:-1;;;33637:72:0;;-1:-1:-1;;;;;33644:10:0;;::::1;::::0;33637:26:::1;::::0;:72:::1;::::0;33672:16;::::1;::::0;-1:-1:-1;;33691:17:0;33637:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;33637:72:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;33637:72:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;33633:193:::0;::::1;;-1:-1:-1::0;33748:10:0::1;::::0;33768:16:::1;::::0;33730:75:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;33748:10:0;;::::1;::::0;33768:16;::::1;::::0;-1:-1:-1;;33787:17:0;33730:75:::1;:::i;:::-;;;;;;;;33633:193;33901:13;::::0;-1:-1:-1;;;;;33901:13:0::1;:27:::0;33897:447:::1;;33956:10;::::0;33976:13:::1;::::0;33949:60:::1;::::0;-1:-1:-1;;;33949:60:0;;-1:-1:-1;;;;;33956:10:0;;::::1;::::0;33949:26:::1;::::0;:60:::1;::::0;33976:13;::::1;::::0;-1:-1:-1;;33991:17:0;33949:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;33949:60:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;33949:60:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;33945:177:::0;::::1;;-1:-1:-1::0;34052:10:0::1;::::0;34064:13:::1;::::0;34034:63:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;34052:10:0;;::::1;::::0;34064:13;::::1;::::0;-1:-1:-1;;34079:17:0;34034:63:::1;:::i;:::-;;;;;;;;33945:177;34184:13;::::0;34154:63:::1;::::0;-1:-1:-1;;;34154:63:0;;34169:4:::1;::::0;34154:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;34184:13:0::1;::::0;-1:-1:-1;;34199:17:0;34154:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;34154:63:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;34154:63:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;34150:183:::0;::::1;;-1:-1:-1::0;34275:13:0::1;::::0;34242:66:::1;::::0;::::1;::::0;::::1;::::0;34268:4:::1;::::0;-1:-1:-1;;;;;34275:13:0::1;::::0;-1:-1:-1;;34290:17:0;34242: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;;19414:2:1;2145:37:0::1;::::0;::::1;19396:21:1::0;19453:1;19433:18;;;19426:29;-1:-1:-1;;;19471:18:1;;;19464:32;19513:18;;2145:37:0::1;19212: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;;19744:2:1;5213:59:0;;;19726:21:1;19783:1;19763:18;;;19756:29;-1:-1:-1;;;19801:18:1;;;19794:32;19843:18;;5213:59:0;19542: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;;20074:2:1;2012:36:0;;;20056:21:1;20113:1;20093:18;;;20086:29;-1:-1:-1;;;20131:18:1;;;20124:32;20173:18;;2012:36:0;19872: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;;20404:2:1;5547:41:0;;;20386:21:1;20443:1;20423:18;;;20416:29;-1:-1:-1;;;20461:18:1;;;20454:32;20503:18;;5547:41:0;20202:325:1;5547:41:0;5624:51;5633:5;5640:7;5668:6;5649:16;:25;5624:8;:51::i;12717:2475::-;12905:7;;;;;;;12904:8;:41;;;;-1:-1:-1;1934:6:0;;-1:-1:-1;;;;;12930:15:0;;;1934:6;;12930:15;;12904:41;:72;;;;-1:-1:-1;1934:6:0;;-1:-1:-1;;;;;12963:13:0;;;1934:6;;12963:13;;12904:72;:111;;;;-1:-1:-1;;;;;;12994:21:0;;13010:4;12994:21;;12904:111;:148;;;;-1:-1:-1;13039:13:0;;-1:-1:-1;;;;;13033:19:0;;;13039:13;;13033:19;12904:148;12886:2037;;;13109:17;13149:3;13129:17;9324:1;13129:6;:17;:::i;:::-;:23;;;;:::i;:::-;13109:43;-1:-1:-1;13185:13:0;;13181:1731;;13279:23;13333:3;13305:25;9379:2;13305:9;:25;:::i;:::-;:31;;;;:::i;:::-;13279:57;-1:-1:-1;13355:21:0;13405:3;13379:23;9435:2;13379:9;:23;:::i;:::-;:29;;;;:::i;:::-;13355:53;-1:-1:-1;13503:22:0;13528:18;13537:9;13528:6;:18;:::i;:::-;13503:43;;13626:47;13642:4;13656;13663:9;13626:15;:47::i;:::-;13761:41;13777:4;13783:2;13787:14;13761:15;:41::i;:::-;13917:15;13890:23;;:42;;;;;;;:::i;:::-;;;;;;;;13976:13;13951:21;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;;14340:21:0;;14314:23;;9604:11;;14314:47;;;:::i;:::-;:73;14310:332;;14578:4;-1:-1:-1;;;;;14578:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14574:49;;14724:57;14738:4;9497:11;14744:15;14754:4;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;14744:15;:36;;14724:13;:57::i;:::-;14800:53;14814:2;9497:11;14818:13;14828:2;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;14800:53;14890:7;;;;12717:2475;;;:::o;13181:1731::-;13064:1859;12886:2037;14971:33;14987:4;14993:2;14997:6;14971:15;:33::i;:::-;15063:57;15077:4;9497:11;15083:15;15093:4;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;15063:57;15131:53;15145:2;9497:11;15149:13;15159:2;-1:-1:-1;;;;;3366:18:0;3339:7;3366:18;;;;;;;;;;;;3274:118;22307:1469;22367:7;22391:11;22406:1;22391:16;22387:30;;-1:-1:-1;22416:1:0;;22307:1469;-1:-1:-1;22307:1469:0:o;22387:30::-;22462:16;;;22476:1;22462:16;;;;;;;;22438:21;;22462:16;;;;;;;;;;-1:-1:-1;22462:16:0;22438:40;;22507:4;22489;22494:1;22489:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22489:23:0;;;:7;;;;;;;;;:23;22533:10;;22523:7;;22533:10;;;22523:4;;22533:10;;22523:7;;;;;;:::i;:::-;-1:-1:-1;;;;;22523:20:0;;;:7;;;;;;;;;:20;22909:16;;22731:20;;22877:63;;22894:4;;22909:16;22928:11;22877:8;:63::i;:::-;23005:16;;23162:14;;-1:-1:-1;;;;;23005:16:0;;;;:70;;23090:11;;23116:12;;23143:4;;23162:14;23228:22;:15;23246:4;23228:22;:::i;:::-;23005:282;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23001:768;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;23650:6:0;23639:18;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;23679:1:0;;22307:1469;-1:-1:-1;;;;22307:1469:0:o;23001:768::-;;;-1:-1:-1;;;;;;;;;;;23719:15:0;;;;21445:2:1;21427:21;;;21484:1;21464:18;;;21457:29;-1:-1:-1;;;21517:2:1;21502:18;;21495:31;21558:2;21543:18;;21243:324;23719:15:0;;;;;;;;-1:-1:-1;23756:1:0;;22307:1469;-1:-1:-1;;;22307:1469:0:o;23001:768::-;23426:10;;23448:14;;23419:44;;-1:-1:-1;;;23419:44:0;;-1:-1:-1;;;;;23448:14:0;;;23419:44;;;2189:51:1;23389:27:0;;23426:10;;;;;23419:28;;2162:18:1;;23419:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23483:48;;;10844:25:1;;;10900:2;10885:18;;10878:34;;;23389:74:0;;-1:-1:-1;23483:48:0;;10817:18:1;23483:48:0;;;;;;;23553:19;22307:1469;-1:-1:-1;;;;22307:1469:0:o;20202:1204::-;20349:10;;20377:16;;20342:65;;-1:-1:-1;;;20342:65:0;;-1:-1:-1;;;;;20349:10:0;;;;20342:26;;:65;;20377:16;;;20396:10;;20342:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;20488:16:0;;;20502:1;20488:16;;;;;;;;20464:21;;20488:16;;;;;;;;-1:-1:-1;;20525:10:0;;20515:7;;;;-1:-1:-1;;;;;;20525:10:0;;20515:7;;-1:-1:-1;20525:10:0;;20515:7;;;;:::i;:::-;-1:-1:-1;;;;;20515:20:0;;;:7;;;;;;;;;;:20;;;;20556:16;;:23;;;-1:-1:-1;;;20556:23:0;;;;:16;;;;;:21;;:23;;;;;20515:7;;20556:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20546:4;20551:1;20546:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20546:33:0;;;:7;;;;;;;;;:33;20691:16;;;:67;20773:10;20691:16;20904:4;20931;20951:22;:15;20969:4;20951:22;:::i;:::-;20691:319;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20687:712;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;21304:6:0;21293:18;;;;;;:::i;:::-;;;;;;;;21239:84;27300:2105:::1;;27218:2187:::0;:::o;20687:712::-;;;-1:-1:-1;;;;;;;;;;;21350:37:0;;;;22361:2:1;22343:21;;;22400:2;22380:18;;;22373:30;22439:25;22434:2;22419:18;;22412:53;22497:2;22482:18;;22159:347;21350:37:0;;;;;;;;27300:2105:::1;;27218:2187:::0;:::o;20687:712::-;21098:21;21138:14;;21134:93;;21173:38;21187:10;21199:11;21173:13;:38::i;23817:772::-;23908:7;:14;23937:17;;;:32;;-1:-1:-1;23958:11:0;;23937:32;23933:45;;;23971:7;23817:772;:::o;23933:45::-;23998:23;24024:21;24033:12;24024:6;:21;:::i;:::-;23998:47;;24060:15;24079:1;24060:20;24056:33;;24082:7;;23817:772;:::o;24056:33::-;24114:9;24109:407;24133:12;24129:1;:16;24109:407;;;24167:14;24184:7;24192:1;24184:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;24184:10:0;;-1:-1:-1;24213:20:0;;;;;:47;;-1:-1:-1;;;;;;24237:23:0;;24255:4;24237:23;;24213:47;:74;;;;-1:-1:-1;24274:13:0;;-1:-1:-1;;;;;24264:23:0;;;24274:13;;24264:23;;24213:74;24209:296;;;24330:10;;24323:52;;-1:-1:-1;;;24323:52:0;;24308:12;;-1:-1:-1;;;;;24330:10:0;;24323:27;;:52;;24351:6;;24359:15;;24323:52;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;24209:296:0;-1:-1:-1;24147:3:0;;;;:::i;:::-;;;;24109:407;;;-1:-1:-1;24541:40:0;;;10844:25:1;;;10900:2;10885:18;;10878:34;;;24541:40:0;;10817:18:1;24541:40:0;10670: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;;22853:2:1;4285:53:0;;;22835:21:1;22892:1;22872:18;;;22865:29;-1:-1:-1;;;22910:18:1;;;22903:32;22952:18;;4285:53:0;22651: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;;23183:2:1;4446:36:0;;;23165:21:1;23222:1;23202:18;;;23195:29;-1:-1:-1;;;23240:18:1;;;23233:32;23282:18;;4446:36:0;22981: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;27218:2187;15200:779;15295:13;;-1:-1:-1;;;;;15284:24:0;;;15295:13;;15284:24;;;;:52;;-1:-1:-1;;;;;;15312:24:0;;15331:4;15312:24;;15284:52;15280:692;;;15357:14;:36;;;;-1:-1:-1;;;;;;15376:17:0;;;;;;:8;:17;;;;;;;;15375:18;15357:36;15353:608;;;-1:-1:-1;;;;;;15414:17:0;;;;;:8;:17;;;;;:24;;-1:-1:-1;;15414:24:0;15434:4;15414:24;;;;;;15457:7;:21;;;;;;;;;;;;;;-1:-1:-1;;;;;;15457:21:0;;;;;;15200:779::o;15353:608::-;15505:14;15504:15;:36;;;;-1:-1:-1;;;;;;15523:17:0;;;;;;:8;:17;;;;;;;;15504:36;15500:461;;;-1:-1:-1;;;;;15561:17:0;;15581:5;15561:17;;;:8;:17;;;;;:25;;-1:-1:-1;;15561:25:0;;;15669:277;15693:7;:14;15689:18;;15669:277;;;15755:7;-1:-1:-1;;;;;15741:21:0;:7;15749:1;15741:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;15741:10:0;:21;15737:190;;15804:7;15812:14;;:18;;15829:1;;15812:18;:::i;:::-;15804:27;;;;;;;;:::i;:::-;;;;;;;;;;;15791:7;:10;;-1:-1:-1;;;;;15804:27:0;;;;15799:1;;15791:10;;;;;;:::i;:::-;;;;;;;;;:40;;;;;-1:-1:-1;;;;;15791:40:0;;;;;-1:-1:-1;;;;;15791:40:0;;;;;;15858:7;:13;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;15858:13:0;;;;;-1:-1:-1;;;;;;15858:13:0;;;;;;27300:2105:::1;;27218:2187:::0;:::o;15737:190::-;15709:3;;;;:::i;:::-;;;;15669:277;;15500:461;15200:779;;:::o;21480:819::-;21642:22;21704:3;21682:18;9878:2;21704:3;21682:18;:::i;:::-;21667:34;;:11;:34;:::i;:::-;:40;;;;:::i;:::-;21642:65;-1:-1:-1;21718:20:0;21776:3;21754:18;9878:2;21776:3;21754:18;:::i;:::-;21741:32;;:9;:32;:::i;:::-;:38;;;;:::i;:::-;21804:16;;21718:61;;-1:-1:-1;;;;;;21804:16:0;:32;21844:9;21877:4;21897:11;21923:14;21718:61;21877:4;22007:22;:15;22025:4;22007:22;:::i;:::-;21804:262;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21804:262:0;;;;;;;;-1:-1:-1;;21804:262:0;;;;;;;;;;;;:::i;:::-;;;21800:492;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;22192:26;22211:6;22192:26;;;;;;:::i;:::-;;;;;;;;22138:92;21800:492;;;;;22257:23;;;;;21445:2:1;21427:21;;;21484:1;21464:18;;;21457:29;-1:-1:-1;;;21517:2:1;21502:18;;21495:31;21558:2;21543:18;;21243:324;22257:23:0;;;;;;;;21800:492;;;-1:-1:-1;;22087:38:0;;;10844:25:1;;;10900:2;10885:18;;10878:34;;;-1:-1:-1;;;;;;;;;;;22087:38:0;-1:-1:-1;10817:18:1;22087:38:0;10670: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;4750:161;;4537:380;;;:::o;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;9026:346::-;9136:2;9117:13;;-1:-1:-1;;9113:27:1;9101:40;;9171:18;9156:34;;9192:22;;;9153:62;9150:185;;;9257:10;9252:3;9248:20;9245:1;9238:31;9292:4;9289:1;9282:15;9320:4;9317:1;9310:15;9150:185;9351:2;9344:22;-1:-1:-1;;9026:346:1:o;9377:671::-;9416:3;9458:4;9440:16;9437:26;9434:39;;;9377:671;:::o;9434:39::-;9500:2;9494:9;-1:-1:-1;;9565:16:1;9561:25;;9558:1;9494:9;9537:50;9616:4;9610:11;9640:16;9675:18;9746:2;9739:4;9731:6;9727:17;9724:25;9719:2;9711:6;9708:14;9705:45;9702:58;;;9753:5;;;;;9377:671;:::o;9702:58::-;9790:6;9784:4;9780:17;9769:28;;9826:3;9820:10;9853:2;9845:6;9842:14;9839:27;;;9859:5;;;;;;9377:671;:::o;9839:27::-;9943:2;9924:16;9918:4;9914:27;9910:36;9903:4;9894:6;9889:3;9885:16;9881:27;9878:69;9875:82;;;9950:5;;;;;;9377:671;:::o;9875:82::-;9966:57;10017:4;10008:6;10000;9996:19;9992:30;9986:4;9966:57;:::i;:::-;-1:-1:-1;10039:3:1;;9377:671;-1:-1:-1;;;;;9377:671:1:o;12573:128::-;12640:9;;;12661:11;;;12658:37;;;12675:18;;:::i;12706:168::-;12779:9;;;12810;;12827:15;;;12821:22;;12807:37;12797:71;;12848:18;;:::i;12879:217::-;12919:1;12945;12935:132;;12989:10;12984:3;12980:20;12977:1;12970:31;13024:4;13021:1;13014:15;13052:4;13049:1;13042:15;12935:132;-1:-1:-1;13081:9:1;;12879:217::o;14638:401::-;14840:2;14822:21;;;14879:2;14859:18;;;14852:30;14918:34;14913:2;14898:18;;14891:62;-1:-1:-1;;;14984:2:1;14969:18;;14962:35;15029:3;15014:19;;14638:401::o;16034:251::-;16104:6;16157:2;16145:9;16136:7;16132:23;16128:32;16125:52;;;16173:1;16170;16163:12;16125:52;16205:9;16199:16;16224:31;16249:5;16224:31;:::i;17940:607::-;-1:-1:-1;;;;;18299:15:1;;;18281:34;;18346:2;18331:18;;18324:34;;;;18389:2;18374:18;;18367:34;;;;18432:2;18417:18;;18410:34;;;;18481:15;;;18475:3;18460:19;;18453:44;18261:3;18513:19;;18506:35;;;;18230:3;18215:19;;17940:607::o;20532:127::-;20593:10;20588:3;20584:20;20581:1;20574:31;20624:4;20621:1;20614:15;20648:4;20645:1;20638:15;20664:574;20955:6;20944:9;20937:25;20998:6;20993:2;20982:9;20978:18;20971:34;21041:3;21036:2;21025:9;21021:18;21014:31;20918:4;21062:57;21114:3;21103:9;21099:19;21091:6;21062:57;:::i;:::-;-1:-1:-1;;;;;21155:32:1;;;;21150:2;21135:18;;21128:60;-1:-1:-1;21219:3:1;21204:19;21197:35;21054:65;20664:574;-1:-1:-1;;;20664:574:1:o;22511:135::-;22550:3;22571:17;;;22568:43;;22591:18;;:::i;:::-;-1:-1:-1;22638:1:1;22627:13;;22511:135::o;23311:127::-;23372:10;23367:3;23363:20;23360:1;23353:31;23403:4;23400:1;23393:15;23427:4;23424:1;23417:15
Swarm Source
ipfs://5476af6120611413f2c78e02a286e2932f2d0a565dfb81b68b75bf364ce031ac
[ 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.