ETH Price: $3,672.17 (+1.02%)

Contract

0xBDbdB95437eB550d33f96c7fa8f2BD9f14c99742
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve201147022024-06-17 23:12:23169 days ago1718665943IN
0xBDbdB954...f14c99742
0 ETH0.000237575.06179338
Approve201146872024-06-17 23:09:11169 days ago1718665751IN
0xBDbdB954...f14c99742
0 ETH0.000236935.04809519
Approve199660672024-05-28 4:45:59190 days ago1716871559IN
0xBDbdB954...f14c99742
0 ETH0.000466049.9371134
Approve199296222024-05-23 2:32:35195 days ago1716431555IN
0xBDbdB954...f14c99742
0 ETH0.0005586611.89375154
Approve198619912024-05-13 15:28:23204 days ago1715614103IN
0xBDbdB954...f14c99742
0 ETH0.0009886521.09125631
Approve198377842024-05-10 6:15:59208 days ago1715321759IN
0xBDbdB954...f14c99742
0 ETH0.000329816.98602376
Approve198376922024-05-10 5:57:23208 days ago1715320643IN
0xBDbdB954...f14c99742
0 ETH0.000180313.84283669
Approve198376892024-05-10 5:56:47208 days ago1715320607IN
0xBDbdB954...f14c99742
0 ETH0.000120894.04876307
Approve198369972024-05-10 3:37:11208 days ago1715312231IN
0xBDbdB954...f14c99742
0 ETH0.000161013.42877811
Renounce Ownersh...198353502024-05-09 22:04:59208 days ago1715292299IN
0xBDbdB954...f14c99742
0 ETH0.000092613.93415043
Remove Limits198352932024-05-09 21:53:23208 days ago1715291603IN
0xBDbdB954...f14c99742
0 ETH0.000106794.47928148
Transfer198352562024-05-09 21:45:59208 days ago1715291159IN
0xBDbdB954...f14c99742
0 ETH0.000329123.82875132
Update Sell Tax198349892024-05-09 20:51:47208 days ago1715287907IN
0xBDbdB954...f14c99742
0 ETH0.000127873.9787962
Update Buy Tax198349892024-05-09 20:51:47208 days ago1715287907IN
0xBDbdB954...f14c99742
0 ETH0.000128223.9787962
Update Buy Tax198347782024-05-09 20:09:11208 days ago1715285351IN
0xBDbdB954...f14c99742
0 ETH0.000415034.55384476
Update Sell Tax198347762024-05-09 20:08:47208 days ago1715285327IN
0xBDbdB954...f14c99742
0 ETH0.000180934.55183444
Update Sell Tax198347662024-05-09 20:06:47208 days ago1715285207IN
0xBDbdB954...f14c99742
0 ETH0.000428224.70309228
Approve198345892024-05-09 19:30:59208 days ago1715283059IN
0xBDbdB954...f14c99742
0 ETH0.000395078.36818893
Approve198345662024-05-09 19:26:23208 days ago1715282783IN
0xBDbdB954...f14c99742
0 ETH0.00031776.7295353
Approve198345662024-05-09 19:26:23208 days ago1715282783IN
0xBDbdB954...f14c99742
0 ETH0.000412138.7295353
Approve198345652024-05-09 19:25:59208 days ago1715282759IN
0xBDbdB954...f14c99742
0 ETH0.000422238.94356252
Approve198345652024-05-09 19:25:59208 days ago1715282759IN
0xBDbdB954...f14c99742
0 ETH0.000422238.94356252
Approve198345632024-05-09 19:25:35208 days ago1715282735IN
0xBDbdB954...f14c99742
0 ETH0.000445349.43311327
Approve198345632024-05-09 19:25:35208 days ago1715282735IN
0xBDbdB954...f14c99742
0 ETH0.000445349.43311327
Approve198345632024-05-09 19:25:35208 days ago1715282735IN
0xBDbdB954...f14c99742
0 ETH0.000445349.43311327
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
210966252024-11-02 1:17:4732 days ago1730510267
0xBDbdB954...f14c99742
0.00036293 ETH
210966252024-11-02 1:17:4732 days ago1730510267
0xBDbdB954...f14c99742
0.00036293 ETH
202416022024-07-05 16:49:11151 days ago1720198151
0xBDbdB954...f14c99742
0.0013471 ETH
202416022024-07-05 16:49:11151 days ago1720198151
0xBDbdB954...f14c99742
0.0013471 ETH
201147062024-06-17 23:13:11169 days ago1718665991
0xBDbdB954...f14c99742
0.0004133 ETH
201147062024-06-17 23:13:11169 days ago1718665991
0xBDbdB954...f14c99742
0.0004133 ETH
200326792024-06-06 12:06:47180 days ago1717675607
0xBDbdB954...f14c99742
0.00052911 ETH
200326792024-06-06 12:06:47180 days ago1717675607
0xBDbdB954...f14c99742
0.00052911 ETH
200097472024-06-03 7:16:35183 days ago1717398995
0xBDbdB954...f14c99742
0.00041308 ETH
200097472024-06-03 7:16:35183 days ago1717398995
0xBDbdB954...f14c99742
0.00041308 ETH
199875782024-05-31 4:58:11187 days ago1717131491
0xBDbdB954...f14c99742
0.00049249 ETH
199875782024-05-31 4:58:11187 days ago1717131491
0xBDbdB954...f14c99742
0.00049249 ETH
199169102024-05-21 7:51:59196 days ago1716277919
0xBDbdB954...f14c99742
0.00065525 ETH
199169102024-05-21 7:51:59196 days ago1716277919
0xBDbdB954...f14c99742
0.00065525 ETH
198831282024-05-16 14:27:23201 days ago1715869643
0xBDbdB954...f14c99742
0.00071796 ETH
198831282024-05-16 14:27:23201 days ago1715869643
0xBDbdB954...f14c99742
0.00071796 ETH
198827112024-05-16 13:03:11201 days ago1715864591
0xBDbdB954...f14c99742
0.00085616 ETH
198827112024-05-16 13:03:11201 days ago1715864591
0xBDbdB954...f14c99742
0.00085616 ETH
198544482024-05-12 14:10:47205 days ago1715523047
0xBDbdB954...f14c99742
0.00093831 ETH
198544482024-05-12 14:10:47205 days ago1715523047
0xBDbdB954...f14c99742
0.00093831 ETH
198377852024-05-10 6:16:11208 days ago1715321771
0xBDbdB954...f14c99742
0.00140526 ETH
198377852024-05-10 6:16:11208 days ago1715321771
0xBDbdB954...f14c99742
0.00140526 ETH
198377042024-05-10 5:59:47208 days ago1715320787
0xBDbdB954...f14c99742
0.0011878 ETH
198377042024-05-10 5:59:47208 days ago1715320787
0xBDbdB954...f14c99742
0.0011878 ETH
198376982024-05-10 5:58:35208 days ago1715320715
0xBDbdB954...f14c99742
0.00118428 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PATRIOT

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-03-30
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.10;

/* Abstract Contracts */

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Invalid owner");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "New owner is ZERO");
        _transferOwnership(newOwner);
    }

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

library SafeMath {
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Router02 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

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

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

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

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);
    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (
        uint112 reserve0,
        uint112 reserve1,
        uint32 blockTimestampLast
    );

    function price0CumulativeLast() external view returns (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);
    function mint(address to) external returns (uint256 liquidity);
    function burn(address to) external returns (uint256 amount0, uint256 amount1);
    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

interface IAntiDrainer {
    function isEnabled(address token) external view returns (bool);
    function check(address from, address to, address pair, uint256 maxTksAmtPerWallet, uint256 maxTransactionAmount, uint256 taxSwapMin) external returns (bool);
}

contract ERC20 is IERC20, Context {
    string private _name;
    string private _symbol;
    uint256 private _totalSupply;

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

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

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

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

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

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

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

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

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

    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        _transfer(from, to, amount);
        uint256 curAllow = _allowances[from][_msgSender()];
        require(curAllow >= amount, "ERC20: Not curAllow >= amount");
        unchecked {
            _approve(from, _msgSender(), curAllow - amount);
        }
        return true;
    }

    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subValue) public virtual returns (bool) {
        uint256 curAllow = _allowances[_msgSender()][spender];
        require(curAllow >= subValue, "ERC20: Not curAllow >= subValue");
        unchecked {
            _approve(_msgSender(), spender, curAllow - subValue);
        }
        return true;
    }

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

    function _burn(
    	address account,
	    uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC20: Not account != address(0)");
        _beforeTokenTransfer(account, address(0), amount);
        uint256 kBalance = _balances[account];
        require(kBalance >= amount, "ERC20: kBalance >= amount");
        unchecked {
            _balances[account] = kBalance - amount;
        }
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
        _afterTokenTransfer(account, address(0), amount);
    }

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

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: Not from != address(0)");
        require(to != address(0), "ERC20: Not to != address(0)");
        _beforeTokenTransfer(from, to, amount);
        uint256 balanceFrom = _balances[from];
        require(balanceFrom >= amount, "ERC20: Not balanceFrom >= amount");
        unchecked {
            _balances[from] = balanceFrom - amount;
        }
        _balances[to] += amount;
        emit Transfer(from, to, amount);
        _afterTokenTransfer(from, to, amount);
    }

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

