S Price: $0.574924 (-3.69%)

Token

FARMER (FARM)

Overview

Max Total Supply

1,000,000 FARM

Holders

4

Market

Price

$0.00 @ 0.000000 S

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 FARM

Value
$0.00
0x0446b693f356737fb12f0eda6dbd8c5ca4aba874
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xF54F776f...A0395B731
The constructor portion of the code might be different and could alter the actual behaviour of the contract

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

/**
 *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);
    
    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);

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

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 MIN_HOLDER_AMOUNT = 100 * 10**18; // 100 tokens minimum for holder status
    uint256 private constant MIN_TOKENS_FOR_PROCESS = 1000 * 10**18; // 1000 tokens minimum for processing
    uint256 private constant MAX_SLIPPAGE = 30; // 30% slippage tolerance
    uint256 private constant TREASURY_PERCENTAGE = 25; // 25% to treasury
    uint256 private constant HOLDERS_PERCENTAGE = 75; // 75% to holders

    // Metropolis DEX addresses - hardcoded
    IMetropolisRouter public constant metropolisRouter = IMetropolisRouter(0x95a7e403d7cF20F675fF9273D66e94d35ba49fA3);
    IMetropolisFactory public constant metropolisFactory = IMetropolisFactory(0x1570300e9cFEC66c9Fb0C8bc14366C86EB170Ad0);
    address public constant sonicToken = 0x039e2fB66102314Ce7b64Ce5Ce3E5183bc94aD38;
    address public liquidityPair;
    // Treasury wallet hardcoded
    address public constant treasuryWallet = 0xE68bD755C87749F6144f6762283698742E0daA0c;

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

    // Optimize events
    event AirdropDistributed(uint256 indexed amount, uint256 indexed holdersCount);
    event TreasuryTransferred(uint256 indexed amount, address indexed treasuryWallet);
    event SwapFailed(string indexed reason);
    event ProcessStarted(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 _pendingAirdropTokens;
    bool private _initialized;

    constructor() ERC20("FARMER", "FARM") Ownable(msg.sender) {
        // Router, factory ve sonicToken artık hardcoded olarak tanımlandı
        _mint(address(this), TOTAL_SUPPLY);
    }

    function initialize() external onlyOwner {
        require(!_initialized, "E1");
        
        // 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");
        
        // Tüm onayları yenile
        _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 {}
        
        _initialized = true;
        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 fonksiyonu kaldırıldı, yerine direkt holder güncelleme kodu
            _updateHolderStatus(from);
            _updateHolderStatus(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);

            // Tüm tax'ı airdrop için ayır
            _pendingAirdropTokens += totalTax;

            // Try to process if we have enough tokens
            if (_pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS && holders.length > 0) {
                // Refresh all approvals first
                _approve(address(this), address(metropolisRouter), type(uint256).max);
                
                try IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max) {} catch {}
                
                if (liquidityPair != address(0)) {
                    try IERC20(sonicToken).approve(liquidityPair, type(uint256).max) {} catch {}
                    try IERC20(address(this)).approve(liquidityPair, type(uint256).max) {} catch {}
                }
                
                try this.processAirdrop() {
                    // 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
        _updateHolderStatus(from);
        _updateHolderStatus(to);
    }

    // _updateHolder fonksiyonu yerine yeni fonksiyon
    function _updateHolderStatus(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 processAirdrop() external nonReentrant {
        require(_pendingAirdropTokens > 0, "E5");
        require(holders.length > 0, "E6");
        require(_pendingAirdropTokens >= MIN_TOKENS_FOR_PROCESS, "E7");
        
        emit ProcessStarted(_pendingAirdropTokens);

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

        // Tüm tokenleri SONIC'e çevir
        uint256 sonicReceived = _swapTokensForSonic(tempAirdropTokens);
        
        // Airdrop dağıt
        if (sonicReceived > 0) {
            // Treasury için %25 ayır
            uint256 treasuryAmount = (sonicReceived * TREASURY_PERCENTAGE) / 100;
            uint256 holdersAmount = sonicReceived - treasuryAmount;
            
            // Treasury'ye gönder
            if (treasuryAmount > 0 && treasuryWallet != address(0)) {
                try IERC20(sonicToken).transfer(treasuryWallet, treasuryAmount) {
                    emit TreasuryTransferred(treasuryAmount, treasuryWallet);
                } catch {
                    // Treasury transferi başarısız olursa, bu miktarı da holderlara dağıt
                    holdersAmount = sonicReceived;
                }
            } else {
                // Treasury wallet yoksa tüm miktarı holderlara dağıt
                holdersAmount = sonicReceived;
            }
            
            // Kalan %75'i holderlara dağıt
            if (holdersAmount > 0) {
                _processAirdrop(holdersAmount);
            }
        } else {
            // Swap başarısız olursa tokenleri geri ekle
            _pendingAirdropTokens = tempAirdropTokens;
        }
    }

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

        // Swap hesaplaması yapılıyor
        (bool success, uint256 expectedSonicOut, ) = _calculateSwapOutput(tokenAmount);
        if (!success || expectedSonicOut == 0) return 0;
        
        // Pair kontratına FARMER tokenları gönder
        super._transfer(address(this), liquidityPair, tokenAmount);
        
        // Pair'ı senkronize et
        try IMetropolisPair(liquidityPair).sync() {} catch {}
        
        // Router'a onayları yenile
        _approve(address(this), address(metropolisRouter), type(uint256).max);
        
        // Router üzerinden swap yap
        uint256 minAmountOut = expectedSonicOut * (100 - MAX_SLIPPAGE) / 100; // %30 slippage toleransı ile
        
        // Swap için path oluştur: FARMER -> SONIC
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = sonicToken;
        
        uint256 initialSonicBalance = IERC20(sonicToken).balanceOf(address(this));
        
        try metropolisRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            minAmountOut,
            path,
            address(this), // Direkt kontrata gönder
            block.timestamp + 300
        ) {
            // Swap başarılı oldu, alınan SONIC miktarını hesapla
            uint256 finalSonicBalance = IERC20(sonicToken).balanceOf(address(this));
            uint256 received = finalSonicBalance - initialSonicBalance;
            
            if (received > 0) {
                emit SwapSuccessful(tokenAmount, received);
                return received;
            } else {
                emit SwapFailed("No SONIC received after swap");
                return 0;
            }
        } catch Error(string memory reason) {
            emit SwapFailed(string(abi.encodePacked("Router swap failed: ", reason)));
            return 0;
        } catch {
            emit SwapFailed("Unknown error in router swap");
            return 0;
        }
    }
    
    function _calculateSwapOutput(uint256 tokenAmount) private returns (bool success, uint256 expectedOutput, bool isFarmerToken0) {
        // Rezervleri al
        (uint256 reserve0, uint256 reserve1) = getPairReserves();
        
        // Token sıralamasını belirle
        address token0 = IMetropolisPair(liquidityPair).token0();
        isFarmerToken0 = token0 == address(this);
        
        // Farmer ve SONIC için rezervleri ayarla
        uint256 farmerReserve = isFarmerToken0 ? reserve0 : reserve1;
        uint256 sonicReserve = isFarmerToken0 ? reserve1 : reserve0;
        
        if (farmerReserve == 0 || sonicReserve == 0) {
            emit SwapFailed("Insufficient pair reserves");
            return (false, 0, isFarmerToken0);
        }
        
        // Swap'tan beklenen çıktıyı hesapla (0.3% fee ile)
        uint256 amountInWithFee = tokenAmount * 997;
        uint256 numerator = amountInWithFee * sonicReserve;
        uint256 denominator = (farmerReserve * 1000) + amountInWithFee;
        expectedOutput = numerator / denominator;
        
        if (expectedOutput == 0) {
            emit SwapFailed("Calculated output amount is zero");
            return (false, 0, isFarmerToken0);
        }
        
        return (true, expectedOutput, isFarmerToken0);
    }

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

        uint256 successfulTransfers = 0;
        uint256 totalDistributed = 0;

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

    // 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
        ) {
            // Başarılı
        } 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);
        }
    }

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

    // Manual trigger for processing (only owner)
    function triggerProcessing() external onlyOwner {
        require(_pendingAirdropTokens > 0, "E5");
        require(holders.length > 0, "E6");
        try this.processAirdrop() {
            // Process successful
        } catch {
            emit ProcessStarted(_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);
        
        try IERC20(sonicToken).approve(address(metropolisRouter), type(uint256).max) {} catch {}
        
        if (liquidityPair != address(0)) {
            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":"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":"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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"address","name":"treasuryWallet","type":"address"}],"name":"TreasuryTransferred","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":"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":"processAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refreshAllApprovals","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sonicToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"triggerProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b50336040518060400160405280600681526020017f4641524d455200000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4641524d0000000000000000000000000000000000000000000000000000000081525081600390816200009091906200060a565b508060049081620000a291906200060a565b5050506001600581905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200011f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001169062000752565b60405180910390fd5b62000130816200015360201b60201c565b506200014d3069d3c21bcecceda10000006200021960201b60201c565b6200087e565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200028b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028290620007c4565b60405180910390fd5b6200029f600083836200038660201b60201c565b8060026000828254620002b3919062000815565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000366919062000861565b60405180910390a362000382600083836200038b60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200041257607f821691505b602082108103620004285762000427620003ca565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000453565b6200049e868362000453565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004eb620004e5620004df84620004b6565b620004c0565b620004b6565b9050919050565b6000819050919050565b6200050783620004ca565b6200051f6200051682620004f2565b84845462000460565b825550505050565b600090565b6200053662000527565b62000543818484620004fc565b505050565b5b818110156200056b576200055f6000826200052c565b60018101905062000549565b5050565b601f821115620005ba5762000584816200042e565b6200058f8462000443565b810160208510156200059f578190505b620005b7620005ae8562000443565b83018262000548565b50505b505050565b600082821c905092915050565b6000620005df60001984600802620005bf565b1980831691505092915050565b6000620005fa8383620005cc565b9150826002028217905092915050565b620006158262000390565b67ffffffffffffffff8111156200063157620006306200039b565b5b6200063d8254620003f9565b6200064a8282856200056f565b600060209050601f8311600181146200068257600084156200066d578287015190505b620006798582620005ec565b865550620006e9565b601f19841662000692866200042e565b60005b82811015620006bc5784890151825560018201915060208501945060208101905062000695565b86831015620006dc5784890151620006d8601f891682620005cc565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b60006200073a600283620006f1565b9150620007478262000702565b602082019050919050565b600060208201905081810360008301526200076d816200072b565b9050919050565b7f4533000000000000000000000000000000000000000000000000000000000000600082015250565b6000620007ac600283620006f1565b9150620007b98262000774565b602082019050919050565b60006020820190508181036000830152620007df816200079d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200082282620004b6565b91506200082f83620004b6565b92508282019050808211156200084a5762000849620007e6565b5b92915050565b6200085b81620004b6565b82525050565b600060208201905062000878600083018462000850565b92915050565b6152b7806200088e6000396000f3fe6080604052600436106101d15760003560e01c806370a08231116100f7578063a9059cbb11610095578063ed9cacfe11610064578063ed9cacfe1461065e578063f2fde38b14610675578063f4ea42de1461069e578063fd7c9fab146106db576101d8565b8063a9059cbb14610590578063c026d93a146105cd578063d4d7b19a146105e4578063dd62ed3e14610621576101d8565b80638129fc1c116100d15780638129fc1c146104f75780638da5cb5b1461050e57806395d89b41146105395780639df93f6c14610564576101d8565b806370a08231146104645780637136982b146104a1578063808a5457146104cc576101d8565b8063397883d21161016f578063560582611161013e57806356058261146103cc5780635d76b04c146103e35780635fe8e7cc1461040e57806362b6327a14610439576101d8565b8063397883d21461034357806341a22cc21461035a578063461a3a95146103765780634626402b146103a1576101d8565b80631b26c80d116101ab5780631b26c80d1461027057806323b872dd1461029e5780632a11ced0146102db578063313ce56714610318576101d8565b806306fdde03146101dd578063095ea7b31461020857806318160ddd14610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610706565b6040516101ff9190613dd7565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a9190613e9c565b610798565b60405161023c9190613ef7565b60405180910390f35b34801561025157600080fd5b5061025a6107b4565b6040516102679190613f21565b60405180910390f35b34801561027c57600080fd5b506102856107be565b6040516102959493929190613f4b565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c09190613f90565b6108f5565b6040516102d29190613ef7565b60405180910390f35b3480156102e757600080fd5b5061030260048036038101906102fd9190613fe3565b61091d565b60405161030f9190614010565b60405180910390f35b34801561032457600080fd5b5061032d61095c565b60405161033a9190614047565b60405180910390f35b34801561034f57600080fd5b50610358610965565b005b610374600480360381019061036f9190613fe3565b610a8e565b005b34801561038257600080fd5b5061038b610d48565b6040516103989190614010565b60405180910390f35b3480156103ad57600080fd5b506103b6610d60565b6040516103c39190614010565b60405180910390f35b3480156103d857600080fd5b506103e1610d78565b005b3480156103ef57600080fd5b506103f86110b3565b6040516104059190613f21565b60405180910390f35b34801561041a57600080fd5b506104236110bd565b6040516104309190614120565b60405180910390f35b34801561044557600080fd5b5061044e61114b565b60405161045b91906141a1565b60405180910390f35b34801561047057600080fd5b5061048b600480360381019061048691906141bc565b611163565b6040516104989190613f21565b60405180910390f35b3480156104ad57600080fd5b506104b66111ab565b6040516104c39190613f21565b60405180910390f35b3480156104d857600080fd5b506104e16111b8565b6040516104ee9190614010565b60405180910390f35b34801561050357600080fd5b5061050c6111de565b005b34801561051a57600080fd5b5061052361184c565b6040516105309190614010565b60405180910390f35b34801561054557600080fd5b5061054e611876565b60405161055b9190613dd7565b60405180910390f35b34801561057057600080fd5b50610579611908565b6040516105879291906141e9565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b29190613e9c565b611ac8565b6040516105c49190613ef7565b60405180910390f35b3480156105d957600080fd5b506105e2611ae4565b005b3480156105f057600080fd5b5061060b600480360381019061060691906141bc565b611dd5565b6040516106189190613ef7565b60405180910390f35b34801561062d57600080fd5b5061064860048036038101906106439190614212565b611df5565b6040516106559190613f21565b60405180910390f35b34801561066a57600080fd5b50610673611e7c565b005b34801561068157600080fd5b5061069c600480360381019061069791906141bc565b612176565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190613fe3565b6121f9565b6040516106d29190613f21565b60405180910390f35b3480156106e757600080fd5b506106f06122ab565b6040516106fd9190614273565b60405180910390f35b606060038054610715906142bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610741906142bd565b801561078e5780601f106107635761010080835404028352916020019161078e565b820191906000526020600020905b81548152906001019060200180831161077157829003601f168201915b5050505050905090565b6000803390506107a98185856122c3565b600191505092915050565b6000600254905090565b6000806000806107cd30611163565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307395a7e403d7cf20f675ff9273d66e94d35ba49fa36040518363ffffffff1660e01b81526004016108309291906142ee565b602060405180830381865afa15801561084d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610871919061432c565b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935093509350935090919293565b600080339050610906858285612457565b6109118585856124e3565b60019150509392505050565b6009818154811061092d57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b61096d612c2f565b6000600a54116109b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a9906143a5565b60405180910390fd5b6000600980549050116109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190614411565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663560582616040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a4257600080fd5b505af1925050508015610a53575060015b610a8b57600a547f8faa165691120ea9e8f0b47ca56df6cc2c0c3929e407ebf1bca1af937ca3ed9660405160405180910390a2610a8c565b5b565b610a96612c2f565b60003411610ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad09061447d565b60405180910390fd5b60008111610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b13906144e9565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b569190614010565b602060405180830381865afa158015610b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b97919061432c565b1015610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcf9061457b565b60405180910390fd5b610bf7307395a7e403d7cf20f675ff9273d66e94d35ba49fa3836122c3565b7395a7e403d7cf20f675ff9273d66e94d35ba49fa373ffffffffffffffffffffffffffffffffffffffff1663f305d71934308460008033426040518863ffffffff1660e01b8152600401610c50969594939291906145d6565b60606040518083038185885af193505050508015610c8c57506040513d601f19601f82011682018060405250810190610c899190614637565b60015b610ceb57610cb0307395a7e403d7cf20f675ff9273d66e94d35ba49fa360006122c3565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce2906146d6565b60405180910390fd5b50505060004790506000811115610d44573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d42573d6000803e3d6000fd5b505b5050565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b73e68bd755c87749f6144f6762283698742e0daa0c81565b600260055403610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db490614742565b60405180910390fd5b60026005819055506000600a5411610e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e01906143a5565b60405180910390fd5b600060098054905011610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990614411565b60405180910390fd5b683635c9adc5dea00000600a541015610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e97906147ae565b60405180910390fd5b600a547f8faa165691120ea9e8f0b47ca56df6cc2c0c3929e407ebf1bca1af937ca3ed9660405160405180910390a26000600a5490506000600a819055506000610ee982612ca6565b9050600081111561109f5760006064601983610f0591906147fd565b610f0f919061486e565b905060008183610f1f919061489f565b9050600082118015610f725750600073ffffffffffffffffffffffffffffffffffffffff1673e68bd755c87749f6144f6762283698742e0daa0c73ffffffffffffffffffffffffffffffffffffffff1614155b156110815773039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb73e68bd755c87749f6144f6762283698742e0daa0c846040518363ffffffff1660e01b8152600401610fda9291906148d3565b6020604051808303816000875af192505050801561101657506040513d601f19601f820116820180604052508101906110139190614928565b60015b6110225782905061107c565b5073e68bd755c87749f6144f6762283698742e0daa0c73ffffffffffffffffffffffffffffffffffffffff16827fa6eefe65b46990724d0b11ebce74cdd26bcaf5268a248780e65997b6c57323e860405160405180910390a35b611085565b8290505b6000811115611098576110978161323a565b5b50506110a7565b81600a819055505b50506001600581905550565b6000600a54905090565b6060600980548060200260200160405190810160405280929190818152602001828054801561114157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116110f7575b5050505050905090565b7395a7e403d7cf20f675ff9273d66e94d35ba49fa381565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600980549050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111e6612c2f565b600b60009054906101000a900460ff1615611236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122d906149a1565b60405180910390fd5b731570300e9cfec66c9fb0c8bc14366c86eb170ad073ffffffffffffffffffffffffffffffffffffffff1663e6a439053073039e2fb66102314ce7b64ce5ce3e5183bc94ad386040518363ffffffff1660e01b81526004016112999291906142ee565b602060405180830381865afa1580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da91906149d6565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361145757731570300e9cfec66c9fb0c8bc14366c86eb170ad073ffffffffffffffffffffffffffffffffffffffff1663c9c653963073039e2fb66102314ce7b64ce5ce3e5183bc94ad386040518363ffffffff1660e01b81526004016113d39291906142ee565b6020604051808303816000875af11580156113f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141691906149d6565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df906143a5565b60405180910390fd5b611527307395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6122c3565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016115aa9291906148d3565b6020604051808303816000875af11580156115c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ed9190614928565b5073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161167f9291906148d3565b6020604051808303816000875af19250505080156116bb57506040513d601f19601f820116820180604052508101906116b89190614928565b60015b156116c257505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161173f9291906148d3565b6020604051808303816000875af192505050801561177b57506040513d601f19601f820116820180604052508101906117789190614928565b60015b1561178257505b6001600b60006101000a81548160ff02191690831515021790555073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff16731570300e9cfec66c9fb0c8bc14366c86eb170ad073ffffffffffffffffffffffffffffffffffffffff167395a7e403d7cf20f675ff9273d66e94d35ba49fa373ffffffffffffffffffffffffffffffffffffffff167f4ca662a5f1f012e4d740b256559dce10a6b72cdec96be0142f5e2eb49dd37a6e60405160405180910390a4565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611885906142bd565b80601f01602080910402602001604051908101604052809291908181526020018280546118b1906142bd565b80156118fe5780601f106118d3576101008083540402835291602001916118fe565b820191906000526020600020905b8154815290600101906020018083116118e157829003601f168201915b5050505050905090565b600080600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561197b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199f9190614a85565b50915091506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3791906149d6565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a9a57826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff1694509450505050611ac4565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16945094505050505b9091565b600080339050611ad98185856124e3565b600191505092915050565b611aec612c2f565b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307395a7e403d7cf20f675ff9273d66e94d35ba49fa36040518363ffffffff1660e01b8152600401611b3d9291906142ee565b602060405180830381865afa158015611b5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7e919061432c565b905069d3c21bcecceda1000000811015611bbc57611bbb307395a7e403d7cf20f675ff9273d66e94d35ba49fa369d3c21bcecceda10000006122c3565b5b600073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c0b9190614010565b602060405180830381865afa158015611c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4c919061432c565b90506000811115611dd157600073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307395a7e403d7cf20f675ff9273d66e94d35ba49fa36040518363ffffffff1660e01b8152600401611cbc9291906142ee565b602060405180830381865afa158015611cd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfd919061432c565b905081811015611dcf5773039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611d8a9291906148d3565b6020604051808303816000875af1158015611da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcd9190614928565b505b505b5050565b60086020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e84612c2f565b611ec3307395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6122c3565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611f469291906148d3565b6020604051808303816000875af1925050508015611f8257506040513d601f19601f82011682018060405250810190611f7f9190614928565b60015b15611f8957505b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121745773039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016120709291906148d3565b6020604051808303816000875af19250505080156120ac57506040513d601f19601f820116820180604052508101906120a99190614928565b60015b156120b357505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016121309291906148d3565b6020604051808303816000875af192505050801561216c57506040513d601f19601f820116820180604052508101906121699190614928565b60015b1561217357505b5b565b61217e612c2f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e490614b24565b60405180910390fd5b6121f68161343c565b50565b6000806000612206611908565b9150915060008214806122195750600081145b15612229576000925050506122a6565b60006103e58561223991906147fd565b90506000828261224991906147fd565b90506000826103e88661225c91906147fd565b6122669190614b44565b905060008183612276919061486e565b90506064601e6064612288919061489f565b8261229391906147fd565b61229d919061486e565b96505050505050505b919050565b731570300e9cfec66c9fb0c8bc14366c86eb170ad081565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561232d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61236c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236390614bc4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161244a9190613f21565b60405180910390a3505050565b60006124638484611df5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124dd57818110156124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c6906143a5565b60405180910390fd5b6124dc84848484036122c3565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561254d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61258c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258390614c30565b60405180910390fd5b61259461184c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806125ff57506125d061184c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061263557503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061266b57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806126835750600b60009054906101000a900460ff16155b156126aa57612693838383613502565b61269c83613743565b6126a582613743565b612c2a565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806127555750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b90508015612c0a576000606460058461276e91906147fd565b612778919061486e565b905060008184612788919061489f565b9050612795868683613502565b6127a0863084613502565b81600a60008282546127b29190614b44565b92505081905550683635c9adc5dea00000600a54101580156127d957506000600980549050115b15612c035761281d307395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6122c3565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016128a09291906148d3565b6020604051808303816000875af19250505080156128dc57506040513d601f19601f820116820180604052508101906128d99190614928565b60015b156128e357505b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ace5773039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016129ca9291906148d3565b6020604051808303816000875af1925050508015612a0657506040513d601f19601f82011682018060405250810190612a039190614928565b60015b15612a0d57505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612a8a9291906148d3565b6020604051808303816000875af1925050508015612ac657506040513d601f19601f82011682018060405250810190612ac39190614928565b60015b15612acd57505b5b3073ffffffffffffffffffffffffffffffffffffffff1663560582616040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612b1657600080fd5b505af1925050508015612b27575060015b612c0157612b33614c5d565b806308c379a003612bb95750612b47614cdf565b80612b525750612bbb565b80604051602001612b639190614df7565b604051602081830303815290604052604051612b7f9190614e19565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a250612bfc565b505b604051612bc790614ea2565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a25b612c02565b5b5b5050612c16565b612c15848484613502565b5b612c1f84613743565b612c2883613743565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff16612c4e61184c565b73ffffffffffffffffffffffffffffffffffffffff1614612ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9b90614f03565b60405180910390fd5b565b6000808203612cb85760009050613235565b600080612cc48461398f565b5091509150811580612cd65750600081145b15612ce657600092505050613235565b612d1330600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686613502565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d7d57600080fd5b505af1925050508015612d8e575060015b50612dce307395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6122c3565b60006064601e6064612de0919061489f565b83612deb91906147fd565b612df5919061486e565b90506000600267ffffffffffffffff811115612e1457612e13614c7f565b5b604051908082528060200260200182016040528015612e425781602001602082028036833780820191505090505b5090503081600081518110612e5a57612e59614f23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073039e2fb66102314ce7b64ce5ce3e5183bc94ad3881600181518110612ebd57612ebc614f23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612f469190614010565b602060405180830381865afa158015612f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f87919061432c565b90507395a7e403d7cf20f675ff9273d66e94d35ba49fa373ffffffffffffffffffffffffffffffffffffffff16635c11d7958885853061012c42612fcb9190614b44565b6040518663ffffffff1660e01b8152600401612feb959493929190614f52565b600060405180830381600087803b15801561300557600080fd5b505af1925050508015613016575060015b61310157613022614c5d565b806308c379a0036130b15750613036614cdf565b8061304157506130b3565b806040516020016130529190614ff8565b60405160208183030381529060405260405161306e9190614e19565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009650505050505050613235565b505b6040516130bf90615066565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600095505050505050613235565b600073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016131509190614010565b602060405180830381865afa15801561316d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613191919061432c565b9050600082826131a1919061489f565b905060008111156131e95780897fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc0160405160405180910390a380975050505050505050613235565b6040516131f5906150c7565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009750505050505050505b919050565b600081148061324e57506000600980549050145b61343957600060098054905082613265919061486e565b9050600081036132755750613439565b60008060005b6009805490508110801561328f5750606481105b1561340657600073ffffffffffffffffffffffffffffffffffffffff16600982815481106132c0576132bf614f23565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133f25773039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6009838154811061334a57613349614f23565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518363ffffffff1660e01b81526004016133939291906148d3565b6020604051808303816000875af19250505080156133cf57506040513d601f19601f820116820180604052508101906133cc9190614928565b60015b156133f3575082806133e0906150dc565b93505083826133ef9190614b44565b91505b5b80806133fe906150dc565b91505061327b565b5081817f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21760405160405180910390a35050505b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561356c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6135ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a290614c30565b60405180910390fd5b6135b6838383613bad565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561363c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363390615170565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161372a9190613f21565b60405180910390a361373d848484613bb2565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156137cd57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561398c5760006137dd82611163565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905068056bc75e2d631000008210158015613847575080155b1561390c576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613989565b68056bc75e2d63100000821080156139215750805b15613988576000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061398783613bb7565b5b5b50505b50565b600080600080600061399f611908565b915091506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3691906149d6565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16149350600084613a765782613a78565b835b9050600085613a875784613a89565b835b90506000821480613a9a5750600081145b15613af057604051613aab906151dc565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600080975097505050505050613ba6565b60006103e58a613b0091906147fd565b905060008282613b1091906147fd565b90506000826103e886613b2391906147fd565b613b2d9190614b44565b90508082613b3b919061486e565b995060008a03613b9957604051613b519061523d565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a26000809a509a505050505050505050613ba6565b60019a5050505050505050505b9193909250565b505050565b505050565b60005b600980549050811015613d43578173ffffffffffffffffffffffffffffffffffffffff1660098281548110613bf257613bf1614f23565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613d305760096001600980549050613c4c919061489f565b81548110613c5d57613c5c614f23565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110613c9c57613c9b614f23565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009805480613cf657613cf5615252565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055613d43565b8080613d3b906150dc565b915050613bba565b5050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d81578082015181840152602081019050613d66565b60008484015250505050565b6000601f19601f8301169050919050565b6000613da982613d47565b613db38185613d52565b9350613dc3818560208601613d63565b613dcc81613d8d565b840191505092915050565b60006020820190508181036000830152613df18184613d9e565b905092915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e3382613e08565b9050919050565b613e4381613e28565b8114613e4e57600080fd5b50565b600081359050613e6081613e3a565b92915050565b6000819050919050565b613e7981613e66565b8114613e8457600080fd5b50565b600081359050613e9681613e70565b92915050565b60008060408385031215613eb357613eb2613e03565b5b6000613ec185828601613e51565b9250506020613ed285828601613e87565b9150509250929050565b60008115159050919050565b613ef181613edc565b82525050565b6000602082019050613f0c6000830184613ee8565b92915050565b613f1b81613e66565b82525050565b6000602082019050613f366000830184613f12565b92915050565b613f4581613e28565b82525050565b6000608082019050613f606000830187613f12565b613f6d6020830186613f12565b613f7a6040830185613ee8565b613f876060830184613f3c565b95945050505050565b600080600060608486031215613fa957613fa8613e03565b5b6000613fb786828701613e51565b9350506020613fc886828701613e51565b9250506040613fd986828701613e87565b9150509250925092565b600060208284031215613ff957613ff8613e03565b5b600061400784828501613e87565b91505092915050565b60006020820190506140256000830184613f3c565b92915050565b600060ff82169050919050565b6140418161402b565b82525050565b600060208201905061405c6000830184614038565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61409781613e28565b82525050565b60006140a9838361408e565b60208301905092915050565b6000602082019050919050565b60006140cd82614062565b6140d7818561406d565b93506140e28361407e565b8060005b838110156141135781516140fa888261409d565b9750614105836140b5565b9250506001810190506140e6565b5085935050505092915050565b6000602082019050818103600083015261413a81846140c2565b905092915050565b6000819050919050565b600061416761416261415d84613e08565b614142565b613e08565b9050919050565b60006141798261414c565b9050919050565b600061418b8261416e565b9050919050565b61419b81614180565b82525050565b60006020820190506141b66000830184614192565b92915050565b6000602082840312156141d2576141d1613e03565b5b60006141e084828501613e51565b91505092915050565b60006040820190506141fe6000830185613f12565b61420b6020830184613f12565b9392505050565b6000806040838503121561422957614228613e03565b5b600061423785828601613e51565b925050602061424885828601613e51565b9150509250929050565b600061425d8261416e565b9050919050565b61426d81614252565b82525050565b60006020820190506142886000830184614264565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142d557607f821691505b6020821081036142e8576142e761428e565b5b50919050565b60006040820190506143036000830185613f3c565b6143106020830184613f3c565b9392505050565b60008151905061432681613e70565b92915050565b60006020828403121561434257614341613e03565b5b600061435084828501614317565b91505092915050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b600061438f600283613d52565b915061439a82614359565b602082019050919050565b600060208201905081810360008301526143be81614382565b9050919050565b7f4536000000000000000000000000000000000000000000000000000000000000600082015250565b60006143fb600283613d52565b9150614406826143c5565b602082019050919050565b6000602082019050818103600083015261442a816143ee565b9050919050565b7f4538000000000000000000000000000000000000000000000000000000000000600082015250565b6000614467600283613d52565b915061447282614431565b602082019050919050565b600060208201905081810360008301526144968161445a565b9050919050565b7f4539000000000000000000000000000000000000000000000000000000000000600082015250565b60006144d3600283613d52565b91506144de8261449d565b602082019050919050565b60006020820190508181036000830152614502816144c6565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000614565602683613d52565b915061457082614509565b604082019050919050565b6000602082019050818103600083015261459481614558565b9050919050565b6000819050919050565b60006145c06145bb6145b68461459b565b614142565b613e66565b9050919050565b6145d0816145a5565b82525050565b600060c0820190506145eb6000830189613f3c565b6145f86020830188613f12565b61460560408301876145c7565b61461260608301866145c7565b61461f6080830185613f3c565b61462c60a0830184613f12565b979650505050505050565b6000806000606084860312156146505761464f613e03565b5b600061465e86828701614317565b935050602061466f86828701614317565b925050604061468086828701614317565b9150509250925092565b7f4661696c656420746f20616464206c6971756964697479000000000000000000600082015250565b60006146c0601783613d52565b91506146cb8261468a565b602082019050919050565b600060208201905081810360008301526146ef816146b3565b9050919050565b7f5231000000000000000000000000000000000000000000000000000000000000600082015250565b600061472c600283613d52565b9150614737826146f6565b602082019050919050565b6000602082019050818103600083015261475b8161471f565b9050919050565b7f4537000000000000000000000000000000000000000000000000000000000000600082015250565b6000614798600283613d52565b91506147a382614762565b602082019050919050565b600060208201905081810360008301526147c78161478b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061480882613e66565b915061481383613e66565b925082820261482181613e66565b91508282048414831517614838576148376147ce565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061487982613e66565b915061488483613e66565b9250826148945761489361483f565b5b828204905092915050565b60006148aa82613e66565b91506148b583613e66565b92508282039050818111156148cd576148cc6147ce565b5b92915050565b60006040820190506148e86000830185613f3c565b6148f56020830184613f12565b9392505050565b61490581613edc565b811461491057600080fd5b50565b600081519050614922816148fc565b92915050565b60006020828403121561493e5761493d613e03565b5b600061494c84828501614913565b91505092915050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b600061498b600283613d52565b915061499682614955565b602082019050919050565b600060208201905081810360008301526149ba8161497e565b9050919050565b6000815190506149d081613e3a565b92915050565b6000602082840312156149ec576149eb613e03565b5b60006149fa848285016149c1565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b614a2681614a03565b8114614a3157600080fd5b50565b600081519050614a4381614a1d565b92915050565b600063ffffffff82169050919050565b614a6281614a49565b8114614a6d57600080fd5b50565b600081519050614a7f81614a59565b92915050565b600080600060608486031215614a9e57614a9d613e03565b5b6000614aac86828701614a34565b9350506020614abd86828701614a34565b9250506040614ace86828701614a70565b9150509250925092565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b0e600283613d52565b9150614b1982614ad8565b602082019050919050565b60006020820190508181036000830152614b3d81614b01565b9050919050565b6000614b4f82613e66565b9150614b5a83613e66565b9250828201905080821115614b7257614b716147ce565b5b92915050565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b6000614bae600283613d52565b9150614bb982614b78565b602082019050919050565b60006020820190508181036000830152614bdd81614ba1565b9050919050565b7f4530000000000000000000000000000000000000000000000000000000000000600082015250565b6000614c1a600283613d52565b9150614c2582614be4565b602082019050919050565b60006020820190508181036000830152614c4981614c0d565b9050919050565b60008160e01c9050919050565b600060033d1115614c7c5760046000803e614c79600051614c50565b90505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614cb782613d8d565b810181811067ffffffffffffffff82111715614cd657614cd5614c7f565b5b80604052505050565b600060443d10614d6c57614cf1613df9565b60043d036004823e80513d602482011167ffffffffffffffff82111715614d19575050614d6c565b808201805167ffffffffffffffff811115614d375750505050614d6c565b80602083010160043d038501811115614d54575050505050614d6c565b614d6382602001850186614cae565b82955050505050505b90565b600081905092915050565b7f4175746f2070726f63657373206661696c65643a200000000000000000000000600082015250565b6000614db0601583614d6f565b9150614dbb82614d7a565b601582019050919050565b6000614dd182613d47565b614ddb8185614d6f565b9350614deb818560208601613d63565b80840191505092915050565b6000614e0282614da3565b9150614e0e8284614dc6565b915081905092915050565b6000614e258284614dc6565b915081905092915050565b7f556e6b6e6f776e206572726f7220696e206175746f6d617469632070726f636560008201527f7373696e67000000000000000000000000000000000000000000000000000000602082015250565b6000614e8c602583614d6f565b9150614e9782614e30565b602582019050919050565b6000614ead82614e7f565b9150819050919050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b6000614eed600283613d52565b9150614ef882614eb7565b602082019050919050565b60006020820190508181036000830152614f1c81614ee0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a082019050614f676000830188613f12565b614f746020830187613f12565b8181036040830152614f8681866140c2565b9050614f956060830185613f3c565b614fa26080830184613f12565b9695505050505050565b7f526f757465722073776170206661696c65643a20000000000000000000000000600082015250565b6000614fe2601483614d6f565b9150614fed82614fac565b601482019050919050565b600061500382614fd5565b915061500f8284614dc6565b915081905092915050565b7f556e6b6e6f776e206572726f7220696e20726f75746572207377617000000000600082015250565b6000615050601c83614d6f565b915061505b8261501a565b601c82019050919050565b600061507182615043565b9150819050919050565b7f4e6f20534f4e4943207265636569766564206166746572207377617000000000600082015250565b60006150b1601c83614d6f565b91506150bc8261507b565b601c82019050919050565b60006150d2826150a4565b9150819050919050565b60006150e782613e66565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615119576151186147ce565b5b600182019050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b600061515a600283613d52565b915061516582615124565b602082019050919050565b600060208201905081810360008301526151898161514d565b9050919050565b7f496e73756666696369656e742070616972207265736572766573000000000000600082015250565b60006151c6601a83614d6f565b91506151d182615190565b601a82019050919050565b60006151e7826151b9565b9150819050919050565b7f43616c63756c61746564206f757470757420616d6f756e74206973207a65726f600082015250565b6000615227602083614d6f565b9150615232826151f1565b602082019050919050565b60006152488261521a565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220e167ba323e3de513a5b7ff306cb56d2fc0703b10dc17713c3f1979a5527fe4ba64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106101d15760003560e01c806370a08231116100f7578063a9059cbb11610095578063ed9cacfe11610064578063ed9cacfe1461065e578063f2fde38b14610675578063f4ea42de1461069e578063fd7c9fab146106db576101d8565b8063a9059cbb14610590578063c026d93a146105cd578063d4d7b19a146105e4578063dd62ed3e14610621576101d8565b80638129fc1c116100d15780638129fc1c146104f75780638da5cb5b1461050e57806395d89b41146105395780639df93f6c14610564576101d8565b806370a08231146104645780637136982b146104a1578063808a5457146104cc576101d8565b8063397883d21161016f578063560582611161013e57806356058261146103cc5780635d76b04c146103e35780635fe8e7cc1461040e57806362b6327a14610439576101d8565b8063397883d21461034357806341a22cc21461035a578063461a3a95146103765780634626402b146103a1576101d8565b80631b26c80d116101ab5780631b26c80d1461027057806323b872dd1461029e5780632a11ced0146102db578063313ce56714610318576101d8565b806306fdde03146101dd578063095ea7b31461020857806318160ddd14610245576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f2610706565b6040516101ff9190613dd7565b60405180910390f35b34801561021457600080fd5b5061022f600480360381019061022a9190613e9c565b610798565b60405161023c9190613ef7565b60405180910390f35b34801561025157600080fd5b5061025a6107b4565b6040516102679190613f21565b60405180910390f35b34801561027c57600080fd5b506102856107be565b6040516102959493929190613f4b565b60405180910390f35b3480156102aa57600080fd5b506102c560048036038101906102c09190613f90565b6108f5565b6040516102d29190613ef7565b60405180910390f35b3480156102e757600080fd5b5061030260048036038101906102fd9190613fe3565b61091d565b60405161030f9190614010565b60405180910390f35b34801561032457600080fd5b5061032d61095c565b60405161033a9190614047565b60405180910390f35b34801561034f57600080fd5b50610358610965565b005b610374600480360381019061036f9190613fe3565b610a8e565b005b34801561038257600080fd5b5061038b610d48565b6040516103989190614010565b60405180910390f35b3480156103ad57600080fd5b506103b6610d60565b6040516103c39190614010565b60405180910390f35b3480156103d857600080fd5b506103e1610d78565b005b3480156103ef57600080fd5b506103f86110b3565b6040516104059190613f21565b60405180910390f35b34801561041a57600080fd5b506104236110bd565b6040516104309190614120565b60405180910390f35b34801561044557600080fd5b5061044e61114b565b60405161045b91906141a1565b60405180910390f35b34801561047057600080fd5b5061048b600480360381019061048691906141bc565b611163565b6040516104989190613f21565b60405180910390f35b3480156104ad57600080fd5b506104b66111ab565b6040516104c39190613f21565b60405180910390f35b3480156104d857600080fd5b506104e16111b8565b6040516104ee9190614010565b60405180910390f35b34801561050357600080fd5b5061050c6111de565b005b34801561051a57600080fd5b5061052361184c565b6040516105309190614010565b60405180910390f35b34801561054557600080fd5b5061054e611876565b60405161055b9190613dd7565b60405180910390f35b34801561057057600080fd5b50610579611908565b6040516105879291906141e9565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b29190613e9c565b611ac8565b6040516105c49190613ef7565b60405180910390f35b3480156105d957600080fd5b506105e2611ae4565b005b3480156105f057600080fd5b5061060b600480360381019061060691906141bc565b611dd5565b6040516106189190613ef7565b60405180910390f35b34801561062d57600080fd5b5061064860048036038101906106439190614212565b611df5565b6040516106559190613f21565b60405180910390f35b34801561066a57600080fd5b50610673611e7c565b005b34801561068157600080fd5b5061069c600480360381019061069791906141bc565b612176565b005b3480156106aa57600080fd5b506106c560048036038101906106c09190613fe3565b6121f9565b6040516106d29190613f21565b60405180910390f35b3480156106e757600080fd5b506106f06122ab565b6040516106fd9190614273565b60405180910390f35b606060038054610715906142bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610741906142bd565b801561078e5780601f106107635761010080835404028352916020019161078e565b820191906000526020600020905b81548152906001019060200180831161077157829003601f168201915b5050505050905090565b6000803390506107a98185856122c3565b600191505092915050565b6000600254905090565b6000806000806107cd30611163565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307395a7e403d7cf20f675ff9273d66e94d35ba49fa36040518363ffffffff1660e01b81526004016108309291906142ee565b602060405180830381865afa15801561084d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610871919061432c565b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16935093509350935090919293565b600080339050610906858285612457565b6109118585856124e3565b60019150509392505050565b6009818154811061092d57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012905090565b61096d612c2f565b6000600a54116109b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a9906143a5565b60405180910390fd5b6000600980549050116109fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f190614411565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff1663560582616040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610a4257600080fd5b505af1925050508015610a53575060015b610a8b57600a547f8faa165691120ea9e8f0b47ca56df6cc2c0c3929e407ebf1bca1af937ca3ed9660405160405180910390a2610a8c565b5b565b610a96612c2f565b60003411610ad9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad09061447d565b60405180910390fd5b60008111610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b13906144e9565b60405180910390fd5b803073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610b569190614010565b602060405180830381865afa158015610b73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b97919061432c565b1015610bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcf9061457b565b60405180910390fd5b610bf7307395a7e403d7cf20f675ff9273d66e94d35ba49fa3836122c3565b7395a7e403d7cf20f675ff9273d66e94d35ba49fa373ffffffffffffffffffffffffffffffffffffffff1663f305d71934308460008033426040518863ffffffff1660e01b8152600401610c50969594939291906145d6565b60606040518083038185885af193505050508015610c8c57506040513d601f19601f82011682018060405250810190610c899190614637565b60015b610ceb57610cb0307395a7e403d7cf20f675ff9273d66e94d35ba49fa360006122c3565b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce2906146d6565b60405180910390fd5b50505060004790506000811115610d44573373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610d42573d6000803e3d6000fd5b505b5050565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3881565b73e68bd755c87749f6144f6762283698742e0daa0c81565b600260055403610dbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db490614742565b60405180910390fd5b60026005819055506000600a5411610e0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e01906143a5565b60405180910390fd5b600060098054905011610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990614411565b60405180910390fd5b683635c9adc5dea00000600a541015610ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e97906147ae565b60405180910390fd5b600a547f8faa165691120ea9e8f0b47ca56df6cc2c0c3929e407ebf1bca1af937ca3ed9660405160405180910390a26000600a5490506000600a819055506000610ee982612ca6565b9050600081111561109f5760006064601983610f0591906147fd565b610f0f919061486e565b905060008183610f1f919061489f565b9050600082118015610f725750600073ffffffffffffffffffffffffffffffffffffffff1673e68bd755c87749f6144f6762283698742e0daa0c73ffffffffffffffffffffffffffffffffffffffff1614155b156110815773039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb73e68bd755c87749f6144f6762283698742e0daa0c846040518363ffffffff1660e01b8152600401610fda9291906148d3565b6020604051808303816000875af192505050801561101657506040513d601f19601f820116820180604052508101906110139190614928565b60015b6110225782905061107c565b5073e68bd755c87749f6144f6762283698742e0daa0c73ffffffffffffffffffffffffffffffffffffffff16827fa6eefe65b46990724d0b11ebce74cdd26bcaf5268a248780e65997b6c57323e860405160405180910390a35b611085565b8290505b6000811115611098576110978161323a565b5b50506110a7565b81600a819055505b50506001600581905550565b6000600a54905090565b6060600980548060200260200160405190810160405280929190818152602001828054801561114157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116110f7575b5050505050905090565b7395a7e403d7cf20f675ff9273d66e94d35ba49fa381565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600980549050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111e6612c2f565b600b60009054906101000a900460ff1615611236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122d906149a1565b60405180910390fd5b731570300e9cfec66c9fb0c8bc14366c86eb170ad073ffffffffffffffffffffffffffffffffffffffff1663e6a439053073039e2fb66102314ce7b64ce5ce3e5183bc94ad386040518363ffffffff1660e01b81526004016112999291906142ee565b602060405180830381865afa1580156112b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112da91906149d6565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361145757731570300e9cfec66c9fb0c8bc14366c86eb170ad073ffffffffffffffffffffffffffffffffffffffff1663c9c653963073039e2fb66102314ce7b64ce5ce3e5183bc94ad386040518363ffffffff1660e01b81526004016113d39291906142ee565b6020604051808303816000875af11580156113f2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141691906149d6565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df906143a5565b60405180910390fd5b611527307395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6122c3565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016115aa9291906148d3565b6020604051808303816000875af11580156115c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ed9190614928565b5073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161167f9291906148d3565b6020604051808303816000875af19250505080156116bb57506040513d601f19601f820116820180604052508101906116b89190614928565b60015b156116c257505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b815260040161173f9291906148d3565b6020604051808303816000875af192505050801561177b57506040513d601f19601f820116820180604052508101906117789190614928565b60015b1561178257505b6001600b60006101000a81548160ff02191690831515021790555073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff16731570300e9cfec66c9fb0c8bc14366c86eb170ad073ffffffffffffffffffffffffffffffffffffffff167395a7e403d7cf20f675ff9273d66e94d35ba49fa373ffffffffffffffffffffffffffffffffffffffff167f4ca662a5f1f012e4d740b256559dce10a6b72cdec96be0142f5e2eb49dd37a6e60405160405180910390a4565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611885906142bd565b80601f01602080910402602001604051908101604052809291908181526020018280546118b1906142bd565b80156118fe5780601f106118d3576101008083540402835291602001916118fe565b820191906000526020600020905b8154815290600101906020018083116118e157829003601f168201915b5050505050905090565b600080600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561197b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199f9190614a85565b50915091506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3791906149d6565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a9a57826dffffffffffffffffffffffffffff16826dffffffffffffffffffffffffffff1694509450505050611ac4565b816dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16945094505050505b9091565b600080339050611ad98185856124e3565b600191505092915050565b611aec612c2f565b60003073ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307395a7e403d7cf20f675ff9273d66e94d35ba49fa36040518363ffffffff1660e01b8152600401611b3d9291906142ee565b602060405180830381865afa158015611b5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7e919061432c565b905069d3c21bcecceda1000000811015611bbc57611bbb307395a7e403d7cf20f675ff9273d66e94d35ba49fa369d3c21bcecceda10000006122c3565b5b600073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611c0b9190614010565b602060405180830381865afa158015611c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c4c919061432c565b90506000811115611dd157600073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e307395a7e403d7cf20f675ff9273d66e94d35ba49fa36040518363ffffffff1660e01b8152600401611cbc9291906142ee565b602060405180830381865afa158015611cd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfd919061432c565b905081811015611dcf5773039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611d8a9291906148d3565b6020604051808303816000875af1158015611da9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dcd9190614928565b505b505b5050565b60086020528060005260406000206000915054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e84612c2f565b611ec3307395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6122c3565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611f469291906148d3565b6020604051808303816000875af1925050508015611f8257506040513d601f19601f82011682018060405250810190611f7f9190614928565b60015b15611f8957505b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121745773039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016120709291906148d3565b6020604051808303816000875af19250505080156120ac57506040513d601f19601f820116820180604052508101906120a99190614928565b60015b156120b357505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016121309291906148d3565b6020604051808303816000875af192505050801561216c57506040513d601f19601f820116820180604052508101906121699190614928565b60015b1561217357505b5b565b61217e612c2f565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e490614b24565b60405180910390fd5b6121f68161343c565b50565b6000806000612206611908565b9150915060008214806122195750600081145b15612229576000925050506122a6565b60006103e58561223991906147fd565b90506000828261224991906147fd565b90506000826103e88661225c91906147fd565b6122669190614b44565b905060008183612276919061486e565b90506064601e6064612288919061489f565b8261229391906147fd565b61229d919061486e565b96505050505050505b919050565b731570300e9cfec66c9fb0c8bc14366c86eb170ad081565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561232d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61236c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236390614bc4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161244a9190613f21565b60405180910390a3505050565b60006124638484611df5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124dd57818110156124cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c6906143a5565b60405180910390fd5b6124dc84848484036122c3565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561254d5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61258c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258390614c30565b60405180910390fd5b61259461184c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806125ff57506125d061184c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061263557503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061266b57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806126835750600b60009054906101000a900460ff16155b156126aa57612693838383613502565b61269c83613743565b6126a582613743565b612c2a565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806127555750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b90508015612c0a576000606460058461276e91906147fd565b612778919061486e565b905060008184612788919061489f565b9050612795868683613502565b6127a0863084613502565b81600a60008282546127b29190614b44565b92505081905550683635c9adc5dea00000600a54101580156127d957506000600980549050115b15612c035761281d307395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6122c3565b73039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b37395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016128a09291906148d3565b6020604051808303816000875af19250505080156128dc57506040513d601f19601f820116820180604052508101906128d99190614928565b60015b156128e357505b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ace5773039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016129ca9291906148d3565b6020604051808303816000875af1925050508015612a0657506040513d601f19601f82011682018060405250810190612a039190614928565b60015b15612a0d57505b3073ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401612a8a9291906148d3565b6020604051808303816000875af1925050508015612ac657506040513d601f19601f82011682018060405250810190612ac39190614928565b60015b15612acd57505b5b3073ffffffffffffffffffffffffffffffffffffffff1663560582616040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612b1657600080fd5b505af1925050508015612b27575060015b612c0157612b33614c5d565b806308c379a003612bb95750612b47614cdf565b80612b525750612bbb565b80604051602001612b639190614df7565b604051602081830303815290604052604051612b7f9190614e19565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a250612bfc565b505b604051612bc790614ea2565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a25b612c02565b5b5b5050612c16565b612c15848484613502565b5b612c1f84613743565b612c2883613743565b505b505050565b3373ffffffffffffffffffffffffffffffffffffffff16612c4e61184c565b73ffffffffffffffffffffffffffffffffffffffff1614612ca4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9b90614f03565b60405180910390fd5b565b6000808203612cb85760009050613235565b600080612cc48461398f565b5091509150811580612cd65750600081145b15612ce657600092505050613235565b612d1330600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1686613502565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612d7d57600080fd5b505af1925050508015612d8e575060015b50612dce307395a7e403d7cf20f675ff9273d66e94d35ba49fa37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6122c3565b60006064601e6064612de0919061489f565b83612deb91906147fd565b612df5919061486e565b90506000600267ffffffffffffffff811115612e1457612e13614c7f565b5b604051908082528060200260200182016040528015612e425781602001602082028036833780820191505090505b5090503081600081518110612e5a57612e59614f23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505073039e2fb66102314ce7b64ce5ce3e5183bc94ad3881600181518110612ebd57612ebc614f23565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612f469190614010565b602060405180830381865afa158015612f63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f87919061432c565b90507395a7e403d7cf20f675ff9273d66e94d35ba49fa373ffffffffffffffffffffffffffffffffffffffff16635c11d7958885853061012c42612fcb9190614b44565b6040518663ffffffff1660e01b8152600401612feb959493929190614f52565b600060405180830381600087803b15801561300557600080fd5b505af1925050508015613016575060015b61310157613022614c5d565b806308c379a0036130b15750613036614cdf565b8061304157506130b3565b806040516020016130529190614ff8565b60405160208183030381529060405260405161306e9190614e19565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009650505050505050613235565b505b6040516130bf90615066565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600095505050505050613235565b600073039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016131509190614010565b602060405180830381865afa15801561316d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613191919061432c565b9050600082826131a1919061489f565b905060008111156131e95780897fdd819f6d4da11821175805e17c46b8094c817290420e3de00dee96b4d256dc0160405160405180910390a380975050505050505050613235565b6040516131f5906150c7565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a260009750505050505050505b919050565b600081148061324e57506000600980549050145b61343957600060098054905082613265919061486e565b9050600081036132755750613439565b60008060005b6009805490508110801561328f5750606481105b1561340657600073ffffffffffffffffffffffffffffffffffffffff16600982815481106132c0576132bf614f23565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133f25773039e2fb66102314ce7b64ce5ce3e5183bc94ad3873ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6009838154811061334a57613349614f23565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518363ffffffff1660e01b81526004016133939291906148d3565b6020604051808303816000875af19250505080156133cf57506040513d601f19601f820116820180604052508101906133cc9190614928565b60015b156133f3575082806133e0906150dc565b93505083826133ef9190614b44565b91505b5b80806133fe906150dc565b91505061327b565b5081817f6570e65a772d8d30d76e42c8d07c41bf88b28ecf39ca57095a61b4a76584c21760405160405180910390a35050505b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561356c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b6135ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a290614c30565b60405180910390fd5b6135b6838383613bad565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561363c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161363390615170565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161372a9190613f21565b60405180910390a361373d848484613bb2565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156137cd57503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b1561398c5760006137dd82611163565b90506000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905068056bc75e2d631000008210158015613847575080155b1561390c576001600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506009839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613989565b68056bc75e2d63100000821080156139215750805b15613988576000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061398783613bb7565b5b5b50505b50565b600080600080600061399f611908565b915091506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3691906149d6565b90503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16149350600084613a765782613a78565b835b9050600085613a875784613a89565b835b90506000821480613a9a5750600081145b15613af057604051613aab906151dc565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a2600080975097505050505050613ba6565b60006103e58a613b0091906147fd565b905060008282613b1091906147fd565b90506000826103e886613b2391906147fd565b613b2d9190614b44565b90508082613b3b919061486e565b995060008a03613b9957604051613b519061523d565b60405180910390207f4ecb9b6d2e2efee3f1b1b86927f5895fc3f627ac91d5ebfe344df8ae1eec072360405160405180910390a26000809a509a505050505050505050613ba6565b60019a5050505050505050505b9193909250565b505050565b505050565b60005b600980549050811015613d43578173ffffffffffffffffffffffffffffffffffffffff1660098281548110613bf257613bf1614f23565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603613d305760096001600980549050613c4c919061489f565b81548110613c5d57613c5c614f23565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660098281548110613c9c57613c9b614f23565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009805480613cf657613cf5615252565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055613d43565b8080613d3b906150dc565b915050613bba565b5050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d81578082015181840152602081019050613d66565b60008484015250505050565b6000601f19601f8301169050919050565b6000613da982613d47565b613db38185613d52565b9350613dc3818560208601613d63565b613dcc81613d8d565b840191505092915050565b60006020820190508181036000830152613df18184613d9e565b905092915050565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e3382613e08565b9050919050565b613e4381613e28565b8114613e4e57600080fd5b50565b600081359050613e6081613e3a565b92915050565b6000819050919050565b613e7981613e66565b8114613e8457600080fd5b50565b600081359050613e9681613e70565b92915050565b60008060408385031215613eb357613eb2613e03565b5b6000613ec185828601613e51565b9250506020613ed285828601613e87565b9150509250929050565b60008115159050919050565b613ef181613edc565b82525050565b6000602082019050613f0c6000830184613ee8565b92915050565b613f1b81613e66565b82525050565b6000602082019050613f366000830184613f12565b92915050565b613f4581613e28565b82525050565b6000608082019050613f606000830187613f12565b613f6d6020830186613f12565b613f7a6040830185613ee8565b613f876060830184613f3c565b95945050505050565b600080600060608486031215613fa957613fa8613e03565b5b6000613fb786828701613e51565b9350506020613fc886828701613e51565b9250506040613fd986828701613e87565b9150509250925092565b600060208284031215613ff957613ff8613e03565b5b600061400784828501613e87565b91505092915050565b60006020820190506140256000830184613f3c565b92915050565b600060ff82169050919050565b6140418161402b565b82525050565b600060208201905061405c6000830184614038565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61409781613e28565b82525050565b60006140a9838361408e565b60208301905092915050565b6000602082019050919050565b60006140cd82614062565b6140d7818561406d565b93506140e28361407e565b8060005b838110156141135781516140fa888261409d565b9750614105836140b5565b9250506001810190506140e6565b5085935050505092915050565b6000602082019050818103600083015261413a81846140c2565b905092915050565b6000819050919050565b600061416761416261415d84613e08565b614142565b613e08565b9050919050565b60006141798261414c565b9050919050565b600061418b8261416e565b9050919050565b61419b81614180565b82525050565b60006020820190506141b66000830184614192565b92915050565b6000602082840312156141d2576141d1613e03565b5b60006141e084828501613e51565b91505092915050565b60006040820190506141fe6000830185613f12565b61420b6020830184613f12565b9392505050565b6000806040838503121561422957614228613e03565b5b600061423785828601613e51565b925050602061424885828601613e51565b9150509250929050565b600061425d8261416e565b9050919050565b61426d81614252565b82525050565b60006020820190506142886000830184614264565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142d557607f821691505b6020821081036142e8576142e761428e565b5b50919050565b60006040820190506143036000830185613f3c565b6143106020830184613f3c565b9392505050565b60008151905061432681613e70565b92915050565b60006020828403121561434257614341613e03565b5b600061435084828501614317565b91505092915050565b7f4535000000000000000000000000000000000000000000000000000000000000600082015250565b600061438f600283613d52565b915061439a82614359565b602082019050919050565b600060208201905081810360008301526143be81614382565b9050919050565b7f4536000000000000000000000000000000000000000000000000000000000000600082015250565b60006143fb600283613d52565b9150614406826143c5565b602082019050919050565b6000602082019050818103600083015261442a816143ee565b9050919050565b7f4538000000000000000000000000000000000000000000000000000000000000600082015250565b6000614467600283613d52565b915061447282614431565b602082019050919050565b600060208201905081810360008301526144968161445a565b9050919050565b7f4539000000000000000000000000000000000000000000000000000000000000600082015250565b60006144d3600283613d52565b91506144de8261449d565b602082019050919050565b60006020820190508181036000830152614502816144c6565b9050919050565b7f496e73756666696369656e7420746f6b656e2062616c616e636520696e20636f60008201527f6e74726163740000000000000000000000000000000000000000000000000000602082015250565b6000614565602683613d52565b915061457082614509565b604082019050919050565b6000602082019050818103600083015261459481614558565b9050919050565b6000819050919050565b60006145c06145bb6145b68461459b565b614142565b613e66565b9050919050565b6145d0816145a5565b82525050565b600060c0820190506145eb6000830189613f3c565b6145f86020830188613f12565b61460560408301876145c7565b61461260608301866145c7565b61461f6080830185613f3c565b61462c60a0830184613f12565b979650505050505050565b6000806000606084860312156146505761464f613e03565b5b600061465e86828701614317565b935050602061466f86828701614317565b925050604061468086828701614317565b9150509250925092565b7f4661696c656420746f20616464206c6971756964697479000000000000000000600082015250565b60006146c0601783613d52565b91506146cb8261468a565b602082019050919050565b600060208201905081810360008301526146ef816146b3565b9050919050565b7f5231000000000000000000000000000000000000000000000000000000000000600082015250565b600061472c600283613d52565b9150614737826146f6565b602082019050919050565b6000602082019050818103600083015261475b8161471f565b9050919050565b7f4537000000000000000000000000000000000000000000000000000000000000600082015250565b6000614798600283613d52565b91506147a382614762565b602082019050919050565b600060208201905081810360008301526147c78161478b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061480882613e66565b915061481383613e66565b925082820261482181613e66565b91508282048414831517614838576148376147ce565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061487982613e66565b915061488483613e66565b9250826148945761489361483f565b5b828204905092915050565b60006148aa82613e66565b91506148b583613e66565b92508282039050818111156148cd576148cc6147ce565b5b92915050565b60006040820190506148e86000830185613f3c565b6148f56020830184613f12565b9392505050565b61490581613edc565b811461491057600080fd5b50565b600081519050614922816148fc565b92915050565b60006020828403121561493e5761493d613e03565b5b600061494c84828501614913565b91505092915050565b7f4531000000000000000000000000000000000000000000000000000000000000600082015250565b600061498b600283613d52565b915061499682614955565b602082019050919050565b600060208201905081810360008301526149ba8161497e565b9050919050565b6000815190506149d081613e3a565b92915050565b6000602082840312156149ec576149eb613e03565b5b60006149fa848285016149c1565b91505092915050565b60006dffffffffffffffffffffffffffff82169050919050565b614a2681614a03565b8114614a3157600080fd5b50565b600081519050614a4381614a1d565b92915050565b600063ffffffff82169050919050565b614a6281614a49565b8114614a6d57600080fd5b50565b600081519050614a7f81614a59565b92915050565b600080600060608486031215614a9e57614a9d613e03565b5b6000614aac86828701614a34565b9350506020614abd86828701614a34565b9250506040614ace86828701614a70565b9150509250925092565b7f4f31000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b0e600283613d52565b9150614b1982614ad8565b602082019050919050565b60006020820190508181036000830152614b3d81614b01565b9050919050565b6000614b4f82613e66565b9150614b5a83613e66565b9250828201905080821115614b7257614b716147ce565b5b92915050565b7f4534000000000000000000000000000000000000000000000000000000000000600082015250565b6000614bae600283613d52565b9150614bb982614b78565b602082019050919050565b60006020820190508181036000830152614bdd81614ba1565b9050919050565b7f4530000000000000000000000000000000000000000000000000000000000000600082015250565b6000614c1a600283613d52565b9150614c2582614be4565b602082019050919050565b60006020820190508181036000830152614c4981614c0d565b9050919050565b60008160e01c9050919050565b600060033d1115614c7c5760046000803e614c79600051614c50565b90505b90565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614cb782613d8d565b810181811067ffffffffffffffff82111715614cd657614cd5614c7f565b5b80604052505050565b600060443d10614d6c57614cf1613df9565b60043d036004823e80513d602482011167ffffffffffffffff82111715614d19575050614d6c565b808201805167ffffffffffffffff811115614d375750505050614d6c565b80602083010160043d038501811115614d54575050505050614d6c565b614d6382602001850186614cae565b82955050505050505b90565b600081905092915050565b7f4175746f2070726f63657373206661696c65643a200000000000000000000000600082015250565b6000614db0601583614d6f565b9150614dbb82614d7a565b601582019050919050565b6000614dd182613d47565b614ddb8185614d6f565b9350614deb818560208601613d63565b80840191505092915050565b6000614e0282614da3565b9150614e0e8284614dc6565b915081905092915050565b6000614e258284614dc6565b915081905092915050565b7f556e6b6e6f776e206572726f7220696e206175746f6d617469632070726f636560008201527f7373696e67000000000000000000000000000000000000000000000000000000602082015250565b6000614e8c602583614d6f565b9150614e9782614e30565b602582019050919050565b6000614ead82614e7f565b9150819050919050565b7f4f32000000000000000000000000000000000000000000000000000000000000600082015250565b6000614eed600283613d52565b9150614ef882614eb7565b602082019050919050565b60006020820190508181036000830152614f1c81614ee0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060a082019050614f676000830188613f12565b614f746020830187613f12565b8181036040830152614f8681866140c2565b9050614f956060830185613f3c565b614fa26080830184613f12565b9695505050505050565b7f526f757465722073776170206661696c65643a20000000000000000000000000600082015250565b6000614fe2601483614d6f565b9150614fed82614fac565b601482019050919050565b600061500382614fd5565b915061500f8284614dc6565b915081905092915050565b7f556e6b6e6f776e206572726f7220696e20726f75746572207377617000000000600082015250565b6000615050601c83614d6f565b915061505b8261501a565b601c82019050919050565b600061507182615043565b9150819050919050565b7f4e6f20534f4e4943207265636569766564206166746572207377617000000000600082015250565b60006150b1601c83614d6f565b91506150bc8261507b565b601c82019050919050565b60006150d2826150a4565b9150819050919050565b60006150e782613e66565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615119576151186147ce565b5b600182019050919050565b7f4532000000000000000000000000000000000000000000000000000000000000600082015250565b600061515a600283613d52565b915061516582615124565b602082019050919050565b600060208201905081810360008301526151898161514d565b9050919050565b7f496e73756666696369656e742070616972207265736572766573000000000000600082015250565b60006151c6601a83614d6f565b91506151d182615190565b601a82019050919050565b60006151e7826151b9565b9150819050919050565b7f43616c63756c61746564206f757470757420616d6f756e74206973207a65726f600082015250565b6000615227602083614d6f565b9150615232826151f1565b602082019050919050565b60006152488261521a565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea2646970667358221220e167ba323e3de513a5b7ff306cb56d2fc0703b10dc17713c3f1979a5527fe4ba64736f6c63430008130033

Deployed Bytecode Sourcemap

8424:17620:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2882:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3749:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3176:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24138:308;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;3947:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9660:24;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3084:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23098:310;;;;;;;;;;;;;:::i;:::-;;21911:963;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9342:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9497:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15510:1749;;;;;;;;;;;;;:::i;:::-;;22925:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21737:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9097:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3283:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21627:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9428:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10557:1013;;;;;;;;;;;;;:::i;:::-;;1861:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2981:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24454:427;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;3409:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23416:691;;;;;;;;;;;;;:::i;:::-;;9613:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3599:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25510:494;;;;;;;;;;;;;:::i;:::-;;2064:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24889:595;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9218:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2882:91;2927:13;2960:5;2953:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2882:91;:::o;3749:190::-;3823:4;3840:13;3856:10;3840:26;;3877:32;3886:5;3893:7;3902:6;3877:8;:32::i;:::-;3927:4;3920:11;;;3749:190;;;;:::o;3176:99::-;3228:7;3255:12;;3248:19;;3176:99;:::o;24138:308::-;24182:7;24191;24200:4;24206:7;24248:24;24266:4;24248:9;:24::i;:::-;9379:42;24287:28;;;24324:4;9168:42;24287:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24397:1;24372:27;;:13;;;;;;;;;;;:27;;;;24414:13;;;;;;;;;;;24226:212;;;;;;;;24138:308;;;;:::o;3947:250::-;4035:4;4052:15;4070:10;4052:28;;4091:38;4107:4;4113:7;4122:6;4091:15;:38::i;:::-;4140:27;4150:4;4156:2;4160:6;4140:9;:27::i;:::-;4185:4;4178:11;;;3947:250;;;;;:::o;9660:24::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3084:84::-;3133:5;3158:2;3151:9;;3084:84;:::o;23098:310::-;1820:13;:11;:13::i;:::-;23189:1:::1;23165:21;;:25;23157:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;23233:1;23216:7;:14;;;;:18;23208:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;23256:4;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;23252:149;;23367:21;;23352:37;;;;;;;;;;23252:149;;;;23098:310::o:0;21911:963::-;1820:13;:11;:13::i;:::-;22019:1:::1;22007:9;:13;21999:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;22060:1;22046:11;:15;22038:30;;;;;;;;;;;;:::i;:::-;;;;;;;;;22161:11;22126:4;22111:31;;;22151:4;22111:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;;22089:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;22251:63;22268:4;9168:42;22302:11;22251:8;:63::i;:::-;9168:42;22331:32;;;22371:9;22404:4;22424:11;22450:1;22466::::0;22482:10:::1;22507:15;22331:202;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;22327:382;;22596:53;22613:4;9168:42;22647:1;22596:8;:53::i;:::-;22664:33;;;;;;;;;;:::i;:::-;;;;;;;;22327:382;;;;22721:20;22744:21;22721:44;;22795:1;22780:12;:16;22776:91;;;22821:10;22813:28;;:42;22842:12;22813:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;22776:91;21988:886;21911:963:::0;:::o;9342:79::-;9379:42;9342:79;:::o;9497:83::-;9538:42;9497:83;:::o;15510:1749::-;1114:1;1260:7;;:19;1252:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;1114:1;1297:7;:18;;;;15601:1:::1;15577:21;;:25;15569:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;15645:1;15628:7;:14;;;;:18;15620:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;8769:13;15672:21;;:47;;15664:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;15767:21;;15752:37;;;;;;;;;;15836:25;15864:21;;15836:49;;15920:1;15896:21;:25;;;;15976:21;16000:38;16020:17;16000:19;:38::i;:::-;15976:62;;16107:1;16091:13;:17;16087:1165;;;16166:22;16231:3;8949:2;16192:13;:35;;;;:::i;:::-;16191:43;;;;:::i;:::-;16166:68;;16249:21;16289:14;16273:13;:30;;;;:::i;:::-;16249:54;;16389:1;16372:14;:18;:50;;;;;16420:1;16394:28;;9538:42;16394:28;;;;16372:50;16368:575;;;9379:42;16447:27;;;9538:42;16491:14;16447:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;16443:340;;16750:13;16734:29;;16443:340;;;;9538:42;16535:51;;16555:14;16535:51;;;;;;;;;;16443:340;16368:575;;;16914:13;16898:29;;16368:575;17038:1;17022:13;:17;17018:88;;;17060:30;17076:13;17060:15;:30::i;:::-;17018:88;16110:1007;;16087:1165;;;17223:17;17199:21;:41;;;;16087:1165;15558:1701;;1070:1:::0;1338:7;:22;;;;15510:1749::o;22925:114::-;22983:7;23010:21;;23003:28;;22925:114;:::o;21737:96::-;21782:16;21818:7;21811:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21737:96;:::o;9097:114::-;9168:42;9097:114;:::o;3283:118::-;3348:7;3375:9;:18;3385:7;3375:18;;;;;;;;;;;;;;;;3368:25;;3283:118;;;:::o;21627:98::-;21676:7;21703;:14;;;;21696:21;;21627:98;:::o;9428:28::-;;;;;;;;;;;;;:::o;10557:1013::-;1820:13;:11;:13::i;:::-;10618:12:::1;;;;;;;;;;;10617:13;10609:28;;;;;;;;;;;;:::i;:::-;;;;;;;;;9292:42;10717:25;;;10751:4;9379:42;10717:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10701:13;;:68;;;;;;;;;;;;;;;;;;10864:1;10839:27;;:13;;;;;;;;;;;:27;;::::0;10835:131:::1;;9292:42;10899:28;;;10936:4;9379:42;10899:55;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10883:13;;:71;;;;;;;;;;;;;;;;;;10835:131;11019:1;10994:27;;:13;;;;;;;;;;;:27;;::::0;10986:42:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;11083:69;11100:4;9168:42;11134:17;11083:8;:69::i;:::-;9379:42;11163:26;;;9168:42;11217:17;11163:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9379:42;11260:26;;;11287:13;;;;;;;;;;;11302:17;11260:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11256:76:::0;::::1;;;;11361:4;11346:29;;;11376:13;;;;;;;;;;;11391:17;11346:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;11342:79:::0;::::1;;;;11456:4;11441:12;;:19;;;;;;;;;;;;;;;;;;9379:42;11476:86;;9292:42;11476:86;;9168:42;11476:86;;;;;;;;;;;;10557:1013::o:0;1861:87::-;1907:7;1934:6;;;;;;;;;;;1927:13;;1861:87;:::o;2981:95::-;3028:13;3061:7;3054:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2981:95;:::o;24454:427::-;24502:19;24523;24556:16;24574;24611:13;;;;;;;;;;;24595:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24555:84;;;;;24650:14;24683:13;;;;;;;;;;;24667:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24650:56;;24739:4;24721:23;;:6;:23;;;24717:101;;24777:8;24769:17;;24796:8;24788:17;;24761:45;;;;;;;;;24717:101;24844:8;24836:17;;24863:8;24855:17;;24828:45;;;;;;;24454:427;;;:::o;3409:182::-;3479:4;3496:13;3512:10;3496:26;;3533:28;3543:5;3550:2;3554:6;3533:9;:28::i;:::-;3579:4;3572:11;;;3409:182;;;;:::o;23416:691::-;1820:13;:11;:13::i;:::-;23483:21:::1;23522:4;23507:31;;;23547:4;9168:42;23507:73;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23483:97;;8540:18;23595:13;:28;23591:125;;;23640:64;23657:4;9168:42;8540:18;23640:8;:64::i;:::-;23591:125;23728:19;9379:42;23750:28;;;23787:4;23750:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23728:65;;23822:1;23808:11;:15;23804:296;;;23840:21;9379:42;23864:28;;;23901:4;9168:42;23864:70;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23840:94;;23969:11;23953:13;:27;23949:140;;;9379:42;24001:26;;;9168:42;24055:17;24001:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23949:140;23825:275;23804:296;23472:635;;23416:691::o:0;9613:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;3599:142::-;3679:7;3706:11;:18;3718:5;3706:18;;;;;;;;;;;;;;;:27;3725:7;3706:27;;;;;;;;;;;;;;;;3699:34;;3599:142;;;;:::o;25510:494::-;1820:13;:11;:13::i;:::-;25571:69:::1;25588:4;9168:42;25622:17;25571:8;:69::i;:::-;9379:42;25665:26;;;9168:42;25719:17;25665:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25661:88:::0;::::1;;;;25798:1;25773:27;;:13;;;;;;;;;;;:27;;;25769:228;;9379:42;25821:26;;;25848:13;;;;;;;;;;;25863:17;25821:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25817:76:::0;::::1;;;;25926:4;25911:29;;;25941:13;;;;;;;;;;;25956:17;25911:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;25907:79:::0;::::1;;;;25769:228;25510:494::o:0;2064:165::-;1820:13;:11;:13::i;:::-;2173:1:::1;2153:22;;:8;:22;;::::0;2145:37:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2193:28;2212:8;2193:18;:28::i;:::-;2064:165:::0;:::o;24889:595::-;24966:7;24987:19;25008;25031:17;:15;:17::i;:::-;24986:62;;;;25078:1;25063:11;:16;:36;;;;25098:1;25083:11;:16;25063:36;25059:50;;;25108:1;25101:8;;;;;;25059:50;25130:23;25167:3;25156:8;:14;;;;:::i;:::-;25130:40;;25193:17;25231:11;25213:15;:29;;;;:::i;:::-;25193:49;;25253:19;25298:15;25290:4;25276:11;:18;;;;:::i;:::-;25275:38;;;;:::i;:::-;25253:60;;25324:17;25356:11;25344:9;:23;;;;:::i;:::-;25324:43;;25473:3;8867:2;25451:3;:18;;;;:::i;:::-;25438:9;:32;;;;:::i;:::-;:38;;;;:::i;:::-;25431:45;;;;;;;;24889:595;;;;:::o;9218:117::-;9292:42;9218:117;:::o;5128:256::-;5247:1;5230:19;;:5;:19;;;;:44;;;;;5272:1;5253:21;;:7;:21;;;;5230:44;5222:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;5322:6;5292:11;:18;5304:5;5292:18;;;;;;;;;;;;;;;:27;5311:7;5292:27;;;;;;;;;;;;;;;:36;;;;5360:7;5344:32;;5353:5;5344:32;;;5369:6;5344:32;;;;;;:::i;:::-;;;;;;;;5128:256;;;:::o;5392:392::-;5493:24;5520:25;5530:5;5537:7;5520:9;:25::i;:::-;5493:52;;5580:17;5560:16;:37;5556:221;;5642:6;5622:16;:26;;5614:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;5699:51;5708:5;5715:7;5743:6;5724:16;:25;5699:8;:51::i;:::-;5556:221;5482:302;5392:392;;;:::o;11965:2577::-;12121:1;12105:18;;:4;:18;;;;:38;;;;;12141:1;12127:16;;:2;:16;;;;12105:38;12097:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;12237:7;:5;:7::i;:::-;12229:15;;:4;:15;;;:32;;;;12254:7;:5;:7::i;:::-;12248:13;;:2;:13;;;12229:32;:57;;;;12281:4;12265:21;;:4;:21;;;12229:57;:80;;;;12304:4;12290:19;;:2;:19;;;12229:80;:97;;;;12314:12;;;;;;;;;;;12313:13;12229:97;12225:356;;;12343:33;12359:4;12365:2;12369:6;12343:15;:33::i;:::-;12485:25;12505:4;12485:19;:25::i;:::-;12525:23;12545:2;12525:19;:23::i;:::-;12563:7;;12225:356;12593:16;12618:13;;;;;;;;;;;12612:19;;:2;:19;;;:44;;;;12643:13;;;;;;;;;;;12635:21;;:4;:21;;;12612:44;12593:63;;12671:11;12667:1736;;;12741:16;12782:3;8601:1;12761:6;:17;;;;:::i;:::-;12760:25;;;;:::i;:::-;12741:44;;12800:22;12834:8;12825:6;:17;;;;:::i;:::-;12800:42;;12927:41;12943:4;12949:2;12953:14;12927:15;:41::i;:::-;13043:46;13059:4;13073;13080:8;13043:15;:46::i;:::-;13179:8;13154:21;;:33;;;;;;;:::i;:::-;;;;;;;;8769:13;13264:21;;:47;;:69;;;;;13332:1;13315:7;:14;;;;:18;13264:69;13260:1022;;;13402:69;13419:4;9168:42;13453:17;13402:8;:69::i;:::-;9379:42;13512:26;;;9168:42;13566:17;13512:72;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13508:88;;;;;13661:1;13636:27;;:13;;;;;;;;;;;:27;;;13632:252;;9379:42;13692:26;;;13719:13;;;;;;;;;;;13734:17;13692:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13688:76;;;;;13805:4;13790:29;;;13820:13;;;;;;;;;;;13835:17;13790:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13786:79;;;;;13632:252;13924:4;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13920:347;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;14132:6;14090:49;;;;;;;;:::i;:::-;;;;;;;;;;;;;14072:69;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;14010:151;13920:347;;;;;14196:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;13920:347;;;;;13260:1022;12684:1609;;12667:1736;;;14358:33;14374:4;14380:2;14384:6;14358:15;:33::i;:::-;12667:1736;14475:25;14495:4;14475:19;:25::i;:::-;14511:23;14531:2;14511:19;:23::i;:::-;12086:2456;11965:2577;;;;:::o;1956:100::-;2031:10;2020:21;;:7;:5;:7::i;:::-;:21;;;2012:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;1956:100::o;17267:2165::-;17334:7;17373:1;17358:11;:16;17354:30;;17383:1;17376:8;;;;17354:30;17440:12;17454:24;17484:33;17505:11;17484:20;:33::i;:::-;17439:78;;;;;17533:7;17532:8;:33;;;;17564:1;17544:16;:21;17532:33;17528:47;;;17574:1;17567:8;;;;;;17528:47;17651:58;17675:4;17682:13;;;;;;;;;;;17697:11;17651:15;:58::i;:::-;17784:13;;;;;;;;;;;17768:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17764:53;17875:69;17892:4;9168:42;17926:17;17875:8;:69::i;:::-;18004:20;18069:3;8867:2;18047:3;:18;;;;:::i;:::-;18027:16;:39;;;;:::i;:::-;:45;;;;:::i;:::-;18004:68;;18178:21;18216:1;18202:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18178:40;;18247:4;18229;18234:1;18229:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;9379:42;18263:4;18268:1;18263:7;;;;;;;;:::i;:::-;;;;;;;:20;;;;;;;;;;;18304:27;9379:42;18334:28;;;18371:4;18334:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18304:73;;9168:42;18402:70;;;18487:11;18513:12;18540:4;18567;18632:3;18614:15;:21;;;;:::i;:::-;18402:244;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18398:1027;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;19277:6;19236:48;;;;;;;;:::i;:::-;;;;;;;;;;;;;19218:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19308:1;19301:8;;;;;;;;;;18398:1027;;;19348:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19412:1;19405:8;;;;;;;;;18398:1027;18735:25;9379:42;18763:28;;;18800:4;18763:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18735:71;;18821:16;18860:19;18840:17;:39;;;;:::i;:::-;18821:58;;18923:1;18912:8;:12;18908:244;;;18978:8;18965:11;18950:37;;;;;;;;;;19013:8;19006:15;;;;;;;;;;;18908:244;19067:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;19135:1;19128:8;;;;;;;;;17267:2165;;;;:::o;20789:807::-;20873:1;20858:11;:16;:39;;;;20896:1;20878:7;:14;;;;:19;20858:39;20899:7;20854:52;20926:23;20966:7;:14;;;;20952:11;:28;;;;:::i;:::-;20926:54;;21014:1;20995:15;:20;20991:33;;21017:7;;;20991:33;21036:27;21078:24;21124:9;21119:387;21143:7;:14;;;;21139:1;:18;:29;;;;;21165:3;21161:1;:7;21139:29;21119:387;;;21216:1;21194:24;;:7;21202:1;21194:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:24;;;21190:305;;9379:42;21243:27;;;21271:7;21279:1;21271:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;21283:15;21243:56;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;21239:241;21452:8;21239:241;;21323:21;;;;;:::i;:::-;;;;21387:15;21367:35;;;;;:::i;:::-;;;21190:305;21119:387;21170:3;;;;;:::i;:::-;;;;21119:387;;;;21568:19;21550:16;21531:57;;;;;;;;;;20843:753;;;20789:807;;:::o;2237:191::-;2311:16;2330:6;;;;;;;;;;;2311:25;;2356:8;2347:6;;:17;;;;;;;;;;;;;;;;;;2411:8;2380:40;;2401:8;2380:40;;;;;;;;;;;;2300:128;2237:191;:::o;4205:507::-;4318:1;4302:18;;:4;:18;;;;:38;;;;;4338:1;4324:16;;:2;:16;;;;4302:38;4294:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;4358:38;4379:4;4385:2;4389:6;4358:20;:38::i;:::-;4407:19;4429:9;:15;4439:4;4429:15;;;;;;;;;;;;;;;;4407:37;;4478:6;4463:11;:21;;4455:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;4559:6;4545:11;:20;4527:9;:15;4537:4;4527:15;;;;;;;;;;;;;;;:38;;;;4597:6;4580:9;:13;4590:2;4580:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;4645:2;4630:26;;4639:4;4630:26;;;4649:6;4630:26;;;;;;:::i;:::-;;;;;;;;4667:37;4687:4;4693:2;4697:6;4667:19;:37::i;:::-;4283:429;4205:507;;;:::o;14605:594::-;14685:13;;;;;;;;;;;14674:24;;:7;:24;;;;:52;;;;;14721:4;14702:24;;:7;:24;;;;14674:52;14670:522;;;14743:15;14761:18;14771:7;14761:9;:18::i;:::-;14743:36;;14794:22;14819:8;:17;14828:7;14819:17;;;;;;;;;;;;;;;;;;;;;;;;;14794:42;;8660:12;14869:7;:28;;:50;;;;;14902:17;14901:18;14869:50;14865:316;;;14960:4;14940:8;:17;14949:7;14940:17;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;14983:7;14996;14983:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14865:316;;;8660:12;15030:7;:27;:48;;;;;15061:17;15030:48;15026:155;;;15119:5;15099:8;:17;15108:7;15099:17;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;15143:22;15157:7;15143:13;:22::i;:::-;15026:155;14865:316;14728:464;;14670:522;14605:594;:::o;19444:1337::-;19512:12;19526:22;19550:19;19609:16;19627;19647:17;:15;:17::i;:::-;19608:56;;;;19727:14;19760:13;;;;;;;;;;;19744:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19727:56;;19829:4;19811:23;;:6;:23;;;19794:40;;19907:21;19931:14;:36;;19959:8;19931:36;;;19948:8;19931:36;19907:60;;19978:20;20001:14;:36;;20029:8;20001:36;;;20018:8;20001:36;19978:59;;20079:1;20062:13;:18;:39;;;;20100:1;20084:12;:17;20062:39;20058:165;;;20123:40;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20186:5;20193:1;20178:33;;;;;;;;;;;20058:165;20308:23;20348:3;20334:11;:17;;;;:::i;:::-;20308:43;;20362:17;20400:12;20382:15;:30;;;;:::i;:::-;20362:50;;20423:19;20470:15;20462:4;20446:13;:20;;;;:::i;:::-;20445:40;;;;:::i;:::-;20423:62;;20525:11;20513:9;:23;;;;:::i;:::-;20496:40;;20579:1;20561:14;:19;20557:151;;20602:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20671:5;20678:1;20663:33;;;;;;;;;;;;;;20557:151;20736:4;20728:45;;;;;;;;;;19444:1337;;;;;;:::o;11578:186::-;;;;:::o;11772:185::-;;;;:::o;15207:295::-;15271:9;15266:229;15290:7;:14;;;;15286:1;:18;15266:229;;;15344:7;15330:21;;:7;15338:1;15330:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:21;;;15326:158;;15385:7;15410:1;15393:7;:14;;;;:18;;;;:::i;:::-;15385:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15372:7;15380:1;15372:10;;;;;;;;:::i;:::-;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;15431:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;15463:5;;15326:158;15306:3;;;;;:::i;:::-;;;;15266:229;;;;15207: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:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::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:152::-;20054:4;20050:1;20042:6;20038:14;20031:28;19914:152;:::o;20072:365::-;20214:3;20235:66;20299:1;20294:3;20235:66;:::i;:::-;20228:73;;20310:93;20399:3;20310:93;:::i;:::-;20428:2;20423:3;20419:12;20412:19;;20072:365;;;:::o;20443:419::-;20609:4;20647:2;20636:9;20632:18;20624:26;;20696:9;20690:4;20686:20;20682:1;20671:9;20667:17;20660:47;20724:131;20850:4;20724:131;:::i;:::-;20716:139;;20443:419;;;:::o;20868:152::-;21008:4;21004:1;20996:6;20992:14;20985:28;20868:152;:::o;21026:365::-;21168:3;21189:66;21253:1;21248:3;21189:66;:::i;:::-;21182:73;;21264:93;21353:3;21264:93;:::i;:::-;21382:2;21377:3;21373:12;21366:19;;21026:365;;;:::o;21397:419::-;21563:4;21601:2;21590:9;21586:18;21578:26;;21650:9;21644:4;21640:20;21636:1;21625:9;21621:17;21614:47;21678:131;21804:4;21678:131;:::i;:::-;21670:139;;21397:419;;;:::o;21822:180::-;21870:77;21867:1;21860:88;21967:4;21964:1;21957:15;21991:4;21988:1;21981:15;22008:410;22048:7;22071:20;22089:1;22071:20;:::i;:::-;22066:25;;22105:20;22123:1;22105:20;:::i;:::-;22100:25;;22160:1;22157;22153:9;22182:30;22200:11;22182:30;:::i;:::-;22171:41;;22361:1;22352:7;22348:15;22345:1;22342:22;22322:1;22315:9;22295:83;22272:139;;22391:18;;:::i;:::-;22272:139;22056:362;22008:410;;;;:::o;22424:180::-;22472:77;22469:1;22462:88;22569:4;22566:1;22559:15;22593:4;22590:1;22583:15;22610:185;22650:1;22667:20;22685:1;22667:20;:::i;:::-;22662:25;;22701:20;22719:1;22701:20;:::i;:::-;22696:25;;22740:1;22730:35;;22745:18;;:::i;:::-;22730:35;22787:1;22784;22780:9;22775:14;;22610:185;;;;:::o;22801:194::-;22841:4;22861:20;22879:1;22861:20;:::i;:::-;22856:25;;22895:20;22913:1;22895:20;:::i;:::-;22890:25;;22939:1;22936;22932:9;22924:17;;22963:1;22957:4;22954:11;22951:37;;;22968:18;;:::i;:::-;22951:37;22801:194;;;;:::o;23001:332::-;23122:4;23160:2;23149:9;23145:18;23137:26;;23173:71;23241:1;23230:9;23226:17;23217:6;23173:71;:::i;:::-;23254:72;23322:2;23311:9;23307:18;23298:6;23254:72;:::i;:::-;23001:332;;;;;:::o;23339:116::-;23409:21;23424:5;23409:21;:::i;:::-;23402:5;23399:32;23389:60;;23445:1;23442;23435:12;23389:60;23339:116;:::o;23461:137::-;23515:5;23546:6;23540:13;23531:22;;23562:30;23586:5;23562:30;:::i;:::-;23461:137;;;;:::o;23604:345::-;23671:6;23720:2;23708:9;23699:7;23695:23;23691:32;23688:119;;;23726:79;;:::i;:::-;23688:119;23846:1;23871:61;23924:7;23915:6;23904:9;23900:22;23871:61;:::i;:::-;23861:71;;23817:125;23604:345;;;;:::o;23955:152::-;24095:4;24091:1;24083:6;24079:14;24072:28;23955:152;:::o;24113:365::-;24255:3;24276:66;24340:1;24335:3;24276:66;:::i;:::-;24269:73;;24351:93;24440:3;24351:93;:::i;:::-;24469:2;24464:3;24460:12;24453:19;;24113:365;;;:::o;24484:419::-;24650:4;24688:2;24677:9;24673:18;24665:26;;24737:9;24731:4;24727:20;24723:1;24712:9;24708:17;24701:47;24765:131;24891:4;24765:131;:::i;:::-;24757:139;;24484:419;;;:::o;24909:143::-;24966:5;24997:6;24991:13;24982:22;;25013:33;25040:5;25013:33;:::i;:::-;24909:143;;;;:::o;25058:351::-;25128:6;25177:2;25165:9;25156:7;25152:23;25148:32;25145:119;;;25183:79;;:::i;:::-;25145:119;25303:1;25328:64;25384:7;25375:6;25364:9;25360:22;25328:64;:::i;:::-;25318:74;;25274:128;25058:351;;;;:::o;25415:114::-;25452:7;25492:30;25485:5;25481:42;25470:53;;25415:114;;;:::o;25535:122::-;25608:24;25626:5;25608:24;:::i;:::-;25601:5;25598:35;25588:63;;25647:1;25644;25637:12;25588:63;25535:122;:::o;25663:143::-;25720:5;25751:6;25745:13;25736:22;;25767:33;25794:5;25767:33;:::i;:::-;25663:143;;;;:::o;25812:93::-;25848:7;25888:10;25881:5;25877:22;25866:33;;25812:93;;;:::o;25911:120::-;25983:23;26000:5;25983:23;:::i;:::-;25976:5;25973:34;25963:62;;26021:1;26018;26011:12;25963:62;25911:120;:::o;26037:141::-;26093:5;26124:6;26118:13;26109:22;;26140:32;26166:5;26140:32;:::i;:::-;26037:141;;;;:::o;26184:661::-;26271:6;26279;26287;26336:2;26324:9;26315:7;26311:23;26307:32;26304:119;;;26342:79;;:::i;:::-;26304:119;26462:1;26487:64;26543:7;26534:6;26523:9;26519:22;26487:64;:::i;:::-;26477:74;;26433:128;26600:2;26626:64;26682:7;26673:6;26662:9;26658:22;26626:64;:::i;:::-;26616:74;;26571:129;26739:2;26765:63;26820:7;26811:6;26800:9;26796:22;26765:63;:::i;:::-;26755:73;;26710:128;26184:661;;;;;:::o;26851:152::-;26991:4;26987:1;26979:6;26975:14;26968:28;26851:152;:::o;27009:365::-;27151:3;27172:66;27236:1;27231:3;27172:66;:::i;:::-;27165:73;;27247:93;27336:3;27247:93;:::i;:::-;27365:2;27360:3;27356:12;27349:19;;27009:365;;;:::o;27380:419::-;27546:4;27584:2;27573:9;27569:18;27561:26;;27633:9;27627:4;27623:20;27619:1;27608:9;27604:17;27597:47;27661:131;27787:4;27661:131;:::i;:::-;27653:139;;27380:419;;;:::o;27805:191::-;27845:3;27864:20;27882:1;27864:20;:::i;:::-;27859:25;;27898:20;27916:1;27898:20;:::i;:::-;27893:25;;27941:1;27938;27934:9;27927:16;;27962:3;27959:1;27956:10;27953:36;;;27969:18;;:::i;:::-;27953:36;27805:191;;;;:::o;28002:152::-;28142:4;28138:1;28130:6;28126:14;28119:28;28002:152;:::o;28160:365::-;28302:3;28323:66;28387:1;28382:3;28323:66;:::i;:::-;28316:73;;28398:93;28487:3;28398:93;:::i;:::-;28516:2;28511:3;28507:12;28500:19;;28160:365;;;:::o;28531:419::-;28697:4;28735:2;28724:9;28720:18;28712:26;;28784:9;28778:4;28774:20;28770:1;28759:9;28755:17;28748:47;28812:131;28938:4;28812:131;:::i;:::-;28804:139;;28531:419;;;:::o;28956:152::-;29096:4;29092:1;29084:6;29080:14;29073:28;28956:152;:::o;29114:365::-;29256:3;29277:66;29341:1;29336:3;29277:66;:::i;:::-;29270:73;;29352:93;29441:3;29352:93;:::i;:::-;29470:2;29465:3;29461:12;29454:19;;29114:365;;;:::o;29485:419::-;29651:4;29689:2;29678:9;29674:18;29666:26;;29738:9;29732:4;29728:20;29724:1;29713:9;29709:17;29702:47;29766:131;29892:4;29766:131;:::i;:::-;29758:139;;29485:419;;;:::o;29910:106::-;29954:8;30003:5;29998:3;29994:15;29973:36;;29910:106;;;:::o;30022:183::-;30057:3;30095:1;30077:16;30074:23;30071:128;;;30133:1;30130;30127;30112:23;30155:34;30186:1;30180:8;30155:34;:::i;:::-;30148:41;;30071:128;30022:183;:::o;30211:180::-;30259:77;30256:1;30249:88;30356:4;30353:1;30346:15;30380:4;30377:1;30370:15;30397:281;30480:27;30502:4;30480:27;:::i;:::-;30472:6;30468:40;30610:6;30598:10;30595:22;30574:18;30562:10;30559:34;30556:62;30553:88;;;30621:18;;:::i;:::-;30553:88;30661:10;30657:2;30650:22;30440:238;30397:281;;:::o;30684:711::-;30723:3;30761:4;30743:16;30740:26;30769:5;30737:39;30798:20;;:::i;:::-;30873:1;30855:16;30851:24;30848:1;30842:4;30827:49;30906:4;30900:11;31005:16;30998:4;30990:6;30986:17;30983:39;30950:18;30942:6;30939:30;30923:113;30920:146;;;31051:5;;;;30920:146;31097:6;31091:4;31087:17;31133:3;31127:10;31160:18;31152:6;31149:30;31146:43;;;31182:5;;;;;;31146:43;31230:6;31223:4;31218:3;31214:14;31210:27;31289:1;31271:16;31267:24;31261:4;31257:35;31252:3;31249:44;31246:57;;;31296:5;;;;;;;31246:57;31313;31361:6;31355:4;31351:17;31343:6;31339:30;31333:4;31313:57;:::i;:::-;31386:3;31379:10;;30727:668;;;;;30684:711;;:::o;31401:148::-;31503:11;31540:3;31525:18;;31401:148;;;;:::o;31555:171::-;31695:23;31691:1;31683:6;31679:14;31672:47;31555:171;:::o;31732:402::-;31892:3;31913:85;31995:2;31990:3;31913:85;:::i;:::-;31906:92;;32007:93;32096:3;32007:93;:::i;:::-;32125:2;32120:3;32116:12;32109:19;;31732:402;;;:::o;32140:390::-;32246:3;32274:39;32307:5;32274:39;:::i;:::-;32329:89;32411:6;32406:3;32329:89;:::i;:::-;32322:96;;32427:65;32485:6;32480:3;32473:4;32466:5;32462:16;32427:65;:::i;:::-;32517:6;32512:3;32508:16;32501:23;;32250:280;32140:390;;;;:::o;32536:541::-;32769:3;32791:148;32935:3;32791:148;:::i;:::-;32784:155;;32956:95;33047:3;33038:6;32956:95;:::i;:::-;32949:102;;33068:3;33061:10;;32536:541;;;;:::o;33083:275::-;33215:3;33237:95;33328:3;33319:6;33237:95;:::i;:::-;33230:102;;33349:3;33342:10;;33083:275;;;;:::o;33364:224::-;33504:34;33500:1;33492:6;33488:14;33481:58;33573:7;33568:2;33560:6;33556:15;33549:32;33364:224;:::o;33594:402::-;33754:3;33775:85;33857:2;33852:3;33775:85;:::i;:::-;33768:92;;33869:93;33958:3;33869:93;:::i;:::-;33987:2;33982:3;33978:12;33971:19;;33594:402;;;:::o;34002:381::-;34187:3;34209:148;34353:3;34209:148;:::i;:::-;34202:155;;34374:3;34367:10;;34002:381;;;:::o;34389:152::-;34529:4;34525:1;34517:6;34513:14;34506:28;34389:152;:::o;34547:365::-;34689:3;34710:66;34774:1;34769:3;34710:66;:::i;:::-;34703:73;;34785:93;34874:3;34785:93;:::i;:::-;34903:2;34898:3;34894:12;34887:19;;34547:365;;;:::o;34918:419::-;35084:4;35122:2;35111:9;35107:18;35099:26;;35171:9;35165:4;35161:20;35157:1;35146:9;35142:17;35135:47;35199:131;35325:4;35199:131;:::i;:::-;35191:139;;34918:419;;;:::o;35343:180::-;35391:77;35388:1;35381:88;35488:4;35485:1;35478:15;35512:4;35509:1;35502:15;35529:815;35784:4;35822:3;35811:9;35807:19;35799:27;;35836:71;35904:1;35893:9;35889:17;35880:6;35836:71;:::i;:::-;35917:72;35985:2;35974:9;35970:18;35961:6;35917:72;:::i;:::-;36036:9;36030:4;36026:20;36021:2;36010:9;36006:18;35999:48;36064:108;36167:4;36158:6;36064:108;:::i;:::-;36056:116;;36182:72;36250:2;36239:9;36235:18;36226:6;36182:72;:::i;:::-;36264:73;36332:3;36321:9;36317:19;36308:6;36264:73;:::i;:::-;35529:815;;;;;;;;:::o;36350:170::-;36490:22;36486:1;36478:6;36474:14;36467:46;36350:170;:::o;36526:402::-;36686:3;36707:85;36789:2;36784:3;36707:85;:::i;:::-;36700:92;;36801:93;36890:3;36801:93;:::i;:::-;36919:2;36914:3;36910:12;36903:19;;36526:402;;;:::o;36934:541::-;37167:3;37189:148;37333:3;37189:148;:::i;:::-;37182:155;;37354:95;37445:3;37436:6;37354:95;:::i;:::-;37347:102;;37466:3;37459:10;;36934:541;;;;:::o;37481:178::-;37621:30;37617:1;37609:6;37605:14;37598:54;37481:178;:::o;37665:402::-;37825:3;37846:85;37928:2;37923:3;37846:85;:::i;:::-;37839:92;;37940:93;38029:3;37940:93;:::i;:::-;38058:2;38053:3;38049:12;38042:19;;37665:402;;;:::o;38073:381::-;38258:3;38280:148;38424:3;38280:148;:::i;:::-;38273:155;;38445:3;38438:10;;38073:381;;;:::o;38460:178::-;38600:30;38596:1;38588:6;38584:14;38577:54;38460:178;:::o;38644:402::-;38804:3;38825:85;38907:2;38902:3;38825:85;:::i;:::-;38818:92;;38919:93;39008:3;38919:93;:::i;:::-;39037:2;39032:3;39028:12;39021:19;;38644:402;;;:::o;39052:381::-;39237:3;39259:148;39403:3;39259:148;:::i;:::-;39252:155;;39424:3;39417:10;;39052:381;;;:::o;39439:233::-;39478:3;39501:24;39519:5;39501:24;:::i;:::-;39492:33;;39547:66;39540:5;39537:77;39534:103;;39617:18;;:::i;:::-;39534:103;39664:1;39657:5;39653:13;39646:20;;39439:233;;;:::o;39678:152::-;39818:4;39814:1;39806:6;39802:14;39795:28;39678:152;:::o;39836:365::-;39978:3;39999:66;40063:1;40058:3;39999:66;:::i;:::-;39992:73;;40074:93;40163:3;40074:93;:::i;:::-;40192:2;40187:3;40183:12;40176:19;;39836:365;;;:::o;40207:419::-;40373:4;40411:2;40400:9;40396:18;40388:26;;40460:9;40454:4;40450:20;40446:1;40435:9;40431:17;40424:47;40488:131;40614:4;40488:131;:::i;:::-;40480:139;;40207:419;;;:::o;40632:176::-;40772:28;40768:1;40760:6;40756:14;40749:52;40632:176;:::o;40814:402::-;40974:3;40995:85;41077:2;41072:3;40995:85;:::i;:::-;40988:92;;41089:93;41178:3;41089:93;:::i;:::-;41207:2;41202:3;41198:12;41191:19;;40814:402;;;:::o;41222:381::-;41407:3;41429:148;41573:3;41429:148;:::i;:::-;41422:155;;41594:3;41587:10;;41222:381;;;:::o;41609:182::-;41749:34;41745:1;41737:6;41733:14;41726:58;41609:182;:::o;41797:402::-;41957:3;41978:85;42060:2;42055:3;41978:85;:::i;:::-;41971:92;;42072:93;42161:3;42072:93;:::i;:::-;42190:2;42185:3;42181:12;42174:19;;41797:402;;;:::o;42205:381::-;42390:3;42412:148;42556:3;42412:148;:::i;:::-;42405:155;;42577:3;42570:10;;42205:381;;;:::o;42592:180::-;42640:77;42637:1;42630:88;42737:4;42734:1;42727:15;42761:4;42758:1;42751:15

Swarm Source

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