S Price: $0.578858 (-3.03%)

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,342.295235213933293647 FARM

Value
$0.00
0xccf29e1f9567e065ba32e0ff25ab7d6cae2e1962
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.19+commit.7dd6d404

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-02
*/

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

// 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.
 */
abstract 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), "E0");
        _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);
        if (currentAllowance != type(uint256).max) {
            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;
    function sync() external;
}

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

    // Metropolis DEX addresses
    IMetropolisRouter public metropolisRouter;
    IMetropolisFactory public metropolisFactory;
    address public sonicToken;
    address public liquidityPair;

    // Holder tracking
    mapping(address => bool) public isHolder;
    address[] public holders;

    // Optimize events
    event LiquidityAdded(uint256 indexed tokenAmount, uint256 indexed sonicAmount);
    event AirdropDistributed(uint256 indexed amount, uint256 indexed holdersCount);
    event SwapFailed(string indexed reason);
    event ProcessStarted(uint256 indexed tokensForLiquidity, uint256 indexed tokensForAirdrop);
    event SwapSuccessful(uint256 indexed tokensSwapped, uint256 indexed wethReceived);
    event PairReservesUpdated(uint256 indexed farmReserve, uint256 indexed wethReserve);
    event ContractInitialized(address indexed router, address indexed factory, address indexed sonic);

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

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

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

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

        _mint(address(this), TOTAL_SUPPLY);
    }

    function initialize() external onlyOwner {
        require(!_initialized, "E1");
        _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), "E5");

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

        emit ContractInitialized(address(metropolisRouter), address(metropolisFactory), sonicToken);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        // Boş implementasyon kaldırıldı
    }

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        // Boş implementasyon kaldırıldı
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual override {
        require(from != address(0) && to != address(0), "E0");
        
        // Skip tax for owner and contract transfers
        if (from == owner() || to == owner() || from == address(this) || to == address(this) || !_initialized) {
            super._transfer(from, to, amount);
            _updateHolder(from);
            _updateHolder(to);
            return;
        }

        bool isSellOrBuy = to == liquidityPair || from == liquidityPair;
        if (isSellOrBuy) {
            // Calculate tax amount (5%)
            uint256 totalTax = (amount * TAX_RATE) / 100;
            uint256 transferAmount = amount - totalTax;
            
            // First transfer main amount to recipient
            super._transfer(from, to, transferAmount);
            
            // Then transfer tax to contract
            super._transfer(from, address(this), totalTax);

            // Split tax between liquidity and airdrop (2.5% each)
            _pendingLiquidityTokens += (totalTax * LIQUIDITY_TAX) / 100;  // 2.5% for liquidity
            _pendingAirdropTokens += (totalTax * AIRDROP_TAX) / 100;    // 2.5% for airdrop

            // Try to process if we have enough tokens
            if ((_pendingLiquidityTokens >= MIN_TOKENS_FOR_PROCESS || 
                _pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS) && 
                holders.length > 0) {
                // Refresh router approvals first
                _approve(address(this), address(metropolisRouter), type(uint256).max);
                IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max);
                
                // Then refresh pair approvals
                IERC20(sonicToken).approve(liquidityPair, type(uint256).max);
                IERC20(address(this)).approve(liquidityPair, type(uint256).max);
                
                try this.processLiquidityAndAirdrop() {
                    // Process successful
                } catch Error(string memory reason) {
                    emit SwapFailed(string(abi.encodePacked("Auto process failed: ", reason)));
                } catch {
                    emit SwapFailed("Unknown error in automatic processing");
                }
            }
        } else {
            // Normal transfer without tax
            super._transfer(from, to, amount);
        }
        
        // Update holder status for both addresses
        _updateHolder(from);
        _updateHolder(to);
    }

    function _updateHolder(address account) private {
        if (account != liquidityPair && account != address(this)) {
            uint256 balance = balanceOf(account);
            bool isCurrentlyHolder = isHolder[account];
            
            if (balance >= MIN_HOLDER_AMOUNT && !isCurrentlyHolder) {
                isHolder[account] = true;
                holders.push(account);
            } else if (balance < MIN_HOLDER_AMOUNT && isCurrentlyHolder) {
                isHolder[account] = false;
                _removeHolder(account);
            }
        }
    }

    function _removeHolder(address account) private {
        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(_pendingLiquidityTokens > 0 || _pendingAirdropTokens > 0, "E5");
        require(holders.length > 0, "E6");
        
        uint256 totalTokens = _pendingLiquidityTokens + _pendingAirdropTokens;
        require(totalTokens >= MIN_TOKENS_FOR_PROCESS, "E7");
        
        emit ProcessStarted(_pendingLiquidityTokens, _pendingAirdropTokens);

        // Reset pending amounts
        uint256 tempLiquidityTokens = _pendingLiquidityTokens;
        uint256 tempAirdropTokens = _pendingAirdropTokens;
        _pendingLiquidityTokens = 0;
        _pendingAirdropTokens = 0;

        // Önce tüm tokenleri SONIC'e çevir
        uint256 sonicReceived = _swapTokensForSonic(totalTokens);
        if (sonicReceived > 0) {
            // Likidite için SONIC ayır
            uint256 sonicForLiquidity = (sonicReceived * LIQUIDITY_PERCENTAGE) / 100;
            uint256 sonicForAirdrop = sonicReceived - sonicForLiquidity;

            // Likidite ekle
            if (sonicForLiquidity > 0) {
                _addLiquidityWithoutSlippage(tempLiquidityTokens, sonicForLiquidity);
            }

            // Airdrop dağıt
            if (sonicForAirdrop > 0) {
                _processAirdrop(sonicForAirdrop);
            }
        } else {
            // Swap başarısız olursa tokenleri geri ekle
            _pendingLiquidityTokens = tempLiquidityTokens;
            _pendingAirdropTokens = tempAirdropTokens;
        }
    }

    function _swapTokensForSonic(uint256 tokenAmount) private returns (uint256) {
        if (tokenAmount == 0) return 0;

        // Refresh approvals
        _approve(address(this), address(metropolisRouter), type(uint256).max);
        IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = sonicToken;

        // Geçici bir adres oluştur (msg.sender kullan)
        address tempReceiver = msg.sender;
        uint256 initialSonicBalance = IERC20(sonicToken).balanceOf(tempReceiver);

        try metropolisRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // Minimum çıktıyı 0 yaparak slippage'ı kaldırıyoruz
            path,
            tempReceiver, // Geçici olarak msg.sender'a gönder
            block.timestamp + 300
        ) {
            uint256 finalSonicBalance = IERC20(sonicToken).balanceOf(tempReceiver);
            uint256 sonicReceived = finalSonicBalance - initialSonicBalance;
            
            if (sonicReceived > 0) {
                // SONIC tokenları kontrata transfer et
                require(IERC20(sonicToken).transferFrom(tempReceiver, address(this), sonicReceived), "Transfer failed");
                emit SwapSuccessful(tokenAmount, sonicReceived);
                return sonicReceived;
            }
            
            emit SwapFailed("No SONIC received after swap");
            return 0;
        } catch Error(string memory reason) {
            emit SwapFailed(reason);
            return 0;
        } catch {
            emit SwapFailed("Unknown error in swap");
            return 0;
        }
    }

    function _addLiquidityWithoutSlippage(uint256 tokenAmount, uint256 sonicAmount) private {
        if (tokenAmount == 0 || sonicAmount == 0) return;

        // Onayları yenile
        _approve(address(this), address(metropolisRouter), tokenAmount);
        IERC20(sonicToken).approve(address(metropolisRouter), sonicAmount);

        try metropolisRouter.addLiquidity(
            address(this),
            sonicToken,
            tokenAmount,
            sonicAmount,
            0, // Minimum çıktıları 0 yaparak slippage'ı kaldırıyoruz
            0,
            address(this),
            block.timestamp + 300
        ) {
            emit LiquidityAdded(tokenAmount, sonicAmount);
        } catch Error(string memory reason) {
            emit SwapFailed(reason);
            _pendingLiquidityTokens += tokenAmount;
        } catch {
            emit SwapFailed("Unknown error in addLiquidity");
            _pendingLiquidityTokens += tokenAmount;
        }
    }

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

        for (uint256 i = 0; i < holders.length && i < 100; i++) {
            if (holders[i] != address(0)) {
                try IERC20(sonicToken).transfer(holders[i], amountPerHolder) {
                    // Transfer successful
                } catch {
                    continue;
                }
            }
        }
        
        emit AirdropDistributed(sonicAmount, holders.length);
    }

    // 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, "E8");
        require(tokenAmount > 0, "E9");
        
        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), "E11");
        metropolisRouter = IMetropolisRouter(_router);
    }

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

    // Transfer tokens to owner
    function withdrawTokensToOwner(uint256 amount) external onlyOwner {
        require(
            IERC20(address(this)).balanceOf(address(this)) >= amount,
            "Insufficient balance"
        );
        _transfer(address(this), msg.sender, 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, "E5");
        require(holders.length > 0, "E6");
        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() public view returns (uint256, uint256, bool, address) {
        return (
            balanceOf(address(this)),
            IERC20(sonicToken).allowance(address(this), address(metropolisRouter)),
            liquidityPair != address(0),
            liquidityPair
        );
    }

    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));
    }

    function getMinimumOutputWithSlippage(uint256 amountIn) public view returns (uint256) {
        (uint256 farmReserve, uint256 wethReserve) = getPairReserves();
        if (farmReserve == 0 || wethReserve == 0) return 0;
        
        uint256 amountInWithFee = amountIn * 997; // 0.3% fee
        uint256 numerator = amountInWithFee * wethReserve;
        uint256 denominator = (farmReserve * 1000) + amountInWithFee;
        uint256 amountOut = numerator / denominator;
        
        // Apply slippage tolerance (30%)
        return amountOut * (100 - MAX_SLIPPAGE) / 100;
    }

    // aprov all
    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 {}
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"holdersCount","type":"uint256"}],"name":"AirdropDistributed","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":true,"internalType":"address","name":"router","type":"address"},{"indexed":true,"internalType":"address","name":"factory","type":"address"},{"indexed":true,"internalType":"address","name":"sonic","type":"address"}],"name":"ContractInitialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":true,"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":true,"internalType":"uint256","name":"farmReserve","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"wethReserve","type":"uint256"}],"name":"PairReservesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensForLiquidity","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"tokensForAirdrop","type":"uint256"}],"name":"ProcessStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"string","name":"reason","type":"string"}],"name":"SwapFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":true,"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"},{"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":"getMinimumOutputWithSlippage","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":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"address","name":"","type":"address"}],"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":[],"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":"triggerProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokensToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50336040518060400160405280600681526020017f4641524d455200000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4641524d00000000000000000000000000000000000000000000000000000000815250816003908162000090919062000802565b508060049081620000a2919062000802565b5050506001600581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200011f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000116906200094a565b60405180910390fd5b62000130816200034b60201b60201c565b5060007395a7e403d7cf20f675ff9273d66e94d35ba49fa390506000731570300e9cfec66c9fb0c8bc14366c86eb170ad09050600073039e2fb66102314ce7b64ce5ce3e5183bc94ad389050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015620001e75750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015620002215750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b62000263576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200025a90620009bc565b60405180910390fd5b82600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003423069d3c21bcecceda10000006200041160201b60201c565b50505062000ae8565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000483576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200047a9062000a2e565b60405180910390fd5b62000497600083836200057e60201b60201c565b8060026000828254620004ab919062000a7f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200055e919062000acb565b60405180910390a36200057a600083836200058360201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200060a57607f821691505b60208210810362000620576200061f620005c2565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200068a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200064b565b6200069686836200064b565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620006e3620006dd620006d784620006ae565b620006b8565b620006ae565b9050919050565b6000819050919050565b620006ff83620006c2565b620007176200070e82620006ea565b84845462000658565b825550505050565b600090565b6200072e6200071f565b6200073b818484620006f4565b505050565b5b8181101562000763576200075760008262000724565b60018101905062000741565b5050565b601f821115620007b2576200077c8162000626565b62000787846200063b565b8101602085101562000797578190505b620007af620007a6856200063b565b83018262000740565b50505b505050565b600082821c905092915050565b6000620007d760001984600802620007b7565b1980831691505092915050565b6000620007f28383620007c4565b9150826002028217905092915050565b6200080d8262000588565b67ffffffffffffffff81111562000829576200082862000593565b5b620008358254620005f1565b6200084282828562000767565b600060209050601f8311600181146200087a576000841562000865578287015190505b620008718582620007e4565b865550620008e1565b601f1984166200088a8662000626565b60005b82811015620008b4578489015182556001820191506020850194506020810190506200088d565b86831015620008d45784890151620008d0601f891682620007c4565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b600062000932600283620008e9565b91506200093f82620008fa565b602082019050919050565b60006020820190508181036000830152620009658162000923565b9050919050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b6000620009a4600283620008e9565b9150620009b1826200096c565b602082019050919050565b60006020820190508181036000830152620009d78162000995565b9050919050565b7f4533000000000000000000000000000000000000000000000000000000000000600082015250565b600062000a16600283620008e9565b915062000a2382620009de565b602082019050919050565b6000602082019050818103600083015262000a498162000a07565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000a8c82620006ae565b915062000a9983620006ae565b925082820190508082111562000ab45762000ab362000a50565b5b92915050565b62000ac581620006ae565b82525050565b600060208201905062000ae2600083018462000aba565b92915050565b615a188062000af86000396000f3fe6080604052600436106101f25760003560e01c80637136982b1161010d578063a9059cbb116100a0578063dd62ed3e1161006f578063dd62ed3e146106bd578063ed9cacfe146106fa578063f2fde38b14610711578063f4ea42de1461073a578063fd7c9fab14610777576101f9565b8063a9059cbb14610603578063c026d93a14610640578063c0d7865514610657578063d4d7b19a14610680576101f9565b80638129fc1c116100dc5780638129fc1c1461056a5780638da5cb5b1461058157806395d89b41146105ac5780639df93f6c146105d7576101f9565b80637136982b146104d457806379304bec146104ff5780637ac84fc114610528578063808a54571461053f576101f9565b8063397883d2116101855780635d76b04c116101545780635d76b04c146104165780635fe8e7cc1461044157806362b6327a1461046c57806370a0823114610497576101f9565b8063397883d21461038f57806341a22cc2146103a6578063461a3a95146103c257806357376198146103ed576101f9565b80631b26c80d116101c15780631b26c80d146102bc57806323b872dd146102ea5780632a11ced014610327578063313ce56714610364576101f9565b806306fdde03146101fe57806308dee2b414610229578063095ea7b31461025457806318160ddd14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107a2565b60405161022091906143a2565b60405180910390f35b34801561023557600080fd5b5061023e610834565b60405161024b91906143dd565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190614491565b61083e565b60405161028891906144ec565b60405180910390f35b34801561029d57600080fd5b506102a661085a565b6040516102b391906143dd565b60405180910390f35b3480156102c857600080fd5b506102d1610864565b6040516102e19493929190614516565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c919061455b565b6109b7565b60405161031e91906144ec565b60405180910390f35b34801561033357600080fd5b5061034e600480360381019061034991906145ae565b6109df565b60405161035b91906145db565b60405180910390f35b34801561037057600080fd5b50610379610a1e565b6040516103869190614612565b60405180910390f35b34801561039b57600080fd5b506103a4610a27565b005b6103c060048036038101906103bb91906145ae565b610b60565b005b3480156103ce57600080fd5b506103d7610e72565b6040516103e491906145db565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f9190614491565b610e98565b005b34801561042257600080fd5b5061042b610f98565b60405161043891906143dd565b60405180910390f35b34801561044d57600080fd5b50610456610fa2565b60405161046391906146eb565b60405180910390f35b34801561047857600080fd5b50610481611030565b60405161048e919061476c565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b99190614787565b611056565b6040516104cb91906143dd565b60405180910390f35b3480156104e057600080fd5b506104e961109e565b6040516104f691906143dd565b60405180910390f35b34801561050b57600080fd5b50610526600480360381019061052191906145ae565b6110ab565b005b34801561053457600080fd5b5061053d61117d565b005b34801561054b57600080fd5b506105546113a2565b60405161056191906145db565b60405180910390f35b34801561057657600080fd5b5061057f6113c8565b005b34801561058d57600080fd5b50610596611b10565b6040516105a391906145db565b60405180910390f35b3480156105b857600080fd5b506105c1611b3a565b6040516105ce91906143a2565b60405180910390f35b3480156105e357600080fd5b506105ec611bcc565b6040516105fa9291906147b4565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190614491565b611d8c565b60405161063791906144ec565b60405180910390f35b34801561064c57600080fd5b50610655611da8565b005b34801561066357600080fd5b5061067e60048036038101906106799190614787565b6120fb565b005b34801561068c57600080fd5b506106a760048036038101906106a29190614787565b6121b6565b6040516106b491906144ec565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df91906147dd565b6121d6565b6040516106f191906143dd565b60405180910390f35b34801561070657600080fd5b5061070f61225d565b005b34801561071d57600080fd5b5061073860048036038101906107339190614787565b612539565b005b34801561074657600080fd5b50610761600480360381019061075c91906145ae565b6125bc565b60405161076e91906143dd565b60405180910390f35b34801561078357600080fd5b5061078c61266e565b604051610799919061483e565b60405180910390f35b6060600380546107b190614888565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd90614888565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b5050505050905090565b6000600d54905090565b60008033905061084f818585612694565b600191505092915050565b6000600254905090565b60008060008061087330611056565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016108f29291906148b9565b602060405180830381865afa15801561090f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093391906148f7565b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935093509350935090919293565b6000803390506109c8858285612828565b6109d38585856128b4565b60019150509392505050565b600c81815481106109ef57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610a2f613043565b6000600d541180610a4257506000600e54115b610a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7890614970565b60405180910390fd5b6000600c8054905011610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac0906149dc565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b1157600080fd5b505af1925050508015610b22575060015b610b5d57600e54600d547f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd60405160405180910390a3610b5e565b5b565b610b68613043565b60003411610bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba290614a48565b60405180910390fd5b60008111610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be590614ab4565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c2891906145db565b602060405180830381865afa158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6991906148f7565b1015610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190614b46565b60405180910390fd5b610cd730600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612694565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71934308460008033426040518863ffffffff1660e01b8152600401610d3e96959493929190614ba1565b60606040518083038185885af193505050508015610d7a57506040513d601f19601f82011682018060405250810190610d779190614c02565b60015b610de757610dac30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612694565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde90614ca1565b60405180910390fd5b50505034817f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60405160405180910390a360004790506000811115610e6e573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e6c573d6000803e3d6000fd5b505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ea0613043565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0590614d0d565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610f32611b10565b836040518363ffffffff1660e01b8152600401610f50929190614d2d565b6020604051808303816000875af1158015610f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f939190614d82565b505050565b6000600e54905090565b6060600c80548060200260200160405190810160405280929190818152602001828054801561102657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610fdc575b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600c80549050905090565b6110b3613043565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ed91906145db565b602060405180830381865afa15801561110a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112e91906148f7565b101561116f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116690614dfb565b60405180910390fd5b61117a3033836128b4565b50565b6002600554036111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b990614e67565b60405180910390fd5b60026005819055506000600d5411806111dd57506000600e54115b61121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390614970565b60405180910390fd5b6000600c8054905011611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b906149dc565b60405180910390fd5b6000600e54600d546112769190614eb6565b905068056bc75e2d631000008110156112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90614f36565b60405180910390fd5b600e54600d547f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd60405160405180910390a36000600d5490506000600e5490506000600d819055506000600e81905550600061131f846130ba565b90506000811115611385576000606460198361133b9190614f56565b6113459190614fc7565b9050600081836113559190614ff8565b9050600082111561136b5761136a8583613737565b5b600081111561137e5761137d81613a33565b5b5050611394565b82600d8190555081600e819055505b505050506001600581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113d0613043565b600f60009054906101000a900460ff1615611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790615078565b60405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016114ba9291906148b9565b602060405180830381865afa1580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb91906150ad565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361169457600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016116109291906148b9565b6020604051808303816000875af115801561162f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165391906150ad565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171c90614970565b60405180910390fd5b61177230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611811929190614d2d565b6020604051808303816000875af1158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190614d82565b611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90615126565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611932929190614d2d565b6020604051808303816000875af1158015611951573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119759190614d82565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016119f3929190614d2d565b6020604051808303816000875af1158015611a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a369190614d82565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4ca662a5f1f012e4d740b256559dce10a6b72cdec96be0142f5e2eb49dd37a6e60405160405180910390a4565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611b4990614888565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7590614888565b8015611bc25780601f10611b9757610100808354040283529160200191611bc2565b820191906000526020600020905b815481529060010190602001808311611ba557829003601f168201915b5050505050905090565b600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6391906151c8565b50915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfb91906150ad565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d5e57826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff1694509450505050611d88565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16945094505050505b9091565b600080339050611d9d8185856128b4565b600191505092915050565b611db0613043565b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611e0f9291906148b9565b602060405180830381865afa158015611e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5091906148f7565b905069d3c21bcecceda1000000811015611e9c57611e9b30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000612694565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ef991906145db565b602060405180830381865afa158015611f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3a91906148f7565b905060008111156120f7576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611fc69291906148b9565b602060405180830381865afa158015611fe3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200791906148f7565b9050818110156120f557600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016120b0929190614d2d565b6020604051808303816000875af11580156120cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f39190614d82565b505b505b5050565b612103613043565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216990615267565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612265613043565b6122b230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612351929190614d2d565b6020604051808303816000875af1158015612370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123949190614d82565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612434929190614d2d565b6020604051808303816000875af192505050801561247057506040513d601f19601f8201168201806040525081019061246d9190614d82565b60015b1561247757505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016124f4929190614d2d565b6020604051808303816000875af192505050801561253057506040513d601f19601f8201168201806040525081019061252d9190614d82565b60015b1561253757505b565b612541613043565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a7906152d3565b60405180910390fd5b6125b981613c27565b50565b60008060006125c9611bcc565b9150915060008214806125dc5750600081145b156125ec57600092505050612669565b60006103e5856125fc9190614f56565b90506000828261260c9190614f56565b90506000826103e88661261f9190614f56565b6126299190614eb6565b9050600081836126399190614fc7565b90506064601e606461264b9190614ff8565b826126569190614f56565b6126609190614fc7565b96505050505050505b919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126fe5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61273d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273490615126565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161281b91906143dd565b60405180910390a3505050565b600061283484846121d6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146128ae57818110156128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289790614970565b60405180910390fd5b6128ad8484848403612694565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561291e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61295d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129549061533f565b60405180910390fd5b612965611b10565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806129d057506129a1611b10565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a0657503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612a3c57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a545750600f60009054906101000a900460ff16155b15612a7b57612a64838383613ced565b612a6d83613f2e565b612a7682613f2e565b61303e565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b265750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b9050801561301e5760006064600584612b3f9190614f56565b612b499190614fc7565b905060008184612b599190614ff8565b9050612b66868683613ced565b612b71863084613ced565b6064601983612b809190614f56565b612b8a9190614fc7565b600d6000828254612b9b9190614eb6565b925050819055506064601983612bb19190614f56565b612bbb9190614fc7565b600e6000828254612bcc9190614eb6565b9250508190555068056bc75e2d63100000600d54101580612bf8575068056bc75e2d63100000600e5410155b8015612c0957506000600c80549050115b1561301757612c5b30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612cfa929190614d2d565b6020604051808303816000875af1158015612d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3d9190614d82565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612ddd929190614d2d565b6020604051808303816000875af1158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614d82565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612e9e929190614d2d565b6020604051808303816000875af1158015612ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee19190614d82565b503073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612f2a57600080fd5b505af1925050508015612f3b575060015b61301557612f4761536c565b806308c379a003612fcd5750612f5b6153ee565b80612f665750612fcf565b80604051602001612f779190615506565b604051602081830303815290604052604051612f939190615528565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a250613010565b505b604051612fdb906155b1565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a25b613016565b5b5b505061302a565b613029848484613ced565b5b61303384613f2e565b61303c83613f2e565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff16613062611b10565b73ffffffffffffffffffffffffffffffffffffffff16146130b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130af90615612565b60405180910390fd5b565b60008082036130cc5760009050613732565b61311930600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016131b8929190614d2d565b6020604051808303816000875af11580156131d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fb9190614d82565b506000600267ffffffffffffffff8111156132195761321861538e565b5b6040519080825280602002602001820160405280156132475781602001602082028036833780820191505090505b509050308160008151811061325f5761325e615632565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106132d0576132cf615632565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060003390506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161336c91906145db565b602060405180830381865afa158015613389573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ad91906148f7565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795866000868661012c426134009190614eb6565b6040518663ffffffff1660e01b8152600401613420959493929190615661565b600060405180830381600087803b15801561343a57600080fd5b505af192505050801561344b575060015b6135135761345761536c565b806308c379a0036134c5575061346b6153ee565b8061347657506134c7565b806040516134849190615528565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a26000945050505050613732565b505b6040516134d390615707565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009350505050613732565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b815260040161357091906145db565b602060405180830381865afa15801561358d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b191906148f7565b9050600082826135c19190614ff8565b905060008111156136e857600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8530846040518463ffffffff1660e01b815260040161362b9392919061571c565b6020604051808303816000875af115801561364a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061366e9190614d82565b6136ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a49061579f565b60405180910390fd5b80877fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc0160405160405180910390a38095505050505050613732565b6040516136f49061580b565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a26000955050505050505b919050565b60008214806137465750600081145b613a2f5761377730600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016137f6929190614d2d565b6020604051808303816000875af1158015613815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138399190614d82565b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856000803061012c426138b09190614eb6565b6040518963ffffffff1660e01b81526004016138d3989796959493929190615820565b6060604051808303816000875af192505050801561390f57506040513d601f19601f8201168201806040525081019061390c9190614c02565b60015b6139fc5761391b61536c565b806308c379a00361399b575061392f6153ee565b8061393a575061399d565b806040516139489190615528565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a282600d600082825461398e9190614eb6565b92505081905550506139f7565b505b6040516139a9906158ea565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a281600d60008282546139ef9190614eb6565b925050819055505b613a2e565b50505080827f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60405160405180910390a35b5b5050565b6000811480613a4757506000600c80549050145b613c24576000600c8054905082613a5e9190614fc7565b905060008103613a6e5750613c24565b60005b600c8054905081108015613a855750606481105b15613bee57600073ffffffffffffffffffffffffffffffffffffffff16600c8281548110613ab657613ab5615632565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613bda57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600c8381548110613b4e57613b4d615632565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401613b97929190614d2d565b6020604051808303816000875af1925050508015613bd357506040513d601f19601f82011682018060405250810190613bd09190614d82565b60015b15613bdb57505b5b8080613be6906158ff565b915050613a71565b50600c80549050827f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21760405160405180910390a3505b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613d575750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d8d9061533f565b60405180910390fd5b613da1838383614178565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e1e90615993565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613f1591906143dd565b60405180910390a3613f2884848461417d565b50505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613fb857503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15614175576000613fc882611056565b90506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050678ac7230489e800008210158015614031575080155b156140f6576001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614172565b678ac7230489e800008210801561410a5750805b15614171576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061417083614182565b5b5b50505b50565b505050565b505050565b60005b600c8054905081101561430e578173ffffffffffffffffffffffffffffffffffffffff16600c82815481106141bd576141bc615632565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036142fb57600c6001600c805490506142179190614ff8565b8154811061422857614227615632565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c828154811061426757614266615632565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c8054806142c1576142c06159b3565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561430e565b8080614306906158ff565b915050614185565b5050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561434c578082015181840152602081019050614331565b60008484015250505050565b6000601f19601f8301169050919050565b600061437482614312565b61437e818561431d565b935061438e81856020860161432e565b61439781614358565b840191505092915050565b600060208201905081810360008301526143bc8184614369565b905092915050565b6000819050919050565b6143d7816143c4565b82525050565b60006020820190506143f260008301846143ce565b92915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061443282614407565b9050919050565b61444281614427565b811461444d57600080fd5b50565b60008135905061445f81614439565b92915050565b61446e816143c4565b811461447957600080fd5b50565b60008135905061448b81614465565b92915050565b600080604083850312156144a8576144a7614402565b5b60006144b685828601614450565b92505060206144c78582860161447c565b9150509250929050565b60008115159050919050565b6144e6816144d1565b82525050565b600060208201905061450160008301846144dd565b92915050565b61451081614427565b82525050565b600060808201905061452b60008301876143ce565b61453860208301866143ce565b61454560408301856144dd565b6145526060830184614507565b95945050505050565b60008060006060848603121561457457614573614402565b5b600061458286828701614450565b935050602061459386828701614450565b92505060406145a48682870161447c565b9150509250925092565b6000602082840312156145c4576145c3614402565b5b60006145d28482850161447c565b91505092915050565b60006020820190506145f06000830184614507565b92915050565b600060ff82169050919050565b61460c816145f6565b82525050565b60006020820190506146276000830184614603565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61466281614427565b82525050565b60006146748383614659565b60208301905092915050565b6000602082019050919050565b60006146988261462d565b6146a28185614638565b93506146ad83614649565b8060005b838110156146de5781516146c58882614668565b97506146d083614680565b9250506001810190506146b1565b5085935050505092915050565b60006020820190508181036000830152614705818461468d565b905092915050565b6000819050919050565b600061473261472d61472884614407565b61470d565b614407565b9050919050565b600061474482614717565b9050919050565b600061475682614739565b9050919050565b6147668161474b565b82525050565b6000602082019050614781600083018461475d565b92915050565b60006020828403121561479d5761479c614402565b5b60006147ab84828501614450565b91505092915050565b60006040820190506147c960008301856143ce565b6147d660208301846143ce565b9392505050565b600080604083850312156147f4576147f3614402565b5b600061480285828601614450565b925050602061481385828601614450565b9150509250929050565b600061482882614739565b9050919050565b6148388161481d565b82525050565b6000602082019050614853600083018461482f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806148a057607f821691505b6020821081036148b3576148b2614859565b5b50919050565b60006040820190506148ce6000830185614507565b6148db6020830184614507565b9392505050565b6000815190506148f181614465565b92915050565b60006020828403121561490d5761490c614402565b5b600061491b848285016148e2565b91505092915050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b600061495a60028361431d565b915061496582614924565b602082019050919050565b600060208201905081810360008301526149898161494d565b9050919050565b7f4536000000000000000000000000000000000000000000000000000000000000600082015250565b60006149c660028361431d565b91506149d182614990565b602082019050919050565b600060208201905081810360008301526149f5816149b9565b9050919050565b7f4538000000000000000000000000000000000000000000000000000000000000600082015250565b6000614a3260028361431d565b9150614a3d826149fc565b602082019050919050565b60006020820190508181036000830152614a6181614a25565b9050919050565b7f4539000000000000000000000000000000000000000000000000000000000000600082015250565b6000614a9e60028361431d565b9150614aa982614a68565b602082019050919050565b60006020820190508181036000830152614acd81614a91565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000614b3060268361431d565b9150614b3b82614ad4565b604082019050919050565b60006020820190508181036000830152614b5f81614b23565b9050919050565b6000819050919050565b6000614b8b614b86614b8184614b66565b61470d565b6143c4565b9050919050565b614b9b81614b70565b82525050565b600060c082019050614bb66000830189614507565b614bc360208301886143ce565b614bd06040830187614b92565b614bdd6060830186614b92565b614bea6080830185614507565b614bf760a08301846143ce565b979650505050505050565b600080600060608486031215614c1b57614c1a614402565b5b6000614c29868287016148e2565b9350506020614c3a868287016148e2565b9250506040614c4b868287016148e2565b9150509250925092565b7f4661696c656420746f20616464206c6971756964697479000000000000000000600082015250565b6000614c8b60178361431d565b9150614c9682614c55565b602082019050919050565b60006020820190508181036000830152614cba81614c7e565b9050919050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e730000000000600082015250565b6000614cf7601b8361431d565b9150614d0282614cc1565b602082019050919050565b60006020820190508181036000830152614d2681614cea565b9050919050565b6000604082019050614d426000830185614507565b614d4f60208301846143ce565b9392505050565b614d5f816144d1565b8114614d6a57600080fd5b50565b600081519050614d7c81614d56565b92915050565b600060208284031215614d9857614d97614402565b5b6000614da684828501614d6d565b91505092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000614de560148361431d565b9150614df082614daf565b602082019050919050565b60006020820190508181036000830152614e1481614dd8565b9050919050565b7f5231000000000000000000000000000000000000000000000000000000000000600082015250565b6000614e5160028361431d565b9150614e5c82614e1b565b602082019050919050565b60006020820190508181036000830152614e8081614e44565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ec1826143c4565b9150614ecc836143c4565b9250828201905080821115614ee457614ee3614e87565b5b92915050565b7f4537000000000000000000000000000000000000000000000000000000000000600082015250565b6000614f2060028361431d565b9150614f2b82614eea565b602082019050919050565b60006020820190508181036000830152614f4f81614f13565b9050919050565b6000614f61826143c4565b9150614f6c836143c4565b9250828202614f7a816143c4565b91508282048414831517614f9157614f90614e87565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614fd2826143c4565b9150614fdd836143c4565b925082614fed57614fec614f98565b5b828204905092915050565b6000615003826143c4565b915061500e836143c4565b925082820390508181111561502657615025614e87565b5b92915050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b600061506260028361431d565b915061506d8261502c565b602082019050919050565b6000602082019050818103600083015261509181615055565b9050919050565b6000815190506150a781614439565b92915050565b6000602082840312156150c3576150c2614402565b5b60006150d184828501615098565b91505092915050565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b600061511060028361431d565b915061511b826150da565b602082019050919050565b6000602082019050818103600083015261513f81615103565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b61516981615146565b811461517457600080fd5b50565b60008151905061518681615160565b92915050565b600063ffffffff82169050919050565b6151a58161518c565b81146151b057600080fd5b50565b6000815190506151c28161519c565b92915050565b6000806000606084860312156151e1576151e0614402565b5b60006151ef86828701615177565b935050602061520086828701615177565b9250506040615211868287016151b3565b9150509250925092565b7f4531310000000000000000000000000000000000000000000000000000000000600082015250565b600061525160038361431d565b915061525c8261521b565b602082019050919050565b6000602082019050818103600083015261528081615244565b9050919050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b60006152bd60028361431d565b91506152c882615287565b602082019050919050565b600060208201905081810360008301526152ec816152b0565b9050919050565b7f4530000000000000000000000000000000000000000000000000000000000000600082015250565b600061532960028361431d565b9150615334826152f3565b602082019050919050565b600060208201905081810360008301526153588161531c565b9050919050565b60008160e01c9050919050565b600060033d111561538b5760046000803e61538860005161535f565b90505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6153c682614358565b810181811067ffffffffffffffff821117156153e5576153e461538e565b5b80604052505050565b600060443d1061547b576154006143f8565b60043d036004823e80513d602482011167ffffffffffffffff8211171561542857505061547b565b808201805167ffffffffffffffff811115615446575050505061547b565b80602083010160043d03850181111561546357505050505061547b565b615472826020018501866153bd565b82955050505050505b90565b600081905092915050565b7f4175746f2070726f63657373206661696c65643a200000000000000000000000600082015250565b60006154bf60158361547e565b91506154ca82615489565b601582019050919050565b60006154e082614312565b6154ea818561547e565b93506154fa81856020860161432e565b80840191505092915050565b6000615511826154b2565b915061551d82846154d5565b915081905092915050565b600061553482846154d5565b915081905092915050565b7f556e6b6e6f776e206572726f7220696e206175746f6d617469632070726f636560008201527f7373696e67000000000000000000000000000000000000000000000000000000602082015250565b600061559b60258361547e565b91506155a68261553f565b602582019050919050565b60006155bc8261558e565b9150819050919050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b60006155fc60028361431d565b9150615607826155c6565b602082019050919050565b6000602082019050818103600083015261562b816155ef565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a08201905061567660008301886143ce565b6156836020830187614b92565b8181036040830152615695818661468d565b90506156a46060830185614507565b6156b160808301846143ce565b9695505050505050565b7f556e6b6e6f776e206572726f7220696e20737761700000000000000000000000600082015250565b60006156f160158361547e565b91506156fc826156bb565b601582019050919050565b6000615712826156e4565b9150819050919050565b60006060820190506157316000830186614507565b61573e6020830185614507565b61574b60408301846143ce565b949350505050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000615789600f8361431d565b915061579482615753565b602082019050919050565b600060208201905081810360008301526157b88161577c565b9050919050565b7f4e6f20534f4e4943207265636569766564206166746572207377617000000000600082015250565b60006157f5601c8361547e565b9150615800826157bf565b601c82019050919050565b6000615816826157e8565b9150819050919050565b600061010082019050615836600083018b614507565b615843602083018a614507565b61585060408301896143ce565b61585d60608301886143ce565b61586a6080830187614b92565b61587760a0830186614b92565b61588460c0830185614507565b61589160e08301846143ce565b9998505050505050505050565b7f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000600082015250565b60006158d4601d8361547e565b91506158df8261589e565b601d82019050919050565b60006158f5826158c7565b9150819050919050565b600061590a826143c4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361593c5761593b614e87565b5b600182019050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b600061597d60028361431d565b915061598882615947565b602082019050919050565b600060208201905081810360008301526159ac81615970565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220da7c2bc8b5653773f4ef97a67515ebef1cc9d2d2f87bb87f9295fe5e0d154e6364736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101f25760003560e01c80637136982b1161010d578063a9059cbb116100a0578063dd62ed3e1161006f578063dd62ed3e146106bd578063ed9cacfe146106fa578063f2fde38b14610711578063f4ea42de1461073a578063fd7c9fab14610777576101f9565b8063a9059cbb14610603578063c026d93a14610640578063c0d7865514610657578063d4d7b19a14610680576101f9565b80638129fc1c116100dc5780638129fc1c1461056a5780638da5cb5b1461058157806395d89b41146105ac5780639df93f6c146105d7576101f9565b80637136982b146104d457806379304bec146104ff5780637ac84fc114610528578063808a54571461053f576101f9565b8063397883d2116101855780635d76b04c116101545780635d76b04c146104165780635fe8e7cc1461044157806362b6327a1461046c57806370a0823114610497576101f9565b8063397883d21461038f57806341a22cc2146103a6578063461a3a95146103c257806357376198146103ed576101f9565b80631b26c80d116101c15780631b26c80d146102bc57806323b872dd146102ea5780632a11ced014610327578063313ce56714610364576101f9565b806306fdde03146101fe57806308dee2b414610229578063095ea7b31461025457806318160ddd14610291576101f9565b366101f957005b600080fd5b34801561020a57600080fd5b506102136107a2565b60405161022091906143a2565b60405180910390f35b34801561023557600080fd5b5061023e610834565b60405161024b91906143dd565b60405180910390f35b34801561026057600080fd5b5061027b60048036038101906102769190614491565b61083e565b60405161028891906144ec565b60405180910390f35b34801561029d57600080fd5b506102a661085a565b6040516102b391906143dd565b60405180910390f35b3480156102c857600080fd5b506102d1610864565b6040516102e19493929190614516565b60405180910390f35b3480156102f657600080fd5b50610311600480360381019061030c919061455b565b6109b7565b60405161031e91906144ec565b60405180910390f35b34801561033357600080fd5b5061034e600480360381019061034991906145ae565b6109df565b60405161035b91906145db565b60405180910390f35b34801561037057600080fd5b50610379610a1e565b6040516103869190614612565b60405180910390f35b34801561039b57600080fd5b506103a4610a27565b005b6103c060048036038101906103bb91906145ae565b610b60565b005b3480156103ce57600080fd5b506103d7610e72565b6040516103e491906145db565b60405180910390f35b3480156103f957600080fd5b50610414600480360381019061040f9190614491565b610e98565b005b34801561042257600080fd5b5061042b610f98565b60405161043891906143dd565b60405180910390f35b34801561044d57600080fd5b50610456610fa2565b60405161046391906146eb565b60405180910390f35b34801561047857600080fd5b50610481611030565b60405161048e919061476c565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b99190614787565b611056565b6040516104cb91906143dd565b60405180910390f35b3480156104e057600080fd5b506104e961109e565b6040516104f691906143dd565b60405180910390f35b34801561050b57600080fd5b50610526600480360381019061052191906145ae565b6110ab565b005b34801561053457600080fd5b5061053d61117d565b005b34801561054b57600080fd5b506105546113a2565b60405161056191906145db565b60405180910390f35b34801561057657600080fd5b5061057f6113c8565b005b34801561058d57600080fd5b50610596611b10565b6040516105a391906145db565b60405180910390f35b3480156105b857600080fd5b506105c1611b3a565b6040516105ce91906143a2565b60405180910390f35b3480156105e357600080fd5b506105ec611bcc565b6040516105fa9291906147b4565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190614491565b611d8c565b60405161063791906144ec565b60405180910390f35b34801561064c57600080fd5b50610655611da8565b005b34801561066357600080fd5b5061067e60048036038101906106799190614787565b6120fb565b005b34801561068c57600080fd5b506106a760048036038101906106a29190614787565b6121b6565b6040516106b491906144ec565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df91906147dd565b6121d6565b6040516106f191906143dd565b60405180910390f35b34801561070657600080fd5b5061070f61225d565b005b34801561071d57600080fd5b5061073860048036038101906107339190614787565b612539565b005b34801561074657600080fd5b50610761600480360381019061075c91906145ae565b6125bc565b60405161076e91906143dd565b60405180910390f35b34801561078357600080fd5b5061078c61266e565b604051610799919061483e565b60405180910390f35b6060600380546107b190614888565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd90614888565b801561082a5780601f106107ff5761010080835404028352916020019161082a565b820191906000526020600020905b81548152906001019060200180831161080d57829003601f168201915b5050505050905090565b6000600d54905090565b60008033905061084f818585612694565b600191505092915050565b6000600254905090565b60008060008061087330611056565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016108f29291906148b9565b602060405180830381865afa15801561090f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093391906148f7565b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935093509350935090919293565b6000803390506109c8858285612828565b6109d38585856128b4565b60019150509392505050565b600c81815481106109ef57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b610a2f613043565b6000600d541180610a4257506000600e54115b610a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7890614970565b60405180910390fd5b6000600c8054905011610ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac0906149dc565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610b1157600080fd5b505af1925050508015610b22575060015b610b5d57600e54600d547f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd60405160405180910390a3610b5e565b5b565b610b68613043565b60003411610bab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba290614a48565b60405180910390fd5b60008111610bee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be590614ab4565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610c2891906145db565b602060405180830381865afa158015610c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6991906148f7565b1015610caa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca190614b46565b60405180910390fd5b610cd730600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683612694565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71934308460008033426040518863ffffffff1660e01b8152600401610d3e96959493929190614ba1565b60606040518083038185885af193505050508015610d7a57506040513d601f19601f82011682018060405250810190610d779190614c02565b60015b610de757610dac30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000612694565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dde90614ca1565b60405180910390fd5b50505034817f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60405160405180910390a360004790506000811115610e6e573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e6c573d6000803e3d6000fd5b505b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ea0613043565b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0590614d0d565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610f32611b10565b836040518363ffffffff1660e01b8152600401610f50929190614d2d565b6020604051808303816000875af1158015610f6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f939190614d82565b505050565b6000600e54905090565b6060600c80548060200260200160405190810160405280929190818152602001828054801561102657602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610fdc575b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600c80549050905090565b6110b3613043565b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110ed91906145db565b602060405180830381865afa15801561110a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112e91906148f7565b101561116f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116690614dfb565b60405180910390fd5b61117a3033836128b4565b50565b6002600554036111c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b990614e67565b60405180910390fd5b60026005819055506000600d5411806111dd57506000600e54115b61121c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121390614970565b60405180910390fd5b6000600c8054905011611264576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125b906149dc565b60405180910390fd5b6000600e54600d546112769190614eb6565b905068056bc75e2d631000008110156112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90614f36565b60405180910390fd5b600e54600d547f6f85944d879d05feade37c54fd09ce05482d063b08c263185a9400ecb991e5cd60405160405180910390a36000600d5490506000600e5490506000600d819055506000600e81905550600061131f846130ba565b90506000811115611385576000606460198361133b9190614f56565b6113459190614fc7565b9050600081836113559190614ff8565b9050600082111561136b5761136a8583613737565b5b600081111561137e5761137d81613a33565b5b5050611394565b82600d8190555081600e819055505b505050506001600581905550565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6113d0613043565b600f60009054906101000a900460ff1615611420576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141790615078565b60405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e6a4390530600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016114ba9291906148b9565b602060405180830381865afa1580156114d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114fb91906150ad565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361169457600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016116109291906148b9565b6020604051808303816000875af115801561162f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165391906150ad565b600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171c90614970565b60405180910390fd5b61177230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611811929190614d2d565b6020604051808303816000875af1158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190614d82565b611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90615126565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611932929190614d2d565b6020604051808303816000875af1158015611951573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119759190614d82565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016119f3929190614d2d565b6020604051808303816000875af1158015611a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a369190614d82565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f4ca662a5f1f012e4d740b256559dce10a6b72cdec96be0142f5e2eb49dd37a6e60405160405180910390a4565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611b4990614888565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7590614888565b8015611bc25780601f10611b9757610100808354040283529160200191611bc2565b820191906000526020600020905b815481529060010190602001808311611ba557829003601f168201915b5050505050905090565b600080600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611c3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6391906151c8565b50915091506000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfb91906150ad565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d5e57826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff1694509450505050611d88565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16945094505050505b9091565b600080339050611d9d8185856128b4565b600191505092915050565b611db0613043565b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611e0f9291906148b9565b602060405180830381865afa158015611e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5091906148f7565b905069d3c21bcecceda1000000811015611e9c57611e9b30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1669d3c21bcecceda1000000612694565b5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611ef991906145db565b602060405180830381865afa158015611f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3a91906148f7565b905060008111156120f7576000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401611fc69291906148b9565b602060405180830381865afa158015611fe3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200791906148f7565b9050818110156120f557600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016120b0929190614d2d565b6020604051808303816000875af11580156120cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f39190614d82565b505b505b5050565b612103613043565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612172576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216990615267565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612265613043565b6122b230600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612351929190614d2d565b6020604051808303816000875af1158015612370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123949190614d82565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612434929190614d2d565b6020604051808303816000875af192505050801561247057506040513d601f19601f8201168201806040525081019061246d9190614d82565b60015b1561247757505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016124f4929190614d2d565b6020604051808303816000875af192505050801561253057506040513d601f19601f8201168201806040525081019061252d9190614d82565b60015b1561253757505b565b612541613043565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036125b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a7906152d3565b60405180910390fd5b6125b981613c27565b50565b60008060006125c9611bcc565b9150915060008214806125dc5750600081145b156125ec57600092505050612669565b60006103e5856125fc9190614f56565b90506000828261260c9190614f56565b90506000826103e88661261f9190614f56565b6126299190614eb6565b9050600081836126399190614fc7565b90506064601e606461264b9190614ff8565b826126569190614f56565b6126609190614fc7565b96505050505050505b919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126fe5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61273d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273490615126565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161281b91906143dd565b60405180910390a3505050565b600061283484846121d6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146128ae57818110156128a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289790614970565b60405180910390fd5b6128ad8484848403612694565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561291e5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61295d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129549061533f565b60405180910390fd5b612965611b10565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806129d057506129a1611b10565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a0657503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80612a3c57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80612a545750600f60009054906101000a900460ff16155b15612a7b57612a64838383613ced565b612a6d83613f2e565b612a7682613f2e565b61303e565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480612b265750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b9050801561301e5760006064600584612b3f9190614f56565b612b499190614fc7565b905060008184612b599190614ff8565b9050612b66868683613ced565b612b71863084613ced565b6064601983612b809190614f56565b612b8a9190614fc7565b600d6000828254612b9b9190614eb6565b925050819055506064601983612bb19190614f56565b612bbb9190614fc7565b600e6000828254612bcc9190614eb6565b9250508190555068056bc75e2d63100000600d54101580612bf8575068056bc75e2d63100000600e5410155b8015612c0957506000600c80549050115b1561301757612c5b30600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612cfa929190614d2d565b6020604051808303816000875af1158015612d19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3d9190614d82565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612ddd929190614d2d565b6020604051808303816000875af1158015612dfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e209190614d82565b503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612e9e929190614d2d565b6020604051808303816000875af1158015612ebd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee19190614d82565b503073ffffffffffffffffffffffffffffffffffffffff16637ac84fc16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612f2a57600080fd5b505af1925050508015612f3b575060015b61301557612f4761536c565b806308c379a003612fcd5750612f5b6153ee565b80612f665750612fcf565b80604051602001612f779190615506565b604051602081830303815290604052604051612f939190615528565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a250613010565b505b604051612fdb906155b1565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a25b613016565b5b5b505061302a565b613029848484613ced565b5b61303384613f2e565b61303c83613f2e565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff16613062611b10565b73ffffffffffffffffffffffffffffffffffffffff16146130b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130af90615612565b60405180910390fd5b565b60008082036130cc5760009050613732565b61311930600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016131b8929190614d2d565b6020604051808303816000875af11580156131d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fb9190614d82565b506000600267ffffffffffffffff8111156132195761321861538e565b5b6040519080825280602002602001820160405280156132475781602001602082028036833780820191505090505b509050308160008151811061325f5761325e615632565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106132d0576132cf615632565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060003390506000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161336c91906145db565b602060405180830381865afa158015613389573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ad91906148f7565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635c11d795866000868661012c426134009190614eb6565b6040518663ffffffff1660e01b8152600401613420959493929190615661565b600060405180830381600087803b15801561343a57600080fd5b505af192505050801561344b575060015b6135135761345761536c565b806308c379a0036134c5575061346b6153ee565b8061347657506134c7565b806040516134849190615528565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a26000945050505050613732565b505b6040516134d390615707565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009350505050613732565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b815260040161357091906145db565b602060405180830381865afa15801561358d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b191906148f7565b9050600082826135c19190614ff8565b905060008111156136e857600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd8530846040518463ffffffff1660e01b815260040161362b9392919061571c565b6020604051808303816000875af115801561364a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061366e9190614d82565b6136ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136a49061579f565b60405180910390fd5b80877fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc0160405160405180910390a38095505050505050613732565b6040516136f49061580b565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a26000955050505050505b919050565b60008214806137465750600081145b613a2f5761377730600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612694565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016137f6929190614d2d565b6020604051808303816000875af1158015613815573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138399190614d82565b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e8e3370030600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685856000803061012c426138b09190614eb6565b6040518963ffffffff1660e01b81526004016138d3989796959493929190615820565b6060604051808303816000875af192505050801561390f57506040513d601f19601f8201168201806040525081019061390c9190614c02565b60015b6139fc5761391b61536c565b806308c379a00361399b575061392f6153ee565b8061393a575061399d565b806040516139489190615528565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a282600d600082825461398e9190614eb6565b92505081905550506139f7565b505b6040516139a9906158ea565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a281600d60008282546139ef9190614eb6565b925050819055505b613a2e565b50505080827f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b60405160405180910390a35b5b5050565b6000811480613a4757506000600c80549050145b613c24576000600c8054905082613a5e9190614fc7565b905060008103613a6e5750613c24565b60005b600c8054905081108015613a855750606481105b15613bee57600073ffffffffffffffffffffffffffffffffffffffff16600c8281548110613ab657613ab5615632565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613bda57600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600c8381548110613b4e57613b4d615632565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b8152600401613b97929190614d2d565b6020604051808303816000875af1925050508015613bd357506040513d601f19601f82011682018060405250810190613bd09190614d82565b60015b15613bdb57505b5b8080613be6906158ff565b915050613a71565b50600c80549050827f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21760405160405180910390a3505b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015613d575750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b613d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d8d9061533f565b60405180910390fd5b613da1838383614178565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e1e90615993565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613f1591906143dd565b60405180910390a3613f2884848461417d565b50505050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015613fb857503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b15614175576000613fc882611056565b90506000600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050678ac7230489e800008210158015614031575080155b156140f6576001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600c839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614172565b678ac7230489e800008210801561410a5750805b15614171576000600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061417083614182565b5b5b50505b50565b505050565b505050565b60005b600c8054905081101561430e578173ffffffffffffffffffffffffffffffffffffffff16600c82815481106141bd576141bc615632565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036142fb57600c6001600c805490506142179190614ff8565b8154811061422857614227615632565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600c828154811061426757614266615632565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c8054806142c1576142c06159b3565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561430e565b8080614306906158ff565b915050614185565b5050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561434c578082015181840152602081019050614331565b60008484015250505050565b6000601f19601f8301169050919050565b600061437482614312565b61437e818561431d565b935061438e81856020860161432e565b61439781614358565b840191505092915050565b600060208201905081810360008301526143bc8184614369565b905092915050565b6000819050919050565b6143d7816143c4565b82525050565b60006020820190506143f260008301846143ce565b92915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061443282614407565b9050919050565b61444281614427565b811461444d57600080fd5b50565b60008135905061445f81614439565b92915050565b61446e816143c4565b811461447957600080fd5b50565b60008135905061448b81614465565b92915050565b600080604083850312156144a8576144a7614402565b5b60006144b685828601614450565b92505060206144c78582860161447c565b9150509250929050565b60008115159050919050565b6144e6816144d1565b82525050565b600060208201905061450160008301846144dd565b92915050565b61451081614427565b82525050565b600060808201905061452b60008301876143ce565b61453860208301866143ce565b61454560408301856144dd565b6145526060830184614507565b95945050505050565b60008060006060848603121561457457614573614402565b5b600061458286828701614450565b935050602061459386828701614450565b92505060406145a48682870161447c565b9150509250925092565b6000602082840312156145c4576145c3614402565b5b60006145d28482850161447c565b91505092915050565b60006020820190506145f06000830184614507565b92915050565b600060ff82169050919050565b61460c816145f6565b82525050565b60006020820190506146276000830184614603565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61466281614427565b82525050565b60006146748383614659565b60208301905092915050565b6000602082019050919050565b60006146988261462d565b6146a28185614638565b93506146ad83614649565b8060005b838110156146de5781516146c58882614668565b97506146d083614680565b9250506001810190506146b1565b5085935050505092915050565b60006020820190508181036000830152614705818461468d565b905092915050565b6000819050919050565b600061473261472d61472884614407565b61470d565b614407565b9050919050565b600061474482614717565b9050919050565b600061475682614739565b9050919050565b6147668161474b565b82525050565b6000602082019050614781600083018461475d565b92915050565b60006020828403121561479d5761479c614402565b5b60006147ab84828501614450565b91505092915050565b60006040820190506147c960008301856143ce565b6147d660208301846143ce565b9392505050565b600080604083850312156147f4576147f3614402565b5b600061480285828601614450565b925050602061481385828601614450565b9150509250929050565b600061482882614739565b9050919050565b6148388161481d565b82525050565b6000602082019050614853600083018461482f565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806148a057607f821691505b6020821081036148b3576148b2614859565b5b50919050565b60006040820190506148ce6000830185614507565b6148db6020830184614507565b9392505050565b6000815190506148f181614465565b92915050565b60006020828403121561490d5761490c614402565b5b600061491b848285016148e2565b91505092915050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b600061495a60028361431d565b915061496582614924565b602082019050919050565b600060208201905081810360008301526149898161494d565b9050919050565b7f4536000000000000000000000000000000000000000000000000000000000000600082015250565b60006149c660028361431d565b91506149d182614990565b602082019050919050565b600060208201905081810360008301526149f5816149b9565b9050919050565b7f4538000000000000000000000000000000000000000000000000000000000000600082015250565b6000614a3260028361431d565b9150614a3d826149fc565b602082019050919050565b60006020820190508181036000830152614a6181614a25565b9050919050565b7f4539000000000000000000000000000000000000000000000000000000000000600082015250565b6000614a9e60028361431d565b9150614aa982614a68565b602082019050919050565b60006020820190508181036000830152614acd81614a91565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000614b3060268361431d565b9150614b3b82614ad4565b604082019050919050565b60006020820190508181036000830152614b5f81614b23565b9050919050565b6000819050919050565b6000614b8b614b86614b8184614b66565b61470d565b6143c4565b9050919050565b614b9b81614b70565b82525050565b600060c082019050614bb66000830189614507565b614bc360208301886143ce565b614bd06040830187614b92565b614bdd6060830186614b92565b614bea6080830185614507565b614bf760a08301846143ce565b979650505050505050565b600080600060608486031215614c1b57614c1a614402565b5b6000614c29868287016148e2565b9350506020614c3a868287016148e2565b9250506040614c4b868287016148e2565b9150509250925092565b7f4661696c656420746f20616464206c6971756964697479000000000000000000600082015250565b6000614c8b60178361431d565b9150614c9682614c55565b602082019050919050565b60006020820190508181036000830152614cba81614c7e565b9050919050565b7f43616e6e6f7420726573637565204641524d455220746f6b656e730000000000600082015250565b6000614cf7601b8361431d565b9150614d0282614cc1565b602082019050919050565b60006020820190508181036000830152614d2681614cea565b9050919050565b6000604082019050614d426000830185614507565b614d4f60208301846143ce565b9392505050565b614d5f816144d1565b8114614d6a57600080fd5b50565b600081519050614d7c81614d56565b92915050565b600060208284031215614d9857614d97614402565b5b6000614da684828501614d6d565b91505092915050565b7f496e73756666696369656e742062616c616e6365000000000000000000000000600082015250565b6000614de560148361431d565b9150614df082614daf565b602082019050919050565b60006020820190508181036000830152614e1481614dd8565b9050919050565b7f5231000000000000000000000000000000000000000000000000000000000000600082015250565b6000614e5160028361431d565b9150614e5c82614e1b565b602082019050919050565b60006020820190508181036000830152614e8081614e44565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614ec1826143c4565b9150614ecc836143c4565b9250828201905080821115614ee457614ee3614e87565b5b92915050565b7f4537000000000000000000000000000000000000000000000000000000000000600082015250565b6000614f2060028361431d565b9150614f2b82614eea565b602082019050919050565b60006020820190508181036000830152614f4f81614f13565b9050919050565b6000614f61826143c4565b9150614f6c836143c4565b9250828202614f7a816143c4565b91508282048414831517614f9157614f90614e87565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614fd2826143c4565b9150614fdd836143c4565b925082614fed57614fec614f98565b5b828204905092915050565b6000615003826143c4565b915061500e836143c4565b925082820390508181111561502657615025614e87565b5b92915050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b600061506260028361431d565b915061506d8261502c565b602082019050919050565b6000602082019050818103600083015261509181615055565b9050919050565b6000815190506150a781614439565b92915050565b6000602082840312156150c3576150c2614402565b5b60006150d184828501615098565b91505092915050565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b600061511060028361431d565b915061511b826150da565b602082019050919050565b6000602082019050818103600083015261513f81615103565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b61516981615146565b811461517457600080fd5b50565b60008151905061518681615160565b92915050565b600063ffffffff82169050919050565b6151a58161518c565b81146151b057600080fd5b50565b6000815190506151c28161519c565b92915050565b6000806000606084860312156151e1576151e0614402565b5b60006151ef86828701615177565b935050602061520086828701615177565b9250506040615211868287016151b3565b9150509250925092565b7f4531310000000000000000000000000000000000000000000000000000000000600082015250565b600061525160038361431d565b915061525c8261521b565b602082019050919050565b6000602082019050818103600083015261528081615244565b9050919050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b60006152bd60028361431d565b91506152c882615287565b602082019050919050565b600060208201905081810360008301526152ec816152b0565b9050919050565b7f4530000000000000000000000000000000000000000000000000000000000000600082015250565b600061532960028361431d565b9150615334826152f3565b602082019050919050565b600060208201905081810360008301526153588161531c565b9050919050565b60008160e01c9050919050565b600060033d111561538b5760046000803e61538860005161535f565b90505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6153c682614358565b810181811067ffffffffffffffff821117156153e5576153e461538e565b5b80604052505050565b600060443d1061547b576154006143f8565b60043d036004823e80513d602482011167ffffffffffffffff8211171561542857505061547b565b808201805167ffffffffffffffff811115615446575050505061547b565b80602083010160043d03850181111561546357505050505061547b565b615472826020018501866153bd565b82955050505050505b90565b600081905092915050565b7f4175746f2070726f63657373206661696c65643a200000000000000000000000600082015250565b60006154bf60158361547e565b91506154ca82615489565b601582019050919050565b60006154e082614312565b6154ea818561547e565b93506154fa81856020860161432e565b80840191505092915050565b6000615511826154b2565b915061551d82846154d5565b915081905092915050565b600061553482846154d5565b915081905092915050565b7f556e6b6e6f776e206572726f7220696e206175746f6d617469632070726f636560008201527f7373696e67000000000000000000000000000000000000000000000000000000602082015250565b600061559b60258361547e565b91506155a68261553f565b602582019050919050565b60006155bc8261558e565b9150819050919050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b60006155fc60028361431d565b9150615607826155c6565b602082019050919050565b6000602082019050818103600083015261562b816155ef565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a08201905061567660008301886143ce565b6156836020830187614b92565b8181036040830152615695818661468d565b90506156a46060830185614507565b6156b160808301846143ce565b9695505050505050565b7f556e6b6e6f776e206572726f7220696e20737761700000000000000000000000600082015250565b60006156f160158361547e565b91506156fc826156bb565b601582019050919050565b6000615712826156e4565b9150819050919050565b60006060820190506157316000830186614507565b61573e6020830185614507565b61574b60408301846143ce565b949350505050565b7f5472616e73666572206661696c65640000000000000000000000000000000000600082015250565b6000615789600f8361431d565b915061579482615753565b602082019050919050565b600060208201905081810360008301526157b88161577c565b9050919050565b7f4e6f20534f4e4943207265636569766564206166746572207377617000000000600082015250565b60006157f5601c8361547e565b9150615800826157bf565b601c82019050919050565b6000615816826157e8565b9150819050919050565b600061010082019050615836600083018b614507565b615843602083018a614507565b61585060408301896143ce565b61585d60608301886143ce565b61586a6080830187614b92565b61587760a0830186614b92565b61588460c0830185614507565b61589160e08301846143ce565b9998505050505050505050565b7f556e6b6e6f776e206572726f7220696e206164644c6971756964697479000000600082015250565b60006158d4601d8361547e565b91506158df8261589e565b601d82019050919050565b60006158f5826158c7565b9150819050919050565b600061590a826143c4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361593c5761593b614e87565b5b600182019050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b600061597d60028361431d565b915061598882615947565b602082019050919050565b600060208201905081810360008301526159ac81615970565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220da7c2bc8b5653773f4ef97a67515ebef1cc9d2d2f87bb87f9295fe5e0d154e6364736f6c63430008130033