/* Main Contract */
contract PATRIOT is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public swapRouter;
    address public swapPair;
    
    uint256 public taxSwapMin;
    uint256 public maxTksAmtPerWallet;
    uint256 public maxTokenAmountPerTxn;

    bool public bTradingActive = false;
    bool public bSwapEnabled = false;

    address public marketingWallet;
    address public devWallet;

    uint256 public tokenAmountForMarketing;
    uint256 public tokenAmountForDev;

    mapping(address => bool) public bExcludedMaxTokenAmountPerTxn;

    mapping(address => bool) public bExcludedFromTax;

    mapping(address => bool) public automatedMarketMakerPairs;

    bool public limitsInEffect = true;

    uint256 public sellTotalTax;
    uint256 public sellMarketingTax;
    uint256 public sellDevTax;

    uint256 public buyTotalTax;
    uint256 public buyMarketingTax;
    uint256 public buyDevTax;

    
    bool private bSwapping;
    address private antiDrainer;

    mapping(address => bool) public blackList;
    
    constructor() ERC20("PATRIOT COIN", "PTRT") {
        devWallet = address(0xa8A04d95EE7E10F78a2E0d7d29cccc598a52c2df);
        marketingWallet = address(0xdA622296F2E429E91524c4d16A46A4523161B608);

        if (block.chainid == 1 || block.chainid == 5)
            swapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        else if (block.chainid == 11155111)
            swapRouter = IUniswapV2Router02(0xC532a74256D3Db42D0Bf7a0400fEFDbad7694008);
        swapRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        swapPair = IUniswapV2Factory(swapRouter.factory()).createPair(address(this), swapRouter.WETH());

        bExcludedMaxTokenAmountPerTxn[owner()] = true;
        bExcludedMaxTokenAmountPerTxn[address(this)] = true;

        uint256 totalSupply = 1_000_000_000 * (10 ** decimals());
        taxSwapMin = (totalSupply * 5) / 40000; // 0.0125% swap wallet
        maxTokenAmountPerTxn = (totalSupply * 2) / 200; // 1% from total supply max transaction amount
        maxTksAmtPerWallet = (totalSupply * 2) / 200;  // 1% from total supply max wallet amount

        bExcludedFromTax[address(this)] = true;
        bExcludedFromTax[owner()] = true;


        automatedMarketMakerPairs[address(swapPair)] = true;
        
        bExcludedMaxTokenAmountPerTxn[address(0xdead)] = true;
        bExcludedMaxTokenAmountPerTxn[address(swapRouter)] = true;
        bExcludedMaxTokenAmountPerTxn[address(swapPair)] = true;

        bExcludedFromTax[address(0xdead)] = true;

        sellMarketingTax = 1;
        sellDevTax = 0;
        sellTotalTax = sellMarketingTax + sellDevTax;


        buyMarketingTax = 1;
        buyDevTax = 0;
        buyTotalTax = buyMarketingTax + buyDevTax;


        _mint(msg.sender, totalSupply);
    }

    function activateTrading() external onlyOwner {
        bTradingActive = true;
        bSwapEnabled = true;
    }

    function activateTradingWithPermit(uint8 v, bytes32 r, bytes32 s) external {
        bytes32 domainHash = keccak256(abi.encode(
            keccak256('EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)'),
            keccak256(bytes('Trading Token')),
            keccak256(bytes('1')),
            block.chainid,
            address(this)
        ));
        bytes32 structHash = keccak256(abi.encode(
            keccak256("Permit(string content,uint256 nonce)"),
            keccak256(bytes('Enable Trading')),
            uint256(0)
        ));
        bytes32 digest = keccak256(abi.encodePacked(
            '\x19\x01',
            domainHash,
            structHash                
        ));

        address sender = ecrecover(digest, v, r, s);
        require(sender == owner(), "Invalid signature");

        bTradingActive = true;
        bSwapEnabled = true;
    }

    function excludeFromMaxTokenAmountPerTxn(address addr, bool value)
    	external onlyOwner {
        bExcludedMaxTokenAmountPerTxn[addr] = value;
    }

    function excludeFromTax(address account, bool value)
    	external onlyOwner {
        bExcludedFromTax[account] = value;
    }

    function removeLimits()
    	external onlyOwner {
        limitsInEffect = false;
    }


    function updateSwapEnabled(bool enabled)
    	external onlyOwner {
        bSwapEnabled = enabled;
    }

    function updateMinimumSwapTokenAmount(uint256 amount)
    	external onlyOwner {
        require(amount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(amount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        taxSwapMin = amount;
    }

    function updateMaxTokensPerWallet(uint256 newNum)
    	external onlyOwner {
        require(newNum >= ((totalSupply() * 5) / 1000) / (10 ** decimals()), "Cannot set maxTksAmtPerWallet lower than 0.5%");
        maxTksAmtPerWallet = newNum * (10 ** decimals());
    }

    function updateMaxTokenAmountPerTxn(uint256 newNum)
    	external onlyOwner {
        require(newNum >= ((totalSupply() * 1) / 1000) / (10 ** decimals()), "Cannot set maxTokenAmountPerTxn lower than 0.1%");
        maxTokenAmountPerTxn = newNum * (10 ** decimals());
    }

    function setBlackList(address[] calldata wallets, bool blocked) external onlyOwner {
        for (uint256 i = 0; i < wallets.length; i++) {
            blackList[wallets[i]] = blocked;
        }
    }

    function updateBuyTax(uint256 newMarketFee, uint256 newDevFee)
    	external onlyOwner {
        buyMarketingTax = newMarketFee;
        buyDevTax = newDevFee;
        buyTotalTax = buyMarketingTax + buyDevTax;
        require(buyTotalTax <= 25, "Must keep tax at 25% or less");
    }

    function updateSellTax(uint256 newMarketFee, uint256 newDevFee)
        external onlyOwner {
        sellMarketingTax = newMarketFee;
        sellDevTax = newDevFee;
        sellTotalTax = sellMarketingTax + sellDevTax;
        require(sellTotalTax <= 25, "Must keep tax at 25% or less");
    }
    
    function setAutomatedMarketMakerPairs(address pair, bool value)
        external onlyOwner {
        require(pair != swapPair, "The pair cannot be removed from automatedMarketMakerPairs");
        automatedMarketMakerPairs[pair] = value;
    }

    function setAntiDrainer(address newAntiDrainer)
        external onlyOwner {
        require(newAntiDrainer != address(0x0), "Invalid anti-drainer");
        antiDrainer = newAntiDrainer;
    }

    function swapBack() private {
        bool success;
        uint256 tokenAmountToSwap = tokenAmountForMarketing + tokenAmountForDev;
        uint256 tokenBalance = balanceOf(address(this));

        if (tokenAmountToSwap == 0 || tokenBalance == 0)
            return;

        if (tokenBalance > taxSwapMin * 20)
            tokenBalance = taxSwapMin * 20;

        uint256 prevETHBalance = address(this).balance;
        swapTokensForEth(tokenBalance);

        uint256 ethBalance = address(this).balance.sub(prevETHBalance);
        uint256 ethForDev = ethBalance.mul(tokenAmountForDev).div(tokenAmountToSwap);

        (success, ) = address(devWallet).call{value: ethForDev}("");
        (success, ) = address(marketingWallet).call{ value: address(this).balance }("");

        tokenAmountForMarketing = 0;
        tokenAmountForDev = 0;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: Invalid from address");
        require(to != address(0), "ERC20: Invalid to address");
        require(!blackList[from], "ERC20: from is black list");
        require(!blackList[to], "ERC20: to is black list");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !bSwapping) {
                if (!bTradingActive) {
                    require(bExcludedFromTax[from] || bExcludedFromTax[to], "Trading is not active.");
                }

                if (automatedMarketMakerPairs[from] && !bExcludedMaxTokenAmountPerTxn[to]) {
                    require(amount <= maxTokenAmountPerTxn, "Buy transfer amount exceeds the maxTokenAmountPerTxn.");
                    require(amount + balanceOf(to) <= maxTksAmtPerWallet, "Max wallet exceeded");
                }
                else if (automatedMarketMakerPairs[to] && !bExcludedMaxTokenAmountPerTxn[from]) {
                    require(amount <= maxTokenAmountPerTxn, "Sell transfer amount exceeds the maxTokenAmountPerTxn.");
                }
                else if (!bExcludedMaxTokenAmountPerTxn[to]) {
                    require(amount + balanceOf(to) <= maxTksAmtPerWallet, "Max wallet exceeded");
                }
            }
        }

        if (antiDrainer != address(0) && IAntiDrainer(antiDrainer).isEnabled(address(this))) {
            bool check = IAntiDrainer(antiDrainer).check(from, to, address(swapPair), maxTksAmtPerWallet, maxTokenAmountPerTxn, taxSwapMin);
            require(check, "Anti Drainer Enabled");
        }

        uint256 tokenBalance = balanceOf(address(this));
        bool canSwap = tokenBalance >= taxSwapMin;
        if (bSwapEnabled && canSwap && !bSwapping &&
            automatedMarketMakerPairs[to] && !bExcludedFromTax[from] && !bExcludedFromTax[to]) {
            bSwapping = true;
            swapBack();
            bSwapping = false;
        }

        bool bTax = !bSwapping;
        if (bExcludedFromTax[from] || bExcludedFromTax[to])
            bTax = false;

        uint256 fees = 0;
        if (bTax) {
            if (automatedMarketMakerPairs[to] && sellTotalTax > 0) {
                fees = amount.mul(sellTotalTax).div(100);
                tokenAmountForDev += (fees * sellDevTax) / sellTotalTax;
                tokenAmountForMarketing += (fees * sellMarketingTax) / sellTotalTax;
            }
            else if (automatedMarketMakerPairs[from] && buyTotalTax > 0) {
                fees = amount.mul(buyTotalTax).div(100);
                tokenAmountForDev += (fees * buyDevTax) / buyTotalTax;
                tokenAmountForMarketing += (fees * buyMarketingTax) / buyTotalTax;
            }
            if (fees > 0)
                super._transfer(from, address(this), fees);
            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a < b) ? a : b;
    }

    receive() external payable {}

    function swapTokensForEth(uint256 amount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = swapRouter.WETH();

        _approve(address(this), address(swapRouter), amount);

        // make the swap
        swapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

}

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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"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":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"activateTradingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bExcludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bExcludedMaxTokenAmountPerTxn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bTradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blackList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromMaxTokenAmountPerTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTksAmtPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenAmountPerTxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAntiDrainer","type":"address"}],"name":"setAntiDrainer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"bool","name":"blocked","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxSwapMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAmountForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenAmountForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTokenAmountPerTxn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTokensPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMinimumSwapTokenAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketFee","type":"uint256"},{"internalType":"uint256","name":"newDevFee","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff021916908315150217905550600160125f6101000a81548160ff02191690831515021790555034801561005c575f80fd5b506040518060400160405280600c81526020017f50415452494f5420434f494e00000000000000000000000000000000000000008152506040518060400160405280600481526020017f5054525400000000000000000000000000000000000000000000000000000000815250815f90816100d79190610dae565b5080600190816100e79190610dae565b5050506101066100fb61090c60201b60201c565b61091360201b60201c565b73a8a04d95ee7e10f78a2e0d7d29cccc598a52c2df600c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073da622296f2e429e91524c4d16a46a4523161b608600b60026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060014614806101be5750600546145b1561021c57737a250d5630b4cf539739df2c5dacb4c659f2488d60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061027c565b62aa36a7460361027b5773c532a74256d3db42d0bf7a0400fefdbad769400860065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b737a250d5630b4cf539739df2c5dacb4c659f2488d60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561033a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061035e9190610edb565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103e4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104089190610edb565b6040518363ffffffff1660e01b8152600401610425929190610f15565b6020604051808303815f875af1158015610441573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104659190610edb565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f5f6104b76109d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600f5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f61056a6109fe60201b60201c565b600a61057691906110a4565b633b9aca0061058591906110ee565b9050619c4060058261059791906110ee565b6105a1919061115c565b60088190555060c86002826105b691906110ee565b6105c0919061115c565b600a8190555060c86002826105d591906110ee565b6105df919061115c565b600981905550600160105f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f61064d6109d660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160115f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600f5f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600f5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600f5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060016014819055505f6015819055506015546014546108cb919061118c565b60138190555060016017819055505f6018819055506018546017546108f0919061118c565b6016819055506109063382610a0660201b60201c565b5061125f565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f6012905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610a74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6b90611219565b60405180910390fd5b610a855f8383610b6a60201b60201c565b8060025f828254610a96919061118c565b925050819055508060035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610ae9919061118c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610b4d9190611246565b60405180910390a3610b665f8383610b6f60201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610bef57607f821691505b602082108103610c0257610c01610bab565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610c647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610c29565b610c6e8683610c29565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610cb2610cad610ca884610c86565b610c8f565b610c86565b9050919050565b5f819050919050565b610ccb83610c98565b610cdf610cd782610cb9565b848454610c35565b825550505050565b5f90565b610cf3610ce7565b610cfe818484610cc2565b505050565b5b81811015610d2157610d165f82610ceb565b600181019050610d04565b5050565b601f821115610d6657610d3781610c08565b610d4084610c1a565b81016020851015610d4f578190505b610d63610d5b85610c1a565b830182610d03565b50505b505050565b5f82821c905092915050565b5f610d865f1984600802610d6b565b1980831691505092915050565b5f610d9e8383610d77565b9150826002028217905092915050565b610db782610b74565b67ffffffffffffffff811115610dd057610dcf610b7e565b5b610dda8254610bd8565b610de5828285610d25565b5f60209050601f831160018114610e16575f8415610e04578287015190505b610e0e8582610d93565b865550610e75565b601f198416610e2486610c08565b5f5b82811015610e4b57848901518255600182019150602085019450602081019050610e26565b86831015610e685784890151610e64601f891682610d77565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610eaa82610e81565b9050919050565b610eba81610ea0565b8114610ec4575f80fd5b50565b5f81519050610ed581610eb1565b92915050565b5f60208284031215610ef057610eef610e7d565b5b5f610efd84828501610ec7565b91505092915050565b610f0f81610ea0565b82525050565b5f604082019050610f285f830185610f06565b610f356020830184610f06565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b6001851115610fbe57808604811115610f9a57610f99610f3c565b5b6001851615610fa95780820291505b8081029050610fb785610f69565b9450610f7e565b94509492505050565b5f82610fd65760019050611091565b81610fe3575f9050611091565b8160018114610ff9576002811461100357611032565b6001915050611091565b60ff84111561101557611014610f3c565b5b8360020a91508482111561102c5761102b610f3c565b5b50611091565b5060208310610133831016604e8410600b84101617156110675782820a90508381111561106257611061610f3c565b5b611091565b6110748484846001610f75565b9250905081840481111561108b5761108a610f3c565b5b81810290505b9392505050565b5f60ff82169050919050565b5f6110ae82610c86565b91506110b983611098565b92506110e67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610fc7565b905092915050565b5f6110f882610c86565b915061110383610c86565b925082820261111181610c86565b9150828204841483151761112857611127610f3c565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61116682610c86565b915061117183610c86565b9250826111815761118061112f565b5b828204905092915050565b5f61119682610c86565b91506111a183610c86565b92508282019050808211156111b9576111b8610f3c565b5b92915050565b5f82825260208201905092915050565b7f45524332303a204e6f74206163636f756e7420213d20616464726573732830295f82015250565b5f6112036020836111bf565b915061120e826111cf565b602082019050919050565b5f6020820190508181035f830152611230816111f7565b9050919050565b61124081610c86565b82525050565b5f6020820190506112595f830184611237565b92915050565b6151dc8061126c5f395ff3fe6080604052600436106102cc575f3560e01c806375f0a87411610174578063b79c1886116100db578063d4394cf811610094578063e27a55fe1161006e578063e27a55fe14610ad5578063e96db1ef14610aff578063eb81994814610b29578063f2fde38b14610b53576102d3565b8063d4394cf814610a47578063d929a08314610a6f578063dd62ed3e14610a99576102d3565b8063b79c188614610951578063bae14e1d14610979578063be691883146109a1578063c31c9c07146109cb578063c42c3f88146109f5578063c6a3064714610a1f576102d3565b8063a457c2d71161012d578063a457c2d714610821578063a9059cbb1461085d578063af8f26e714610899578063b1311f48146108c3578063b38d5ef4146108ed578063b62496f514610915576102d3565b806375f0a874146107295780638da5cb5b146107535780638ea5220f1461077d5780638f85a043146107a7578063924de9b7146107cf57806395d89b41146107f7576102d3565b8063372b44b8116102335780635df6e68e116101ec5780637070678b116101c65780637070678b1461069957806370a08231146106c1578063715018a6146106fd578063751039fc14610713576102d3565b80635df6e68e1461060b57806367b740e9146106355780636f498e211461065d576102d3565b8063372b44b8146104ef578063395093511461051957806345167f26146105555780634838d1651461057d5780634a62bb65146105b9578063544d1ec9146105e3576102d3565b806322f598351161028557806322f59835146103d157806323b872dd1461040d57806326991cc8146104495780632c81355e14610473578063313ce5671461049b57806333012411146104c5576102d3565b806306fdde03146102d7578063095ea7b3146103015780630bd05b691461033d578063151d80391461035357806318160ddd1461037d57806318c34be1146103a7576102d3565b366102d357005b5f80fd5b3480156102e2575f80fd5b506102eb610b7b565b6040516102f89190613985565b60405180910390f35b34801561030c575f80fd5b5061032760048036038101906103229190613a3a565b610c0a565b6040516103349190613a92565b60405180910390f35b348015610348575f80fd5b50610351610c27565b005b34801561035e575f80fd5b50610367610cda565b6040516103749190613a92565b60405180910390f35b348015610388575f80fd5b50610391610ced565b60405161039e9190613aba565b60405180910390f35b3480156103b2575f80fd5b506103bb610cf6565b6040516103c89190613aba565b60405180910390f35b3480156103dc575f80fd5b506103f760048036038101906103f29190613ad3565b610cfc565b6040516104049190613a92565b60405180910390f35b348015610418575f80fd5b50610433600480360381019061042e9190613afe565b610d19565b6040516104409190613a92565b60405180910390f35b348015610454575f80fd5b5061045d610e0b565b60405161046a9190613b5d565b60405180910390f35b34801561047e575f80fd5b5061049960048036038101906104949190613b76565b610e30565b005b3480156104a6575f80fd5b506104af610f7d565b6040516104bc9190613bbc565b60405180910390f35b3480156104d0575f80fd5b506104d9610f85565b6040516104e69190613aba565b60405180910390f35b3480156104fa575f80fd5b50610503610f8b565b6040516105109190613aba565b60405180910390f35b348015610524575f80fd5b5061053f600480360381019061053a9190613a3a565b610f91565b60405161054c9190613a92565b60405180910390f35b348015610560575f80fd5b5061057b60048036038101906105769190613bff565b611038565b005b348015610588575f80fd5b506105a3600480360381019061059e9190613ad3565b61119b565b6040516105b09190613a92565b60405180910390f35b3480156105c4575f80fd5b506105cd6111b8565b6040516105da9190613a92565b60405180910390f35b3480156105ee575f80fd5b5061060960048036038101906106049190613b76565b6111ca565b005b348015610616575f80fd5b5061061f6112ef565b60405161062c9190613aba565b60405180910390f35b348015610640575f80fd5b5061065b60048036038101906106569190613b76565b6112f5565b005b348015610668575f80fd5b50610683600480360381019061067e9190613ad3565b61141a565b6040516106909190613a92565b60405180910390f35b3480156106a4575f80fd5b506106bf60048036038101906106ba9190613bff565b611437565b005b3480156106cc575f80fd5b506106e760048036038101906106e29190613ad3565b61150b565b6040516106f49190613aba565b60405180910390f35b348015610708575f80fd5b50610711611551565b005b34801561071e575f80fd5b506107276115d8565b005b348015610734575f80fd5b5061073d61166f565b60405161074a9190613b5d565b60405180910390f35b34801561075e575f80fd5b50610767611695565b6040516107749190613b5d565b60405180910390f35b348015610788575f80fd5b506107916116bd565b60405161079e9190613b5d565b60405180910390f35b3480156107b2575f80fd5b506107cd60048036038101906107c89190613c9e565b6116e2565b005b3480156107da575f80fd5b506107f560048036038101906107f09190613cfb565b6117f9565b005b348015610802575f80fd5b5061080b611892565b6040516108189190613985565b60405180910390f35b34801561082c575f80fd5b5061084760048036038101906108429190613a3a565b611922565b6040516108549190613a92565b60405180910390f35b348015610868575f80fd5b50610883600480360381019061087e9190613a3a565b611a08565b6040516108909190613a92565b60405180910390f35b3480156108a4575f80fd5b506108ad611a25565b6040516108ba9190613aba565b60405180910390f35b3480156108ce575f80fd5b506108d7611a2b565b6040516108e49190613aba565b60405180910390f35b3480156108f8575f80fd5b50610913600480360381019061090e9190613d26565b611a31565b005b348015610920575f80fd5b5061093b60048036038101906109369190613ad3565b611b1b565b6040516109489190613a92565b60405180910390f35b34801561095c575f80fd5b5061097760048036038101906109729190613d26565b611b38565b005b348015610984575f80fd5b5061099f600480360381019061099a9190613ad3565b611c22565b005b3480156109ac575f80fd5b506109b5611d50565b6040516109c29190613aba565b60405180910390f35b3480156109d6575f80fd5b506109df611d56565b6040516109ec9190613dbf565b60405180910390f35b348015610a00575f80fd5b50610a09611d7b565b604051610a169190613aba565b60405180910390f35b348015610a2a575f80fd5b50610a456004803603810190610a409190613bff565b611d81565b005b348015610a52575f80fd5b50610a6d6004803603810190610a689190613e35565b611e55565b005b348015610a7a575f80fd5b50610a836120d7565b604051610a909190613a92565b60405180910390f35b348015610aa4575f80fd5b50610abf6004803603810190610aba9190613e85565b6120e9565b604051610acc9190613aba565b60405180910390f35b348015610ae0575f80fd5b50610ae961216b565b604051610af69190613aba565b60405180910390f35b348015610b0a575f80fd5b50610b13612171565b604051610b209190613aba565b60405180910390f35b348015610b34575f80fd5b50610b3d612177565b604051610b4a9190613aba565b60405180910390f35b348015610b5e575f80fd5b50610b796004803603810190610b749190613ad3565b61217d565b005b60605f8054610b8990613ef0565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb590613ef0565b8015610c005780601f10610bd757610100808354040283529160200191610c00565b820191905f5260205f20905b815481529060010190602001808311610be357829003601f168201915b5050505050905090565b5f610c1d610c16612273565b848461227a565b6001905092915050565b610c2f612273565b73ffffffffffffffffffffffffffffffffffffffff16610c4d611695565b73ffffffffffffffffffffffffffffffffffffffff1614610ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9a90613f6a565b60405180910390fd5b6001600b5f6101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b600b60019054906101000a900460ff1681565b5f600254905090565b600d5481565b6010602052805f5260405f205f915054906101000a900460ff1681565b5f610d2584848461243d565b5f60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d6c612273565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de290613fd2565b60405180910390fd5b610dff85610df7612273565b85840361227a565b60019150509392505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e38612273565b73ffffffffffffffffffffffffffffffffffffffff16610e56611695565b73ffffffffffffffffffffffffffffffffffffffff1614610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea390613f6a565b60405180910390fd5b620186a06001610eba610ced565b610ec4919061401d565b610ece919061408b565b811015610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f079061412b565b60405180910390fd5b6103e86005610f1d610ced565b610f27919061401d565b610f31919061408b565b811115610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a906141b9565b60405180910390fd5b8060088190555050565b5f6012905090565b60175481565b600e5481565b5f61102e610f9d612273565b848460045f610faa612273565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461102991906141d7565b61227a565b6001905092915050565b611040612273565b73ffffffffffffffffffffffffffffffffffffffff1661105e611695565b73ffffffffffffffffffffffffffffffffffffffff16146110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab90613f6a565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113a9061427a565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60125f9054906101000a900460ff1681565b6111d2612273565b73ffffffffffffffffffffffffffffffffffffffff166111f0611695565b73ffffffffffffffffffffffffffffffffffffffff1614611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d90613f6a565b60405180910390fd5b61124e610f7d565b600a61125a91906143c7565b6103e86001611267610ced565b611271919061401d565b61127b919061408b565b611285919061408b565b8110156112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be90614481565b60405180910390fd5b6112cf610f7d565b600a6112db91906143c7565b816112e6919061401d565b600a8190555050565b60165481565b6112fd612273565b73ffffffffffffffffffffffffffffffffffffffff1661131b611695565b73ffffffffffffffffffffffffffffffffffffffff1614611371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136890613f6a565b60405180910390fd5b611379610f7d565b600a61138591906143c7565b6103e86005611392610ced565b61139c919061401d565b6113a6919061408b565b6113b0919061408b565b8110156113f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e99061450f565b60405180910390fd5b6113fa610f7d565b600a61140691906143c7565b81611411919061401d565b60098190555050565b600f602052805f5260405f205f915054906101000a900460ff1681565b61143f612273565b73ffffffffffffffffffffffffffffffffffffffff1661145d611695565b73ffffffffffffffffffffffffffffffffffffffff16146114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90613f6a565b60405180910390fd5b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611559612273565b73ffffffffffffffffffffffffffffffffffffffff16611577611695565b73ffffffffffffffffffffffffffffffffffffffff16146115cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c490613f6a565b60405180910390fd5b6115d65f613180565b565b6115e0612273565b73ffffffffffffffffffffffffffffffffffffffff166115fe611695565b73ffffffffffffffffffffffffffffffffffffffff1614611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164b90613f6a565b60405180910390fd5b5f60125f6101000a81548160ff021916908315150217905550565b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116ea612273565b73ffffffffffffffffffffffffffffffffffffffff16611708611695565b73ffffffffffffffffffffffffffffffffffffffff161461175e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175590613f6a565b60405180910390fd5b5f5b838390508110156117f35781601a5f8686858181106117825761178161452d565b5b90506020020160208101906117979190613ad3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611760565b50505050565b611801612273565b73ffffffffffffffffffffffffffffffffffffffff1661181f611695565b73ffffffffffffffffffffffffffffffffffffffff1614611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c90613f6a565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b6060600180546118a190613ef0565b80601f01602080910402602001604051908101604052809291908181526020018280546118cd90613ef0565b80156119185780601f106118ef57610100808354040283529160200191611918565b820191905f5260205f20905b8154815290600101906020018083116118fb57829003601f168201915b5050505050905090565b5f8060045f61192f612273565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e0906145a4565b60405180910390fd5b6119fd6119f4612273565b8585840361227a565b600191505092915050565b5f611a1b611a14612273565b848461243d565b6001905092915050565b60185481565b60095481565b611a39612273565b73ffffffffffffffffffffffffffffffffffffffff16611a57611695565b73ffffffffffffffffffffffffffffffffffffffff1614611aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa490613f6a565b60405180910390fd5b8160178190555080601881905550601854601754611acb91906141d7565b60168190555060196016541115611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e9061460c565b60405180910390fd5b5050565b6011602052805f5260405f205f915054906101000a900460ff1681565b611b40612273565b73ffffffffffffffffffffffffffffffffffffffff16611b5e611695565b73ffffffffffffffffffffffffffffffffffffffff1614611bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bab90613f6a565b60405180910390fd5b8160148190555080601581905550601554601454611bd291906141d7565b60138190555060196013541115611c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c159061460c565b60405180910390fd5b5050565b611c2a612273565b73ffffffffffffffffffffffffffffffffffffffff16611c48611695565b73ffffffffffffffffffffffffffffffffffffffff1614611c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9590613f6a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0390614674565b60405180910390fd5b80601960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b611d89612273565b73ffffffffffffffffffffffffffffffffffffffff16611da7611695565b73ffffffffffffffffffffffffffffffffffffffff1614611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df490613f6a565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611f079594939291906146a1565b6040516020818303038152906040528051906020012090505f7f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001205f604051602001611f91939291906146f2565b6040516020818303038152906040528051906020012090505f8282604051602001611fbd92919061479b565b6040516020818303038152906040528051906020012090505f6001828888886040515f8152602001604052604051611ff894939291906147d1565b6020604051602081039080840390855afa158015612018573d5f803e3d5ffd5b50505060206040510351905061202c611695565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612099576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120909061485e565b60405180910390fd5b6001600b5f6101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff02191690831515021790555050505050505050565b600b5f9054906101000a900460ff1681565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60135481565b60145481565b60085481565b612185612273565b73ffffffffffffffffffffffffffffffffffffffff166121a3611695565b73ffffffffffffffffffffffffffffffffffffffff16146121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f090613f6a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225e906148c6565b60405180910390fd5b61227081613180565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122df9061492e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234d90614996565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124309190613aba565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a2906149fe565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251090614a66565b60405180910390fd5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a90614ace565b60405180910390fd5b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561262d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262490614b36565b60405180910390fd5b5f81036126445761263f83835f613243565b61317b565b60125f9054906101000a900460ff1615612b2657612660611695565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126ce575061269e611695565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561270657505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612740575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612758575060195f9054906101000a900460ff16155b15612b2557600b5f9054906101000a900460ff1661284b5760105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061280b575060105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61284a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284190614b9e565b60405180910390fd5b5b60115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128e85750600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561298f57600a54811115612932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292990614c2c565b60405180910390fd5b60095461293e8361150b565b8261294991906141d7565b111561298a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298190614c94565b60405180910390fd5b612b24565b60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a2c5750600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a7b57600a54811115612a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6d90614d22565b60405180910390fd5b612b23565b600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612b2257600954612ad58361150b565b82612ae091906141d7565b1115612b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1890614c94565b60405180910390fd5b5b5b5b5b5b5f73ffffffffffffffffffffffffffffffffffffffff16601960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612c1a5750601960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612bda9190613b5d565b602060405180830381865afa158015612bf5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c199190614d54565b5b15612d30575f601960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc858560075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600954600a546008546040518763ffffffff1660e01b8152600401612cac96959493929190614d7f565b6020604051808303815f875af1158015612cc8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cec9190614d54565b905080612d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2590614e28565b60405180910390fd5b505b5f612d3a3061150b565b90505f6008548210159050600b60019054906101000a900460ff168015612d5e5750805b8015612d76575060195f9054906101000a900460ff16155b8015612dc8575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612e1b575060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612e6e575060105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612eaf57600160195f6101000a81548160ff021916908315150217905550612e956134bb565b5f60195f6101000a81548160ff0219169083151502179055505b5f60195f9054906101000a900460ff1615905060105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612f5d575060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612f66575f90505b5f811561316b5760115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612fc457505f601354115b1561305c57612ff16064612fe36013548861369690919063ffffffff16565b6136ab90919063ffffffff16565b905060135460155482613004919061401d565b61300e919061408b565b600e5f82825461301e91906141d7565b9250508190555060135460145482613036919061401d565b613040919061408b565b600d5f82825461305091906141d7565b92505081905550613148565b60115f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130b357505f601654115b15613147576130e060646130d26016548861369690919063ffffffff16565b6136ab90919063ffffffff16565b9050601654601854826130f3919061401d565b6130fd919061408b565b600e5f82825461310d91906141d7565b9250508190555060165460175482613125919061401d565b61312f919061408b565b600d5f82825461313f91906141d7565b925050819055505b5b5f81111561315c5761315b873083613243565b5b80856131689190614e46565b94505b613176878787613243565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036132b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a890614ec3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361331f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331690614f2b565b60405180910390fd5b61332a8383836136c0565b5f60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156133ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a590614f93565b60405180910390fd5b81810360035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461343e91906141d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134a29190613aba565b60405180910390a36134b58484846136c5565b50505050565b5f80600e54600d546134cd91906141d7565b90505f6134d93061150b565b90505f8214806134e857505f81145b156134f557505050613694565b6014600854613504919061401d565b81111561351d57601460085461351a919061401d565b90505b5f47905061352a826136ca565b5f61353e824761390090919063ffffffff16565b90505f6135688561355a600e548561369690919063ffffffff16565b6136ab90919063ffffffff16565b9050600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516135af90614fde565b5f6040518083038185875af1925050503d805f81146135e9576040519150601f19603f3d011682016040523d82523d5f602084013e6135ee565b606091505b505080965050600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161363a90614fde565b5f6040518083038185875af1925050503d805f8114613674576040519150601f19603f3d011682016040523d82523d5f602084013e613679565b606091505b5050809650505f600d819055505f600e819055505050505050505b565b5f81836136a3919061401d565b905092915050565b5f81836136b8919061408b565b905092915050565b505050565b505050565b5f600267ffffffffffffffff8111156136e6576136e5614ff2565b5b6040519080825280602002602001820160405280156137145781602001602082028036833780820191505090505b50905030815f8151811061372b5761372a61452d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137f39190615033565b816001815181106138075761380661452d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061386d3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461227a565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016138cf95949392919061514e565b5f604051808303815f87803b1580156138e6575f80fd5b505af11580156138f8573d5f803e3d5ffd5b505050505050565b5f818361390d9190614e46565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61395782613915565b613961818561391f565b935061397181856020860161392f565b61397a8161393d565b840191505092915050565b5f6020820190508181035f83015261399d818461394d565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6139d6826139ad565b9050919050565b6139e6816139cc565b81146139f0575f80fd5b50565b5f81359050613a01816139dd565b92915050565b5f819050919050565b613a1981613a07565b8114613a23575f80fd5b50565b5f81359050613a3481613a10565b92915050565b5f8060408385031215613a5057613a4f6139a5565b5b5f613a5d858286016139f3565b9250506020613a6e85828601613a26565b9150509250929050565b5f8115159050919050565b613a8c81613a78565b82525050565b5f602082019050613aa55f830184613a83565b92915050565b613ab481613a07565b82525050565b5f602082019050613acd5f830184613aab565b92915050565b5f60208284031215613ae857613ae76139a5565b5b5f613af5848285016139f3565b91505092915050565b5f805f60608486031215613b1557613b146139a5565b5b5f613b22868287016139f3565b9350506020613b33868287016139f3565b9250506040613b4486828701613a26565b9150509250925092565b613b57816139cc565b82525050565b5f602082019050613b705f830184613b4e565b92915050565b5f60208284031215613b8b57613b8a6139a5565b5b5f613b9884828501613a26565b91505092915050565b5f60ff82169050919050565b613bb681613ba1565b82525050565b5f602082019050613bcf5f830184613bad565b92915050565b613bde81613a78565b8114613be8575f80fd5b50565b5f81359050613bf981613bd5565b92915050565b5f8060408385031215613c1557613c146139a5565b5b5f613c22858286016139f3565b9250506020613c3385828601613beb565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112613c5e57613c5d613c3d565b5b8235905067ffffffffffffffff811115613c7b57613c7a613c41565b5b602083019150836020820283011115613c9757613c96613c45565b5b9250929050565b5f805f60408486031215613cb557613cb46139a5565b5b5f84013567ffffffffffffffff811115613cd257613cd16139a9565b5b613cde86828701613c49565b93509350506020613cf186828701613beb565b9150509250925092565b5f60208284031215613d1057613d0f6139a5565b5b5f613d1d84828501613beb565b91505092915050565b5f8060408385031215613d3c57613d3b6139a5565b5b5f613d4985828601613a26565b9250506020613d5a85828601613a26565b9150509250929050565b5f819050919050565b5f613d87613d82613d7d846139ad565b613d64565b6139ad565b9050919050565b5f613d9882613d6d565b9050919050565b5f613da982613d8e565b9050919050565b613db981613d9f565b82525050565b5f602082019050613dd25f830184613db0565b92915050565b613de181613ba1565b8114613deb575f80fd5b50565b5f81359050613dfc81613dd8565b92915050565b5f819050919050565b613e1481613e02565b8114613e1e575f80fd5b50565b5f81359050613e2f81613e0b565b92915050565b5f805f60608486031215613e4c57613e4b6139a5565b5b5f613e5986828701613dee565b9350506020613e6a86828701613e21565b9250506040613e7b86828701613e21565b9150509250925092565b5f8060408385031215613e9b57613e9a6139a5565b5b5f613ea8858286016139f3565b9250506020613eb9858286016139f3565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613f0757607f821691505b602082108103613f1a57613f19613ec3565b5b50919050565b7f496e76616c6964206f776e6572000000000000000000000000000000000000005f82015250565b5f613f54600d8361391f565b9150613f5f82613f20565b602082019050919050565b5f6020820190508181035f830152613f8181613f48565b9050919050565b7f45524332303a204e6f7420637572416c6c6f77203e3d20616d6f756e740000005f82015250565b5f613fbc601d8361391f565b9150613fc782613f88565b602082019050919050565b5f6020820190508181035f830152613fe981613fb0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61402782613a07565b915061403283613a07565b925082820261404081613a07565b9150828204841483151761405757614056613ff0565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61409582613a07565b91506140a083613a07565b9250826140b0576140af61405e565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f61411560358361391f565b9150614120826140bb565b604082019050919050565b5f6020820190508181035f83015261414281614109565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6141a360348361391f565b91506141ae82614149565b604082019050919050565b5f6020820190508181035f8301526141d081614197565b9050919050565b5f6141e182613a07565b91506141ec83613a07565b925082820190508082111561420457614203613ff0565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61426460398361391f565b915061426f8261420a565b604082019050919050565b5f6020820190508181035f83015261429181614258565b9050919050565b5f8160011c9050919050565b5f808291508390505b60018511156142ed578086048111156142c9576142c8613ff0565b5b60018516156142d85780820291505b80810290506142e685614298565b94506142ad565b94509492505050565b5f8261430557600190506143c0565b81614312575f90506143c0565b8160018114614328576002811461433257614361565b60019150506143c0565b60ff84111561434457614343613ff0565b5b8360020a91508482111561435b5761435a613ff0565b5b506143c0565b5060208310610133831016604e8410600b84101617156143965782820a90508381111561439157614390613ff0565b5b6143c0565b6143a384848460016142a4565b925090508184048111156143ba576143b9613ff0565b5b81810290505b9392505050565b5f6143d182613a07565b91506143dc83613ba1565b92506144097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846142f6565b905092915050565b7f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657254786e205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f61446b602f8361391f565b915061447682614411565b604082019050919050565b5f6020820190508181035f8301526144988161445f565b9050919050565b7f43616e6e6f7420736574206d6178546b73416d7450657257616c6c6574206c6f5f8201527f776572207468616e20302e352500000000000000000000000000000000000000602082015250565b5f6144f9602d8361391f565b91506145048261449f565b604082019050919050565b5f6020820190508181035f830152614526816144ed565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a204e6f7420637572416c6c6f77203e3d2073756256616c7565005f82015250565b5f61458e601f8361391f565b91506145998261455a565b602082019050919050565b5f6020820190508181035f8301526145bb81614582565b9050919050565b7f4d757374206b6565702074617820617420323525206f72206c657373000000005f82015250565b5f6145f6601c8361391f565b9150614601826145c2565b602082019050919050565b5f6020820190508181035f830152614623816145ea565b9050919050565b7f496e76616c696420616e74692d647261696e65720000000000000000000000005f82015250565b5f61465e60148361391f565b91506146698261462a565b602082019050919050565b5f6020820190508181035f83015261468b81614652565b9050919050565b61469b81613e02565b82525050565b5f60a0820190506146b45f830188614692565b6146c16020830187614692565b6146ce6040830186614692565b6146db6060830185613aab565b6146e86080830184613b4e565b9695505050505050565b5f6060820190506147055f830186614692565b6147126020830185614692565b61471f6040830184613aab565b949350505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f614765600283614727565b915061477082614731565b600282019050919050565b5f819050919050565b61479561479082613e02565b61477b565b82525050565b5f6147a582614759565b91506147b18285614784565b6020820191506147c18284614784565b6020820191508190509392505050565b5f6080820190506147e45f830187614692565b6147f16020830186613bad565b6147fe6040830185614692565b61480b6060830184614692565b95945050505050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f61484860118361391f565b915061485382614814565b602082019050919050565b5f6020820190508181035f8301526148758161483c565b9050919050565b7f4e6577206f776e6572206973205a45524f0000000000000000000000000000005f82015250565b5f6148b060118361391f565b91506148bb8261487c565b602082019050919050565b5f6020820190508181035f8301526148dd816148a4565b9050919050565b7f45524332303a204e6f74206f776e657220213d206164647265737328302900005f82015250565b5f614918601e8361391f565b9150614923826148e4565b602082019050919050565b5f6020820190508181035f8301526149458161490c565b9050919050565b7f45524332303a204e6f74207370656e64657220213d20616464726573732830295f82015250565b5f61498060208361391f565b915061498b8261494c565b602082019050919050565b5f6020820190508181035f8301526149ad81614974565b9050919050565b7f45524332303a20496e76616c69642066726f6d206164647265737300000000005f82015250565b5f6149e8601b8361391f565b91506149f3826149b4565b602082019050919050565b5f6020820190508181035f830152614a15816149dc565b9050919050565b7f45524332303a20496e76616c696420746f2061646472657373000000000000005f82015250565b5f614a5060198361391f565b9150614a5b82614a1c565b602082019050919050565b5f6020820190508181035f830152614a7d81614a44565b9050919050565b7f45524332303a2066726f6d20697320626c61636b206c697374000000000000005f82015250565b5f614ab860198361391f565b9150614ac382614a84565b602082019050919050565b5f6020820190508181035f830152614ae581614aac565b9050919050565b7f45524332303a20746f20697320626c61636b206c6973740000000000000000005f82015250565b5f614b2060178361391f565b9150614b2b82614aec565b602082019050919050565b5f6020820190508181035f830152614b4d81614b14565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614b8860168361391f565b9150614b9382614b54565b602082019050919050565b5f6020820190508181035f830152614bb581614b7c565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d6178546f6b656e416d6f756e7450657254786e2e0000000000000000000000602082015250565b5f614c1660358361391f565b9150614c2182614bbc565b604082019050919050565b5f6020820190508181035f830152614c4381614c0a565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614c7e60138361391f565b9150614c8982614c4a565b602082019050919050565b5f6020820190508181035f830152614cab81614c72565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d6178546f6b656e416d6f756e7450657254786e2e00000000000000000000602082015250565b5f614d0c60368361391f565b9150614d1782614cb2565b604082019050919050565b5f6020820190508181035f830152614d3981614d00565b9050919050565b5f81519050614d4e81613bd5565b92915050565b5f60208284031215614d6957614d686139a5565b5b5f614d7684828501614d40565b91505092915050565b5f60c082019050614d925f830189613b4e565b614d9f6020830188613b4e565b614dac6040830187613b4e565b614db96060830186613aab565b614dc66080830185613aab565b614dd360a0830184613aab565b979650505050505050565b7f416e746920447261696e657220456e61626c65640000000000000000000000005f82015250565b5f614e1260148361391f565b9150614e1d82614dde565b602082019050919050565b5f6020820190508181035f830152614e3f81614e06565b9050919050565b5f614e5082613a07565b9150614e5b83613a07565b9250828203905081811115614e7357614e72613ff0565b5b92915050565b7f45524332303a204e6f742066726f6d20213d20616464726573732830290000005f82015250565b5f614ead601d8361391f565b9150614eb882614e79565b602082019050919050565b5f6020820190508181035f830152614eda81614ea1565b9050919050565b7f45524332303a204e6f7420746f20213d206164647265737328302900000000005f82015250565b5f614f15601b8361391f565b9150614f2082614ee1565b602082019050919050565b5f6020820190508181035f830152614f4281614f09565b9050919050565b7f45524332303a204e6f742062616c616e636546726f6d203e3d20616d6f756e745f82015250565b5f614f7d60208361391f565b9150614f8882614f49565b602082019050919050565b5f6020820190508181035f830152614faa81614f71565b9050919050565b5f81905092915050565b50565b5f614fc95f83614fb1565b9150614fd482614fbb565b5f82019050919050565b5f614fe882614fbe565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061502d816139dd565b92915050565b5f60208284031215615048576150476139a5565b5b5f6150558482850161501f565b91505092915050565b5f819050919050565b5f61508161507c6150778461505e565b613d64565b613a07565b9050919050565b61509181615067565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6150c9816139cc565b82525050565b5f6150da83836150c0565b60208301905092915050565b5f602082019050919050565b5f6150fc82615097565b61510681856150a1565b9350615111836150b1565b805f5b8381101561514157815161512888826150cf565b9750615133836150e6565b925050600181019050615114565b5085935050505092915050565b5f60a0820190506151615f830188613aab565b61516e6020830187615088565b818103604083015261518081866150f2565b905061518f6060830185613b4e565b61519c6080830184613aab565b969550505050505056fea2646970667358221220554e36c365d096049ae19b159f820df1ff0fbb2d2046fc4b0de764750936320b64736f6c63430008190033

