S Price: $0.51272 (-14.11%)

Token

FARMER (FARM)

Overview

Max Total Supply

1,000,000 FARM

Holders

6

Market

Price

$0.00 @ 0.000000 S

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,000 FARM

Value
$0.00
0x516649dbd606a980e767bdedbcd882d91c859c9c
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
FARMER

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at SonicScan.org on 2025-03-03
*/

/**
 *Submitted for verification at SonicScan.org on 2025-03-02
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

// OpenZeppelin Contracts v5.0.1

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 */
abstract contract ReentrancyGuard {
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "R1");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism
 */
abstract contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert("O1");
        }
        _transferOwnership(initialOwner);
    }

    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == msg.sender, "O2");
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "O1");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

/**
 * @dev Implementation of the {IERC20} interface.
 */
contract ERC20 is IERC20 {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual returns (string memory) {
        return _name;
    }

    function symbol() public view virtual returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual returns (uint256) {
        return _balances[account];
    }

    function transfer(address to, uint256 amount) public virtual returns (bool) {
        address owner = msg.sender;
        _transfer(owner, to, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual returns (bool) {
        address owner = msg.sender;
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(address from, address to, uint256 amount) public virtual returns (bool) {
        address spender = msg.sender;
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0) && to != address(0), "E1");
        _beforeTokenTransfer(from, to, amount);
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "E2");
        unchecked {
            _balances[from] = fromBalance - amount;
            _balances[to] += amount;
        }
        emit Transfer(from, to, amount);
        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "E3");
        _beforeTokenTransfer(address(0), account, amount);
        _totalSupply += amount;
        unchecked {
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);
        _afterTokenTransfer(address(0), account, amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        require(owner != address(0) && spender != address(0), "E4");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= amount, "E5");
        unchecked {
            _approve(owner, spender, currentAllowance - amount);
        }
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

interface IMetropolisRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    // Mevcut fonksiyonlar
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    // Yeni eklenen fonksiyonlar
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IMetropolisFactory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

// Pair interface'ini de ekleyelim
interface IMetropolisPair {
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
}

// FARMER Token Contract
contract FARMER is ERC20, ReentrancyGuard, Ownable {
    // Constants
    uint256 private constant TOTAL_SUPPLY = 1_000_000 * 10**18;
    uint256 private constant TAX_RATE = 5; // 5%
    uint256 private constant LIQUIDITY_TAX = 25; // 2.5%
    uint256 private constant AIRDROP_TAX = 25; // 2.5%
    uint256 private constant MIN_HOLDER_AMOUNT = 10 * 10**18; // 10 tokens minimum for holder status
    uint256 private constant MIN_TOKENS_FOR_PROCESS = 100 * 10**18; // 100 tokens minimum for processing
    uint256 private constant SWAP_PERCENTAGE = 75; // 75% will be swapped
    uint256 private constant LIQUIDITY_PERCENTAGE = 25; // 25% will be used for liquidity
    uint256 private constant MAX_SLIPPAGE = 30; // 30% slippage tolerance
    uint256 private constant TREASURY_PERCENTAGE = 25; // 25% of Sonic tokens to treasury
    uint256 private constant HOLDERS_PERCENTAGE = 75; // 75% of Sonic tokens to holders

    // 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 TreasuryTransfer(uint256 amount);
    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 PairReservesUpdated(uint256 farmReserve, uint256 wethReserve);
    event ApprovalRefreshed(address token, address spender, uint256 amount);

    uint256 private _pendingLiquidityTokens;
    uint256 private _pendingAirdropTokens;
    bool private _initialized;
    bool private _inSwap;

    constructor() ERC20("FARMER", "FARM") Ownable(msg.sender) {
        address _metropolisRouter = 0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3;
        address _metropolisFactory = 0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0;
        address _sonicToken = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38;
        address _treasuryWallet = 0x95503A306cD81e08c0c43C49FAae71165937d175;

        require(_metropolisRouter != address(0) && _metropolisFactory != address(0) && _sonicToken != address(0) && _treasuryWallet != address(0), "F1");

        metropolisRouter = IMetropolisRouter(_metropolisRouter);
        metropolisFactory = IMetropolisFactory(_metropolisFactory);
        sonicToken = _sonicToken;
        treasuryWallet = _treasuryWallet;

        _mint(address(this), TOTAL_SUPPLY);
    }

    function initialize() external onlyOwner {
        require(!_initialized, "F2");
        _initialized = true;

        // Try to get existing pair first
        liquidityPair = metropolisFactory.getPair(address(this), sonicToken);
        
        // If pair doesn't exist, create it
        if (liquidityPair == address(0)) {
            liquidityPair = metropolisFactory.createPair(address(this), sonicToken);
        }
        
        require(liquidityPair != address(0), "F3");

        _approve(address(this), address(metropolisRouter), type(uint256).max);
        
        require(IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max), "F4");
        IERC20(sonicToken).approve(liquidityPair, type(uint256).max);
        IERC20(address(this)).approve(liquidityPair, type(uint256).max);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, amount);
    }

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        super._afterTokenTransfer(from, to, amount);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        // Vergi işleme mantığı
        if (
            !_inSwap && 
            from != owner() && 
            to != owner() && 
            from != address(this) && 
            to == liquidityPair
        ) {
            // Vergi hesapla
            uint256 taxAmount = amount * TAX_RATE / 100;
            
            if (taxAmount > 0) {
                // Vergiyi likidite ve airdrop için ayır
                uint256 liquidityTokens = taxAmount * LIQUIDITY_TAX / 100;
                uint256 airdropTokens = taxAmount * AIRDROP_TAX / 100;
                
                // Vergi miktarını ana miktardan düş
                uint256 transferAmount = amount - taxAmount;
                
                // Vergiyi kontrata aktar
                super._transfer(from, address(this), taxAmount);
                
                // Kalan miktarı alıcıya aktar
                super._transfer(from, to, transferAmount);
                
                // Bekleyen miktarları güncelle
                _pendingLiquidityTokens += liquidityTokens;
                _pendingAirdropTokens += airdropTokens;
                
                // Eğer yeterli miktarda token biriktiysek işlemi başlat
                if (_pendingLiquidityTokens + _pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS) {
                    try this.processLiquidityAndAirdrop() {} catch {}
                }
                
                // Holder durumunu güncelle
                _updateHolder(from, balanceOf(from) >= MIN_HOLDER_AMOUNT);
                _updateHolder(to, balanceOf(to) >= MIN_HOLDER_AMOUNT);
                
                return;
            }
        }
        
        // Normal transfer
        super._transfer(from, to, amount);
        
        // Holder durumunu güncelle
        _updateHolder(from, balanceOf(from) >= MIN_HOLDER_AMOUNT);
        _updateHolder(to, balanceOf(to) >= MIN_HOLDER_AMOUNT);
    }

    function _updateHolder(address account, bool isHolderStatus) private {
        if (account != liquidityPair && account != address(this)) {
            if (isHolderStatus && !isHolder[account]) {
                isHolder[account] = true;
                holders.push(account);
            } else if (!isHolderStatus && isHolder[account]) {
                isHolder[account] = false;
                
                // Remove from holders array
                for (uint256 i = 0; i < holders.length; i++) {
                    if (holders[i] == account) {
                        holders[i] = holders[holders.length - 1];
                        holders.pop();
                        break;
                    }
                }
            }
        }
    }

    function processLiquidityAndAirdrop() external nonReentrant {
        require(!_inSwap, "Already processing");
        _inSwap = true;
        
        uint256 tokensForLiquidity = _pendingLiquidityTokens;
        uint256 tokensForAirdrop = _pendingAirdropTokens;
        
        if (tokensForLiquidity == 0 && tokensForAirdrop == 0) {
            _inSwap = false;
            return;
        }
        
        emit ProcessStarted(tokensForLiquidity, tokensForAirdrop);
        
        // Reset pending amounts
        _pendingLiquidityTokens = 0;
        _pendingAirdropTokens = 0;
        
        // Refresh approvals
        _approve(address(this), address(metropolisRouter), type(uint256).max);
        IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max);
        
        // Process swap
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForAirdrop;
        uint256 sonicReceived = _processSwap(totalTokensToSwap);
        
        if (sonicReceived == 0) {
            _inSwap = false;
            return;
        }
        
        // Calculate amounts
        uint256 sonicForLiquidity = sonicReceived * tokensForLiquidity / totalTokensToSwap;
        uint256 sonicForAirdrop = sonicReceived - sonicForLiquidity;
        
        // Process liquidity
        if (sonicForLiquidity > 0) {
            _processLiquidity(tokensForLiquidity, sonicForLiquidity);
        }
        
        // Process airdrop
        if (sonicForAirdrop > 0) {
            uint256 sonicForTreasury = sonicForAirdrop * TREASURY_PERCENTAGE / 100;
            uint256 sonicForHolders = sonicForAirdrop - sonicForTreasury;
            
            _processTreasuryTransfer(sonicForTreasury);
            _processAirdrop(sonicForHolders);
        }
        
        _inSwap = false;
    }

    function _processSwap(uint256 tokensToSwap) private returns (uint256) {
        if (tokensToSwap == 0) return 0;

        _approve(address(this), address(metropolisRouter), tokensToSwap);

        // Swap için path oluştur
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = sonicToken;

        uint256 sonicBefore = IERC20(sonicToken).balanceOf(address(this));

        try metropolisRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokensToSwap,
            0,
            path,
            address(this),
            block.timestamp + 300
        ) {
            uint256 sonicAfter = IERC20(sonicToken).balanceOf(address(this));
            uint256 sonicReceived = sonicAfter - sonicBefore;
            emit SwapSuccessful(tokensToSwap, sonicReceived);
            return sonicReceived;
        } catch Error(string memory reason) {
            emit SwapFailed(reason);
            return 0;
        } catch {
            emit SwapFailed("Hata");
            return 0;
        }
    }

    function _processLiquidity(uint256 tokensForLiquidity, uint256 sonicForLiquidity) private {
        if (tokensForLiquidity == 0 || sonicForLiquidity == 0) {
            return;
        }

        // Approve Sonic token for router
        IERC20(sonicToken).approve(address(metropolisRouter), sonicForLiquidity);
        // Approve this token for router
        _approve(address(this), address(metropolisRouter), tokensForLiquidity);

        try metropolisRouter.addLiquidity(
            address(this),
            sonicToken,
            tokensForLiquidity,
            sonicForLiquidity,
            tokensForLiquidity * (100 - MAX_SLIPPAGE) / 100,
            sonicForLiquidity * (100 - MAX_SLIPPAGE) / 100,
            address(this),
            block.timestamp + 300
        ) {
            emit LiquidityAdded(tokensForLiquidity, sonicForLiquidity);
        } catch Error(string memory reason) {
            emit LiquidityAddFailed(reason);
        } catch {
            emit LiquidityAddFailed("Hata");
        }
    }

    function _processTreasuryTransfer(uint256 sonicAmount) private {
        if (sonicAmount == 0 || treasuryWallet == address(0)) return;
        
        try IERC20(sonicToken).transfer(treasuryWallet, sonicAmount) {
            emit TreasuryTransfer(sonicAmount);
        } catch {
            emit AirdropFailed("Treasury transfer failed");
        }
    }

    function _processAirdrop(uint256 sonicAmount) private {
        if (sonicAmount == 0 || holders.length == 0) {
            return;
        }

        uint256 sonicPerHolder = sonicAmount / holders.length;
        
        for (uint256 i = 0; i < holders.length; i++) {
            if (holders[i] != address(0) && holders[i] != address(this) && holders[i] != liquidityPair) {
                try IERC20(sonicToken).transfer(holders[i], sonicPerHolder) {
                    // Transfer başarılı
                } catch Error(string memory reason) {
                    emit AirdropFailed(reason);
                } catch {
                    emit AirdropFailed("Hata");
                }
            }
        }
    }

    // View functions
    function getHolderCount() external view returns (uint256) {
        return holders.length;
    }
    
    function getHolders() external view returns (address[] memory) {
        return holders;
    }

    // Initial liquidity function (must be called by owner with ETH)
    function addInitialLiquidity(uint256 tokenAmount) external payable onlyOwner {
        require(msg.value > 0, "Must provide ETH for initial liquidity");
        require(tokenAmount > 0, "Must provide token amount for initial liquidity");
        
        require(
            IERC20(address(this)).balanceOf(address(this)) >= tokenAmount,
            "Insufficient token balance in contract"
        );

        _approve(address(this), address(metropolisRouter), tokenAmount);

        try metropolisRouter.addLiquidityETH{value: msg.value}(
            address(this),
            tokenAmount,
            0,
            0,
            msg.sender,
            block.timestamp
        ) {
            emit LiquidityAdded(tokenAmount, msg.value);
        } catch {
            _approve(address(this), address(metropolisRouter), 0);
            revert("Failed to add liquidity");
        }

        uint256 remainingETH = address(this).balance;
        if (remainingETH > 0) {
            payable(msg.sender).transfer(remainingETH);
        }
    }

    function setRouter(address _router) external onlyOwner {
        require(_router != address(0), "Invalid router address");
        metropolisRouter = IMetropolisRouter(_router);
    }

    function rescueTokens(address _token, uint256 _amount) external onlyOwner {
        require(_token != address(this), "Cannot rescue FARMER tokens");
        IERC20(_token).transfer(owner(), _amount);
    }

    // View functions for pending amounts
    function getPendingLiquidityTokens() external view returns (uint256) {
        return _pendingLiquidityTokens;
    }

    function getPendingAirdropTokens() external view returns (uint256) {
        return _pendingAirdropTokens;
    }

    // Manual trigger for processing (only owner)
    function triggerProcessing() external onlyOwner {
        require(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "No pending tokens");
        require(holders.length > 0, "No holders");
        try this.processLiquidityAndAirdrop() {
            // Process successful
        } catch {
            emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens);
        }
    }

    function checkAndRefreshAllowances() external onlyOwner {
        uint256 farmAllowance = IERC20(address(this)).allowance(address(this), address(metropolisRouter));
        if (farmAllowance < TOTAL_SUPPLY) {
            _approve(address(this), address(metropolisRouter), TOTAL_SUPPLY);
        }

        uint256 wethBalance = IERC20(sonicToken).balanceOf(address(this));
        if (wethBalance > 0) {
            uint256 wethAllowance = IERC20(sonicToken).allowance(address(this), address(metropolisRouter));
            if (wethAllowance < wethBalance) {
                IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max);
            }
        }
    }

    // Debug function
    function getSwapInfo() external view returns (
        uint256 contractBalance,
        uint256 routerAllowance,
        bool pairExists,
        address pair,
        uint256 pendingLiq,
        uint256 pendingAirdrop
    ) {
        contractBalance = IERC20(address(this)).balanceOf(address(this));
        routerAllowance = IERC20(address(this)).allowance(address(this), address(metropolisRouter));
        pair = IMetropolisFactory(metropolisRouter.factory()).getPair(address(this), sonicToken);
        pairExists = pair != address(0);
        pendingLiq = _pendingLiquidityTokens;
        pendingAirdrop = _pendingAirdropTokens;
    }

    // Pair rezervlerini kontrol et
    function getPairReserves() public view returns (uint256 farmReserve, uint256 wethReserve) {
        (uint112 reserve0, uint112 reserve1,) = IMetropolisPair(liquidityPair).getReserves();
        address token0 = IMetropolisPair(liquidityPair).token0();
        if (token0 == address(this)) {
            return (uint256(reserve0), uint256(reserve1));
        }
        return (uint256(reserve1), uint256(reserve0));
    }

    // Swap için minimum çıktı miktarını hesapla
    function getMinimumOutput(uint256 amountIn) public view returns (uint256) {
        (uint256 farmReserve, uint256 wethReserve) = getPairReserves();
        if (farmReserve == 0 || wethReserve == 0) return 0;
        
        uint256 amountInWithFee = amountIn * 997; // %0.3 işlem ücreti
        uint256 numerator = amountInWithFee * wethReserve;
        uint256 denominator = (farmReserve * 1000) + amountInWithFee;
        return numerator / denominator;
    }

    // Tüm onayları yenile
    function refreshAllApprovals() external onlyOwner {
        _approve(address(this), address(metropolisRouter), type(uint256).max);
        IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max);
        
        try IERC20(sonicToken).approve(liquidityPair, type(uint256).max) {} catch {}
        try IERC20(address(this)).approve(liquidityPair, type(uint256).max) {} catch {}
    }

    // Set treasury wallet (only owner)
    function setTreasuryWallet(address _treasuryWallet) external onlyOwner {
        require(_treasuryWallet != address(0), "Invalid treasury address");
        address oldTreasury = treasuryWallet;
        treasuryWallet = _treasuryWallet;
        emit TreasuryWalletUpdated(oldTreasury, _treasuryWallet);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"holdersCount","type":"uint256"}],"name":"AirdropDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"AirdropFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ApprovalRefreshed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"LiquidityAddFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sonicAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"farmReserve","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wethReserve","type":"uint256"}],"name":"PairReservesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensForAirdrop","type":"uint256"}],"name":"ProcessStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"SwapFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"wethReceived","type":"uint256"}],"name":"SwapSuccessful","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TreasuryTransfer","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"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"addInitialLiquidity","outputs":[],"stateMutability":"payable","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":"checkAndRefreshAllowances","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolders","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"name":"getMinimumOutput","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPairReserves","outputs":[{"internalType":"uint256","name":"farmReserve","type":"uint256"},{"internalType":"uint256","name":"wethReserve","type":"uint256"}],"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":[],"name":"getSwapInfo","outputs":[{"internalType":"uint256","name":"contractBalance","type":"uint256"},{"internalType":"uint256","name":"routerAllowance","type":"uint256"},{"internalType":"bool","name":"pairExists","type":"bool"},{"internalType":"address","name":"pair","type":"address"},{"internalType":"uint256","name":"pendingLiq","type":"uint256"},{"internalType":"uint256","name":"pendingAirdrop","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metropolisFactory","outputs":[{"internalType":"contract IMetropolisFactory","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"metropolisRouter","outputs":[{"internalType":"contract IMetropolisRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processLiquidityAndAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refreshAllApprovals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWallet","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sonicToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"triggerProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50336040518060400160405280600681526020017f4641524d455200000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4641524d000000000000000000000000000000000000000000000000000000008152508160039081620000909190620008d1565b508060049081620000a29190620008d1565b5050506001600581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200011f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001169062000a19565b60405180910390fd5b6200013081620003e060201b60201c565b5060007395a7e403d7cf20f675ff9273d66e94d35ba49fa390506000731570300e9cfec66c9fb0c8bc14366c86eb170ad09050600073039e2fb66102314ce7b64ce5ce3e5183bc94ad38905060007395503a306cd81e08c0c43c49faae71165937d1759050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614158015620002005750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156200023a5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015620002745750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b620002b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ad9062000a8b565b60405180910390fd5b83600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003d63069d3c21bcecceda1000000620004a660201b60201c565b5050505062000bb7565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000518576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200050f9062000afd565b60405180910390fd5b6200052c600083836200061360201b60201c565b806002600082825462000540919062000b4e565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005f3919062000b9a565b60405180910390a36200060f600083836200063060201b60201c565b5050565b6200062b8383836200064d60201b620028e81760201c565b505050565b620006488383836200065260201b620028ed1760201c565b505050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006d957607f821691505b602082108103620006ef57620006ee62000691565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007597fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200071a565b6200076586836200071a565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007b2620007ac620007a6846200077d565b62000787565b6200077d565b9050919050565b6000819050919050565b620007ce8362000791565b620007e6620007dd82620007b9565b84845462000727565b825550505050565b600090565b620007fd620007ee565b6200080a818484620007c3565b505050565b5b81811015620008325762000826600082620007f3565b60018101905062000810565b5050565b601f82111562000881576200084b81620006f5565b62000856846200070a565b8101602085101562000866578190505b6200087e62000875856200070a565b8301826200080f565b50505b505050565b600082821c905092915050565b6000620008a66000198460080262000886565b1980831691505092915050565b6000620008c1838362000893565b9150826002028217905092915050565b620008dc8262000657565b67ffffffffffffffff811115620008f857620008f762000662565b5b620009048254620006c0565b6200091182828562000836565b600060209050601f83116001811462000949576000841562000934578287015190505b620009408582620008b3565b865550620009b0565b601f1984166200095986620006f5565b60005b8281101562000983578489015182556001820191506020850194506020810190506200095c565b86831015620009a357848901516200099f601f89168262000893565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b600062000a01600283620009b8565b915062000a0e82620009c9565b602082019050919050565b6000602082019050818103600083015262000a3481620009f2565b9050919050565b7f4631000000000000000000000000000000000000000000000000000000000000600082015250565b600062000a73600283620009b8565b915062000a808262000a3b565b602082019050919050565b6000602082019050818103600083015262000aa68162000a64565b9050919050565b7f4533000000000000000000000000000000000000000000000000000000000000600082015250565b600062000ae5600283620009b8565b915062000af28262000aad565b602082019050919050565b6000602082019050818103600083015262000b188162000ad6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b5b826200077d565b915062000b68836200077d565b925082820190508082111562000b835762000b8262000b1f565b5b92915050565b62000b94816200077d565b82525050565b600060208201905062000bb1600083018462000b89565b92915050565b6158018062000bc76000396000f3fe6080604052600436106101fd5760003560e01c806370a082311161010d578063a8602fea116100a0578063d4d7b19a1161006f578063d4d7b19a146106f5578063dd62ed3e14610732578063ed9cacfe1461076f578063f2fde38b14610786578063fd7c9fab146107af57610204565b8063a8602fea1461064f578063a9059cbb14610678578063c026d93a146106b5578063c0d78655146106cc57610204565b80638129fc1c116100dc5780638129fc1c146105b65780638da5cb5b146105cd57806395d89b41146105f85780639df93f6c1461062357610204565b806370a082311461050c5780637136982b146105495780637ac84fc114610574578063808a54571461058b57610204565b8063313ce567116101905780634626402b1161015f5780634626402b1461043757806357376198146104625780635d76b04c1461048b5780635fe8e7cc146104b657806362b6327a146104e157610204565b8063313ce567146103ae578063397883d2146103d957806341a22cc2146103f0578063461a3a951461040c57610204565b80631b26c80d116101cc5780631b26c80d146102c757806323b872dd146102f7578063298926cb146103345780632a11ced01461037157610204565b806306fdde031461020957806308dee2b414610234578063095ea7b31461025f57806318160ddd1461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e6107da565b60405161022b9190614215565b60405180910390f35b34801561024057600080fd5b5061024961086c565b6040516102569190614250565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190614304565b610876565b604051610293919061435f565b60405180910390f35b3480156102a857600080fd5b506102b1610892565b6040516102be9190614250565b60405180910390f35b3480156102d357600080fd5b506102dc61089c565b6040516102ee96959493929190614389565b60405180910390f35b34801561030357600080fd5b5061031e600480360381019061031991906143ea565b610b36565b60405161032b919061435f565b60405180910390f35b34801561034057600080fd5b5061035b6004803603810190610356919061443d565b610b5e565b6040516103689190614250565b60405180910390f35b34801561037d57600080fd5b506103986004803603810190610393919061443d565b610be6565b6040516103a5919061446a565b60405180910390f35b3480156103ba57600080fd5b506103c3610c25565b6040516103d091906144a1565b60405180910390f35b3480156103e557600080fd5b506103ee610c2e565b005b61040a6004803603810190610405919061443d565b610d72565b005b34801561041857600080fd5b5061042161108f565b60405161042e919061446a565b60405180910390f35b34801561044357600080fd5b5061044c6110b5565b604051610459919061446a565b60405180910390f35b34801561046e57600080fd5b5061048960048036038101906104849190614304565b6110db565b005b34801561049757600080fd5b506104a06111db565b6040516104ad9190614250565b60405180910390f35b3480156104c257600080fd5b506104cb6111e5565b6040516104d8919061457a565b60405180910390f35b3480156104ed57600080fd5b506104f6611273565b60405161050391906145fb565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190614616565b611299565b6040516105409190614250565b60405180910390f35b34801561055557600080fd5b5061055e6112e1565b60405161056b9190614250565b60405180910390f35b34801561058057600080fd5b506105896112ee565b005b34801561059757600080fd5b506105a0611663565b6040516105ad919061446a565b60405180910390f35b3480156105c257600080fd5b506105cb611689565b005b3480156105d957600080fd5b506105e2611cfa565b6040516105ef919061446a565b60405180910390f35b34801561060457600080fd5b5061060d611d24565b60405161061a9190614215565b60405180910390f35b34801561062f57600080fd5b50610638611db6565b604051610646929190614643565b60405180910390f35b34801561065b57600080fd5b5061067660048036038101906106719190614616565b611f76565b005b34801561068457600080fd5b5061069f600480360381019061069a9190614304565b612092565b6040516106ac919061435f565b60405180910390f35b3480156106c157600080fd5b506106ca6120ae565b005b3480156106d857600080fd5b506106f360048036038101906106ee9190614616565b612401565b005b34801561070157600080fd5b5061071c60048036038101906107179190614616565b6124bc565b604051610729919061435f565b60405180910390f35b34801561073e57600080fd5b506107596004803603810190610754919061466c565b6124dc565b6040516107669190614250565b60405180910390f35b34801561077b57600080fd5b50610784612563565b005b34801561079257600080fd5b506107ad60048036038101906107a89190614616565b61283f565b005b3480156107bb57600080fd5b506107c46128c2565b6040516107d191906146cd565b60405180910390f35b6060600380546107e990614717565b80601f016020809104026020016040519081016040528092919081815260200182805461081590614717565b80156108625780601f1061083757610100808354040283529160200191610862565b820191906000526020600020905b81548152906001019060200180831161084557829003601f168201915b5050505050905090565b6000600e54905090565b6000803390506108878185856128f2565b600191505092915050565b6000600254905090565b6000806000806000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108de919061446a565b602060405180830381865afa1580156108fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091f919061475d565b95503073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040161097e92919061478a565b602060405180830381865afa15801561099b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bf919061475d565b9450600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5291906147c8565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610aae92919061478a565b602060405180830381865afa158015610acb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aef91906147c8565b9250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614159350600e549150600f549050909192939495565b600080339050610b47858285612a86565b610b52858585612aea565b60019150509392505050565b6000806000610b6b611db6565b915091506000821480610b7e5750600081145b15610b8e57600092505050610be1565b60006103e585610b9e9190614824565b905060008282610bae9190614824565b90506000826103e886610bc19190614824565b610bcb9190614866565b90508082610bd991906148c9565b955050505050505b919050565b600d8181548110610bf657600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610c36612dd1565b6000600e541180610c4957506000600f54115b610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f90614946565b60405180910390fd5b6000600d8054905011610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc7906149b2565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610d1857600080fd5b505af1925050508015610d29575060015b610d6f577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f54604051610d62929190614643565b60405180910390a1610d70565b5b565b610d7a612dd1565b60003411610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db490614a44565b60405180910390fd5b60008111610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df790614ad6565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e3a919061446a565b602060405180830381865afa158015610e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7b919061475d565b1015610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb390614b68565b60405180910390fd5b610ee930600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836128f2565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71934308460008033426040518863ffffffff1660e01b8152600401610f5096959493929190614bc3565b60606040518083038185885af193505050508015610f8c57506040513d601f19601f82011682018060405250810190610f899190614c24565b60015b610ff957610fbe30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006128f2565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff090614cc3565b60405180910390fd5b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b813460405161102d929190614643565b60405180910390a16000479050600081111561108b573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611089573d6000803e3d6000fd5b505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110e3612dd1565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114890614d2f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611175611cfa565b836040518363ffffffff1660e01b8152600401611193929190614d4f565b6020604051808303816000875af11580156111b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d69190614da4565b505050565b6000600f54905090565b6060600d80548060200260200160405190810160405280929190818152602001828054801561126957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161121f575b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600d80549050905090565b600260055403611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a90614e1d565b60405180910390fd5b6002600581905550601060019054906101000a900460ff161561138b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138290614e89565b60405180910390fd5b6001601060016101000a81548160ff0219169083151502179055506000600e5490506000600f5490506000821480156113c45750600081145b156113eb576000601060016101000a81548160ff0219169083151502179055505050611659565b7f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd828260405161141c929190614643565b60405180910390a16000600e819055506000600f8190555061148130600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6128f2565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611520929190614d4f565b6020604051808303816000875af115801561153f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115639190614da4565b50600081836115729190614866565b9050600061157f82612e48565b9050600081036115ad576000601060016101000a81548160ff02191690831515021790555050505050611659565b60008285836115bc9190614824565b6115c691906148c9565b9050600081836115d69190614ea9565b905060008211156115ec576115eb8683613277565b5b600081111561163757600060646019836116069190614824565b61161091906148c9565b9050600081836116209190614ea9565b905061162b8261357d565b61163481613714565b50505b6000601060016101000a81548160ff0219169083151502179055505050505050505b6001600581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611691612dd1565b601060009054906101000a900460ff16156116e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d890614f29565b60405180910390fd5b6001601060006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040161177b92919061478a565b602060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc91906147c8565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361195557600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016118d192919061478a565b6020604051808303816000875af11580156118f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191491906147c8565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036119e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd90614f95565b60405180910390fd5b611a3330600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6128f2565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611ad2929190614d4f565b6020604051808303816000875af1158015611af1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b159190614da4565b611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b90615001565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611bf3929190614d4f565b6020604051808303816000875af1158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c369190614da4565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611cb4929190614d4f565b6020604051808303816000875af1158015611cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf79190614da4565b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611d3390614717565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5f90614717565b8015611dac5780601f10611d8157610100808354040283529160200191611dac565b820191906000526020600020905b815481529060010190602001808311611d8f57829003601f168201915b5050505050905090565b600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4d91906150a3565b50915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee591906147c8565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f4857826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff1694509450505050611f72565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16945094505050505b9091565b611f7e612dd1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe490615142565b60405180910390fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb4818360405161208692919061478a565b60405180910390a15050565b6000803390506120a3818585612aea565b600191505092915050565b6120b6612dd1565b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040161211592919061478a565b602060405180830381865afa158015612132573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612156919061475d565b905069d3c21bcecceda10000008110156121a2576121a130600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda10000006128f2565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121ff919061446a565b602060405180830381865afa15801561221c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612240919061475d565b905060008111156123fd576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016122cc92919061478a565b602060405180830381865afa1580156122e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230d919061475d565b9050818110156123fb57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016123b6929190614d4f565b6020604051808303816000875af11580156123d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f99190614da4565b505b505b5050565b612409612dd1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246f906151ae565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61256b612dd1565b6125b830600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6128f2565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612657929190614d4f565b6020604051808303816000875af1158015612676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269a9190614da4565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161273a929190614d4f565b6020604051808303816000875af192505050801561277657506040513d601f19601f820116820180604052508101906127739190614da4565b60015b1561277d57505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016127fa929190614d4f565b6020604051808303816000875af192505050801561283657506040513d601f19601f820116820180604052508101906128339190614da4565b60015b1561283d57505b565b612847612dd1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ad9061521a565b60405180910390fd5b6128bf81613a6b565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561295c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61299b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299290615286565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a799190614250565b60405180910390a3505050565b6000612a9284846124dc565b905081811015612ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ace906152f2565b60405180910390fd5b612ae484848484036128f2565b50505050565b601060019054906101000a900460ff16158015612b3a5750612b0a611cfa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612b795750612b49611cfa565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bb157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612c0a5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612d865760006064600583612c209190614824565b612c2a91906148c9565b90506000811115612d845760006064601983612c469190614824565b612c5091906148c9565b905060006064601984612c639190614824565b612c6d91906148c9565b905060008385612c7d9190614ea9565b9050612c8a873086613b31565b612c95878783613b31565b82600e6000828254612ca79190614866565b9250508190555081600f6000828254612cc09190614866565b9250508190555068056bc75e2d63100000600f54600e54612ce19190614866565b10612d41573073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d2e57600080fd5b505af1925050508015612d3f575060015b505b612d5e87678ac7230489e80000612d578a611299565b1015613d72565b612d7b86678ac7230489e80000612d7489611299565b1015613d72565b50505050612dcc565b505b612d91838383613b31565b612dae83678ac7230489e80000612da786611299565b1015613d72565b612dcb82678ac7230489e80000612dc485611299565b1015613d72565b5b505050565b3373ffffffffffffffffffffffffffffffffffffffff16612df0611cfa565b73ffffffffffffffffffffffffffffffffffffffff1614612e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3d9061535e565b60405180910390fd5b565b6000808203612e5a5760009050613272565b612e8730600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128f2565b6000600267ffffffffffffffff811115612ea457612ea361537e565b5b604051908082528060200260200182016040528015612ed25781602001602082028036833780820191505090505b5090503081600081518110612eea57612ee96153ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612f5b57612f5a6153ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612ff2919061446a565b602060405180830381865afa15801561300f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613033919061475d565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795856000853061012c426130869190614866565b6040518663ffffffff1660e01b81526004016130a69594939291906153dc565b600060405180830381600087803b1580156130c057600080fd5b505af19250505080156130d1575060015b613181576130dd615443565b806308c379a00361313f57506130f1615496565b806130fc5750613141565b7f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec07238160405161312b9190614215565b60405180910390a160009350505050613272565b505b7f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405161316e90615572565b60405180910390a1600092505050613272565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016131de919061446a565b602060405180830381865afa1580156131fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061321f919061475d565b90506000828261322f9190614ea9565b90507fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc018682604051613262929190614643565b60405180910390a1809450505050505b919050565b60008214806132865750600081145b61357957600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401613309929190614d4f565b6020604051808303816000875af1158015613328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334c9190614da4565b5061337a30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128f2565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856064601e60646133ee9190614ea9565b896133f99190614824565b61340391906148c9565b6064601e60646134139190614ea9565b8961341e9190614824565b61342891906148c9565b3061012c426134379190614866565b6040518963ffffffff1660e01b815260040161345a989796959493929190615592565b6060604051808303816000875af192505050801561349657506040513d601f19601f820116820180604052508101906134939190614c24565b60015b61353b576134a2615443565b806308c379a0036134fe57506134b6615496565b806134c15750613500565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad816040516134f09190614215565b60405180910390a150613536565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad60405161352d90615572565b60405180910390a15b613578565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b828260405161356f929190614643565b60405180910390a15b5b5050565b60008114806135da5750600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61371157600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161365d929190614d4f565b6020604051808303816000875af192505050801561369957506040513d601f19601f820116820180604052508101906136969190614da4565b60015b6136d7577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b116146040516136ca9061565c565b60405180910390a1613710565b507f81f40cfa7691027044b117aa50764b33eaa2223ca9f761d5ff1c316a33d65ad2816040516137079190614250565b60405180910390a15b5b50565b600081148061372857506000600d80549050145b613a68576000600d805490508261373f91906148c9565b905060005b600d80549050811015613a6557600073ffffffffffffffffffffffffffffffffffffffff16600d828154811061377d5761377c6153ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415801561383657503073ffffffffffffffffffffffffffffffffffffffff16600d82815481106137f2576137f16153ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156138ce5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d828154811061388a576138896153ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613a5257600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600d8381548110613925576139246153ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161396e929190614d4f565b6020604051808303816000875af19250505080156139aa57506040513d601f19601f820116820180604052508101906139a79190614da4565b60015b613a4f576139b6615443565b806308c379a003613a1257506139ca615496565b806139d55750613a14565b7fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b1161481604051613a049190614215565b60405180910390a150613a4a565b505b7fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b11614604051613a4190615572565b60405180910390a15b613a51565b505b5b8080613a5d9061567c565b915050613744565b50505b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613b9b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd190615710565b60405180910390fd5b613be5838383614165565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c629061577c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d599190614250565b60405180910390a3613d6c848484614175565b50505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613dfc57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561416157808015613e585750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613f1d576001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600d829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614160565b80158015613f745750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561415f576000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060005b600d8054905081101561415d578273ffffffffffffffffffffffffffffffffffffffff16600d828154811061400c5761400b6153ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361414a57600d6001600d805490506140669190614ea9565b81548110614077576140766153ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d82815481106140b6576140b56153ad565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d8054806141105761410f61579c565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561415d565b80806141559061567c565b915050613fd4565b505b5b5b5050565b6141708383836128e8565b505050565b6141808383836128ed565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141bf5780820151818401526020810190506141a4565b60008484015250505050565b6000601f19601f8301169050919050565b60006141e782614185565b6141f18185614190565b93506142018185602086016141a1565b61420a816141cb565b840191505092915050565b6000602082019050818103600083015261422f81846141dc565b905092915050565b6000819050919050565b61424a81614237565b82525050565b60006020820190506142656000830184614241565b92915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142a58261427a565b9050919050565b6142b58161429a565b81146142c057600080fd5b50565b6000813590506142d2816142ac565b92915050565b6142e181614237565b81146142ec57600080fd5b50565b6000813590506142fe816142d8565b92915050565b6000806040838503121561431b5761431a614275565b5b6000614329858286016142c3565b925050602061433a858286016142ef565b9150509250929050565b60008115159050919050565b61435981614344565b82525050565b60006020820190506143746000830184614350565b92915050565b6143838161429a565b82525050565b600060c08201905061439e6000830189614241565b6143ab6020830188614241565b6143b86040830187614350565b6143c5606083018661437a565b6143d26080830185614241565b6143df60a0830184614241565b979650505050505050565b60008060006060848603121561440357614402614275565b5b6000614411868287016142c3565b9350506020614422868287016142c3565b9250506040614433868287016142ef565b9150509250925092565b60006020828403121561445357614452614275565b5b6000614461848285016142ef565b91505092915050565b600060208201905061447f600083018461437a565b92915050565b600060ff82169050919050565b61449b81614485565b82525050565b60006020820190506144b66000830184614492565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144f18161429a565b82525050565b600061450383836144e8565b60208301905092915050565b6000602082019050919050565b6000614527826144bc565b61453181856144c7565b935061453c836144d8565b8060005b8381101561456d57815161455488826144f7565b975061455f8361450f565b925050600181019050614540565b5085935050505092915050565b60006020820190508181036000830152614594818461451c565b905092915050565b6000819050919050565b60006145c16145bc6145b78461427a565b61459c565b61427a565b9050919050565b60006145d3826145a6565b9050919050565b60006145e5826145c8565b9050919050565b6145f5816145da565b82525050565b600060208201905061461060008301846145ec565b92915050565b60006020828403121561462c5761462b614275565b5b600061463a848285016142c3565b91505092915050565b60006040820190506146586000830185614241565b6146656020830184614241565b9392505050565b6000806040838503121561468357614682614275565b5b6000614691858286016142c3565b92505060206146a2858286016142c3565b9150509250929050565b60006146b7826145c8565b9050919050565b6146c7816146ac565b82525050565b60006020820190506146e260008301846146be565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061472f57607f821691505b602082108103614742576147416146e8565b5b50919050565b600081519050614757816142d8565b92915050565b60006020828403121561477357614772614275565b5b600061478184828501614748565b91505092915050565b600060408201905061479f600083018561437a565b6147ac602083018461437a565b9392505050565b6000815190506147c2816142ac565b92915050565b6000602082840312156147de576147dd614275565b5b60006147ec848285016147b3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061482f82614237565b915061483a83614237565b925082820261484881614237565b9150828204841483151761485f5761485e6147f5565b5b5092915050565b600061487182614237565b915061487c83614237565b9250828201905080821115614894576148936147f5565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148d482614237565b91506148df83614237565b9250826148ef576148ee61489a565b5b828204905092915050565b7f4e6f2070656e64696e6720746f6b656e73000000000000000000000000000000600082015250565b6000614930601183614190565b915061493b826148fa565b602082019050919050565b6000602082019050818103600083015261495f81614923565b9050919050565b7f4e6f20686f6c6465727300000000000000000000000000000000000000000000600082015250565b600061499c600a83614190565b91506149a782614966565b602082019050919050565b600060208201905081810360008301526149cb8161498f565b9050919050565b7f4d7573742070726f766964652045544820666f7220696e697469616c206c697160008201527f7569646974790000000000000000000000000000000000000000000000000000602082015250565b6000614a2e602683614190565b9150614a39826149d2565b604082019050919050565b60006020820190508181036000830152614a5d81614a21565b9050919050565b7f4d7573742070726f7669646520746f6b656e20616d6f756e7420666f7220696e60008201527f697469616c206c69717569646974790000000000000000000000000000000000602082015250565b6000614ac0602f83614190565b9150614acb82614a64565b604082019050919050565b60006020820190508181036000830152614aef81614ab3565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000614b52602683614190565b9150614b5d82614af6565b604082019050919050565b60006020820190508181036000830152614b8181614b45565b9050919050565b6000819050919050565b6000614bad614ba8614ba384614b88565b61459c565b614237565b9050919050565b614bbd81614b92565b82525050565b600060c082019050614bd8600083018961437a565b614be56020830188614241565b614bf26040830187614bb4565b614bff6060830186614bb4565b614c0c608083018561437a565b614c1960a0830184614241565b979650505050505050565b600080600060608486031215614c3d57614c3c614275565b5b6000614c4b86828701614748565b9350506020614c5c86828701614748565b9250506040614c6d86828701614748565b9150509250925092565b7f4661696c656420746f20616464206c6971756964697479000000000000000000600082015250565b6000614cad601783614190565b9150614cb882614c77565b602082019050919050565b60006020820190508181036000830152614cdc81614ca0565b9050919050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e730000000000600082015250565b6000614d19601b83614190565b9150614d2482614ce3565b602082019050919050565b60006020820190508181036000830152614d4881614d0c565b9050919050565b6000604082019050614d64600083018561437a565b614d716020830184614241565b9392505050565b614d8181614344565b8114614d8c57600080fd5b50565b600081519050614d9e81614d78565b92915050565b600060208284031215614dba57614db9614275565b5b6000614dc884828501614d8f565b91505092915050565b7f5231000000000000000000000000000000000000000000000000000000000000600082015250565b6000614e07600283614190565b9150614e1282614dd1565b602082019050919050565b60006020820190508181036000830152614e3681614dfa565b9050919050565b7f416c72656164792070726f63657373696e670000000000000000000000000000600082015250565b6000614e73601283614190565b9150614e7e82614e3d565b602082019050919050565b60006020820190508181036000830152614ea281614e66565b9050919050565b6000614eb482614237565b9150614ebf83614237565b9250828203905081811115614ed757614ed66147f5565b5b92915050565b7f4632000000000000000000000000000000000000000000000000000000000000600082015250565b6000614f13600283614190565b9150614f1e82614edd565b602082019050919050565b60006020820190508181036000830152614f4281614f06565b9050919050565b7f4633000000000000000000000000000000000000000000000000000000000000600082015250565b6000614f7f600283614190565b9150614f8a82614f49565b602082019050919050565b60006020820190508181036000830152614fae81614f72565b9050919050565b7f4634000000000000000000000000000000000000000000000000000000000000600082015250565b6000614feb600283614190565b9150614ff682614fb5565b602082019050919050565b6000602082019050818103600083015261501a81614fde565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b61504481615021565b811461504f57600080fd5b50565b6000815190506150618161503b565b92915050565b600063ffffffff82169050919050565b61508081615067565b811461508b57600080fd5b50565b60008151905061509d81615077565b92915050565b6000806000606084860312156150bc576150bb614275565b5b60006150ca86828701615052565b93505060206150db86828701615052565b92505060406150ec8682870161508e565b9150509250925092565b7f496e76616c696420747265617375727920616464726573730000000000000000600082015250565b600061512c601883614190565b9150615137826150f6565b602082019050919050565b6000602082019050818103600083015261515b8161511f565b9050919050565b7f496e76616c696420726f75746572206164647265737300000000000000000000600082015250565b6000615198601683614190565b91506151a382615162565b602082019050919050565b600060208201905081810360008301526151c78161518b565b9050919050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b6000615204600283614190565b915061520f826151ce565b602082019050919050565b60006020820190508181036000830152615233816151f7565b9050919050565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b6000615270600283614190565b915061527b8261523a565b602082019050919050565b6000602082019050818103600083015261529f81615263565b9050919050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b60006152dc600283614190565b91506152e7826152a6565b602082019050919050565b6000602082019050818103600083015261530b816152cf565b9050919050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b6000615348600283614190565b915061535382615312565b602082019050919050565b600060208201905081810360008301526153778161533b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a0820190506153f16000830188614241565b6153fe6020830187614bb4565b8181036040830152615410818661451c565b905061541f606083018561437a565b61542c6080830184614241565b9695505050505050565b60008160e01c9050919050565b600060033d11156154625760046000803e61545f600051615436565b90505b90565b61546e826141cb565b810181811067ffffffffffffffff8211171561548d5761548c61537e565b5b80604052505050565b600060443d10615523576154a861426b565b60043d036004823e80513d602482011167ffffffffffffffff821117156154d0575050615523565b808201805167ffffffffffffffff8111156154ee5750505050615523565b80602083010160043d03850181111561550b575050505050615523565b61551a82602001850186615465565b82955050505050505b90565b7f4861746100000000000000000000000000000000000000000000000000000000600082015250565b600061555c600483614190565b915061556782615526565b602082019050919050565b6000602082019050818103600083015261558b8161554f565b9050919050565b6000610100820190506155a8600083018b61437a565b6155b5602083018a61437a565b6155c26040830189614241565b6155cf6060830188614241565b6155dc6080830187614241565b6155e960a0830186614241565b6155f660c083018561437a565b61560360e0830184614241565b9998505050505050505050565b7f5472656173757279207472616e73666572206661696c65640000000000000000600082015250565b6000615646601883614190565b915061565182615610565b602082019050919050565b6000602082019050818103600083015261567581615639565b9050919050565b600061568782614237565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036156b9576156b86147f5565b5b600182019050919050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b60006156fa600283614190565b9150615705826156c4565b602082019050919050565b60006020820190508181036000830152615729816156ed565b9050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b6000615766600283614190565b915061577182615730565b602082019050919050565b6000602082019050818103600083015261579581615759565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220a244743f51e013b4bf7e7c6a9bd481bef2c79268878ba72c69131c685f5172ca64736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101fd5760003560e01c806370a082311161010d578063a8602fea116100a0578063d4d7b19a1161006f578063d4d7b19a146106f5578063dd62ed3e14610732578063ed9cacfe1461076f578063f2fde38b14610786578063fd7c9fab146107af57610204565b8063a8602fea1461064f578063a9059cbb14610678578063c026d93a146106b5578063c0d78655146106cc57610204565b80638129fc1c116100dc5780638129fc1c146105b65780638da5cb5b146105cd57806395d89b41146105f85780639df93f6c1461062357610204565b806370a082311461050c5780637136982b146105495780637ac84fc114610574578063808a54571461058b57610204565b8063313ce567116101905780634626402b1161015f5780634626402b1461043757806357376198146104625780635d76b04c1461048b5780635fe8e7cc146104b657806362b6327a146104e157610204565b8063313ce567146103ae578063397883d2146103d957806341a22cc2146103f0578063461a3a951461040c57610204565b80631b26c80d116101cc5780631b26c80d146102c757806323b872dd146102f7578063298926cb146103345780632a11ced01461037157610204565b806306fdde031461020957806308dee2b414610234578063095ea7b31461025f57806318160ddd1461029c57610204565b3661020457005b600080fd5b34801561021557600080fd5b5061021e6107da565b60405161022b9190614215565b60405180910390f35b34801561024057600080fd5b5061024961086c565b6040516102569190614250565b60405180910390f35b34801561026b57600080fd5b5061028660048036038101906102819190614304565b610876565b604051610293919061435f565b60405180910390f35b3480156102a857600080fd5b506102b1610892565b6040516102be9190614250565b60405180910390f35b3480156102d357600080fd5b506102dc61089c565b6040516102ee96959493929190614389565b60405180910390f35b34801561030357600080fd5b5061031e600480360381019061031991906143ea565b610b36565b60405161032b919061435f565b60405180910390f35b34801561034057600080fd5b5061035b6004803603810190610356919061443d565b610b5e565b6040516103689190614250565b60405180910390f35b34801561037d57600080fd5b506103986004803603810190610393919061443d565b610be6565b6040516103a5919061446a565b60405180910390f35b3480156103ba57600080fd5b506103c3610c25565b6040516103d091906144a1565b60405180910390f35b3480156103e557600080fd5b506103ee610c2e565b005b61040a6004803603810190610405919061443d565b610d72565b005b34801561041857600080fd5b5061042161108f565b60405161042e919061446a565b60405180910390f35b34801561044357600080fd5b5061044c6110b5565b604051610459919061446a565b60405180910390f35b34801561046e57600080fd5b5061048960048036038101906104849190614304565b6110db565b005b34801561049757600080fd5b506104a06111db565b6040516104ad9190614250565b60405180910390f35b3480156104c257600080fd5b506104cb6111e5565b6040516104d8919061457a565b60405180910390f35b3480156104ed57600080fd5b506104f6611273565b60405161050391906145fb565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190614616565b611299565b6040516105409190614250565b60405180910390f35b34801561055557600080fd5b5061055e6112e1565b60405161056b9190614250565b60405180910390f35b34801561058057600080fd5b506105896112ee565b005b34801561059757600080fd5b506105a0611663565b6040516105ad919061446a565b60405180910390f35b3480156105c257600080fd5b506105cb611689565b005b3480156105d957600080fd5b506105e2611cfa565b6040516105ef919061446a565b60405180910390f35b34801561060457600080fd5b5061060d611d24565b60405161061a9190614215565b60405180910390f35b34801561062f57600080fd5b50610638611db6565b604051610646929190614643565b60405180910390f35b34801561065b57600080fd5b5061067660048036038101906106719190614616565b611f76565b005b34801561068457600080fd5b5061069f600480360381019061069a9190614304565b612092565b6040516106ac919061435f565b60405180910390f35b3480156106c157600080fd5b506106ca6120ae565b005b3480156106d857600080fd5b506106f360048036038101906106ee9190614616565b612401565b005b34801561070157600080fd5b5061071c60048036038101906107179190614616565b6124bc565b604051610729919061435f565b60405180910390f35b34801561073e57600080fd5b506107596004803603810190610754919061466c565b6124dc565b6040516107669190614250565b60405180910390f35b34801561077b57600080fd5b50610784612563565b005b34801561079257600080fd5b506107ad60048036038101906107a89190614616565b61283f565b005b3480156107bb57600080fd5b506107c46128c2565b6040516107d191906146cd565b60405180910390f35b6060600380546107e990614717565b80601f016020809104026020016040519081016040528092919081815260200182805461081590614717565b80156108625780601f1061083757610100808354040283529160200191610862565b820191906000526020600020905b81548152906001019060200180831161084557829003601f168201915b5050505050905090565b6000600e54905090565b6000803390506108878185856128f2565b600191505092915050565b6000600254905090565b6000806000806000803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108de919061446a565b602060405180830381865afa1580156108fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091f919061475d565b95503073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040161097e92919061478a565b602060405180830381865afa15801561099b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bf919061475d565b9450600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5291906147c8565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401610aae92919061478a565b602060405180830381865afa158015610acb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aef91906147c8565b9250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614159350600e549150600f549050909192939495565b600080339050610b47858285612a86565b610b52858585612aea565b60019150509392505050565b6000806000610b6b611db6565b915091506000821480610b7e5750600081145b15610b8e57600092505050610be1565b60006103e585610b9e9190614824565b905060008282610bae9190614824565b90506000826103e886610bc19190614824565b610bcb9190614866565b90508082610bd991906148c9565b955050505050505b919050565b600d8181548110610bf657600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610c36612dd1565b6000600e541180610c4957506000600f54115b610c88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7f90614946565b60405180910390fd5b6000600d8054905011610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc7906149b2565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610d1857600080fd5b505af1925050508015610d29575060015b610d6f577f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd600e54600f54604051610d62929190614643565b60405180910390a1610d70565b5b565b610d7a612dd1565b60003411610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db490614a44565b60405180910390fd5b60008111610e00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df790614ad6565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e3a919061446a565b602060405180830381865afa158015610e57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7b919061475d565b1015610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb390614b68565b60405180910390fd5b610ee930600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836128f2565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71934308460008033426040518863ffffffff1660e01b8152600401610f5096959493929190614bc3565b60606040518083038185885af193505050508015610f8c57506040513d601f19601f82011682018060405250810190610f899190614c24565b60015b610ff957610fbe30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660006128f2565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff090614cc3565b60405180910390fd5b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b813460405161102d929190614643565b60405180910390a16000479050600081111561108b573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611089573d6000803e3d6000fd5b505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110e3612dd1565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611151576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114890614d2f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611175611cfa565b836040518363ffffffff1660e01b8152600401611193929190614d4f565b6020604051808303816000875af11580156111b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d69190614da4565b505050565b6000600f54905090565b6060600d80548060200260200160405190810160405280929190818152602001828054801561126957602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831161121f575b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600d80549050905090565b600260055403611333576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132a90614e1d565b60405180910390fd5b6002600581905550601060019054906101000a900460ff161561138b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138290614e89565b60405180910390fd5b6001601060016101000a81548160ff0219169083151502179055506000600e5490506000600f5490506000821480156113c45750600081145b156113eb576000601060016101000a81548160ff0219169083151502179055505050611659565b7f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd828260405161141c929190614643565b60405180910390a16000600e819055506000600f8190555061148130600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6128f2565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611520929190614d4f565b6020604051808303816000875af115801561153f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115639190614da4565b50600081836115729190614866565b9050600061157f82612e48565b9050600081036115ad576000601060016101000a81548160ff02191690831515021790555050505050611659565b60008285836115bc9190614824565b6115c691906148c9565b9050600081836115d69190614ea9565b905060008211156115ec576115eb8683613277565b5b600081111561163757600060646019836116069190614824565b61161091906148c9565b9050600081836116209190614ea9565b905061162b8261357d565b61163481613714565b50505b6000601060016101000a81548160ff0219169083151502179055505050505050505b6001600581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611691612dd1565b601060009054906101000a900460ff16156116e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d890614f29565b60405180910390fd5b6001601060006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040161177b92919061478a565b602060405180830381865afa158015611798573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117bc91906147c8565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361195557600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016118d192919061478a565b6020604051808303816000875af11580156118f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061191491906147c8565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036119e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dd90614f95565b60405180910390fd5b611a3330600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6128f2565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611ad2929190614d4f565b6020604051808303816000875af1158015611af1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b159190614da4565b611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b90615001565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611bf3929190614d4f565b6020604051808303816000875af1158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c369190614da4565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611cb4929190614d4f565b6020604051808303816000875af1158015611cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf79190614da4565b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611d3390614717565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5f90614717565b8015611dac5780601f10611d8157610100808354040283529160200191611dac565b820191906000526020600020905b815481529060010190602001808311611d8f57829003601f168201915b5050505050905090565b600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4d91906150a3565b50915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee591906147c8565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611f4857826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff1694509450505050611f72565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16945094505050505b9091565b611f7e612dd1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe490615142565b60405180910390fd5b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb4818360405161208692919061478a565b60405180910390a15050565b6000803390506120a3818585612aea565b600191505092915050565b6120b6612dd1565b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040161211592919061478a565b602060405180830381865afa158015612132573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612156919061475d565b905069d3c21bcecceda10000008110156121a2576121a130600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda10000006128f2565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121ff919061446a565b602060405180830381865afa15801561221c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612240919061475d565b905060008111156123fd576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016122cc92919061478a565b602060405180830381865afa1580156122e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230d919061475d565b9050818110156123fb57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016123b6929190614d4f565b6020604051808303816000875af11580156123d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f99190614da4565b505b505b5050565b612409612dd1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246f906151ae565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61256b612dd1565b6125b830600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6128f2565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612657929190614d4f565b6020604051808303816000875af1158015612676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269a9190614da4565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161273a929190614d4f565b6020604051808303816000875af192505050801561277657506040513d601f19601f820116820180604052508101906127739190614da4565b60015b1561277d57505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016127fa929190614d4f565b6020604051808303816000875af192505050801561283657506040513d601f19601f820116820180604052508101906128339190614da4565b60015b1561283d57505b565b612847612dd1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ad9061521a565b60405180910390fd5b6128bf81613a6b565b50565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b505050565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561295c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61299b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299290615286565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a799190614250565b60405180910390a3505050565b6000612a9284846124dc565b905081811015612ad7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ace906152f2565b60405180910390fd5b612ae484848484036128f2565b50505050565b601060019054906101000a900460ff16158015612b3a5750612b0a611cfa565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612b795750612b49611cfa565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bb157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b8015612c0a5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612d865760006064600583612c209190614824565b612c2a91906148c9565b90506000811115612d845760006064601983612c469190614824565b612c5091906148c9565b905060006064601984612c639190614824565b612c6d91906148c9565b905060008385612c7d9190614ea9565b9050612c8a873086613b31565b612c95878783613b31565b82600e6000828254612ca79190614866565b9250508190555081600f6000828254612cc09190614866565b9250508190555068056bc75e2d63100000600f54600e54612ce19190614866565b10612d41573073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d2e57600080fd5b505af1925050508015612d3f575060015b505b612d5e87678ac7230489e80000612d578a611299565b1015613d72565b612d7b86678ac7230489e80000612d7489611299565b1015613d72565b50505050612dcc565b505b612d91838383613b31565b612dae83678ac7230489e80000612da786611299565b1015613d72565b612dcb82678ac7230489e80000612dc485611299565b1015613d72565b5b505050565b3373ffffffffffffffffffffffffffffffffffffffff16612df0611cfa565b73ffffffffffffffffffffffffffffffffffffffff1614612e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3d9061535e565b60405180910390fd5b565b6000808203612e5a5760009050613272565b612e8730600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128f2565b6000600267ffffffffffffffff811115612ea457612ea361537e565b5b604051908082528060200260200182016040528015612ed25781602001602082028036833780820191505090505b5090503081600081518110612eea57612ee96153ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612f5b57612f5a6153ad565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612ff2919061446a565b602060405180830381865afa15801561300f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613033919061475d565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795856000853061012c426130869190614866565b6040518663ffffffff1660e01b81526004016130a69594939291906153dc565b600060405180830381600087803b1580156130c057600080fd5b505af19250505080156130d1575060015b613181576130dd615443565b806308c379a00361313f57506130f1615496565b806130fc5750613141565b7f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec07238160405161312b9190614215565b60405180910390a160009350505050613272565b505b7f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405161316e90615572565b60405180910390a1600092505050613272565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016131de919061446a565b602060405180830381865afa1580156131fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061321f919061475d565b90506000828261322f9190614ea9565b90507fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc018682604051613262929190614643565b60405180910390a1809450505050505b919050565b60008214806132865750600081145b61357957600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401613309929190614d4f565b6020604051808303816000875af1158015613328573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061334c9190614da4565b5061337a30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846128f2565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856064601e60646133ee9190614ea9565b896133f99190614824565b61340391906148c9565b6064601e60646134139190614ea9565b8961341e9190614824565b61342891906148c9565b3061012c426134379190614866565b6040518963ffffffff1660e01b815260040161345a989796959493929190615592565b6060604051808303816000875af192505050801561349657506040513d601f19601f820116820180604052508101906134939190614c24565b60015b61353b576134a2615443565b806308c379a0036134fe57506134b6615496565b806134c15750613500565b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad816040516134f09190614215565b60405180910390a150613536565b505b7fa31e27a09b547b7d81f05436d3ed82a86121c091c82f730e0ab84b988ae730ad60405161352d90615572565b60405180910390a15b613578565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b828260405161356f929190614643565b60405180910390a15b5b5050565b60008114806135da5750600073ffffffffffffffffffffffffffffffffffffffff16600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b61371157600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b815260040161365d929190614d4f565b6020604051808303816000875af192505050801561369957506040513d601f19601f820116820180604052508101906136969190614da4565b60015b6136d7577fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b116146040516136ca9061565c565b60405180910390a1613710565b507f81f40cfa7691027044b117aa50764b33eaa2223ca9f761d5ff1c316a33d65ad2816040516137079190614250565b60405180910390a15b5b50565b600081148061372857506000600d80549050145b613a68576000600d805490508261373f91906148c9565b905060005b600d80549050811015613a6557600073ffffffffffffffffffffffffffffffffffffffff16600d828154811061377d5761377c6153ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415801561383657503073ffffffffffffffffffffffffffffffffffffffff16600d82815481106137f2576137f16153ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b80156138ce5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600d828154811061388a576138896153ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b15613a5257600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600d8381548110613925576139246153ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040161396e929190614d4f565b6020604051808303816000875af19250505080156139aa57506040513d601f19601f820116820180604052508101906139a79190614da4565b60015b613a4f576139b6615443565b806308c379a003613a1257506139ca615496565b806139d55750613a14565b7fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b1161481604051613a049190614215565b60405180910390a150613a4a565b505b7fa38bdb001325b55fb77601b29dc4c8f483a0d03519ba5bea9ca2ee06e8b11614604051613a4190615572565b60405180910390a15b613a51565b505b5b8080613a5d9061567c565b915050613744565b50505b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613b9b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd190615710565b60405180910390fd5b613be5838383614165565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613c6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c629061577c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d599190614250565b60405180910390a3613d6c848484614175565b50505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015613dfc57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561416157808015613e585750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613f1d576001600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600d829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614160565b80158015613f745750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561415f576000600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060005b600d8054905081101561415d578273ffffffffffffffffffffffffffffffffffffffff16600d828154811061400c5761400b6153ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361414a57600d6001600d805490506140669190614ea9565b81548110614077576140766153ad565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600d82815481106140b6576140b56153ad565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d8054806141105761410f61579c565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561415d565b80806141559061567c565b915050613fd4565b505b5b5b5050565b6141708383836128e8565b505050565b6141808383836128ed565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156141bf5780820151818401526020810190506141a4565b60008484015250505050565b6000601f19601f8301169050919050565b60006141e782614185565b6141f18185614190565b93506142018185602086016141a1565b61420a816141cb565b840191505092915050565b6000602082019050818103600083015261422f81846141dc565b905092915050565b6000819050919050565b61424a81614237565b82525050565b60006020820190506142656000830184614241565b92915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006142a58261427a565b9050919050565b6142b58161429a565b81146142c057600080fd5b50565b6000813590506142d2816142ac565b92915050565b6142e181614237565b81146142ec57600080fd5b50565b6000813590506142fe816142d8565b92915050565b6000806040838503121561431b5761431a614275565b5b6000614329858286016142c3565b925050602061433a858286016142ef565b9150509250929050565b60008115159050919050565b61435981614344565b82525050565b60006020820190506143746000830184614350565b92915050565b6143838161429a565b82525050565b600060c08201905061439e6000830189614241565b6143ab6020830188614241565b6143b86040830187614350565b6143c5606083018661437a565b6143d26080830185614241565b6143df60a0830184614241565b979650505050505050565b60008060006060848603121561440357614402614275565b5b6000614411868287016142c3565b9350506020614422868287016142c3565b9250506040614433868287016142ef565b9150509250925092565b60006020828403121561445357614452614275565b5b6000614461848285016142ef565b91505092915050565b600060208201905061447f600083018461437a565b92915050565b600060ff82169050919050565b61449b81614485565b82525050565b60006020820190506144b66000830184614492565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6144f18161429a565b82525050565b600061450383836144e8565b60208301905092915050565b6000602082019050919050565b6000614527826144bc565b61453181856144c7565b935061453c836144d8565b8060005b8381101561456d57815161455488826144f7565b975061455f8361450f565b925050600181019050614540565b5085935050505092915050565b60006020820190508181036000830152614594818461451c565b905092915050565b6000819050919050565b60006145c16145bc6145b78461427a565b61459c565b61427a565b9050919050565b60006145d3826145a6565b9050919050565b60006145e5826145c8565b9050919050565b6145f5816145da565b82525050565b600060208201905061461060008301846145ec565b92915050565b60006020828403121561462c5761462b614275565b5b600061463a848285016142c3565b91505092915050565b60006040820190506146586000830185614241565b6146656020830184614241565b9392505050565b6000806040838503121561468357614682614275565b5b6000614691858286016142c3565b92505060206146a2858286016142c3565b9150509250929050565b60006146b7826145c8565b9050919050565b6146c7816146ac565b82525050565b60006020820190506146e260008301846146be565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061472f57607f821691505b602082108103614742576147416146e8565b5b50919050565b600081519050614757816142d8565b92915050565b60006020828403121561477357614772614275565b5b600061478184828501614748565b91505092915050565b600060408201905061479f600083018561437a565b6147ac602083018461437a565b9392505050565b6000815190506147c2816142ac565b92915050565b6000602082840312156147de576147dd614275565b5b60006147ec848285016147b3565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061482f82614237565b915061483a83614237565b925082820261484881614237565b9150828204841483151761485f5761485e6147f5565b5b5092915050565b600061487182614237565b915061487c83614237565b9250828201905080821115614894576148936147f5565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006148d482614237565b91506148df83614237565b9250826148ef576148ee61489a565b5b828204905092915050565b7f4e6f2070656e64696e6720746f6b656e73000000000000000000000000000000600082015250565b6000614930601183614190565b915061493b826148fa565b602082019050919050565b6000602082019050818103600083015261495f81614923565b9050919050565b7f4e6f20686f6c6465727300000000000000000000000000000000000000000000600082015250565b600061499c600a83614190565b91506149a782614966565b602082019050919050565b600060208201905081810360008301526149cb8161498f565b9050919050565b7f4d7573742070726f766964652045544820666f7220696e697469616c206c697160008201527f7569646974790000000000000000000000000000000000000000000000000000602082015250565b6000614a2e602683614190565b9150614a39826149d2565b604082019050919050565b60006020820190508181036000830152614a5d81614a21565b9050919050565b7f4d7573742070726f7669646520746f6b656e20616d6f756e7420666f7220696e60008201527f697469616c206c69717569646974790000000000000000000000000000000000602082015250565b6000614ac0602f83614190565b9150614acb82614a64565b604082019050919050565b60006020820190508181036000830152614aef81614ab3565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000614b52602683614190565b9150614b5d82614af6565b604082019050919050565b60006020820190508181036000830152614b8181614b45565b9050919050565b6000819050919050565b6000614bad614ba8614ba384614b88565b61459c565b614237565b9050919050565b614bbd81614b92565b82525050565b600060c082019050614bd8600083018961437a565b614be56020830188614241565b614bf26040830187614bb4565b614bff6060830186614bb4565b614c0c608083018561437a565b614c1960a0830184614241565b979650505050505050565b600080600060608486031215614c3d57614c3c614275565b5b6000614c4b86828701614748565b9350506020614c5c86828701614748565b9250506040614c6d86828701614748565b9150509250925092565b7f4661696c656420746f20616464206c6971756964697479000000000000000000600082015250565b6000614cad601783614190565b9150614cb882614c77565b602082019050919050565b60006020820190508181036000830152614cdc81614ca0565b9050919050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e730000000000600082015250565b6000614d19601b83614190565b9150614d2482614ce3565b602082019050919050565b60006020820190508181036000830152614d4881614d0c565b9050919050565b6000604082019050614d64600083018561437a565b614d716020830184614241565b9392505050565b614d8181614344565b8114614d8c57600080fd5b50565b600081519050614d9e81614d78565b92915050565b600060208284031215614dba57614db9614275565b5b6000614dc884828501614d8f565b91505092915050565b7f5231000000000000000000000000000000000000000000000000000000000000600082015250565b6000614e07600283614190565b9150614e1282614dd1565b602082019050919050565b60006020820190508181036000830152614e3681614dfa565b9050919050565b7f416c72656164792070726f63657373696e670000000000000000000000000000600082015250565b6000614e73601283614190565b9150614e7e82614e3d565b602082019050919050565b60006020820190508181036000830152614ea281614e66565b9050919050565b6000614eb482614237565b9150614ebf83614237565b9250828203905081811115614ed757614ed66147f5565b5b92915050565b7f4632000000000000000000000000000000000000000000000000000000000000600082015250565b6000614f13600283614190565b9150614f1e82614edd565b602082019050919050565b60006020820190508181036000830152614f4281614f06565b9050919050565b7f4633000000000000000000000000000000000000000000000000000000000000600082015250565b6000614f7f600283614190565b9150614f8a82614f49565b602082019050919050565b60006020820190508181036000830152614fae81614f72565b9050919050565b7f4634000000000000000000000000000000000000000000000000000000000000600082015250565b6000614feb600283614190565b9150614ff682614fb5565b602082019050919050565b6000602082019050818103600083015261501a81614fde565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b61504481615021565b811461504f57600080fd5b50565b6000815190506150618161503b565b92915050565b600063ffffffff82169050919050565b61508081615067565b811461508b57600080fd5b50565b60008151905061509d81615077565b92915050565b6000806000606084860312156150bc576150bb614275565b5b60006150ca86828701615052565b93505060206150db86828701615052565b92505060406150ec8682870161508e565b9150509250925092565b7f496e76616c696420747265617375727920616464726573730000000000000000600082015250565b600061512c601883614190565b9150615137826150f6565b602082019050919050565b6000602082019050818103600083015261515b8161511f565b9050919050565b7f496e76616c696420726f75746572206164647265737300000000000000000000600082015250565b6000615198601683614190565b91506151a382615162565b602082019050919050565b600060208201905081810360008301526151c78161518b565b9050919050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b6000615204600283614190565b915061520f826151ce565b602082019050919050565b60006020820190508181036000830152615233816151f7565b9050919050565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b6000615270600283614190565b915061527b8261523a565b602082019050919050565b6000602082019050818103600083015261529f81615263565b9050919050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b60006152dc600283614190565b91506152e7826152a6565b602082019050919050565b6000602082019050818103600083015261530b816152cf565b9050919050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b6000615348600283614190565b915061535382615312565b602082019050919050565b600060208201905081810360008301526153778161533b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a0820190506153f16000830188614241565b6153fe6020830187614bb4565b8181036040830152615410818661451c565b905061541f606083018561437a565b61542c6080830184614241565b9695505050505050565b60008160e01c9050919050565b600060033d11156154625760046000803e61545f600051615436565b90505b90565b61546e826141cb565b810181811067ffffffffffffffff8211171561548d5761548c61537e565b5b80604052505050565b600060443d10615523576154a861426b565b60043d036004823e80513d602482011167ffffffffffffffff821117156154d0575050615523565b808201805167ffffffffffffffff8111156154ee5750505050615523565b80602083010160043d03850181111561550b575050505050615523565b61551a82602001850186615465565b82955050505050505b90565b7f4861746100000000000000000000000000000000000000000000000000000000600082015250565b600061555c600483614190565b915061556782615526565b602082019050919050565b6000602082019050818103600083015261558b8161554f565b9050919050565b6000610100820190506155a8600083018b61437a565b6155b5602083018a61437a565b6155c26040830189614241565b6155cf6060830188614241565b6155dc6080830187614241565b6155e960a0830186614241565b6155f660c083018561437a565b61560360e0830184614241565b9998505050505050505050565b7f5472656173757279207472616e73666572206661696c65640000000000000000600082015250565b6000615646601883614190565b915061565182615610565b602082019050919050565b6000602082019050818103600083015261567581615639565b9050919050565b600061568782614237565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036156b9576156b86147f5565b5b600182019050919050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b60006156fa600283614190565b9150615705826156c4565b602082019050919050565b60006020820190508181036000830152615729816156ed565b9050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b6000615766600283614190565b915061577182615730565b602082019050919050565b6000602082019050818103600083015261579581615759565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220a244743f51e013b4bf7e7c6a9bd481bef2c79268878ba72c69131c685f5172ca64736f6c63430008110033

Deployed Bytecode Sourcemap

8333:18017:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2873:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22412:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3740:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3167:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23842:654;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;3938:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25032:472;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9576:24;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3075:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22711:401;;;;;;;;;;;;;:::i;:::-;;20877:1074;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9400:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9467:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22153:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22538:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20703:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9302:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3274:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20593:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15425:1857;;;;;;;;;;;;;:::i;:::-;;9432:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11276:836;;;;;;;;;;;;;:::i;:::-;;1861:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2972:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24541:427;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;25997:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3400:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23120:691;;;;;;;;;;;;;:::i;:::-;;21959:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9529:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3590:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25542:406;;;;;;;;;;;;;:::i;:::-;;2064:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9350:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2873:91;2918:13;2951:5;2944:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2873:91;:::o;22412:118::-;22472:7;22499:23;;22492:30;;22412:118;:::o;3740:190::-;3814:4;3831:13;3847:10;3831:26;;3868:32;3877:5;3884:7;3893:6;3868:8;:32::i;:::-;3918:4;3911:11;;;3740:190;;;;:::o;3167:99::-;3219:7;3246:12;;3239:19;;3167:99;:::o;23842:654::-;23898:23;23932;23966:15;23992:12;24015:18;24044:22;24118:4;24103:31;;;24143:4;24103:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24085:64;;24193:4;24178:31;;;24218:4;24233:16;;;;;;;;;;;24178:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24160:91;;24288:16;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24269:54;;;24332:4;24339:10;;;;;;;;;;;24269:81;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24262:88;;24390:1;24374:18;;:4;:18;;;;24361:31;;24416:23;;24403:36;;24467:21;;24450:38;;23842:654;;;;;;:::o;3938:250::-;4026:4;4043:15;4061:10;4043:28;;4082:38;4098:4;4104:7;4113:6;4082:15;:38::i;:::-;4131:27;4141:4;4147:2;4151:6;4131:9;:27::i;:::-;4176:4;4169:11;;;3938:250;;;;;:::o;25032:472::-;25097:7;25118:19;25139;25162:17;:15;:17::i;:::-;25117:62;;;;25209:1;25194:11;:16;:36;;;;25229:1;25214:11;:16;25194:36;25190:50;;;25239:1;25232:8;;;;;;25190:50;25261:23;25298:3;25287:8;:14;;;;:::i;:::-;25261:40;;25335:17;25373:11;25355:15;:29;;;;:::i;:::-;25335:49;;25395:19;25440:15;25432:4;25418:11;:18;;;;:::i;:::-;25417:38;;;;:::i;:::-;25395:60;;25485:11;25473:9;:23;;;;:::i;:::-;25466:30;;;;;;;25032:472;;;;:::o;9576:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3075:84::-;3124:5;3149:2;3142:9;;3075:84;:::o;22711:401::-;1820:13;:11;:13::i;:::-;22804:1:::1;22778:23;;:27;:56;;;;22833:1;22809:21;;:25;22778:56;22770:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;22892:1;22875:7;:14;;;;:18;22867:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;22923:4;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;22919:186;;23031:62;23046:23;;23071:21;;23031:62;;;;;;;:::i;:::-;;;;;;;;22919:186;;;;22711:401::o:0;20877:1074::-;1820:13;:11;:13::i;:::-;20985:1:::1;20973:9;:13;20965:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21062:1;21048:11;:15;21040:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;21208:11;21173:4;21158:31;;;21198:4;21158:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;21136:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;21298:63;21315:4;21330:16;;;;;;;;;;;21349:11;21298:8;:63::i;:::-;21378:16;;;;;;;;;;;:32;;;21418:9;21451:4;21471:11;21497:1;21513::::0;21529:10:::1;21554:15;21378:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;21374:412;;21673:53;21690:4;21705:16;;;;;;;;;;;21724:1;21673:8;:53::i;:::-;21741:33;;;;;;;;;;:::i;:::-;;;;;;;;21374:412;;;;21601:38;21616:11;21629:9;21601:38;;;;;;;:::i;:::-;;;;;;;;21798:20;21821:21;21798:44;;21872:1;21857:12;:16;21853:91;;;21898:10;21890:28;;:42;21919:12;21890:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21853:91;20954:997;20877:1074:::0;:::o;9400:25::-;;;;;;;;;;;;;:::o;9467:29::-;;;;;;;;;;;;;:::o;22153:208::-;1820:13;:11;:13::i;:::-;22264:4:::1;22246:23;;:6;:23;;::::0;22238:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22319:6;22312:23;;;22336:7;:5;:7::i;:::-;22345;22312:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22153:208:::0;;:::o;22538:114::-;22596:7;22623:21;;22616:28;;22538:114;:::o;20703:96::-;20748:16;20784:7;20777:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20703:96;:::o;9302:41::-;;;;;;;;;;;;;:::o;3274:118::-;3339:7;3366:9;:18;3376:7;3366:18;;;;;;;;;;;;;;;;3359:25;;3274:118;;;:::o;20593:98::-;20642:7;20669;:14;;;;20662:21;;20593:98;:::o;15425:1857::-;1114:1;1260:7;;:19;1252:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;1114:1;1297:7;:18;;;;15505:7:::1;;;;;;;;;;;15504:8;15496:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;15556:4;15546:7;;:14;;;;;;;;;;;;;;;;;;15581:26;15610:23;;15581:52;;15644:24;15671:21;;15644:48;;15739:1;15717:18;:23;:48;;;;;15764:1;15744:16;:21;15717:48;15713:117;;;15792:5;15782:7;;:15;;;;;;;;;;;;;;;;;;15812:7;;;;15713:117;15855:52;15870:18;15890:16;15855:52;;;;;;;:::i;:::-;;;;;;;;15988:1;15962:23;:27;;;;16024:1;16000:21;:25;;;;16076:69;16093:4;16108:16;;;;;;;;;;;16127:17;16076:8;:69::i;:::-;16163:10;;;;;;;;;;;16156:26;;;16191:16;;;;;;;;;;;16210:17;16156:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16274:25;16323:16;16302:18;:37;;;;:::i;:::-;16274:65;;16350:21;16374:31;16387:17;16374:12;:31::i;:::-;16350:55;;16447:1;16430:13;:18:::0;16426:87:::1;;16475:5;16465:7;;:15;;;;;;;;;;;;;;;;;;16495:7;;;;;;16426:87;16563:25;16628:17;16607:18;16591:13;:34;;;;:::i;:::-;:54;;;;:::i;:::-;16563:82;;16656:23;16698:17;16682:13;:33;;;;:::i;:::-;16656:59;;16790:1;16770:17;:21;16766:110;;;16808:56;16826:18;16846:17;16808;:56::i;:::-;16766:110;16946:1;16928:15;:19;16924:315;;;16964:24;17031:3;9134:2;16991:15;:37;;;;:::i;:::-;:43;;;;:::i;:::-;16964:70;;17049:23;17093:16;17075:15;:34;;;;:::i;:::-;17049:60;;17138:42;17163:16;17138:24;:42::i;:::-;17195:32;17211:15;17195;:32::i;:::-;16949:290;;16924:315;17269:5;17259:7;;:15;;;;;;;;;;;;;;;;;;15485:1797;;;;;;1326:1;1070::::0;1338:7;:22;;;;15425:1857::o;9432:28::-;;;;;;;;;;;;;:::o;11276:836::-;1820:13;:11;:13::i;:::-;11337:12:::1;;;;;;;;;;;11336:13;11328:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;11382:4;11367:12;;:19;;;;;;;;;;;;;;;;;;11458:17;;;;;;;;;;;:25;;;11492:4;11499:10;;;;;;;;;;;11458:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11442:13;;:68;;;;;;;;;;;;;;;;;;11605:1;11580:27;;:13;;;;;;;;;;;:27;;::::0;11576:131:::1;;11640:17;;;;;;;;;;;:28;;;11677:4;11684:10;;;;;;;;;;;11640:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11624:13;;:71;;;;;;;;;;;;;;;;;;11576:131;11760:1;11735:27;;:13;;;;;;;;;;;:27;;::::0;11727:42:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11782:69;11799:4;11814:16;;;;;;;;;;;11833:17;11782:8;:69::i;:::-;11887:10;;;;;;;;;;;11880:26;;;11915:16;;;;;;;;;;;11934:17;11880:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11872:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;11977:10;;;;;;;;;;;11970:26;;;11997:13;;;;;;;;;;;12012:17;11970:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12056:4;12041:29;;;12071:13;;;;;;;;;;;12086:17;12041:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11276:836::o:0;1861:87::-;1907:7;1934:6;;;;;;;;;;;1927:13;;1861:87;:::o;2972:95::-;3019:13;3052:7;3045:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2972:95;:::o;24541:427::-;24589:19;24610;24643:16;24661;24698:13;;;;;;;;;;;24682:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24642:84;;;;;24737:14;24770:13;;;;;;;;;;;24754:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24737:56;;24826:4;24808:23;;:6;:23;;;24804:101;;24864:8;24856:17;;24883:8;24875:17;;24848:45;;;;;;;;;24804:101;24931:8;24923:17;;24950:8;24942:17;;24915:45;;;;;;;24541:427;;;:::o;25997:313::-;1820:13;:11;:13::i;:::-;26114:1:::1;26087:29;;:15;:29;;::::0;26079:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26156:19;26178:14;;;;;;;;;;;26156:36;;26220:15;26203:14;;:32;;;;;;;;;;;;;;;;;;26251:51;26273:11;26286:15;26251:51;;;;;;;:::i;:::-;;;;;;;;26068:242;25997:313:::0;:::o;3400:182::-;3470:4;3487:13;3503:10;3487:26;;3524:28;3534:5;3541:2;3545:6;3524:9;:28::i;:::-;3570:4;3563:11;;;3400:182;;;;:::o;23120:691::-;1820:13;:11;:13::i;:::-;23187:21:::1;23226:4;23211:31;;;23251:4;23266:16;;;;;;;;;;;23211:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23187:97;;8449:18;23299:13;:28;23295:125;;;23344:64;23361:4;23376:16;;;;;;;;;;;8449:18;23344:8;:64::i;:::-;23295:125;23432:19;23461:10;;;;;;;;;;;23454:28;;;23491:4;23454:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23432:65;;23526:1;23512:11;:15;23508:296;;;23544:21;23575:10;;;;;;;;;;;23568:28;;;23605:4;23620:16;;;;;;;;;;;23568:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23544:94;;23673:11;23657:13;:27;23653:140;;;23712:10;;;;;;;;;;;23705:26;;;23740:16;;;;;;;;;;;23759:17;23705:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23653:140;23529:275;23508:296;23176:635;;23120:691::o:0;21959:186::-;1820:13;:11;:13::i;:::-;22052:1:::1;22033:21;;:7;:21;;::::0;22025:56:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22129:7;22092:16;;:45;;;;;;;;;;;;;;;;;;21959:186:::0;:::o;9529:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;3590:142::-;3670:7;3697:11;:18;3709:5;3697:18;;;;;;;;;;;;;;;:27;3716:7;3697:27;;;;;;;;;;;;;;;;3690:34;;3590:142;;;;:::o;25542:406::-;1820:13;:11;:13::i;:::-;25603:69:::1;25620:4;25635:16;;;;;;;;;;;25654:17;25603:8;:69::i;:::-;25690:10;;;;;;;;;;;25683:26;;;25718:16;;;;;;;;;;;25737:17;25683:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25787:10;;;;;;;;;;;25780:26;;;25807:13;;;;;;;;;;;25822:17;25780:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25776:76:::0;::::1;;;;25881:4;25866:29;;;25896:13;;;;;;;;;;;25911:17;25866:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25862:79:::0;::::1;;;;25542:406::o:0;2064:165::-;1820:13;:11;:13::i;:::-;2173:1:::1;2153:22;;:8;:22;;::::0;2145:37:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2193:28;2212:8;2193:18;:28::i;:::-;2064:165:::0;:::o;9350:43::-;;;;;;;;;;;;;:::o;5702:91::-;;;;:::o;5801:90::-;;;;:::o;5119:256::-;5238:1;5221:19;;:5;:19;;;;:44;;;;;5263:1;5244:21;;:7;:21;;;;5221:44;5213:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;5313:6;5283:11;:18;5295:5;5283:18;;;;;;;;;;;;;;;:27;5302:7;5283:27;;;;;;;;;;;;;;;:36;;;;5351:7;5335:32;;5344:5;5335:32;;;5360:6;5335:32;;;;;;:::i;:::-;;;;;;;;5119:256;;;:::o;5383:311::-;5484:24;5511:25;5521:5;5528:7;5511:9;:25::i;:::-;5484:52;;5575:6;5555:16;:26;;5547:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;5624:51;5633:5;5640:7;5668:6;5649:16;:25;5624:8;:51::i;:::-;5473:221;5383:311;;;:::o;12524:2106::-;12712:7;;;;;;;;;;;12711:8;:41;;;;;12745:7;:5;:7::i;:::-;12737:15;;:4;:15;;;;12711:41;:72;;;;;12776:7;:5;:7::i;:::-;12770:13;;:2;:13;;;;12711:72;:111;;;;;12817:4;12801:21;;:4;:21;;;;12711:111;:148;;;;;12846:13;;;;;;;;;;;12840:19;;:2;:19;;;12711:148;12693:1668;;;12916:17;12956:3;8510:1;12936:6;:17;;;;:::i;:::-;:23;;;;:::i;:::-;12916:43;;13004:1;12992:9;:13;12988:1362;;;13086:23;13140:3;8565:2;13112:9;:25;;;;:::i;:::-;:31;;;;:::i;:::-;13086:57;;13162:21;13212:3;8621:2;13186:9;:23;;;;:::i;:::-;:29;;;;:::i;:::-;13162:53;;13310:22;13344:9;13335:6;:18;;;;:::i;:::-;13310:43;;13433:47;13449:4;13463;13470:9;13433:15;:47::i;:::-;13568:41;13584:4;13590:2;13594:14;13568:15;:41::i;:::-;13724:15;13697:23;;:42;;;;;;;:::i;:::-;;;;;;;;13783:13;13758:21;;:38;;;;;;;:::i;:::-;;;;;;;;8790:12;13940:21;;13914:23;;:47;;;;:::i;:::-;:73;13910:170;;14016:4;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14012:49;13910:170;14162:57;14176:4;8683:11;14182:15;14192:4;14182:9;:15::i;:::-;:36;;14162:13;:57::i;:::-;14238:53;14252:2;8683:11;14256:13;14266:2;14256:9;:13::i;:::-;:34;;14238:13;:53::i;:::-;14328:7;;;;;;12988:1362;12871:1490;12693:1668;14409:33;14425:4;14431:2;14435:6;14409:15;:33::i;:::-;14501:57;14515:4;8683:11;14521:15;14531:4;14521:9;:15::i;:::-;:36;;14501:13;:57::i;:::-;14569:53;14583:2;8683:11;14587:13;14597:2;14587:9;:13::i;:::-;:34;;14569:13;:53::i;:::-;12524:2106;;;;:::o;1956:100::-;2031:10;2020:21;;:7;:5;:7::i;:::-;:21;;;2012:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;1956:100::o;17290:1094::-;17351:7;17391:1;17375:12;:17;17371:31;;17401:1;17394:8;;;;17371:31;17415:64;17432:4;17447:16;;;;;;;;;;;17466:12;17415:8;:64::i;:::-;17529:21;17567:1;17553:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17529:40;;17598:4;17580;17585:1;17580:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;17624:10;;;;;;;;;;;17614:4;17619:1;17614:7;;;;;;;;:::i;:::-;;;;;;;:20;;;;;;;;;;;17647:19;17676:10;;;;;;;;;;;17669:28;;;17706:4;17669:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17647:65;;17729:16;;;;;;;;;;;:70;;;17814:12;17841:1;17857:4;17884;17922:3;17904:15;:21;;;;:::i;:::-;17729:207;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17725:652;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;18244:18;18255:6;18244:18;;;;;;:::i;:::-;;;;;;;;18284:1;18277:8;;;;;;;17725:652;;;18324:18;;;;;;:::i;:::-;;;;;;;;18364:1;18357:8;;;;;;17725:652;17952:18;17980:10;;;;;;;;;;;17973:28;;;18010:4;17973:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17952:64;;18031:21;18068:11;18055:10;:24;;;;:::i;:::-;18031:48;;18099:43;18114:12;18128:13;18099:43;;;;;;;:::i;:::-;;;;;;;;18164:13;18157:20;;;;;;17290:1094;;;;:::o;18392:1052::-;18519:1;18497:18;:23;:49;;;;18545:1;18524:17;:22;18497:49;18563:7;18493:88;18643:10;;;;;;;;;;;18636:26;;;18671:16;;;;;;;;;;;18690:17;18636:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18761:70;18778:4;18793:16;;;;;;;;;;;18812:18;18761:8;:70::i;:::-;18848:16;;;;;;;;;;;:29;;;18900:4;18920:10;;;;;;;;;;;18945:18;18978:17;19054:3;9052:2;19032:3;:18;;;;:::i;:::-;19010;:41;;;;:::i;:::-;:47;;;;:::i;:::-;19115:3;9052:2;19093:3;:18;;;;:::i;:::-;19072:17;:40;;;;:::i;:::-;:46;;;;:::i;:::-;19141:4;19179:3;19161:15;:21;;;;:::i;:::-;18848:345;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;18844:593;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;19334:26;19353:6;19334:26;;;;;;:::i;:::-;;;;;;;;19280:92;18844:593;;;;;19399:26;;;;;;:::i;:::-;;;;;;;;18844:593;;;;;;;19214:53;19229:18;19249:17;19214:53;;;;;;;:::i;:::-;;;;;;;;18844:593;18392:1052;;;:::o;19452:364::-;19545:1;19530:11;:16;:48;;;;19576:1;19550:28;;:14;;;;;;;;;;;:28;;;19530:48;19580:7;19526:61;19618:10;;;;;;;;;;;19611:27;;;19639:14;;;;;;;;;;;19655:11;19611:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;19607:202;;19756:41;;;;;;:::i;:::-;;;;;;;;19607:202;;;;19688:29;19705:11;19688:29;;;;;;:::i;:::-;;;;;;;;19607:202;19452:364;;:::o;19824:738::-;19908:1;19893:11;:16;:39;;;;19931:1;19913:7;:14;;;;:19;19893:39;19949:7;19889:78;19979:22;20018:7;:14;;;;20004:11;:28;;;;:::i;:::-;19979:53;;20058:9;20053:502;20077:7;:14;;;;20073:1;:18;20053:502;;;20139:1;20117:24;;:7;20125:1;20117:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:24;;;;:55;;;;;20167:4;20145:27;;:7;20153:1;20145:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:27;;;;20117:55;:86;;;;;20190:13;;;;;;;;;;;20176:27;;:7;20184:1;20176:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:27;;;;20117:86;20113:431;;;20235:10;;;;;;;;;;;20228:27;;;20256:7;20264:1;20256:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20268:14;20228:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20224:305;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;20412:21;20426:6;20412:21;;;;;;:::i;:::-;;;;;;;;20350:103;20224:305;;;;;20488:21;;;;;;:::i;:::-;;;;;;;;20224:305;;;;;;20113:431;20093:3;;;;;:::i;:::-;;;;20053:502;;;;19878:684;19824:738;;:::o;2237:191::-;2311:16;2330:6;;;;;;;;;;;2311:25;;2356:8;2347:6;;:17;;;;;;;;;;;;;;;;;;2411:8;2380:40;;2401:8;2380:40;;;;;;;;;;;;2300:128;2237:191;:::o;4196:507::-;4309:1;4293:18;;:4;:18;;;;:38;;;;;4329:1;4315:16;;:2;:16;;;;4293:38;4285:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;4349:38;4370:4;4376:2;4380:6;4349:20;:38::i;:::-;4398:19;4420:9;:15;4430:4;4420:15;;;;;;;;;;;;;;;;4398:37;;4469:6;4454:11;:21;;4446:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;4550:6;4536:11;:20;4518:9;:15;4528:4;4518:15;;;;;;;;;;;;;;;:38;;;;4588:6;4571:9;:13;4581:2;4571:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;4636:2;4621:26;;4630:4;4621:26;;;4640:6;4621:26;;;;;;:::i;:::-;;;;;;;;4658:37;4678:4;4684:2;4688:6;4658:19;:37::i;:::-;4274:429;4196:507;;;:::o;14638:779::-;14733:13;;;;;;;;;;;14722:24;;:7;:24;;;;:52;;;;;14769:4;14750:24;;:7;:24;;;;14722:52;14718:692;;;14795:14;:36;;;;;14814:8;:17;14823:7;14814:17;;;;;;;;;;;;;;;;;;;;;;;;;14813:18;14795:36;14791:608;;;14872:4;14852:8;:17;14861:7;14852:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;14895:7;14908;14895:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14791:608;;;14943:14;14942:15;:36;;;;;14961:8;:17;14970:7;14961:17;;;;;;;;;;;;;;;;;;;;;;;;;14942:36;14938:461;;;15019:5;14999:8;:17;15008:7;14999:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;15112:9;15107:277;15131:7;:14;;;;15127:1;:18;15107:277;;;15193:7;15179:21;;:7;15187:1;15179:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:21;;;15175:190;;15242:7;15267:1;15250:7;:14;;;;:18;;;;:::i;:::-;15242:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15229:7;15237:1;15229:10;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;15296:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;15336:5;;15175:190;15147:3;;;;;:::i;:::-;;;;15107:277;;;;14938:461;14791:608;14718:692;14638:779;;:::o;12120:195::-;12263:44;12290:4;12296:2;12300:6;12263:26;:44::i;:::-;12120:195;;;:::o;12323:193::-;12465:43;12491:4;12497:2;12501:6;12465:25;:43::i;:::-;12323:193;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1349:77::-;1386:7;1415:5;1404:16;;1349:77;;;:::o;1432:118::-;1519:24;1537:5;1519:24;:::i;:::-;1514:3;1507:37;1432:118;;:::o;1556:222::-;1649:4;1687:2;1676:9;1672:18;1664:26;;1700:71;1768:1;1757:9;1753:17;1744:6;1700:71;:::i;:::-;1556:222;;;;:::o;1784:75::-;1817:6;1850:2;1844:9;1834:19;;1784:75;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:118::-;3885:24;3903:5;3885:24;:::i;:::-;3880:3;3873:37;3798:118;;:::o;3922:763::-;4149:4;4187:3;4176:9;4172:19;4164:27;;4201:71;4269:1;4258:9;4254:17;4245:6;4201:71;:::i;:::-;4282:72;4350:2;4339:9;4335:18;4326:6;4282:72;:::i;:::-;4364:66;4426:2;4415:9;4411:18;4402:6;4364:66;:::i;:::-;4440:72;4508:2;4497:9;4493:18;4484:6;4440:72;:::i;:::-;4522:73;4590:3;4579:9;4575:19;4566:6;4522:73;:::i;:::-;4605;4673:3;4662:9;4658:19;4649:6;4605:73;:::i;:::-;3922:763;;;;;;;;;:::o;4691:619::-;4768:6;4776;4784;4833:2;4821:9;4812:7;4808:23;4804:32;4801:119;;;4839:79;;:::i;:::-;4801:119;4959:1;4984:53;5029:7;5020:6;5009:9;5005:22;4984:53;:::i;:::-;4974:63;;4930:117;5086:2;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5057:118;5214:2;5240:53;5285:7;5276:6;5265:9;5261:22;5240:53;:::i;:::-;5230:63;;5185:118;4691:619;;;;;:::o;5316:329::-;5375:6;5424:2;5412:9;5403:7;5399:23;5395:32;5392:119;;;5430:79;;:::i;:::-;5392:119;5550:1;5575:53;5620:7;5611:6;5600:9;5596:22;5575:53;:::i;:::-;5565:63;;5521:117;5316:329;;;;:::o;5651:222::-;5744:4;5782:2;5771:9;5767:18;5759:26;;5795:71;5863:1;5852:9;5848:17;5839:6;5795:71;:::i;:::-;5651:222;;;;:::o;5879:86::-;5914:7;5954:4;5947:5;5943:16;5932:27;;5879:86;;;:::o;5971:112::-;6054:22;6070:5;6054:22;:::i;:::-;6049:3;6042:35;5971:112;;:::o;6089:214::-;6178:4;6216:2;6205:9;6201:18;6193:26;;6229:67;6293:1;6282:9;6278:17;6269:6;6229:67;:::i;:::-;6089:214;;;;:::o;6309:114::-;6376:6;6410:5;6404:12;6394:22;;6309:114;;;:::o;6429:184::-;6528:11;6562:6;6557:3;6550:19;6602:4;6597:3;6593:14;6578:29;;6429:184;;;;:::o;6619:132::-;6686:4;6709:3;6701:11;;6739:4;6734:3;6730:14;6722:22;;6619:132;;;:::o;6757:108::-;6834:24;6852:5;6834:24;:::i;:::-;6829:3;6822:37;6757:108;;:::o;6871:179::-;6940:10;6961:46;7003:3;6995:6;6961:46;:::i;:::-;7039:4;7034:3;7030:14;7016:28;;6871:179;;;;:::o;7056:113::-;7126:4;7158;7153:3;7149:14;7141:22;;7056:113;;;:::o;7205:732::-;7324:3;7353:54;7401:5;7353:54;:::i;:::-;7423:86;7502:6;7497:3;7423:86;:::i;:::-;7416:93;;7533:56;7583:5;7533:56;:::i;:::-;7612:7;7643:1;7628:284;7653:6;7650:1;7647:13;7628:284;;;7729:6;7723:13;7756:63;7815:3;7800:13;7756:63;:::i;:::-;7749:70;;7842:60;7895:6;7842:60;:::i;:::-;7832:70;;7688:224;7675:1;7672;7668:9;7663:14;;7628:284;;;7632:14;7928:3;7921:10;;7329:608;;;7205:732;;;;:::o;7943:373::-;8086:4;8124:2;8113:9;8109:18;8101:26;;8173:9;8167:4;8163:20;8159:1;8148:9;8144:17;8137:47;8201:108;8304:4;8295:6;8201:108;:::i;:::-;8193:116;;7943:373;;;;:::o;8322:60::-;8350:3;8371:5;8364:12;;8322:60;;;:::o;8388:142::-;8438:9;8471:53;8489:34;8498:24;8516:5;8498:24;:::i;:::-;8489:34;:::i;:::-;8471:53;:::i;:::-;8458:66;;8388:142;;;:::o;8536:126::-;8586:9;8619:37;8650:5;8619:37;:::i;:::-;8606:50;;8536:126;;;:::o;8668:151::-;8743:9;8776:37;8807:5;8776:37;:::i;:::-;8763:50;;8668:151;;;:::o;8825:181::-;8937:62;8993:5;8937:62;:::i;:::-;8932:3;8925:75;8825:181;;:::o;9012:272::-;9130:4;9168:2;9157:9;9153:18;9145:26;;9181:96;9274:1;9263:9;9259:17;9250:6;9181:96;:::i;:::-;9012:272;;;;:::o;9290:329::-;9349:6;9398:2;9386:9;9377:7;9373:23;9369:32;9366:119;;;9404:79;;:::i;:::-;9366:119;9524:1;9549:53;9594:7;9585:6;9574:9;9570:22;9549:53;:::i;:::-;9539:63;;9495:117;9290:329;;;;:::o;9625:332::-;9746:4;9784:2;9773:9;9769:18;9761:26;;9797:71;9865:1;9854:9;9850:17;9841:6;9797:71;:::i;:::-;9878:72;9946:2;9935:9;9931:18;9922:6;9878:72;:::i;:::-;9625:332;;;;;:::o;9963:474::-;10031:6;10039;10088:2;10076:9;10067:7;10063:23;10059:32;10056:119;;;10094:79;;:::i;:::-;10056:119;10214:1;10239:53;10284:7;10275:6;10264:9;10260:22;10239:53;:::i;:::-;10229:63;;10185:117;10341:2;10367:53;10412:7;10403:6;10392:9;10388:22;10367:53;:::i;:::-;10357:63;;10312:118;9963:474;;;;;:::o;10443:152::-;10519:9;10552:37;10583:5;10552:37;:::i;:::-;10539:50;;10443:152;;;:::o;10601:183::-;10714:63;10771:5;10714:63;:::i;:::-;10709:3;10702:76;10601:183;;:::o;10790:274::-;10909:4;10947:2;10936:9;10932:18;10924:26;;10960:97;11054:1;11043:9;11039:17;11030:6;10960:97;:::i;:::-;10790:274;;;;:::o;11070:180::-;11118:77;11115:1;11108:88;11215:4;11212:1;11205:15;11239:4;11236:1;11229:15;11256:320;11300:6;11337:1;11331:4;11327:12;11317:22;;11384:1;11378:4;11374:12;11405:18;11395:81;;11461:4;11453:6;11449:17;11439:27;;11395:81;11523:2;11515:6;11512:14;11492:18;11489:38;11486:84;;11542:18;;:::i;:::-;11486:84;11307:269;11256:320;;;:::o;11582:143::-;11639:5;11670:6;11664:13;11655:22;;11686:33;11713:5;11686:33;:::i;:::-;11582:143;;;;:::o;11731:351::-;11801:6;11850:2;11838:9;11829:7;11825:23;11821:32;11818:119;;;11856:79;;:::i;:::-;11818:119;11976:1;12001:64;12057:7;12048:6;12037:9;12033:22;12001:64;:::i;:::-;11991:74;;11947:128;11731:351;;;;:::o;12088:332::-;12209:4;12247:2;12236:9;12232:18;12224:26;;12260:71;12328:1;12317:9;12313:17;12304:6;12260:71;:::i;:::-;12341:72;12409:2;12398:9;12394:18;12385:6;12341:72;:::i;:::-;12088:332;;;;;:::o;12426:143::-;12483:5;12514:6;12508:13;12499:22;;12530:33;12557:5;12530:33;:::i;:::-;12426:143;;;;:::o;12575:351::-;12645:6;12694:2;12682:9;12673:7;12669:23;12665:32;12662:119;;;12700:79;;:::i;:::-;12662:119;12820:1;12845:64;12901:7;12892:6;12881:9;12877:22;12845:64;:::i;:::-;12835:74;;12791:128;12575:351;;;;:::o;12932:180::-;12980:77;12977:1;12970:88;13077:4;13074:1;13067:15;13101:4;13098:1;13091:15;13118:410;13158:7;13181:20;13199:1;13181:20;:::i;:::-;13176:25;;13215:20;13233:1;13215:20;:::i;:::-;13210:25;;13270:1;13267;13263:9;13292:30;13310:11;13292:30;:::i;:::-;13281:41;;13471:1;13462:7;13458:15;13455:1;13452:22;13432:1;13425:9;13405:83;13382:139;;13501:18;;:::i;:::-;13382:139;13166:362;13118:410;;;;:::o;13534:191::-;13574:3;13593:20;13611:1;13593:20;:::i;:::-;13588:25;;13627:20;13645:1;13627:20;:::i;:::-;13622:25;;13670:1;13667;13663:9;13656:16;;13691:3;13688:1;13685:10;13682:36;;;13698:18;;:::i;:::-;13682:36;13534:191;;;;:::o;13731:180::-;13779:77;13776:1;13769:88;13876:4;13873:1;13866:15;13900:4;13897:1;13890:15;13917:185;13957:1;13974:20;13992:1;13974:20;:::i;:::-;13969:25;;14008:20;14026:1;14008:20;:::i;:::-;14003:25;;14047:1;14037:35;;14052:18;;:::i;:::-;14037:35;14094:1;14091;14087:9;14082:14;;13917:185;;;;:::o;14108:167::-;14248:19;14244:1;14236:6;14232:14;14225:43;14108:167;:::o;14281:366::-;14423:3;14444:67;14508:2;14503:3;14444:67;:::i;:::-;14437:74;;14520:93;14609:3;14520:93;:::i;:::-;14638:2;14633:3;14629:12;14622:19;;14281:366;;;:::o;14653:419::-;14819:4;14857:2;14846:9;14842:18;14834:26;;14906:9;14900:4;14896:20;14892:1;14881:9;14877:17;14870:47;14934:131;15060:4;14934:131;:::i;:::-;14926:139;;14653:419;;;:::o;15078:160::-;15218:12;15214:1;15206:6;15202:14;15195:36;15078:160;:::o;15244:366::-;15386:3;15407:67;15471:2;15466:3;15407:67;:::i;:::-;15400:74;;15483:93;15572:3;15483:93;:::i;:::-;15601:2;15596:3;15592:12;15585:19;;15244:366;;;:::o;15616:419::-;15782:4;15820:2;15809:9;15805:18;15797:26;;15869:9;15863:4;15859:20;15855:1;15844:9;15840:17;15833:47;15897:131;16023:4;15897:131;:::i;:::-;15889:139;;15616:419;;;:::o;16041:225::-;16181:34;16177:1;16169:6;16165:14;16158:58;16250:8;16245:2;16237:6;16233:15;16226:33;16041:225;:::o;16272:366::-;16414:3;16435:67;16499:2;16494:3;16435:67;:::i;:::-;16428:74;;16511:93;16600:3;16511:93;:::i;:::-;16629:2;16624:3;16620:12;16613:19;;16272:366;;;:::o;16644:419::-;16810:4;16848:2;16837:9;16833:18;16825:26;;16897:9;16891:4;16887:20;16883:1;16872:9;16868:17;16861:47;16925:131;17051:4;16925:131;:::i;:::-;16917:139;;16644:419;;;:::o;17069:234::-;17209:34;17205:1;17197:6;17193:14;17186:58;17278:17;17273:2;17265:6;17261:15;17254:42;17069:234;:::o;17309:366::-;17451:3;17472:67;17536:2;17531:3;17472:67;:::i;:::-;17465:74;;17548:93;17637:3;17548:93;:::i;:::-;17666:2;17661:3;17657:12;17650:19;;17309:366;;;:::o;17681:419::-;17847:4;17885:2;17874:9;17870:18;17862:26;;17934:9;17928:4;17924:20;17920:1;17909:9;17905:17;17898:47;17962:131;18088:4;17962:131;:::i;:::-;17954:139;;17681:419;;;:::o;18106:225::-;18246:34;18242:1;18234:6;18230:14;18223:58;18315:8;18310:2;18302:6;18298:15;18291:33;18106:225;:::o;18337:366::-;18479:3;18500:67;18564:2;18559:3;18500:67;:::i;:::-;18493:74;;18576:93;18665:3;18576:93;:::i;:::-;18694:2;18689:3;18685:12;18678:19;;18337:366;;;:::o;18709:419::-;18875:4;18913:2;18902:9;18898:18;18890:26;;18962:9;18956:4;18952:20;18948:1;18937:9;18933:17;18926:47;18990:131;19116:4;18990:131;:::i;:::-;18982:139;;18709:419;;;:::o;19134:85::-;19179:7;19208:5;19197:16;;19134:85;;;:::o;19225:158::-;19283:9;19316:61;19334:42;19343:32;19369:5;19343:32;:::i;:::-;19334:42;:::i;:::-;19316:61;:::i;:::-;19303:74;;19225:158;;;:::o;19389:147::-;19484:45;19523:5;19484:45;:::i;:::-;19479:3;19472:58;19389:147;;:::o;19542:807::-;19791:4;19829:3;19818:9;19814:19;19806:27;;19843:71;19911:1;19900:9;19896:17;19887:6;19843:71;:::i;:::-;19924:72;19992:2;19981:9;19977:18;19968:6;19924:72;:::i;:::-;20006:80;20082:2;20071:9;20067:18;20058:6;20006:80;:::i;:::-;20096;20172:2;20161:9;20157:18;20148:6;20096:80;:::i;:::-;20186:73;20254:3;20243:9;20239:19;20230:6;20186:73;:::i;:::-;20269;20337:3;20326:9;20322:19;20313:6;20269:73;:::i;:::-;19542:807;;;;;;;;;:::o;20355:663::-;20443:6;20451;20459;20508:2;20496:9;20487:7;20483:23;20479:32;20476:119;;;20514:79;;:::i;:::-;20476:119;20634:1;20659:64;20715:7;20706:6;20695:9;20691:22;20659:64;:::i;:::-;20649:74;;20605:128;20772:2;20798:64;20854:7;20845:6;20834:9;20830:22;20798:64;:::i;:::-;20788:74;;20743:129;20911:2;20937:64;20993:7;20984:6;20973:9;20969:22;20937:64;:::i;:::-;20927:74;;20882:129;20355:663;;;;;:::o;21024:173::-;21164:25;21160:1;21152:6;21148:14;21141:49;21024:173;:::o;21203:366::-;21345:3;21366:67;21430:2;21425:3;21366:67;:::i;:::-;21359:74;;21442:93;21531:3;21442:93;:::i;:::-;21560:2;21555:3;21551:12;21544:19;;21203:366;;;:::o;21575:419::-;21741:4;21779:2;21768:9;21764:18;21756:26;;21828:9;21822:4;21818:20;21814:1;21803:9;21799:17;21792:47;21856:131;21982:4;21856:131;:::i;:::-;21848:139;;21575:419;;;:::o;22000:177::-;22140:29;22136:1;22128:6;22124:14;22117:53;22000:177;:::o;22183:366::-;22325:3;22346:67;22410:2;22405:3;22346:67;:::i;:::-;22339:74;;22422:93;22511:3;22422:93;:::i;:::-;22540:2;22535:3;22531:12;22524:19;;22183:366;;;:::o;22555:419::-;22721:4;22759:2;22748:9;22744:18;22736:26;;22808:9;22802:4;22798:20;22794:1;22783:9;22779:17;22772:47;22836:131;22962:4;22836:131;:::i;:::-;22828:139;;22555:419;;;:::o;22980:332::-;23101:4;23139:2;23128:9;23124:18;23116:26;;23152:71;23220:1;23209:9;23205:17;23196:6;23152:71;:::i;:::-;23233:72;23301:2;23290:9;23286:18;23277:6;23233:72;:::i;:::-;22980:332;;;;;:::o;23318:116::-;23388:21;23403:5;23388:21;:::i;:::-;23381:5;23378:32;23368:60;;23424:1;23421;23414:12;23368:60;23318:116;:::o;23440:137::-;23494:5;23525:6;23519:13;23510:22;;23541:30;23565:5;23541:30;:::i;:::-;23440:137;;;;:::o;23583:345::-;23650:6;23699:2;23687:9;23678:7;23674:23;23670:32;23667:119;;;23705:79;;:::i;:::-;23667:119;23825:1;23850:61;23903:7;23894:6;23883:9;23879:22;23850:61;:::i;:::-;23840:71;;23796:125;23583:345;;;;:::o;23934:152::-;24074:4;24070:1;24062:6;24058:14;24051:28;23934:152;:::o;24092:365::-;24234:3;24255:66;24319:1;24314:3;24255:66;:::i;:::-;24248:73;;24330:93;24419:3;24330:93;:::i;:::-;24448:2;24443:3;24439:12;24432:19;;24092:365;;;:::o;24463:419::-;24629:4;24667:2;24656:9;24652:18;24644:26;;24716:9;24710:4;24706:20;24702:1;24691:9;24687:17;24680:47;24744:131;24870:4;24744:131;:::i;:::-;24736:139;;24463:419;;;:::o;24888:168::-;25028:20;25024:1;25016:6;25012:14;25005:44;24888:168;:::o;25062:366::-;25204:3;25225:67;25289:2;25284:3;25225:67;:::i;:::-;25218:74;;25301:93;25390:3;25301:93;:::i;:::-;25419:2;25414:3;25410:12;25403:19;;25062:366;;;:::o;25434:419::-;25600:4;25638:2;25627:9;25623:18;25615:26;;25687:9;25681:4;25677:20;25673:1;25662:9;25658:17;25651:47;25715:131;25841:4;25715:131;:::i;:::-;25707:139;;25434:419;;;:::o;25859:194::-;25899:4;25919:20;25937:1;25919:20;:::i;:::-;25914:25;;25953:20;25971:1;25953:20;:::i;:::-;25948:25;;25997:1;25994;25990:9;25982:17;;26021:1;26015:4;26012:11;26009:37;;;26026:18;;:::i;:::-;26009:37;25859:194;;;;:::o;26059:152::-;26199:4;26195:1;26187:6;26183:14;26176:28;26059:152;:::o;26217:365::-;26359:3;26380:66;26444:1;26439:3;26380:66;:::i;:::-;26373:73;;26455:93;26544:3;26455:93;:::i;:::-;26573:2;26568:3;26564:12;26557:19;;26217:365;;;:::o;26588:419::-;26754:4;26792:2;26781:9;26777:18;26769:26;;26841:9;26835:4;26831:20;26827:1;26816:9;26812:17;26805:47;26869:131;26995:4;26869:131;:::i;:::-;26861:139;;26588:419;;;:::o;27013:152::-;27153:4;27149:1;27141:6;27137:14;27130:28;27013:152;:::o;27171:365::-;27313:3;27334:66;27398:1;27393:3;27334:66;:::i;:::-;27327:73;;27409:93;27498:3;27409:93;:::i;:::-;27527:2;27522:3;27518:12;27511:19;;27171:365;;;:::o;27542:419::-;27708:4;27746:2;27735:9;27731:18;27723:26;;27795:9;27789:4;27785:20;27781:1;27770:9;27766:17;27759:47;27823:131;27949:4;27823:131;:::i;:::-;27815:139;;27542:419;;;:::o;27967:152::-;28107:4;28103:1;28095:6;28091:14;28084:28;27967:152;:::o;28125:365::-;28267:3;28288:66;28352:1;28347:3;28288:66;:::i;:::-;28281:73;;28363:93;28452:3;28363:93;:::i;:::-;28481:2;28476:3;28472:12;28465:19;;28125:365;;;:::o;28496:419::-;28662:4;28700:2;28689:9;28685:18;28677:26;;28749:9;28743:4;28739:20;28735:1;28724:9;28720:17;28713:47;28777:131;28903:4;28777:131;:::i;:::-;28769:139;;28496:419;;;:::o;28921:114::-;28958:7;28998:30;28991:5;28987:42;28976:53;;28921:114;;;:::o;29041:122::-;29114:24;29132:5;29114:24;:::i;:::-;29107:5;29104:35;29094:63;;29153:1;29150;29143:12;29094:63;29041:122;:::o;29169:143::-;29226:5;29257:6;29251:13;29242:22;;29273:33;29300:5;29273:33;:::i;:::-;29169:143;;;;:::o;29318:93::-;29354:7;29394:10;29387:5;29383:22;29372:33;;29318:93;;;:::o;29417:120::-;29489:23;29506:5;29489:23;:::i;:::-;29482:5;29479:34;29469:62;;29527:1;29524;29517:12;29469:62;29417:120;:::o;29543:141::-;29599:5;29630:6;29624:13;29615:22;;29646:32;29672:5;29646:32;:::i;:::-;29543:141;;;;:::o;29690:661::-;29777:6;29785;29793;29842:2;29830:9;29821:7;29817:23;29813:32;29810:119;;;29848:79;;:::i;:::-;29810:119;29968:1;29993:64;30049:7;30040:6;30029:9;30025:22;29993:64;:::i;:::-;29983:74;;29939:128;30106:2;30132:64;30188:7;30179:6;30168:9;30164:22;30132:64;:::i;:::-;30122:74;;30077:129;30245:2;30271:63;30326:7;30317:6;30306:9;30302:22;30271:63;:::i;:::-;30261:73;;30216:128;29690:661;;;;;:::o;30357:174::-;30497:26;30493:1;30485:6;30481:14;30474:50;30357:174;:::o;30537:366::-;30679:3;30700:67;30764:2;30759:3;30700:67;:::i;:::-;30693:74;;30776:93;30865:3;30776:93;:::i;:::-;30894:2;30889:3;30885:12;30878:19;;30537:366;;;:::o;30909:419::-;31075:4;31113:2;31102:9;31098:18;31090:26;;31162:9;31156:4;31152:20;31148:1;31137:9;31133:17;31126:47;31190:131;31316:4;31190:131;:::i;:::-;31182:139;;30909:419;;;:::o;31334:172::-;31474:24;31470:1;31462:6;31458:14;31451:48;31334:172;:::o;31512:366::-;31654:3;31675:67;31739:2;31734:3;31675:67;:::i;:::-;31668:74;;31751:93;31840:3;31751:93;:::i;:::-;31869:2;31864:3;31860:12;31853:19;;31512:366;;;:::o;31884:419::-;32050:4;32088:2;32077:9;32073:18;32065:26;;32137:9;32131:4;32127:20;32123:1;32112:9;32108:17;32101:47;32165:131;32291:4;32165:131;:::i;:::-;32157:139;;31884:419;;;:::o;32309:152::-;32449:4;32445:1;32437:6;32433:14;32426:28;32309:152;:::o;32467:365::-;32609:3;32630:66;32694:1;32689:3;32630:66;:::i;:::-;32623:73;;32705:93;32794:3;32705:93;:::i;:::-;32823:2;32818:3;32814:12;32807:19;;32467:365;;;:::o;32838:419::-;33004:4;33042:2;33031:9;33027:18;33019:26;;33091:9;33085:4;33081:20;33077:1;33066:9;33062:17;33055:47;33119:131;33245:4;33119:131;:::i;:::-;33111:139;;32838:419;;;:::o;33263:152::-;33403:4;33399:1;33391:6;33387:14;33380:28;33263:152;:::o;33421:365::-;33563:3;33584:66;33648:1;33643:3;33584:66;:::i;:::-;33577:73;;33659:93;33748:3;33659:93;:::i;:::-;33777:2;33772:3;33768:12;33761:19;;33421:365;;;:::o;33792:419::-;33958:4;33996:2;33985:9;33981:18;33973:26;;34045:9;34039:4;34035:20;34031:1;34020:9;34016:17;34009:47;34073:131;34199:4;34073:131;:::i;:::-;34065:139;;33792:419;;;:::o;34217:152::-;34357:4;34353:1;34345:6;34341:14;34334:28;34217:152;:::o;34375:365::-;34517:3;34538:66;34602:1;34597:3;34538:66;:::i;:::-;34531:73;;34613:93;34702:3;34613:93;:::i;:::-;34731:2;34726:3;34722:12;34715:19;;34375:365;;;:::o;34746:419::-;34912:4;34950:2;34939:9;34935:18;34927:26;;34999:9;34993:4;34989:20;34985:1;34974:9;34970:17;34963:47;35027:131;35153:4;35027:131;:::i;:::-;35019:139;;34746:419;;;:::o;35171:152::-;35311:4;35307:1;35299:6;35295:14;35288:28;35171:152;:::o;35329:365::-;35471:3;35492:66;35556:1;35551:3;35492:66;:::i;:::-;35485:73;;35567:93;35656:3;35567:93;:::i;:::-;35685:2;35680:3;35676:12;35669:19;;35329:365;;;:::o;35700:419::-;35866:4;35904:2;35893:9;35889:18;35881:26;;35953:9;35947:4;35943:20;35939:1;35928:9;35924:17;35917:47;35981:131;36107:4;35981:131;:::i;:::-;35973:139;;35700:419;;;:::o;36125:180::-;36173:77;36170:1;36163:88;36270:4;36267:1;36260:15;36294:4;36291:1;36284:15;36311:180;36359:77;36356:1;36349:88;36456:4;36453:1;36446:15;36480:4;36477:1;36470:15;36497:831;36760:4;36798:3;36787:9;36783:19;36775:27;;36812:71;36880:1;36869:9;36865:17;36856:6;36812:71;:::i;:::-;36893:80;36969:2;36958:9;36954:18;36945:6;36893:80;:::i;:::-;37020:9;37014:4;37010:20;37005:2;36994:9;36990:18;36983:48;37048:108;37151:4;37142:6;37048:108;:::i;:::-;37040:116;;37166:72;37234:2;37223:9;37219:18;37210:6;37166:72;:::i;:::-;37248:73;37316:3;37305:9;37301:19;37292:6;37248:73;:::i;:::-;36497:831;;;;;;;;:::o;37334:106::-;37378:8;37427:5;37422:3;37418:15;37397:36;;37334:106;;;:::o;37446:183::-;37481:3;37519:1;37501:16;37498:23;37495:128;;;37557:1;37554;37551;37536:23;37579:34;37610:1;37604:8;37579:34;:::i;:::-;37572:41;;37495:128;37446:183;:::o;37635:281::-;37718:27;37740:4;37718:27;:::i;:::-;37710:6;37706:40;37848:6;37836:10;37833:22;37812:18;37800:10;37797:34;37794:62;37791:88;;;37859:18;;:::i;:::-;37791:88;37899:10;37895:2;37888:22;37678:238;37635:281;;:::o;37922:711::-;37961:3;37999:4;37981:16;37978:26;38007:5;37975:39;38036:20;;:::i;:::-;38111:1;38093:16;38089:24;38086:1;38080:4;38065:49;38144:4;38138:11;38243:16;38236:4;38228:6;38224:17;38221:39;38188:18;38180:6;38177:30;38161:113;38158:146;;;38289:5;;;;38158:146;38335:6;38329:4;38325:17;38371:3;38365:10;38398:18;38390:6;38387:30;38384:43;;;38420:5;;;;;;38384:43;38468:6;38461:4;38456:3;38452:14;38448:27;38527:1;38509:16;38505:24;38499:4;38495:35;38490:3;38487:44;38484:57;;;38534:5;;;;;;;38484:57;38551;38599:6;38593:4;38589:17;38581:6;38577:30;38571:4;38551:57;:::i;:::-;38624:3;38617:10;;37965:668;;;;;37922:711;;:::o;38639:154::-;38779:6;38775:1;38767:6;38763:14;38756:30;38639:154;:::o;38799:365::-;38941:3;38962:66;39026:1;39021:3;38962:66;:::i;:::-;38955:73;;39037:93;39126:3;39037:93;:::i;:::-;39155:2;39150:3;39146:12;39139:19;;38799:365;;;:::o;39170:419::-;39336:4;39374:2;39363:9;39359:18;39351:26;;39423:9;39417:4;39413:20;39409:1;39398:9;39394:17;39387:47;39451:131;39577:4;39451:131;:::i;:::-;39443:139;;39170:419;;;:::o;39595:997::-;39884:4;39922:3;39911:9;39907:19;39899:27;;39936:71;40004:1;39993:9;39989:17;39980:6;39936:71;:::i;:::-;40017:72;40085:2;40074:9;40070:18;40061:6;40017:72;:::i;:::-;40099;40167:2;40156:9;40152:18;40143:6;40099:72;:::i;:::-;40181;40249:2;40238:9;40234:18;40225:6;40181:72;:::i;:::-;40263:73;40331:3;40320:9;40316:19;40307:6;40263:73;:::i;:::-;40346;40414:3;40403:9;40399:19;40390:6;40346:73;:::i;:::-;40429;40497:3;40486:9;40482:19;40473:6;40429:73;:::i;:::-;40512;40580:3;40569:9;40565:19;40556:6;40512:73;:::i;:::-;39595:997;;;;;;;;;;;:::o;40598:174::-;40738:26;40734:1;40726:6;40722:14;40715:50;40598:174;:::o;40778:366::-;40920:3;40941:67;41005:2;41000:3;40941:67;:::i;:::-;40934:74;;41017:93;41106:3;41017:93;:::i;:::-;41135:2;41130:3;41126:12;41119:19;;40778:366;;;:::o;41150:419::-;41316:4;41354:2;41343:9;41339:18;41331:26;;41403:9;41397:4;41393:20;41389:1;41378:9;41374:17;41367:47;41431:131;41557:4;41431:131;:::i;:::-;41423:139;;41150:419;;;:::o;41575:233::-;41614:3;41637:24;41655:5;41637:24;:::i;:::-;41628:33;;41683:66;41676:5;41673:77;41670:103;;41753:18;;:::i;:::-;41670:103;41800:1;41793:5;41789:13;41782:20;;41575:233;;;:::o;41814:152::-;41954:4;41950:1;41942:6;41938:14;41931:28;41814:152;:::o;41972:365::-;42114:3;42135:66;42199:1;42194:3;42135:66;:::i;:::-;42128:73;;42210:93;42299:3;42210:93;:::i;:::-;42328:2;42323:3;42319:12;42312:19;;41972:365;;;:::o;42343:419::-;42509:4;42547:2;42536:9;42532:18;42524:26;;42596:9;42590:4;42586:20;42582:1;42571:9;42567:17;42560:47;42624:131;42750:4;42624:131;:::i;:::-;42616:139;;42343:419;;;:::o;42768:152::-;42908:4;42904:1;42896:6;42892:14;42885:28;42768:152;:::o;42926:365::-;43068:3;43089:66;43153:1;43148:3;43089:66;:::i;:::-;43082:73;;43164:93;43253:3;43164:93;:::i;:::-;43282:2;43277:3;43273:12;43266:19;;42926:365;;;:::o;43297:419::-;43463:4;43501:2;43490:9;43486:18;43478:26;;43550:9;43544:4;43540:20;43536:1;43525:9;43521:17;43514:47;43578:131;43704:4;43578:131;:::i;:::-;43570:139;;43297:419;;;:::o;43722:180::-;43770:77;43767:1;43760:88;43867:4;43864:1;43857:15;43891:4;43888:1;43881:15

Swarm Source

ipfs://a244743f51e013b4bf7e7c6a9bd481bef2c79268878ba72c69131c685f5172ca
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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