Deployed Bytecode Sourcemap

8450:17623:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2810:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22848:118;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3677:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3104:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24255:308;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;3875:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9477:24;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3012:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23147:378;;;;;;;;;;;;;:::i;:::-;;21106:993;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9337:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22282:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22974:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20932:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9239:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3211:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20822:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22531:266;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15785:1546;;;;;;;;;;;;;:::i;:::-;;9369:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10910:940;;;;;;;;;;;;;:::i;:::-;;1789:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2909:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24571:427;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;3337:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23533:691;;;;;;;;;;;;;:::i;:::-;;22107:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9430:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3527:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25627:406;;;;;;;;;;;;;:::i;:::-;;1992:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25006:595;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9287:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2810:91;2855:13;2888:5;2881:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2810:91;:::o;22848:118::-;22908:7;22935:23;;22928:30;;22848:118;:::o;3677:190::-;3751:4;3768:13;3784:10;3768:26;;3805:32;3814:5;3821:7;3830:6;3805:8;:32::i;:::-;3855:4;3848:11;;;3677:190;;;;:::o;3104:99::-;3156:7;3183:12;;3176:19;;3104:99;:::o;24255:308::-;24299:7;24308;24317:4;24323:7;24365:24;24383:4;24365:9;:24::i;:::-;24411:10;;;;;;;;;;;24404:28;;;24441:4;24456:16;;;;;;;;;;;24404:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24514:1;24489:27;;:13;;;;;;;;;;;:27;;;;24531:13;;;;;;;;;;;24343:212;;;;;;;;24255:308;;;;:::o;3875:250::-;3963:4;3980:15;3998:10;3980:28;;4019:38;4035:4;4041:7;4050:6;4019:15;:38::i;:::-;4068:27;4078:4;4084:2;4088:6;4068:9;:27::i;:::-;4113:4;4106:11;;;3875:250;;;;;:::o;9477:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3012:84::-;3061:5;3086:2;3079:9;;3012:84;:::o;23147:378::-;1748:13;:11;:13::i;:::-;23240:1:::1;23214:23;;:27;:56;;;;23269:1;23245:21;;:25;23214:56;23206:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23313:1;23296:7;:14;;;;:18;23288:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;23336:4;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;23332:186;;23484:21;;23459:23;;23444:62;;;;;;;;;;23332:186;;;;23147:378::o:0;21106:993::-;1748:13;:11;:13::i;:::-;21214:1:::1;21202:9;:13;21194:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;21255:1;21241:11;:15;21233:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;21356:11;21321:4;21306:31;;;21346:4;21306:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;21284:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;21446:63;21463:4;21478:16;;;;;;;;;;;21497:11;21446:8;:63::i;:::-;21526:16;;;;;;;;;;;:32;;;21566:9;21599:4;21619:11;21645:1;21661::::0;21677:10:::1;21702:15;21526:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;21522:412;;21821:53;21838:4;21853:16;;;;;;;;;;;21872:1;21821:8;:53::i;:::-;21889:33;;;;;;;;;;:::i;:::-;;;;;;;;21522:412;;;;21777:9;21764:11;21749:38;;;;;;;;;;21946:20;21969:21;21946:44;;22020:1;22005:12;:16;22001:91;;;22046:10;22038:28;;:42;22067:12;22038:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22001:91;21183:916;21106:993:::0;:::o;9337:25::-;;;;;;;;;;;;;:::o;22282:208::-;1748:13;:11;:13::i;:::-;22393:4:::1;22375:23;;:6;:23;;::::0;22367:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22448:6;22441:23;;;22465:7;:5;:7::i;:::-;22474;22441:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22282:208:::0;;:::o;22974:114::-;23032:7;23059:21;;23052:28;;22974:114;:::o;20932:96::-;20977:16;21013:7;21006:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20932:96;:::o;9239:41::-;;;;;;;;;;;;;:::o;3211:118::-;3276:7;3303:9;:18;3313:7;3303:18;;;;;;;;;;;;;;;;3296:25;;3211:118;;;:::o;20822:98::-;20871:7;20898;:14;;;;20891:21;;20822:98;:::o;22531:266::-;1748:13;:11;:13::i;:::-;22680:6:::1;22645:4;22630:31;;;22670:4;22630:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;22608:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;22745:44;22763:4;22770:10;22782:6;22745:9;:44::i;:::-;22531:266:::0;:::o;15785:1546::-;1042:1;1188:7;;:19;1180:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;1042:1;1225:7;:18;;;;15890:1:::1;15864:23;;:27;:56;;;;15919:1;15895:21;;:25;15864:56;15856:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15963:1;15946:7;:14;;;;:18;15938:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;15992:19;16040:21;;16014:23;;:47;;;;:::i;:::-;15992:69;;8907:12;16080:11;:37;;16072:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;16190:21;;16165:23;;16150:62;;;;;;;;;;16259:27;16289:23;;16259:53;;16323:25;16351:21;;16323:49;;16409:1;16383:23;:27;;;;16445:1;16421:21;:25;;;;16507:21;16531:32;16551:11;16531:19;:32::i;:::-;16507:56;;16594:1;16578:13;:17;16574:750;;;16655:25;16724:3;9086:2;16684:13;:36;;;;:::i;:::-;16683:44;;;;:::i;:::-;16655:72;;16742:23;16784:17;16768:13;:33;;;;:::i;:::-;16742:59;;16872:1;16852:17;:21;16848:130;;;16894:68;16923:19;16944:17;16894:28;:68::i;:::-;16848:130;17048:1;17030:15;:19;17026:92;;;17070:32;17086:15;17070;:32::i;:::-;17026:92;16597:532;;16574:750;;;17237:19;17211:23;:45;;;;17295:17;17271:21;:41;;;;16574:750;15845:1486;;;;998:1:::0;1266:7;:22;;;;15785:1546::o;9369:28::-;;;;;;;;;;;;;:::o;10910:940::-;1748:13;:11;:13::i;:::-;10971:12:::1;;;;;;;;;;;10970:13;10962:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;11016:4;11001:12;;:19;;;;;;;;;;;;;;;;;;11092:17;;;;;;;;;;;:25;;;11126:4;11133:10;;;;;;;;;;;11092:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11076:13;;:68;;;;;;;;;;;;;;;;;;11239:1;11214:27;;:13;;;;;;;;;;;:27;;::::0;11210:131:::1;;11274:17;;;;;;;;;;;:28;;;11311:4;11318:10;;;;;;;;;;;11274:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11258:13;;:71;;;;;;;;;;;;;;;;;;11210:131;11394:1;11369:27;;:13;;;;;;;;;;;:27;;::::0;11361:42:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11416:69;11433:4;11448:16;;;;;;;;;;;11467:17;11416:8;:69::i;:::-;11521:10;;;;;;;;;;;11514:26;;;11549:16;;;;;;;;;;;11568:17;11514:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11506:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;11611:10;;;;;;;;;;;11604:26;;;11631:13;;;;;;;;;;;11646:17;11604:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11690:4;11675:29;;;11705:13;;;;;;;;;;;11720:17;11675:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11831:10;;;;;;;;;;;11756:86;;11811:17;;;;;;;;;;;11756:86;;11784:16;;;;;;;;;;;11756:86;;;;;;;;;;;;10910:940::o:0;1789:87::-;1835:7;1862:6;;;;;;;;;;;1855:13;;1789:87;:::o;2909:95::-;2956:13;2989:7;2982:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2909:95;:::o;24571:427::-;24619:19;24640;24673:16;24691;24728:13;;;;;;;;;;;24712:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24672:84;;;;;24767:14;24800:13;;;;;;;;;;;24784:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24767:56;;24856:4;24838:23;;:6;:23;;;24834:101;;24894:8;24886:17;;24913:8;24905:17;;24878:45;;;;;;;;;24834:101;24961:8;24953:17;;24980:8;24972:17;;24945:45;;;;;;;24571:427;;;:::o;3337:182::-;3407:4;3424:13;3440:10;3424:26;;3461:28;3471:5;3478:2;3482:6;3461:9;:28::i;:::-;3507:4;3500:11;;;3337:182;;;;:::o;23533:691::-;1748:13;:11;:13::i;:::-;23600:21:::1;23639:4;23624:31;;;23664:4;23679:16;;;;;;;;;;;23624:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23600:97;;8566:18;23712:13;:28;23708:125;;;23757:64;23774:4;23789:16;;;;;;;;;;;8566:18;23757:8;:64::i;:::-;23708:125;23845:19;23874:10;;;;;;;;;;;23867:28;;;23904:4;23867:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23845:65;;23939:1;23925:11;:15;23921:296;;;23957:21;23988:10;;;;;;;;;;;23981:28;;;24018:4;24033:16;;;;;;;;;;;23981:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23957:94;;24086:11;24070:13;:27;24066:140;;;24125:10;;;;;;;;;;;24118:26;;;24153:16;;;;;;;;;;;24172:17;24118:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24066:140;23942:275;23921:296;23589:635;;23533:691::o:0;22107:167::-;1748:13;:11;:13::i;:::-;22200:1:::1;22181:21;;:7;:21;;::::0;22173:37:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22258:7;22221:16;;:45;;;;;;;;;;;;;;;;;;22107:167:::0;:::o;9430:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;3527:142::-;3607:7;3634:11;:18;3646:5;3634:18;;;;;;;;;;;;;;;:27;3653:7;3634:27;;;;;;;;;;;;;;;;3627:34;;3527:142;;;;:::o;25627:406::-;1748:13;:11;:13::i;:::-;25688:69:::1;25705:4;25720:16;;;;;;;;;;;25739:17;25688:8;:69::i;:::-;25775:10;;;;;;;;;;;25768:26;;;25803:16;;;;;;;;;;;25822:17;25768:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25872:10;;;;;;;;;;;25865:26;;;25892:13;;;;;;;;;;;25907:17;25865:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25861:76:::0;::::1;;;;25966:4;25951:29;;;25981:13;;;;;;;;;;;25996:17;25951:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25947:79:::0;::::1;;;;25627:406::o:0;1992:165::-;1748:13;:11;:13::i;:::-;2101:1:::1;2081:22;;:8;:22;;::::0;2073:37:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2121:28;2140:8;2121:18;:28::i;:::-;1992:165:::0;:::o;25006:595::-;25083:7;25104:19;25125;25148:17;:15;:17::i;:::-;25103:62;;;;25195:1;25180:11;:16;:36;;;;25215:1;25200:11;:16;25180:36;25176:50;;;25225:1;25218:8;;;;;;25176:50;25247:23;25284:3;25273:8;:14;;;;:::i;:::-;25247:40;;25310:17;25348:11;25330:15;:29;;;;:::i;:::-;25310:49;;25370:19;25415:15;25407:4;25393:11;:18;;;;:::i;:::-;25392:38;;;;:::i;:::-;25370:60;;25441:17;25473:11;25461:9;:23;;;;:::i;:::-;25441:43;;25590:3;9169:2;25568:3;:18;;;;:::i;:::-;25555:9;:32;;;;:::i;:::-;:38;;;;:::i;:::-;25548:45;;;;;;;;25006:595;;;;:::o;9287:43::-;;;;;;;;;;;;;:::o;5056:256::-;5175:1;5158:19;;:5;:19;;;;:44;;;;;5200:1;5181:21;;:7;:21;;;;5158:44;5150:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;5250:6;5220:11;:18;5232:5;5220:18;;;;;;;;;;;;;;;:27;5239:7;5220:27;;;;;;;;;;;;;;;:36;;;;5288:7;5272:32;;5281:5;5272:32;;;5297:6;5272:32;;;;;;:::i;:::-;;;;;;;;5056:256;;;:::o;5320:392::-;5421:24;5448:25;5458:5;5465:7;5448:9;:25::i;:::-;5421:52;;5508:17;5488:16;:37;5484:221;;5570:6;5550:16;:26;;5542:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;5627:51;5636:5;5643:7;5671:6;5652:16;:25;5627:8;:51::i;:::-;5484:221;5410:302;5320:392;;;:::o;12245:2633::-;12401:1;12385:18;;:4;:18;;;;:38;;;;;12421:1;12407:16;;:2;:16;;;;12385:38;12377:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;12517:7;:5;:7::i;:::-;12509:15;;:4;:15;;;:32;;;;12534:7;:5;:7::i;:::-;12528:13;;:2;:13;;;12509:32;:57;;;;12561:4;12545:21;;:4;:21;;;12509:57;:80;;;;12584:4;12570:19;;:2;:19;;;12509:80;:97;;;;12594:12;;;;;;;;;;;12593:13;12509:97;12505:250;;;12623:33;12639:4;12645:2;12649:6;12623:15;:33::i;:::-;12671:19;12685:4;12671:13;:19::i;:::-;12705:17;12719:2;12705:13;:17::i;:::-;12737:7;;12505:250;12767:16;12792:13;;;;;;;;;;;12786:19;;:2;:19;;;:44;;;;12817:13;;;;;;;;;;;12809:21;;:4;:21;;;12786:44;12767:63;;12845:11;12841:1910;;;12915:16;12956:3;8627:1;12935:6;:17;;;;:::i;:::-;12934:25;;;;:::i;:::-;12915:44;;12974:22;13008:8;12999:6;:17;;;;:::i;:::-;12974:42;;13101:41;13117:4;13123:2;13127:14;13101:15;:41::i;:::-;13217:46;13233:4;13247;13254:8;13217:15;:46::i;:::-;13404:3;8682:2;13376:8;:24;;;;:::i;:::-;13375:32;;;;:::i;:::-;13348:23;;:59;;;;;;;:::i;:::-;;;;;;;;13497:3;8738:2;13471:8;:22;;;;:::i;:::-;13470:30;;;;:::i;:::-;13445:21;;:55;;;;;;;:::i;:::-;;;;;;;;8907:12;13601:23;;:49;;:118;;;;8907:12;13672:21;;:47;;13601:118;13600:160;;;;;13759:1;13742:7;:14;;;;:18;13600:160;13596:1034;;;13832:69;13849:4;13864:16;;;;;;;;;;;13883:17;13832:8;:69::i;:::-;13927:10;;;;;;;;;;;13920:26;;;13955:16;;;;;;;;;;;13974:17;13920:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14084:10;;;;;;;;;;;14077:26;;;14104:13;;;;;;;;;;;14119:17;14077:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14171:4;14156:29;;;14186:13;;;;;;;;;;;14201:17;14156:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14260:4;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14256:359;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;14480:6;14438:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;14420:69;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;14358:151;14256:359;;;;;14544:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;14256:359;;;;;13596:1034;12858:1783;;12841:1910;;;14706:33;14722:4;14728:2;14732:6;14706:15;:33::i;:::-;12841:1910;14823:19;14837:4;14823:13;:19::i;:::-;14853:17;14867:2;14853:13;:17::i;:::-;12366:2512;12245:2633;;;;:::o;1884:100::-;1959:10;1948:21;;:7;:5;:7::i;:::-;:21;;;1940:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;1884:100::o;17339:1778::-;17406:7;17445:1;17430:11;:16;17426:30;;17455:1;17448:8;;;;17426:30;17499:69;17516:4;17531:16;;;;;;;;;;;17550:17;17499:8;:69::i;:::-;17586:10;;;;;;;;;;;17579:26;;;17614:16;;;;;;;;;;;17633:17;17579:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17664:21;17702:1;17688:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17664:40;;17733:4;17715;17720:1;17715:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;17759:10;;;;;;;;;;;17749:4;17754:1;17749:7;;;;;;;;:::i;:::-;;;;;;;:20;;;;;;;;;;;17841;17864:10;17841:33;;17885:27;17922:10;;;;;;;;;;;17915:28;;;17944:12;17915:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17885:72;;17974:16;;;;;;;;;;;:70;;;18059:11;18085:1;18161:4;18180:12;18264:3;18246:15;:21;;;;:::i;:::-;17974:304;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17970:1140;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;18971:6;18960:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19000:1;18993:8;;;;;;;;17970:1140;;;19040:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19097:1;19090:8;;;;;;;17970:1140;18294:25;18329:10;;;;;;;;;;;18322:28;;;18351:12;18322:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18294:70;;18379:21;18423:19;18403:17;:39;;;;:::i;:::-;18379:63;;18491:1;18475:13;:17;18471:324;;;18586:10;;;;;;;;;;;18579:31;;;18611:12;18633:4;18640:13;18579:75;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18571:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;18726:13;18713:11;18698:42;;;;;;;;;;18766:13;18759:20;;;;;;;;;18471:324;18828:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;18892:1;18885:8;;;;;;;17339:1778;;;;:::o;19125:1002::-;19243:1;19228:11;:16;:36;;;;19263:1;19248:11;:16;19228:36;19266:7;19224:49;19314:63;19331:4;19346:16;;;;;;;;;;;19365:11;19314:8;:63::i;:::-;19395:10;;;;;;;;;;;19388:26;;;19423:16;;;;;;;;;;;19442:11;19388:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19471:16;;;;;;;;;;;:29;;;19523:4;19543:10;;;;;;;;;;;19568:11;19594;19620:1;19698;19722:4;19760:3;19742:15;:21;;;;:::i;:::-;19471:303;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;19467:653;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;19913:6;19902:18;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19962:11;19935:23;;:38;;;;;;;:::i;:::-;;;;;;;;19848:137;19467:653;;;;;20012:43;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20097:11;20070:23;;:38;;;;;;;:::i;:::-;;;;;;;;19467:653;;;;;;;19823:11;19810;19795:40;;;;;;;;;;19467:653;19125:1002;;;:::o;20135:656::-;20219:1;20204:11;:16;:39;;;;20242:1;20224:7;:14;;;;:19;20204:39;20245:7;20200:52;20272:23;20312:7;:14;;;;20298:11;:28;;;;:::i;:::-;20272:54;;20360:1;20341:15;:20;20337:33;;20363:7;;;20337:33;20387:9;20382:329;20406:7;:14;;;;20402:1;:18;:29;;;;;20428:3;20424:1;:7;20402:29;20382:329;;;20479:1;20457:24;;:7;20465:1;20457:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:24;;;20453:247;;20513:10;;;;;;;;;;;20506:27;;;20534:7;20542:1;20534:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20546:15;20506:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;20502:183;20657:8;20502:183;;20453:247;20382:329;20433:3;;;;;:::i;:::-;;;;20382:329;;;;20768:7;:14;;;;20755:11;20736:47;;;;;;;;;;20189:602;20135:656;;:::o;2165:191::-;2239:16;2258:6;;;;;;;;;;;2239:25;;2284:8;2275:6;;:17;;;;;;;;;;;;;;;;;;2339:8;2308:40;;2329:8;2308:40;;;;;;;;;;;;2228:128;2165:191;:::o;4133:507::-;4246:1;4230:18;;:4;:18;;;;:38;;;;;4266:1;4252:16;;:2;:16;;;;4230:38;4222:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;4286:38;4307:4;4313:2;4317:6;4286:20;:38::i;:::-;4335:19;4357:9;:15;4367:4;4357:15;;;;;;;;;;;;;;;;4335:37;;4406:6;4391:11;:21;;4383:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;4487:6;4473:11;:20;4455:9;:15;4465:4;4455:15;;;;;;;;;;;;;;;:38;;;;4525:6;4508:9;:13;4518:2;4508:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;4573:2;4558:26;;4567:4;4558:26;;;4577:6;4558:26;;;;;;:::i;:::-;;;;;;;;4595:37;4615:4;4621:2;4625:6;4595:19;:37::i;:::-;4211:429;4133:507;;;:::o;14886:588::-;14960:13;;;;;;;;;;;14949:24;;:7;:24;;;;:52;;;;;14996:4;14977:24;;:7;:24;;;;14949:52;14945:522;;;15018:15;15036:18;15046:7;15036:9;:18::i;:::-;15018:36;;15069:22;15094:8;:17;15103:7;15094:17;;;;;;;;;;;;;;;;;;;;;;;;;15069:42;;8800:11;15144:7;:28;;:50;;;;;15177:17;15176:18;15144:50;15140:316;;;15235:4;15215:8;:17;15224:7;15215:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;15258:7;15271;15258:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15140:316;;;8800:11;15305:7;:27;:48;;;;;15336:17;15305:48;15301:155;;;15394:5;15374:8;:17;15383:7;15374:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;15418:22;15432:7;15418:13;:22::i;:::-;15301:155;15140:316;15003:464;;14945:522;14886:588;:::o;11858:186::-;;;;:::o;12052:185::-;;;;:::o;15482:295::-;15546:9;15541:229;15565:7;:14;;;;15561:1;:18;15541:229;;;15619:7;15605:21;;:7;15613:1;15605:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:21;;;15601:158;;15660:7;15685:1;15668:7;:14;;;;:18;;;;:::i;:::-;15660:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15647:7;15655:1;15647:10;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;15706:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;15738:5;;15601:158;15581:3;;;;;:::i;:::-;;;;15541:229;;;;15482:295;:::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:541::-;4093:4;4131:3;4120:9;4116:19;4108:27;;4145:71;4213:1;4202:9;4198:17;4189:6;4145:71;:::i;:::-;4226:72;4294:2;4283:9;4279:18;4270:6;4226:72;:::i;:::-;4308:66;4370:2;4359:9;4355:18;4346:6;4308:66;:::i;:::-;4384:72;4452:2;4441:9;4437:18;4428:6;4384:72;:::i;:::-;3922:541;;;;;;;:::o;4469:619::-;4546:6;4554;4562;4611:2;4599:9;4590:7;4586:23;4582:32;4579:119;;;4617:79;;:::i;:::-;4579:119;4737:1;4762:53;4807:7;4798:6;4787:9;4783:22;4762:53;:::i;:::-;4752:63;;4708:117;4864:2;4890:53;4935:7;4926:6;4915:9;4911:22;4890:53;:::i;:::-;4880:63;;4835:118;4992:2;5018:53;5063:7;5054:6;5043:9;5039:22;5018:53;:::i;:::-;5008:63;;4963:118;4469:619;;;;;:::o;5094:329::-;5153:6;5202:2;5190:9;5181:7;5177:23;5173:32;5170:119;;;5208:79;;:::i;:::-;5170:119;5328:1;5353:53;5398:7;5389:6;5378:9;5374:22;5353:53;:::i;:::-;5343:63;;5299:117;5094:329;;;;:::o;5429:222::-;5522:4;5560:2;5549:9;5545:18;5537:26;;5573:71;5641:1;5630:9;5626:17;5617:6;5573:71;:::i;:::-;5429:222;;;;:::o;5657:86::-;5692:7;5732:4;5725:5;5721:16;5710:27;;5657:86;;;:::o;5749:112::-;5832:22;5848:5;5832:22;:::i;:::-;5827:3;5820:35;5749:112;;:::o;5867:214::-;5956:4;5994:2;5983:9;5979:18;5971:26;;6007:67;6071:1;6060:9;6056:17;6047:6;6007:67;:::i;:::-;5867:214;;;;:::o;6087:114::-;6154:6;6188:5;6182:12;6172:22;;6087:114;;;:::o;6207:184::-;6306:11;6340:6;6335:3;6328:19;6380:4;6375:3;6371:14;6356:29;;6207:184;;;;:::o;6397:132::-;6464:4;6487:3;6479:11;;6517:4;6512:3;6508:14;6500:22;;6397:132;;;:::o;6535:108::-;6612:24;6630:5;6612:24;:::i;:::-;6607:3;6600:37;6535:108;;:::o;6649:179::-;6718:10;6739:46;6781:3;6773:6;6739:46;:::i;:::-;6817:4;6812:3;6808:14;6794:28;;6649:179;;;;:::o;6834:113::-;6904:4;6936;6931:3;6927:14;6919:22;;6834:113;;;:::o;6983:732::-;7102:3;7131:54;7179:5;7131:54;:::i;:::-;7201:86;7280:6;7275:3;7201:86;:::i;:::-;7194:93;;7311:56;7361:5;7311:56;:::i;:::-;7390:7;7421:1;7406:284;7431:6;7428:1;7425:13;7406:284;;;7507:6;7501:13;7534:63;7593:3;7578:13;7534:63;:::i;:::-;7527:70;;7620:60;7673:6;7620:60;:::i;:::-;7610:70;;7466:224;7453:1;7450;7446:9;7441:14;;7406:284;;;7410:14;7706:3;7699:10;;7107:608;;;6983:732;;;;:::o;7721:373::-;7864:4;7902:2;7891:9;7887:18;7879:26;;7951:9;7945:4;7941:20;7937:1;7926:9;7922:17;7915:47;7979:108;8082:4;8073:6;7979:108;:::i;:::-;7971:116;;7721:373;;;;:::o;8100:60::-;8128:3;8149:5;8142:12;;8100:60;;;:::o;8166:142::-;8216:9;8249:53;8267:34;8276:24;8294:5;8276:24;:::i;:::-;8267:34;:::i;:::-;8249:53;:::i;:::-;8236:66;;8166:142;;;:::o;8314:126::-;8364:9;8397:37;8428:5;8397:37;:::i;:::-;8384:50;;8314:126;;;:::o;8446:151::-;8521:9;8554:37;8585:5;8554:37;:::i;:::-;8541:50;;8446:151;;;:::o;8603:181::-;8715:62;8771:5;8715:62;:::i;:::-;8710:3;8703:75;8603:181;;:::o;8790:272::-;8908:4;8946:2;8935:9;8931:18;8923:26;;8959:96;9052:1;9041:9;9037:17;9028:6;8959:96;:::i;:::-;8790:272;;;;:::o;9068:329::-;9127:6;9176:2;9164:9;9155:7;9151:23;9147:32;9144:119;;;9182:79;;:::i;:::-;9144:119;9302:1;9327:53;9372:7;9363:6;9352:9;9348:22;9327:53;:::i;:::-;9317:63;;9273:117;9068:329;;;;:::o;9403:332::-;9524:4;9562:2;9551:9;9547:18;9539:26;;9575:71;9643:1;9632:9;9628:17;9619:6;9575:71;:::i;:::-;9656:72;9724:2;9713:9;9709:18;9700:6;9656:72;:::i;:::-;9403:332;;;;;:::o;9741:474::-;9809:6;9817;9866:2;9854:9;9845:7;9841:23;9837:32;9834:119;;;9872:79;;:::i;:::-;9834:119;9992:1;10017:53;10062:7;10053:6;10042:9;10038:22;10017:53;:::i;:::-;10007:63;;9963:117;10119:2;10145:53;10190:7;10181:6;10170:9;10166:22;10145:53;:::i;:::-;10135:63;;10090:118;9741:474;;;;;:::o;10221:152::-;10297:9;10330:37;10361:5;10330:37;:::i;:::-;10317:50;;10221:152;;;:::o;10379:183::-;10492:63;10549:5;10492:63;:::i;:::-;10487:3;10480:76;10379:183;;:::o;10568:274::-;10687:4;10725:2;10714:9;10710:18;10702:26;;10738:97;10832:1;10821:9;10817:17;10808:6;10738:97;:::i;:::-;10568:274;;;;:::o;10848:180::-;10896:77;10893:1;10886:88;10993:4;10990:1;10983:15;11017:4;11014:1;11007:15;11034:320;11078:6;11115:1;11109:4;11105:12;11095:22;;11162:1;11156:4;11152:12;11183:18;11173:81;;11239:4;11231:6;11227:17;11217:27;;11173:81;11301:2;11293:6;11290:14;11270:18;11267:38;11264:84;;11320:18;;:::i;:::-;11264:84;11085:269;11034:320;;;:::o;11360:332::-;11481:4;11519:2;11508:9;11504:18;11496:26;;11532:71;11600:1;11589:9;11585:17;11576:6;11532:71;:::i;:::-;11613:72;11681:2;11670:9;11666:18;11657:6;11613:72;:::i;:::-;11360:332;;;;;:::o;11698:143::-;11755:5;11786:6;11780:13;11771:22;;11802:33;11829:5;11802:33;:::i;:::-;11698:143;;;;:::o;11847:351::-;11917:6;11966:2;11954:9;11945:7;11941:23;11937:32;11934:119;;;11972:79;;:::i;:::-;11934:119;12092:1;12117:64;12173:7;12164:6;12153:9;12149:22;12117:64;:::i;:::-;12107:74;;12063:128;11847:351;;;;:::o;12204:152::-;12344:4;12340:1;12332:6;12328:14;12321:28;12204:152;:::o;12362:365::-;12504:3;12525:66;12589:1;12584:3;12525:66;:::i;:::-;12518:73;;12600:93;12689:3;12600:93;:::i;:::-;12718:2;12713:3;12709:12;12702:19;;12362:365;;;:::o;12733:419::-;12899:4;12937:2;12926:9;12922:18;12914:26;;12986:9;12980:4;12976:20;12972:1;12961:9;12957:17;12950:47;13014:131;13140:4;13014:131;:::i;:::-;13006:139;;12733:419;;;:::o;13158:152::-;13298:4;13294:1;13286:6;13282:14;13275:28;13158:152;:::o;13316:365::-;13458:3;13479:66;13543:1;13538:3;13479:66;:::i;:::-;13472:73;;13554:93;13643:3;13554:93;:::i;:::-;13672:2;13667:3;13663:12;13656:19;;13316:365;;;:::o;13687:419::-;13853:4;13891:2;13880:9;13876:18;13868:26;;13940:9;13934:4;13930:20;13926:1;13915:9;13911:17;13904:47;13968:131;14094:4;13968:131;:::i;:::-;13960:139;;13687:419;;;:::o;14112:152::-;14252:4;14248:1;14240:6;14236:14;14229:28;14112:152;:::o;14270:365::-;14412:3;14433:66;14497:1;14492:3;14433:66;:::i;:::-;14426:73;;14508:93;14597:3;14508:93;:::i;:::-;14626:2;14621:3;14617:12;14610:19;;14270:365;;;:::o;14641:419::-;14807:4;14845:2;14834:9;14830:18;14822:26;;14894:9;14888:4;14884:20;14880:1;14869:9;14865:17;14858:47;14922:131;15048:4;14922:131;:::i;:::-;14914:139;;14641:419;;;:::o;15066:152::-;15206:4;15202:1;15194:6;15190:14;15183:28;15066:152;:::o;15224:365::-;15366:3;15387:66;15451:1;15446:3;15387:66;:::i;:::-;15380:73;;15462:93;15551:3;15462:93;:::i;:::-;15580:2;15575:3;15571:12;15564:19;;15224:365;;;:::o;15595:419::-;15761:4;15799:2;15788:9;15784:18;15776:26;;15848:9;15842:4;15838:20;15834:1;15823:9;15819:17;15812:47;15876:131;16002:4;15876:131;:::i;:::-;15868:139;;15595:419;;;:::o;16020:225::-;16160:34;16156:1;16148:6;16144:14;16137:58;16229:8;16224:2;16216:6;16212:15;16205:33;16020:225;:::o;16251:366::-;16393:3;16414:67;16478:2;16473:3;16414:67;:::i;:::-;16407:74;;16490:93;16579:3;16490:93;:::i;:::-;16608:2;16603:3;16599:12;16592:19;;16251:366;;;:::o;16623:419::-;16789:4;16827:2;16816:9;16812:18;16804:26;;16876:9;16870:4;16866:20;16862:1;16851:9;16847:17;16840:47;16904:131;17030:4;16904:131;:::i;:::-;16896:139;;16623:419;;;:::o;17048:85::-;17093:7;17122:5;17111:16;;17048:85;;;:::o;17139:158::-;17197:9;17230:61;17248:42;17257:32;17283:5;17257:32;:::i;:::-;17248:42;:::i;:::-;17230:61;:::i;:::-;17217:74;;17139:158;;;:::o;17303:147::-;17398:45;17437:5;17398:45;:::i;:::-;17393:3;17386:58;17303:147;;:::o;17456:807::-;17705:4;17743:3;17732:9;17728:19;17720:27;;17757:71;17825:1;17814:9;17810:17;17801:6;17757:71;:::i;:::-;17838:72;17906:2;17895:9;17891:18;17882:6;17838:72;:::i;:::-;17920:80;17996:2;17985:9;17981:18;17972:6;17920:80;:::i;:::-;18010;18086:2;18075:9;18071:18;18062:6;18010:80;:::i;:::-;18100:73;18168:3;18157:9;18153:19;18144:6;18100:73;:::i;:::-;18183;18251:3;18240:9;18236:19;18227:6;18183:73;:::i;:::-;17456:807;;;;;;;;;:::o;18269:663::-;18357:6;18365;18373;18422:2;18410:9;18401:7;18397:23;18393:32;18390:119;;;18428:79;;:::i;:::-;18390:119;18548:1;18573:64;18629:7;18620:6;18609:9;18605:22;18573:64;:::i;:::-;18563:74;;18519:128;18686:2;18712:64;18768:7;18759:6;18748:9;18744:22;18712:64;:::i;:::-;18702:74;;18657:129;18825:2;18851:64;18907:7;18898:6;18887:9;18883:22;18851:64;:::i;:::-;18841:74;;18796:129;18269:663;;;;;:::o;18938:173::-;19078:25;19074:1;19066:6;19062:14;19055:49;18938:173;:::o;19117:366::-;19259:3;19280:67;19344:2;19339:3;19280:67;:::i;:::-;19273:74;;19356:93;19445:3;19356:93;:::i;:::-;19474:2;19469:3;19465:12;19458:19;;19117:366;;;:::o;19489:419::-;19655:4;19693:2;19682:9;19678:18;19670:26;;19742:9;19736:4;19732:20;19728:1;19717:9;19713:17;19706:47;19770:131;19896:4;19770:131;:::i;:::-;19762:139;;19489:419;;;:::o;19914:177::-;20054:29;20050:1;20042:6;20038:14;20031:53;19914:177;:::o;20097:366::-;20239:3;20260:67;20324:2;20319:3;20260:67;:::i;:::-;20253:74;;20336:93;20425:3;20336:93;:::i;:::-;20454:2;20449:3;20445:12;20438:19;;20097:366;;;:::o;20469:419::-;20635:4;20673:2;20662:9;20658:18;20650:26;;20722:9;20716:4;20712:20;20708:1;20697:9;20693:17;20686:47;20750:131;20876:4;20750:131;:::i;:::-;20742:139;;20469:419;;;:::o;20894:332::-;21015:4;21053:2;21042:9;21038:18;21030:26;;21066:71;21134:1;21123:9;21119:17;21110:6;21066:71;:::i;:::-;21147:72;21215:2;21204:9;21200:18;21191:6;21147:72;:::i;:::-;20894:332;;;;;:::o;21232:116::-;21302:21;21317:5;21302:21;:::i;:::-;21295:5;21292:32;21282:60;;21338:1;21335;21328:12;21282:60;21232:116;:::o;21354:137::-;21408:5;21439:6;21433:13;21424:22;;21455:30;21479:5;21455:30;:::i;:::-;21354:137;;;;:::o;21497:345::-;21564:6;21613:2;21601:9;21592:7;21588:23;21584:32;21581:119;;;21619:79;;:::i;:::-;21581:119;21739:1;21764:61;21817:7;21808:6;21797:9;21793:22;21764:61;:::i;:::-;21754:71;;21710:125;21497:345;;;;:::o;21848:170::-;21988:22;21984:1;21976:6;21972:14;21965:46;21848:170;:::o;22024:366::-;22166:3;22187:67;22251:2;22246:3;22187:67;:::i;:::-;22180:74;;22263:93;22352:3;22263:93;:::i;:::-;22381:2;22376:3;22372:12;22365:19;;22024:366;;;:::o;22396:419::-;22562:4;22600:2;22589:9;22585:18;22577:26;;22649:9;22643:4;22639:20;22635:1;22624:9;22620:17;22613:47;22677:131;22803:4;22677:131;:::i;:::-;22669:139;;22396:419;;;:::o;22821:152::-;22961:4;22957:1;22949:6;22945:14;22938:28;22821:152;:::o;22979:365::-;23121:3;23142:66;23206:1;23201:3;23142:66;:::i;:::-;23135:73;;23217:93;23306:3;23217:93;:::i;:::-;23335:2;23330:3;23326:12;23319:19;;22979:365;;;:::o;23350:419::-;23516:4;23554:2;23543:9;23539:18;23531:26;;23603:9;23597:4;23593:20;23589:1;23578:9;23574:17;23567:47;23631:131;23757:4;23631:131;:::i;:::-;23623:139;;23350:419;;;:::o;23775:180::-;23823:77;23820:1;23813:88;23920:4;23917:1;23910:15;23944:4;23941:1;23934:15;23961:191;24001:3;24020:20;24038:1;24020:20;:::i;:::-;24015:25;;24054:20;24072:1;24054:20;:::i;:::-;24049:25;;24097:1;24094;24090:9;24083:16;;24118:3;24115:1;24112:10;24109:36;;;24125:18;;:::i;:::-;24109:36;23961:191;;;;:::o;24158:152::-;24298:4;24294:1;24286:6;24282:14;24275:28;24158:152;:::o;24316:365::-;24458:3;24479:66;24543:1;24538:3;24479:66;:::i;:::-;24472:73;;24554:93;24643:3;24554:93;:::i;:::-;24672:2;24667:3;24663:12;24656:19;;24316:365;;;:::o;24687:419::-;24853:4;24891:2;24880:9;24876:18;24868:26;;24940:9;24934:4;24930:20;24926:1;24915:9;24911:17;24904:47;24968:131;25094:4;24968:131;:::i;:::-;24960:139;;24687:419;;;:::o;25112:410::-;25152:7;25175:20;25193:1;25175:20;:::i;:::-;25170:25;;25209:20;25227:1;25209:20;:::i;:::-;25204:25;;25264:1;25261;25257:9;25286:30;25304:11;25286:30;:::i;:::-;25275:41;;25465:1;25456:7;25452:15;25449:1;25446:22;25426:1;25419:9;25399:83;25376:139;;25495:18;;:::i;:::-;25376:139;25160:362;25112:410;;;;:::o;25528:180::-;25576:77;25573:1;25566:88;25673:4;25670:1;25663:15;25697:4;25694:1;25687:15;25714:185;25754:1;25771:20;25789:1;25771:20;:::i;:::-;25766:25;;25805:20;25823:1;25805:20;:::i;:::-;25800:25;;25844:1;25834:35;;25849:18;;:::i;:::-;25834:35;25891:1;25888;25884:9;25879:14;;25714:185;;;;:::o;25905:194::-;25945:4;25965:20;25983:1;25965:20;:::i;:::-;25960:25;;25999:20;26017:1;25999:20;:::i;:::-;25994:25;;26043:1;26040;26036:9;26028:17;;26067:1;26061:4;26058:11;26055:37;;;26072:18;;:::i;:::-;26055:37;25905:194;;;;:::o;26105:152::-;26245:4;26241:1;26233:6;26229:14;26222:28;26105:152;:::o;26263:365::-;26405:3;26426:66;26490:1;26485:3;26426:66;:::i;:::-;26419:73;;26501:93;26590:3;26501:93;:::i;:::-;26619:2;26614:3;26610:12;26603:19;;26263:365;;;:::o;26634:419::-;26800:4;26838:2;26827:9;26823:18;26815:26;;26887:9;26881:4;26877:20;26873:1;26862:9;26858:17;26851:47;26915:131;27041:4;26915:131;:::i;:::-;26907:139;;26634:419;;;:::o;27059:143::-;27116:5;27147:6;27141:13;27132:22;;27163:33;27190:5;27163:33;:::i;:::-;27059:143;;;;:::o;27208:351::-;27278:6;27327:2;27315:9;27306:7;27302:23;27298:32;27295:119;;;27333:79;;:::i;:::-;27295:119;27453:1;27478:64;27534:7;27525:6;27514:9;27510:22;27478:64;:::i;:::-;27468:74;;27424:128;27208:351;;;;:::o;27565:152::-;27705:4;27701:1;27693:6;27689:14;27682:28;27565:152;:::o;27723:365::-;27865:3;27886:66;27950:1;27945:3;27886:66;:::i;:::-;27879:73;;27961:93;28050:3;27961:93;:::i;:::-;28079:2;28074:3;28070:12;28063:19;;27723:365;;;:::o;28094:419::-;28260:4;28298:2;28287:9;28283:18;28275:26;;28347:9;28341:4;28337:20;28333:1;28322:9;28318:17;28311:47;28375:131;28501:4;28375:131;:::i;:::-;28367:139;;28094:419;;;:::o;28519:114::-;28556:7;28596:30;28589:5;28585:42;28574:53;;28519:114;;;:::o;28639:122::-;28712:24;28730:5;28712:24;:::i;:::-;28705:5;28702:35;28692:63;;28751:1;28748;28741:12;28692:63;28639:122;:::o;28767:143::-;28824:5;28855:6;28849:13;28840:22;;28871:33;28898:5;28871:33;:::i;:::-;28767:143;;;;:::o;28916:93::-;28952:7;28992:10;28985:5;28981:22;28970:33;;28916:93;;;:::o;29015:120::-;29087:23;29104:5;29087:23;:::i;:::-;29080:5;29077:34;29067:62;;29125:1;29122;29115:12;29067:62;29015:120;:::o;29141:141::-;29197:5;29228:6;29222:13;29213:22;;29244:32;29270:5;29244:32;:::i;:::-;29141:141;;;;:::o;29288:661::-;29375:6;29383;29391;29440:2;29428:9;29419:7;29415:23;29411:32;29408:119;;;29446:79;;:::i;:::-;29408:119;29566:1;29591:64;29647:7;29638:6;29627:9;29623:22;29591:64;:::i;:::-;29581:74;;29537:128;29704:2;29730:64;29786:7;29777:6;29766:9;29762:22;29730:64;:::i;:::-;29720:74;;29675:129;29843:2;29869:63;29924:7;29915:6;29904:9;29900:22;29869:63;:::i;:::-;29859:73;;29814:128;29288:661;;;;;:::o;29955:153::-;30095:5;30091:1;30083:6;30079:14;30072:29;29955:153;:::o;30114:365::-;30256:3;30277:66;30341:1;30336:3;30277:66;:::i;:::-;30270:73;;30352:93;30441:3;30352:93;:::i;:::-;30470:2;30465:3;30461:12;30454:19;;30114:365;;;:::o;30485:419::-;30651:4;30689:2;30678:9;30674:18;30666:26;;30738:9;30732:4;30728:20;30724:1;30713:9;30709:17;30702:47;30766:131;30892:4;30766:131;:::i;:::-;30758:139;;30485:419;;;:::o;30910:152::-;31050:4;31046:1;31038:6;31034:14;31027:28;30910:152;:::o;31068:365::-;31210:3;31231:66;31295:1;31290:3;31231:66;:::i;:::-;31224:73;;31306:93;31395:3;31306:93;:::i;:::-;31424:2;31419:3;31415:12;31408:19;;31068:365;;;:::o;31439:419::-;31605:4;31643:2;31632:9;31628:18;31620:26;;31692:9;31686:4;31682:20;31678:1;31667:9;31663:17;31656:47;31720:131;31846:4;31720:131;:::i;:::-;31712:139;;31439:419;;;:::o;31864:152::-;32004:4;32000:1;31992:6;31988:14;31981:28;31864:152;:::o;32022:365::-;32164:3;32185:66;32249:1;32244:3;32185:66;:::i;:::-;32178:73;;32260:93;32349:3;32260:93;:::i;:::-;32378:2;32373:3;32369:12;32362:19;;32022:365;;;:::o;32393:419::-;32559:4;32597:2;32586:9;32582:18;32574:26;;32646:9;32640:4;32636:20;32632:1;32621:9;32617:17;32610:47;32674:131;32800:4;32674:131;:::i;:::-;32666:139;;32393:419;;;:::o;32818:106::-;32862:8;32911:5;32906:3;32902:15;32881:36;;32818:106;;;:::o;32930:183::-;32965:3;33003:1;32985:16;32982:23;32979:128;;;33041:1;33038;33035;33020:23;33063:34;33094:1;33088:8;33063:34;:::i;:::-;33056:41;;32979:128;32930:183;:::o;33119:180::-;33167:77;33164:1;33157:88;33264:4;33261:1;33254:15;33288:4;33285:1;33278:15;33305:281;33388:27;33410:4;33388:27;:::i;:::-;33380:6;33376:40;33518:6;33506:10;33503:22;33482:18;33470:10;33467:34;33464:62;33461:88;;;33529:18;;:::i;:::-;33461:88;33569:10;33565:2;33558:22;33348:238;33305:281;;:::o;33592:711::-;33631:3;33669:4;33651:16;33648:26;33677:5;33645:39;33706:20;;:::i;:::-;33781:1;33763:16;33759:24;33756:1;33750:4;33735:49;33814:4;33808:11;33913:16;33906:4;33898:6;33894:17;33891:39;33858:18;33850:6;33847:30;33831:113;33828:146;;;33959:5;;;;33828:146;34005:6;33999:4;33995:17;34041:3;34035:10;34068:18;34060:6;34057:30;34054:43;;;34090:5;;;;;;34054:43;34138:6;34131:4;34126:3;34122:14;34118:27;34197:1;34179:16;34175:24;34169:4;34165:35;34160:3;34157:44;34154:57;;;34204:5;;;;;;;34154:57;34221;34269:6;34263:4;34259:17;34251:6;34247:30;34241:4;34221:57;:::i;:::-;34294:3;34287:10;;33635:668;;;;;33592:711;;:::o;34309:148::-;34411:11;34448:3;34433:18;;34309:148;;;;:::o;34463:171::-;34603:23;34599:1;34591:6;34587:14;34580:47;34463:171;:::o;34640:402::-;34800:3;34821:85;34903:2;34898:3;34821:85;:::i;:::-;34814:92;;34915:93;35004:3;34915:93;:::i;:::-;35033:2;35028:3;35024:12;35017:19;;34640:402;;;:::o;35048:390::-;35154:3;35182:39;35215:5;35182:39;:::i;:::-;35237:89;35319:6;35314:3;35237:89;:::i;:::-;35230:96;;35335:65;35393:6;35388:3;35381:4;35374:5;35370:16;35335:65;:::i;:::-;35425:6;35420:3;35416:16;35409:23;;35158:280;35048:390;;;;:::o;35444:541::-;35677:3;35699:148;35843:3;35699:148;:::i;:::-;35692:155;;35864:95;35955:3;35946:6;35864:95;:::i;:::-;35857:102;;35976:3;35969:10;;35444:541;;;;:::o;35991:275::-;36123:3;36145:95;36236:3;36227:6;36145:95;:::i;:::-;36138:102;;36257:3;36250:10;;35991:275;;;;:::o;36272:224::-;36412:34;36408:1;36400:6;36396:14;36389:58;36481:7;36476:2;36468:6;36464:15;36457:32;36272:224;:::o;36502:402::-;36662:3;36683:85;36765:2;36760:3;36683:85;:::i;:::-;36676:92;;36777:93;36866:3;36777:93;:::i;:::-;36895:2;36890:3;36886:12;36879:19;;36502:402;;;:::o;36910:381::-;37095:3;37117:148;37261:3;37117:148;:::i;:::-;37110:155;;37282:3;37275:10;;36910:381;;;:::o;37297:152::-;37437:4;37433:1;37425:6;37421:14;37414:28;37297:152;:::o;37455:365::-;37597:3;37618:66;37682:1;37677:3;37618:66;:::i;:::-;37611:73;;37693:93;37782:3;37693:93;:::i;:::-;37811:2;37806:3;37802:12;37795:19;;37455:365;;;:::o;37826:419::-;37992:4;38030:2;38019:9;38015:18;38007:26;;38079:9;38073:4;38069:20;38065:1;38054:9;38050:17;38043:47;38107:131;38233:4;38107:131;:::i;:::-;38099:139;;37826:419;;;:::o;38251:180::-;38299:77;38296:1;38289:88;38396:4;38393:1;38386:15;38420:4;38417:1;38410:15;38437:831;38700:4;38738:3;38727:9;38723:19;38715:27;;38752:71;38820:1;38809:9;38805:17;38796:6;38752:71;:::i;:::-;38833:80;38909:2;38898:9;38894:18;38885:6;38833:80;:::i;:::-;38960:9;38954:4;38950:20;38945:2;38934:9;38930:18;38923:48;38988:108;39091:4;39082:6;38988:108;:::i;:::-;38980:116;;39106:72;39174:2;39163:9;39159:18;39150:6;39106:72;:::i;:::-;39188:73;39256:3;39245:9;39241:19;39232:6;39188:73;:::i;:::-;38437:831;;;;;;;;:::o;39274:171::-;39414:23;39410:1;39402:6;39398:14;39391:47;39274:171;:::o;39451:402::-;39611:3;39632:85;39714:2;39709:3;39632:85;:::i;:::-;39625:92;;39726:93;39815:3;39726:93;:::i;:::-;39844:2;39839:3;39835:12;39828:19;;39451:402;;;:::o;39859:381::-;40044:3;40066:148;40210:3;40066:148;:::i;:::-;40059:155;;40231:3;40224:10;;39859:381;;;:::o;40246:442::-;40395:4;40433:2;40422:9;40418:18;40410:26;;40446:71;40514:1;40503:9;40499:17;40490:6;40446:71;:::i;:::-;40527:72;40595:2;40584:9;40580:18;40571:6;40527:72;:::i;:::-;40609;40677:2;40666:9;40662:18;40653:6;40609:72;:::i;:::-;40246:442;;;;;;:::o;40694:165::-;40834:17;40830:1;40822:6;40818:14;40811:41;40694:165;:::o;40865:366::-;41007:3;41028:67;41092:2;41087:3;41028:67;:::i;:::-;41021:74;;41104:93;41193:3;41104:93;:::i;:::-;41222:2;41217:3;41213:12;41206:19;;40865:366;;;:::o;41237:419::-;41403:4;41441:2;41430:9;41426:18;41418:26;;41490:9;41484:4;41480:20;41476:1;41465:9;41461:17;41454:47;41518:131;41644:4;41518:131;:::i;:::-;41510:139;;41237:419;;;:::o;41662:178::-;41802:30;41798:1;41790:6;41786:14;41779:54;41662:178;:::o;41846:402::-;42006:3;42027:85;42109:2;42104:3;42027:85;:::i;:::-;42020:92;;42121:93;42210:3;42121:93;:::i;:::-;42239:2;42234:3;42230:12;42223:19;;41846:402;;;:::o;42254:381::-;42439:3;42461:148;42605:3;42461:148;:::i;:::-;42454:155;;42626:3;42619:10;;42254:381;;;:::o;42641:1029::-;42946:4;42984:3;42973:9;42969:19;42961:27;;42998:71;43066:1;43055:9;43051:17;43042:6;42998:71;:::i;:::-;43079:72;43147:2;43136:9;43132:18;43123:6;43079:72;:::i;:::-;43161;43229:2;43218:9;43214:18;43205:6;43161:72;:::i;:::-;43243;43311:2;43300:9;43296:18;43287:6;43243:72;:::i;:::-;43325:81;43401:3;43390:9;43386:19;43377:6;43325:81;:::i;:::-;43416;43492:3;43481:9;43477:19;43468:6;43416:81;:::i;:::-;43507:73;43575:3;43564:9;43560:19;43551:6;43507:73;:::i;:::-;43590;43658:3;43647:9;43643:19;43634:6;43590:73;:::i;:::-;42641:1029;;;;;;;;;;;:::o;43676:179::-;43816:31;43812:1;43804:6;43800:14;43793:55;43676:179;:::o;43861:402::-;44021:3;44042:85;44124:2;44119:3;44042:85;:::i;:::-;44035:92;;44136:93;44225:3;44136:93;:::i;:::-;44254:2;44249:3;44245:12;44238:19;;43861:402;;;:::o;44269:381::-;44454:3;44476:148;44620:3;44476:148;:::i;:::-;44469:155;;44641:3;44634:10;;44269:381;;;:::o;44656:233::-;44695:3;44718:24;44736:5;44718:24;:::i;:::-;44709:33;;44764:66;44757:5;44754:77;44751:103;;44834:18;;:::i;:::-;44751:103;44881:1;44874:5;44870:13;44863:20;;44656:233;;;:::o;44895:152::-;45035:4;45031:1;45023:6;45019:14;45012:28;44895:152;:::o;45053:365::-;45195:3;45216:66;45280:1;45275:3;45216:66;:::i;:::-;45209:73;;45291:93;45380:3;45291:93;:::i;:::-;45409:2;45404:3;45400:12;45393:19;;45053:365;;;:::o;45424:419::-;45590:4;45628:2;45617:9;45613:18;45605:26;;45677:9;45671:4;45667:20;45663:1;45652:9;45648:17;45641:47;45705:131;45831:4;45705:131;:::i;:::-;45697:139;;45424:419;;;:::o;45849:180::-;45897:77;45894:1;45887:88;45994:4;45991:1;45984:15;46018:4;46015:1;46008:15

Swarm Source

ipfs://da7c2bc8b5653773f4ef97a67515ebef1cc9d2d2f87bb87f9295fe5e0d154e63
[ 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.