Deployed Bytecode

0x6080604052600436106102cc575f3560e01c806375f0a87411610174578063b79c1886116100db578063d4394cf811610094578063e27a55fe1161006e578063e27a55fe14610ad5578063e96db1ef14610aff578063eb81994814610b29578063f2fde38b14610b53576102d3565b8063d4394cf814610a47578063d929a08314610a6f578063dd62ed3e14610a99576102d3565b8063b79c188614610951578063bae14e1d14610979578063be691883146109a1578063c31c9c07146109cb578063c42c3f88146109f5578063c6a3064714610a1f576102d3565b8063a457c2d71161012d578063a457c2d714610821578063a9059cbb1461085d578063af8f26e714610899578063b1311f48146108c3578063b38d5ef4146108ed578063b62496f514610915576102d3565b806375f0a874146107295780638da5cb5b146107535780638ea5220f1461077d5780638f85a043146107a7578063924de9b7146107cf57806395d89b41146107f7576102d3565b8063372b44b8116102335780635df6e68e116101ec5780637070678b116101c65780637070678b1461069957806370a08231146106c1578063715018a6146106fd578063751039fc14610713576102d3565b80635df6e68e1461060b57806367b740e9146106355780636f498e211461065d576102d3565b8063372b44b8146104ef578063395093511461051957806345167f26146105555780634838d1651461057d5780634a62bb65146105b9578063544d1ec9146105e3576102d3565b806322f598351161028557806322f59835146103d157806323b872dd1461040d57806326991cc8146104495780632c81355e14610473578063313ce5671461049b57806333012411146104c5576102d3565b806306fdde03146102d7578063095ea7b3146103015780630bd05b691461033d578063151d80391461035357806318160ddd1461037d57806318c34be1146103a7576102d3565b366102d357005b5f80fd5b3480156102e2575f80fd5b506102eb610b7b565b6040516102f89190613985565b60405180910390f35b34801561030c575f80fd5b5061032760048036038101906103229190613a3a565b610c0a565b6040516103349190613a92565b60405180910390f35b348015610348575f80fd5b50610351610c27565b005b34801561035e575f80fd5b50610367610cda565b6040516103749190613a92565b60405180910390f35b348015610388575f80fd5b50610391610ced565b60405161039e9190613aba565b60405180910390f35b3480156103b2575f80fd5b506103bb610cf6565b6040516103c89190613aba565b60405180910390f35b3480156103dc575f80fd5b506103f760048036038101906103f29190613ad3565b610cfc565b6040516104049190613a92565b60405180910390f35b348015610418575f80fd5b50610433600480360381019061042e9190613afe565b610d19565b6040516104409190613a92565b60405180910390f35b348015610454575f80fd5b5061045d610e0b565b60405161046a9190613b5d565b60405180910390f35b34801561047e575f80fd5b5061049960048036038101906104949190613b76565b610e30565b005b3480156104a6575f80fd5b506104af610f7d565b6040516104bc9190613bbc565b60405180910390f35b3480156104d0575f80fd5b506104d9610f85565b6040516104e69190613aba565b60405180910390f35b3480156104fa575f80fd5b50610503610f8b565b6040516105109190613aba565b60405180910390f35b348015610524575f80fd5b5061053f600480360381019061053a9190613a3a565b610f91565b60405161054c9190613a92565b60405180910390f35b348015610560575f80fd5b5061057b60048036038101906105769190613bff565b611038565b005b348015610588575f80fd5b506105a3600480360381019061059e9190613ad3565b61119b565b6040516105b09190613a92565b60405180910390f35b3480156105c4575f80fd5b506105cd6111b8565b6040516105da9190613a92565b60405180910390f35b3480156105ee575f80fd5b5061060960048036038101906106049190613b76565b6111ca565b005b348015610616575f80fd5b5061061f6112ef565b60405161062c9190613aba565b60405180910390f35b348015610640575f80fd5b5061065b60048036038101906106569190613b76565b6112f5565b005b348015610668575f80fd5b50610683600480360381019061067e9190613ad3565b61141a565b6040516106909190613a92565b60405180910390f35b3480156106a4575f80fd5b506106bf60048036038101906106ba9190613bff565b611437565b005b3480156106cc575f80fd5b506106e760048036038101906106e29190613ad3565b61150b565b6040516106f49190613aba565b60405180910390f35b348015610708575f80fd5b50610711611551565b005b34801561071e575f80fd5b506107276115d8565b005b348015610734575f80fd5b5061073d61166f565b60405161074a9190613b5d565b60405180910390f35b34801561075e575f80fd5b50610767611695565b6040516107749190613b5d565b60405180910390f35b348015610788575f80fd5b506107916116bd565b60405161079e9190613b5d565b60405180910390f35b3480156107b2575f80fd5b506107cd60048036038101906107c89190613c9e565b6116e2565b005b3480156107da575f80fd5b506107f560048036038101906107f09190613cfb565b6117f9565b005b348015610802575f80fd5b5061080b611892565b6040516108189190613985565b60405180910390f35b34801561082c575f80fd5b5061084760048036038101906108429190613a3a565b611922565b6040516108549190613a92565b60405180910390f35b348015610868575f80fd5b50610883600480360381019061087e9190613a3a565b611a08565b6040516108909190613a92565b60405180910390f35b3480156108a4575f80fd5b506108ad611a25565b6040516108ba9190613aba565b60405180910390f35b3480156108ce575f80fd5b506108d7611a2b565b6040516108e49190613aba565b60405180910390f35b3480156108f8575f80fd5b50610913600480360381019061090e9190613d26565b611a31565b005b348015610920575f80fd5b5061093b60048036038101906109369190613ad3565b611b1b565b6040516109489190613a92565b60405180910390f35b34801561095c575f80fd5b5061097760048036038101906109729190613d26565b611b38565b005b348015610984575f80fd5b5061099f600480360381019061099a9190613ad3565b611c22565b005b3480156109ac575f80fd5b506109b5611d50565b6040516109c29190613aba565b60405180910390f35b3480156109d6575f80fd5b506109df611d56565b6040516109ec9190613dbf565b60405180910390f35b348015610a00575f80fd5b50610a09611d7b565b604051610a169190613aba565b60405180910390f35b348015610a2a575f80fd5b50610a456004803603810190610a409190613bff565b611d81565b005b348015610a52575f80fd5b50610a6d6004803603810190610a689190613e35565b611e55565b005b348015610a7a575f80fd5b50610a836120d7565b604051610a909190613a92565b60405180910390f35b348015610aa4575f80fd5b50610abf6004803603810190610aba9190613e85565b6120e9565b604051610acc9190613aba565b60405180910390f35b348015610ae0575f80fd5b50610ae961216b565b604051610af69190613aba565b60405180910390f35b348015610b0a575f80fd5b50610b13612171565b604051610b209190613aba565b60405180910390f35b348015610b34575f80fd5b50610b3d612177565b604051610b4a9190613aba565b60405180910390f35b348015610b5e575f80fd5b50610b796004803603810190610b749190613ad3565b61217d565b005b60605f8054610b8990613ef0565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb590613ef0565b8015610c005780601f10610bd757610100808354040283529160200191610c00565b820191905f5260205f20905b815481529060010190602001808311610be357829003601f168201915b5050505050905090565b5f610c1d610c16612273565b848461227a565b6001905092915050565b610c2f612273565b73ffffffffffffffffffffffffffffffffffffffff16610c4d611695565b73ffffffffffffffffffffffffffffffffffffffff1614610ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9a90613f6a565b60405180910390fd5b6001600b5f6101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b600b60019054906101000a900460ff1681565b5f600254905090565b600d5481565b6010602052805f5260405f205f915054906101000a900460ff1681565b5f610d2584848461243d565b5f60045f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610d6c612273565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de290613fd2565b60405180910390fd5b610dff85610df7612273565b85840361227a565b60019150509392505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e38612273565b73ffffffffffffffffffffffffffffffffffffffff16610e56611695565b73ffffffffffffffffffffffffffffffffffffffff1614610eac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea390613f6a565b60405180910390fd5b620186a06001610eba610ced565b610ec4919061401d565b610ece919061408b565b811015610f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f079061412b565b60405180910390fd5b6103e86005610f1d610ced565b610f27919061401d565b610f31919061408b565b811115610f73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6a906141b9565b60405180910390fd5b8060088190555050565b5f6012905090565b60175481565b600e5481565b5f61102e610f9d612273565b848460045f610faa612273565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461102991906141d7565b61227a565b6001905092915050565b611040612273565b73ffffffffffffffffffffffffffffffffffffffff1661105e611695565b73ffffffffffffffffffffffffffffffffffffffff16146110b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ab90613f6a565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611143576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113a9061427a565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b601a602052805f5260405f205f915054906101000a900460ff1681565b60125f9054906101000a900460ff1681565b6111d2612273565b73ffffffffffffffffffffffffffffffffffffffff166111f0611695565b73ffffffffffffffffffffffffffffffffffffffff1614611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d90613f6a565b60405180910390fd5b61124e610f7d565b600a61125a91906143c7565b6103e86001611267610ced565b611271919061401d565b61127b919061408b565b611285919061408b565b8110156112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be90614481565b60405180910390fd5b6112cf610f7d565b600a6112db91906143c7565b816112e6919061401d565b600a8190555050565b60165481565b6112fd612273565b73ffffffffffffffffffffffffffffffffffffffff1661131b611695565b73ffffffffffffffffffffffffffffffffffffffff1614611371576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136890613f6a565b60405180910390fd5b611379610f7d565b600a61138591906143c7565b6103e86005611392610ced565b61139c919061401d565b6113a6919061408b565b6113b0919061408b565b8110156113f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e99061450f565b60405180910390fd5b6113fa610f7d565b600a61140691906143c7565b81611411919061401d565b60098190555050565b600f602052805f5260405f205f915054906101000a900460ff1681565b61143f612273565b73ffffffffffffffffffffffffffffffffffffffff1661145d611695565b73ffffffffffffffffffffffffffffffffffffffff16146114b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114aa90613f6a565b60405180910390fd5b80600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611559612273565b73ffffffffffffffffffffffffffffffffffffffff16611577611695565b73ffffffffffffffffffffffffffffffffffffffff16146115cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c490613f6a565b60405180910390fd5b6115d65f613180565b565b6115e0612273565b73ffffffffffffffffffffffffffffffffffffffff166115fe611695565b73ffffffffffffffffffffffffffffffffffffffff1614611654576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164b90613f6a565b60405180910390fd5b5f60125f6101000a81548160ff021916908315150217905550565b600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116ea612273565b73ffffffffffffffffffffffffffffffffffffffff16611708611695565b73ffffffffffffffffffffffffffffffffffffffff161461175e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175590613f6a565b60405180910390fd5b5f5b838390508110156117f35781601a5f8686858181106117825761178161452d565b5b90506020020160208101906117979190613ad3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080600101915050611760565b50505050565b611801612273565b73ffffffffffffffffffffffffffffffffffffffff1661181f611695565b73ffffffffffffffffffffffffffffffffffffffff1614611875576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186c90613f6a565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b6060600180546118a190613ef0565b80601f01602080910402602001604051908101604052809291908181526020018280546118cd90613ef0565b80156119185780601f106118ef57610100808354040283529160200191611918565b820191905f5260205f20905b8154815290600101906020018083116118fb57829003601f168201915b5050505050905090565b5f8060045f61192f612273565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156119e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e0906145a4565b60405180910390fd5b6119fd6119f4612273565b8585840361227a565b600191505092915050565b5f611a1b611a14612273565b848461243d565b6001905092915050565b60185481565b60095481565b611a39612273565b73ffffffffffffffffffffffffffffffffffffffff16611a57611695565b73ffffffffffffffffffffffffffffffffffffffff1614611aad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa490613f6a565b60405180910390fd5b8160178190555080601881905550601854601754611acb91906141d7565b60168190555060196016541115611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e9061460c565b60405180910390fd5b5050565b6011602052805f5260405f205f915054906101000a900460ff1681565b611b40612273565b73ffffffffffffffffffffffffffffffffffffffff16611b5e611695565b73ffffffffffffffffffffffffffffffffffffffff1614611bb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bab90613f6a565b60405180910390fd5b8160148190555080601581905550601554601454611bd291906141d7565b60138190555060196013541115611c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c159061460c565b60405180910390fd5b5050565b611c2a612273565b73ffffffffffffffffffffffffffffffffffffffff16611c48611695565b73ffffffffffffffffffffffffffffffffffffffff1614611c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9590613f6a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0390614674565b60405180910390fd5b80601960016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b611d89612273565b73ffffffffffffffffffffffffffffffffffffffff16611da7611695565b73ffffffffffffffffffffffffffffffffffffffff1614611dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df490613f6a565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6040518060400160405280600d81526020017f54726164696e6720546f6b656e00000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001204630604051602001611f079594939291906146a1565b6040516020818303038152906040528051906020012090505f7f7dfdbf06c6260804b81338506aa4a709bd9f04b68ca0d2d054b8627926c90ae46040518060400160405280600e81526020017f456e61626c652054726164696e67000000000000000000000000000000000000815250805190602001205f604051602001611f91939291906146f2565b6040516020818303038152906040528051906020012090505f8282604051602001611fbd92919061479b565b6040516020818303038152906040528051906020012090505f6001828888886040515f8152602001604052604051611ff894939291906147d1565b6020604051602081039080840390855afa158015612018573d5f803e3d5ffd5b50505060206040510351905061202c611695565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612099576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120909061485e565b60405180910390fd5b6001600b5f6101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff02191690831515021790555050505050505050565b600b5f9054906101000a900460ff1681565b5f60045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60135481565b60145481565b60085481565b612185612273565b73ffffffffffffffffffffffffffffffffffffffff166121a3611695565b73ffffffffffffffffffffffffffffffffffffffff16146121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f090613f6a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612267576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225e906148c6565b60405180910390fd5b61227081613180565b50565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122df9061492e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234d90614996565b60405180910390fd5b8060045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124309190613aba565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a2906149fe565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612519576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161251090614a66565b60405180910390fd5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a90614ace565b60405180910390fd5b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561262d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262490614b36565b60405180910390fd5b5f81036126445761263f83835f613243565b61317b565b60125f9054906101000a900460ff1615612b2657612660611695565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156126ce575061269e611695565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561270657505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612740575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612758575060195f9054906101000a900460ff16155b15612b2557600b5f9054906101000a900460ff1661284b5760105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061280b575060105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61284a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284190614b9e565b60405180910390fd5b5b60115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156128e85750600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561298f57600a54811115612932576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292990614c2c565b60405180910390fd5b60095461293e8361150b565b8261294991906141d7565b111561298a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298190614c94565b60405180910390fd5b612b24565b60115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612a2c5750600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a7b57600a54811115612a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6d90614d22565b60405180910390fd5b612b23565b600f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612b2257600954612ad58361150b565b82612ae091906141d7565b1115612b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1890614c94565b60405180910390fd5b5b5b5b5b5b5f73ffffffffffffffffffffffffffffffffffffffff16601960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614158015612c1a5750601960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639015d371306040518263ffffffff1660e01b8152600401612bda9190613b5d565b602060405180830381865afa158015612bf5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c199190614d54565b5b15612d30575f601960019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a20527fc858560075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600954600a546008546040518763ffffffff1660e01b8152600401612cac96959493929190614d7f565b6020604051808303815f875af1158015612cc8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cec9190614d54565b905080612d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2590614e28565b60405180910390fd5b505b5f612d3a3061150b565b90505f6008548210159050600b60019054906101000a900460ff168015612d5e5750805b8015612d76575060195f9054906101000a900460ff16155b8015612dc8575060115f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612e1b575060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612e6e575060105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612eaf57600160195f6101000a81548160ff021916908315150217905550612e956134bb565b5f60195f6101000a81548160ff0219169083151502179055505b5f60195f9054906101000a900460ff1615905060105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612f5d575060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612f66575f90505b5f811561316b5760115f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612fc457505f601354115b1561305c57612ff16064612fe36013548861369690919063ffffffff16565b6136ab90919063ffffffff16565b905060135460155482613004919061401d565b61300e919061408b565b600e5f82825461301e91906141d7565b9250508190555060135460145482613036919061401d565b613040919061408b565b600d5f82825461305091906141d7565b92505081905550613148565b60115f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156130b357505f601654115b15613147576130e060646130d26016548861369690919063ffffffff16565b6136ab90919063ffffffff16565b9050601654601854826130f3919061401d565b6130fd919061408b565b600e5f82825461310d91906141d7565b9250508190555060165460175482613125919061401d565b61312f919061408b565b600d5f82825461313f91906141d7565b925050819055505b5b5f81111561315c5761315b873083613243565b5b80856131689190614e46565b94505b613176878787613243565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036132b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a890614ec3565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361331f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331690614f2b565b60405180910390fd5b61332a8383836136c0565b5f60035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156133ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133a590614f93565b60405180910390fd5b81810360035f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461343e91906141d7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516134a29190613aba565b60405180910390a36134b58484846136c5565b50505050565b5f80600e54600d546134cd91906141d7565b90505f6134d93061150b565b90505f8214806134e857505f81145b156134f557505050613694565b6014600854613504919061401d565b81111561351d57601460085461351a919061401d565b90505b5f47905061352a826136ca565b5f61353e824761390090919063ffffffff16565b90505f6135688561355a600e548561369690919063ffffffff16565b6136ab90919063ffffffff16565b9050600c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516135af90614fde565b5f6040518083038185875af1925050503d805f81146135e9576040519150601f19603f3d011682016040523d82523d5f602084013e6135ee565b606091505b505080965050600b60029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161363a90614fde565b5f6040518083038185875af1925050503d805f8114613674576040519150601f19603f3d011682016040523d82523d5f602084013e613679565b606091505b5050809650505f600d819055505f600e819055505050505050505b565b5f81836136a3919061401d565b905092915050565b5f81836136b8919061408b565b905092915050565b505050565b505050565b5f600267ffffffffffffffff8111156136e6576136e5614ff2565b5b6040519080825280602002602001820160405280156137145781602001602082028036833780820191505090505b50905030815f8151811061372b5761372a61452d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137f39190615033565b816001815181106138075761380661452d565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061386d3060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461227a565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016138cf95949392919061514e565b5f604051808303815f87803b1580156138e6575f80fd5b505af11580156138f8573d5f803e3d5ffd5b505050505050565b5f818361390d9190614e46565b905092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61395782613915565b613961818561391f565b935061397181856020860161392f565b61397a8161393d565b840191505092915050565b5f6020820190508181035f83015261399d818461394d565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6139d6826139ad565b9050919050565b6139e6816139cc565b81146139f0575f80fd5b50565b5f81359050613a01816139dd565b92915050565b5f819050919050565b613a1981613a07565b8114613a23575f80fd5b50565b5f81359050613a3481613a10565b92915050565b5f8060408385031215613a5057613a4f6139a5565b5b5f613a5d858286016139f3565b9250506020613a6e85828601613a26565b9150509250929050565b5f8115159050919050565b613a8c81613a78565b82525050565b5f602082019050613aa55f830184613a83565b92915050565b613ab481613a07565b82525050565b5f602082019050613acd5f830184613aab565b92915050565b5f60208284031215613ae857613ae76139a5565b5b5f613af5848285016139f3565b91505092915050565b5f805f60608486031215613b1557613b146139a5565b5b5f613b22868287016139f3565b9350506020613b33868287016139f3565b9250506040613b4486828701613a26565b9150509250925092565b613b57816139cc565b82525050565b5f602082019050613b705f830184613b4e565b92915050565b5f60208284031215613b8b57613b8a6139a5565b5b5f613b9884828501613a26565b91505092915050565b5f60ff82169050919050565b613bb681613ba1565b82525050565b5f602082019050613bcf5f830184613bad565b92915050565b613bde81613a78565b8114613be8575f80fd5b50565b5f81359050613bf981613bd5565b92915050565b5f8060408385031215613c1557613c146139a5565b5b5f613c22858286016139f3565b9250506020613c3385828601613beb565b9150509250929050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112613c5e57613c5d613c3d565b5b8235905067ffffffffffffffff811115613c7b57613c7a613c41565b5b602083019150836020820283011115613c9757613c96613c45565b5b9250929050565b5f805f60408486031215613cb557613cb46139a5565b5b5f84013567ffffffffffffffff811115613cd257613cd16139a9565b5b613cde86828701613c49565b93509350506020613cf186828701613beb565b9150509250925092565b5f60208284031215613d1057613d0f6139a5565b5b5f613d1d84828501613beb565b91505092915050565b5f8060408385031215613d3c57613d3b6139a5565b5b5f613d4985828601613a26565b9250506020613d5a85828601613a26565b9150509250929050565b5f819050919050565b5f613d87613d82613d7d846139ad565b613d64565b6139ad565b9050919050565b5f613d9882613d6d565b9050919050565b5f613da982613d8e565b9050919050565b613db981613d9f565b82525050565b5f602082019050613dd25f830184613db0565b92915050565b613de181613ba1565b8114613deb575f80fd5b50565b5f81359050613dfc81613dd8565b92915050565b5f819050919050565b613e1481613e02565b8114613e1e575f80fd5b50565b5f81359050613e2f81613e0b565b92915050565b5f805f60608486031215613e4c57613e4b6139a5565b5b5f613e5986828701613dee565b9350506020613e6a86828701613e21565b9250506040613e7b86828701613e21565b9150509250925092565b5f8060408385031215613e9b57613e9a6139a5565b5b5f613ea8858286016139f3565b9250506020613eb9858286016139f3565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613f0757607f821691505b602082108103613f1a57613f19613ec3565b5b50919050565b7f496e76616c6964206f776e6572000000000000000000000000000000000000005f82015250565b5f613f54600d8361391f565b9150613f5f82613f20565b602082019050919050565b5f6020820190508181035f830152613f8181613f48565b9050919050565b7f45524332303a204e6f7420637572416c6c6f77203e3d20616d6f756e740000005f82015250565b5f613fbc601d8361391f565b9150613fc782613f88565b602082019050919050565b5f6020820190508181035f830152613fe981613fb0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61402782613a07565b915061403283613a07565b925082820261404081613a07565b9150828204841483151761405757614056613ff0565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61409582613a07565b91506140a083613a07565b9250826140b0576140af61405e565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f61411560358361391f565b9150614120826140bb565b604082019050919050565b5f6020820190508181035f83015261414281614109565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6141a360348361391f565b91506141ae82614149565b604082019050919050565b5f6020820190508181035f8301526141d081614197565b9050919050565b5f6141e182613a07565b91506141ec83613a07565b925082820190508082111561420457614203613ff0565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61426460398361391f565b915061426f8261420a565b604082019050919050565b5f6020820190508181035f83015261429181614258565b9050919050565b5f8160011c9050919050565b5f808291508390505b60018511156142ed578086048111156142c9576142c8613ff0565b5b60018516156142d85780820291505b80810290506142e685614298565b94506142ad565b94509492505050565b5f8261430557600190506143c0565b81614312575f90506143c0565b8160018114614328576002811461433257614361565b60019150506143c0565b60ff84111561434457614343613ff0565b5b8360020a91508482111561435b5761435a613ff0565b5b506143c0565b5060208310610133831016604e8410600b84101617156143965782820a90508381111561439157614390613ff0565b5b6143c0565b6143a384848460016142a4565b925090508184048111156143ba576143b9613ff0565b5b81810290505b9392505050565b5f6143d182613a07565b91506143dc83613ba1565b92506144097fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846142f6565b905092915050565b7f43616e6e6f7420736574206d6178546f6b656e416d6f756e7450657254786e205f8201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b5f61446b602f8361391f565b915061447682614411565b604082019050919050565b5f6020820190508181035f8301526144988161445f565b9050919050565b7f43616e6e6f7420736574206d6178546b73416d7450657257616c6c6574206c6f5f8201527f776572207468616e20302e352500000000000000000000000000000000000000602082015250565b5f6144f9602d8361391f565b91506145048261449f565b604082019050919050565b5f6020820190508181035f830152614526816144ed565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f45524332303a204e6f7420637572416c6c6f77203e3d2073756256616c7565005f82015250565b5f61458e601f8361391f565b91506145998261455a565b602082019050919050565b5f6020820190508181035f8301526145bb81614582565b9050919050565b7f4d757374206b6565702074617820617420323525206f72206c657373000000005f82015250565b5f6145f6601c8361391f565b9150614601826145c2565b602082019050919050565b5f6020820190508181035f830152614623816145ea565b9050919050565b7f496e76616c696420616e74692d647261696e65720000000000000000000000005f82015250565b5f61465e60148361391f565b91506146698261462a565b602082019050919050565b5f6020820190508181035f83015261468b81614652565b9050919050565b61469b81613e02565b82525050565b5f60a0820190506146b45f830188614692565b6146c16020830187614692565b6146ce6040830186614692565b6146db6060830185613aab565b6146e86080830184613b4e565b9695505050505050565b5f6060820190506147055f830186614692565b6147126020830185614692565b61471f6040830184613aab565b949350505050565b5f81905092915050565b7f19010000000000000000000000000000000000000000000000000000000000005f82015250565b5f614765600283614727565b915061477082614731565b600282019050919050565b5f819050919050565b61479561479082613e02565b61477b565b82525050565b5f6147a582614759565b91506147b18285614784565b6020820191506147c18284614784565b6020820191508190509392505050565b5f6080820190506147e45f830187614692565b6147f16020830186613bad565b6147fe6040830185614692565b61480b6060830184614692565b95945050505050565b7f496e76616c6964207369676e61747572650000000000000000000000000000005f82015250565b5f61484860118361391f565b915061485382614814565b602082019050919050565b5f6020820190508181035f8301526148758161483c565b9050919050565b7f4e6577206f776e6572206973205a45524f0000000000000000000000000000005f82015250565b5f6148b060118361391f565b91506148bb8261487c565b602082019050919050565b5f6020820190508181035f8301526148dd816148a4565b9050919050565b7f45524332303a204e6f74206f776e657220213d206164647265737328302900005f82015250565b5f614918601e8361391f565b9150614923826148e4565b602082019050919050565b5f6020820190508181035f8301526149458161490c565b9050919050565b7f45524332303a204e6f74207370656e64657220213d20616464726573732830295f82015250565b5f61498060208361391f565b915061498b8261494c565b602082019050919050565b5f6020820190508181035f8301526149ad81614974565b9050919050565b7f45524332303a20496e76616c69642066726f6d206164647265737300000000005f82015250565b5f6149e8601b8361391f565b91506149f3826149b4565b602082019050919050565b5f6020820190508181035f830152614a15816149dc565b9050919050565b7f45524332303a20496e76616c696420746f2061646472657373000000000000005f82015250565b5f614a5060198361391f565b9150614a5b82614a1c565b602082019050919050565b5f6020820190508181035f830152614a7d81614a44565b9050919050565b7f45524332303a2066726f6d20697320626c61636b206c697374000000000000005f82015250565b5f614ab860198361391f565b9150614ac382614a84565b602082019050919050565b5f6020820190508181035f830152614ae581614aac565b9050919050565b7f45524332303a20746f20697320626c61636b206c6973740000000000000000005f82015250565b5f614b2060178361391f565b9150614b2b82614aec565b602082019050919050565b5f6020820190508181035f830152614b4d81614b14565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614b8860168361391f565b9150614b9382614b54565b602082019050919050565b5f6020820190508181035f830152614bb581614b7c565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d6178546f6b656e416d6f756e7450657254786e2e0000000000000000000000602082015250565b5f614c1660358361391f565b9150614c2182614bbc565b604082019050919050565b5f6020820190508181035f830152614c4381614c0a565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f614c7e60138361391f565b9150614c8982614c4a565b602082019050919050565b5f6020820190508181035f830152614cab81614c72565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d6178546f6b656e416d6f756e7450657254786e2e00000000000000000000602082015250565b5f614d0c60368361391f565b9150614d1782614cb2565b604082019050919050565b5f6020820190508181035f830152614d3981614d00565b9050919050565b5f81519050614d4e81613bd5565b92915050565b5f60208284031215614d6957614d686139a5565b5b5f614d7684828501614d40565b91505092915050565b5f60c082019050614d925f830189613b4e565b614d9f6020830188613b4e565b614dac6040830187613b4e565b614db96060830186613aab565b614dc66080830185613aab565b614dd360a0830184613aab565b979650505050505050565b7f416e746920447261696e657220456e61626c65640000000000000000000000005f82015250565b5f614e1260148361391f565b9150614e1d82614dde565b602082019050919050565b5f6020820190508181035f830152614e3f81614e06565b9050919050565b5f614e5082613a07565b9150614e5b83613a07565b9250828203905081811115614e7357614e72613ff0565b5b92915050565b7f45524332303a204e6f742066726f6d20213d20616464726573732830290000005f82015250565b5f614ead601d8361391f565b9150614eb882614e79565b602082019050919050565b5f6020820190508181035f830152614eda81614ea1565b9050919050565b7f45524332303a204e6f7420746f20213d206164647265737328302900000000005f82015250565b5f614f15601b8361391f565b9150614f2082614ee1565b602082019050919050565b5f6020820190508181035f830152614f4281614f09565b9050919050565b7f45524332303a204e6f742062616c616e636546726f6d203e3d20616d6f756e745f82015250565b5f614f7d60208361391f565b9150614f8882614f49565b602082019050919050565b5f6020820190508181035f830152614faa81614f71565b9050919050565b5f81905092915050565b50565b5f614fc95f83614fb1565b9150614fd482614fbb565b5f82019050919050565b5f614fe882614fbe565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f8151905061502d816139dd565b92915050565b5f60208284031215615048576150476139a5565b5b5f6150558482850161501f565b91505092915050565b5f819050919050565b5f61508161507c6150778461505e565b613d64565b613a07565b9050919050565b61509181615067565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6150c9816139cc565b82525050565b5f6150da83836150c0565b60208301905092915050565b5f602082019050919050565b5f6150fc82615097565b61510681856150a1565b9350615111836150b1565b805f5b8381101561514157815161512888826150cf565b9750615133836150e6565b925050600181019050615114565b5085935050505092915050565b5f60a0820190506151615f830188613aab565b61516e6020830187615088565b818103604083015261518081866150f2565b905061518f6060830185613b4e565b61519c6080830184613aab565b969550505050505056fea2646970667358221220554e36c365d096049ae19b159f820df1ff0fbb2d2046fc4b0de764750936320b64736f6c63430008190033

