More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 5 from a total of 5 transactions
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
11529466 | 6 days ago | 60 S |
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-04 */ /** *Submitted for verification at SonicScan.org on 2025-03-02 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.17; // Slippage sabiti - %50 slippage toleransı uint256 constant MAX_SLIPPAGE = 50; // 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), "T1"); require(to != address(0), "T2"); require(amount > 0, "T3"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "T4"); 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 - Metropolis'in desteklediği fonksiyon adlarını kullanıyoruz 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; } 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; } // SwapProxy interface interface ISwapProxy { function sendETHToFarmer() external; function farmerContract() external view returns (address); function setFarmerContract(address farmerContract) 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 = 20 * 10**18; // 20 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 // 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); event SwapProxySet(address indexed proxyAddress); event ManualSwapCompleted(uint256 tokenAmount, uint256 ethReceived); event ETHReceived(address indexed sender, uint256 amount); uint256 private _pendingLiquidityTokens; uint256 private _pendingAirdropTokens; bool private _initialized; bool private _inSwap; // Proxy kontrat adresi address public swapProxy; bool public swapProxySet; // Değişkenler bool public tradingEnabled; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcludedFromTradingRestriction; mapping(address => bool) private _isAllowedToSell; mapping(address => bool) private _isAllowedToBuy; 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; // Trading'i her zaman etkin yap tradingEnabled = true; // Kontrat adresini fee'den muaf tut _isExcludedFromFee[address(this)] = true; // Owner'ı fee'den muaf tut _isExcludedFromFee[msg.sender] = true; // Owner'ı trading kısıtlamalarından muaf tut _isExcludedFromTradingRestriction[msg.sender] = true; // Owner'a satış izni ver _isAllowedToSell[msg.sender] = true; // Owner'a alım izni ver _isAllowedToBuy[msg.sender] = true; _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"); // Likidite çiftini fee'den muaf tut _isExcludedFromFee[liquidityPair] = true; // Likidite çiftini trading kısıtlamalarından muaf tut _isExcludedFromTradingRestriction[liquidityPair] = true; _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 _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { // Satış işlemlerinde her zaman vergi al (recipient == liquidityPair) bool shouldTakeFee = takeFee || recipient == liquidityPair; if (shouldTakeFee && !_inSwap) { // 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(sender, address(this), taxAmount); // Kalan miktarı alıcıya aktar super._transfer(sender, recipient, transferAmount); // Bekleyen miktarları güncelle _pendingLiquidityTokens += liquidityTokens; _pendingAirdropTokens += airdropTokens; // Holder durumunu güncelle _updateHolder(sender, balanceOf(sender) >= MIN_HOLDER_AMOUNT); _updateHolder(recipient, balanceOf(recipient) >= MIN_HOLDER_AMOUNT); // Otomatik likidite ve airdrop işlemini tetikle // Sadece satış işlemlerinde if (recipient == liquidityPair && !_inSwap && _pendingLiquidityTokens + _pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS) { // Kontrat çağrısı yerine doğrudan fonksiyonu çağır try this.processLiquidityAndAirdrop() { // Başarılı } catch { // Hata durumunda sessizce devam et } } return; } } // Normal transfer super._transfer(sender, recipient, amount); // Holder durumunu güncelle _updateHolder(sender, balanceOf(sender) >= MIN_HOLDER_AMOUNT); _updateHolder(recipient, balanceOf(recipient) >= 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"); // Bekleyen token miktarını kontrol et require(_pendingLiquidityTokens + _pendingAirdropTokens > 0, "No pending tokens"); _inSwap = true; uint256 tokensForLiquidity = _pendingLiquidityTokens; uint256 tokensForAirdrop = _pendingAirdropTokens; if (tokensForLiquidity == 0 && tokensForAirdrop == 0) { _inSwap = false; return; } // Maksimum işlem miktarını sınırla uint256 maxProcessAmount = 100 * 10**18; // Maksimum 100 token işlenecek (artırıldı) uint256 totalTokensToSwap = tokensForLiquidity + tokensForAirdrop; // Eğer toplam miktar maksimum miktardan fazlaysa, sadece bir kısmını işle if (totalTokensToSwap > maxProcessAmount) { // Oranları koru uint256 ratio = maxProcessAmount * 1e18 / totalTokensToSwap; tokensForLiquidity = tokensForLiquidity * ratio / 1e18; tokensForAirdrop = tokensForAirdrop * ratio / 1e18; totalTokensToSwap = tokensForLiquidity + tokensForAirdrop; // Bekleyen miktarları güncelle _pendingLiquidityTokens -= tokensForLiquidity; _pendingAirdropTokens -= tokensForAirdrop; } else { // Tüm bekleyen miktarları sıfırla _pendingLiquidityTokens = 0; _pendingAirdropTokens = 0; } emit ProcessStarted(tokensForLiquidity, tokensForAirdrop); // Kontrat bakiyesini kontrol et uint256 contractBalance = IERC20(address(this)).balanceOf(address(this)); if (contractBalance < totalTokensToSwap) { // Eğer kontrat bakiyesi yetersizse, işlemi iptal et ve bekleyen miktarları geri ekle _pendingLiquidityTokens += tokensForLiquidity; _pendingAirdropTokens += tokensForAirdrop; _inSwap = false; emit SwapFailed("Insufficient contract balance"); return; } // Refresh approvals _approve(address(this), address(metropolisRouter), type(uint256).max); // Başlangıç ETH bakiyesini kaydet uint256 initialEthBalance = address(this).balance; // Process swap - ETH doğrudan kontrata gelecek uint256 ethReceived = _processSwap(totalTokensToSwap); if (ethReceived == 0) { // Eğer swap başarısız olursa, bekleyen miktarları geri ekle _pendingLiquidityTokens += tokensForLiquidity; _pendingAirdropTokens += tokensForAirdrop; _inSwap = false; emit SwapFailed("Swap failed, no ETH received"); return; } // Kontratın ETH bakiyesini kontrol et uint256 contractEthBalance = address(this).balance; if (contractEthBalance <= initialEthBalance) { // Eğer ETH alınmadıysa, bekleyen miktarları geri ekle _pendingLiquidityTokens += tokensForLiquidity; _pendingAirdropTokens += tokensForAirdrop; emit SwapFailed("No ETH received from swap"); _inSwap = false; return; } // Gerçek ETH miktarını hesapla uint256 actualEthReceived = contractEthBalance - initialEthBalance; // Calculate amounts uint256 ethForLiquidity = actualEthReceived * tokensForLiquidity / totalTokensToSwap; uint256 ethForAirdrop = actualEthReceived - ethForLiquidity; // ETH ile likidite ekle if (ethForLiquidity > 0) { try metropolisRouter.addLiquidityETH{value: ethForLiquidity}( address(this), tokensForLiquidity, 0, // Minimum token miktarı 0, // Minimum ETH miktarı treasuryWallet, // LP tokenleri treasury'ye gönder block.timestamp + 600 // 10 dakika deadline ) returns (uint256 amountToken, uint256 amountETH, uint256 liquidity) { emit LiquidityAdded(amountToken, amountETH); // liquidity değişkeni kullanılmıyor, ama uyarıyı önlemek için burada belirtiyoruz if (liquidity > 0) { // LP token miktarı pozitif, işlem başarılı } } catch Error(string memory reason) { emit LiquidityAddFailed(reason); } catch { emit LiquidityAddFailed("Unknown error in addLiquidity"); } } // Process airdrop with ETH if (ethForAirdrop > 0) { _processAirdropWithETH(ethForAirdrop); } _inSwap = false; } function _processSwap(uint256 tokenAmount) private returns (uint256) { if (tokenAmount == 0) return 0; require(swapProxySet, "Swap proxy not set"); // Daha küçük bir miktarla başla uint256 adjustedAmount = tokenAmount; if (adjustedAmount > 50 * 10**18) { adjustedAmount = 50 * 10**18; // Maksimum 50 token swap et } address[] memory path = new address[](2); path[0] = address(this); path[1] = metropolisRouter.WETH(); // Swap işlemi için minimum çıktı miktarını hesapla // Daha yüksek slippage toleransı için minimum çıktı miktarını 0 olarak ayarlıyoruz uint256 minAmountOut = 0; // Minimum çıktı miktarı 0 olarak ayarlandı // Swap işleminden önce onayları yenile - daha yüksek bir miktar kullanıyoruz _approve(address(this), address(metropolisRouter), type(uint256).max); // Gas limitini artır ve deadline'ı uzat uint256 deadline = block.timestamp + 3600; // 1 saat // Başlangıç ETH bakiyesini kaydet uint256 initialEthBalance = address(this).balance; // Önce swapExactTokensForETHSupportingFeeOnTransferTokens fonksiyonunu deneyelim try metropolisRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( adjustedAmount, minAmountOut, path, swapProxy, // ETH'yi proxy kontrata gönder deadline ) { // İşlem başarılı, proxy'den ETH'yi alalım return _processProxyTransfer(initialEthBalance, adjustedAmount, tokenAmount); } catch Error(string memory reason) { // Eğer bu fonksiyon çalışmazsa, alternatif fonksiyonu deneyelim emit SwapFailed(string(abi.encodePacked("First swap method failed: ", reason))); // Alternatif fonksiyonu dene - swapExactTokensForETHSupportingFeeOnTransferTokens kullan try metropolisRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( adjustedAmount, minAmountOut, path, swapProxy, // ETH'yi proxy kontrata gönder deadline ) { // İşlem başarılı, proxy'den ETH'yi alalım return _processProxyTransfer(initialEthBalance, adjustedAmount, tokenAmount); } catch Error(string memory altReason) { // Hata mesajını kontrol et if (bytes(altReason).length > 0) { // Eğer hata "E5" ise, daha küçük bir miktarla tekrar dene if (keccak256(bytes(altReason)) == keccak256(bytes("E5"))) { // Onayları tekrar yenile _approve(address(this), address(metropolisRouter), type(uint256).max); // Miktarı yarıya düşür ve tekrar dene uint256 halfAmount = adjustedAmount / 2; if (halfAmount > 0) { emit SwapFailed("E5 error, retrying with half amount"); return _processSwap(halfAmount); } } } emit SwapFailed(string(abi.encodePacked("Alternative swap method failed: ", altReason))); return 0; } catch { // Bilinmeyen hata durumunda, daha küçük bir miktarla tekrar dene uint256 halfAmount = adjustedAmount / 2; if (halfAmount > 0 && halfAmount != adjustedAmount) { // Onayları tekrar yenile _approve(address(this), address(metropolisRouter), type(uint256).max); emit SwapFailed("Unknown swap error, retrying with half amount"); return _processSwap(halfAmount); } emit SwapFailed("Unknown swap error"); return 0; } } catch { // Bilinmeyen hata durumunda, alternatif fonksiyonu deneyelim emit SwapFailed("First swap method failed with unknown error"); // Alternatif fonksiyonu dene - swapExactTokensForETHSupportingFeeOnTransferTokens kullan try metropolisRouter.swapExactTokensForETHSupportingFeeOnTransferTokens( adjustedAmount, minAmountOut, path, swapProxy, // ETH'yi proxy kontrata gönder deadline ) { // İşlem başarılı, proxy'den ETH'yi alalım return _processProxyTransfer(initialEthBalance, adjustedAmount, tokenAmount); } catch Error(string memory altReason) { emit SwapFailed(string(abi.encodePacked("Alternative swap method failed: ", altReason))); return 0; } catch { // Bilinmeyen hata durumunda, daha küçük bir miktarla tekrar dene uint256 halfAmount = adjustedAmount / 2; if (halfAmount > 0 && halfAmount != adjustedAmount) { // Onayları tekrar yenile _approve(address(this), address(metropolisRouter), type(uint256).max); emit SwapFailed("Unknown swap error, retrying with half amount"); return _processSwap(halfAmount); } emit SwapFailed("All swap methods failed with unknown errors"); return 0; } } } // Proxy transfer işlemini ayrı bir fonksiyona çıkardık function _processProxyTransfer(uint256 initialEthBalance, uint256 adjustedAmount, uint256 tokenAmount) private returns (uint256) { // Swap başarılı oldu, proxy kontratın ETH'yi kontrata göndermesini iste try ISwapProxy(swapProxy).sendETHToFarmer() { // Kontratın ETH bakiyesini kontrol et uint256 contractEthBalance = address(this).balance; uint256 ethReceived = contractEthBalance - initialEthBalance; if (ethReceived > 0) { emit SwapSuccessful(adjustedAmount, ethReceived); // Eğer orijinal miktardan daha az swap ettiyse ve başarılı olduysa, kalan miktarı da swap et if (adjustedAmount < tokenAmount) { uint256 remainingAmount = tokenAmount - adjustedAmount; uint256 additionalEth = _processSwap(remainingAmount); return ethReceived + additionalEth; } return ethReceived; } else { emit SwapFailed("No ETH received after proxy transfer"); return 0; } } catch Error(string memory reason) { emit SwapFailed(string(abi.encodePacked("Proxy ETH transfer failed: ", reason))); return 0; } catch { emit SwapFailed("Proxy ETH transfer failed: unknown error"); return 0; } } // Likidite işlemini ayrı bir fonksiyona taşıdık function _processLiquidity(uint256 wethAmount, uint256 tokenAmount) private { // Bu fonksiyon artık kullanılmıyor, kaldırılabilir // Doğrudan _addLiquidity fonksiyonu kullanılıyor } // Likidite ekleme fonksiyonu function _addLiquidity(uint256 ethAmount, uint256 tokenAmount) private { if (ethAmount == 0 || tokenAmount == 0) return; // Onayları yenile _approve(address(this), address(metropolisRouter), type(uint256).max); // ETH miktarının yarısını kullan (daha güvenli) uint256 halfEthAmount = ethAmount / 2; if (halfEthAmount == 0) return; // Token miktarının yarısını kullan uint256 halfTokenAmount = tokenAmount / 2; if (halfTokenAmount == 0) return; // Minimum miktarları hesapla (slippage için) uint256 minEthAmount = halfEthAmount * 90 / 100; // %10 slippage uint256 minTokenAmount = halfTokenAmount * 90 / 100; // %10 slippage // Deadline ayarla uint256 deadline = block.timestamp + 3600; // 1 saat try metropolisRouter.addLiquidityETH{value: halfEthAmount}( address(this), halfTokenAmount, minTokenAmount, minEthAmount, treasuryWallet, // LP tokenleri treasury'ye gönder deadline ) returns (uint256 amountToken, uint256 amountETH, uint256 liquidity) { emit LiquidityAdded(amountToken, amountETH); // liquidity değişkeni kullanılmıyor, ama uyarıyı önlemek için burada belirtiyoruz if (liquidity > 0) { // LP token miktarı pozitif, işlem başarılı } } catch Error(string memory reason) { emit LiquidityAddFailed(reason); } catch { emit LiquidityAddFailed("Unknown error in addLiquidity"); } } // WETH ile airdrop işlemi function _processAirdropWithETH(uint256 amount) internal { 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) { // ETH'yi doğrudan holder'a gönder (bool success, ) = holder.call{value: amountPerHolder}(""); if (!success) { emit AirdropFailed("ETH transfer failed"); } } } 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ı 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; } // Manuel trigger for processing (only owner) function triggerProcessing() external onlyOwner { require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "NP"); require(holders.length > 0, "NH"); // Maksimum işlem miktarını sınırla uint256 maxProcessAmount = 100 * 10**18; // Maksimum 100 token işlenecek (artırıldı) uint256 totalPendingTokens = _pendingLiquidityTokens + _pendingAirdropTokens; // Eğer toplam miktar maksimum miktardan fazlaysa, sadece bir kısmını işle if (totalPendingTokens > maxProcessAmount) { // Oranları koru uint256 ratio = maxProcessAmount * 1e18 / totalPendingTokens; uint256 processLiquidityTokens = _pendingLiquidityTokens * ratio / 1e18; uint256 processAirdropTokens = _pendingAirdropTokens * ratio / 1e18; // Bekleyen miktarları güncelle _pendingLiquidityTokens -= processLiquidityTokens; _pendingAirdropTokens -= processAirdropTokens; // Geçici değişkenleri ayarla uint256 tempPendingLiquidityTokens = _pendingLiquidityTokens; uint256 tempPendingAirdropTokens = _pendingAirdropTokens; // Bekleyen miktarları sıfırla _pendingLiquidityTokens = processLiquidityTokens; _pendingAirdropTokens = processAirdropTokens; try this.processLiquidityAndAirdrop() { // İşlem başarılı } catch Error(string memory reason) { emit SwapFailed(reason); // Bekleyen miktarları geri yükle _pendingLiquidityTokens = tempPendingLiquidityTokens + processLiquidityTokens; _pendingAirdropTokens = tempPendingAirdropTokens + processAirdropTokens; } catch { emit SwapFailed("Unknown error in triggerProcessing"); // Bekleyen miktarları geri yükle _pendingLiquidityTokens = tempPendingLiquidityTokens + processLiquidityTokens; _pendingAirdropTokens = tempPendingAirdropTokens + processAirdropTokens; } } else { // Normal işlemi başlat try this.processLiquidityAndAirdrop() { // İşlem başarılı } catch Error(string memory reason) { emit SwapFailed(reason); } catch { emit SwapFailed("Unknown error in triggerProcessing"); } } } // 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 {} } } // Manuel swap işlemi function manualSwap(uint256 tokenAmount) external onlyOwner nonReentrant { require(tokenAmount > 0, "Amount must be greater than 0"); require(tokenAmount <= balanceOf(address(this)), "Insufficient balance"); require(swapProxySet, "Swap proxy not set"); // Başlangıç ETH bakiyesini kaydet uint256 initialEthBalance = address(this).balance; // Swap işlemi uint256 ethReceived = _processSwap(tokenAmount); // Swap sonucunu kontrol et if (ethReceived == 0) { revert("Swap failed, no ETH received"); } // Kontratın ETH bakiyesini kontrol et uint256 contractEthBalance = address(this).balance; if (contractEthBalance <= initialEthBalance) { revert("No ETH received from swap"); } emit ManualSwapCompleted(tokenAmount, ethReceived); } // Treasury wallet'ı güncelleme fonksiyonu function setTreasuryWallet(address newTreasuryWallet) external onlyOwner { require(newTreasuryWallet != address(0), "ZA"); address oldTreasury = treasuryWallet; treasuryWallet = newTreasuryWallet; emit TreasuryWalletUpdated(oldTreasury, newTreasuryWallet); } // Manuel likidite ve airdrop işlemi function manualLiquidityAndAirdrop(uint256 tokenAmount) external onlyOwner nonReentrant { require(tokenAmount > 0, "NT"); require(IERC20(address(this)).balanceOf(address(this)) >= tokenAmount, "IB"); require(swapProxySet, "Swap proxy not set"); // Refresh approvals _approve(address(this), address(metropolisRouter), type(uint256).max); // Başlangıç ETH bakiyesini kaydet uint256 initialEthBalance = address(this).balance; // Swap işlemini gerçekleştir uint256 ethReceived = _processSwap(tokenAmount); if (ethReceived == 0) { revert("Swap failed, no ETH received"); } // Kontratın ETH bakiyesini kontrol et uint256 contractEthBalance = address(this).balance; if (contractEthBalance <= initialEthBalance) { revert("No ETH received from swap"); } // Gerçek ETH miktarını hesapla uint256 actualEthReceived = contractEthBalance - initialEthBalance; // Calculate amounts uint256 ethForLiquidity = actualEthReceived * LIQUIDITY_TAX / 100; uint256 ethForAirdrop = actualEthReceived * AIRDROP_TAX / 100; // ETH ile likidite ekle if (ethForLiquidity > 0) { _addLiquidity(ethForLiquidity, tokenAmount * LIQUIDITY_TAX / 100); } // Process airdrop with ETH if (ethForAirdrop > 0) { _processAirdropWithETH(ethForAirdrop); } } // Kontratın ETH alabilmesi için receive fonksiyonu receive() external payable { // ETH alındığında event yayınla if (msg.value > 0) { emit ETHReceived(msg.sender, msg.value); } } // Set swap proxy address function setSwapProxy(address _swapProxy) external onlyOwner { require(_swapProxy != address(0), "Invalid address"); // Proxy kontratın doğru olduğunu kontrol et try ISwapProxy(_swapProxy).farmerContract() returns (address farmerAddr) { // Eğer proxy kontratı zaten başka bir FARMER kontratına ayarlanmışsa ve bu kontrat değilse, hata ver if (farmerAddr != address(0) && farmerAddr != address(this)) { revert("Proxy already set to another contract"); } } catch { // Eğer farmerContract fonksiyonu yoksa, bu doğru proxy kontratı değildir revert("Invalid proxy contract"); } // Proxy kontratı ayarla swapProxy = _swapProxy; swapProxySet = true; emit SwapProxySet(_swapProxy); } // Override _transfer function from ERC20 function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "T1"); require(to != address(0), "T2"); require(amount > 0, "T3"); // Kontrat içi işlemlerde vergi alma if (_inSwap) { super._transfer(from, to, amount); return; } // Exclude transfers from/to excluded addresses bool takeFee = !(_isExcludedFromFee[from] || _isExcludedFromFee[to]); // Transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from, to, amount, takeFee); } // Trading ile ilgili fonksiyonlar - artık kullanılmıyor // function enableTrading() external onlyOwner { // tradingEnabled = true; // } // function disableTrading() external onlyOwner { // tradingEnabled = false; // } function excludeFromFee(address account, bool excluded) external onlyOwner { _isExcludedFromFee[account] = excluded; } function excludeFromTradingRestriction(address account, bool excluded) external onlyOwner { _isExcludedFromTradingRestriction[account] = excluded; } function setAllowedToSell(address account, bool allowed) external onlyOwner { _isAllowedToSell[account] = allowed; } function setAllowedToBuy(address account, bool allowed) external onlyOwner { _isAllowedToBuy[account] = allowed; } function isExcludedFromFee(address account) external view returns (bool) { return _isExcludedFromFee[account]; } function isExcludedFromTradingRestriction(address account) external view returns (bool) { return _isExcludedFromTradingRestriction[account]; } function isAllowedToSell(address account) external view returns (bool) { return _isAllowedToSell[account]; } function isAllowedToBuy(address account) external view returns (bool) { return _isAllowedToBuy[account]; } // Manuel olarak SwapProxy'yi ayarla function setupSwapProxyManually() external onlyOwner { require(swapProxy != address(0), "Swap proxy not set"); require(swapProxySet, "Swap proxy not set"); // Proxy kontratına bu kontratı ayarla ISwapProxy(swapProxy).setFarmerContract(address(this)); } }
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":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ETHReceived","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":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"ManualSwapCompleted","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":true,"internalType":"address","name":"proxyAddress","type":"address"}],"name":"SwapProxySet","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":[],"name":"addInitialLiquidityWithAllTokensAndETH","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":[{"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":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromTradingRestriction","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"isAllowedToBuy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAllowedToSell","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromTradingRestriction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"manualLiquidityAndAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"manualSwap","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":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setAllowedToBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"setAllowedToSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_swapProxy","type":"address"}],"name":"setSwapProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setupSwapProxyManually","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sonicToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapProxySet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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
60806040523480156200001157600080fd5b5033604051806040016040528060068152602001652320a926a2a960d11b815250604051806040016040528060048152602001634641524d60e01b815250816003908162000060919062000388565b5060046200006f828262000388565b50506001600555506001600160a01b038116620000b85760405162461bcd60e51b81526020600482015260026024820152614f3160f01b60448201526064015b60405180910390fd5b620000c381620001e5565b50600780547395a7e403d7cf20f675ff9273d66e94d35ba49fa36001600160a01b0319918216811790925560088054731570300e9cfec66c9fb0c8bc14366c86eb170ad090831681179091556009805473039e2fb66102314ce7b64ce5ce3e5183bc94ad389084168117909155600b80547395503a306cd81e08c0c43c49faae71165937d1759416841790556010805460ff60b81b1916600160b81b179055306000818152601160209081526040808320805460ff1990811660019081179092553385528285208054821683179055601284528285208054821683179055601384528285208054821683179055601490935292208054909116909117905591929091620001db9069d3c21bcecceda100000062000237565b505050506200047c565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620002745760405162461bcd60e51b8152602060048201526002602482015261453360f01b6044820152606401620000af565b806002600082825462000288919062000454565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200030f57607f821691505b6020821081036200033057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002df57600081815260208120601f850160051c810160208610156200035f5750805b601f850160051c820191505b8181101562000380578281556001016200036b565b505050505050565b81516001600160401b03811115620003a457620003a4620002e4565b620003bc81620003b58454620002fa565b8462000336565b602080601f831160018114620003f45760008415620003db5750858301515b600019600386901b1c1916600185901b17855562000380565b600085815260208120601f198616915b82811015620004255788860151825594840194600190910190840162000404565b5085821015620004445787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b808201808211156200047657634e487b7160e01b600052601160045260246000fd5b92915050565b6149b0806200048c6000396000f3fe6080604052600436106102815760003560e01c8063808a54571161014f578063c0d78655116100c1578063e3a8fa551161007a578063e3a8fa551461083e578063e6efd91a14610846578063e85ceee814610866578063ed9cacfe1461089f578063f2fde38b146108b4578063fd7c9fab146108d457600080fd5b8063c0d7865514610748578063c84a705c14610768578063d4d7b19a14610788578063d720a2a8146107b8578063dd62ed3e146107d8578063df8408fe1461081e57600080fd5b8063a8602fea11610113578063a8602fea14610679578063a9059cbb14610699578063b58bedb6146106b9578063b70143c9146106ce578063b77e895c146106ee578063b9276e4b1461072757600080fd5b8063808a5457146105f15780638129fc1c146106115780638da5cb5b1461062657806395d89b4114610644578063975b87e81461065957600080fd5b80635342acb4116101f35780636d62062a116101ac5780636d62062a146105125780636ec4be901461054b57806370a08231146105715780637136982b146105a75780637ac84fc1146105bc578063801b51d9146105d157600080fd5b80635342acb414610442578063573761981461047b5780635d76b04c1461049b5780635fe8e7cc146104b057806362b6327a146104d25780636a3c68fc146104f257600080fd5b80632a11ced0116102455780632a11ced014610378578063313ce567146103b0578063397883d2146103cc578063461a3a95146103e15780634626402b146104015780634ada218b1461042157600080fd5b806306fdde03146102c957806308dee2b4146102f4578063095ea7b31461031357806318160ddd1461034357806323b872dd1461035857600080fd5b366102c45734156102c25760405134815233907fbfe611b001dfcd411432f7bf0d79b82b4b2ee81511edac123a3403c357fb972a9060200160405180910390a25b005b600080fd5b3480156102d557600080fd5b506102de6108f4565b6040516102eb9190614207565b60405180910390f35b34801561030057600080fd5b50600e545b6040519081526020016102eb565b34801561031f57600080fd5b5061033361032e36600461424f565b610986565b60405190151581526020016102eb565b34801561034f57600080fd5b50600254610305565b34801561036457600080fd5b5061033361037336600461427b565b6109a0565b34801561038457600080fd5b506103986103933660046142bc565b6109c6565b6040516001600160a01b0390911681526020016102eb565b3480156103bc57600080fd5b50604051601281526020016102eb565b3480156103d857600080fd5b506102c26109f0565b3480156103ed57600080fd5b50600954610398906001600160a01b031681565b34801561040d57600080fd5b50600b54610398906001600160a01b031681565b34801561042d57600080fd5b5060105461033390600160b81b900460ff1681565b34801561044e57600080fd5b5061033361045d3660046142d5565b6001600160a01b031660009081526011602052604090205460ff1690565b34801561048757600080fd5b506102c261049636600461424f565b610d17565b3480156104a757600080fd5b50600f54610305565b3480156104bc57600080fd5b506104c5610de3565b6040516102eb9190614336565b3480156104de57600080fd5b50600754610398906001600160a01b031681565b3480156104fe57600080fd5b506102c261050d366004614357565b610e44565b34801561051e57600080fd5b5061033361052d3660046142d5565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561055757600080fd5b50601054610398906201000090046001600160a01b031681565b34801561057d57600080fd5b5061030561058c3660046142d5565b6001600160a01b031660009081526020819052604090205490565b3480156105b357600080fd5b50600d54610305565b3480156105c857600080fd5b506102c2610e77565b3480156105dd57600080fd5b506102c26105ec366004614357565b611472565b3480156105fd57600080fd5b50600a54610398906001600160a01b031681565b34801561061d57600080fd5b506102c26114a5565b34801561063257600080fd5b506006546001600160a01b0316610398565b34801561065057600080fd5b506102de611859565b34801561066557600080fd5b506102c2610674366004614390565b611868565b34801561068557600080fd5b506102c26106943660046142d5565b611f99565b3480156106a557600080fd5b506103336106b436600461424f565b612036565b3480156106c557600080fd5b506102c2612044565b3480156106da57600080fd5b506102c26106e93660046142bc565b612101565b3480156106fa57600080fd5b506103336107093660046142d5565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561073357600080fd5b5060105461033390600160b01b900460ff1681565b34801561075457600080fd5b506102c26107633660046142d5565b61228e565b34801561077457600080fd5b506102c26107833660046142d5565b6122f3565b34801561079457600080fd5b506103336107a33660046142d5565b600c6020526000908152604090205460ff1681565b3480156107c457600080fd5b506102c26107d33660046142bc565b6124c4565b3480156107e457600080fd5b506103056107f33660046143b2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561082a57600080fd5b506102c2610839366004614357565b6126bc565b6102c26126ef565b34801561085257600080fd5b506102c2610861366004614357565b61292b565b34801561087257600080fd5b506103336108813660046142d5565b6001600160a01b031660009081526012602052604090205460ff1690565b3480156108ab57600080fd5b506102c261295e565b3480156108c057600080fd5b506102c26108cf3660046142d5565b612be2565b3480156108e057600080fd5b50600854610398906001600160a01b031681565b606060038054610903906143e0565b80601f016020809104026020016040519081016040528092919081815260200182805461092f906143e0565b801561097c5780601f106109515761010080835404028352916020019161097c565b820191906000526020600020905b81548152906001019060200180831161095f57829003601f168201915b5050505050905090565b600033610994818585612c2e565b60019150505b92915050565b6000336109ae858285612ce0565b6109b9858585612d48565b60019150505b9392505050565b600d81815481106109d657600080fd5b6000918252602090912001546001600160a01b0316905081565b6109f8612e5c565b6000600e541180610a0b57506000600f54115b610a415760405162461bcd60e51b815260206004820152600260248201526104e560f41b60448201526064015b60405180910390fd5b600d54610a755760405162461bcd60e51b815260206004820152600260248201526109c960f31b6044820152606401610a38565b600f54600e5468056bc75e2d6310000091600091610a939190614430565b905081811115610c4c57600081610ab284670de0b6b3a7640000614443565b610abc919061445a565b90506000670de0b6b3a764000082600e54610ad79190614443565b610ae1919061445a565b90506000670de0b6b3a764000083600f54610afc9190614443565b610b06919061445a565b905081600e6000828254610b1a919061447c565b9250508190555080600f6000828254610b33919061447c565b9091555050600e8054600f80549285905583905560408051637ac84fc160e01b815290519192913091637ac84fc191600480830192600092919082900301818387803b158015610b8257600080fd5b505af1925050508015610b93575060015b610c4357610b9f61448f565b806308c379a003610c035750610bb36144e6565b80610bbe5750610c05565b60008051602061491b83398151915281604051610bdb9190614207565b60405180910390a1610bed8584614430565b600e55610bfa8483614430565b600f5550610c43565b505b60008051602061491b833981519152604051610c2090614570565b60405180910390a1610c328483614430565b600e55610c3f8382614430565b600f555b50505050505050565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c8757600080fd5b505af1925050508015610c98575060015b610d1357610ca461448f565b806308c379a003610ced5750610cb86144e6565b80610cc35750610cef565b60008051602061491b83398151915281604051610ce09190614207565b60405180910390a1505050565b505b60008051602061491b833981519152604051610d0a90614570565b60405180910390a15b5050565b610d1f612e5c565b306001600160a01b03831603610d5c5760405162461bcd60e51b815260206004820152600260248201526121a360f11b6044820152606401610a38565b816001600160a01b031663a9059cbb610d7d6006546001600160a01b031690565b836040518363ffffffff1660e01b8152600401610d9b9291906145b2565b6020604051808303816000875af1158015610dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dde91906145cb565b505050565b6060600d80548060200260200160405190810160405280929190818152602001828054801561097c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e1d575050505050905090565b610e4c612e5c565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b600260055403610e995760405162461bcd60e51b8152600401610a38906145e8565b6002600555601054610100900460ff1615610edb5760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610a38565b6000600f54600e54610eed9190614430565b11610f2e5760405162461bcd60e51b81526020600482015260116024820152704e6f2070656e64696e6720746f6b656e7360781b6044820152606401610a38565b6010805461ff001916610100179055600e54600f5481158015610f4f575080155b15610f665750506010805461ff001916905561146b565b68056bc75e2d631000006000610f7c8385614430565b90508181111561102857600081610f9b84670de0b6b3a7640000614443565b610fa5919061445a565b9050670de0b6b3a7640000610fba8287614443565b610fc4919061445a565b9450670de0b6b3a7640000610fd98286614443565b610fe3919061445a565b9350610fef8486614430565b915084600e6000828254611003919061447c565b9250508190555083600f600082825461101c919061447c565b90915550611033915050565b6000600e819055600f555b60408051858152602081018590527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a16040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa1580156110aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ce9190614604565b9050818110156111735784600e60008282546110ea9190614430565b9250508190555083600f60008282546111039190614430565b90915550506010805461ff001916905560405160008051602061491b83398151915290611161906020808252601d908201527f496e73756666696369656e7420636f6e74726163742062616c616e6365000000604082015260600190565b60405180910390a1505050505061146b565b60075461118d9030906001600160a01b0316600019612c2e565b47600061119984612eaa565b90508060000361120e5786600e60008282546111b59190614430565b9250508190555085600f60008282546111ce9190614430565b90915550506010805461ff001916905560405160008051602061491b833981519152906111fa9061461d565b60405180910390a15050505050505061146b565b478281116112835787600e60008282546112289190614430565b9250508190555086600f60008282546112419190614430565b909155505060405160008051602061491b8339815191529061126290614654565b60405180910390a150506010805461ff00191690555061146b945050505050565b600061128f848361447c565b905060008661129e8b84614443565b6112a8919061445a565b905060006112b6828461447c565b9050811561144557600760009054906101000a90046001600160a01b03166001600160a01b031663f305d71983308e600080600b60009054906101000a90046001600160a01b03164261025861130c9190614430565b6040518863ffffffff1660e01b815260040161132d9695949392919061468b565b60606040518083038185885af193505050508015611368575060408051601f3d908101601f19168201909252611365918101906146c6565b60015b61141a5761137461448f565b806308c379a0036113be57506113886144e6565b8061139357506113c0565b60008051602061495b833981519152816040516113b09190614207565b60405180910390a150611445565b505b60008051602061495b83398151915260405161140d906020808252601d908201527f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000604082015260600190565b60405180910390a1611445565b604080518481526020810184905260008051602061493b833981519152910160405180910390a15050505b801561145457611454816135cd565b50506010805461ff00191690555050505050505050505b6001600555565b61147a612e5c565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6114ad612e5c565b60105460ff16156114e55760405162461bcd60e51b8152602060048201526002602482015261231960f11b6044820152606401610a38565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa158015611544573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156891906146f4565b600a80546001600160a01b0319166001600160a01b03929092169182179055611624576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af11580156115df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160391906146f4565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b03166116615760405162461bcd60e51b8152602060048201526002602482015261463360f01b6044820152606401610a38565b600a80546001600160a01b0390811660009081526011602090815260408083208054600160ff19918216811790925595548516845260129092529091208054909316179091556007546116b991309116600019612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926116f192911690600019906004016145b2565b6020604051808303816000875af1158015611710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173491906145cb565b6117655760405162461bcd60e51b8152602060048201526002602482015261118d60f21b6044820152606401610a38565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261179d92911690600019906004016145b2565b6020604051808303816000875af11580156117bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e091906145cb565b50600a5460405163095ea7b360e01b8152309163095ea7b391611813916001600160a01b031690600019906004016145b2565b6020604051808303816000875af1158015611832573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185691906145cb565b50565b606060048054610903906143e0565b611870612e5c565b600082116118905760405162461bcd60e51b8152600401610a3890614711565b600081116118c55760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610a38565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190614604565b10156119595760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610a38565b6009546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa1580156119a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c59190614604565b10156119f85760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610a38565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90611a2c9033903090869060040161472d565b6020604051808303816000875af1158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906145cb565b611aa05760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610a38565b600754611ab89030906001600160a01b031684612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611aee9291169085906004016145b2565b6020604051808303816000875af1158015611b0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3191906145cb565b506007546009546001600160a01b039182169163e8e3370091309116858560008033611b5f42610258614430565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af1925050508015611bf7575060408051601f3d908101601f19168201909252611bf4918101906146c6565b60015b611e7f57611c0361448f565b806308c379a003611d465750611c176144e6565b80611c225750611d48565b600754611c3b9030906001600160a01b03166000612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611c72929116906000906004016145b2565b6020604051808303816000875af1158015611c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb591906145cb565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611ce890339086906004016145b2565b6020604051808303816000875af1158015611d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2b91906145cb565b508060405162461bcd60e51b8152600401610a389190614207565b505b600754611d619030906001600160a01b03166000612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611d98929116906000906004016145b2565b6020604051808303816000875af1158015611db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddb91906145cb565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611e0e90339085906004016145b2565b6020604051808303816000875af1158015611e2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5191906145cb565b5060405162461bcd60e51b8152602060048201526002602482015261119360f21b6044820152606401610a38565b5050604080518481526020810184905260008051602061493b83398151915292500160405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f169190614604565b90508015610dde5760095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611f5090339085906004016145b2565b6020604051808303816000875af1158015611f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9391906145cb565b50505050565b611fa1612e5c565b6001600160a01b038116611fdc5760405162461bcd60e51b81526020600482015260026024820152615a4160f01b6044820152606401610a38565b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb49101610d0a565b600033610994818585612d48565b61204c612e5c565b6010546201000090046001600160a01b031661207a5760405162461bcd60e51b8152600401610a3890614751565b601054600160b01b900460ff166120a35760405162461bcd60e51b8152600401610a3890614751565b6010546040516324872d5b60e21b8152306004820152620100009091046001600160a01b03169063921cb56c90602401600060405180830381600087803b1580156120ed57600080fd5b505af1158015611f93573d6000803e3d6000fd5b612109612e5c565b60026005540361212b5760405162461bcd60e51b8152600401610a38906145e8565b60026005558061217d5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610a38565b306000908152602081905260409020548111156121d35760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610a38565b601054600160b01b900460ff166121fc5760405162461bcd60e51b8152600401610a3890614751565b47600061220883612eaa565b90508060000361222a5760405162461bcd60e51b8152600401610a389061461d565b4782811161224a5760405162461bcd60e51b8152600401610a3890614654565b60408051858152602081018490527f83dcf65fd6004d3203d0b493e4d86ef58c3565fa57812dbd28c5a903e247c44f910160405180910390a1505060016005555050565b612296612e5c565b6001600160a01b0381166122d15760405162461bcd60e51b815260206004820152600260248201526124a960f11b6044820152606401610a38565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6122fb612e5c565b6001600160a01b0381166123435760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610a38565b806001600160a01b0316639c0b7d466040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561239d575060408051601f3d908101601f1916820190925261239a918101906146f4565b60015b6123e25760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a59081c1c9bde1e4818dbdb9d1c9858dd60521b6044820152606401610a38565b6001600160a01b0381161580159061240357506001600160a01b0381163014155b1561245e5760405162461bcd60e51b815260206004820152602560248201527f50726f787920616c72656164792073657420746f20616e6f7468657220636f6e6044820152641d1c9858dd60da1b6064820152608401610a38565b506010805460ff60b01b196001600160a01b0384166201000081029190911662010000600160b81b031990921691909117600160b01b179091556040517f65c4b302ff508168aab64a17ebe745806b65caba61b745d8aff18fb69cb0937290600090a250565b6124cc612e5c565b6002600554036124ee5760405162461bcd60e51b8152600401610a38906145e8565b6002600555806125105760405162461bcd60e51b8152600401610a3890614711565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa15801561254d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125719190614604565b10156125a45760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610a38565b601054600160b01b900460ff166125cd5760405162461bcd60e51b8152600401610a3890614751565b6007546125e79030906001600160a01b0316600019612c2e565b4760006125f383612eaa565b9050806000036126155760405162461bcd60e51b8152600401610a389061461d565b478281116126355760405162461bcd60e51b8152600401610a3890614654565b6000612641848361447c565b905060006064612652601984614443565b61265c919061445a565b90506000606461266d601985614443565b612677919061445a565b9050811561269f5761269f82606461269060198b614443565b61269a919061445a565b61377a565b80156126ae576126ae816135cd565b505060016005555050505050565b6126c4612e5c565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6126f7612e5c565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015612735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127599190614604565b90506000811161277b5760405162461bcd60e51b8152600401610a3890614711565b600034116127b05760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610a38565b6007546127c89030906001600160a01b031683612c2e565b6007546001600160a01b031663f305d719343084600080336127ec42610258614430565b6040518863ffffffff1660e01b815260040161280d9695949392919061468b565b60606040518083038185885af193505050508015612848575060408051601f3d908101601f19168201909252612845918101906146c6565b60015b6128ff5761285461448f565b806308c379a0036128b857506128686144e6565b8061287357506128ba565b60075461288c9030906001600160a01b03166000612c2e565b60405133904780156108fc02916000818181858888f19350505050158015611d2b573d6000803e3d6000fd5b505b6007546128d39030906001600160a01b03166000612c2e565b60405133904780156108fc02916000818181858888f19350505050158015611e51573d6000803e3d6000fd5b50506040805183815234602082015260008051602061493b83398151915292500160405180910390a150565b612933612e5c565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b612966612e5c565b6007546129809030906001600160a01b0316600019612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926129b892911690600019906004016145b2565b6020604051808303816000875af19250505080156129f3575060408051601f3d908101601f191682019092526129f0918101906145cb565b60015b15612a4957506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92612a40926001600160a01b03918216929116906000199061472d565b60405180910390a15b600a546001600160a01b031615612be057600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612a9292911690600019906004016145b2565b6020604051808303816000875af1925050508015612acd575060408051601f3d908101601f19168201909252612aca918101906145cb565b60015b15612b235750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92612b1a926001600160a01b03918216929116906000199061472d565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b391612b55916001600160a01b031690600019906004016145b2565b6020604051808303816000875af1925050508015612b90575060408051601f3d908101601f19168201909252612b8d918101906145cb565b60015b15612be05750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca91612bd79130916001600160a01b0316906000199061472d565b60405180910390a15b565b612bea612e5c565b6001600160a01b038116612c255760405162461bcd60e51b81526020600482015260026024820152614f3160f01b6044820152606401610a38565b61185681613989565b6001600160a01b03831615801590612c4e57506001600160a01b03821615155b612c7f5760405162461bcd60e51b8152602060048201526002602482015261114d60f21b6044820152606401610a38565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205481811015612d3b5760405162461bcd60e51b8152602060048201526002602482015261453560f01b6044820152606401610a38565b611f938484848403612c2e565b6001600160a01b038316612d835760405162461bcd60e51b8152602060048201526002602482015261543160f01b6044820152606401610a38565b6001600160a01b038216612dbe5760405162461bcd60e51b81526020600482015260026024820152612a1960f11b6044820152606401610a38565b60008111612df35760405162461bcd60e51b8152602060048201526002602482015261543360f01b6044820152606401610a38565b601054610100900460ff1615612e0e57610dde8383836139db565b6001600160a01b03831660009081526011602052604081205460ff1680612e4d57506001600160a01b03831660009081526011602052604090205460ff165b159050611f9384848484613b3a565b33612e6f6006546001600160a01b031690565b6001600160a01b031614612be05760405162461bcd60e51b8152602060048201526002602482015261279960f11b6044820152606401610a38565b600081600003612ebc57506000919050565b601054600160b01b900460ff16612ee55760405162461bcd60e51b8152600401610a3890614751565b816802b5e3af16b1880000811115612f0357506802b5e3af16b18800005b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f3857612f3861477d565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb591906146f4565b81600181518110612fc857612fc861477d565b6001600160a01b039283166020918202929092010152600754600091612ff391309116600019612c2e565b600061300142610e10614430565b60075460105460405163791ac94760e01b815292935047926001600160a01b039283169263791ac9479261304a928a9289928b9262010000909104909116908990600401614793565b600060405180830381600087803b15801561306457600080fd5b505af1925050508015613075575060015b6135b75761308161448f565b806308c379a00361339557506130956144e6565b806130a05750613397565b60008051602061491b833981519152816040516020016130c091906147cf565b60408051601f19818403018152908290526130da91614207565b60405180910390a160075460105460405163791ac94760e01b81526001600160a01b039283169263791ac94792613126928b928a928c9262010000909104909116908a90600401614793565b600060405180830381600087803b15801561314057600080fd5b505af1925050508015613151575060015b61337e5761315d61448f565b806308c379a0036132c357506131716144e6565b8061317c57506132c5565b80511561327257604080518082019091526002815261453560f01b6020918201528151908201207ff3465d5cb5831136b3b4e82db30aaef6a41154c3cba2fd4f528d2b5dde880dc401613272576007546131e39030906001600160a01b0316600019612c2e565b60006131f060028961445a565b905080156132705760008051602061491b8339815191526040516132519060208082526023908201527f4535206572726f722c207265747279696e6720776974682068616c6620616d6f6040820152621d5b9d60ea1b606082015260800190565b60405180910390a161326281612eaa565b9a9950505050505050505050565b505b60008051602061491b833981519152816040516020016132929190614814565b60408051601f19818403018152908290526132ac91614207565b60405180910390a150600098975050505050505050565b505b60006132d260028861445a565b90506000811180156132e45750868114155b1561333c576007546133039030906001600160a01b0316600019612c2e565b60008051602061491b83398151915260405161331e90614859565b60405180910390a161332f81612eaa565b9998505050505050505050565b60008051602061491b8339815191526040516132ac906020808252601290820152712ab735b737bbb71039bbb0b81032b93937b960711b604082015260600190565b61338982878a613d8e565b98975050505050505050565b505b60008051602061491b8339815191526040516133f8906020808252602b908201527f46697273742073776170206d6574686f64206661696c6564207769746820756e60408201526a35b737bbb71032b93937b960a91b606082015260800190565b60405180910390a160075460105460405163791ac94760e01b81526001600160a01b039283169263791ac94792613444928a9289928b9262010000909104909116908990600401614793565b600060405180830381600087803b15801561345e57600080fd5b505af192505050801561346f575060015b6135b75761347b61448f565b806308c379a0036134ea575061348f6144e6565b8061349a57506134ec565b60008051602061491b833981519152816040516020016134ba9190614814565b60408051601f19818403018152908290526134d491614207565b60405180910390a1506000979650505050505050565b505b60006134f960028761445a565b905060008111801561350b5750858114155b156135565760075461352a9030906001600160a01b0316600019612c2e565b60008051602061491b83398151915260405161354590614859565b60405180910390a161338981612eaa565b60008051602061491b8339815191526040516134d4906020808252602b908201527f416c6c2073776170206d6574686f6473206661696c6564207769746820756e6b60408201526a6e6f776e206572726f727360a81b606082015260800190565b6135c2818689613d8e565b979650505050505050565b600d548015806135db575081155b156135e4575050565b60006135f0828461445a565b9050806000036135ff57505050565b60005b8281101561373b576000600d828154811061361f5761361f61477d565b6000918252602090912001546001600160a01b03169050801580159061364e57506001600160a01b0381163014155b80156136685750600a546001600160a01b03828116911614155b15613728576000816001600160a01b03168460405160006040518083038185875af1925050503d80600081146136ba576040519150601f19603f3d011682016040523d82523d6000602084013e6136bf565b606091505b5050905080613726577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b1161460405161371d90602080825260139082015272115512081d1c985b9cd9995c8819985a5b1959606a1b604082015260600190565b60405180910390a15b505b5080613733816148a6565b915050613602565b5060408051848152602081018490527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c217910160405180910390a1505050565b811580613785575080155b1561378e575050565b6007546137a89030906001600160a01b0316600019612c2e565b60006137b560028461445a565b9050806000036137c457505050565b60006137d160028461445a565b9050806000036137e15750505050565b600060646137f084605a614443565b6137fa919061445a565b90506000606461380b84605a614443565b613815919061445a565b9050600061382542610e10614430565b600754600b5460405163f305d71960e01b81529293506001600160a01b039182169263f305d7199289926138699230928b928a928c92909116908a9060040161468b565b60606040518083038185885af1935050505080156138a4575060408051601f3d908101601f191682019092526138a1918101906146c6565b60015b613956576138b061448f565b806308c379a0036138fa57506138c46144e6565b806138cf57506138fc565b60008051602061495b833981519152816040516138ec9190614207565b60405180910390a150610c43565b505b60008051602061495b833981519152604051613949906020808252601d908201527f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000604082015260600190565b60405180910390a1610c43565b604080518481526020810184905260008051602061493b833981519152910160405180910390a150505050505050505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316613a165760405162461bcd60e51b8152602060048201526002602482015261543160f01b6044820152606401610a38565b6001600160a01b038216613a515760405162461bcd60e51b81526020600482015260026024820152612a1960f11b6044820152606401610a38565b60008111613a865760405162461bcd60e51b8152602060048201526002602482015261543360f01b6044820152606401610a38565b6001600160a01b03831660009081526020819052604090205481811015613ad45760405162461bcd60e51b8152602060048201526002602482015261150d60f21b6044820152606401610a38565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611f93565b60008180613b555750600a546001600160a01b038581169116145b9050808015613b6c5750601054610100900460ff16155b15613d245760006064613b80600586614443565b613b8a919061445a565b90508015613d225760006064613ba1601984614443565b613bab919061445a565b905060006064613bbc601985614443565b613bc6919061445a565b90506000613bd4848861447c565b9050613be18930866139db565b613bec8989836139db565b82600e6000828254613bfe9190614430565b9250508190555081600f6000828254613c179190614430565b90915550613c50905089678ac7230489e80000613c49826001600160a01b031660009081526020819052604090205490565b1015613fd4565b613c7c88678ac7230489e80000613c498b6001600160a01b031660009081526020819052604090205490565b600a546001600160a01b038981169116148015613ca15750601054610100900460ff16155b8015613cc557506801158e460913d00000600f54600e54613cc29190614430565b10155b15613d1857306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d0557600080fd5b505af1925050508015613d16575060015b505b5050505050611f93565b505b613d2f8585856139db565b613d5b85678ac7230489e80000613c49886001600160a01b031660009081526020819052604090205490565b613d8784678ac7230489e80000613c49876001600160a01b031660009081526020819052604090205490565b5050505050565b6000601060029054906101000a90046001600160a01b03166001600160a01b0316636ab2fe586040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613de057600080fd5b505af1925050508015613df1575060015b613ed857613dfd61448f565b806308c379a003613e685750613e116144e6565b80613e1c5750613e6a565b60008051602061491b83398151915281604051602001613e3c91906148bf565b60408051601f1981840301815290829052613e5691614207565b60405180910390a160009150506109bf565b505b60008051602061491b833981519152604051613ec89060208082526028908201527f50726f787920455448207472616e73666572206661696c65643a20756e6b6e6f6040820152673bb71032b93937b960c11b606082015260800190565b60405180910390a15060006109bf565b476000613ee5868361447c565b90508015613f675760408051868152602081018390527fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc01910160405180910390a183851015613f5e576000613f3a868661447c565b90506000613f4782612eaa565b9050613f538184614430565b9450505050506109bf565b91506109bf9050565b60008051602061491b833981519152604051613fc19060208082526024908201527f4e6f204554482072656365697665642061667465722070726f7879207472616e60408201526339b332b960e11b606082015260800190565b60405180910390a16000925050506109bf565b600a546001600160a01b03838116911614801590613ffb57506001600160a01b0382163014155b15610d135780801561402657506001600160a01b0382166000908152600c602052604090205460ff16155b1561409257506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b801580156140b857506001600160a01b0382166000908152600c602052604090205460ff165b15610d13576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d54811015610dde57826001600160a01b0316600d82815481106141055761410561477d565b6000918252602090912001546001600160a01b0316036141d157600d805461412f9060019061447c565b8154811061413f5761413f61477d565b600091825260209091200154600d80546001600160a01b03909216918390811061416b5761416b61477d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d8054806141aa576141aa614904565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b806141db816148a6565b9150506140de565b60005b838110156141fe5781810151838201526020016141e6565b50506000910152565b60208152600082518060208401526142268160408501602087016141e3565b601f01601f19169190910160400192915050565b6001600160a01b038116811461185657600080fd5b6000806040838503121561426257600080fd5b823561426d8161423a565b946020939093013593505050565b60008060006060848603121561429057600080fd5b833561429b8161423a565b925060208401356142ab8161423a565b929592945050506040919091013590565b6000602082840312156142ce57600080fd5b5035919050565b6000602082840312156142e757600080fd5b81356109bf8161423a565b600081518084526020808501945080840160005b8381101561432b5781516001600160a01b031687529582019590820190600101614306565b509495945050505050565b6020815260006109bf60208301846142f2565b801515811461185657600080fd5b6000806040838503121561436a57600080fd5b82356143758161423a565b9150602083013561438581614349565b809150509250929050565b600080604083850312156143a357600080fd5b50508035926020909101359150565b600080604083850312156143c557600080fd5b82356143d08161423a565b915060208301356143858161423a565b600181811c908216806143f457607f821691505b60208210810361441457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561099a5761099a61441a565b808202811582820484141761099a5761099a61441a565b60008261447757634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561099a5761099a61441a565b600060033d11156144a85760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff811182821017156144df57634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d10156144f45790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561452457505050505090565b828501915081518181111561453c5750505050505090565b843d87010160208285010111156145565750505050505090565b614565602082860101876144ab565b509095945050505050565b60208082526022908201527f556e6b6e6f776e206572726f7220696e207472696767657250726f63657373696040820152616e6760f01b606082015260800190565b6001600160a01b03929092168252602082015260400190565b6000602082840312156145dd57600080fd5b81516109bf81614349565b602080825260029082015261523160f01b604082015260600190565b60006020828403121561461657600080fd5b5051919050565b6020808252601c908201527f53776170206661696c65642c206e6f2045544820726563656976656400000000604082015260600190565b60208082526019908201527f4e6f204554482072656365697665642066726f6d207377617000000000000000604082015260600190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156146db57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561470657600080fd5b81516109bf8161423a565b602080825260029082015261139560f21b604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526012908201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a0604082015260006147b260a08301866142f2565b6001600160a01b0394909416606083015250608001529392505050565b7f46697273742073776170206d6574686f64206661696c65643a2000000000000081526000825161480781601a8501602087016141e3565b91909101601a0192915050565b7f416c7465726e61746976652073776170206d6574686f64206661696c65643a2081526000825161484c8160208501602087016141e3565b9190910160200192915050565b6020808252602d908201527f556e6b6e6f776e2073776170206572726f722c207265747279696e672077697460408201526c1a081a185b1988185b5bdd5b9d609a1b606082015260800190565b6000600182016148b8576148b861441a565b5060010190565b7f50726f787920455448207472616e73666572206661696c65643a2000000000008152600082516148f781601b8501602087016141e3565b91909101601b0192915050565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072338f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515ba31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ada26469706673582212205d7d271fb9f2a6f8972edf029dacb7e9f64d6ae643b663ce62309bc498b060a464736f6c63430008110033
Deployed Bytecode
0x6080604052600436106102815760003560e01c8063808a54571161014f578063c0d78655116100c1578063e3a8fa551161007a578063e3a8fa551461083e578063e6efd91a14610846578063e85ceee814610866578063ed9cacfe1461089f578063f2fde38b146108b4578063fd7c9fab146108d457600080fd5b8063c0d7865514610748578063c84a705c14610768578063d4d7b19a14610788578063d720a2a8146107b8578063dd62ed3e146107d8578063df8408fe1461081e57600080fd5b8063a8602fea11610113578063a8602fea14610679578063a9059cbb14610699578063b58bedb6146106b9578063b70143c9146106ce578063b77e895c146106ee578063b9276e4b1461072757600080fd5b8063808a5457146105f15780638129fc1c146106115780638da5cb5b1461062657806395d89b4114610644578063975b87e81461065957600080fd5b80635342acb4116101f35780636d62062a116101ac5780636d62062a146105125780636ec4be901461054b57806370a08231146105715780637136982b146105a75780637ac84fc1146105bc578063801b51d9146105d157600080fd5b80635342acb414610442578063573761981461047b5780635d76b04c1461049b5780635fe8e7cc146104b057806362b6327a146104d25780636a3c68fc146104f257600080fd5b80632a11ced0116102455780632a11ced014610378578063313ce567146103b0578063397883d2146103cc578063461a3a95146103e15780634626402b146104015780634ada218b1461042157600080fd5b806306fdde03146102c957806308dee2b4146102f4578063095ea7b31461031357806318160ddd1461034357806323b872dd1461035857600080fd5b366102c45734156102c25760405134815233907fbfe611b001dfcd411432f7bf0d79b82b4b2ee81511edac123a3403c357fb972a9060200160405180910390a25b005b600080fd5b3480156102d557600080fd5b506102de6108f4565b6040516102eb9190614207565b60405180910390f35b34801561030057600080fd5b50600e545b6040519081526020016102eb565b34801561031f57600080fd5b5061033361032e36600461424f565b610986565b60405190151581526020016102eb565b34801561034f57600080fd5b50600254610305565b34801561036457600080fd5b5061033361037336600461427b565b6109a0565b34801561038457600080fd5b506103986103933660046142bc565b6109c6565b6040516001600160a01b0390911681526020016102eb565b3480156103bc57600080fd5b50604051601281526020016102eb565b3480156103d857600080fd5b506102c26109f0565b3480156103ed57600080fd5b50600954610398906001600160a01b031681565b34801561040d57600080fd5b50600b54610398906001600160a01b031681565b34801561042d57600080fd5b5060105461033390600160b81b900460ff1681565b34801561044e57600080fd5b5061033361045d3660046142d5565b6001600160a01b031660009081526011602052604090205460ff1690565b34801561048757600080fd5b506102c261049636600461424f565b610d17565b3480156104a757600080fd5b50600f54610305565b3480156104bc57600080fd5b506104c5610de3565b6040516102eb9190614336565b3480156104de57600080fd5b50600754610398906001600160a01b031681565b3480156104fe57600080fd5b506102c261050d366004614357565b610e44565b34801561051e57600080fd5b5061033361052d3660046142d5565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561055757600080fd5b50601054610398906201000090046001600160a01b031681565b34801561057d57600080fd5b5061030561058c3660046142d5565b6001600160a01b031660009081526020819052604090205490565b3480156105b357600080fd5b50600d54610305565b3480156105c857600080fd5b506102c2610e77565b3480156105dd57600080fd5b506102c26105ec366004614357565b611472565b3480156105fd57600080fd5b50600a54610398906001600160a01b031681565b34801561061d57600080fd5b506102c26114a5565b34801561063257600080fd5b506006546001600160a01b0316610398565b34801561065057600080fd5b506102de611859565b34801561066557600080fd5b506102c2610674366004614390565b611868565b34801561068557600080fd5b506102c26106943660046142d5565b611f99565b3480156106a557600080fd5b506103336106b436600461424f565b612036565b3480156106c557600080fd5b506102c2612044565b3480156106da57600080fd5b506102c26106e93660046142bc565b612101565b3480156106fa57600080fd5b506103336107093660046142d5565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561073357600080fd5b5060105461033390600160b01b900460ff1681565b34801561075457600080fd5b506102c26107633660046142d5565b61228e565b34801561077457600080fd5b506102c26107833660046142d5565b6122f3565b34801561079457600080fd5b506103336107a33660046142d5565b600c6020526000908152604090205460ff1681565b3480156107c457600080fd5b506102c26107d33660046142bc565b6124c4565b3480156107e457600080fd5b506103056107f33660046143b2565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561082a57600080fd5b506102c2610839366004614357565b6126bc565b6102c26126ef565b34801561085257600080fd5b506102c2610861366004614357565b61292b565b34801561087257600080fd5b506103336108813660046142d5565b6001600160a01b031660009081526012602052604090205460ff1690565b3480156108ab57600080fd5b506102c261295e565b3480156108c057600080fd5b506102c26108cf3660046142d5565b612be2565b3480156108e057600080fd5b50600854610398906001600160a01b031681565b606060038054610903906143e0565b80601f016020809104026020016040519081016040528092919081815260200182805461092f906143e0565b801561097c5780601f106109515761010080835404028352916020019161097c565b820191906000526020600020905b81548152906001019060200180831161095f57829003601f168201915b5050505050905090565b600033610994818585612c2e565b60019150505b92915050565b6000336109ae858285612ce0565b6109b9858585612d48565b60019150505b9392505050565b600d81815481106109d657600080fd5b6000918252602090912001546001600160a01b0316905081565b6109f8612e5c565b6000600e541180610a0b57506000600f54115b610a415760405162461bcd60e51b815260206004820152600260248201526104e560f41b60448201526064015b60405180910390fd5b600d54610a755760405162461bcd60e51b815260206004820152600260248201526109c960f31b6044820152606401610a38565b600f54600e5468056bc75e2d6310000091600091610a939190614430565b905081811115610c4c57600081610ab284670de0b6b3a7640000614443565b610abc919061445a565b90506000670de0b6b3a764000082600e54610ad79190614443565b610ae1919061445a565b90506000670de0b6b3a764000083600f54610afc9190614443565b610b06919061445a565b905081600e6000828254610b1a919061447c565b9250508190555080600f6000828254610b33919061447c565b9091555050600e8054600f80549285905583905560408051637ac84fc160e01b815290519192913091637ac84fc191600480830192600092919082900301818387803b158015610b8257600080fd5b505af1925050508015610b93575060015b610c4357610b9f61448f565b806308c379a003610c035750610bb36144e6565b80610bbe5750610c05565b60008051602061491b83398151915281604051610bdb9190614207565b60405180910390a1610bed8584614430565b600e55610bfa8483614430565b600f5550610c43565b505b60008051602061491b833981519152604051610c2090614570565b60405180910390a1610c328483614430565b600e55610c3f8382614430565b600f555b50505050505050565b306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610c8757600080fd5b505af1925050508015610c98575060015b610d1357610ca461448f565b806308c379a003610ced5750610cb86144e6565b80610cc35750610cef565b60008051602061491b83398151915281604051610ce09190614207565b60405180910390a1505050565b505b60008051602061491b833981519152604051610d0a90614570565b60405180910390a15b5050565b610d1f612e5c565b306001600160a01b03831603610d5c5760405162461bcd60e51b815260206004820152600260248201526121a360f11b6044820152606401610a38565b816001600160a01b031663a9059cbb610d7d6006546001600160a01b031690565b836040518363ffffffff1660e01b8152600401610d9b9291906145b2565b6020604051808303816000875af1158015610dba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dde91906145cb565b505050565b6060600d80548060200260200160405190810160405280929190818152602001828054801561097c57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e1d575050505050905090565b610e4c612e5c565b6001600160a01b03919091166000908152601460205260409020805460ff1916911515919091179055565b600260055403610e995760405162461bcd60e51b8152600401610a38906145e8565b6002600555601054610100900460ff1615610edb5760405162461bcd60e51b8152602060048201526002602482015261041560f41b6044820152606401610a38565b6000600f54600e54610eed9190614430565b11610f2e5760405162461bcd60e51b81526020600482015260116024820152704e6f2070656e64696e6720746f6b656e7360781b6044820152606401610a38565b6010805461ff001916610100179055600e54600f5481158015610f4f575080155b15610f665750506010805461ff001916905561146b565b68056bc75e2d631000006000610f7c8385614430565b90508181111561102857600081610f9b84670de0b6b3a7640000614443565b610fa5919061445a565b9050670de0b6b3a7640000610fba8287614443565b610fc4919061445a565b9450670de0b6b3a7640000610fd98286614443565b610fe3919061445a565b9350610fef8486614430565b915084600e6000828254611003919061447c565b9250508190555083600f600082825461101c919061447c565b90915550611033915050565b6000600e819055600f555b60408051858152602081018590527f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd910160405180910390a16040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa1580156110aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ce9190614604565b9050818110156111735784600e60008282546110ea9190614430565b9250508190555083600f60008282546111039190614430565b90915550506010805461ff001916905560405160008051602061491b83398151915290611161906020808252601d908201527f496e73756666696369656e7420636f6e74726163742062616c616e6365000000604082015260600190565b60405180910390a1505050505061146b565b60075461118d9030906001600160a01b0316600019612c2e565b47600061119984612eaa565b90508060000361120e5786600e60008282546111b59190614430565b9250508190555085600f60008282546111ce9190614430565b90915550506010805461ff001916905560405160008051602061491b833981519152906111fa9061461d565b60405180910390a15050505050505061146b565b478281116112835787600e60008282546112289190614430565b9250508190555086600f60008282546112419190614430565b909155505060405160008051602061491b8339815191529061126290614654565b60405180910390a150506010805461ff00191690555061146b945050505050565b600061128f848361447c565b905060008661129e8b84614443565b6112a8919061445a565b905060006112b6828461447c565b9050811561144557600760009054906101000a90046001600160a01b03166001600160a01b031663f305d71983308e600080600b60009054906101000a90046001600160a01b03164261025861130c9190614430565b6040518863ffffffff1660e01b815260040161132d9695949392919061468b565b60606040518083038185885af193505050508015611368575060408051601f3d908101601f19168201909252611365918101906146c6565b60015b61141a5761137461448f565b806308c379a0036113be57506113886144e6565b8061139357506113c0565b60008051602061495b833981519152816040516113b09190614207565b60405180910390a150611445565b505b60008051602061495b83398151915260405161140d906020808252601d908201527f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000604082015260600190565b60405180910390a1611445565b604080518481526020810184905260008051602061493b833981519152910160405180910390a15050505b801561145457611454816135cd565b50506010805461ff00191690555050505050505050505b6001600555565b61147a612e5c565b6001600160a01b03919091166000908152601260205260409020805460ff1916911515919091179055565b6114ad612e5c565b60105460ff16156114e55760405162461bcd60e51b8152602060048201526002602482015261231960f11b6044820152606401610a38565b6010805460ff1916600117905560085460095460405163e6a4390560e01b81523060048201526001600160a01b03918216602482015291169063e6a4390590604401602060405180830381865afa158015611544573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156891906146f4565b600a80546001600160a01b0319166001600160a01b03929092169182179055611624576008546009546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af11580156115df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160391906146f4565b600a80546001600160a01b0319166001600160a01b03929092169190911790555b600a546001600160a01b03166116615760405162461bcd60e51b8152602060048201526002602482015261463360f01b6044820152606401610a38565b600a80546001600160a01b0390811660009081526011602090815260408083208054600160ff19918216811790925595548516845260129092529091208054909316179091556007546116b991309116600019612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926116f192911690600019906004016145b2565b6020604051808303816000875af1158015611710573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061173491906145cb565b6117655760405162461bcd60e51b8152602060048201526002602482015261118d60f21b6044820152606401610a38565b600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261179d92911690600019906004016145b2565b6020604051808303816000875af11580156117bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e091906145cb565b50600a5460405163095ea7b360e01b8152309163095ea7b391611813916001600160a01b031690600019906004016145b2565b6020604051808303816000875af1158015611832573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061185691906145cb565b50565b606060048054610903906143e0565b611870612e5c565b600082116118905760405162461bcd60e51b8152600401610a3890614711565b600081116118c55760405162461bcd60e51b81526020600482015260026024820152614e5360f01b6044820152606401610a38565b6040516370a0823160e01b8152306004820181905283916370a0823190602401602060405180830381865afa158015611902573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119269190614604565b10156119595760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610a38565b6009546040516370a0823160e01b815233600482015282916001600160a01b0316906370a0823190602401602060405180830381865afa1580156119a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c59190614604565b10156119f85760405162461bcd60e51b8152602060048201526002602482015261495360f01b6044820152606401610a38565b6009546040516323b872dd60e01b81526001600160a01b03909116906323b872dd90611a2c9033903090869060040161472d565b6020604051808303816000875af1158015611a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6f91906145cb565b611aa05760405162461bcd60e51b81526020600482015260026024820152612a2360f11b6044820152606401610a38565b600754611ab89030906001600160a01b031684612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611aee9291169085906004016145b2565b6020604051808303816000875af1158015611b0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3191906145cb565b506007546009546001600160a01b039182169163e8e3370091309116858560008033611b5f42610258614430565b60405160e08a901b6001600160e01b03191681526001600160a01b039889166004820152968816602488015260448701959095526064860193909352608485019190915260a484015290921660c482015260e4810191909152610104016060604051808303816000875af1925050508015611bf7575060408051601f3d908101601f19168201909252611bf4918101906146c6565b60015b611e7f57611c0361448f565b806308c379a003611d465750611c176144e6565b80611c225750611d48565b600754611c3b9030906001600160a01b03166000612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611c72929116906000906004016145b2565b6020604051808303816000875af1158015611c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb591906145cb565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611ce890339086906004016145b2565b6020604051808303816000875af1158015611d07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d2b91906145cb565b508060405162461bcd60e51b8152600401610a389190614207565b505b600754611d619030906001600160a01b03166000612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611d98929116906000906004016145b2565b6020604051808303816000875af1158015611db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddb91906145cb565b5060095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611e0e90339085906004016145b2565b6020604051808303816000875af1158015611e2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5191906145cb565b5060405162461bcd60e51b8152602060048201526002602482015261119360f21b6044820152606401610a38565b5050604080518481526020810184905260008051602061493b83398151915292500160405180910390a16009546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611ef2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f169190614604565b90508015610dde5760095460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90611f5090339085906004016145b2565b6020604051808303816000875af1158015611f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f9391906145cb565b50505050565b611fa1612e5c565b6001600160a01b038116611fdc5760405162461bcd60e51b81526020600482015260026024820152615a4160f01b6044820152606401610a38565b600b80546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb49101610d0a565b600033610994818585612d48565b61204c612e5c565b6010546201000090046001600160a01b031661207a5760405162461bcd60e51b8152600401610a3890614751565b601054600160b01b900460ff166120a35760405162461bcd60e51b8152600401610a3890614751565b6010546040516324872d5b60e21b8152306004820152620100009091046001600160a01b03169063921cb56c90602401600060405180830381600087803b1580156120ed57600080fd5b505af1158015611f93573d6000803e3d6000fd5b612109612e5c565b60026005540361212b5760405162461bcd60e51b8152600401610a38906145e8565b60026005558061217d5760405162461bcd60e51b815260206004820152601d60248201527f416d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610a38565b306000908152602081905260409020548111156121d35760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610a38565b601054600160b01b900460ff166121fc5760405162461bcd60e51b8152600401610a3890614751565b47600061220883612eaa565b90508060000361222a5760405162461bcd60e51b8152600401610a389061461d565b4782811161224a5760405162461bcd60e51b8152600401610a3890614654565b60408051858152602081018490527f83dcf65fd6004d3203d0b493e4d86ef58c3565fa57812dbd28c5a903e247c44f910160405180910390a1505060016005555050565b612296612e5c565b6001600160a01b0381166122d15760405162461bcd60e51b815260206004820152600260248201526124a960f11b6044820152606401610a38565b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6122fb612e5c565b6001600160a01b0381166123435760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610a38565b806001600160a01b0316639c0b7d466040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561239d575060408051601f3d908101601f1916820190925261239a918101906146f4565b60015b6123e25760405162461bcd60e51b8152602060048201526016602482015275125b9d985b1a59081c1c9bde1e4818dbdb9d1c9858dd60521b6044820152606401610a38565b6001600160a01b0381161580159061240357506001600160a01b0381163014155b1561245e5760405162461bcd60e51b815260206004820152602560248201527f50726f787920616c72656164792073657420746f20616e6f7468657220636f6e6044820152641d1c9858dd60da1b6064820152608401610a38565b506010805460ff60b01b196001600160a01b0384166201000081029190911662010000600160b81b031990921691909117600160b01b179091556040517f65c4b302ff508168aab64a17ebe745806b65caba61b745d8aff18fb69cb0937290600090a250565b6124cc612e5c565b6002600554036124ee5760405162461bcd60e51b8152600401610a38906145e8565b6002600555806125105760405162461bcd60e51b8152600401610a3890614711565b6040516370a0823160e01b8152306004820181905282916370a0823190602401602060405180830381865afa15801561254d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125719190614604565b10156125a45760405162461bcd60e51b815260206004820152600260248201526124a160f11b6044820152606401610a38565b601054600160b01b900460ff166125cd5760405162461bcd60e51b8152600401610a3890614751565b6007546125e79030906001600160a01b0316600019612c2e565b4760006125f383612eaa565b9050806000036126155760405162461bcd60e51b8152600401610a389061461d565b478281116126355760405162461bcd60e51b8152600401610a3890614654565b6000612641848361447c565b905060006064612652601984614443565b61265c919061445a565b90506000606461266d601985614443565b612677919061445a565b9050811561269f5761269f82606461269060198b614443565b61269a919061445a565b61377a565b80156126ae576126ae816135cd565b505060016005555050505050565b6126c4612e5c565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6126f7612e5c565b6040516370a0823160e01b815230600482018190526000916370a0823190602401602060405180830381865afa158015612735573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127599190614604565b90506000811161277b5760405162461bcd60e51b8152600401610a3890614711565b600034116127b05760405162461bcd60e51b81526020600482015260026024820152614e4560f01b6044820152606401610a38565b6007546127c89030906001600160a01b031683612c2e565b6007546001600160a01b031663f305d719343084600080336127ec42610258614430565b6040518863ffffffff1660e01b815260040161280d9695949392919061468b565b60606040518083038185885af193505050508015612848575060408051601f3d908101601f19168201909252612845918101906146c6565b60015b6128ff5761285461448f565b806308c379a0036128b857506128686144e6565b8061287357506128ba565b60075461288c9030906001600160a01b03166000612c2e565b60405133904780156108fc02916000818181858888f19350505050158015611d2b573d6000803e3d6000fd5b505b6007546128d39030906001600160a01b03166000612c2e565b60405133904780156108fc02916000818181858888f19350505050158015611e51573d6000803e3d6000fd5b50506040805183815234602082015260008051602061493b83398151915292500160405180910390a150565b612933612e5c565b6001600160a01b03919091166000908152601360205260409020805460ff1916911515919091179055565b612966612e5c565b6007546129809030906001600160a01b0316600019612c2e565b60095460075460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926129b892911690600019906004016145b2565b6020604051808303816000875af19250505080156129f3575060408051601f3d908101601f191682019092526129f0918101906145cb565b60015b15612a4957506009546007546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92612a40926001600160a01b03918216929116906000199061472d565b60405180910390a15b600a546001600160a01b031615612be057600954600a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392612a9292911690600019906004016145b2565b6020604051808303816000875af1925050508015612acd575060408051601f3d908101601f19168201909252612aca918101906145cb565b60015b15612b235750600954600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca92612b1a926001600160a01b03918216929116906000199061472d565b60405180910390a15b600a5460405163095ea7b360e01b8152309163095ea7b391612b55916001600160a01b031690600019906004016145b2565b6020604051808303816000875af1925050508015612b90575060408051601f3d908101601f19168201909252612b8d918101906145cb565b60015b15612be05750600a546040517fa0987595c5ce4728f286a8db17fbc0811d0c09919776fbd0bb191a97660d2cca91612bd79130916001600160a01b0316906000199061472d565b60405180910390a15b565b612bea612e5c565b6001600160a01b038116612c255760405162461bcd60e51b81526020600482015260026024820152614f3160f01b6044820152606401610a38565b61185681613989565b6001600160a01b03831615801590612c4e57506001600160a01b03821615155b612c7f5760405162461bcd60e51b8152602060048201526002602482015261114d60f21b6044820152606401610a38565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526001602090815260408083209386168352929052205481811015612d3b5760405162461bcd60e51b8152602060048201526002602482015261453560f01b6044820152606401610a38565b611f938484848403612c2e565b6001600160a01b038316612d835760405162461bcd60e51b8152602060048201526002602482015261543160f01b6044820152606401610a38565b6001600160a01b038216612dbe5760405162461bcd60e51b81526020600482015260026024820152612a1960f11b6044820152606401610a38565b60008111612df35760405162461bcd60e51b8152602060048201526002602482015261543360f01b6044820152606401610a38565b601054610100900460ff1615612e0e57610dde8383836139db565b6001600160a01b03831660009081526011602052604081205460ff1680612e4d57506001600160a01b03831660009081526011602052604090205460ff165b159050611f9384848484613b3a565b33612e6f6006546001600160a01b031690565b6001600160a01b031614612be05760405162461bcd60e51b8152602060048201526002602482015261279960f11b6044820152606401610a38565b600081600003612ebc57506000919050565b601054600160b01b900460ff16612ee55760405162461bcd60e51b8152600401610a3890614751565b816802b5e3af16b1880000811115612f0357506802b5e3af16b18800005b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f3857612f3861477d565b6001600160a01b03928316602091820292909201810191909152600754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612f91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb591906146f4565b81600181518110612fc857612fc861477d565b6001600160a01b039283166020918202929092010152600754600091612ff391309116600019612c2e565b600061300142610e10614430565b60075460105460405163791ac94760e01b815292935047926001600160a01b039283169263791ac9479261304a928a9289928b9262010000909104909116908990600401614793565b600060405180830381600087803b15801561306457600080fd5b505af1925050508015613075575060015b6135b75761308161448f565b806308c379a00361339557506130956144e6565b806130a05750613397565b60008051602061491b833981519152816040516020016130c091906147cf565b60408051601f19818403018152908290526130da91614207565b60405180910390a160075460105460405163791ac94760e01b81526001600160a01b039283169263791ac94792613126928b928a928c9262010000909104909116908a90600401614793565b600060405180830381600087803b15801561314057600080fd5b505af1925050508015613151575060015b61337e5761315d61448f565b806308c379a0036132c357506131716144e6565b8061317c57506132c5565b80511561327257604080518082019091526002815261453560f01b6020918201528151908201207ff3465d5cb5831136b3b4e82db30aaef6a41154c3cba2fd4f528d2b5dde880dc401613272576007546131e39030906001600160a01b0316600019612c2e565b60006131f060028961445a565b905080156132705760008051602061491b8339815191526040516132519060208082526023908201527f4535206572726f722c207265747279696e6720776974682068616c6620616d6f6040820152621d5b9d60ea1b606082015260800190565b60405180910390a161326281612eaa565b9a9950505050505050505050565b505b60008051602061491b833981519152816040516020016132929190614814565b60408051601f19818403018152908290526132ac91614207565b60405180910390a150600098975050505050505050565b505b60006132d260028861445a565b90506000811180156132e45750868114155b1561333c576007546133039030906001600160a01b0316600019612c2e565b60008051602061491b83398151915260405161331e90614859565b60405180910390a161332f81612eaa565b9998505050505050505050565b60008051602061491b8339815191526040516132ac906020808252601290820152712ab735b737bbb71039bbb0b81032b93937b960711b604082015260600190565b61338982878a613d8e565b98975050505050505050565b505b60008051602061491b8339815191526040516133f8906020808252602b908201527f46697273742073776170206d6574686f64206661696c6564207769746820756e60408201526a35b737bbb71032b93937b960a91b606082015260800190565b60405180910390a160075460105460405163791ac94760e01b81526001600160a01b039283169263791ac94792613444928a9289928b9262010000909104909116908990600401614793565b600060405180830381600087803b15801561345e57600080fd5b505af192505050801561346f575060015b6135b75761347b61448f565b806308c379a0036134ea575061348f6144e6565b8061349a57506134ec565b60008051602061491b833981519152816040516020016134ba9190614814565b60408051601f19818403018152908290526134d491614207565b60405180910390a1506000979650505050505050565b505b60006134f960028761445a565b905060008111801561350b5750858114155b156135565760075461352a9030906001600160a01b0316600019612c2e565b60008051602061491b83398151915260405161354590614859565b60405180910390a161338981612eaa565b60008051602061491b8339815191526040516134d4906020808252602b908201527f416c6c2073776170206d6574686f6473206661696c6564207769746820756e6b60408201526a6e6f776e206572726f727360a81b606082015260800190565b6135c2818689613d8e565b979650505050505050565b600d548015806135db575081155b156135e4575050565b60006135f0828461445a565b9050806000036135ff57505050565b60005b8281101561373b576000600d828154811061361f5761361f61477d565b6000918252602090912001546001600160a01b03169050801580159061364e57506001600160a01b0381163014155b80156136685750600a546001600160a01b03828116911614155b15613728576000816001600160a01b03168460405160006040518083038185875af1925050503d80600081146136ba576040519150601f19603f3d011682016040523d82523d6000602084013e6136bf565b606091505b5050905080613726577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b1161460405161371d90602080825260139082015272115512081d1c985b9cd9995c8819985a5b1959606a1b604082015260600190565b60405180910390a15b505b5080613733816148a6565b915050613602565b5060408051848152602081018490527f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c217910160405180910390a1505050565b811580613785575080155b1561378e575050565b6007546137a89030906001600160a01b0316600019612c2e565b60006137b560028461445a565b9050806000036137c457505050565b60006137d160028461445a565b9050806000036137e15750505050565b600060646137f084605a614443565b6137fa919061445a565b90506000606461380b84605a614443565b613815919061445a565b9050600061382542610e10614430565b600754600b5460405163f305d71960e01b81529293506001600160a01b039182169263f305d7199289926138699230928b928a928c92909116908a9060040161468b565b60606040518083038185885af1935050505080156138a4575060408051601f3d908101601f191682019092526138a1918101906146c6565b60015b613956576138b061448f565b806308c379a0036138fa57506138c46144e6565b806138cf57506138fc565b60008051602061495b833981519152816040516138ec9190614207565b60405180910390a150610c43565b505b60008051602061495b833981519152604051613949906020808252601d908201527f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000604082015260600190565b60405180910390a1610c43565b604080518481526020810184905260008051602061493b833981519152910160405180910390a150505050505050505050565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038316613a165760405162461bcd60e51b8152602060048201526002602482015261543160f01b6044820152606401610a38565b6001600160a01b038216613a515760405162461bcd60e51b81526020600482015260026024820152612a1960f11b6044820152606401610a38565b60008111613a865760405162461bcd60e51b8152602060048201526002602482015261543360f01b6044820152606401610a38565b6001600160a01b03831660009081526020819052604090205481811015613ad45760405162461bcd60e51b8152602060048201526002602482015261150d60f21b6044820152606401610a38565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611f93565b60008180613b555750600a546001600160a01b038581169116145b9050808015613b6c5750601054610100900460ff16155b15613d245760006064613b80600586614443565b613b8a919061445a565b90508015613d225760006064613ba1601984614443565b613bab919061445a565b905060006064613bbc601985614443565b613bc6919061445a565b90506000613bd4848861447c565b9050613be18930866139db565b613bec8989836139db565b82600e6000828254613bfe9190614430565b9250508190555081600f6000828254613c179190614430565b90915550613c50905089678ac7230489e80000613c49826001600160a01b031660009081526020819052604090205490565b1015613fd4565b613c7c88678ac7230489e80000613c498b6001600160a01b031660009081526020819052604090205490565b600a546001600160a01b038981169116148015613ca15750601054610100900460ff16155b8015613cc557506801158e460913d00000600f54600e54613cc29190614430565b10155b15613d1857306001600160a01b0316637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613d0557600080fd5b505af1925050508015613d16575060015b505b5050505050611f93565b505b613d2f8585856139db565b613d5b85678ac7230489e80000613c49886001600160a01b031660009081526020819052604090205490565b613d8784678ac7230489e80000613c49876001600160a01b031660009081526020819052604090205490565b5050505050565b6000601060029054906101000a90046001600160a01b03166001600160a01b0316636ab2fe586040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613de057600080fd5b505af1925050508015613df1575060015b613ed857613dfd61448f565b806308c379a003613e685750613e116144e6565b80613e1c5750613e6a565b60008051602061491b83398151915281604051602001613e3c91906148bf565b60408051601f1981840301815290829052613e5691614207565b60405180910390a160009150506109bf565b505b60008051602061491b833981519152604051613ec89060208082526028908201527f50726f787920455448207472616e73666572206661696c65643a20756e6b6e6f6040820152673bb71032b93937b960c11b606082015260800190565b60405180910390a15060006109bf565b476000613ee5868361447c565b90508015613f675760408051868152602081018390527fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc01910160405180910390a183851015613f5e576000613f3a868661447c565b90506000613f4782612eaa565b9050613f538184614430565b9450505050506109bf565b91506109bf9050565b60008051602061491b833981519152604051613fc19060208082526024908201527f4e6f204554482072656365697665642061667465722070726f7879207472616e60408201526339b332b960e11b606082015260800190565b60405180910390a16000925050506109bf565b600a546001600160a01b03838116911614801590613ffb57506001600160a01b0382163014155b15610d135780801561402657506001600160a01b0382166000908152600c602052604090205460ff16155b1561409257506001600160a01b03166000818152600c60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b801580156140b857506001600160a01b0382166000908152600c602052604090205460ff165b15610d13576001600160a01b0382166000908152600c60205260408120805460ff191690555b600d54811015610dde57826001600160a01b0316600d82815481106141055761410561477d565b6000918252602090912001546001600160a01b0316036141d157600d805461412f9060019061447c565b8154811061413f5761413f61477d565b600091825260209091200154600d80546001600160a01b03909216918390811061416b5761416b61477d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600d8054806141aa576141aa614904565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b806141db816148a6565b9150506140de565b60005b838110156141fe5781810151838201526020016141e6565b50506000910152565b60208152600082518060208401526142268160408501602087016141e3565b601f01601f19169190910160400192915050565b6001600160a01b038116811461185657600080fd5b6000806040838503121561426257600080fd5b823561426d8161423a565b946020939093013593505050565b60008060006060848603121561429057600080fd5b833561429b8161423a565b925060208401356142ab8161423a565b929592945050506040919091013590565b6000602082840312156142ce57600080fd5b5035919050565b6000602082840312156142e757600080fd5b81356109bf8161423a565b600081518084526020808501945080840160005b8381101561432b5781516001600160a01b031687529582019590820190600101614306565b509495945050505050565b6020815260006109bf60208301846142f2565b801515811461185657600080fd5b6000806040838503121561436a57600080fd5b82356143758161423a565b9150602083013561438581614349565b809150509250929050565b600080604083850312156143a357600080fd5b50508035926020909101359150565b600080604083850312156143c557600080fd5b82356143d08161423a565b915060208301356143858161423a565b600181811c908216806143f457607f821691505b60208210810361441457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8082018082111561099a5761099a61441a565b808202811582820484141761099a5761099a61441a565b60008261447757634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561099a5761099a61441a565b600060033d11156144a85760046000803e5060005160e01c5b90565b601f8201601f1916810167ffffffffffffffff811182821017156144df57634e487b7160e01b600052604160045260246000fd5b6040525050565b600060443d10156144f45790565b6040516003193d81016004833e81513d67ffffffffffffffff816024840111818411171561452457505050505090565b828501915081518181111561453c5750505050505090565b843d87010160208285010111156145565750505050505090565b614565602082860101876144ab565b509095945050505050565b60208082526022908201527f556e6b6e6f776e206572726f7220696e207472696767657250726f63657373696040820152616e6760f01b606082015260800190565b6001600160a01b03929092168252602082015260400190565b6000602082840312156145dd57600080fd5b81516109bf81614349565b602080825260029082015261523160f01b604082015260600190565b60006020828403121561461657600080fd5b5051919050565b6020808252601c908201527f53776170206661696c65642c206e6f2045544820726563656976656400000000604082015260600190565b60208082526019908201527f4e6f204554482072656365697665642066726f6d207377617000000000000000604082015260600190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156146db57600080fd5b8351925060208401519150604084015190509250925092565b60006020828403121561470657600080fd5b81516109bf8161423a565b602080825260029082015261139560f21b604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526012908201527114ddd85c081c1c9bde1e481b9bdd081cd95d60721b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b85815284602082015260a0604082015260006147b260a08301866142f2565b6001600160a01b0394909416606083015250608001529392505050565b7f46697273742073776170206d6574686f64206661696c65643a2000000000000081526000825161480781601a8501602087016141e3565b91909101601a0192915050565b7f416c7465726e61746976652073776170206d6574686f64206661696c65643a2081526000825161484c8160208501602087016141e3565b9190910160200192915050565b6020808252602d908201527f556e6b6e6f776e2073776170206572726f722c207265747279696e672077697460408201526c1a081a185b1988185b5bdd5b9d609a1b606082015260800190565b6000600182016148b8576148b861441a565b5060010190565b7f50726f787920455448207472616e73666572206661696c65643a2000000000008152600082516148f781601b8501602087016141e3565b91909101601b0192915050565b634e487b7160e01b600052603160045260246000fdfe4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072338f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515ba31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ada26469706673582212205d7d271fb9f2a6f8972edf029dacb7e9f64d6ae643b663ce62309bc498b060a464736f6c63430008110033
Deployed Bytecode Sourcemap
8984:38362:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43789:9;:13;43785:85;;43824:34;;43848:9;160:25:1;;43836:10:0;;43824:34;;148:2:1;133:18;43824:34:0;;;;;;;43785:85;8984:38362;;;;;2958:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36735:118;;;;;;;;;;-1:-1:-1;36822:23:0;;36735:118;;;160:25:1;;;148:2;133:18;36735:118:0;14:177:1;3825:190:0;;;;;;;;;;-1:-1:-1;3825:190:0;;;;;:::i;:::-;;:::i;:::-;;;1473:14:1;;1466:22;1448:41;;1436:2;1421:18;3825:190:0;1308:187:1;3252:99:0;;;;;;;;;;-1:-1:-1;3331:12:0;;3252:99;;4023:250;;;;;;;;;;-1:-1:-1;4023:250:0;;;;;:::i;:::-;;:::i;9984:24::-;;;;;;;;;;-1:-1:-1;9984:24:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2310:32:1;;;2292:51;;2280:2;2265:18;9984:24:0;2146:203:1;3160:84:0;;;;;;;;;;-1:-1:-1;3160:84:0;;3234:2;2496:36:1;;2484:2;2469:18;3160:84:0;2354:184:1;37034:2580:0;;;;;;;;;;;;;:::i;9808:25::-;;;;;;;;;;-1:-1:-1;9808:25:0;;;;-1:-1:-1;;;;;9808:25:0;;;9875:29;;;;;;;;;;-1:-1:-1;9875:29:0;;;;-1:-1:-1;;;;;9875:29:0;;;11118:26;;;;;;;;;;-1:-1:-1;11118:26:0;;;;-1:-1:-1;;;11118:26:0;;;;;;46424:126;;;;;;;;;;-1:-1:-1;46424:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;46515:27:0;46491:4;46515:27;;;:18;:27;;;;;;;;;46424:126;36501:183;;;;;;;;;;-1:-1:-1;36501:183:0;;;;;:::i;:::-;;:::i;36861:114::-;;;;;;;;;;-1:-1:-1;36946:21:0;;36861:114;;32504:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;9710:41::-;;;;;;;;;;-1:-1:-1;9710:41:0;;;;-1:-1:-1;;;;;9710:41:0;;;46284:128;;;;;;;;;;-1:-1:-1;46284:128:0;;;;;:::i;:::-;;:::i;46864:120::-;;;;;;;;;;-1:-1:-1;46864:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;46952:24:0;46928:4;46952:24;;;:15;:24;;;;;;;;;46864:120;11032:24;;;;;;;;;;-1:-1:-1;11032:24:0;;;;;;;-1:-1:-1;;;;;11032:24:0;;;3359:118;;;;;;;;;;-1:-1:-1;3359:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;3451:18:0;3424:7;3451:18;;;;;;;;;;;;3359:118;32394:98;;;;;;;;;;-1:-1:-1;32470:7:0;:14;32394:98;;17089:4986;;;;;;;;;;;;;:::i;45968:162::-;;;;;;;;;;-1:-1:-1;45968:162:0;;;;;:::i;:::-;;:::i;9840:28::-;;;;;;;;;;-1:-1:-1;9840:28:0;;;;-1:-1:-1;;;;;9840:28:0;;;12751:1070;;;;;;;;;;;;;:::i;1946:87::-;;;;;;;;;;-1:-1:-1;2019:6:0;;-1:-1:-1;;;;;2019:6:0;1946:87;;3057:95;;;;;;;;;;;;;:::i;32655:2260::-;;;;;;;;;;-1:-1:-1;32655:2260:0;;;;;:::i;:::-;;:::i;41660:319::-;;;;;;;;;;-1:-1:-1;41660:319:0;;;;;:::i;:::-;;:::i;3485:182::-;;;;;;;;;;-1:-1:-1;3485:182:0;;;;;:::i;:::-;;:::i;47038:305::-;;;;;;;;;;;;;:::i;40654:948::-;;;;;;;;;;-1:-1:-1;40654:948:0;;;;;:::i;:::-;;:::i;46730:122::-;;;;;;;;;;-1:-1:-1;46730:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;46819:25:0;46795:4;46819:25;;;:16;:25;;;;;;;;;46730:122;11063:24;;;;;;;;;;-1:-1:-1;11063:24:0;;;;-1:-1:-1;;;11063:24:0;;;;;;36327:166;;;;;;;;;;-1:-1:-1;36327:166:0;;;;;:::i;:::-;;:::i;43916:888::-;;;;;;;;;;-1:-1:-1;43916:888:0;;;;;:::i;:::-;;:::i;9937:40::-;;;;;;;;;;-1:-1:-1;9937:40:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42030:1603;;;;;;;;;;-1:-1:-1;42030:1603:0;;;;;:::i;:::-;;:::i;3675:142::-;;;;;;;;;;-1:-1:-1;3675:142:0;;;;;:::i;:::-;-1:-1:-1;;;;;3782:18:0;;;3755:7;3782:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3675:142;45824:132;;;;;;;;;;-1:-1:-1;45824:132:0;;;;;:::i;:::-;;:::i;35000:1319::-;;;:::i;46142:130::-;;;;;;;;;;-1:-1:-1;46142:130:0;;;;;:::i;:::-;;:::i;46562:156::-;;;;;;;;;;-1:-1:-1;46562:156:0;;;;;:::i;:::-;-1:-1:-1;;;;;46668:42:0;46644:4;46668:42;;;:33;:42;;;;;;;;;46562:156;39660:958;;;;;;;;;;;;;:::i;2149:165::-;;;;;;;;;;-1:-1:-1;2149:165:0;;;;;:::i;:::-;;:::i;9758:43::-;;;;;;;;;;-1:-1:-1;9758:43:0;;;;-1:-1:-1;;;;;9758:43:0;;;2958:91;3003:13;3036:5;3029:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2958:91;:::o;3825:190::-;3899:4;3932:10;3953:32;3932:10;3969:7;3978:6;3953:8;:32::i;:::-;4003:4;3996:11;;;3825:190;;;;;:::o;4023:250::-;4111:4;4146:10;4167:38;4183:4;4146:10;4198:6;4167:15;:38::i;:::-;4216:27;4226:4;4232:2;4236:6;4216:9;:27::i;:::-;4261:4;4254:11;;;4023:250;;;;;;:::o;9984:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9984:24:0;;-1:-1:-1;9984:24:0;:::o;37034:2580::-;1905:13;:11;:13::i;:::-;37127:1:::1;37101:23;;:27;:56;;;;37156:1;37132:21;;:25;37101:56;37093:71;;;::::0;-1:-1:-1;;;37093:71:0;;5737:2:1;37093:71:0::1;::::0;::::1;5719:21:1::0;5776:1;5756:18;;;5749:29;-1:-1:-1;;;5794:18:1;;;5787:32;5836:18;;37093:71:0::1;;;;;;;;;37183:7;:14:::0;37175:33:::1;;;::::0;-1:-1:-1;;;37175:33:0;;6067:2:1;37175:33:0::1;::::0;::::1;6049:21:1::0;6106:1;6086:18;;;6079:29;-1:-1:-1;;;6124:18:1;;;6117:32;6166:18;;37175:33:0::1;5865:325:1::0;37175:33:0::1;37432:21;::::0;37406:23:::1;::::0;37306:12:::1;::::0;37279:24:::1;::::0;37406:47:::1;::::0;37432:21;37406:47:::1;:::i;:::-;37377:76;;37588:16;37567:18;:37;37563:2044;;;37652:13;37694:18:::0;37668:23:::1;:16:::0;37687:4:::1;37668:23;:::i;:::-;:44;;;;:::i;:::-;37652:60;;37727:30;37794:4;37786:5;37760:23;;:31;;;;:::i;:::-;:38;;;;:::i;:::-;37727:71;;37813:28;37876:4;37868:5;37844:21;;:29;;;;:::i;:::-;:36;;;;:::i;:::-;37813:67;;37983:22;37956:23;;:49;;;;;;;:::i;:::-;;;;;;;;38045:20;38020:21;;:45;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;38177:23:0::1;::::0;;38250:21:::1;::::0;;38347:48;;;;38410:44;;;38487:33:::1;::::0;;-1:-1:-1;;;38487:33:0;;;;38177:23;;38250:21;38487:4:::1;::::0;:31:::1;::::0;:33:::1;::::0;;::::1;::::0;38140:34:::1;::::0;38487:33;;;;;;;38140:34;38487:4;:33;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;;;;;38483:760;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;;;;;;;38647:6:0::1;38636:18;;;;;;:::i;:::-;;;;;;;;38752:51;38781:22:::0;38752:26;:51:::1;:::i;:::-;38726:23;:77:::0;38846:47:::1;38873:20:::0;38846:24;:47:::1;:::i;:::-;38822:21;:71:::0;-1:-1:-1;38483:760:0::1;;;;;-1:-1:-1::0;;;;;;;;;;;38940:48:0::1;;;;;:::i;:::-;;;;;;;;39086:51;39115:22:::0;39086:26;:51:::1;:::i;:::-;39060:23;:77:::0;39180:47:::1;39207:20:::0;39180:24;:47:::1;:::i;:::-;39156:21;:71:::0;38483:760:::1;37606:1648;;;;;37082:2532;;37034:2580::o:0;37563:2044::-:1;39318:4;-1:-1:-1::0;;;;;39318:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;39314:282;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;;;;;;;39478:6:0::1;39467:18;;;;;;:::i;:::-;;;;;;;;39409:92;37082:2532;;37034:2580::o:0;39314:282::-:1;;;-1:-1:-1::0;;;;;;;;;;;39532:48:0::1;;;;;:::i;:::-;;;;;;;;39314:282;37082:2532;;37034:2580::o:0;36501:183::-;1905:13;:11;:13::i;:::-;36612:4:::1;-1:-1:-1::0;;;;;36594:23:0;::::1;::::0;36586:38:::1;;;::::0;-1:-1:-1;;;36586:38:0;;8933:2:1;36586:38:0::1;::::0;::::1;8915:21:1::0;8972:1;8952:18;;;8945:29;-1:-1:-1;;;8990:18:1;;;8983:32;9032:18;;36586:38:0::1;8731:325:1::0;36586:38:0::1;36642:6;-1:-1:-1::0;;;;;36635:23:0::1;;36659:7;2019:6:::0;;-1:-1:-1;;;;;2019:6:0;;1946:87;36659:7:::1;36668;36635:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36501:183:::0;;:::o;32504:96::-;32549:16;32585:7;32578:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32578:14:0;;;;;;;;;;;;;;;;;;;;;;32504:96;:::o;46284:128::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;46370:24:0;;;::::1;;::::0;;;:15:::1;:24;::::0;;;;:34;;-1:-1:-1;;46370:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46284:128::o;17089:4986::-;1199:1;1345:7;;:19;1337:34;;;;-1:-1:-1;;;1337:34:0;;;;;;;:::i;:::-;1199:1;1382:7;:18;17169:7:::1;::::0;::::1;::::0;::::1;;;17168:8;17160:23;;;::::0;-1:-1:-1;;;17160:23:0;;10122:2:1;17160:23:0::1;::::0;::::1;10104:21:1::0;10161:1;10141:18;;;10134:29;-1:-1:-1;;;10179:18:1;;;10172:32;10221:18;;17160:23:0::1;9920:325:1::0;17160:23:0::1;17312:1;17288:21;;17262:23;;:47;;;;:::i;:::-;:51;17254:81;;;::::0;-1:-1:-1;;;17254:81:0;;10452:2:1;17254:81:0::1;::::0;::::1;10434:21:1::0;10491:2;10471:18;;;10464:30;-1:-1:-1;;;10510:18:1;;;10503:47;10567:18;;17254:81:0::1;10250:341:1::0;17254:81:0::1;17356:7;:14:::0;;-1:-1:-1;;17356:14:0::1;;;::::0;;17420:23:::1;::::0;17481:21:::1;::::0;17527:23;;:48;::::1;;;-1:-1:-1::0;17554:21:0;;17527:48:::1;17523:117;;;-1:-1:-1::0;;17592:7:0::1;:15:::0;;-1:-1:-1;;17592:15:0::1;::::0;;17622:7:::1;;17523:117;17737:12;17710:24;17836:37;17857:16:::0;17836:18;:37:::1;:::i;:::-;17808:65;;18007:16;17987:17;:36;17983:694;;;18071:13;18113:17:::0;18087:23:::1;:16:::0;18106:4:::1;18087:23;:::i;:::-;:43;;;;:::i;:::-;18071:59:::0;-1:-1:-1;18195:4:0::1;18166:26;18071:59:::0;18166:18;:26:::1;:::i;:::-;:33;;;;:::i;:::-;18145:54:::0;-1:-1:-1;18260:4:0::1;18233:24;18252:5:::0;18233:16;:24:::1;:::i;:::-;:31;;;;:::i;:::-;18214:50:::0;-1:-1:-1;18299:37:0::1;18214:50:::0;18299:18;:37:::1;:::i;:::-;18279:57;;18439:18;18412:23;;:45;;;;;;;:::i;:::-;;;;;;;;18497:16;18472:21;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;17983:694:0::1;::::0;-1:-1:-1;;17983:694:0::1;;18624:1;18598:23;:27:::0;;;18640:21:::1;:25:::0;17983:694:::1;18702:52;::::0;;10770:25:1;;;10826:2;10811:18;;10804:34;;;18702:52:0::1;::::0;10743:18:1;18702:52:0::1;;;;;;;18843:46;::::0;-1:-1:-1;;;18843:46:0;;18858:4:::1;18843:46;::::0;::::1;2292:51:1::0;;;18817:23:0::1;::::0;18843:31:::1;::::0;2265:18:1;;18843:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18817:72;;18922:17;18904:15;:35;18900:385;;;19085:18;19058:23;;:45;;;;;;;:::i;:::-;;;;;;;;19143:16;19118:21;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;19174:7:0::1;:15:::0;;-1:-1:-1;;19174:15:0::1;::::0;;19209:43:::1;::::0;-1:-1:-1;;;;;;;;;;;19209:43:0;::::1;::::0;11240:2:1;11222:21;;;11279:2;11259:18;;;11252:30;11318:31;11313:2;11298:18;;11291:59;11382:2;11367:18;;11038:353;19209:43:0::1;;;;;;;;19267:7;;;;;;;18900:385;19367:16;::::0;19335:69:::1;::::0;19352:4:::1;::::0;-1:-1:-1;;;;;19367:16:0::1;-1:-1:-1::0;;19335:8:0::1;:69::i;:::-;19500:21;19472:25;19622:31;19635:17:::0;19622:12:::1;:31::i;:::-;19600:53;;19678:11;19693:1;19678:16:::0;19674:342:::1;;19817:18;19790:23;;:45;;;;;;;:::i;:::-;;;;;;;;19875:16;19850:21;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;19906:7:0::1;:15:::0;;-1:-1:-1;;19906:15:0::1;::::0;;19941:42:::1;::::0;-1:-1:-1;;;;;;;;;;;19941:42:0;::::1;::::0;::::1;:::i;:::-;;;;;;;;19998:7;;;;;;;;;19674:342;20114:21;20150:39:::0;;::::1;20146:355;;20305:18;20278:23;;:45;;;;;;;:::i;:::-;;;;;;;;20363:16;20338:21;;:41;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;20399:39:0::1;::::0;-1:-1:-1;;;;;;;;;;;20399:39:0;::::1;::::0;::::1;:::i;:::-;;;;;;;;-1:-1:-1::0;;20453:7:0::1;:15:::0;;-1:-1:-1;;20453:15:0::1;::::0;;-1:-1:-1;20483:7:0::1;::::0;-1:-1:-1;;;;;20483:7:0::1;20146:355;20565:25;20593:38;20614:17:::0;20593:18;:38:::1;:::i;:::-;20565:66:::0;-1:-1:-1;20682:23:0::1;20749:17:::0;20708:38:::1;20728:18:::0;20565:66;20708:38:::1;:::i;:::-;:58;;;;:::i;:::-;20682:84:::0;-1:-1:-1;20777:21:0::1;20801:35;20682:84:::0;20801:17;:35:::1;:::i;:::-;20777:59:::0;-1:-1:-1;20895:19:0;;20891:997:::1;;20935:16;;;;;;;;;-1:-1:-1::0;;;;;20935:16:0::1;-1:-1:-1::0;;;;;20935:32:0::1;;20975:15;21018:4;21042:18;21079:1;21125::::0;21169:14:::1;;;;;;;;;-1:-1:-1::0;;;;;21169:14:0::1;21238:15;21256:3;21238:21;;;;:::i;:::-;20935:361;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;20935:361:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;20935:361:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;20931:946;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;;;;;;;21756:6:0::1;21737:26;;;;;;:::i;:::-;;;;;;;;21679:100;20931:946;;;;;-1:-1:-1::0;;;;;;;;;;;21810:51:0::1;;;;13232:2:1::0;13214:21;;;13271:2;13251:18;;;13244:30;13310:31;13305:2;13290:18;;13283:59;13374:2;13359:18;;13030:353;21810:51:0::1;;;;;;;;20931:946;;;21389:38;::::0;;10770:25:1;;;10826:2;10811:18;;10804:34;;;-1:-1:-1;;;;;;;;;;;21389:38:0;10743:18:1;21389:38:0::1;;;;;;;21297:381;;;20931:946;21949:17:::0;;21945:87:::1;;21983:37;22006:13;21983:22;:37::i;:::-;-1:-1:-1::0;;22052:7:0::1;:15:::0;;-1:-1:-1;;22052:15:0::1;::::0;;-1:-1:-1;;;;;;;;;1411:1:0::1;1155::::0;1423:7;:22;17089:4986::o;45968:162::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;46069:42:0;;;::::1;;::::0;;;:33:::1;:42;::::0;;;;:53;;-1:-1:-1;;46069:53:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45968:162::o;12751:1070::-;1905:13;:11;:13::i;:::-;12812:12:::1;::::0;::::1;;12811:13;12803:28;;;::::0;-1:-1:-1;;;12803:28:0;;13590:2:1;12803:28:0::1;::::0;::::1;13572:21:1::0;13629:1;13609:18;;;13602:29;-1:-1:-1;;;13647:18:1;;;13640:32;13689:18;;12803:28:0::1;13388:325:1::0;12803:28:0::1;12842:12;:19:::0;;-1:-1:-1;;12842:19:0::1;12857:4;12842:19;::::0;;12933:17:::1;::::0;12974:10:::1;::::0;12933:52:::1;::::0;-1:-1:-1;;;12933:52:0;;12967:4:::1;12933:52;::::0;::::1;13930:34:1::0;-1:-1:-1;;;;;12974:10:0;;::::1;13980:18:1::0;;;13973:43;12933:17:0;::::1;::::0;:25:::1;::::0;13865:18:1;;12933:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12917:13;:68:::0;;-1:-1:-1;;;;;;12917:68:0::1;-1:-1:-1::0;;;;;12917:68:0;;;::::1;::::0;;::::1;::::0;;13051:131:::1;;13115:17;::::0;13159:10:::1;::::0;13115:55:::1;::::0;-1:-1:-1;;;13115:55:0;;13152:4:::1;13115:55;::::0;::::1;13930:34:1::0;-1:-1:-1;;;;;13159:10:0;;::::1;13980:18:1::0;;;13973:43;13115:17:0;::::1;::::0;:28:::1;::::0;13865:18:1;;13115:55:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13099:13;:71:::0;;-1:-1:-1;;;;;;13099:71:0::1;-1:-1:-1::0;;;;;13099:71:0;;;::::1;::::0;;;::::1;::::0;;13051:131:::1;13210:13;::::0;-1:-1:-1;;;;;13210:13:0::1;13202:42;;;::::0;-1:-1:-1;;;13202:42:0;;14485:2:1;13202:42:0::1;::::0;::::1;14467:21:1::0;14524:1;14504:18;;;14497:29;-1:-1:-1;;;14542:18:1;;;14535:32;14584:18;;13202:42:0::1;14283:325:1::0;13202:42:0::1;13323:13;::::0;;-1:-1:-1;;;;;13323:13:0;;::::1;13304:33;::::0;;;:18:::1;:33;::::0;;;;;;;:40;;13340:4:::1;-1:-1:-1::0;;13304:40:0;;::::1;::::0;::::1;::::0;;;13457:13;;;::::1;13423:48:::0;;:33:::1;:48:::0;;;;;;:55;;;;::::1;;::::0;;;13523:16:::1;::::0;13491:69:::1;::::0;13508:4:::1;::::0;13523:16:::1;-1:-1:-1::0;;13491:8:0::1;:69::i;:::-;13596:10;::::0;13624:16:::1;::::0;13589:72:::1;::::0;-1:-1:-1;;;13589:72:0;;-1:-1:-1;;;;;13596:10:0;;::::1;::::0;13589:26:::1;::::0;:72:::1;::::0;13624:16;::::1;::::0;-1:-1:-1;;13643:17:0;13589:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13581:87;;;::::0;-1:-1:-1;;;13581:87:0;;14815:2:1;13581:87:0::1;::::0;::::1;14797:21:1::0;14854:1;14834:18;;;14827:29;-1:-1:-1;;;14872:18:1;;;14865:32;14914:18;;13581:87:0::1;14613:325:1::0;13581:87:0::1;13686:10;::::0;13706:13:::1;::::0;13679:60:::1;::::0;-1:-1:-1;;;13679:60:0;;-1:-1:-1;;;;;13686:10:0;;::::1;::::0;13679:26:::1;::::0;:60:::1;::::0;13706:13;::::1;::::0;-1:-1:-1;;13721:17:0;13679:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;13780:13:0::1;::::0;13750:63:::1;::::0;-1:-1:-1;;;13750:63:0;;13765:4:::1;::::0;13750:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;13780:13:0::1;::::0;-1:-1:-1;;13795:17:0;13750:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12751:1070::o:0;3057:95::-;3104:13;3137:7;3130:14;;;;;:::i;32655:2260::-;1905:13;:11;:13::i;:::-;32788:1:::1;32774:11;:15;32766:30;;;;-1:-1:-1::0;;;32766:30:0::1;;;;;;;:::i;:::-;32829:1;32815:11;:15;32807:30;;;::::0;-1:-1:-1;;;32807:30:0;;15475:2:1;32807:30:0::1;::::0;::::1;15457:21:1::0;15514:1;15494:18;;;15487:29;-1:-1:-1;;;15532:18:1;;;15525:32;15574:18;;32807:30:0::1;15273:325:1::0;32807:30:0::1;32880:46;::::0;-1:-1:-1;;;32880:46:0;;32895:4:::1;32880:46;::::0;::::1;2292:51:1::0;;;32930:11:0;;32880:31:::1;::::0;2265:18:1;;32880:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;32858:113;;;::::0;-1:-1:-1;;;32858:113:0;;15805:2:1;32858:113:0::1;::::0;::::1;15787:21:1::0;15844:1;15824:18;;;15817:29;-1:-1:-1;;;15862:18:1;;;15855:32;15904:18;;32858:113:0::1;15603:325:1::0;32858:113:0::1;33021:10;::::0;33014:40:::1;::::0;-1:-1:-1;;;33014:40:0;;33043:10:::1;33014:40;::::0;::::1;2292:51:1::0;33058:11:0;;-1:-1:-1;;;;;33021:10:0::1;::::0;33014:28:::1;::::0;2265:18:1;;33014:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;32992:107;;;::::0;-1:-1:-1;;;32992:107:0;;16135:2:1;32992:107:0::1;::::0;::::1;16117:21:1::0;16174:1;16154:18;;;16147:29;-1:-1:-1;;;16192:18:1;;;16185:32;16234:18;;32992:107:0::1;15933:325:1::0;32992:107:0::1;33201:10;::::0;33194:71:::1;::::0;-1:-1:-1;;;33194:71:0;;-1:-1:-1;;;;;33201:10:0;;::::1;::::0;33194:31:::1;::::0;:71:::1;::::0;33226:10:::1;::::0;33246:4:::1;::::0;33253:11;;33194:71:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33172:123;;;::::0;-1:-1:-1;;;33172:123:0;;16845:2:1;33172:123:0::1;::::0;::::1;16827:21:1::0;16884:1;16864:18;;;16857:29;-1:-1:-1;;;16902:18:1;;;16895:32;16944:18;;33172:123:0::1;16643:325:1::0;33172:123:0::1;33374:16;::::0;33342:63:::1;::::0;33359:4:::1;::::0;-1:-1:-1;;;;;33374:16:0::1;33393:11:::0;33342:8:::1;:63::i;:::-;33423:10;::::0;33451:16:::1;::::0;33416:66:::1;::::0;-1:-1:-1;;;33416:66:0;;-1:-1:-1;;;;;33423:10:0;;::::1;::::0;33416:26:::1;::::0;:66:::1;::::0;33451:16;::::1;::::0;33470:11;;33416:66:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;33507:16:0::1;::::0;33579:10:::1;::::0;-1:-1:-1;;;;;33507:16:0;;::::1;::::0;:29:::1;::::0;33559:4:::1;::::0;33579:10:::1;33604:11:::0;33630;33507:16:::1;::::0;33780:10:::1;33805:21;:15;33823:3;33805:21;:::i;:::-;33507:356;::::0;::::1;::::0;;;-1:-1:-1;;;;;;33507:356:0;;;-1:-1:-1;;;;;17388:15:1;;;33507:356:0::1;::::0;::::1;17370:34:1::0;17440:15;;;17420:18;;;17413:43;17472:18;;;17465:34;;;;17515:18;;;17508:34;;;;17558:19;;;17551:35;;;;17602:19;;;17595:35;17667:15;;;17646:19;;;17639:44;17699:19;;;17692:35;;;;17304:19;;33507:356:0::1;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;33507:356:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;33507:356:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;33503:1147;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;34018:16;::::0;33986:53:::1;::::0;34003:4:::1;::::0;-1:-1:-1;;;;;34018:16:0::1;;33986:8;:53::i;:::-;34061:10;::::0;34089:16:::1;::::0;34054:56:::1;::::0;-1:-1:-1;;;34054:56:0;;-1:-1:-1;;;;;34061:10:0;;::::1;::::0;34054:26:::1;::::0;:56:::1;::::0;34089:16;::::1;::::0;34061:10:::1;::::0;34054:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;34194:10:0::1;::::0;34187:52:::1;::::0;-1:-1:-1;;;34187:52:0;;-1:-1:-1;;;;;34194:10:0;;::::1;::::0;34187:27:::1;::::0;:52:::1;::::0;34215:10:::1;::::0;34227:11;;34187:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34275:6;34268:14;;-1:-1:-1::0;;;34268:14:0::1;;;;;;;;:::i;33503:1147::-;;;34376:16;::::0;34344:53:::1;::::0;34361:4:::1;::::0;-1:-1:-1;;;;;34376:16:0::1;;34344:8;:53::i;:::-;34419:10;::::0;34447:16:::1;::::0;34412:56:::1;::::0;-1:-1:-1;;;34412:56:0;;-1:-1:-1;;;;;34419:10:0;;::::1;::::0;34412:26:::1;::::0;:56:::1;::::0;34447:16;::::1;::::0;34419:10:::1;::::0;34412:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;34552:10:0::1;::::0;34545:52:::1;::::0;-1:-1:-1;;;34545:52:0;;-1:-1:-1;;;;;34552:10:0;;::::1;::::0;34545:27:::1;::::0;:52:::1;::::0;34573:10:::1;::::0;34585:11;;34545:52:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;34626:12:0::1;::::0;-1:-1:-1;;;34626:12:0;;18227:2:1;34626:12:0::1;::::0;::::1;18209:21:1::0;18266:1;18246:18;;;18239:29;-1:-1:-1;;;18284:18:1;;;18277:32;18326:18;;34626:12:0::1;18025:325:1::0;33503:1147:0::1;-1:-1:-1::0;;33884:40:0::1;::::0;;10770:25:1;;;10826:2;10811:18;;10804:34;;;-1:-1:-1;;;;;;;;;;;33884:40:0;-1:-1:-1;10743:18:1;33884:40:0::1;;;;;;;34753:10;::::0;34746:43:::1;::::0;-1:-1:-1;;;34746:43:0;;34783:4:::1;34746:43;::::0;::::1;2292:51:1::0;34720:23:0::1;::::0;-1:-1:-1;;;;;34753:10:0::1;::::0;34746:28:::1;::::0;2265:18:1;;34746:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34720:69:::0;-1:-1:-1;34804:19:0;;34800:108:::1;;34847:10;::::0;34840:56:::1;::::0;-1:-1:-1;;;34840:56:0;;-1:-1:-1;;;;;34847:10:0;;::::1;::::0;34840:27:::1;::::0;:56:::1;::::0;34868:10:::1;::::0;34880:15;;34840:56:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32755:2160;32655:2260:::0;;:::o;41660:319::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;41752:31:0;::::1;41744:46;;;::::0;-1:-1:-1;;;41744:46:0;;18557:2:1;41744:46:0::1;::::0;::::1;18539:21:1::0;18596:1;18576:18;;;18569:29;-1:-1:-1;;;18614:18:1;;;18607:32;18656:18;;41744:46:0::1;18355:325:1::0;41744:46:0::1;41833:14;::::0;;-1:-1:-1;;;;;41858:34:0;;::::1;-1:-1:-1::0;;;;;;41858:34:0;::::1;::::0;::::1;::::0;;;41918:53:::1;::::0;;41833:14;;;::::1;13930:34:1::0;;;13995:2;13980:18;;13973:43;;;;41918:53:0::1;::::0;13865:18:1;41918:53:0::1;13718:304:1::0;3485:182:0;3555:4;3588:10;3609:28;3588:10;3626:2;3630:6;3609:9;:28::i;47038:305::-;1905:13;:11;:13::i;:::-;47110:9:::1;::::0;;;::::1;-1:-1:-1::0;;;;;47110:9:0::1;47102:54;;;;-1:-1:-1::0;;;47102:54:0::1;;;;;;;:::i;:::-;47175:12;::::0;-1:-1:-1;;;47175:12:0;::::1;;;47167:43;;;;-1:-1:-1::0;;;47167:43:0::1;;;;;;;:::i;:::-;47292:9;::::0;47281:54:::1;::::0;-1:-1:-1;;;47281:54:0;;47329:4:::1;47281:54;::::0;::::1;2292:51:1::0;47292:9:0;;;::::1;-1:-1:-1::0;;;;;47292:9:0::1;::::0;47281:39:::1;::::0;2265:18:1;;47281:54:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;40654:948:::0;1905:13;:11;:13::i;:::-;1199:1:::1;1345:7;;:19:::0;1337:34:::1;;;;-1:-1:-1::0;;;1337:34:0::1;;;;;;;:::i;:::-;1199:1;1382:7;:18:::0;40746:15;40738:57:::2;;;::::0;-1:-1:-1;;;40738:57:0;;19234:2:1;40738:57:0::2;::::0;::::2;19216:21:1::0;19273:2;19253:18;;;19246:30;19312:31;19292:18;;;19285:59;19361:18;;40738:57:0::2;19032:353:1::0;40738:57:0::2;40847:4;3424:7:::0;3451:18;;;;;;;;;;;40814:11:::2;:39;;40806:72;;;::::0;-1:-1:-1;;;40806:72:0;;19592:2:1;40806:72:0::2;::::0;::::2;19574:21:1::0;19631:2;19611:18;;;19604:30;-1:-1:-1;;;19650:18:1;;;19643:50;19710:18;;40806:72:0::2;19390:344:1::0;40806:72:0::2;40897:12;::::0;-1:-1:-1;;;40897:12:0;::::2;;;40889:43;;;;-1:-1:-1::0;;;40889:43:0::2;;;;;;;:::i;:::-;41028:21;41000:25;41117;41130:11:::0;41117:12:::2;:25::i;:::-;41095:47;;41204:11;41219:1;41204:16:::0;41200:87:::2;;41237:38;;-1:-1:-1::0;;;41237:38:0::2;;;;;;;:::i;41200:87::-;41385:21;41421:39:::0;;::::2;41417:107;;41477:35;;-1:-1:-1::0;;;41477:35:0::2;;;;;;;:::i;41417:107::-;41549:45;::::0;;10770:25:1;;;10826:2;10811:18;;10804:34;;;41549:45:0::2;::::0;10743:18:1;41549:45:0::2;;;;;;;-1:-1:-1::0;;1155:1:0::1;1423:7;:22:::0;-1:-1:-1;;40654:948:0:o;36327:166::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;36401:21:0;::::1;36393:36;;;::::0;-1:-1:-1;;;36393:36:0;;19941:2:1;36393:36:0::1;::::0;::::1;19923:21:1::0;19980:1;19960:18;;;19953:29;-1:-1:-1;;;19998:18:1;;;19991:32;20040:18;;36393:36:0::1;19739:325:1::0;36393:36:0::1;36440:16;:45:::0;;-1:-1:-1;;;;;;36440:45:0::1;-1:-1:-1::0;;;;;36440:45:0;;;::::1;::::0;;;::::1;::::0;;36327:166::o;43916:888::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;43996:24:0;::::1;43988:52;;;::::0;-1:-1:-1;;;43988:52:0;;20271:2:1;43988:52:0::1;::::0;::::1;20253:21:1::0;20310:2;20290:18;;;20283:30;-1:-1:-1;;;20329:18:1;;;20322:45;20384:18;;43988:52:0::1;20069:339:1::0;43988:52:0::1;44133:10;-1:-1:-1::0;;;;;44122:37:0::1;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;44122:39:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;44122:39:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;44118:521;;44595:32;::::0;-1:-1:-1;;;44595:32:0;;20615:2:1;44595:32:0::1;::::0;::::1;20597:21:1::0;20654:2;20634:18;;;20627:30;-1:-1:-1;;;20673:18:1;;;20666:52;20735:18;;44595:32:0::1;20413:346:1::0;44118:521:0::1;-1:-1:-1::0;;;;;44332:24:0;::::1;::::0;;::::1;::::0;:55:::1;;-1:-1:-1::0;;;;;;44360:27:0;::::1;44382:4;44360:27;;44332:55;44328:143;;;44408:47;::::0;-1:-1:-1;;;44408:47:0;;20966:2:1;44408:47:0::1;::::0;::::1;20948:21:1::0;21005:2;20985:18;;;20978:30;21044:34;21024:18;;;21017:62;-1:-1:-1;;;21095:18:1;;;21088:35;21140:19;;44408:47:0::1;20764:401:1::0;44328:143:0::1;44162:320;44694:9;:22:::0;;-1:-1:-1;;;;;;;;;44694:22:0;::::1;::::0;;::::1;44727:19:::0;;;;-1:-1:-1;;;;;;44727:19:0;;;;;;;-1:-1:-1;;;44727:19:0::1;::::0;;;44772:24:::1;::::0;::::1;::::0;-1:-1:-1;;44772:24:0::1;43916:888:::0;:::o;42030:1603::-;1905:13;:11;:13::i;:::-;1199:1:::1;1345:7;;:19:::0;1337:34:::1;;;;-1:-1:-1::0;;;1337:34:0::1;;;;;;;:::i;:::-;1199:1;1382:7;:18:::0;42137:15;42129:30:::2;;;;-1:-1:-1::0;;;42129:30:0::2;;;;;;;:::i;:::-;42178:46;::::0;-1:-1:-1;;;42178:46:0;;42193:4:::2;42178:46;::::0;::::2;2292:51:1::0;;;42228:11:0;;42178:31:::2;::::0;2265:18:1;;42178:46:0::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;42170:76;;;::::0;-1:-1:-1;;;42170:76:0;;15805:2:1;42170:76:0::2;::::0;::::2;15787:21:1::0;15844:1;15824:18;;;15817:29;-1:-1:-1;;;15862:18:1;;;15855:32;15904:18;;42170:76:0::2;15603:325:1::0;42170:76:0::2;42265:12;::::0;-1:-1:-1;;;42265:12:0;::::2;;;42257:43;;;;-1:-1:-1::0;;;42257:43:0::2;;;;;;;:::i;:::-;42383:16;::::0;42351:69:::2;::::0;42368:4:::2;::::0;-1:-1:-1;;;;;42383:16:0::2;-1:-1:-1::0;;42351:8:0::2;:69::i;:::-;42516:21;42488:25;42622;42635:11:::0;42622:12:::2;:25::i;:::-;42600:47;;42672:11;42687:1;42672:16:::0;42668:87:::2;;42705:38;;-1:-1:-1::0;;;42705:38:0::2;;;;;;;:::i;42668:87::-;42853:21;42889:39:::0;;::::2;42885:107;;42945:35;;-1:-1:-1::0;;;42945:35:0::2;;;;;;;:::i;42885:107::-;43056:25;43084:38;43105:17:::0;43084:18;:38:::2;:::i;:::-;43056:66:::0;-1:-1:-1;43173:23:0::2;43235:3;43199:33;9216:2;43056:66:::0;43199:33:::2;:::i;:::-;:39;;;;:::i;:::-;43173:65:::0;-1:-1:-1;43249:21:0::2;43307:3;43273:31;9272:2;43273:17:::0;:31:::2;:::i;:::-;:37;;;;:::i;:::-;43249:61:::0;-1:-1:-1;43369:19:0;;43365:117:::2;;43405:65;43419:15:::0;43466:3:::2;43436:27;9216:2;43436:11:::0;:27:::2;:::i;:::-;:33;;;;:::i;:::-;43405:13;:65::i;:::-;43543:17:::0;;43539:87:::2;;43577:37;43600:13;43577:22;:37::i;:::-;-1:-1:-1::0;;1155:1:0::1;1423:7;:22:::0;-1:-1:-1;;;;;42030:1603:0:o;45824:132::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;45910:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:38;;-1:-1:-1;;45910:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;45824:132::o;35000:1319::-;1905:13;:11;:13::i;:::-;35110:46:::1;::::0;-1:-1:-1;;;35110:46:0;;35125:4:::1;35110:46;::::0;::::1;2292:51:1::0;;;35088:19:0::1;::::0;35110:31:::1;::::0;2265:18:1;;35110:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35088:68;;35189:1;35175:11;:15;35167:30;;;;-1:-1:-1::0;;;35167:30:0::1;;;;;;;:::i;:::-;35228:1;35216:9;:13;35208:28;;;::::0;-1:-1:-1;;;35208:28:0;;21372:2:1;35208:28:0::1;::::0;::::1;21354:21:1::0;21411:1;21391:18;;;21384:29;-1:-1:-1;;;21429:18:1;;;21422:32;21471:18;;35208:28:0::1;21170:325:1::0;35208:28:0::1;35315:16;::::0;35283:63:::1;::::0;35300:4:::1;::::0;-1:-1:-1;;;;;35315:16:0::1;35334:11:::0;35283:8:::1;:63::i;:::-;35371:16;::::0;-1:-1:-1;;;;;35371:16:0::1;:32;35411:9;35444:4;35464:11:::0;35371:16:::1;::::0;35612:10:::1;35637:21;:15;35655:3;35637:21;:::i;:::-;35371:324;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;35371:324:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;35371:324:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;35367:945;;;;:::i;:::-;;;::::0;::::1;;;;;:::i;:::-;;;;;;;;35848:16;::::0;35816:53:::1;::::0;35833:4:::1;::::0;-1:-1:-1;;;;;35848:16:0::1;;35816:8;:53::i;:::-;35934:51;::::0;35942:10:::1;::::0;35963:21:::1;35934:51:::0;::::1;;;::::0;::::1;::::0;;;35963:21;35942:10;35934:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;35367:945;;;36122:16;::::0;36090:53:::1;::::0;36107:4:::1;::::0;-1:-1:-1;;;;;36122:16:0::1;;36090:8;:53::i;:::-;36208:51;::::0;36216:10:::1;::::0;36237:21:::1;36208:51:::0;::::1;;;::::0;::::1;::::0;;;36237:21;36216:10;36208:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;35367:945;-1:-1:-1::0;;35716:38:0::1;::::0;;10770:25:1;;;35744:9:0::1;10826:2:1::0;10811:18;;10804:34;-1:-1:-1;;;;;;;;;;;35716:38:0;-1:-1:-1;10743:18:1;35716:38:0::1;;;;;;;35077:1242;35000:1319::o:0;46142:130::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;46229:25:0;;;::::1;;::::0;;;:16:::1;:25;::::0;;;;:35;;-1:-1:-1;;46229:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46142:130::o;39660:958::-;1905:13;:11;:13::i;:::-;39795:16:::1;::::0;39763:69:::1;::::0;39780:4:::1;::::0;-1:-1:-1;;;;;39795:16:0::1;-1:-1:-1::0;;39763:8:0::1;:69::i;:::-;39911:10;::::0;39939:16:::1;::::0;39904:72:::1;::::0;-1:-1:-1;;;39904:72:0;;-1:-1:-1;;;;;39911:10:0;;::::1;::::0;39904:26:::1;::::0;:72:::1;::::0;39939:16;::::1;::::0;-1:-1:-1;;39958:17:0;39904:72:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;39904:72:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;39904:72:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;39900:193:::0;::::1;;-1:-1:-1::0;40015:10:0::1;::::0;40035:16:::1;::::0;39997:75:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;40015:10:0;;::::1;::::0;40035:16;::::1;::::0;-1:-1:-1;;40054:17:0;39997:75:::1;:::i;:::-;;;;;;;;39900:193;40168:13;::::0;-1:-1:-1;;;;;40168:13:0::1;:27:::0;40164:447:::1;;40223:10;::::0;40243:13:::1;::::0;40216:60:::1;::::0;-1:-1:-1;;;40216:60:0;;-1:-1:-1;;;;;40223:10:0;;::::1;::::0;40216:26:::1;::::0;:60:::1;::::0;40243:13;::::1;::::0;-1:-1:-1;;40258:17:0;40216:60:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;40216:60:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;40216:60:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;40212:177:::0;::::1;;-1:-1:-1::0;40319:10:0::1;::::0;40331:13:::1;::::0;40301:63:::1;::::0;::::1;::::0;::::1;::::0;-1:-1:-1;;;;;40319:10:0;;::::1;::::0;40331:13;::::1;::::0;-1:-1:-1;;40346:17:0;40301:63:::1;:::i;:::-;;;;;;;;40212:177;40451:13;::::0;40421:63:::1;::::0;-1:-1:-1;;;40421:63:0;;40436:4:::1;::::0;40421:29:::1;::::0;:63:::1;::::0;-1:-1:-1;;;;;40451:13:0::1;::::0;-1:-1:-1;;40466:17:0;40421:63:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;40421:63:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;40421:63:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;40417:183:::0;::::1;;-1:-1:-1::0;40542:13:0::1;::::0;40509:66:::1;::::0;::::1;::::0;::::1;::::0;40535:4:::1;::::0;-1:-1:-1;;;;;40542:13:0::1;::::0;-1:-1:-1;;40557:17:0;40509:66:::1;:::i;:::-;;;;;;;;40417:183;39660:958::o:0;2149:165::-;1905:13;:11;:13::i;:::-;-1:-1:-1;;;;;2238:22:0;::::1;2230:37;;;::::0;-1:-1:-1;;;2230:37:0;;21702:2:1;2230:37:0::1;::::0;::::1;21684:21:1::0;21741:1;21721:18;;;21714:29;-1:-1:-1;;;21759:18:1;;;21752:32;21801:18;;2230:37:0::1;21500:325:1::0;2230:37:0::1;2278:28;2297:8;2278:18;:28::i;5336:256::-:0;-1:-1:-1;;;;;5438:19:0;;;;;;:44;;-1:-1:-1;;;;;;5461:21:0;;;;5438:44;5430:59;;;;-1:-1:-1;;;5430:59:0;;22032:2:1;5430:59:0;;;22014:21:1;22071:1;22051:18;;;22044:29;-1:-1:-1;;;22089:18:1;;;22082:32;22131:18;;5430:59:0;21830:325:1;5430:59:0;-1:-1:-1;;;;;5500:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5552:32;;160:25:1;;;5552:32:0;;133:18:1;5552:32:0;;;;;;;5336:256;;;:::o;5600:311::-;-1:-1:-1;;;;;3782:18:0;;;5701:24;3782:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;5772:26;;;;5764:41;;;;-1:-1:-1;;;5764:41:0;;22362:2:1;5764:41:0;;;22344:21:1;22401:1;22381:18;;;22374:29;-1:-1:-1;;;22419:18:1;;;22412:32;22461:18;;5764:41:0;22160:325:1;5764:41:0;5841:51;5850:5;5857:7;5885:6;5866:16;:25;5841:8;:51::i;44859:680::-;-1:-1:-1;;;;;44991:18:0;;44983:33;;;;-1:-1:-1;;;44983:33:0;;22692:2:1;44983:33:0;;;22674:21:1;22731:1;22711:18;;;22704:29;-1:-1:-1;;;22749:18:1;;;22742:32;22791:18;;44983:33:0;22490:325:1;44983:33:0;-1:-1:-1;;;;;45035:16:0;;45027:31;;;;-1:-1:-1;;;45027:31:0;;23022:2:1;45027:31:0;;;23004:21:1;23061:1;23041:18;;;23034:29;-1:-1:-1;;;23079:18:1;;;23072:32;23121:18;;45027:31:0;22820:325:1;45027:31:0;45086:1;45077:6;:10;45069:25;;;;-1:-1:-1;;;45069:25:0;;23352:2:1;45069:25:0;;;23334:21:1;23391:1;23371:18;;;23364:29;-1:-1:-1;;;23409:18:1;;;23402:32;23451:18;;45069:25:0;23150:325:1;45069:25:0;45167:7;;;;;;;45163:94;;;45191:33;45207:4;45213:2;45217:6;45191:15;:33::i;45163:94::-;-1:-1:-1;;;;;45351:24:0;;45334:12;45351:24;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;45379:22:0;;;;;;:18;:22;;;;;;;;45351:50;45349:53;45334:68;;45490:41;45505:4;45511:2;45515:6;45523:7;45490:14;:41::i;2041:100::-;2116:10;2105:7;2019:6;;-1:-1:-1;;;;;2019:6:0;;1946:87;2105:7;-1:-1:-1;;;;;2105:21:0;;2097:36;;;;-1:-1:-1;;;2097:36:0;;23682:2:1;2097:36:0;;;23664:21:1;23721:1;23701:18;;;23694:29;-1:-1:-1;;;23739:18:1;;;23732:32;23781:18;;2097:36:0;23480:325:1;22083:5802:0;22143:7;22167:11;22182:1;22167:16;22163:30;;-1:-1:-1;22192:1:0;;22083:5802;-1:-1:-1;22083:5802:0:o;22163:30::-;22212:12;;-1:-1:-1;;;22212:12:0;;;;22204:43;;;;-1:-1:-1;;;22204:43:0;;;;;;;:::i;:::-;22339:11;22382;22365:28;;22361:118;;;-1:-1:-1;22427:11:0;22361:118;22523:16;;;22537:1;22523:16;;;;;;;;22499:21;;22523:16;;;;;;;;;;-1:-1:-1;22523:16:0;22499:40;;22568:4;22550;22555:1;22550:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22550:23:0;;;:7;;;;;;;;;;:23;;;;22594:16;;:23;;;-1:-1:-1;;;22594:23:0;;;;:16;;;;;:21;;:23;;;;;22550:7;;22594:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22584:4;22589:1;22584:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22584:33:0;;;:7;;;;;;;;;:33;23026:16;;22808:20;;22994:69;;23011:4;;23026:16;-1:-1:-1;;22994:8:0;:69::i;:::-;23136:16;23155:22;:15;23173:4;23155:22;:::i;:::-;23421:16;;23578:9;;23421:233;;-1:-1:-1;;;23421:233:0;;23136:41;;-1:-1:-1;23283:21:0;;-1:-1:-1;;;;;23421:16:0;;;;:67;;:233;;23503:14;;23532:12;;23559:4;;23578:9;;;;;;;;23136:41;;23421:233;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23417:4461;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;24022:6:0;23975:54;;;;;;;;:::i;:::-;;;;-1:-1:-1;;23975:54:0;;;;;;;;;;23957:74;;;:::i;:::-;;;;;;;;24167:16;;24340:9;;24167:257;;-1:-1:-1;;;24167:257:0;;-1:-1:-1;;;;;24167:16:0;;;;:67;;:257;;24253:14;;24286:12;;24317:4;;24340:9;;;;;;;;24401:8;;24167:257;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24163:2107;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;24710:23;;:27;24706:772;;24891:11;;;;;;;;;;;;-1:-1:-1;;;24891:11:0;;;;;24850:27;;;;;;:53;;24846:613;;25016:16;;24984:69;;25001:4;;-1:-1:-1;;;;;25016:16:0;-1:-1:-1;;24984:8:0;:69::i;:::-;25175:18;25196;25213:1;25196:14;:18;:::i;:::-;25175:39;-1:-1:-1;25245:14:0;;25241:195;;-1:-1:-1;;;;;;;;;;;25297:49:0;;;;25186:2:1;25168:21;;;25225:2;25205:18;;;25198:30;25264:34;25259:2;25244:18;;25237:62;-1:-1:-1;;;25330:2:1;25315:18;;25308:33;25373:3;25358:19;;24984:399;25297:49:0;;;;;;;;25384:24;25397:10;25384:12;:24::i;:::-;25377:31;22083:5802;-1:-1:-1;;;;;;;;;;22083:5802:0:o;25241:195::-;24905:554;24846:613;-1:-1:-1;;;;;;;;;;;25572:9:0;25519:63;;;;;;;;:::i;:::-;;;;-1:-1:-1;;25519:63:0;;;;;;;;;;25501:83;;;:::i;:::-;;;;;;;;-1:-1:-1;25610:1:0;;22083:5802;-1:-1:-1;;;;;;;;22083:5802:0:o;24163:2107::-;;;25739:18;25760;25777:1;25760:14;:18;:::i;:::-;25739:39;;25814:1;25801:10;:14;:46;;;;;25833:14;25819:10;:28;;25801:46;25797:375;;;25952:16;;25920:69;;25937:4;;-1:-1:-1;;;;;25952:16:0;-1:-1:-1;;25920:8:0;:69::i;:::-;-1:-1:-1;;;;;;;;;;;26039:59:0;;;;;:::i;:::-;;;;;;;;26128:24;26141:10;26128:12;:24::i;:::-;26121:31;22083:5802;-1:-1:-1;;;;;;;;;22083:5802:0:o;25797:375::-;-1:-1:-1;;;;;;;;;;;26195:32:0;;;;26471:2:1;26453:21;;;26510:2;26490:18;;;26483:30;-1:-1:-1;;;26544:2:1;26529:18;;26522:48;26602:2;26587:18;;26269:342;24163:2107:0;24517:69;24539:17;24558:14;24574:11;24517:21;:69::i;:::-;24510:76;22083:5802;-1:-1:-1;;;;;;;;22083:5802:0:o;23417:4461::-;;;-1:-1:-1;;;;;;;;;;;26383:57:0;;;;26818:2:1;26800:21;;;26857:2;26837:18;;;26830:30;26896:34;26891:2;26876:18;;26869:62;-1:-1:-1;;;26962:2:1;26947:18;;26940:41;27013:3;26998:19;;26616:407;26383:57:0;;;;;;;;26576:16;;26749:9;;26576:257;;-1:-1:-1;;;26576:257:0;;-1:-1:-1;;;;;26576:16:0;;;;:67;;:257;;26662:14;;26695:12;;26726:4;;26749:9;;;;;;;;26810:8;;26576:257;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26572:1295;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;27144:9:0;27091:63;;;;;;;;:::i;:::-;;;;-1:-1:-1;;27091:63:0;;;;;;;;;;27073:83;;;:::i;:::-;;;;;;;;-1:-1:-1;27182:1:0;;22083:5802;-1:-1:-1;;;;;;;22083:5802:0:o;26572:1295::-;;;27311:18;27332;27349:1;27332:14;:18;:::i;:::-;27311:39;;27386:1;27373:10;:14;:46;;;;;27405:14;27391:10;:28;;27373:46;27369:375;;;27524:16;;27492:69;;27509:4;;-1:-1:-1;;;;;27524:16:0;-1:-1:-1;;27492:8:0;:69::i;:::-;-1:-1:-1;;;;;;;;;;;27611:59:0;;;;;:::i;:::-;;;;;;;;27700:24;27713:10;27700:12;:24::i;27369:375::-;-1:-1:-1;;;;;;;;;;;27767:57:0;;;;27230:2:1;27212:21;;;27269:2;27249:18;;;27242:30;27308:34;27303:2;27288:18;;27281:62;-1:-1:-1;;;27374:2:1;27359:18;;27352:41;27425:3;27410:19;;27028:407;26572:1295:0;26926:69;26948:17;26967:14;26983:11;26926:21;:69::i;:::-;26919:76;22083:5802;-1:-1:-1;;;;;;;22083:5802:0:o;31544:819::-;31635:7;:14;31664:17;;;:32;;-1:-1:-1;31685:11:0;;31664:32;31660:45;;;31698:7;31544:819;:::o;31660:45::-;31725:23;31751:21;31760:12;31751:6;:21;:::i;:::-;31725:47;;31787:15;31806:1;31787:20;31783:33;;31809:7;;31544:819;:::o;31783:33::-;31841:9;31836:454;31860:12;31856:1;:16;31836:454;;;31894:14;31911:7;31919:1;31911:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;31911:10:0;;-1:-1:-1;31940:20:0;;;;;:47;;-1:-1:-1;;;;;;31964:23:0;;31982:4;31964:23;;31940:47;:74;;;;-1:-1:-1;32001:13:0;;-1:-1:-1;;;;;31991:23:0;;;32001:13;;31991:23;;31940:74;31936:343;;;32090:12;32108:6;-1:-1:-1;;;;;32108:11:0;32127:15;32108:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32089:58;;;32171:7;32166:98;;32208:36;;;;;27852:2:1;27834:21;;;27891:2;27871:18;;;27864:30;-1:-1:-1;;;27925:2:1;27910:18;;27903:49;27984:2;27969:18;;27650:343;32208:36:0;;;;;;;;32166:98;32016:263;31936:343;-1:-1:-1;31874:3:0;;;;:::i;:::-;;;;31836:454;;;-1:-1:-1;32315:40:0;;;10770:25:1;;;10826:2;10811:18;;10804:34;;;32315:40:0;;10743:18:1;32315:40:0;;;;;;;31601:762;;31544:819;:::o;29779:1724::-;29865:14;;;:34;;-1:-1:-1;29883:16:0;;29865:34;29861:47;;;29779:1724;;:::o;29861:47::-;29989:16;;29957:69;;29974:4;;-1:-1:-1;;;;;29989:16:0;-1:-1:-1;;29957:8:0;:69::i;:::-;30111:21;30135:13;30147:1;30135:9;:13;:::i;:::-;30111:37;;30163:13;30180:1;30163:18;30159:31;;30183:7;29779:1724;;:::o;30159:31::-;30260:23;30286:15;30300:1;30286:11;:15;:::i;:::-;30260:41;;30316:15;30335:1;30316:20;30312:33;;30338:7;;29779:1724;;:::o;30312:33::-;30422:20;30466:3;30445:18;:13;30461:2;30445:18;:::i;:::-;:24;;;;:::i;:::-;30422:47;-1:-1:-1;30496:22:0;30544:3;30521:20;:15;30539:2;30521:20;:::i;:::-;:26;;;;:::i;:::-;30496:51;-1:-1:-1;30612:16:0;30631:22;:15;30649:4;30631:22;:::i;:::-;30688:16;;30871:14;;30688:267;;-1:-1:-1;;;30688:267:0;;30612:41;;-1:-1:-1;;;;;;30688:16:0;;;;:32;;30728:13;;30688:267;;30765:4;;30785:15;;30815:14;;30844:12;;30871:14;;;;30612:41;;30688:267;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30688:267:0;;;;;;;;-1:-1:-1;;30688:267:0;;;;;;;;;;;;:::i;:::-;;;30684:812;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;31387:6:0;31368:26;;;;;;:::i;:::-;;;;;;;;31314:92;30684:812;;;;;-1:-1:-1;;;;;;;;;;;31433:51:0;;;;13232:2:1;13214:21;;;13271:2;13251:18;;;13244:30;13310:31;13305:2;13290:18;;13283:59;13374:2;13359:18;;13030:353;31433:51:0;;;;;;;;30684:812;;;31044:38;;;10770:25:1;;;10826:2;10811:18;;10804:34;;;-1:-1:-1;;;;;;;;;;;31044:38:0;10743:18:1;31044:38:0;;;;;;;30956:357;;;29850:1653;;;;;29779:1724;;:::o;2322:191::-;2415:6;;;-1:-1:-1;;;;;2432:17:0;;;-1:-1:-1;;;;;;2432:17:0;;;;;;;2465:40;;2415:6;;;2432:17;2415:6;;2465:40;;2396:16;;2465:40;2385:128;2322:191;:::o;4281:639::-;-1:-1:-1;;;;;4412:18:0;;4404:33;;;;-1:-1:-1;;;4404:33:0;;22692:2:1;4404:33:0;;;22674:21:1;22731:1;22711:18;;;22704:29;-1:-1:-1;;;22749:18:1;;;22742:32;22791:18;;4404:33:0;22490:325:1;4404:33:0;-1:-1:-1;;;;;4456:16:0;;4448:31;;;;-1:-1:-1;;;4448:31:0;;23022:2:1;4448:31:0;;;23004:21:1;23061:1;23041:18;;;23034:29;-1:-1:-1;;;23079:18:1;;;23072:32;23121:18;;4448:31:0;22820:325:1;4448:31:0;4507:1;4498:6;:10;4490:25;;;;-1:-1:-1;;;4490:25:0;;23352:2:1;4490:25:0;;;23334:21:1;23391:1;23371:18;;;23364:29;-1:-1:-1;;;23409:18:1;;;23402:32;23451:18;;4490:25:0;23150:325:1;4490:25:0;-1:-1:-1;;;;;4617:15:0;;4595:19;4617:15;;;;;;;;;;;4651:21;;;;4643:36;;;;-1:-1:-1;;;4643:36:0;;28936:2:1;4643:36:0;;;28918:21:1;28975:1;28955:18;;;28948:29;-1:-1:-1;;;28993:18:1;;;28986:32;29035:18;;4643:36:0;28734:325:1;4643:36:0;-1:-1:-1;;;;;4715:15:0;;;:9;:15;;;;;;;;;;;4733:20;;;4715:38;;4768:13;;;;;;;;;;:23;;;;;;4828:26;;160:25:1;;;4768:13:0;;4828:26;;133:18:1;4828:26:0;;;;;;;4875:37;36501:183;13829:2465;14062:18;14083:7;:37;;;-1:-1:-1;14107:13:0;;-1:-1:-1;;;;;14094:26:0;;;14107:13;;14094:26;14083:37;14062:58;;14145:13;:25;;;;-1:-1:-1;14163:7:0;;;;;;;14162:8;14145:25;14141:1857;;;14217:17;14257:3;14237:17;9161:1;14237:6;:17;:::i;:::-;:23;;;;:::i;:::-;14217:43;-1:-1:-1;14293:13:0;;14289:1698;;14387:23;14441:3;14413:25;9216:2;14413:9;:25;:::i;:::-;:31;;;;:::i;:::-;14387:57;-1:-1:-1;14463:21:0;14513:3;14487:23;9272:2;14487:9;:23;:::i;:::-;:29;;;;:::i;:::-;14463:53;-1:-1:-1;14611:22:0;14636:18;14645:9;14636:6;:18;:::i;:::-;14611:43;;14734:49;14750:6;14766:4;14773:9;14734:15;:49::i;:::-;14871:50;14887:6;14895:9;14906:14;14871:15;:50::i;:::-;15036:15;15009:23;;:42;;;;;;;:::i;:::-;;;;;;;;15095:13;15070:21;;:38;;;;;;;:::i;:::-;;;;-1:-1:-1;15191:61:0;;-1:-1:-1;15205:6:0;9334:11;15213:17;15205:6;-1:-1:-1;;;;;3451:18:0;3424:7;3451:18;;;;;;;;;;;;3359:118;15213:17;:38;;15191:13;:61::i;:::-;15271:67;15285:9;9334:11;15296:20;15306:9;-1:-1:-1;;;;;3451:18:0;3424:7;3451:18;;;;;;;;;;;;3359:118;15271:67;15508:13;;-1:-1:-1;;;;;15495:26:0;;;15508:13;;15495:26;:38;;;;-1:-1:-1;15526:7:0;;;;;;;15525:8;15495:38;:115;;;;;9441:11;15563:21;;15537:23;;:47;;;;:::i;:::-;:73;;15495:115;15491:438;;;15720:4;-1:-1:-1;;;;;15720:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15716:194;;15965:7;;;;;;;14289:1698;14172:1826;14141:1857;16046:42;16062:6;16070:9;16081:6;16046:15;:42::i;:::-;16147:61;16161:6;9334:11;16169:17;16179:6;-1:-1:-1;;;;;3451:18:0;3424:7;3451:18;;;;;;;;;;;;3359:118;16147:61;16219:67;16233:9;9334:11;16244:20;16254:9;-1:-1:-1;;;;;3451:18:0;3424:7;3451:18;;;;;;;;;;;;3359:118;16219:67;13969:2325;13829:2465;;;;:::o;27963:1490::-;28083:7;28205:9;;;;;;;;;-1:-1:-1;;;;;28205:9:0;-1:-1:-1;;;;;28194:37:0;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28190:1256;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;;;;;;;;;;29286:6:0;29238:55;;;;;;;;:::i;:::-;;;;-1:-1:-1;;29238:55:0;;;;;;;;;;29220:75;;;:::i;:::-;;;;;;;;29317:1;29310:8;;;;;28190:1256;;;-1:-1:-1;;;;;;;;;;;29357:54:0;;;;29730:2:1;29712:21;;;29769:2;29749:18;;;29742:30;29808:34;29803:2;29788:18;;29781:62;-1:-1:-1;;;29874:2:1;29859:18;;29852:38;29922:3;29907:19;;29528:404;29357:54:0;;;;;;;;-1:-1:-1;29433:1:0;29426:8;;28190:1256;28331:21;28302:26;28389:38;28410:17;28331:21;28389:38;:::i;:::-;28367:60;-1:-1:-1;28460:15:0;;28456:698;;28501:43;;;10770:25:1;;;10826:2;10811:18;;10804:34;;;28501:43:0;;10743:18:1;28501:43:0;;;;;;;28718:11;28701:14;:28;28697:264;;;28754:23;28780:28;28794:14;28780:11;:28;:::i;:::-;28754:54;;28831:21;28855:29;28868:15;28855:12;:29::i;:::-;28831:53;-1:-1:-1;28914:27:0;28831:53;28914:11;:27;:::i;:::-;28907:34;;;;;;;;28697:264;29004:11;-1:-1:-1;28997:18:0;;-1:-1:-1;28997:18:0;28456:698;-1:-1:-1;;;;;;;;;;;29061:50:0;;;;30139:2:1;30121:21;;;30178:2;30158:18;;;30151:30;30217:34;30212:2;30197:18;;30190:62;-1:-1:-1;;;30283:2:1;30268:18;;30261:34;30327:3;30312:19;;29937:400;29061:50:0;;;;;;;;29137:1;29130:8;;;;;;16302:779;16397:13;;-1:-1:-1;;;;;16386:24:0;;;16397:13;;16386:24;;;;:52;;-1:-1:-1;;;;;;16414:24:0;;16433:4;16414:24;;16386:52;16382:692;;;16459:14;:36;;;;-1:-1:-1;;;;;;16478:17:0;;;;;;:8;:17;;;;;;;;16477:18;16459:36;16455:608;;;-1:-1:-1;;;;;;16516:17:0;;;;;:8;:17;;;;;:24;;-1:-1:-1;;16516:24:0;16536:4;16516:24;;;;;;16559:7;:21;;;;;;;;;;;;;;-1:-1:-1;;;;;;16559:21:0;;;;;;37034:2580::o;16455:608::-;16607:14;16606:15;:36;;;;-1:-1:-1;;;;;;16625:17:0;;;;;;:8;:17;;;;;;;;16606:36;16602:461;;;-1:-1:-1;;;;;16663:17:0;;16683:5;16663:17;;;:8;:17;;;;;:25;;-1:-1:-1;;16663:25:0;;;16771:277;16795:7;:14;16791:18;;16771:277;;;16857:7;-1:-1:-1;;;;;16843:21:0;:7;16851:1;16843:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;16843:10:0;:21;16839:190;;16906:7;16914:14;;:18;;16931:1;;16914:18;:::i;:::-;16906:27;;;;;;;;:::i;:::-;;;;;;;;;;;16893:7;:10;;-1:-1:-1;;;;;16906:27:0;;;;16901:1;;16893:10;;;;;;:::i;:::-;;;;;;;;;:40;;;;;-1:-1:-1;;;;;16893:40:0;;;;;-1:-1:-1;;;;;16893:40:0;;;;;;16960:7;:13;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;16960:13:0;;;;;-1:-1:-1;;;;;;16960:13:0;;;;;;36635:41:::1;36501:183:::0;;:::o;16839:190::-;16811:3;;;;:::i;:::-;;;;16771:277;;196:250:1;281:1;291:113;305:6;302:1;299:13;291:113;;;381:11;;;375:18;362:11;;;355:39;327:2;320:10;291:113;;;-1:-1:-1;;438:1:1;420:16;;413:27;196:250::o;451:396::-;600:2;589:9;582:21;563:4;632:6;626:13;675:6;670:2;659:9;655:18;648:34;691:79;763:6;758:2;747:9;743:18;738:2;730:6;726:15;691:79;:::i;:::-;831:2;810:15;-1:-1:-1;;806:29:1;791:45;;;;838:2;787:54;;451:396;-1:-1:-1;;451:396:1:o;852:131::-;-1:-1:-1;;;;;927:31:1;;917:42;;907:70;;973:1;970;963:12;988:315;1056:6;1064;1117:2;1105:9;1096:7;1092:23;1088:32;1085:52;;;1133:1;1130;1123:12;1085:52;1172:9;1159:23;1191:31;1216:5;1191:31;:::i;:::-;1241:5;1293:2;1278:18;;;;1265:32;;-1:-1:-1;;;988:315:1:o;1500:456::-;1577:6;1585;1593;1646:2;1634:9;1625:7;1621:23;1617:32;1614:52;;;1662:1;1659;1652:12;1614:52;1701:9;1688:23;1720:31;1745:5;1720:31;:::i;:::-;1770:5;-1:-1:-1;1827:2:1;1812:18;;1799:32;1840:33;1799:32;1840:33;:::i;:::-;1500:456;;1892:7;;-1:-1:-1;;;1946:2:1;1931:18;;;;1918:32;;1500:456::o;1961:180::-;2020:6;2073:2;2061:9;2052:7;2048:23;2044:32;2041:52;;;2089:1;2086;2079:12;2041:52;-1:-1:-1;2112:23:1;;1961:180;-1:-1:-1;1961:180:1:o;2543:247::-;2602:6;2655:2;2643:9;2634:7;2630:23;2626:32;2623:52;;;2671:1;2668;2661:12;2623:52;2710:9;2697:23;2729:31;2754:5;2729:31;:::i;2795:461::-;2848:3;2886:5;2880:12;2913:6;2908:3;2901:19;2939:4;2968:2;2963:3;2959:12;2952:19;;3005:2;2998:5;2994:14;3026:1;3036:195;3050:6;3047:1;3044:13;3036:195;;;3115:13;;-1:-1:-1;;;;;3111:39:1;3099:52;;3171:12;;;;3206:15;;;;3147:1;3065:9;3036:195;;;-1:-1:-1;3247:3:1;;2795:461;-1:-1:-1;;;;;2795:461:1:o;3261:261::-;3440:2;3429:9;3422:21;3403:4;3460:56;3512:2;3501:9;3497:18;3489:6;3460:56;:::i;3760:118::-;3846:5;3839:13;3832:21;3825:5;3822:32;3812:60;;3868:1;3865;3858:12;3883:382;3948:6;3956;4009:2;3997:9;3988:7;3984:23;3980:32;3977:52;;;4025:1;4022;4015:12;3977:52;4064:9;4051:23;4083:31;4108:5;4083:31;:::i;:::-;4133:5;-1:-1:-1;4190:2:1;4175:18;;4162:32;4203:30;4162:32;4203:30;:::i;:::-;4252:7;4242:17;;;3883:382;;;;;:::o;4270:248::-;4338:6;4346;4399:2;4387:9;4378:7;4374:23;4370:32;4367:52;;;4415:1;4412;4405:12;4367:52;-1:-1:-1;;4438:23:1;;;4508:2;4493:18;;;4480:32;;-1:-1:-1;4270:248:1:o;4523:388::-;4591:6;4599;4652:2;4640:9;4631:7;4627:23;4623:32;4620:52;;;4668:1;4665;4658:12;4620:52;4707:9;4694:23;4726:31;4751:5;4726:31;:::i;:::-;4776:5;-1:-1:-1;4833:2:1;4818:18;;4805:32;4846:33;4805:32;4846:33;:::i;5150:380::-;5229:1;5225:12;;;;5272;;;5293:61;;5347:4;5339:6;5335:17;5325:27;;5293:61;5400:2;5392:6;5389:14;5369:18;5366:38;5363:161;;5446:10;5441:3;5437:20;5434:1;5427:31;5481:4;5478:1;5471:15;5509:4;5506:1;5499:15;5363:161;;5150:380;;;:::o;6195:127::-;6256:10;6251:3;6247:20;6244:1;6237:31;6287:4;6284:1;6277:15;6311:4;6308:1;6301:15;6327:125;6392:9;;;6413:10;;;6410:36;;;6426:18;;:::i;6457:168::-;6530:9;;;6561;;6578:15;;;6572:22;;6558:37;6548:71;;6599:18;;:::i;6630:217::-;6670:1;6696;6686:132;;6740:10;6735:3;6731:20;6728:1;6721:31;6775:4;6772:1;6765:15;6803:4;6800:1;6793:15;6686:132;-1:-1:-1;6832:9:1;;6630:217::o;6852:128::-;6919:9;;;6940:11;;;6937:37;;;6954:18;;:::i;6985:179::-;7020:3;7062:1;7044:16;7041:23;7038:120;;;7108:1;7105;7102;7087:23;-1:-1:-1;7145:1:1;7139:8;7134:3;7130:18;7038:120;6985:179;:::o;7301:346::-;7411:2;7392:13;;-1:-1:-1;;7388:27:1;7376:40;;7446:18;7431:34;;7467:22;;;7428:62;7425:185;;;7532:10;7527:3;7523:20;7520:1;7513:31;7567:4;7564:1;7557:15;7595:4;7592:1;7585:15;7425:185;7626:2;7619:22;-1:-1:-1;;7301:346:1:o;7652:671::-;7691:3;7733:4;7715:16;7712:26;7709:39;;;7652:671;:::o;7709:39::-;7775:2;7769:9;-1:-1:-1;;7840:16:1;7836:25;;7833:1;7769:9;7812:50;7891:4;7885:11;7915:16;7950:18;8021:2;8014:4;8006:6;8002:17;7999:25;7994:2;7986:6;7983:14;7980:45;7977:58;;;8028:5;;;;;7652:671;:::o;7977:58::-;8065:6;8059:4;8055:17;8044:28;;8101:3;8095:10;8128:2;8120:6;8117:14;8114:27;;;8134:5;;;;;;7652:671;:::o;8114:27::-;8218:2;8199:16;8193:4;8189:27;8185:36;8178:4;8169:6;8164:3;8160:16;8156:27;8153:69;8150:82;;;8225:5;;;;;;7652:671;:::o;8150:82::-;8241:57;8292:4;8283:6;8275;8271:19;8267:30;8261:4;8241:57;:::i;:::-;-1:-1:-1;8314:3:1;;7652:671;-1:-1:-1;;;;;7652:671:1:o;8328:398::-;8530:2;8512:21;;;8569:2;8549:18;;;8542:30;8608:34;8603:2;8588:18;;8581:62;-1:-1:-1;;;8674:2:1;8659:18;;8652:32;8716:3;8701:19;;8328:398::o;9061:274::-;-1:-1:-1;;;;;9253:32:1;;;;9235:51;;9317:2;9302:18;;9295:34;9223:2;9208:18;;9061:274::o;9340:245::-;9407:6;9460:2;9448:9;9439:7;9435:23;9431:32;9428:52;;;9476:1;9473;9466:12;9428:52;9508:9;9502:16;9527:28;9549:5;9527:28;:::i;9590:325::-;9792:2;9774:21;;;9831:1;9811:18;;;9804:29;-1:-1:-1;;;9864:2:1;9849:18;;9842:32;9906:2;9891:18;;9590:325::o;10849:184::-;10919:6;10972:2;10960:9;10951:7;10947:23;10943:32;10940:52;;;10988:1;10985;10978:12;10940:52;-1:-1:-1;11011:16:1;;10849:184;-1:-1:-1;10849:184:1:o;11396:352::-;11598:2;11580:21;;;11637:2;11617:18;;;11610:30;11676;11671:2;11656:18;;11649:58;11739:2;11724:18;;11396:352::o;11753:349::-;11955:2;11937:21;;;11994:2;11974:18;;;11967:30;12033:27;12028:2;12013:18;;12006:55;12093:2;12078:18;;11753:349::o;12107:607::-;-1:-1:-1;;;;;12466:15:1;;;12448:34;;12513:2;12498:18;;12491:34;;;;12556:2;12541:18;;12534:34;;;;12599:2;12584:18;;12577:34;;;;12648:15;;;12642:3;12627:19;;12620:44;12428:3;12680:19;;12673:35;;;;12397:3;12382:19;;12107:607::o;12719:306::-;12807:6;12815;12823;12876:2;12864:9;12855:7;12851:23;12847:32;12844:52;;;12892:1;12889;12882:12;12844:52;12921:9;12915:16;12905:26;;12971:2;12960:9;12956:18;12950:25;12940:35;;13015:2;13004:9;13000:18;12994:25;12984:35;;12719:306;;;;;:::o;14027:251::-;14097:6;14150:2;14138:9;14129:7;14125:23;14121:32;14118:52;;;14166:1;14163;14156:12;14118:52;14198:9;14192:16;14217:31;14242:5;14217:31;:::i;14943:325::-;15145:2;15127:21;;;15184:1;15164:18;;;15157:29;-1:-1:-1;;;15217:2:1;15202:18;;15195:32;15259:2;15244:18;;14943:325::o;16263:375::-;-1:-1:-1;;;;;16521:15:1;;;16503:34;;16573:15;;;;16568:2;16553:18;;16546:43;16620:2;16605:18;;16598:34;;;;16453:2;16438:18;;16263:375::o;18685:342::-;18887:2;18869:21;;;18926:2;18906:18;;;18899:30;-1:-1:-1;;;18960:2:1;18945:18;;18938:48;19018:2;19003:18;;18685:342::o;23810:127::-;23871:10;23866:3;23862:20;23859:1;23852:31;23902:4;23899:1;23892:15;23926:4;23923:1;23916:15;23942:574;24233:6;24222:9;24215:25;24276:6;24271:2;24260:9;24256:18;24249:34;24319:3;24314:2;24303:9;24299:18;24292:31;24196:4;24340:57;24392:3;24381:9;24377:19;24369:6;24340:57;:::i;:::-;-1:-1:-1;;;;;24433:32:1;;;;24428:2;24413:18;;24406:60;-1:-1:-1;24497:3:1;24482:19;24475:35;24332:65;23942:574;-1:-1:-1;;;23942:574:1:o;24521:458::-;24783:28;24778:3;24771:41;24753:3;24841:6;24835:13;24857:75;24925:6;24920:2;24915:3;24911:12;24904:4;24896:6;24892:17;24857:75;:::i;:::-;24952:16;;;;24970:2;24948:25;;24521:458;-1:-1:-1;;24521:458:1:o;25388:462::-;25650:34;25645:3;25638:47;25620:3;25714:6;25708:13;25730:73;25796:6;25791:2;25786:3;25782:12;25777:2;25769:6;25765:15;25730:73;:::i;:::-;25823:16;;;;25841:2;25819:25;;25388:462;-1:-1:-1;;25388:462:1:o;25855:409::-;26057:2;26039:21;;;26096:2;26076:18;;;26069:30;26135:34;26130:2;26115:18;;26108:62;-1:-1:-1;;;26201:2:1;26186:18;;26179:43;26254:3;26239:19;;25855:409::o;27998:135::-;28037:3;28058:17;;;28055:43;;28078:18;;:::i;:::-;-1:-1:-1;28125:1:1;28114:13;;27998:135::o;29064:459::-;29326:29;29321:3;29314:42;29296:3;29385:6;29379:13;29401:75;29469:6;29464:2;29459:3;29455:12;29448:4;29440:6;29436:17;29401:75;:::i;:::-;29496:16;;;;29514:2;29492:25;;29064:459;-1:-1:-1;;29064:459:1:o;30342:127::-;30403:10;30398:3;30394:20;30391:1;30384:31;30434:4;30431:1;30424:15;30458:4;30455:1;30448:15
Swarm Source
ipfs://5d7d271fb9f2a6f8972edf029dacb7e9f64d6ae643b663ce62309bc498b060a4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.