ETH Price: $2,507.81 (+0.24%)

Token

The Penis Protocol (PENIS)
 

Overview

Max Total Supply

1,000,000,000 PENIS

Holders

105

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
5,519,291.230867591 PENIS

Value
$0.00
0xdfdd2cd5c7771bb69eb048358ecf982511efa6d7
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Penis

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-16
*/

//https://twitter.com/ProtocolPenis

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.15;
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 ERC20 {
    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 Ownable {
    address internal owner;
    constructor(address _owner) {
        owner = _owner;
    }
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }
    function renounceOwnership() public onlyOwner {
        owner = address(0);
        emit OwnershipTransferred(address(0));
    }  
    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 Penis is ERC20, Ownable {
    using SafeMath for uint256;
    address routerAdress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address DEAD = 0x000000000000000000000000000000000000dEaD;

    string constant _name = "The Penis Protocol";
    string constant _symbol = "PENIS";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 1_000_000_000 * (10 ** _decimals);
    uint256 public _maxWalletAmount = _totalSupply;

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

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping(address => bool) public isBot;

    uint256 liquidityFee = 2; 
    uint256 marketingFee = 4;
    uint256 totalFee = liquidityFee + marketingFee;
    uint256 feeDenominator = 100;

    address public marketingFeeReceiver = msg.sender;

    IDEXRouter public router;
    address public pair;

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

    constructor () Ownable(msg.sender) {
        router = IDEXRouter(routerAdress);
        pair = IDEXFactory(router.factory()).createPair(router.WETH(), address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        address _owner = owner;
        isFeeExempt[_owner] = true;
        isTxLimitExempt[_owner] = true;
        isTxLimitExempt[DEAD] = true;

        _balances[_owner] = _totalSupply;
        emit Transfer(address(0), _owner, _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);
    }

    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) {
        require(!isBot[sender], "Bot Address");

        if(inSwap){ return _basicTransfer(sender, recipient, amount); }
        
        if (recipient != pair && recipient != DEAD) {
            require(isTxLimitExempt[recipient] || _balances[recipient] + amount <= _maxWalletAmount, "Transfer amount exceeds the bag size.");
        }
        
        if(shouldSwapBack()){ swapBack(); } 

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

        uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount) : amount;
        _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 shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function takeFee(address sender, uint256 amount) internal returns (uint256) {
        uint256 feeAmount = amount.mul(totalFee).div(feeDenominator);
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
        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 contractTokenBalance = _balances[address(this)];
        if (contractTokenBalance >= swapThreshold*2)
            contractTokenBalance = swapThreshold*2;
        uint256 amountToLiquify = contractTokenBalance.mul(liquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = contractTokenBalance.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.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(liquidityFee.div(2));
        uint256 amountETHLiquidity = amountETH.mul(liquidityFee).div(totalETHFee).div(2);
        uint256 amountETHMarketing = amountETH.mul(marketingFee).div(totalETHFee);


        (bool MarketingSuccess, /* bytes memory data */) = payable(marketingFeeReceiver).call{value: amountETHMarketing, gas: 30000}("");
        require(MarketingSuccess, "receiver rejected ETH transfer");

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

    function buyTokens(uint256 amount, address to) internal swapping {
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(this);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
            0,
            path,
            to,
            block.timestamp
        );
    }

    function clearStuckBalance() external {
        payable(marketingFeeReceiver).transfer(address(this).balance);
    }

    function setWalletLimit(uint256 amountPercent) external onlyOwner {
        _maxWalletAmount = (_totalSupply * amountPercent ) / 100;
    }
    
     function swapStatus (bool status) external onlyOwner {
        swapEnabled = status;
    }

    function isBots(address botAddress, bool status) external onlyOwner {      
        isBot[botAddress] = status;
    }

   function areBots(address[] memory bots_, bool status) public onlyOwner {
        for (uint256 i = 0; i < bots_.length; i++) {
            isBot[bots_[i]] = status;
        }
    }

    function setFees(uint256 _MarketingFee, uint256 _liquidityFee) external onlyOwner {
         marketingFee = _MarketingFee;
         liquidityFee = _liquidityFee;
         totalFee = liquidityFee + marketingFee;
         require(totalFee <= 10, "Must keep fees at 10% or less");
    }

    function setThreshold(uint256 _treshold) external onlyOwner {
         swapThreshold = _treshold;
    }

    function setFeeReceivers(address _marketingFeeReceiver) external onlyOwner {
        marketingFeeReceiver = _marketingFeeReceiver;
    }

    function Lifttax() external {
        require (address(this).balance >= 5000000000000000000);
         marketingFee = 0;
         liquidityFee = 0;
         totalFee = liquidityFee + marketingFee;
    }

    event AutoLiquify(uint256 amountETH, uint256 amountBOG);
}

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":"amountBOG","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":[],"name":"Lifttax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxWalletAmount","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":"bots_","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"areBots","outputs":[],"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":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botAddress","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"isBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MarketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treshold","type":"uint256"}],"name":"setThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercent","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"swapStatus","outputs":[],"stateMutability":"nonpayable","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"stateMutability":"payable","type":"receive"}]