Deployed Bytecode Sourcemap

14279:11492:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9923:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10495:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17198:116;;;;;;;;;;;;;:::i;:::-;;14592:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10244:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14703:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14859:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11175:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14399:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18779:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10143:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15163:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14748:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11749:211;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20515:247;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15304:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14982:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19409:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15130:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19131:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14789:61;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18264:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10360:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;970:103;;;;;;;;;;;;;:::i;:::-;;18564:90;;;;;;;;;;;;;:::i;:::-;;14633:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;687:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14670:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19693:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18664:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10031:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11968:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11580:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15200:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14467:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19905:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14916:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20203:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20770:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15096:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14356:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14507:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18426:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17322:934;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14551:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11016:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15024:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15058:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14435:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;782:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9923:100;9977:13;10010:5;10003:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9923:100;:::o;10495:169::-;10578:4;10595:39;10604:12;:10;:12::i;:::-;10618:7;10627:6;10595:8;:39::i;:::-;10652:4;10645:11;;10495:169;;;;:::o;17198:116::-;629:12;:10;:12::i;:::-;618:23;;:7;:5;:7::i;:::-;:23;;;610:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;17272:4:::1;17255:14;;:21;;;;;;;;;;;;;;;;;;17302:4;17287:12;;:19;;;;;;;;;;;;;;;;;;17198:116::o:0;14592:32::-;;;;;;;;;;;;;:::o;10244:108::-;10305:7;10332:12;;10325:19;;10244:108;:::o;14703:38::-;;;;:::o;14859:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;11175:397::-;11272:4;11289:27;11299:4;11305:2;11309:6;11289:9;:27::i;:::-;11327:16;11346:11;:17;11358:4;11346:17;;;;;;;;;;;;;;;:31;11364:12;:10;:12::i;:::-;11346:31;;;;;;;;;;;;;;;;11327:50;;11408:6;11396:8;:18;;11388:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;11484:47;11493:4;11499:12;:10;:12::i;:::-;11524:6;11513:8;:17;11484:8;:47::i;:::-;11560:4;11553:11;;;11175:397;;;;;:::o;14399:23::-;;;;;;;;;;;;;:::o;18779:344::-;629:12;:10;:12::i;:::-;618:23;;:7;:5;:7::i;:::-;:23;;;610:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;18909:6:::1;18904:1;18888:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18887:28;;;;:::i;:::-;18877:6;:38;;18869:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;19024:4;19019:1;19003:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19002:26;;;;:::i;:::-;18992:6;:36;;18984:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;19109:6;19096:10;:19;;;;18779:344:::0;:::o;10143:93::-;10201:5;10226:2;10219:9;;10143:93;:::o;15163:30::-;;;;:::o;14748:32::-;;;;:::o;11749:211::-;11835:4;11852:78;11861:12;:10;:12::i;:::-;11875:7;11921:8;11884:11;:25;11896:12;:10;:12::i;:::-;11884:25;;;;;;;;;;;;;;;:34;11910:7;11884:34;;;;;;;;;;;;;;;;:45;;;;:::i;:::-;11852:8;:78::i;:::-;11948:4;11941:11;;11749:211;;;;:::o;20515:247::-;629:12;:10;:12::i;:::-;618:23;;:7;:5;:7::i;:::-;:23;;;610:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;20634:8:::1;;;;;;;;;;;20626:16;;:4;:16;;::::0;20618:86:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20749:5;20715:25;:31;20741:4;20715:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20515:247:::0;;:::o;15304:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;14982:33::-;;;;;;;;;;;;;:::o;19409:276::-;629:12;:10;:12::i;:::-;618:23;;:7;:5;:7::i;:::-;:23;;;610:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;19553:10:::1;:8;:10::i;:::-;19547:2;:16;;;;:::i;:::-;19538:4;19533:1;19517:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19516:26;;;;:::i;:::-;19515:49;;;;:::i;:::-;19505:6;:59;;19497:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;19666:10;:8;:10::i;:::-;19660:2;:16;;;;:::i;:::-;19650:6;:27;;;;:::i;:::-;19627:20;:50;;;;19409:276:::0;:::o;15130:26::-;;;;:::o;19131:270::-;629:12;:10;:12::i;:::-;618:23;;:7;:5;:7::i;:::-;:23;;;610:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;19273:10:::1;:8;:10::i;:::-;19267:2;:16;;;;:::i;:::-;19258:4;19253:1;19237:13;:11;:13::i;:::-;:17;;;;:::i;:::-;19236:26;;;;:::i;:::-;19235:49;;;;:::i;:::-;19225:6;:59;;19217:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;19382:10;:8;:10::i;:::-;19376:2;:16;;;;:::i;:::-;19366:6;:27;;;;:::i;:::-;19345:18;:48;;;;19131:270:::0;:::o;14789:61::-;;;;;;;;;;;;;;;;;;;;;;:::o;18264:154::-;629:12;:10;:12::i;:::-;618:23;;:7;:5;:7::i;:::-;:23;;;610:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;18405:5:::1;18367:29;:35;18397:4;18367:35;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;18264:154:::0;;:::o;10360:127::-;10434:7;10461:9;:18;10471:7;10461:18;;;;;;;;;;;;;;;;10454:25;;10360:127;;;:::o;970:103::-;629:12;:10;:12::i;:::-;618:23;;:7;:5;:7::i;:::-;:23;;;610:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1035:30:::1;1062:1;1035:18;:30::i;:::-;970:103::o:0;18564:90::-;629:12;:10;:12::i;:::-;618:23;;:7;:5;:7::i;:::-;:23;;;610:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;18641:5:::1;18624:14;;:22;;;;;;;;;;;;;;;;;;18564:90::o:0;14633:30::-;;;;;;;;;;;;;:::o;687:87::-;733:7;760:6;;;;;;;;;;;753:13;;687:87;:::o;14670:24::-;;;;;;;;;;;;;:::o;19693:204::-;629:12;:10;:12::i;:::-;618:23;;:7;:5;:7::i;:::-;:23;;;610:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;19792:9:::1;19787:103;19811:7;;:14;;19807:1;:18;19787:103;;;19871:7;19847:9;:21;19857:7;;19865:1;19857:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;19847:21;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;19827:3;;;;;;;19787:103;;;;19693:204:::0;;;:::o;18664:107::-;629:12;:10;:12::i;:::-;618:23;;:7;:5;:7::i;:::-;:23;;;610:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;18756:7:::1;18741:12;;:22;;;;;;;;;;;;;;;;;;18664:107:::0;:::o;10031:104::-;10087:13;10120:7;10113:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10031:104;:::o;11968:360::-;12054:4;12071:16;12090:11;:25;12102:12;:10;:12::i;:::-;12090:25;;;;;;;;;;;;;;;:34;12116:7;12090:34;;;;;;;;;;;;;;;;12071:53;;12155:8;12143;:20;;12135:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;12235:52;12244:12;:10;:12::i;:::-;12258:7;12278:8;12267;:19;12235:8;:52::i;:::-;12316:4;12309:11;;;11968:360;;;;:::o;11580:161::-;11659:4;11676:35;11686:12;:10;:12::i;:::-;11700:2;11704:6;11676:9;:35::i;:::-;11729:4;11722:11;;11580:161;;;;:::o;15200:24::-;;;;:::o;14467:33::-;;;;:::o;19905:290::-;629:12;:10;:12::i;:::-;618:23;;:7;:5;:7::i;:::-;:23;;;610:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;20022:12:::1;20004:15;:30;;;;20057:9;20045;:21;;;;20109:9;;20091:15;;:27;;;;:::i;:::-;20077:11;:41;;;;20152:2;20137:11;;:17;;20129:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;19905:290:::0;;:::o;14916:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;20203:300::-;629:12;:10;:12::i;:::-;618:23;;:7;:5;:7::i;:::-;:23;;;610:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;20325:12:::1;20306:16;:31;;;;20361:9;20348:10;:22;;;;20415:10;;20396:16;;:29;;;;:::i;:::-;20381:12;:44;;;;20460:2;20444:12;;:18;;20436:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;20203:300:::0;;:::o;20770:197::-;629:12;:10;:12::i;:::-;618:23;;:7;:5;:7::i;:::-;:23;;;610:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;20891:3:::1;20865:30;;:14;:30;;::::0;20857:63:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20945:14;20931:11;;:28;;;;;;;;;;;;;;;;;;20770:197:::0;:::o;15096:25::-;;;;:::o;14356:36::-;;;;;;;;;;;;;:::o;14507:35::-;;;;:::o;18426:130::-;629:12;:10;:12::i;:::-;618:23;;:7;:5;:7::i;:::-;:23;;;610:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;18543:5:::1;18515:16;:25;18532:7;18515:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;18426:130:::0;;:::o;17322:934::-;17408:18;17464:95;17584:22;;;;;;;;;;;;;;;;;17574:33;;;;;;17632:10;;;;;;;;;;;;;;;;;17622:21;;;;;;17658:13;17694:4;17439:271;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17429:282;;;;;;17408:303;;17722:18;17778:49;17852:23;;;;;;;;;;;;;;;;;17842:34;;;;;;17899:1;17753:159;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17743:170;;;;;;17722:191;;17924:14;18007:10;18032;17951:118;;;;;;;;;:::i;:::-;;;;;;;;;;;;;17941:129;;;;;;17924:146;;18083:14;18100:26;18110:6;18118:1;18121;18124;18100:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18083:43;;18155:7;:5;:7::i;:::-;18145:17;;:6;:17;;;18137:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;18214:4;18197:14;;:21;;;;;;;;;;;;;;;;;;18244:4;18229:12;;:19;;;;;;;;;;;;;;;;;;17397:859;;;;17322:934;;;:::o;14551:34::-;;;;;;;;;;;;;:::o;11016:151::-;11105:7;11132:11;:18;11144:5;11132:18;;;;;;;;;;;;;;;:27;11151:7;11132:27;;;;;;;;;;;;;;;;11125:34;;11016:151;;;;:::o;15024:27::-;;;;:::o;15058:31::-;;;;:::o;14435:25::-;;;;:::o;782:180::-;629:12;:10;:12::i;:::-;618:23;;:7;:5;:7::i;:::-;:23;;;610:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;891:1:::1;871:22;;:8;:22;;::::0;863:52:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;926:28;945:8;926:18;:28::i;:::-;782:180:::0;:::o;124:98::-;177:7;204:10;197:17;;124:98;:::o;10672:336::-;10791:1;10774:19;;:5;:19;;;10766:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;10866:1;10847:21;;:7;:21;;;10839:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;10946:6;10916:11;:18;10928:5;10916:18;;;;;;;;;;;;;;;:27;10935:7;10916:27;;;;;;;;;;;;;;;:36;;;;10984:7;10968:32;;10977:5;10968:32;;;10993:6;10968:32;;;;;;:::i;:::-;;;;;;;;10672:336;;;:::o;21851:3196::-;21999:1;21983:18;;:4;:18;;;21975:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;22066:1;22052:16;;:2;:16;;;22044:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;22118:9;:15;22128:4;22118:15;;;;;;;;;;;;;;;;;;;;;;;;;22117:16;22109:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;22183:9;:13;22193:2;22183:13;;;;;;;;;;;;;;;;;;;;;;;;;22182:14;22174:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;22251:1;22241:6;:11;22237:93;;22269:28;22285:4;22291:2;22295:1;22269:15;:28::i;:::-;22312:7;;22237:93;22346:14;;;;;;;;;;;22342:1075;;;22389:7;:5;:7::i;:::-;22381:15;;:4;:15;;;;:32;;;;;22406:7;:5;:7::i;:::-;22400:13;;:2;:13;;;;22381:32;:52;;;;;22431:1;22417:16;;:2;:16;;;;22381:52;:77;;;;;22451:6;22437:21;;:2;:21;;;;22381:77;:91;;;;;22463:9;;;;;;;;;;;22462:10;22381:91;22377:1029;;;22498:14;;;;;;;;;;;22493:145;;22545:16;:22;22562:4;22545:22;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;22571:16;:20;22588:2;22571:20;;;;;;;;;;;;;;;;;;;;;;;;;22545:46;22537:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;22493:145;22662:25;:31;22688:4;22662:31;;;;;;;;;;;;;;;;;;;;;;;;;:69;;;;;22698:29;:33;22728:2;22698:33;;;;;;;;;;;;;;;;;;;;;;;;;22697:34;22662:69;22658:733;;;22774:20;;22764:6;:30;;22756:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;22909:18;;22892:13;22902:2;22892:9;:13::i;:::-;22883:6;:22;;;;:::i;:::-;:44;;22875:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22658:733;;;22998:25;:29;23024:2;22998:29;;;;;;;;;;;;;;;;;;;;;;;;;:69;;;;;23032:29;:35;23062:4;23032:35;;;;;;;;;;;;;;;;;;;;;;;;;23031:36;22998:69;22994:397;;;23110:20;;23100:6;:30;;23092:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;22994:397;;;23237:29;:33;23267:2;23237:33;;;;;;;;;;;;;;;;;;;;;;;;;23232:159;;23329:18;;23312:13;23322:2;23312:9;:13::i;:::-;23303:6;:22;;;;:::i;:::-;:44;;23295:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;23232:159;22994:397;22658:733;22377:1029;22342:1075;23456:1;23433:25;;:11;;;;;;;;;;;:25;;;;:79;;;;;23475:11;;;;;;;;;;;23462:35;;;23506:4;23462:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23433:79;23429:292;;;23529:10;23555:11;;;;;;;;;;;23542:31;;;23574:4;23580:2;23592:8;;;;;;;;;;;23603:18;;23623:20;;23645:10;;23542:114;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23529:127;;23679:5;23671:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;23514:207;23429:292;23733:20;23756:24;23774:4;23756:9;:24::i;:::-;23733:47;;23791:12;23822:10;;23806:12;:26;;23791:41;;23847:12;;;;;;;;;;;:23;;;;;23863:7;23847:23;:37;;;;;23875:9;;;;;;;;;;;23874:10;23847:37;:83;;;;;23901:25;:29;23927:2;23901:29;;;;;;;;;;;;;;;;;;;;;;;;;23847:83;:110;;;;;23935:16;:22;23952:4;23935:22;;;;;;;;;;;;;;;;;;;;;;;;;23934:23;23847:110;:135;;;;;23962:16;:20;23979:2;23962:20;;;;;;;;;;;;;;;;;;;;;;;;;23961:21;23847:135;23843:241;;;24011:4;23999:9;;:16;;;;;;;;;;;;;;;;;;24030:10;:8;:10::i;:::-;24067:5;24055:9;;:17;;;;;;;;;;;;;;;;;;23843:241;24096:9;24109;;;;;;;;;;;24108:10;24096:22;;24133:16;:22;24150:4;24133:22;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;24159:16;:20;24176:2;24159:20;;;;;;;;;;;;;;;;;;;;;;;;;24133:46;24129:77;;;24201:5;24194:12;;24129:77;24219:12;24250:4;24246:748;;;24275:25;:29;24301:2;24275:29;;;;;;;;;;;;;;;;;;;;;;;;;:49;;;;;24323:1;24308:12;;:16;24275:49;24271:595;;;24352:33;24381:3;24352:24;24363:12;;24352:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;24345:40;;24447:12;;24433:10;;24426:4;:17;;;;:::i;:::-;24425:34;;;;:::i;:::-;24404:17;;:55;;;;;;;:::i;:::-;;;;;;;;24533:12;;24513:16;;24506:4;:23;;;;:::i;:::-;24505:40;;;;:::i;:::-;24478:23;;:67;;;;;;;:::i;:::-;;;;;;;;24271:595;;;24584:25;:31;24610:4;24584:31;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;24633:1;24619:11;;:15;24584:50;24580:286;;;24662:32;24690:3;24662:23;24673:11;;24662:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;24655:39;;24755:11;;24742:9;;24735:4;:16;;;;:::i;:::-;24734:32;;;;:::i;:::-;24713:17;;:53;;;;;;;:::i;:::-;;;;;;;;24839:11;;24820:15;;24813:4;:22;;;;:::i;:::-;24812:38;;;;:::i;:::-;24785:23;;:65;;;;;;;:::i;:::-;;;;;;;;24580:286;24271:595;24891:1;24884:4;:8;24880:73;;;24911:42;24927:4;24941;24948;24911:15;:42::i;:::-;24880:73;24978:4;24968:14;;;;;:::i;:::-;;;24246:748;25006:33;25022:4;25028:2;25032:6;25006:15;:33::i;:::-;21964:3083;;;;21851:3196;;;;:::o;1081:191::-;1155:16;1174:6;;;;;;;;;;;1155:25;;1200:8;1191:6;;:17;;;;;;;;;;;;;;;;;;1255:8;1224:40;;1245:8;1224:40;;;;;;;;;;;;1144:128;1081:191;:::o;13492:607::-;13605:1;13589:18;;:4;:18;;;13581:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;13674:1;13660:16;;:2;:16;;;13652:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;13719:38;13740:4;13746:2;13750:6;13719:20;:38::i;:::-;13768:19;13790:9;:15;13800:4;13790:15;;;;;;;;;;;;;;;;13768:37;;13839:6;13824:11;:21;;13816:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;13950:6;13936:11;:20;13918:9;:15;13928:4;13918:15;;;;;;;;;;;;;;;:38;;;;13995:6;13978:9;:13;13988:2;13978:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;14032:2;14017:26;;14026:4;14017:26;;;14036:6;14017:26;;;;;;:::i;:::-;;;;;;;;14054:37;14074:4;14080:2;14084:6;14054:19;:37::i;:::-;13570:529;13492:607;;;:::o;20975:868::-;21014:12;21037:25;21091:17;;21065:23;;:43;;;;:::i;:::-;21037:71;;21119:20;21142:24;21160:4;21142:9;:24::i;:::-;21119:47;;21204:1;21183:17;:22;:43;;;;21225:1;21209:12;:17;21183:43;21179:69;;;21241:7;;;;;21179:69;21292:2;21279:10;;:15;;;;:::i;:::-;21264:12;:30;21260:79;;;21337:2;21324:10;;:15;;;;:::i;:::-;21309:30;;21260:79;21352:22;21377:21;21352:46;;21409:30;21426:12;21409:16;:30::i;:::-;21452:18;21473:41;21499:14;21473:21;:25;;:41;;;;:::i;:::-;21452:62;;21525:17;21545:56;21583:17;21545:33;21560:17;;21545:10;:14;;:33;;;;:::i;:::-;:37;;:56;;;;:::i;:::-;21525:76;;21636:9;;;;;;;;;;;21628:23;;21659:9;21628:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21614:59;;;;;21706:15;;;;;;;;;;;21698:29;;21736:21;21698:65;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21684:79;;;;;21802:1;21776:23;:27;;;;21834:1;21814:17;:21;;;;21003:840;;;;;;20975:868;:::o;1303:98::-;1361:7;1392:1;1388;:5;;;;:::i;:::-;1381:12;;1303:98;;;;:::o;1687:::-;1745:7;1776:1;1772;:5;;;;:::i;:::-;1765:12;;1687:98;;;;:::o;13339:145::-;;;;:::o;14107:144::-;;;;:::o;25207:559::-;25328:21;25366:1;25352:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25328:40;;25397:4;25379;25384:1;25379:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25423:10;;;;;;;;;;;:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25413:4;25418:1;25413:7;;;;;;;;:::i;:::-;;;;;;;:27;;;;;;;;;;;25453:52;25470:4;25485:10;;;;;;;;;;;25498:6;25453:8;:52::i;:::-;25544:10;;;;;;;;;;;:61;;;25620:6;25641:1;25685:4;25712;25732:15;25544:214;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25257:509;25207:559;:::o;2332:98::-;2390:7;2421:1;2417;:5;;;;:::i;:::-;2410:12;;2332:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1446:117;1555:1;1552;1545:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:118::-;3426:24;3444:5;3426:24;:::i;:::-;3421:3;3414:37;3339:118;;:::o;3463:222::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3607:71;3675:1;3664:9;3660:17;3651:6;3607:71;:::i;:::-;3463:222;;;;:::o;3691:329::-;3750:6;3799:2;3787:9;3778:7;3774:23;3770:32;3767:119;;;3805:79;;:::i;:::-;3767:119;3925:1;3950:53;3995:7;3986:6;3975:9;3971:22;3950:53;:::i;:::-;3940:63;;3896:117;3691:329;;;;:::o;4026:619::-;4103:6;4111;4119;4168:2;4156:9;4147:7;4143:23;4139:32;4136:119;;;4174:79;;:::i;:::-;4136:119;4294:1;4319:53;4364:7;4355:6;4344:9;4340:22;4319:53;:::i;:::-;4309:63;;4265:117;4421:2;4447:53;4492:7;4483:6;4472:9;4468:22;4447:53;:::i;:::-;4437:63;;4392:118;4549:2;4575:53;4620:7;4611:6;4600:9;4596:22;4575:53;:::i;:::-;4565:63;;4520:118;4026:619;;;;;:::o;4651:118::-;4738:24;4756:5;4738:24;:::i;:::-;4733:3;4726:37;4651:118;;:::o;4775:222::-;4868:4;4906:2;4895:9;4891:18;4883:26;;4919:71;4987:1;4976:9;4972:17;4963:6;4919:71;:::i;:::-;4775:222;;;;:::o;5003:329::-;5062:6;5111:2;5099:9;5090:7;5086:23;5082:32;5079:119;;;5117:79;;:::i;:::-;5079:119;5237:1;5262:53;5307:7;5298:6;5287:9;5283:22;5262:53;:::i;:::-;5252:63;;5208:117;5003:329;;;;:::o;5338:86::-;5373:7;5413:4;5406:5;5402:16;5391:27;;5338:86;;;:::o;5430:112::-;5513:22;5529:5;5513:22;:::i;:::-;5508:3;5501:35;5430:112;;:::o;5548:214::-;5637:4;5675:2;5664:9;5660:18;5652:26;;5688:67;5752:1;5741:9;5737:17;5728:6;5688:67;:::i;:::-;5548:214;;;;:::o;5768:116::-;5838:21;5853:5;5838:21;:::i;:::-;5831:5;5828:32;5818:60;;5874:1;5871;5864:12;5818:60;5768:116;:::o;5890:133::-;5933:5;5971:6;5958:20;5949:29;;5987:30;6011:5;5987:30;:::i;:::-;5890:133;;;;:::o;6029:468::-;6094:6;6102;6151:2;6139:9;6130:7;6126:23;6122:32;6119:119;;;6157:79;;:::i;:::-;6119:119;6277:1;6302:53;6347:7;6338:6;6327:9;6323:22;6302:53;:::i;:::-;6292:63;;6248:117;6404:2;6430:50;6472:7;6463:6;6452:9;6448:22;6430:50;:::i;:::-;6420:60;;6375:115;6029:468;;;;;:::o;6503:117::-;6612:1;6609;6602:12;6626:117;6735:1;6732;6725:12;6749:117;6858:1;6855;6848:12;6889:568;6962:8;6972:6;7022:3;7015:4;7007:6;7003:17;6999:27;6989:122;;7030:79;;:::i;:::-;6989:122;7143:6;7130:20;7120:30;;7173:18;7165:6;7162:30;7159:117;;;7195:79;;:::i;:::-;7159:117;7309:4;7301:6;7297:17;7285:29;;7363:3;7355:4;7347:6;7343:17;7333:8;7329:32;7326:41;7323:128;;;7370:79;;:::i;:::-;7323:128;6889:568;;;;;:::o;7463:698::-;7555:6;7563;7571;7620:2;7608:9;7599:7;7595:23;7591:32;7588:119;;;7626:79;;:::i;:::-;7588:119;7774:1;7763:9;7759:17;7746:31;7804:18;7796:6;7793:30;7790:117;;;7826:79;;:::i;:::-;7790:117;7939:80;8011:7;8002:6;7991:9;7987:22;7939:80;:::i;:::-;7921:98;;;;7717:312;8068:2;8094:50;8136:7;8127:6;8116:9;8112:22;8094:50;:::i;:::-;8084:60;;8039:115;7463:698;;;;;:::o;8167:323::-;8223:6;8272:2;8260:9;8251:7;8247:23;8243:32;8240:119;;;8278:79;;:::i;:::-;8240:119;8398:1;8423:50;8465:7;8456:6;8445:9;8441:22;8423:50;:::i;:::-;8413:60;;8369:114;8167:323;;;;:::o;8496:474::-;8564:6;8572;8621:2;8609:9;8600:7;8596:23;8592:32;8589:119;;;8627:79;;:::i;:::-;8589:119;8747:1;8772:53;8817:7;8808:6;8797:9;8793:22;8772:53;:::i;:::-;8762:63;;8718:117;8874:2;8900:53;8945:7;8936:6;8925:9;8921:22;8900:53;:::i;:::-;8890:63;;8845:118;8496:474;;;;;:::o;8976:60::-;9004:3;9025:5;9018:12;;8976:60;;;:::o;9042:142::-;9092:9;9125:53;9143:34;9152:24;9170:5;9152:24;:::i;:::-;9143:34;:::i;:::-;9125:53;:::i;:::-;9112:66;;9042:142;;;:::o;9190:126::-;9240:9;9273:37;9304:5;9273:37;:::i;:::-;9260:50;;9190:126;;;:::o;9322:152::-;9398:9;9431:37;9462:5;9431:37;:::i;:::-;9418:50;;9322:152;;;:::o;9480:183::-;9593:63;9650:5;9593:63;:::i;:::-;9588:3;9581:76;9480:183;;:::o;9669:274::-;9788:4;9826:2;9815:9;9811:18;9803:26;;9839:97;9933:1;9922:9;9918:17;9909:6;9839:97;:::i;:::-;9669:274;;;;:::o;9949:118::-;10020:22;10036:5;10020:22;:::i;:::-;10013:5;10010:33;10000:61;;10057:1;10054;10047:12;10000:61;9949:118;:::o;10073:135::-;10117:5;10155:6;10142:20;10133:29;;10171:31;10196:5;10171:31;:::i;:::-;10073:135;;;;:::o;10214:77::-;10251:7;10280:5;10269:16;;10214:77;;;:::o;10297:122::-;10370:24;10388:5;10370:24;:::i;:::-;10363:5;10360:35;10350:63;;10409:1;10406;10399:12;10350:63;10297:122;:::o;10425:139::-;10471:5;10509:6;10496:20;10487:29;;10525:33;10552:5;10525:33;:::i;:::-;10425:139;;;;:::o;10570:615::-;10645:6;10653;10661;10710:2;10698:9;10689:7;10685:23;10681:32;10678:119;;;10716:79;;:::i;:::-;10678:119;10836:1;10861:51;10904:7;10895:6;10884:9;10880:22;10861:51;:::i;:::-;10851:61;;10807:115;10961:2;10987:53;11032:7;11023:6;11012:9;11008:22;10987:53;:::i;:::-;10977:63;;10932:118;11089:2;11115:53;11160:7;11151:6;11140:9;11136:22;11115:53;:::i;:::-;11105:63;;11060:118;10570:615;;;;;:::o;11191:474::-;11259:6;11267;11316:2;11304:9;11295:7;11291:23;11287:32;11284:119;;;11322:79;;:::i;:::-;11284:119;11442:1;11467:53;11512:7;11503:6;11492:9;11488:22;11467:53;:::i;:::-;11457:63;;11413:117;11569:2;11595:53;11640:7;11631:6;11620:9;11616:22;11595:53;:::i;:::-;11585:63;;11540:118;11191:474;;;;;:::o;11671:180::-;11719:77;11716:1;11709:88;11816:4;11813:1;11806:15;11840:4;11837:1;11830:15;11857:320;11901:6;11938:1;11932:4;11928:12;11918:22;;11985:1;11979:4;11975:12;12006:18;11996:81;;12062:4;12054:6;12050:17;12040:27;;11996:81;12124:2;12116:6;12113:14;12093:18;12090:38;12087:84;;12143:18;;:::i;:::-;12087:84;11908:269;11857:320;;;:::o;12183:163::-;12323:15;12319:1;12311:6;12307:14;12300:39;12183:163;:::o;12352:366::-;12494:3;12515:67;12579:2;12574:3;12515:67;:::i;:::-;12508:74;;12591:93;12680:3;12591:93;:::i;:::-;12709:2;12704:3;12700:12;12693:19;;12352:366;;;:::o;12724:419::-;12890:4;12928:2;12917:9;12913:18;12905:26;;12977:9;12971:4;12967:20;12963:1;12952:9;12948:17;12941:47;13005:131;13131:4;13005:131;:::i;:::-;12997:139;;12724:419;;;:::o;13149:179::-;13289:31;13285:1;13277:6;13273:14;13266:55;13149:179;:::o;13334:366::-;13476:3;13497:67;13561:2;13556:3;13497:67;:::i;:::-;13490:74;;13573:93;13662:3;13573:93;:::i;:::-;13691:2;13686:3;13682:12;13675:19;;13334:366;;;:::o;13706:419::-;13872:4;13910:2;13899:9;13895:18;13887:26;;13959:9;13953:4;13949:20;13945:1;13934:9;13930:17;13923:47;13987:131;14113:4;13987:131;:::i;:::-;13979:139;;13706:419;;;:::o;14131:180::-;14179:77;14176:1;14169:88;14276:4;14273:1;14266:15;14300:4;14297:1;14290:15;14317:410;14357:7;14380:20;14398:1;14380:20;:::i;:::-;14375:25;;14414:20;14432:1;14414:20;:::i;:::-;14409:25;;14469:1;14466;14462:9;14491:30;14509:11;14491:30;:::i;:::-;14480:41;;14670:1;14661:7;14657:15;14654:1;14651:22;14631:1;14624:9;14604:83;14581:139;;14700:18;;:::i;:::-;14581:139;14365:362;14317:410;;;;:::o;14733:180::-;14781:77;14778:1;14771:88;14878:4;14875:1;14868:15;14902:4;14899:1;14892:15;14919:185;14959:1;14976:20;14994:1;14976:20;:::i;:::-;14971:25;;15010:20;15028:1;15010:20;:::i;:::-;15005:25;;15049:1;15039:35;;15054:18;;:::i;:::-;15039:35;15096:1;15093;15089:9;15084:14;;14919:185;;;;:::o;15110:240::-;15250:34;15246:1;15238:6;15234:14;15227:58;15319:23;15314:2;15306:6;15302:15;15295:48;15110:240;:::o;15356:366::-;15498:3;15519:67;15583:2;15578:3;15519:67;:::i;:::-;15512:74;;15595:93;15684:3;15595:93;:::i;:::-;15713:2;15708:3;15704:12;15697:19;;15356:366;;;:::o;15728:419::-;15894:4;15932:2;15921:9;15917:18;15909:26;;15981:9;15975:4;15971:20;15967:1;15956:9;15952:17;15945:47;16009:131;16135:4;16009:131;:::i;:::-;16001:139;;15728:419;;;:::o;16153:239::-;16293:34;16289:1;16281:6;16277:14;16270:58;16362:22;16357:2;16349:6;16345:15;16338:47;16153:239;:::o;16398:366::-;16540:3;16561:67;16625:2;16620:3;16561:67;:::i;:::-;16554:74;;16637:93;16726:3;16637:93;:::i;:::-;16755:2;16750:3;16746:12;16739:19;;16398:366;;;:::o;16770:419::-;16936:4;16974:2;16963:9;16959:18;16951:26;;17023:9;17017:4;17013:20;17009:1;16998:9;16994:17;16987:47;17051:131;17177:4;17051:131;:::i;:::-;17043:139;;16770:419;;;:::o;17195:191::-;17235:3;17254:20;17272:1;17254:20;:::i;:::-;17249:25;;17288:20;17306:1;17288:20;:::i;:::-;17283:25;;17331:1;17328;17324:9;17317:16;;17352:3;17349:1;17346:10;17343:36;;;17359:18;;:::i;:::-;17343:36;17195:191;;;;:::o;17392:244::-;17532:34;17528:1;17520:6;17516:14;17509:58;17601:27;17596:2;17588:6;17584:15;17577:52;17392:244;:::o;17642:366::-;17784:3;17805:67;17869:2;17864:3;17805:67;:::i;:::-;17798:74;;17881:93;17970:3;17881:93;:::i;:::-;17999:2;17994:3;17990:12;17983:19;;17642:366;;;:::o;18014:419::-;18180:4;18218:2;18207:9;18203:18;18195:26;;18267:9;18261:4;18257:20;18253:1;18242:9;18238:17;18231:47;18295:131;18421:4;18295:131;:::i;:::-;18287:139;;18014:419;;;:::o;18439:102::-;18481:8;18528:5;18525:1;18521:13;18500:34;;18439:102;;;:::o;18547:848::-;18608:5;18615:4;18639:6;18630:15;;18663:5;18654:14;;18677:712;18698:1;18688:8;18685:15;18677:712;;;18793:4;18788:3;18784:14;18778:4;18775:24;18772:50;;;18802:18;;:::i;:::-;18772:50;18852:1;18842:8;18838:16;18835:451;;;19267:4;19260:5;19256:16;19247:25;;18835:451;19317:4;19311;19307:15;19299:23;;19347:32;19370:8;19347:32;:::i;:::-;19335:44;;18677:712;;;18547:848;;;;;;;:::o;19401:1073::-;19455:5;19646:8;19636:40;;19667:1;19658:10;;19669:5;;19636:40;19695:4;19685:36;;19712:1;19703:10;;19714:5;;19685:36;19781:4;19829:1;19824:27;;;;19865:1;19860:191;;;;19774:277;;19824:27;19842:1;19833:10;;19844:5;;;19860:191;19905:3;19895:8;19892:17;19889:43;;;19912:18;;:::i;:::-;19889:43;19961:8;19958:1;19954:16;19945:25;;19996:3;19989:5;19986:14;19983:40;;;20003:18;;:::i;:::-;19983:40;20036:5;;;19774:277;;20160:2;20150:8;20147:16;20141:3;20135:4;20132:13;20128:36;20110:2;20100:8;20097:16;20092:2;20086:4;20083:12;20079:35;20063:111;20060:246;;;20216:8;20210:4;20206:19;20197:28;;20251:3;20244:5;20241:14;20238:40;;;20258:18;;:::i;:::-;20238:40;20291:5;;20060:246;20331:42;20369:3;20359:8;20353:4;20350:1;20331:42;:::i;:::-;20316:57;;;;20405:4;20400:3;20396:14;20389:5;20386:25;20383:51;;;20414:18;;:::i;:::-;20383:51;20463:4;20456:5;20452:16;20443:25;;19401:1073;;;;;;:::o;20480:281::-;20538:5;20562:23;20580:4;20562:23;:::i;:::-;20554:31;;20606:25;20622:8;20606:25;:::i;:::-;20594:37;;20650:104;20687:66;20677:8;20671:4;20650:104;:::i;:::-;20641:113;;20480:281;;;;:::o;20767:234::-;20907:34;20903:1;20895:6;20891:14;20884:58;20976:17;20971:2;20963:6;20959:15;20952:42;20767:234;:::o;21007:366::-;21149:3;21170:67;21234:2;21229:3;21170:67;:::i;:::-;21163:74;;21246:93;21335:3;21246:93;:::i;:::-;21364:2;21359:3;21355:12;21348:19;;21007:366;;;:::o;21379:419::-;21545:4;21583:2;21572:9;21568:18;21560:26;;21632:9;21626:4;21622:20;21618:1;21607:9;21603:17;21596:47;21660:131;21786:4;21660:131;:::i;:::-;21652:139;;21379:419;;;:::o;21804:232::-;21944:34;21940:1;21932:6;21928:14;21921:58;22013:15;22008:2;22000:6;21996:15;21989:40;21804:232;:::o;22042:366::-;22184:3;22205:67;22269:2;22264:3;22205:67;:::i;:::-;22198:74;;22281:93;22370:3;22281:93;:::i;:::-;22399:2;22394:3;22390:12;22383:19;;22042:366;;;:::o;22414:419::-;22580:4;22618:2;22607:9;22603:18;22595:26;;22667:9;22661:4;22657:20;22653:1;22642:9;22638:17;22631:47;22695:131;22821:4;22695:131;:::i;:::-;22687:139;;22414:419;;;:::o;22839:180::-;22887:77;22884:1;22877:88;22984:4;22981:1;22974:15;23008:4;23005:1;22998:15;23025:181;23165:33;23161:1;23153:6;23149:14;23142:57;23025:181;:::o;23212:366::-;23354:3;23375:67;23439:2;23434:3;23375:67;:::i;:::-;23368:74;;23451:93;23540:3;23451:93;:::i;:::-;23569:2;23564:3;23560:12;23553:19;;23212:366;;;:::o;23584:419::-;23750:4;23788:2;23777:9;23773:18;23765:26;;23837:9;23831:4;23827:20;23823:1;23812:9;23808:17;23801:47;23865:131;23991:4;23865:131;:::i;:::-;23857:139;;23584:419;;;:::o;24009:178::-;24149:30;24145:1;24137:6;24133:14;24126:54;24009:178;:::o;24193:366::-;24335:3;24356:67;24420:2;24415:3;24356:67;:::i;:::-;24349:74;;24432:93;24521:3;24432:93;:::i;:::-;24550:2;24545:3;24541:12;24534:19;;24193:366;;;:::o;24565:419::-;24731:4;24769:2;24758:9;24754:18;24746:26;;24818:9;24812:4;24808:20;24804:1;24793:9;24789:17;24782:47;24846:131;24972:4;24846:131;:::i;:::-;24838:139;;24565:419;;;:::o;24990:170::-;25130:22;25126:1;25118:6;25114:14;25107:46;24990:170;:::o;25166:366::-;25308:3;25329:67;25393:2;25388:3;25329:67;:::i;:::-;25322:74;;25405:93;25494:3;25405:93;:::i;:::-;25523:2;25518:3;25514:12;25507:19;;25166:366;;;:::o;25538:419::-;25704:4;25742:2;25731:9;25727:18;25719:26;;25791:9;25785:4;25781:20;25777:1;25766:9;25762:17;25755:47;25819:131;25945:4;25819:131;:::i;:::-;25811:139;;25538:419;;;:::o;25963:118::-;26050:24;26068:5;26050:24;:::i;:::-;26045:3;26038:37;25963:118;;:::o;26087:664::-;26292:4;26330:3;26319:9;26315:19;26307:27;;26344:71;26412:1;26401:9;26397:17;26388:6;26344:71;:::i;:::-;26425:72;26493:2;26482:9;26478:18;26469:6;26425:72;:::i;:::-;26507;26575:2;26564:9;26560:18;26551:6;26507:72;:::i;:::-;26589;26657:2;26646:9;26642:18;26633:6;26589:72;:::i;:::-;26671:73;26739:3;26728:9;26724:19;26715:6;26671:73;:::i;:::-;26087:664;;;;;;;;:::o;26757:442::-;26906:4;26944:2;26933:9;26929:18;26921:26;;26957:71;27025:1;27014:9;27010:17;27001:6;26957:71;:::i;:::-;27038:72;27106:2;27095:9;27091:18;27082:6;27038:72;:::i;:::-;27120;27188:2;27177:9;27173:18;27164:6;27120:72;:::i;:::-;26757:442;;;;;;:::o;27205:148::-;27307:11;27344:3;27329:18;;27205:148;;;;:::o;27359:214::-;27499:66;27495:1;27487:6;27483:14;27476:90;27359:214;:::o;27579:400::-;27739:3;27760:84;27842:1;27837:3;27760:84;:::i;:::-;27753:91;;27853:93;27942:3;27853:93;:::i;:::-;27971:1;27966:3;27962:11;27955:18;;27579:400;;;:::o;27985:79::-;28024:7;28053:5;28042:16;;27985:79;;;:::o;28070:157::-;28175:45;28195:24;28213:5;28195:24;:::i;:::-;28175:45;:::i;:::-;28170:3;28163:58;28070:157;;:::o;28233:663::-;28474:3;28496:148;28640:3;28496:148;:::i;:::-;28489:155;;28654:75;28725:3;28716:6;28654:75;:::i;:::-;28754:2;28749:3;28745:12;28738:19;;28767:75;28838:3;28829:6;28767:75;:::i;:::-;28867:2;28862:3;28858:12;28851:19;;28887:3;28880:10;;28233:663;;;;;:::o;28902:545::-;29075:4;29113:3;29102:9;29098:19;29090:27;;29127:71;29195:1;29184:9;29180:17;29171:6;29127:71;:::i;:::-;29208:68;29272:2;29261:9;29257:18;29248:6;29208:68;:::i;:::-;29286:72;29354:2;29343:9;29339:18;29330:6;29286:72;:::i;:::-;29368;29436:2;29425:9;29421:18;29412:6;29368:72;:::i;:::-;28902:545;;;;;;;:::o;29453:167::-;29593:19;29589:1;29581:6;29577:14;29570:43;29453:167;:::o;29626:366::-;29768:3;29789:67;29853:2;29848:3;29789:67;:::i;:::-;29782:74;;29865:93;29954:3;29865:93;:::i;:::-;29983:2;29978:3;29974:12;29967:19;;29626:366;;;:::o;29998:419::-;30164:4;30202:2;30191:9;30187:18;30179:26;;30251:9;30245:4;30241:20;30237:1;30226:9;30222:17;30215:47;30279:131;30405:4;30279:131;:::i;:::-;30271:139;;29998:419;;;:::o;30423:167::-;30563:19;30559:1;30551:6;30547:14;30540:43;30423:167;:::o;30596:366::-;30738:3;30759:67;30823:2;30818:3;30759:67;:::i;:::-;30752:74;;30835:93;30924:3;30835:93;:::i;:::-;30953:2;30948:3;30944:12;30937:19;;30596:366;;;:::o;30968:419::-;31134:4;31172:2;31161:9;31157:18;31149:26;;31221:9;31215:4;31211:20;31207:1;31196:9;31192:17;31185:47;31249:131;31375:4;31249:131;:::i;:::-;31241:139;;30968:419;;;:::o;31393:180::-;31533:32;31529:1;31521:6;31517:14;31510:56;31393:180;:::o;31579:366::-;31721:3;31742:67;31806:2;31801:3;31742:67;:::i;:::-;31735:74;;31818:93;31907:3;31818:93;:::i;:::-;31936:2;31931:3;31927:12;31920:19;;31579:366;;;:::o;31951:419::-;32117:4;32155:2;32144:9;32140:18;32132:26;;32204:9;32198:4;32194:20;32190:1;32179:9;32175:17;32168:47;32232:131;32358:4;32232:131;:::i;:::-;32224:139;;31951:419;;;:::o;32376:182::-;32516:34;32512:1;32504:6;32500:14;32493:58;32376:182;:::o;32564:366::-;32706:3;32727:67;32791:2;32786:3;32727:67;:::i;:::-;32720:74;;32803:93;32892:3;32803:93;:::i;:::-;32921:2;32916:3;32912:12;32905:19;;32564:366;;;:::o;32936:419::-;33102:4;33140:2;33129:9;33125:18;33117:26;;33189:9;33183:4;33179:20;33175:1;33164:9;33160:17;33153:47;33217:131;33343:4;33217:131;:::i;:::-;33209:139;;32936:419;;;:::o;33361:177::-;33501:29;33497:1;33489:6;33485:14;33478:53;33361:177;:::o;33544:366::-;33686:3;33707:67;33771:2;33766:3;33707:67;:::i;:::-;33700:74;;33783:93;33872:3;33783:93;:::i;:::-;33901:2;33896:3;33892:12;33885:19;;33544:366;;;:::o;33916:419::-;34082:4;34120:2;34109:9;34105:18;34097:26;;34169:9;34163:4;34159:20;34155:1;34144:9;34140:17;34133:47;34197:131;34323:4;34197:131;:::i;:::-;34189:139;;33916:419;;;:::o;34341:175::-;34481:27;34477:1;34469:6;34465:14;34458:51;34341:175;:::o;34522:366::-;34664:3;34685:67;34749:2;34744:3;34685:67;:::i;:::-;34678:74;;34761:93;34850:3;34761:93;:::i;:::-;34879:2;34874:3;34870:12;34863:19;;34522:366;;;:::o;34894:419::-;35060:4;35098:2;35087:9;35083:18;35075:26;;35147:9;35141:4;35137:20;35133:1;35122:9;35118:17;35111:47;35175:131;35301:4;35175:131;:::i;:::-;35167:139;;34894:419;;;:::o;35319:175::-;35459:27;35455:1;35447:6;35443:14;35436:51;35319:175;:::o;35500:366::-;35642:3;35663:67;35727:2;35722:3;35663:67;:::i;:::-;35656:74;;35739:93;35828:3;35739:93;:::i;:::-;35857:2;35852:3;35848:12;35841:19;;35500:366;;;:::o;35872:419::-;36038:4;36076:2;36065:9;36061:18;36053:26;;36125:9;36119:4;36115:20;36111:1;36100:9;36096:17;36089:47;36153:131;36279:4;36153:131;:::i;:::-;36145:139;;35872:419;;;:::o;36297:173::-;36437:25;36433:1;36425:6;36421:14;36414:49;36297:173;:::o;36476:366::-;36618:3;36639:67;36703:2;36698:3;36639:67;:::i;:::-;36632:74;;36715:93;36804:3;36715:93;:::i;:::-;36833:2;36828:3;36824:12;36817:19;;36476:366;;;:::o;36848:419::-;37014:4;37052:2;37041:9;37037:18;37029:26;;37101:9;37095:4;37091:20;37087:1;37076:9;37072:17;37065:47;37129:131;37255:4;37129:131;:::i;:::-;37121:139;;36848:419;;;:::o;37273:172::-;37413:24;37409:1;37401:6;37397:14;37390:48;37273:172;:::o;37451:366::-;37593:3;37614:67;37678:2;37673:3;37614:67;:::i;:::-;37607:74;;37690:93;37779:3;37690:93;:::i;:::-;37808:2;37803:3;37799:12;37792:19;;37451:366;;;:::o;37823:419::-;37989:4;38027:2;38016:9;38012:18;38004:26;;38076:9;38070:4;38066:20;38062:1;38051:9;38047:17;38040:47;38104:131;38230:4;38104:131;:::i;:::-;38096:139;;37823:419;;;:::o;38248:240::-;38388:34;38384:1;38376:6;38372:14;38365:58;38457:23;38452:2;38444:6;38440:15;38433:48;38248:240;:::o;38494:366::-;38636:3;38657:67;38721:2;38716:3;38657:67;:::i;:::-;38650:74;;38733:93;38822:3;38733:93;:::i;:::-;38851:2;38846:3;38842:12;38835:19;;38494:366;;;:::o;38866:419::-;39032:4;39070:2;39059:9;39055:18;39047:26;;39119:9;39113:4;39109:20;39105:1;39094:9;39090:17;39083:47;39147:131;39273:4;39147:131;:::i;:::-;39139:139;;38866:419;;;:::o;39291:169::-;39431:21;39427:1;39419:6;39415:14;39408:45;39291:169;:::o;39466:366::-;39608:3;39629:67;39693:2;39688:3;39629:67;:::i;:::-;39622:74;;39705:93;39794:3;39705:93;:::i;:::-;39823:2;39818:3;39814:12;39807:19;;39466:366;;;:::o;39838:419::-;40004:4;40042:2;40031:9;40027:18;40019:26;;40091:9;40085:4;40081:20;40077:1;40066:9;40062:17;40055:47;40119:131;40245:4;40119:131;:::i;:::-;40111:139;;39838:419;;;:::o;40263:241::-;40403:34;40399:1;40391:6;40387:14;40380:58;40472:24;40467:2;40459:6;40455:15;40448:49;40263:241;:::o;40510:366::-;40652:3;40673:67;40737:2;40732:3;40673:67;:::i;:::-;40666:74;;40749:93;40838:3;40749:93;:::i;:::-;40867:2;40862:3;40858:12;40851:19;;40510:366;;;:::o;40882:419::-;41048:4;41086:2;41075:9;41071:18;41063:26;;41135:9;41129:4;41125:20;41121:1;41110:9;41106:17;41099:47;41163:131;41289:4;41163:131;:::i;:::-;41155:139;;40882:419;;;:::o;41307:137::-;41361:5;41392:6;41386:13;41377:22;;41408:30;41432:5;41408:30;:::i;:::-;41307:137;;;;:::o;41450:345::-;41517:6;41566:2;41554:9;41545:7;41541:23;41537:32;41534:119;;;41572:79;;:::i;:::-;41534:119;41692:1;41717:61;41770:7;41761:6;41750:9;41746:22;41717:61;:::i;:::-;41707:71;;41663:125;41450:345;;;;:::o;41801:775::-;42034:4;42072:3;42061:9;42057:19;42049:27;;42086:71;42154:1;42143:9;42139:17;42130:6;42086:71;:::i;:::-;42167:72;42235:2;42224:9;42220:18;42211:6;42167:72;:::i;:::-;42249;42317:2;42306:9;42302:18;42293:6;42249:72;:::i;:::-;42331;42399:2;42388:9;42384:18;42375:6;42331:72;:::i;:::-;42413:73;42481:3;42470:9;42466:19;42457:6;42413:73;:::i;:::-;42496;42564:3;42553:9;42549:19;42540:6;42496:73;:::i;:::-;41801:775;;;;;;;;;:::o;42582:170::-;42722:22;42718:1;42710:6;42706:14;42699:46;42582:170;:::o;42758:366::-;42900:3;42921:67;42985:2;42980:3;42921:67;:::i;:::-;42914:74;;42997:93;43086:3;42997:93;:::i;:::-;43115:2;43110:3;43106:12;43099:19;;42758:366;;;:::o;43130:419::-;43296:4;43334:2;43323:9;43319:18;43311:26;;43383:9;43377:4;43373:20;43369:1;43358:9;43354:17;43347:47;43411:131;43537:4;43411:131;:::i;:::-;43403:139;;43130:419;;;:::o;43555:194::-;43595:4;43615:20;43633:1;43615:20;:::i;:::-;43610:25;;43649:20;43667:1;43649:20;:::i;:::-;43644:25;;43693:1;43690;43686:9;43678:17;;43717:1;43711:4;43708:11;43705:37;;;43722:18;;:::i;:::-;43705:37;43555:194;;;;:::o;43755:179::-;43895:31;43891:1;43883:6;43879:14;43872:55;43755:179;:::o;43940:366::-;44082:3;44103:67;44167:2;44162:3;44103:67;:::i;:::-;44096:74;;44179:93;44268:3;44179:93;:::i;:::-;44297:2;44292:3;44288:12;44281:19;;43940:366;;;:::o;44312:419::-;44478:4;44516:2;44505:9;44501:18;44493:26;;44565:9;44559:4;44555:20;44551:1;44540:9;44536:17;44529:47;44593:131;44719:4;44593:131;:::i;:::-;44585:139;;44312:419;;;:::o;44737:177::-;44877:29;44873:1;44865:6;44861:14;44854:53;44737:177;:::o;44920:366::-;45062:3;45083:67;45147:2;45142:3;45083:67;:::i;:::-;45076:74;;45159:93;45248:3;45159:93;:::i;:::-;45277:2;45272:3;45268:12;45261:19;;44920:366;;;:::o;45292:419::-;45458:4;45496:2;45485:9;45481:18;45473:26;;45545:9;45539:4;45535:20;45531:1;45520:9;45516:17;45509:47;45573:131;45699:4;45573:131;:::i;:::-;45565:139;;45292:419;;;:::o;45717:182::-;45857:34;45853:1;45845:6;45841:14;45834:58;45717:182;:::o;45905:366::-;46047:3;46068:67;46132:2;46127:3;46068:67;:::i;:::-;46061:74;;46144:93;46233:3;46144:93;:::i;:::-;46262:2;46257:3;46253:12;46246:19;;45905:366;;;:::o;46277:419::-;46443:4;46481:2;46470:9;46466:18;46458:26;;46530:9;46524:4;46520:20;46516:1;46505:9;46501:17;46494:47;46558:131;46684:4;46558:131;:::i;:::-;46550:139;;46277:419;;;:::o;46702:147::-;46803:11;46840:3;46825:18;;46702:147;;;;:::o;46855:114::-;;:::o;46975:398::-;47134:3;47155:83;47236:1;47231:3;47155:83;:::i;:::-;47148:90;;47247:93;47336:3;47247:93;:::i;:::-;47365:1;47360:3;47356:11;47349:18;;46975:398;;;:::o;47379:379::-;47563:3;47585:147;47728:3;47585:147;:::i;:::-;47578:154;;47749:3;47742:10;;47379:379;;;:::o;47764:180::-;47812:77;47809:1;47802:88;47909:4;47906:1;47899:15;47933:4;47930:1;47923:15;47950:143;48007:5;48038:6;48032:13;48023:22;;48054:33;48081:5;48054:33;:::i;:::-;47950:143;;;;:::o;48099:351::-;48169:6;48218:2;48206:9;48197:7;48193:23;48189:32;48186:119;;;48224:79;;:::i;:::-;48186:119;48344:1;48369:64;48425:7;48416:6;48405:9;48401:22;48369:64;:::i;:::-;48359:74;;48315:128;48099:351;;;;:::o;48456:85::-;48501:7;48530:5;48519:16;;48456:85;;;:::o;48547:158::-;48605:9;48638:61;48656:42;48665:32;48691:5;48665:32;:::i;:::-;48656:42;:::i;:::-;48638:61;:::i;:::-;48625:74;;48547:158;;;:::o;48711:147::-;48806:45;48845:5;48806:45;:::i;:::-;48801:3;48794:58;48711:147;;:::o;48864:114::-;48931:6;48965:5;48959:12;48949:22;;48864:114;;;:::o;48984:184::-;49083:11;49117:6;49112:3;49105:19;49157:4;49152:3;49148:14;49133:29;;48984:184;;;;:::o;49174:132::-;49241:4;49264:3;49256:11;;49294:4;49289:3;49285:14;49277:22;;49174:132;;;:::o;49312:108::-;49389:24;49407:5;49389:24;:::i;:::-;49384:3;49377:37;49312:108;;:::o;49426:179::-;49495:10;49516:46;49558:3;49550:6;49516:46;:::i;:::-;49594:4;49589:3;49585:14;49571:28;;49426:179;;;;:::o;49611:113::-;49681:4;49713;49708:3;49704:14;49696:22;;49611:113;;;:::o;49760:732::-;49879:3;49908:54;49956:5;49908:54;:::i;:::-;49978:86;50057:6;50052:3;49978:86;:::i;:::-;49971:93;;50088:56;50138:5;50088:56;:::i;:::-;50167:7;50198:1;50183:284;50208:6;50205:1;50202:13;50183:284;;;50284:6;50278:13;50311:63;50370:3;50355:13;50311:63;:::i;:::-;50304:70;;50397:60;50450:6;50397:60;:::i;:::-;50387:70;;50243:224;50230:1;50227;50223:9;50218:14;;50183:284;;;50187:14;50483:3;50476:10;;49884:608;;;49760:732;;;;:::o;50498:831::-;50761:4;50799:3;50788:9;50784:19;50776:27;;50813:71;50881:1;50870:9;50866:17;50857:6;50813:71;:::i;:::-;50894:80;50970:2;50959:9;50955:18;50946:6;50894:80;:::i;:::-;51021:9;51015:4;51011:20;51006:2;50995:9;50991:18;50984:48;51049:108;51152:4;51143:6;51049:108;:::i;:::-;51041:116;;51167:72;51235:2;51224:9;51220:18;51211:6;51167:72;:::i;:::-;51249:73;51317:3;51306:9;51302:19;51293:6;51249:73;:::i;:::-;50498:831;;;;;;;;:::o

Swarm Source

ipfs://554e36c365d096049ae19b159f820df1ff0fbb2d2046fc4b0de764750936320b

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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