6080604052737a250d5630b4cf539739df2c5dacb4c659f2488d600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a620000ac919062000869565b633b9aca00620000bd9190620008ba565b6003556003546004556002600a556004600b55600b54600a54620000e291906200091b565b600c556064600d5533600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601060146101000a81548160ff02191690831515021790555060056103e86003546200015a9190620009a7565b620001669190620008ba565b6011553480156200017657600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200028a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b0919062000a49565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000339573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035f919062000a49565b306040518363ffffffff1660e01b81526004016200037f92919062000a8c565b6020604051808303816000875af11580156200039f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c5919062000a49565b601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600354600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600354604051620006c0919062000aca565b60405180910390a35062000ae7565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200075d57808604811115620007355762000734620006cf565b5b6001851615620007455780820291505b80810290506200075585620006fe565b945062000715565b94509492505050565b6000826200077857600190506200084b565b816200078857600090506200084b565b8160018114620007a15760028114620007ac57620007e2565b60019150506200084b565b60ff841115620007c157620007c0620006cf565b5b8360020a915084821115620007db57620007da620006cf565b5b506200084b565b5060208310610133831016604e8410600b84101617156200081c5782820a905083811115620008165762000815620006cf565b5b6200084b565b6200082b84848460016200070b565b92509050818404811115620008455762000844620006cf565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620008768262000852565b915062000883836200085c565b9250620008b27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000766565b905092915050565b6000620008c78262000852565b9150620008d48362000852565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000910576200090f620006cf565b5b828202905092915050565b6000620009288262000852565b9150620009358362000852565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200096d576200096c620006cf565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620009b48262000852565b9150620009c18362000852565b925082620009d457620009d362000978565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a1182620009e4565b9050919050565b62000a238162000a04565b811462000a2f57600080fd5b50565b60008151905062000a438162000a18565b92915050565b60006020828403121562000a625762000a61620009df565b5b600062000a728482850162000a32565b91505092915050565b62000a868162000a04565b82525050565b600060408201905062000aa3600083018562000a7b565b62000ab2602083018462000a7b565b9392505050565b62000ac48162000852565b82525050565b600060208201905062000ae1600083018462000ab9565b92915050565b6131018062000af76000396000f3fe6080604052600436106101c65760003560e01c806370a08231116100f7578063a8aa1b3111610095578063e01bb68811610064578063e01bb6881461064f578063e96fada214610678578063f1d5f517146106a3578063f887ea40146106cc576101cd565b8063a8aa1b3114610581578063a9059cbb146105ac578063d05b5a00146105e9578063dd62ed3e14610612576101cd565b8063893d20e8116100d1578063893d20e8146104eb57806395d89b4114610516578063960bfe0414610541578063a890d2e81461056a576101cd565b806370a082311461046e578063715018a6146104ab5780637e26d19f146104c2576101cd565b80632f54bf6e116101645780633bbac5791161013e5780633bbac5791461039e578063571ac8b0146103db5780636c0a24eb146104185780636ddd171314610443576101cd565b80632f54bf6e1461031f578063313ce5671461035c578063364333f414610387576101cd565b80630b78f9c0116101a05780630b78f9c014610265578063144eef071461028e57806318160ddd146102b757806323b872dd146102e2576101cd565b80630445b667146101d257806306fdde03146101fd578063095ea7b314610228576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e76106f7565b6040516101f491906122a5565b60405180910390f35b34801561020957600080fd5b506102126106fd565b60405161021f9190612359565b60405180910390f35b34801561023457600080fd5b5061024f600480360381019061024a9190612419565b61073a565b60405161025c9190612474565b60405180910390f35b34801561027157600080fd5b5061028c6004803603810190610287919061248f565b61082c565b005b34801561029a57600080fd5b506102b560048036038101906102b09190612643565b6108e2565b005b3480156102c357600080fd5b506102cc6109bf565b6040516102d991906122a5565b60405180910390f35b3480156102ee57600080fd5b506103096004803603810190610304919061269f565b6109c9565b6040516103169190612474565b60405180910390f35b34801561032b57600080fd5b50610346600480360381019061034191906126f2565b610bc9565b6040516103539190612474565b60405180910390f35b34801561036857600080fd5b50610371610c22565b60405161037e919061273b565b60405180910390f35b34801561039357600080fd5b5061039c610c2b565b005b3480156103aa57600080fd5b506103c560048036038101906103c091906126f2565b610c96565b6040516103d29190612474565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd91906126f2565b610cb6565b60405161040f9190612474565b60405180910390f35b34801561042457600080fd5b5061042d610ce9565b60405161043a91906122a5565b60405180910390f35b34801561044f57600080fd5b50610458610cef565b6040516104659190612474565b60405180910390f35b34801561047a57600080fd5b50610495600480360381019061049091906126f2565b610d02565b6040516104a291906122a5565b60405180910390f35b3480156104b757600080fd5b506104c0610d4b565b005b3480156104ce57600080fd5b506104e960048036038101906104e49190612756565b610e0e565b005b3480156104f757600080fd5b50610500610e73565b60405161050d9190612792565b60405180910390f35b34801561052257600080fd5b5061052b610e9c565b6040516105389190612359565b60405180910390f35b34801561054d57600080fd5b50610568600480360381019061056391906127ad565b610ed9565b005b34801561057657600080fd5b5061057f610f2b565b005b34801561058d57600080fd5b50610596610f68565b6040516105a39190612792565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce9190612419565b610f8e565b6040516105e09190612474565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b91906127da565b610fa3565b005b34801561061e57600080fd5b506106396004803603810190610634919061281a565b611046565b60405161064691906122a5565b60405180910390f35b34801561065b57600080fd5b50610676600480360381019061067191906126f2565b6110cd565b005b34801561068457600080fd5b5061068d611159565b60405161069a9190612792565b60405180910390f35b3480156106af57600080fd5b506106ca60048036038101906106c591906127ad565b61117f565b005b3480156106d857600080fd5b506106e16111ea565b6040516106ee91906128b9565b60405180910390f35b60115481565b60606040518060400160405280601281526020017f5468652050656e69732050726f746f636f6c0000000000000000000000000000815250905090565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161081a91906122a5565b60405180910390a36001905092915050565b61083533610bc9565b610874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086b90612920565b60405180910390fd5b81600b8190555080600a81905550600b54600a54610892919061296f565b600c81905550600a600c5411156108de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d590612a11565b60405180910390fd5b5050565b6108eb33610bc9565b61092a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092190612920565b60405180910390fd5b60005b82518110156109ba57816009600085848151811061094e5761094d612a31565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806109b290612a60565b91505061092d565b505050565b6000600354905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610bb557610b34826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112109092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610bc0848484611274565b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610c93573d6000803e3d6000fd5b50565b60096020528060005260406000206000915054906101000a900460ff1681565b6000610ce2827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61073a565b9050919050565b60045481565b601060149054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d5433610bc9565b610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90612920565b60405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861636000604051610e049190612792565b60405180910390a1565b610e1733610bc9565b610e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4d90612920565b60405180910390fd5b80601060146101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f50454e4953000000000000000000000000000000000000000000000000000000815250905090565b610ee233610bc9565b610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1890612920565b60405180910390fd5b8060118190555050565b674563918244f40000471015610f4057600080fd5b6000600b819055506000600a81905550600b54600a54610f60919061296f565b600c81905550565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610f9b338484611274565b905092915050565b610fac33610bc9565b610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290612920565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6110d633610bc9565b611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c90612920565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61118833610bc9565b6111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111be90612920565b60405180910390fd5b6064816003546111d79190612aa8565b6111e19190612b31565b60048190555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000838311158290611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124f9190612359565b60405180910390fd5b50600083856112679190612b62565b9050809150509392505050565b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fa90612be2565b60405180910390fd5b601260009054906101000a900460ff161561132a576113238484846116ca565b90506116c3565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156113d65750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156114bf57600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061147f575060045482600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461147c919061296f565b11155b6114be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b590612c74565b60405180910390fd5b5b6114c761189d565b156114d5576114d4611974565b5b61155e826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112109092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006115ac85611f22565b6115b657826115c1565b6115c08584611f79565b5b905061161581600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120bd90919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116b591906122a5565b60405180910390a360019150505b9392505050565b6000611755826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112109092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ea82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120bd90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161188a91906122a5565b60405180910390a3600190509392505050565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561190a5750601260009054906101000a900460ff16155b80156119225750601060149054906101000a900460ff165b801561196f5750601154600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601260006101000a81548160ff0219169083151502179055506000600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060026011546119e29190612aa8565b81106119fa5760026011546119f79190612aa8565b90505b6000611a386002611a2a600c54611a1c600a548761211b90919063ffffffff16565b61219590919063ffffffff16565b61219590919063ffffffff16565b90506000611a4f82846121df90919063ffffffff16565b90506000600267ffffffffffffffff811115611a6e57611a6d6124d4565b5b604051908082528060200260200182016040528015611a9c5781602001602082028036833780820191505090505b5090503081600081518110611ab457611ab3612a31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7f9190612ca9565b81600181518110611b9357611b92612a31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401611c36959493929190612dcf565b600060405180830381600087803b158015611c5057600080fd5b505af1158015611c64573d6000803e3d6000fd5b505050506000611c7d82476121df90919063ffffffff16565b90506000611cab611c9a6002600a5461219590919063ffffffff16565b600c546121df90919063ffffffff16565b90506000611ce96002611cdb84611ccd600a548861211b90919063ffffffff16565b61219590919063ffffffff16565b61219590919063ffffffff16565b90506000611d1483611d06600b548761211b90919063ffffffff16565b61219590919063ffffffff16565b90506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168261753090604051611d6290612e5a565b600060405180830381858888f193505050503d8060008114611da0576040519150601f19603f3d011682016040523d82523d6000602084013e611da5565b606091505b5050905080611de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de090612ebb565b60405180910390fd5b6000891115611efb57600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308c600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611e7b96959493929190612edb565b60606040518083038185885af1158015611e99573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ebe9190612f51565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506838a604051611ef2929190612fa4565b60405180910390a15b505050505050505050506000601260006101000a81548160ff021916908315150217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080611fa5600d54611f97600c548661211b90919063ffffffff16565b61219590919063ffffffff16565b9050611ff981600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120bd90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161209991906122a5565b60405180910390a36120b481846121df90919063ffffffff16565b91505092915050565b60008082846120cc919061296f565b905083811015612111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210890613019565b60405180910390fd5b8091505092915050565b600080830361212d576000905061218f565b6000828461213b9190612aa8565b905082848261214a9190612b31565b1461218a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612181906130ab565b60405180910390fd5b809150505b92915050565b60006121d783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612229565b905092915050565b600061222183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611210565b905092915050565b60008083118290612270576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122679190612359565b60405180910390fd5b506000838561227f9190612b31565b9050809150509392505050565b6000819050919050565b61229f8161228c565b82525050565b60006020820190506122ba6000830184612296565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156122fa5780820151818401526020810190506122df565b83811115612309576000848401525b50505050565b6000601f19601f8301169050919050565b600061232b826122c0565b61233581856122cb565b93506123458185602086016122dc565b61234e8161230f565b840191505092915050565b600060208201905081810360008301526123738184612320565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123ba8261238f565b9050919050565b6123ca816123af565b81146123d557600080fd5b50565b6000813590506123e7816123c1565b92915050565b6123f68161228c565b811461240157600080fd5b50565b600081359050612413816123ed565b92915050565b600080604083850312156124305761242f612385565b5b600061243e858286016123d8565b925050602061244f85828601612404565b9150509250929050565b60008115159050919050565b61246e81612459565b82525050565b60006020820190506124896000830184612465565b92915050565b600080604083850312156124a6576124a5612385565b5b60006124b485828601612404565b92505060206124c585828601612404565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61250c8261230f565b810181811067ffffffffffffffff8211171561252b5761252a6124d4565b5b80604052505050565b600061253e61237b565b905061254a8282612503565b919050565b600067ffffffffffffffff82111561256a576125696124d4565b5b602082029050602081019050919050565b600080fd5b600061259361258e8461254f565b612534565b905080838252602082019050602084028301858111156125b6576125b561257b565b5b835b818110156125df57806125cb88826123d8565b8452602084019350506020810190506125b8565b5050509392505050565b600082601f8301126125fe576125fd6124cf565b5b813561260e848260208601612580565b91505092915050565b61262081612459565b811461262b57600080fd5b50565b60008135905061263d81612617565b92915050565b6000806040838503121561265a57612659612385565b5b600083013567ffffffffffffffff8111156126785761267761238a565b5b612684858286016125e9565b92505060206126958582860161262e565b9150509250929050565b6000806000606084860312156126b8576126b7612385565b5b60006126c6868287016123d8565b93505060206126d7868287016123d8565b92505060406126e886828701612404565b9150509250925092565b60006020828403121561270857612707612385565b5b6000612716848285016123d8565b91505092915050565b600060ff82169050919050565b6127358161271f565b82525050565b6000602082019050612750600083018461272c565b92915050565b60006020828403121561276c5761276b612385565b5b600061277a8482850161262e565b91505092915050565b61278c816123af565b82525050565b60006020820190506127a76000830184612783565b92915050565b6000602082840312156127c3576127c2612385565b5b60006127d184828501612404565b91505092915050565b600080604083850312156127f1576127f0612385565b5b60006127ff858286016123d8565b92505060206128108582860161262e565b9150509250929050565b6000806040838503121561283157612830612385565b5b600061283f858286016123d8565b9250506020612850858286016123d8565b9150509250929050565b6000819050919050565b600061287f61287a6128758461238f565b61285a565b61238f565b9050919050565b600061289182612864565b9050919050565b60006128a382612886565b9050919050565b6128b381612898565b82525050565b60006020820190506128ce60008301846128aa565b92915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b600061290a6006836122cb565b9150612915826128d4565b602082019050919050565b60006020820190508181036000830152612939816128fd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061297a8261228c565b91506129858361228c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156129ba576129b9612940565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006129fb601d836122cb565b9150612a06826129c5565b602082019050919050565b60006020820190508181036000830152612a2a816129ee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612a6b8261228c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a9d57612a9c612940565b5b600182019050919050565b6000612ab38261228c565b9150612abe8361228c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612af757612af6612940565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612b3c8261228c565b9150612b478361228c565b925082612b5757612b56612b02565b5b828204905092915050565b6000612b6d8261228c565b9150612b788361228c565b925082821015612b8b57612b8a612940565b5b828203905092915050565b7f426f742041646472657373000000000000000000000000000000000000000000600082015250565b6000612bcc600b836122cb565b9150612bd782612b96565b602082019050919050565b60006020820190508181036000830152612bfb81612bbf565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206261672060008201527f73697a652e000000000000000000000000000000000000000000000000000000602082015250565b6000612c5e6025836122cb565b9150612c6982612c02565b604082019050919050565b60006020820190508181036000830152612c8d81612c51565b9050919050565b600081519050612ca3816123c1565b92915050565b600060208284031215612cbf57612cbe612385565b5b6000612ccd84828501612c94565b91505092915050565b6000819050919050565b6000612cfb612cf6612cf184612cd6565b61285a565b61228c565b9050919050565b612d0b81612ce0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d46816123af565b82525050565b6000612d588383612d3d565b60208301905092915050565b6000602082019050919050565b6000612d7c82612d11565b612d868185612d1c565b9350612d9183612d2d565b8060005b83811015612dc2578151612da98882612d4c565b9750612db483612d64565b925050600181019050612d95565b5085935050505092915050565b600060a082019050612de46000830188612296565b612df16020830187612d02565b8181036040830152612e038186612d71565b9050612e126060830185612783565b612e1f6080830184612296565b9695505050505050565b600081905092915050565b50565b6000612e44600083612e29565b9150612e4f82612e34565b600082019050919050565b6000612e6582612e37565b9150819050919050565b7f72656365697665722072656a656374656420455448207472616e736665720000600082015250565b6000612ea5601e836122cb565b9150612eb082612e6f565b602082019050919050565b60006020820190508181036000830152612ed481612e98565b9050919050565b600060c082019050612ef06000830189612783565b612efd6020830188612296565b612f0a6040830187612d02565b612f176060830186612d02565b612f246080830185612783565b612f3160a0830184612296565b979650505050505050565b600081519050612f4b816123ed565b92915050565b600080600060608486031215612f6a57612f69612385565b5b6000612f7886828701612f3c565b9350506020612f8986828701612f3c565b9250506040612f9a86828701612f3c565b9150509250925092565b6000604082019050612fb96000830185612296565b612fc66020830184612296565b9392505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613003601b836122cb565b915061300e82612fcd565b602082019050919050565b6000602082019050818103600083015261303281612ff6565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006130956021836122cb565b91506130a082613039565b604082019050919050565b600060208201905081810360008301526130c481613088565b905091905056fea2646970667358221220cd612445ae1518b34593adf1819e3404b613d8a4ac0d5794acac5785be181bf264736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106101c65760003560e01c806370a08231116100f7578063a8aa1b3111610095578063e01bb68811610064578063e01bb6881461064f578063e96fada214610678578063f1d5f517146106a3578063f887ea40146106cc576101cd565b8063a8aa1b3114610581578063a9059cbb146105ac578063d05b5a00146105e9578063dd62ed3e14610612576101cd565b8063893d20e8116100d1578063893d20e8146104eb57806395d89b4114610516578063960bfe0414610541578063a890d2e81461056a576101cd565b806370a082311461046e578063715018a6146104ab5780637e26d19f146104c2576101cd565b80632f54bf6e116101645780633bbac5791161013e5780633bbac5791461039e578063571ac8b0146103db5780636c0a24eb146104185780636ddd171314610443576101cd565b80632f54bf6e1461031f578063313ce5671461035c578063364333f414610387576101cd565b80630b78f9c0116101a05780630b78f9c014610265578063144eef071461028e57806318160ddd146102b757806323b872dd146102e2576101cd565b80630445b667146101d257806306fdde03146101fd578063095ea7b314610228576101cd565b366101cd57005b600080fd5b3480156101de57600080fd5b506101e76106f7565b6040516101f491906122a5565b60405180910390f35b34801561020957600080fd5b506102126106fd565b60405161021f9190612359565b60405180910390f35b34801561023457600080fd5b5061024f600480360381019061024a9190612419565b61073a565b60405161025c9190612474565b60405180910390f35b34801561027157600080fd5b5061028c6004803603810190610287919061248f565b61082c565b005b34801561029a57600080fd5b506102b560048036038101906102b09190612643565b6108e2565b005b3480156102c357600080fd5b506102cc6109bf565b6040516102d991906122a5565b60405180910390f35b3480156102ee57600080fd5b506103096004803603810190610304919061269f565b6109c9565b6040516103169190612474565b60405180910390f35b34801561032b57600080fd5b50610346600480360381019061034191906126f2565b610bc9565b6040516103539190612474565b60405180910390f35b34801561036857600080fd5b50610371610c22565b60405161037e919061273b565b60405180910390f35b34801561039357600080fd5b5061039c610c2b565b005b3480156103aa57600080fd5b506103c560048036038101906103c091906126f2565b610c96565b6040516103d29190612474565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd91906126f2565b610cb6565b60405161040f9190612474565b60405180910390f35b34801561042457600080fd5b5061042d610ce9565b60405161043a91906122a5565b60405180910390f35b34801561044f57600080fd5b50610458610cef565b6040516104659190612474565b60405180910390f35b34801561047a57600080fd5b50610495600480360381019061049091906126f2565b610d02565b6040516104a291906122a5565b60405180910390f35b3480156104b757600080fd5b506104c0610d4b565b005b3480156104ce57600080fd5b506104e960048036038101906104e49190612756565b610e0e565b005b3480156104f757600080fd5b50610500610e73565b60405161050d9190612792565b60405180910390f35b34801561052257600080fd5b5061052b610e9c565b6040516105389190612359565b60405180910390f35b34801561054d57600080fd5b50610568600480360381019061056391906127ad565b610ed9565b005b34801561057657600080fd5b5061057f610f2b565b005b34801561058d57600080fd5b50610596610f68565b6040516105a39190612792565b60405180910390f35b3480156105b857600080fd5b506105d360048036038101906105ce9190612419565b610f8e565b6040516105e09190612474565b60405180910390f35b3480156105f557600080fd5b50610610600480360381019061060b91906127da565b610fa3565b005b34801561061e57600080fd5b506106396004803603810190610634919061281a565b611046565b60405161064691906122a5565b60405180910390f35b34801561065b57600080fd5b50610676600480360381019061067191906126f2565b6110cd565b005b34801561068457600080fd5b5061068d611159565b60405161069a9190612792565b60405180910390f35b3480156106af57600080fd5b506106ca60048036038101906106c591906127ad565b61117f565b005b3480156106d857600080fd5b506106e16111ea565b6040516106ee91906128b9565b60405180910390f35b60115481565b60606040518060400160405280601281526020017f5468652050656e69732050726f746f636f6c0000000000000000000000000000815250905090565b600081600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161081a91906122a5565b60405180910390a36001905092915050565b61083533610bc9565b610874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086b90612920565b60405180910390fd5b81600b8190555080600a81905550600b54600a54610892919061296f565b600c81905550600a600c5411156108de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d590612a11565b60405180910390fd5b5050565b6108eb33610bc9565b61092a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092190612920565b60405180910390fd5b60005b82518110156109ba57816009600085848151811061094e5761094d612a31565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806109b290612a60565b91505061092d565b505050565b6000600354905090565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610bb557610b34826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112109092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610bc0848484611274565b90509392505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610c93573d6000803e3d6000fd5b50565b60096020528060005260406000206000915054906101000a900460ff1681565b6000610ce2827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61073a565b9050919050565b60045481565b601060149054906101000a900460ff1681565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d5433610bc9565b610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90612920565b60405180910390fd5b60008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861636000604051610e049190612792565b60405180910390a1565b610e1733610bc9565b610e56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4d90612920565b60405180910390fd5b80601060146101000a81548160ff02191690831515021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f50454e4953000000000000000000000000000000000000000000000000000000815250905090565b610ee233610bc9565b610f21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1890612920565b60405180910390fd5b8060118190555050565b674563918244f40000471015610f4057600080fd5b6000600b819055506000600a81905550600b54600a54610f60919061296f565b600c81905550565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610f9b338484611274565b905092915050565b610fac33610bc9565b610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290612920565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6110d633610bc9565b611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c90612920565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61118833610bc9565b6111c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111be90612920565b60405180910390fd5b6064816003546111d79190612aa8565b6111e19190612b31565b60048190555050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000838311158290611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124f9190612359565b60405180910390fd5b50600083856112679190612b62565b9050809150509392505050565b6000600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fa90612be2565b60405180910390fd5b601260009054906101000a900460ff161561132a576113238484846116ca565b90506116c3565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156113d65750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b156114bf57600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061147f575060045482600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461147c919061296f565b11155b6114be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b590612c74565b60405180910390fd5b5b6114c761189d565b156114d5576114d4611974565b5b61155e826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112109092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006115ac85611f22565b6115b657826115c1565b6115c08584611f79565b5b905061161581600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120bd90919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516116b591906122a5565b60405180910390a360019150505b9392505050565b6000611755826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112109092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506117ea82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120bd90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161188a91906122a5565b60405180910390a3600190509392505050565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561190a5750601260009054906101000a900460ff16155b80156119225750601060149054906101000a900460ff165b801561196f5750601154600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601260006101000a81548160ff0219169083151502179055506000600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905060026011546119e29190612aa8565b81106119fa5760026011546119f79190612aa8565b90505b6000611a386002611a2a600c54611a1c600a548761211b90919063ffffffff16565b61219590919063ffffffff16565b61219590919063ffffffff16565b90506000611a4f82846121df90919063ffffffff16565b90506000600267ffffffffffffffff811115611a6e57611a6d6124d4565b5b604051908082528060200260200182016040528015611a9c5781602001602082028036833780820191505090505b5090503081600081518110611ab457611ab3612a31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7f9190612ca9565b81600181518110611b9357611b92612a31565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401611c36959493929190612dcf565b600060405180830381600087803b158015611c5057600080fd5b505af1158015611c64573d6000803e3d6000fd5b505050506000611c7d82476121df90919063ffffffff16565b90506000611cab611c9a6002600a5461219590919063ffffffff16565b600c546121df90919063ffffffff16565b90506000611ce96002611cdb84611ccd600a548861211b90919063ffffffff16565b61219590919063ffffffff16565b61219590919063ffffffff16565b90506000611d1483611d06600b548761211b90919063ffffffff16565b61219590919063ffffffff16565b90506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168261753090604051611d6290612e5a565b600060405180830381858888f193505050503d8060008114611da0576040519150601f19603f3d011682016040523d82523d6000602084013e611da5565b606091505b5050905080611de9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611de090612ebb565b60405180910390fd5b6000891115611efb57600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308c600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611e7b96959493929190612edb565b60606040518083038185885af1158015611e99573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ebe9190612f51565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506838a604051611ef2929190612fa4565b60405180910390a15b505050505050505050506000601260006101000a81548160ff021916908315150217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080611fa5600d54611f97600c548661211b90919063ffffffff16565b61219590919063ffffffff16565b9050611ff981600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120bd90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161209991906122a5565b60405180910390a36120b481846121df90919063ffffffff16565b91505092915050565b60008082846120cc919061296f565b905083811015612111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210890613019565b60405180910390fd5b8091505092915050565b600080830361212d576000905061218f565b6000828461213b9190612aa8565b905082848261214a9190612b31565b1461218a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612181906130ab565b60405180910390fd5b809150505b92915050565b60006121d783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612229565b905092915050565b600061222183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611210565b905092915050565b60008083118290612270576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122679190612359565b60405180910390fd5b506000838561227f9190612b31565b9050809150509392505050565b6000819050919050565b61229f8161228c565b82525050565b60006020820190506122ba6000830184612296565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156122fa5780820151818401526020810190506122df565b83811115612309576000848401525b50505050565b6000601f19601f8301169050919050565b600061232b826122c0565b61233581856122cb565b93506123458185602086016122dc565b61234e8161230f565b840191505092915050565b600060208201905081810360008301526123738184612320565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123ba8261238f565b9050919050565b6123ca816123af565b81146123d557600080fd5b50565b6000813590506123e7816123c1565b92915050565b6123f68161228c565b811461240157600080fd5b50565b600081359050612413816123ed565b92915050565b600080604083850312156124305761242f612385565b5b600061243e858286016123d8565b925050602061244f85828601612404565b9150509250929050565b60008115159050919050565b61246e81612459565b82525050565b60006020820190506124896000830184612465565b92915050565b600080604083850312156124a6576124a5612385565b5b60006124b485828601612404565b92505060206124c585828601612404565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61250c8261230f565b810181811067ffffffffffffffff8211171561252b5761252a6124d4565b5b80604052505050565b600061253e61237b565b905061254a8282612503565b919050565b600067ffffffffffffffff82111561256a576125696124d4565b5b602082029050602081019050919050565b600080fd5b600061259361258e8461254f565b612534565b905080838252602082019050602084028301858111156125b6576125b561257b565b5b835b818110156125df57806125cb88826123d8565b8452602084019350506020810190506125b8565b5050509392505050565b600082601f8301126125fe576125fd6124cf565b5b813561260e848260208601612580565b91505092915050565b61262081612459565b811461262b57600080fd5b50565b60008135905061263d81612617565b92915050565b6000806040838503121561265a57612659612385565b5b600083013567ffffffffffffffff8111156126785761267761238a565b5b612684858286016125e9565b92505060206126958582860161262e565b9150509250929050565b6000806000606084860312156126b8576126b7612385565b5b60006126c6868287016123d8565b93505060206126d7868287016123d8565b92505060406126e886828701612404565b9150509250925092565b60006020828403121561270857612707612385565b5b6000612716848285016123d8565b91505092915050565b600060ff82169050919050565b6127358161271f565b82525050565b6000602082019050612750600083018461272c565b92915050565b60006020828403121561276c5761276b612385565b5b600061277a8482850161262e565b91505092915050565b61278c816123af565b82525050565b60006020820190506127a76000830184612783565b92915050565b6000602082840312156127c3576127c2612385565b5b60006127d184828501612404565b91505092915050565b600080604083850312156127f1576127f0612385565b5b60006127ff858286016123d8565b92505060206128108582860161262e565b9150509250929050565b6000806040838503121561283157612830612385565b5b600061283f858286016123d8565b9250506020612850858286016123d8565b9150509250929050565b6000819050919050565b600061287f61287a6128758461238f565b61285a565b61238f565b9050919050565b600061289182612864565b9050919050565b60006128a382612886565b9050919050565b6128b381612898565b82525050565b60006020820190506128ce60008301846128aa565b92915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b600061290a6006836122cb565b9150612915826128d4565b602082019050919050565b60006020820190508181036000830152612939816128fd565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061297a8261228c565b91506129858361228c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156129ba576129b9612940565b5b828201905092915050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006129fb601d836122cb565b9150612a06826129c5565b602082019050919050565b60006020820190508181036000830152612a2a816129ee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612a6b8261228c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612a9d57612a9c612940565b5b600182019050919050565b6000612ab38261228c565b9150612abe8361228c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612af757612af6612940565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612b3c8261228c565b9150612b478361228c565b925082612b5757612b56612b02565b5b828204905092915050565b6000612b6d8261228c565b9150612b788361228c565b925082821015612b8b57612b8a612940565b5b828203905092915050565b7f426f742041646472657373000000000000000000000000000000000000000000600082015250565b6000612bcc600b836122cb565b9150612bd782612b96565b602082019050919050565b60006020820190508181036000830152612bfb81612bbf565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206261672060008201527f73697a652e000000000000000000000000000000000000000000000000000000602082015250565b6000612c5e6025836122cb565b9150612c6982612c02565b604082019050919050565b60006020820190508181036000830152612c8d81612c51565b9050919050565b600081519050612ca3816123c1565b92915050565b600060208284031215612cbf57612cbe612385565b5b6000612ccd84828501612c94565b91505092915050565b6000819050919050565b6000612cfb612cf6612cf184612cd6565b61285a565b61228c565b9050919050565b612d0b81612ce0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d46816123af565b82525050565b6000612d588383612d3d565b60208301905092915050565b6000602082019050919050565b6000612d7c82612d11565b612d868185612d1c565b9350612d9183612d2d565b8060005b83811015612dc2578151612da98882612d4c565b9750612db483612d64565b925050600181019050612d95565b5085935050505092915050565b600060a082019050612de46000830188612296565b612df16020830187612d02565b8181036040830152612e038186612d71565b9050612e126060830185612783565b612e1f6080830184612296565b9695505050505050565b600081905092915050565b50565b6000612e44600083612e29565b9150612e4f82612e34565b600082019050919050565b6000612e6582612e37565b9150819050919050565b7f72656365697665722072656a656374656420455448207472616e736665720000600082015250565b6000612ea5601e836122cb565b9150612eb082612e6f565b602082019050919050565b60006020820190508181036000830152612ed481612e98565b9050919050565b600060c082019050612ef06000830189612783565b612efd6020830188612296565b612f0a6040830187612d02565b612f176060830186612d02565b612f246080830185612783565b612f3160a0830184612296565b979650505050505050565b600081519050612f4b816123ed565b92915050565b600080600060608486031215612f6a57612f69612385565b5b6000612f7886828701612f3c565b9350506020612f8986828701612f3c565b9250506040612f9a86828701612f3c565b9150509250925092565b6000604082019050612fb96000830185612296565b612fc66020830184612296565b9392505050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613003601b836122cb565b915061300e82612fcd565b602082019050919050565b6000602082019050818103600083015261303281612ff6565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006130956021836122cb565b91506130a082613039565b604082019050919050565b600060208201905081810360008301526130c481613088565b905091905056fea2646970667358221220cd612445ae1518b34593adf1819e3404b613d8a4ac0d5794acac5785be181bf264736f6c634300080f0033

Deployed Bytecode Sourcemap

4122:8738:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5138:54;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6103:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6525:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12031:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11840:183;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5833:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7043:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2360:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5927:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11334:118;;;;;;;;;;;;;:::i;:::-;;4786:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6749:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4524:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5101:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6273:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2469:131;;;;;;;;;;;;;:::i;:::-;;11614:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6189:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6013:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12327:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12586:207;;;;;;;;;;;;;:::i;:::-;;5073:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6879:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11714:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6384:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12440:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4985:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11460:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5042:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5138:54;;;;:::o;6103:80::-;6151:13;6175:5;;;;;;;;;;;;;;;;;6168:12;;6103:80;:::o;6525:216::-;6600:4;6652:6;6617:11;:23;6629:10;6617:23;;;;;;;;;;;;;;;:32;6641:7;6617:32;;;;;;;;;;;;;;;:41;;;;6695:7;6674:37;;6683:10;6674:37;;;6704:6;6674:37;;;;;;:::i;:::-;;;;;;;;6729:4;6722:11;;6525:216;;;;:::o;12031:288::-;2313:19;2321:10;2313:7;:19::i;:::-;2305:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12140:13:::1;12125:12;:28;;;;12180:13;12165:12;:28;;;;12231:12;;12216;;:27;;;;:::i;:::-;12205:8;:38;;;;12275:2;12263:8;;:14;;12255:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;12031:288:::0;;:::o;11840:183::-;2313:19;2321:10;2313:7;:19::i;:::-;2305:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;11927:9:::1;11922:94;11946:5;:12;11942:1;:16;11922:94;;;11998:6;11980:5;:15;11986:5;11992:1;11986:8;;;;;;;;:::i;:::-;;;;;;;;11980:15;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;11960:3;;;;;:::i;:::-;;;;11922:94;;;;11840:183:::0;;:::o;5833:88::-;5888:7;5906:12;;5899:19;;5833:88;:::o;7043:370::-;7143:4;7198:17;7163:11;:19;7175:6;7163:19;;;;;;;;;;;;;;;:31;7183:10;7163:31;;;;;;;;;;;;;;;;:52;7160:186;;7265:69;7301:6;7265:69;;;;;;;;;;;;;;;;;:11;:19;7277:6;7265:19;;;;;;;;;;;;;;;:31;7285:10;7265:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;7231:11;:19;7243:6;7231:19;;;;;;;;;;;;;;;:31;7251:10;7231:31;;;;;;;;;;;;;;;:103;;;;7160:186;7365:40;7379:6;7387:9;7398:6;7365:13;:40::i;:::-;7358:47;;7043:370;;;;;:::o;2360:103::-;2415:4;2450:5;;;;;;;;;;;2439:16;;:7;:16;;;2432:23;;2360:103;;;:::o;5927:80::-;5979:5;4451:1;5988:16;;5927:80;:::o;11334:118::-;11391:20;;;;;;;;;;;11383:38;;:61;11422:21;11383:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11334:118::o;4786:37::-;;;;;;;;;;;;;;;;;;;;;;:::o;6749:122::-;6804:4;6828:35;6836:7;6845:17;6828:7;:35::i;:::-;6821:42;;6749:122;;;:::o;4524:46::-;;;;:::o;5101:30::-;;;;;;;;;;;;;:::o;6273:105::-;6339:7;6357:9;:18;6367:7;6357:18;;;;;;;;;;;;;;;;6350:25;;6273:105;;;:::o;2469:131::-;2313:19;2321:10;2313:7;:19::i;:::-;2305:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;2542:1:::1;2526:5:::0;::::1;:18;;;;;;;;;;;;;;;;;;2560:32;2589:1;2560:32;;;;;;:::i;:::-;;;;;;;;2469:131::o:0;11614:92::-;2313:19;2321:10;2313:7;:19::i;:::-;2305:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;11692:6:::1;11678:11;;:20;;;;;;;;;;;;;;;;;;11614:92:::0;:::o;6189:78::-;6241:7;6259:5;;;;;;;;;;;6252:12;;6189:78;:::o;6013:84::-;6063:13;6087:7;;;;;;;;;;;;;;;;;6080:14;;6013:84;:::o;12327:105::-;2313:19;2321:10;2313:7;:19::i;:::-;2305:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12415:9:::1;12399:13;:25;;;;12327:105:::0;:::o;12586:207::-;12659:19;12634:21;:44;;12625:54;;;;;;12706:1;12691:12;:16;;;;12734:1;12719:12;:16;;;;12773:12;;12758;;:27;;;;:::i;:::-;12747:8;:38;;;;12586:207::o;5073:19::-;;;;;;;;;;;;;:::o;6879:156::-;6959:4;6983:44;6997:10;7009:9;7020:6;6983:13;:44::i;:::-;6976:51;;6879:156;;;;:::o;11714:119::-;2313:19;2321:10;2313:7;:19::i;:::-;2305:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;11819:6:::1;11799:5;:17;11805:10;11799:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;11714:119:::0;;:::o;6384:133::-;6468:7;6486:11;:19;6498:6;6486:19;;;;;;;;;;;;;;;:28;6506:7;6486:28;;;;;;;;;;;;;;;;6479:35;;6384:133;;;;:::o;12440:138::-;2313:19;2321:10;2313:7;:19::i;:::-;2305:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12549:21:::1;12526:20;;:44;;;;;;;;;;;;;;;;;;12440:138:::0;:::o;4985:48::-;;;;;;;;;;;;;:::o;11460:141::-;2313:19;2321:10;2313:7;:19::i;:::-;2305:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;11590:3:::1;11572:13;11557:12;;:28;;;;:::i;:::-;11556:37;;;;:::i;:::-;11537:16;:56;;;;11460:141:::0;:::o;5042:24::-;;;;;;;;;;;;;:::o;449:190::-;535:7;568:1;563;:6;;571:12;555:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;595:9;611:1;607;:5;;;;:::i;:::-;595:17;;630:1;623:8;;;449:190;;;;;:::o;7421:843::-;7513:4;7539:5;:13;7545:6;7539:13;;;;;;;;;;;;;;;;;;;;;;;;;7538:14;7530:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;7584:6;;;;;;;;;;;7581:63;;;7600:41;7615:6;7623:9;7634:6;7600:14;:41::i;:::-;7593:48;;;;7581:63;7681:4;;;;;;;;;;;7668:17;;:9;:17;;;;:38;;;;;7702:4;;;;;;;;;;;7689:17;;:9;:17;;;;7668:38;7664:200;;;7731:15;:26;7747:9;7731:26;;;;;;;;;;;;;;;;;;;;;;;;;:79;;;;7794:16;;7784:6;7761:9;:20;7771:9;7761:20;;;;;;;;;;;;;;;;:29;;;;:::i;:::-;:49;;7731:79;7723:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;7664:200;7887:16;:14;:16::i;:::-;7884:35;;;7906:10;:8;:10::i;:::-;7884:35;7952:53;7974:6;7952:53;;;;;;;;;;;;;;;;;:9;:17;7962:6;7952:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;7932:9;:17;7942:6;7932:17;;;;;;;;;;;;;;;:73;;;;8018:22;8043:21;8057:6;8043:13;:21::i;:::-;:56;;8093:6;8043:56;;;8067:23;8075:6;8083;8067:7;:23::i;:::-;8043:56;8018:81;;8133:40;8158:14;8133:9;:20;8143:9;8133:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;8110:9;:20;8120:9;8110:20;;;;;;;;;;;;;;;:63;;;;8208:9;8191:43;;8200:6;8191:43;;;8219:14;8191:43;;;;;;:::i;:::-;;;;;;;;8252:4;8245:11;;;7421:843;;;;;;:::o;8276:330::-;8369:4;8406:53;8428:6;8406:53;;;;;;;;;;;;;;;;;:9;:17;8416:6;8406:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;8386:9;:17;8396:6;8386:17;;;;;;;;;;;;;;;:73;;;;8493:32;8518:6;8493:9;:20;8503:9;8493:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;8470:9;:20;8480:9;8470:20;;;;;;;;;;;;;;;:55;;;;8558:9;8541:35;;8550:6;8541:35;;;8569:6;8541:35;;;;;;:::i;:::-;;;;;;;;8594:4;8587:11;;8276:330;;;;;:::o;9073:197::-;9122:4;9160;;;;;;;;;;;9146:18;;:10;:18;;;;:38;;;;;9178:6;;;;;;;;;;;9177:7;9146:38;:62;;;;;9197:11;;;;;;;;;;;9146:62;:116;;;;;9249:13;;9221:9;:24;9239:4;9221:24;;;;;;;;;;;;;;;;:41;;9146:116;9139:123;;9073:197;:::o;9278:1670::-;5249:4;5240:6;;:13;;;;;;;;;;;;;;;;;;9327:28:::1;9358:9;:24;9376:4;9358:24;;;;;;;;;;;;;;;;9327:55;;9435:1;9421:13;;:15;;;;:::i;:::-;9397:20;:39;9393:96;;9488:1;9474:13;;:15;;;;:::i;:::-;9451:38;;9393:96;9500:23;9526:59;9583:1;9526:52;9569:8;;9526:38;9551:12;;9526:20;:24;;:38;;;;:::i;:::-;:42;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;9500:85;;9596:20;9619:41;9644:15;9619:20;:24;;:41;;;;:::i;:::-;9596:64;;9673:21;9711:1;9697:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9673:40;;9742:4;9724;9729:1;9724:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;9768:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9758:4;9763:1;9758:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;9794:21;9818;9794:45;;9852:6;;;;;;;;;;;:57;;;9924:12;9951:1;9967:4;9994;10014:15;9852:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;10053:17;10073:40;10099:13;10073:21;:25;;:40;;;;:::i;:::-;10053:60;;10124:19;10146:33;10159:19;10176:1;10159:12;;:16;;:19;;;;:::i;:::-;10146:8;;:12;;:33;;;;:::i;:::-;10124:55;;10190:26;10219:51;10268:1;10219:44;10251:11;10219:27;10233:12;;10219:9;:13;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;:48;;:51;;;;:::i;:::-;10190:80;;10281:26;10310:44;10342:11;10310:27;10324:12;;10310:9;:13;;:27;;;;:::i;:::-;:31;;:44;;;;:::i;:::-;10281:73;;10370:21;10428:20;;;;;;;;;;;10420:34;;10462:18;10487:5;10420:77;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10369:128;;;10516:16;10508:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;10601:1;10583:15;:19;10580:361;;;10618:6;;;;;;;;;;;:22;;;10648:18;10694:4;10718:15;10752:1;10772::::0;10792:20:::1;;;;;;;;;;;10831:15;10618:243;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;10881:48;10893:18;10913:15;10881:48;;;;;;;:::i;:::-;;;;;;;;10580:361;9316:1632;;;;;;;;;;5267:5:::0;5258:6;;:14;;;;;;;;;;;;;;;;;;9278:1670::o;8614:114::-;8676:4;8701:11;:19;8713:6;8701:19;;;;;;;;;;;;;;;;;;;;;;;;;8700:20;8693:27;;8614:114;;;:::o;8736:329::-;8803:7;8823:17;8843:40;8868:14;;8843:20;8854:8;;8843:6;:10;;:20;;;;:::i;:::-;:24;;:40;;;;:::i;:::-;8823:60;;8921:39;8950:9;8921;:24;8939:4;8921:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;8894:9;:24;8912:4;8894:24;;;;;;;;;;;;;;;:66;;;;9001:4;8976:42;;8985:6;8976:42;;;9008:9;8976:42;;;;;;:::i;:::-;;;;;;;;9036:21;9047:9;9036:6;:10;;:21;;;;:::i;:::-;9029:28;;;8736:329;;;;:::o;122:179::-;180:7;200:9;216:1;212;:5;;;;:::i;:::-;200:17;;241:1;236;:6;;228:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;292:1;285:8;;;122:179;;;;:::o;645:246::-;703:7;732:1;727;:6;723:47;;757:1;750:8;;;;723:47;780:9;796:1;792;:5;;;;:::i;:::-;780:17;;825:1;820;816;:5;;;;:::i;:::-;:10;808:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;882:1;875:8;;;645:246;;;;;:::o;897:132::-;955:7;982:39;986:1;989;982:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;975:46;;897:132;;;;:::o;307:136::-;365:7;392:43;396:1;399;392:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;385:50;;307:136;;;;:::o;1035:189::-;1121:7;1153:1;1149;:5;1156:12;1141:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1180:9;1196:1;1192;:5;;;;:::i;:::-;1180:17;;1215:1;1208:8;;;1035: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:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1832:75::-;1865:6;1898:2;1892:9;1882:19;;1832:75;:::o;1913:117::-;2022:1;2019;2012:12;2036:117;2145:1;2142;2135:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:474::-;3914:6;3922;3971:2;3959:9;3950:7;3946:23;3942:32;3939:119;;;3977:79;;:::i;:::-;3939:119;4097:1;4122:53;4167:7;4158:6;4147:9;4143:22;4122:53;:::i;:::-;4112:63;;4068:117;4224:2;4250:53;4295:7;4286:6;4275:9;4271:22;4250:53;:::i;:::-;4240:63;;4195:118;3846:474;;;;;:::o;4326:117::-;4435:1;4432;4425:12;4449:180;4497:77;4494:1;4487:88;4594:4;4591:1;4584:15;4618:4;4615:1;4608:15;4635:281;4718:27;4740:4;4718:27;:::i;:::-;4710:6;4706:40;4848:6;4836:10;4833:22;4812:18;4800:10;4797:34;4794:62;4791:88;;;4859:18;;:::i;:::-;4791:88;4899:10;4895:2;4888:22;4678:238;4635:281;;:::o;4922:129::-;4956:6;4983:20;;:::i;:::-;4973:30;;5012:33;5040:4;5032:6;5012:33;:::i;:::-;4922:129;;;:::o;5057:311::-;5134:4;5224:18;5216:6;5213:30;5210:56;;;5246:18;;:::i;:::-;5210:56;5296:4;5288:6;5284:17;5276:25;;5356:4;5350;5346:15;5338:23;;5057:311;;;:::o;5374:117::-;5483:1;5480;5473:12;5514:710;5610:5;5635:81;5651:64;5708:6;5651:64;:::i;:::-;5635:81;:::i;:::-;5626:90;;5736:5;5765:6;5758:5;5751:21;5799:4;5792:5;5788:16;5781:23;;5852:4;5844:6;5840:17;5832:6;5828:30;5881:3;5873:6;5870:15;5867:122;;;5900:79;;:::i;:::-;5867:122;6015:6;5998:220;6032:6;6027:3;6024:15;5998:220;;;6107:3;6136:37;6169:3;6157:10;6136:37;:::i;:::-;6131:3;6124:50;6203:4;6198:3;6194:14;6187:21;;6074:144;6058:4;6053:3;6049:14;6042:21;;5998:220;;;6002:21;5616:608;;5514:710;;;;;:::o;6247:370::-;6318:5;6367:3;6360:4;6352:6;6348:17;6344:27;6334:122;;6375:79;;:::i;:::-;6334:122;6492:6;6479:20;6517:94;6607:3;6599:6;6592:4;6584:6;6580:17;6517:94;:::i;:::-;6508:103;;6324:293;6247:370;;;;:::o;6623:116::-;6693:21;6708:5;6693:21;:::i;:::-;6686:5;6683:32;6673:60;;6729:1;6726;6719:12;6673:60;6623:116;:::o;6745:133::-;6788:5;6826:6;6813:20;6804:29;;6842:30;6866:5;6842:30;:::i;:::-;6745:133;;;;:::o;6884:678::-;6974:6;6982;7031:2;7019:9;7010:7;7006:23;7002:32;6999:119;;;7037:79;;:::i;:::-;6999:119;7185:1;7174:9;7170:17;7157:31;7215:18;7207:6;7204:30;7201:117;;;7237:79;;:::i;:::-;7201:117;7342:78;7412:7;7403:6;7392:9;7388:22;7342:78;:::i;:::-;7332:88;;7128:302;7469:2;7495:50;7537:7;7528:6;7517:9;7513:22;7495:50;:::i;:::-;7485:60;;7440:115;6884:678;;;;;:::o;7568:619::-;7645:6;7653;7661;7710:2;7698:9;7689:7;7685:23;7681:32;7678:119;;;7716:79;;:::i;:::-;7678:119;7836:1;7861:53;7906:7;7897:6;7886:9;7882:22;7861:53;:::i;:::-;7851:63;;7807:117;7963:2;7989:53;8034:7;8025:6;8014:9;8010:22;7989:53;:::i;:::-;7979:63;;7934:118;8091:2;8117:53;8162:7;8153:6;8142:9;8138:22;8117:53;:::i;:::-;8107:63;;8062:118;7568:619;;;;;:::o;8193:329::-;8252:6;8301:2;8289:9;8280:7;8276:23;8272:32;8269:119;;;8307:79;;:::i;:::-;8269:119;8427:1;8452:53;8497:7;8488:6;8477:9;8473:22;8452:53;:::i;:::-;8442:63;;8398:117;8193:329;;;;:::o;8528:86::-;8563:7;8603:4;8596:5;8592:16;8581:27;;8528:86;;;:::o;8620:112::-;8703:22;8719:5;8703:22;:::i;:::-;8698:3;8691:35;8620:112;;:::o;8738:214::-;8827:4;8865:2;8854:9;8850:18;8842:26;;8878:67;8942:1;8931:9;8927:17;8918:6;8878:67;:::i;:::-;8738:214;;;;:::o;8958:323::-;9014:6;9063:2;9051:9;9042:7;9038:23;9034:32;9031:119;;;9069:79;;:::i;:::-;9031:119;9189:1;9214:50;9256:7;9247:6;9236:9;9232:22;9214:50;:::i;:::-;9204:60;;9160:114;8958:323;;;;:::o;9287:118::-;9374:24;9392:5;9374:24;:::i;:::-;9369:3;9362:37;9287:118;;:::o;9411:222::-;9504:4;9542:2;9531:9;9527:18;9519:26;;9555:71;9623:1;9612:9;9608:17;9599:6;9555:71;:::i;:::-;9411:222;;;;:::o;9639:329::-;9698:6;9747:2;9735:9;9726:7;9722:23;9718:32;9715:119;;;9753:79;;:::i;:::-;9715:119;9873:1;9898:53;9943:7;9934:6;9923:9;9919:22;9898:53;:::i;:::-;9888:63;;9844:117;9639:329;;;;:::o;9974:468::-;10039:6;10047;10096:2;10084:9;10075:7;10071:23;10067:32;10064:119;;;10102:79;;:::i;:::-;10064:119;10222:1;10247:53;10292:7;10283:6;10272:9;10268:22;10247:53;:::i;:::-;10237:63;;10193:117;10349:2;10375:50;10417:7;10408:6;10397:9;10393:22;10375:50;:::i;:::-;10365:60;;10320:115;9974:468;;;;;:::o;10448:474::-;10516:6;10524;10573:2;10561:9;10552:7;10548:23;10544:32;10541:119;;;10579:79;;:::i;:::-;10541:119;10699:1;10724:53;10769:7;10760:6;10749:9;10745:22;10724:53;:::i;:::-;10714:63;;10670:117;10826:2;10852:53;10897:7;10888:6;10877:9;10873:22;10852:53;:::i;:::-;10842:63;;10797:118;10448:474;;;;;:::o;10928:60::-;10956:3;10977:5;10970:12;;10928:60;;;:::o;10994:142::-;11044:9;11077:53;11095:34;11104:24;11122:5;11104:24;:::i;:::-;11095:34;:::i;:::-;11077:53;:::i;:::-;11064:66;;10994:142;;;:::o;11142:126::-;11192:9;11225:37;11256:5;11225:37;:::i;:::-;11212:50;;11142:126;;;:::o;11274:144::-;11342:9;11375:37;11406:5;11375:37;:::i;:::-;11362:50;;11274:144;;;:::o;11424:167::-;11529:55;11578:5;11529:55;:::i;:::-;11524:3;11517:68;11424:167;;:::o;11597:258::-;11708:4;11746:2;11735:9;11731:18;11723:26;;11759:89;11845:1;11834:9;11830:17;11821:6;11759:89;:::i;:::-;11597:258;;;;:::o;11861:156::-;12001:8;11997:1;11989:6;11985:14;11978:32;11861:156;:::o;12023:365::-;12165:3;12186:66;12250:1;12245:3;12186:66;:::i;:::-;12179:73;;12261:93;12350:3;12261:93;:::i;:::-;12379:2;12374:3;12370:12;12363:19;;12023:365;;;:::o;12394:419::-;12560:4;12598:2;12587:9;12583:18;12575:26;;12647:9;12641:4;12637:20;12633:1;12622:9;12618:17;12611:47;12675:131;12801:4;12675:131;:::i;:::-;12667:139;;12394:419;;;:::o;12819:180::-;12867:77;12864:1;12857:88;12964:4;12961:1;12954:15;12988:4;12985:1;12978:15;13005:305;13045:3;13064:20;13082:1;13064:20;:::i;:::-;13059:25;;13098:20;13116:1;13098:20;:::i;:::-;13093:25;;13252:1;13184:66;13180:74;13177:1;13174:81;13171:107;;;13258:18;;:::i;:::-;13171:107;13302:1;13299;13295:9;13288:16;;13005:305;;;;:::o;13316:179::-;13456:31;13452:1;13444:6;13440:14;13433:55;13316:179;:::o;13501:366::-;13643:3;13664:67;13728:2;13723:3;13664:67;:::i;:::-;13657:74;;13740:93;13829:3;13740:93;:::i;:::-;13858:2;13853:3;13849:12;13842:19;;13501:366;;;:::o;13873:419::-;14039:4;14077:2;14066:9;14062:18;14054:26;;14126:9;14120:4;14116:20;14112:1;14101:9;14097:17;14090:47;14154:131;14280:4;14154:131;:::i;:::-;14146:139;;13873:419;;;:::o;14298:180::-;14346:77;14343:1;14336:88;14443:4;14440:1;14433:15;14467:4;14464:1;14457:15;14484:233;14523:3;14546:24;14564:5;14546:24;:::i;:::-;14537:33;;14592:66;14585:5;14582:77;14579:103;;14662:18;;:::i;:::-;14579:103;14709:1;14702:5;14698:13;14691:20;;14484:233;;;:::o;14723:348::-;14763:7;14786:20;14804:1;14786:20;:::i;:::-;14781:25;;14820:20;14838:1;14820:20;:::i;:::-;14815:25;;15008:1;14940:66;14936:74;14933:1;14930:81;14925:1;14918:9;14911:17;14907:105;14904:131;;;15015:18;;:::i;:::-;14904:131;15063:1;15060;15056:9;15045:20;;14723:348;;;;:::o;15077:180::-;15125:77;15122:1;15115:88;15222:4;15219:1;15212:15;15246:4;15243:1;15236:15;15263:185;15303:1;15320:20;15338:1;15320:20;:::i;:::-;15315:25;;15354:20;15372:1;15354:20;:::i;:::-;15349:25;;15393:1;15383:35;;15398:18;;:::i;:::-;15383:35;15440:1;15437;15433:9;15428:14;;15263:185;;;;:::o;15454:191::-;15494:4;15514:20;15532:1;15514:20;:::i;:::-;15509:25;;15548:20;15566:1;15548:20;:::i;:::-;15543:25;;15587:1;15584;15581:8;15578:34;;;15592:18;;:::i;:::-;15578:34;15637:1;15634;15630:9;15622:17;;15454:191;;;;:::o;15651:161::-;15791:13;15787:1;15779:6;15775:14;15768:37;15651:161;:::o;15818:366::-;15960:3;15981:67;16045:2;16040:3;15981:67;:::i;:::-;15974:74;;16057:93;16146:3;16057:93;:::i;:::-;16175:2;16170:3;16166:12;16159:19;;15818:366;;;:::o;16190:419::-;16356:4;16394:2;16383:9;16379:18;16371:26;;16443:9;16437:4;16433:20;16429:1;16418:9;16414:17;16407:47;16471:131;16597:4;16471:131;:::i;:::-;16463:139;;16190:419;;;:::o;16615:224::-;16755:34;16751:1;16743:6;16739:14;16732:58;16824:7;16819:2;16811:6;16807:15;16800:32;16615:224;:::o;16845:366::-;16987:3;17008:67;17072:2;17067:3;17008:67;:::i;:::-;17001:74;;17084:93;17173:3;17084:93;:::i;:::-;17202:2;17197:3;17193:12;17186:19;;16845:366;;;:::o;17217:419::-;17383:4;17421:2;17410:9;17406:18;17398:26;;17470:9;17464:4;17460:20;17456:1;17445:9;17441:17;17434:47;17498:131;17624:4;17498:131;:::i;:::-;17490:139;;17217:419;;;:::o;17642:143::-;17699:5;17730:6;17724:13;17715:22;;17746:33;17773:5;17746:33;:::i;:::-;17642:143;;;;:::o;17791:351::-;17861:6;17910:2;17898:9;17889:7;17885:23;17881:32;17878:119;;;17916:79;;:::i;:::-;17878:119;18036:1;18061:64;18117:7;18108:6;18097:9;18093:22;18061:64;:::i;:::-;18051:74;;18007:128;17791:351;;;;:::o;18148:85::-;18193:7;18222:5;18211:16;;18148:85;;;:::o;18239:158::-;18297:9;18330:61;18348:42;18357:32;18383:5;18357:32;:::i;:::-;18348:42;:::i;:::-;18330:61;:::i;:::-;18317:74;;18239:158;;;:::o;18403:147::-;18498:45;18537:5;18498:45;:::i;:::-;18493:3;18486:58;18403:147;;:::o;18556:114::-;18623:6;18657:5;18651:12;18641:22;;18556:114;;;:::o;18676:184::-;18775:11;18809:6;18804:3;18797:19;18849:4;18844:3;18840:14;18825:29;;18676:184;;;;:::o;18866:132::-;18933:4;18956:3;18948:11;;18986:4;18981:3;18977:14;18969:22;;18866:132;;;:::o;19004:108::-;19081:24;19099:5;19081:24;:::i;:::-;19076:3;19069:37;19004:108;;:::o;19118:179::-;19187:10;19208:46;19250:3;19242:6;19208:46;:::i;:::-;19286:4;19281:3;19277:14;19263:28;;19118:179;;;;:::o;19303:113::-;19373:4;19405;19400:3;19396:14;19388:22;;19303:113;;;:::o;19452:732::-;19571:3;19600:54;19648:5;19600:54;:::i;:::-;19670:86;19749:6;19744:3;19670:86;:::i;:::-;19663:93;;19780:56;19830:5;19780:56;:::i;:::-;19859:7;19890:1;19875:284;19900:6;19897:1;19894:13;19875:284;;;19976:6;19970:13;20003:63;20062:3;20047:13;20003:63;:::i;:::-;19996:70;;20089:60;20142:6;20089:60;:::i;:::-;20079:70;;19935:224;19922:1;19919;19915:9;19910:14;;19875:284;;;19879:14;20175:3;20168:10;;19576:608;;;19452:732;;;;:::o;20190:831::-;20453:4;20491:3;20480:9;20476:19;20468:27;;20505:71;20573:1;20562:9;20558:17;20549:6;20505:71;:::i;:::-;20586:80;20662:2;20651:9;20647:18;20638:6;20586:80;:::i;:::-;20713:9;20707:4;20703:20;20698:2;20687:9;20683:18;20676:48;20741:108;20844:4;20835:6;20741:108;:::i;:::-;20733:116;;20859:72;20927:2;20916:9;20912:18;20903:6;20859:72;:::i;:::-;20941:73;21009:3;20998:9;20994:19;20985:6;20941:73;:::i;:::-;20190:831;;;;;;;;:::o;21027:147::-;21128:11;21165:3;21150:18;;21027:147;;;;:::o;21180:114::-;;:::o;21300:398::-;21459:3;21480:83;21561:1;21556:3;21480:83;:::i;:::-;21473:90;;21572:93;21661:3;21572:93;:::i;:::-;21690:1;21685:3;21681:11;21674:18;;21300:398;;;:::o;21704:379::-;21888:3;21910:147;22053:3;21910:147;:::i;:::-;21903:154;;22074:3;22067:10;;21704:379;;;:::o;22089:180::-;22229:32;22225:1;22217:6;22213:14;22206:56;22089:180;:::o;22275:366::-;22417:3;22438:67;22502:2;22497:3;22438:67;:::i;:::-;22431:74;;22514:93;22603:3;22514:93;:::i;:::-;22632:2;22627:3;22623:12;22616:19;;22275:366;;;:::o;22647:419::-;22813:4;22851:2;22840:9;22836:18;22828:26;;22900:9;22894:4;22890:20;22886:1;22875:9;22871:17;22864:47;22928:131;23054:4;22928:131;:::i;:::-;22920:139;;22647:419;;;:::o;23072:807::-;23321:4;23359:3;23348:9;23344:19;23336:27;;23373:71;23441:1;23430:9;23426:17;23417:6;23373:71;:::i;:::-;23454:72;23522:2;23511:9;23507:18;23498:6;23454:72;:::i;:::-;23536:80;23612:2;23601:9;23597:18;23588:6;23536:80;:::i;:::-;23626;23702:2;23691:9;23687:18;23678:6;23626:80;:::i;:::-;23716:73;23784:3;23773:9;23769:19;23760:6;23716:73;:::i;:::-;23799;23867:3;23856:9;23852:19;23843:6;23799:73;:::i;:::-;23072:807;;;;;;;;;:::o;23885:143::-;23942:5;23973:6;23967:13;23958:22;;23989:33;24016:5;23989:33;:::i;:::-;23885:143;;;;:::o;24034:663::-;24122:6;24130;24138;24187:2;24175:9;24166:7;24162:23;24158:32;24155:119;;;24193:79;;:::i;:::-;24155:119;24313:1;24338:64;24394:7;24385:6;24374:9;24370:22;24338:64;:::i;:::-;24328:74;;24284:128;24451:2;24477:64;24533:7;24524:6;24513:9;24509:22;24477:64;:::i;:::-;24467:74;;24422:129;24590:2;24616:64;24672:7;24663:6;24652:9;24648:22;24616:64;:::i;:::-;24606:74;;24561:129;24034:663;;;;;:::o;24703:332::-;24824:4;24862:2;24851:9;24847:18;24839:26;;24875:71;24943:1;24932:9;24928:17;24919:6;24875:71;:::i;:::-;24956:72;25024:2;25013:9;25009:18;25000:6;24956:72;:::i;:::-;24703:332;;;;;:::o;25041:177::-;25181:29;25177:1;25169:6;25165:14;25158:53;25041:177;:::o;25224:366::-;25366:3;25387:67;25451:2;25446:3;25387:67;:::i;:::-;25380:74;;25463:93;25552:3;25463:93;:::i;:::-;25581:2;25576:3;25572:12;25565:19;;25224:366;;;:::o;25596:419::-;25762:4;25800:2;25789:9;25785:18;25777:26;;25849:9;25843:4;25839:20;25835:1;25824:9;25820:17;25813:47;25877:131;26003:4;25877:131;:::i;:::-;25869:139;;25596:419;;;:::o;26021:220::-;26161:34;26157:1;26149:6;26145:14;26138:58;26230:3;26225:2;26217:6;26213:15;26206:28;26021:220;:::o;26247:366::-;26389:3;26410:67;26474:2;26469:3;26410:67;:::i;:::-;26403:74;;26486:93;26575:3;26486:93;:::i;:::-;26604:2;26599:3;26595:12;26588:19;;26247:366;;;:::o;26619:419::-;26785:4;26823:2;26812:9;26808:18;26800:26;;26872:9;26866:4;26862:20;26858:1;26847:9;26843:17;26836:47;26900:131;27026:4;26900:131;:::i;:::-;26892:139;;26619:419;;;:::o

Swarm Source

ipfs://cd612445ae1518b34593adf1819e3404b613d8a4ac0d5794acac5785be181bf2
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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