ETH Price: $3,409.82 (-1.02%)
Gas: 2 Gwei

Contract

0x477461585247D31F8623F7C4744808c4DC9100E4
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Approve202015402024-06-30 2:32:592 days ago1719714779IN
0x47746158...4DC9100E4
0 ETH0.000079021.68196562
Approve202015302024-06-30 2:30:592 days ago1719714659IN
0x47746158...4DC9100E4
0 ETH0.000076981.63853457
Approve201523442024-06-23 5:34:479 days ago1719120887IN
0x47746158...4DC9100E4
0 ETH0.000081242.69820929
Approve201521352024-06-23 4:52:359 days ago1719118355IN
0x47746158...4DC9100E4
0 ETH0.000132822.82700998
Approve201520402024-06-23 4:33:359 days ago1719117215IN
0x47746158...4DC9100E4
0 ETH0.000077792.87244663
Approve201520362024-06-23 4:32:479 days ago1719117167IN
0x47746158...4DC9100E4
0 ETH0.000119842.55078252
Approve201443012024-06-22 2:35:1110 days ago1719023711IN
0x47746158...4DC9100E4
0 ETH0.000122342.59483638
Approve201382602024-06-21 6:19:4711 days ago1718950787IN
0x47746158...4DC9100E4
0 ETH0.000140782.98585763
Approve201177982024-06-18 9:36:5914 days ago1718703419IN
0x47746158...4DC9100E4
0 ETH0.000157616.32320787
Approve201044122024-06-16 12:39:5916 days ago1718541599IN
0x47746158...4DC9100E4
0 ETH0.000173793.68587949
Approve200499952024-06-08 22:08:2324 days ago1717884503IN
0x47746158...4DC9100E4
0 ETH0.000243635.18568213
Approve200067122024-06-02 21:06:2330 days ago1717362383IN
0x47746158...4DC9100E4
0 ETH0.0007402115.69890857
Transfer200061322024-06-02 19:09:2330 days ago1717355363IN
0x47746158...4DC9100E4
0 ETH0.000501867.62144211
Approve199794692024-05-30 1:45:2333 days ago1717033523IN
0x47746158...4DC9100E4
0 ETH0.0005143210.90813052
Approve199474392024-05-25 14:18:3538 days ago1716646715IN
0x47746158...4DC9100E4
0 ETH0.00027715.87688546
Approve198591802024-05-13 6:03:3550 days ago1715580215IN
0x47746158...4DC9100E4
0 ETH0.000098313.94425209
Transfer198211332024-05-07 22:21:2356 days ago1715120483IN
0x47746158...4DC9100E4
0 ETH0.000384875.8448813
Approve198198902024-05-07 18:10:4756 days ago1715105447IN
0x47746158...4DC9100E4
0 ETH0.000132435.31310892
Approve197987592024-05-04 19:14:1159 days ago1714850051IN
0x47746158...4DC9100E4
0 ETH0.000239995.10802487
Approve197630062024-04-29 19:19:1164 days ago1714418351IN
0x47746158...4DC9100E4
0 ETH0.0004758810.09274909
Approve196601652024-04-15 9:57:4778 days ago1713175067IN
0x47746158...4DC9100E4
0 ETH0.0004273815.64880096
Approve196601642024-04-15 9:57:3578 days ago1713175055IN
0x47746158...4DC9100E4
0 ETH0.000708215.00079138
Approve196575472024-04-15 1:09:5979 days ago1713143399IN
0x47746158...4DC9100E4
0 ETH0.000215468.6645006
Approve196067842024-04-07 22:28:1186 days ago1712528891IN
0x47746158...4DC9100E4
0 ETH0.0010301621.84821147
Transfer195459182024-03-30 9:35:2394 days ago1711791323IN
0x47746158...4DC9100E4
0 ETH0.0013320418.85764685
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
201443052024-06-22 2:35:5910 days ago1719023759
0x47746158...4DC9100E4
0.00179072 ETH
201443052024-06-22 2:35:5910 days ago1719023759
0x47746158...4DC9100E4
0.00179072 ETH
196942052024-04-20 4:20:2373 days ago1713586823
0x47746158...4DC9100E4
0.00190308 ETH
196942052024-04-20 4:20:2373 days ago1713586823
0x47746158...4DC9100E4
0.00190308 ETH
191022322024-01-28 3:02:11156 days ago1706410931
0x47746158...4DC9100E4
0.0020448 ETH
191022322024-01-28 3:02:11156 days ago1706410931
0x47746158...4DC9100E4
0.0020448 ETH
186377952023-11-23 23:46:59222 days ago1700783219
0x47746158...4DC9100E4
0.00233154 ETH
186377952023-11-23 23:46:59222 days ago1700783219
0x47746158...4DC9100E4
0.00233154 ETH
182831782023-10-05 8:40:35271 days ago1696495235
0x47746158...4DC9100E4
0.00277911 ETH
182831782023-10-05 8:40:35271 days ago1696495235
0x47746158...4DC9100E4
0.00277911 ETH
181453552023-09-16 1:07:59291 days ago1694826479
0x47746158...4DC9100E4
0.00309094 ETH
181453552023-09-16 1:07:59291 days ago1694826479
0x47746158...4DC9100E4
0.00309094 ETH
180891592023-09-08 3:56:11298 days ago1694145371
0x47746158...4DC9100E4
0.02212106 ETH
180891592023-09-08 3:56:11298 days ago1694145371
0x47746158...4DC9100E4
0.02212106 ETH
180800922023-09-06 21:30:47300 days ago1694035847
0x47746158...4DC9100E4
0.01687341 ETH
180800922023-09-06 21:30:47300 days ago1694035847
0x47746158...4DC9100E4
0.01687341 ETH
180123672023-08-28 9:51:35309 days ago1693216295
0x47746158...4DC9100E4
0.00544808 ETH
180123672023-08-28 9:51:35309 days ago1693216295
0x47746158...4DC9100E4
0.00544808 ETH
179639202023-08-21 15:13:11316 days ago1692630791
0x47746158...4DC9100E4
0.00651292 ETH
179639202023-08-21 15:13:11316 days ago1692630791
0x47746158...4DC9100E4
0.00651292 ETH
179254052023-08-16 5:48:11321 days ago1692164891
0x47746158...4DC9100E4
0.00492657 ETH
179254052023-08-16 5:48:11321 days ago1692164891
0x47746158...4DC9100E4
0.00492657 ETH
179150012023-08-14 18:52:47323 days ago1692039167
0x47746158...4DC9100E4
0.00582959 ETH
179150012023-08-14 18:52:47323 days ago1692039167
0x47746158...4DC9100E4
0.00582959 ETH
179018522023-08-12 22:46:47325 days ago1691880407
0x47746158...4DC9100E4
0.00992812 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BALD

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-30
*/

/**
 
https://t.me/Bald_Portal
https://balderc20.io/
https://twitter.com/BaldERC20_

*/

//  SPDX-License-Identifier: MIT
pragma solidity >=0.8.19;

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

}

abstract contract Ownable is Context {
    address private _owner;

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

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

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

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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

interface IERC20 {

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

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

interface IERC20Metadata is IERC20 {

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

    function name() public view virtual 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 transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

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

library SafeMath {

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

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

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

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 IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    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;

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

contract BALD is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;
    address public lpWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = true;
    bool public swapEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;

    /******************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event LimitsRemoved();

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event devWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event lpWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("BALD", "BALD") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyMarketingFee = 40;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 40;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 420_690_000_000_000  * 1e18;

        maxTransactionAmount = (totalSupply * 1) / 100;
        maxWallet = (totalSupply * 1) / 100;
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0x2D9730dfC65c984549893ffC5c2B2Cb5AB50FBcc); 
        devWallet = address(0x2D9730dfC65c984549893ffC5c2B2Cb5AB50FBcc);
        lpWallet = msg.sender;

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromFees(marketingWallet, true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        excludeFromMaxTransaction(marketingWallet, true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        emit LimitsRemoved();
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 100) / 1e18,
            "Cannot set maxTransactionAmount lower than 1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 100) / 1e18,
            "Cannot set maxWallet lower than 1%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
         require((_marketingFee + _liquidityFee + _devFee) <= 20 ,"Buy fee cant be sent more than 20%");
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
        require((_marketingFee + _liquidityFee + _devFee) <= 20 ,"Sell fee cant be sent more than 20%");
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updateLPWallet(address newLPWallet)
        external
        onlyOwner
    {
        emit lpWalletUpdated(newLPWallet, lpWallet);
        lpWallet = newLPWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        emit devWalletUpdated(newWallet, devWallet);
        devWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    event BoughtEarly(address indexed sniper);

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

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

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

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "Sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDev += (fees * sellDevFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDev += (fees * buyDevFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

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

        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            lpWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDev;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );
        uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;

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

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

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

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":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"lpWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"subtractedValue","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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLPWallet","type":"address"}],"name":"updateLPWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600c5f6101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555034801562000060575f80fd5b506040518060400160405280600481526020017f42414c44000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f42414c44000000000000000000000000000000000000000000000000000000008152508160039081620000de919062000dbf565b508060049081620000f0919062000dbf565b50505062000113620001076200063360201b60201c565b6200063a60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506200013e816001620006fd60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001bc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e2919062000f08565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000248573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200026e919062000f08565b6040518363ffffffff1660e01b81526004016200028d92919062000f49565b6020604051808303815f875af1158015620002aa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002d0919062000f08565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200031860a0516001620006fd60201b60201c565b6200032d60a0516001620007e460201b60201c565b5f602890505f805f602890505f805f6d14bddab3e51a57cff87a50000000905060646001826200035e919062000fa1565b6200036a919062001018565b600981905550606460018262000381919062000fa1565b6200038d919062001018565b600b81905550612710600582620003a5919062000fa1565b620003b1919062001018565b600a8190555086600e8190555085600f8190555084601081905550601054600f54600e54620003e191906200104f565b620003ed91906200104f565b600d819055508360128190555082601381905550816014819055506014546013546012546200041d91906200104f565b6200042991906200104f565b601181905550732d9730dfc65c984549893ffc5c2b2cb5ab50fbcc60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550732d9730dfc65c984549893ffc5c2b2cb5ab50fbcc60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503360085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005396200052b6200088260201b60201c565b6001620008aa60201b60201c565b6200054c306001620008aa60201b60201c565b6200056161dead6001620008aa60201b60201c565b6200059560065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008aa60201b60201c565b620005b7620005a96200088260201b60201c565b6001620006fd60201b60201c565b620005ca306001620006fd60201b60201c565b620005df61dead6001620006fd60201b60201c565b6200061360065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006fd60201b60201c565b620006253382620009e160201b60201c565b5050505050505050620011d8565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200070d6200063360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007336200088260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200078c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200078390620010e7565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008ba6200063360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008e06200088260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200093090620010e7565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009d5919062001123565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a49906200118c565b60405180910390fd5b62000a655f838362000b5160201b60201c565b8060025f82825462000a7891906200104f565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000acc91906200104f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b329190620011bd565b60405180910390a362000b4d5f838362000b5660201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000bd757607f821691505b60208210810362000bed5762000bec62000b92565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000c517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c14565b62000c5d868362000c14565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000ca762000ca162000c9b8462000c75565b62000c7e565b62000c75565b9050919050565b5f819050919050565b62000cc28362000c87565b62000cda62000cd18262000cae565b84845462000c20565b825550505050565b5f90565b62000cf062000ce2565b62000cfd81848462000cb7565b505050565b5b8181101562000d245762000d185f8262000ce6565b60018101905062000d03565b5050565b601f82111562000d735762000d3d8162000bf3565b62000d488462000c05565b8101602085101562000d58578190505b62000d7062000d678562000c05565b83018262000d02565b50505b505050565b5f82821c905092915050565b5f62000d955f198460080262000d78565b1980831691505092915050565b5f62000daf838362000d84565b9150826002028217905092915050565b62000dca8262000b5b565b67ffffffffffffffff81111562000de65762000de562000b65565b5b62000df2825462000bbf565b62000dff82828562000d28565b5f60209050601f83116001811462000e35575f841562000e20578287015190505b62000e2c858262000da2565b86555062000e9b565b601f19841662000e458662000bf3565b5f5b8281101562000e6e5784890151825560018201915060208501945060208101905062000e47565b8683101562000e8e578489015162000e8a601f89168262000d84565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000ed28262000ea7565b9050919050565b62000ee48162000ec6565b811462000eef575f80fd5b50565b5f8151905062000f028162000ed9565b92915050565b5f6020828403121562000f205762000f1f62000ea3565b5b5f62000f2f8482850162000ef2565b91505092915050565b62000f438162000ec6565b82525050565b5f60408201905062000f5e5f83018562000f38565b62000f6d602083018462000f38565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000fad8262000c75565b915062000fba8362000c75565b925082820262000fca8162000c75565b9150828204841483151762000fe45762000fe362000f74565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620010248262000c75565b9150620010318362000c75565b92508262001044576200104362000feb565b5b828204905092915050565b5f6200105b8262000c75565b9150620010688362000c75565b925082820190508082111562001083576200108262000f74565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620010cf60208362001089565b9150620010dc8262001099565b602082019050919050565b5f6020820190508181035f8301526200110081620010c1565b9050919050565b5f8115159050919050565b6200111d8162001107565b82525050565b5f602082019050620011385f83018462001112565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001174601f8362001089565b915062001181826200113e565b602082019050919050565b5f6020820190508181035f830152620011a58162001166565b9050919050565b620011b78162000c75565b82525050565b5f602082019050620011d25f830184620011ac565b92915050565b60805160a051614d72620012245f395f818161119901526118b201525f8181610d71015281816136f5015281816137d4015281816137fb0152818161389101526138b80152614d725ff3fe608060405260043610610338575f3560e01c80638da5cb5b116101aa578063bbc0c742116100f6578063dd62ed3e11610094578063f2fde38b1161006e578063f2fde38b14610c01578063f637434214610c29578063f8b45b0514610c53578063fbc10c5514610c7d5761033f565b8063dd62ed3e14610b71578063e2f4560514610bad578063f11a24d314610bd75761033f565b8063c18bc195116100d0578063c18bc19514610ab9578063c8c8ebe414610ae1578063d257b34f14610b0b578063d85ba06314610b475761033f565b8063bbc0c74214610a3f578063c024666814610a69578063c17b5b8c14610a915761033f565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d714610963578063a9059cbb1461099f578063aacebbe3146109db578063b62496f514610a035761033f565b80639c3b4fdc146108e55780639fccce321461090f578063a0d82dc5146109395761033f565b80638da5cb5b146107ed5780638ea5220f146108175780639213691314610841578063924de9b71461086b57806395d89b41146108935780639a7a23d6146108bd5761033f565b806349bd5a5e11610284578063715018a61161022257806375f0a874116101fc57806375f0a8741461075b5780637bce5a04146107855780638095d564146107af5780638a8c523c146107d75761033f565b8063715018a6146106f3578063751039fc146107095780637571336a146107335761033f565b80636303516c1161025e5780636303516c146106395780636a486a8e146106635780636ddd17131461068d57806370a08231146106b75761033f565b806349bd5a5e146105a95780634a62bb65146105d35780634fbee193146105fd5761033f565b80631a8145bb116102f157806323b872dd116102cb57806323b872dd146104dd57806327c8f83514610519578063313ce56714610543578063395093511461056d5761033f565b80631a8145bb146104615780631f3fed8f1461048b578063203e727e146104b55761033f565b806306fdde0314610343578063095ea7b31461036d57806310d5de53146103a95780631694505e146103e557806318160ddd1461040f5780631816467f146104395761033f565b3661033f57005b5f80fd5b34801561034e575f80fd5b50610357610ca5565b6040516103649190613a0d565b60405180910390f35b348015610378575f80fd5b50610393600480360381019061038e9190613abe565b610d35565b6040516103a09190613b16565b60405180910390f35b3480156103b4575f80fd5b506103cf60048036038101906103ca9190613b2f565b610d52565b6040516103dc9190613b16565b60405180910390f35b3480156103f0575f80fd5b506103f9610d6f565b6040516104069190613bb5565b60405180910390f35b34801561041a575f80fd5b50610423610d93565b6040516104309190613bdd565b60405180910390f35b348015610444575f80fd5b5061045f600480360381019061045a9190613b2f565b610d9c565b005b34801561046c575f80fd5b50610475610ed6565b6040516104829190613bdd565b60405180910390f35b348015610496575f80fd5b5061049f610edc565b6040516104ac9190613bdd565b60405180910390f35b3480156104c0575f80fd5b506104db60048036038101906104d69190613bf6565b610ee2565b005b3480156104e8575f80fd5b5061050360048036038101906104fe9190613c21565b610ff0565b6040516105109190613b16565b60405180910390f35b348015610524575f80fd5b5061052d6110e2565b60405161053a9190613c80565b60405180910390f35b34801561054e575f80fd5b506105576110e8565b6040516105649190613cb4565b60405180910390f35b348015610578575f80fd5b50610593600480360381019061058e9190613abe565b6110f0565b6040516105a09190613b16565b60405180910390f35b3480156105b4575f80fd5b506105bd611197565b6040516105ca9190613c80565b60405180910390f35b3480156105de575f80fd5b506105e76111bb565b6040516105f49190613b16565b60405180910390f35b348015610608575f80fd5b50610623600480360381019061061e9190613b2f565b6111cd565b6040516106309190613b16565b60405180910390f35b348015610644575f80fd5b5061064d61121f565b60405161065a9190613c80565b60405180910390f35b34801561066e575f80fd5b50610677611244565b6040516106849190613bdd565b60405180910390f35b348015610698575f80fd5b506106a161124a565b6040516106ae9190613b16565b60405180910390f35b3480156106c2575f80fd5b506106dd60048036038101906106d89190613b2f565b61125d565b6040516106ea9190613bdd565b60405180910390f35b3480156106fe575f80fd5b506107076112a2565b005b348015610714575f80fd5b5061071d611329565b60405161072a9190613b16565b60405180910390f35b34801561073e575f80fd5b5061075960048036038101906107549190613cf7565b6113f2565b005b348015610766575f80fd5b5061076f6114c6565b60405161077c9190613c80565b60405180910390f35b348015610790575f80fd5b506107996114eb565b6040516107a69190613bdd565b60405180910390f35b3480156107ba575f80fd5b506107d560048036038101906107d09190613d35565b6114f1565b005b3480156107e2575f80fd5b506107eb611604565b005b3480156107f8575f80fd5b506108016116b8565b60405161080e9190613c80565b60405180910390f35b348015610822575f80fd5b5061082b6116e0565b6040516108389190613c80565b60405180910390f35b34801561084c575f80fd5b50610855611705565b6040516108629190613bdd565b60405180910390f35b348015610876575f80fd5b50610891600480360381019061088c9190613d85565b61170b565b005b34801561089e575f80fd5b506108a76117a4565b6040516108b49190613a0d565b60405180910390f35b3480156108c8575f80fd5b506108e360048036038101906108de9190613cf7565b611834565b005b3480156108f0575f80fd5b506108f961194c565b6040516109069190613bdd565b60405180910390f35b34801561091a575f80fd5b50610923611952565b6040516109309190613bdd565b60405180910390f35b348015610944575f80fd5b5061094d611958565b60405161095a9190613bdd565b60405180910390f35b34801561096e575f80fd5b5061098960048036038101906109849190613abe565b61195e565b6040516109969190613b16565b60405180910390f35b3480156109aa575f80fd5b506109c560048036038101906109c09190613abe565b611a44565b6040516109d29190613b16565b60405180910390f35b3480156109e6575f80fd5b50610a0160048036038101906109fc9190613b2f565b611a61565b005b348015610a0e575f80fd5b50610a296004803603810190610a249190613b2f565b611b9b565b604051610a369190613b16565b60405180910390f35b348015610a4a575f80fd5b50610a53611bb8565b604051610a609190613b16565b60405180910390f35b348015610a74575f80fd5b50610a8f6004803603810190610a8a9190613cf7565b611bcb565b005b348015610a9c575f80fd5b50610ab76004803603810190610ab29190613d35565b611ced565b005b348015610ac4575f80fd5b50610adf6004803603810190610ada9190613bf6565b611e00565b005b348015610aec575f80fd5b50610af5611f0e565b604051610b029190613bdd565b60405180910390f35b348015610b16575f80fd5b50610b316004803603810190610b2c9190613bf6565b611f14565b604051610b3e9190613b16565b60405180910390f35b348015610b52575f80fd5b50610b5b612068565b604051610b689190613bdd565b60405180910390f35b348015610b7c575f80fd5b50610b976004803603810190610b929190613db0565b61206e565b604051610ba49190613bdd565b60405180910390f35b348015610bb8575f80fd5b50610bc16120f0565b604051610bce9190613bdd565b60405180910390f35b348015610be2575f80fd5b50610beb6120f6565b604051610bf89190613bdd565b60405180910390f35b348015610c0c575f80fd5b50610c276004803603810190610c229190613b2f565b6120fc565b005b348015610c34575f80fd5b50610c3d6121f2565b604051610c4a9190613bdd565b60405180910390f35b348015610c5e575f80fd5b50610c676121f8565b604051610c749190613bdd565b60405180910390f35b348015610c88575f80fd5b50610ca36004803603810190610c9e9190613b2f565b6121fe565b005b606060038054610cb490613e1b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce090613e1b565b8015610d2b5780601f10610d0257610100808354040283529160200191610d2b565b820191905f5260205f20905b815481529060010190602001808311610d0e57829003601f168201915b5050505050905090565b5f610d48610d41612338565b848461233f565b6001905092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b610da4612338565b73ffffffffffffffffffffffffffffffffffffffff16610dc26116b8565b73ffffffffffffffffffffffffffffffffffffffff1614610e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0f90613e95565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60155481565b610eea612338565b73ffffffffffffffffffffffffffffffffffffffff16610f086116b8565b73ffffffffffffffffffffffffffffffffffffffff1614610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5590613e95565b60405180910390fd5b670de0b6b3a764000060646001610f73610d93565b610f7d9190613ee0565b610f879190613f4e565b610f919190613f4e565b811015610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90613fee565b60405180910390fd5b670de0b6b3a764000081610fe79190613ee0565b60098190555050565b5f610ffc848484612502565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f611043612338565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b99061407c565b60405180910390fd5b6110d6856110ce612338565b85840361233f565b60019150509392505050565b61dead81565b5f6012905090565b5f61118d6110fc612338565b848460015f611109612338565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611188919061409a565b61233f565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112aa612338565b73ffffffffffffffffffffffffffffffffffffffff166112c86116b8565b73ffffffffffffffffffffffffffffffffffffffff161461131e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131590613e95565b60405180910390fd5b6113275f612f92565b565b5f611332612338565b73ffffffffffffffffffffffffffffffffffffffff166113506116b8565b73ffffffffffffffffffffffffffffffffffffffff16146113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d90613e95565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b6113fa612338565b73ffffffffffffffffffffffffffffffffffffffff166114186116b8565b73ffffffffffffffffffffffffffffffffffffffff161461146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146590613e95565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6114f9612338565b73ffffffffffffffffffffffffffffffffffffffff166115176116b8565b73ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490613e95565b60405180910390fd5b601481838561157c919061409a565b611586919061409a565b11156115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be9061413d565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e546115ef919061409a565b6115f9919061409a565b600d81905550505050565b61160c612338565b73ffffffffffffffffffffffffffffffffffffffff1661162a6116b8565b73ffffffffffffffffffffffffffffffffffffffff1614611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790613e95565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b611713612338565b73ffffffffffffffffffffffffffffffffffffffff166117316116b8565b73ffffffffffffffffffffffffffffffffffffffff1614611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e90613e95565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546117b390613e1b565b80601f01602080910402602001604051908101604052809291908181526020018280546117df90613e1b565b801561182a5780601f106118015761010080835404028352916020019161182a565b820191905f5260205f20905b81548152906001019060200180831161180d57829003601f168201915b5050505050905090565b61183c612338565b73ffffffffffffffffffffffffffffffffffffffff1661185a6116b8565b73ffffffffffffffffffffffffffffffffffffffff16146118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a790613e95565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361193e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611935906141cb565b60405180910390fd5b6119488282613055565b5050565b60105481565b60175481565b60145481565b5f8060015f61196b612338565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c90614259565b60405180910390fd5b611a39611a30612338565b8585840361233f565b600191505092915050565b5f611a57611a50612338565b8484612502565b6001905092915050565b611a69612338565b73ffffffffffffffffffffffffffffffffffffffff16611a876116b8565b73ffffffffffffffffffffffffffffffffffffffff1614611add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad490613e95565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611bd3612338565b73ffffffffffffffffffffffffffffffffffffffff16611bf16116b8565b73ffffffffffffffffffffffffffffffffffffffff1614611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e90613e95565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ce19190613b16565b60405180910390a25050565b611cf5612338565b73ffffffffffffffffffffffffffffffffffffffff16611d136116b8565b73ffffffffffffffffffffffffffffffffffffffff1614611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6090613e95565b60405180910390fd5b6014818385611d78919061409a565b611d82919061409a565b1115611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba906142e7565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254611deb919061409a565b611df5919061409a565b601181905550505050565b611e08612338565b73ffffffffffffffffffffffffffffffffffffffff16611e266116b8565b73ffffffffffffffffffffffffffffffffffffffff1614611e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7390613e95565b60405180910390fd5b670de0b6b3a764000060646001611e91610d93565b611e9b9190613ee0565b611ea59190613f4e565b611eaf9190613f4e565b811015611ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee890614375565b60405180910390fd5b670de0b6b3a764000081611f059190613ee0565b600b8190555050565b60095481565b5f611f1d612338565b73ffffffffffffffffffffffffffffffffffffffff16611f3b6116b8565b73ffffffffffffffffffffffffffffffffffffffff1614611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890613e95565b60405180910390fd5b620186a06001611f9f610d93565b611fa99190613ee0565b611fb39190613f4e565b821015611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90614403565b60405180910390fd5b6103e86005612002610d93565b61200c9190613ee0565b6120169190613f4e565b821115612058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204f90614491565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b600f5481565b612104612338565b73ffffffffffffffffffffffffffffffffffffffff166121226116b8565b73ffffffffffffffffffffffffffffffffffffffff1614612178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216f90613e95565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd9061451f565b60405180910390fd5b6121ef81612f92565b50565b60135481565b600b5481565b612206612338565b73ffffffffffffffffffffffffffffffffffffffff166122246116b8565b73ffffffffffffffffffffffffffffffffffffffff161461227a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227190613e95565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a4906145ad565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361241b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124129061463b565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124f59190613bdd565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612570576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612567906146c9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d590614757565b60405180910390fd5b5f81036125f5576125f083835f6130f3565b612f8d565b600c5f9054906101000a900460ff1615612ad9576126116116b8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561267f575061264f6116b8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126b757505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126f1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561270a5750600560149054906101000a900460ff16155b15612ad857600c60019054906101000a900460ff166127fe5760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127be575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6127fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f4906147bf565b60405180910390fd5b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561289b575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612942576009548111156128e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dc9061484d565b60405180910390fd5b600b546128f18361125d565b826128fc919061409a565b111561293d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612934906148b5565b60405180910390fd5b612ad7565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129df575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a2e57600954811115612a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2090614943565b60405180910390fd5b612ad6565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612ad557600b54612a888361125d565b82612a93919061409a565b1115612ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acb906148b5565b60405180910390fd5b5b5b5b5b5b5f612ae33061125d565b90505f600a548210159050808015612b075750600c60029054906101000a900460ff165b8015612b205750600560149054906101000a900460ff16155b8015612b735750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612bc6575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c19575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c5c576001600560146101000a81548160ff021916908315150217905550612c41613368565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d0b575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612d14575f90505b5f8115612f7d57601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d7257505f601154115b15612e3c57612d9f6064612d916011548861360f90919063ffffffff16565b61362490919063ffffffff16565b905060115460135482612db29190613ee0565b612dbc9190613f4e565b60165f828254612dcc919061409a565b9250508190555060115460145482612de49190613ee0565b612dee9190613f4e565b60175f828254612dfe919061409a565b9250508190555060115460125482612e169190613ee0565b612e209190613f4e565b60155f828254612e30919061409a565b92505081905550612f5a565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e9357505f600d54115b15612f5957612ec06064612eb2600d548861360f90919063ffffffff16565b61362490919063ffffffff16565b9050600d54600f5482612ed39190613ee0565b612edd9190613f4e565b60165f828254612eed919061409a565b92505081905550600d5460105482612f059190613ee0565b612f0f9190613f4e565b60175f828254612f1f919061409a565b92505081905550600d54600e5482612f379190613ee0565b612f419190613f4e565b60155f828254612f51919061409a565b925050819055505b5b5f811115612f6e57612f6d8730836130f3565b5b8085612f7a9190614961565b94505b612f888787876130f3565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613161576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613158906146c9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c690614757565b60405180910390fd5b6131da838383613639565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561325d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325490614a04565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546132eb919061409a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161334f9190613bdd565b60405180910390a361336284848461363e565b50505050565b5f6133723061125d565b90505f601754601554601654613388919061409a565b613392919061409a565b90505f808314806133a257505f82145b156133af5750505061360d565b5f600283601654866133c19190613ee0565b6133cb9190613f4e565b6133d59190613f4e565b90505f6133eb828661364390919063ffffffff16565b90505f4790506133fa82613658565b5f61340e824761364390919063ffffffff16565b90505f6134388761342a6015548561360f90919063ffffffff16565b61362490919063ffffffff16565b90505f613462886134546017548661360f90919063ffffffff16565b61362490919063ffffffff16565b90505f8183856134729190614961565b61347c9190614961565b90505f6016819055505f6015819055505f60178190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516134d890614a4f565b5f6040518083038185875af1925050503d805f8114613512576040519150601f19603f3d011682016040523d82523d5f602084013e613517565b606091505b5050809850505f8711801561352b57505f81115b156135785761353a878261388b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260165460405161356f93929190614a63565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135bd90614a4f565b5f6040518083038185875af1925050503d805f81146135f7576040519150601f19603f3d011682016040523d82523d5f602084013e6135fc565b606091505b505080985050505050505050505050505b565b5f818361361c9190613ee0565b905092915050565b5f81836136319190613f4e565b905092915050565b505050565b505050565b5f81836136509190614961565b905092915050565b5f600267ffffffffffffffff81111561367457613673614a98565b5b6040519080825280602002602001820160405280156136a25781602001602082028036833780820191505090505b50905030815f815181106136b9576136b8614ac5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561375c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137809190614b06565b8160018151811061379457613793614ac5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137f9307f00000000000000000000000000000000000000000000000000000000000000008461233f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161385a959493929190614c21565b5f604051808303815f87803b158015613871575f80fd5b505af1158015613883573d5f803e3d5ffd5b505050505050565b6138b6307f00000000000000000000000000000000000000000000000000000000000000008461233f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161393b96959493929190614c79565b60606040518083038185885af1158015613957573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061397c9190614cec565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156139ba57808201518184015260208101905061399f565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6139df82613983565b6139e9818561398d565b93506139f981856020860161399d565b613a02816139c5565b840191505092915050565b5f6020820190508181035f830152613a2581846139d5565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613a5a82613a31565b9050919050565b613a6a81613a50565b8114613a74575f80fd5b50565b5f81359050613a8581613a61565b92915050565b5f819050919050565b613a9d81613a8b565b8114613aa7575f80fd5b50565b5f81359050613ab881613a94565b92915050565b5f8060408385031215613ad457613ad3613a2d565b5b5f613ae185828601613a77565b9250506020613af285828601613aaa565b9150509250929050565b5f8115159050919050565b613b1081613afc565b82525050565b5f602082019050613b295f830184613b07565b92915050565b5f60208284031215613b4457613b43613a2d565b5b5f613b5184828501613a77565b91505092915050565b5f819050919050565b5f613b7d613b78613b7384613a31565b613b5a565b613a31565b9050919050565b5f613b8e82613b63565b9050919050565b5f613b9f82613b84565b9050919050565b613baf81613b95565b82525050565b5f602082019050613bc85f830184613ba6565b92915050565b613bd781613a8b565b82525050565b5f602082019050613bf05f830184613bce565b92915050565b5f60208284031215613c0b57613c0a613a2d565b5b5f613c1884828501613aaa565b91505092915050565b5f805f60608486031215613c3857613c37613a2d565b5b5f613c4586828701613a77565b9350506020613c5686828701613a77565b9250506040613c6786828701613aaa565b9150509250925092565b613c7a81613a50565b82525050565b5f602082019050613c935f830184613c71565b92915050565b5f60ff82169050919050565b613cae81613c99565b82525050565b5f602082019050613cc75f830184613ca5565b92915050565b613cd681613afc565b8114613ce0575f80fd5b50565b5f81359050613cf181613ccd565b92915050565b5f8060408385031215613d0d57613d0c613a2d565b5b5f613d1a85828601613a77565b9250506020613d2b85828601613ce3565b9150509250929050565b5f805f60608486031215613d4c57613d4b613a2d565b5b5f613d5986828701613aaa565b9350506020613d6a86828701613aaa565b9250506040613d7b86828701613aaa565b9150509250925092565b5f60208284031215613d9a57613d99613a2d565b5b5f613da784828501613ce3565b91505092915050565b5f8060408385031215613dc657613dc5613a2d565b5b5f613dd385828601613a77565b9250506020613de485828601613a77565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613e3257607f821691505b602082108103613e4557613e44613dee565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613e7f60208361398d565b9150613e8a82613e4b565b602082019050919050565b5f6020820190508181035f830152613eac81613e73565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613eea82613a8b565b9150613ef583613a8b565b9250828202613f0381613a8b565b91508282048414831517613f1a57613f19613eb3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f5882613a8b565b9150613f6383613a8b565b925082613f7357613f72613f21565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b5f613fd8602d8361398d565b9150613fe382613f7e565b604082019050919050565b5f6020820190508181035f83015261400581613fcc565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f61406660288361398d565b91506140718261400c565b604082019050919050565b5f6020820190508181035f8301526140938161405a565b9050919050565b5f6140a482613a8b565b91506140af83613a8b565b92508282019050808211156140c7576140c6613eb3565b5b92915050565b7f427579206665652063616e742062652073656e74206d6f7265207468616e20325f8201527f3025000000000000000000000000000000000000000000000000000000000000602082015250565b5f61412760228361398d565b9150614132826140cd565b604082019050919050565b5f6020820190508181035f8301526141548161411b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6141b560398361398d565b91506141c08261415b565b604082019050919050565b5f6020820190508181035f8301526141e2816141a9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61424360258361398d565b915061424e826141e9565b604082019050919050565b5f6020820190508181035f83015261427081614237565b9050919050565b7f53656c6c206665652063616e742062652073656e74206d6f7265207468616e205f8201527f3230250000000000000000000000000000000000000000000000000000000000602082015250565b5f6142d160238361398d565b91506142dc82614277565b604082019050919050565b5f6020820190508181035f8301526142fe816142c5565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f61435f60228361398d565b915061436a82614305565b604082019050919050565b5f6020820190508181035f83015261438c81614353565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6143ed60358361398d565b91506143f882614393565b604082019050919050565b5f6020820190508181035f83015261441a816143e1565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f61447b60348361398d565b915061448682614421565b604082019050919050565b5f6020820190508181035f8301526144a88161446f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61450960268361398d565b9150614514826144af565b604082019050919050565b5f6020820190508181035f830152614536816144fd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61459760248361398d565b91506145a28261453d565b604082019050919050565b5f6020820190508181035f8301526145c48161458b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61462560228361398d565b9150614630826145cb565b604082019050919050565b5f6020820190508181035f83015261465281614619565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6146b360258361398d565b91506146be82614659565b604082019050919050565b5f6020820190508181035f8301526146e0816146a7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61474160238361398d565b915061474c826146e7565b604082019050919050565b5f6020820190508181035f83015261476e81614735565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6147a960168361398d565b91506147b482614775565b602082019050919050565b5f6020820190508181035f8301526147d68161479d565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61483760358361398d565b9150614842826147dd565b604082019050919050565b5f6020820190508181035f8301526148648161482b565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61489f60138361398d565b91506148aa8261486b565b602082019050919050565b5f6020820190508181035f8301526148cc81614893565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61492d60368361398d565b9150614938826148d3565b604082019050919050565b5f6020820190508181035f83015261495a81614921565b9050919050565b5f61496b82613a8b565b915061497683613a8b565b925082820390508181111561498e5761498d613eb3565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6149ee60268361398d565b91506149f982614994565b604082019050919050565b5f6020820190508181035f830152614a1b816149e2565b9050919050565b5f81905092915050565b50565b5f614a3a5f83614a22565b9150614a4582614a2c565b5f82019050919050565b5f614a5982614a2f565b9150819050919050565b5f606082019050614a765f830186613bce565b614a836020830185613bce565b614a906040830184613bce565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614b0081613a61565b92915050565b5f60208284031215614b1b57614b1a613a2d565b5b5f614b2884828501614af2565b91505092915050565b5f819050919050565b5f614b54614b4f614b4a84614b31565b613b5a565b613a8b565b9050919050565b614b6481614b3a565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b9c81613a50565b82525050565b5f614bad8383614b93565b60208301905092915050565b5f602082019050919050565b5f614bcf82614b6a565b614bd98185614b74565b9350614be483614b84565b805f5b83811015614c14578151614bfb8882614ba2565b9750614c0683614bb9565b925050600181019050614be7565b5085935050505092915050565b5f60a082019050614c345f830188613bce565b614c416020830187614b5b565b8181036040830152614c538186614bc5565b9050614c626060830185613c71565b614c6f6080830184613bce565b9695505050505050565b5f60c082019050614c8c5f830189613c71565b614c996020830188613bce565b614ca66040830187614b5b565b614cb36060830186614b5b565b614cc06080830185613c71565b614ccd60a0830184613bce565b979650505050505050565b5f81519050614ce681613a94565b92915050565b5f805f60608486031215614d0357614d02613a2d565b5b5f614d1086828701614cd8565b9350506020614d2186828701614cd8565b9250506040614d3286828701614cd8565b915050925092509256fea2646970667358221220bae9406685dbddf9229b32d84b9b80ef252b49534080434bca37ccb2deb7afaa64736f6c63430008150033

Deployed Bytecode

0x608060405260043610610338575f3560e01c80638da5cb5b116101aa578063bbc0c742116100f6578063dd62ed3e11610094578063f2fde38b1161006e578063f2fde38b14610c01578063f637434214610c29578063f8b45b0514610c53578063fbc10c5514610c7d5761033f565b8063dd62ed3e14610b71578063e2f4560514610bad578063f11a24d314610bd75761033f565b8063c18bc195116100d0578063c18bc19514610ab9578063c8c8ebe414610ae1578063d257b34f14610b0b578063d85ba06314610b475761033f565b8063bbc0c74214610a3f578063c024666814610a69578063c17b5b8c14610a915761033f565b80639c3b4fdc11610163578063a457c2d71161013d578063a457c2d714610963578063a9059cbb1461099f578063aacebbe3146109db578063b62496f514610a035761033f565b80639c3b4fdc146108e55780639fccce321461090f578063a0d82dc5146109395761033f565b80638da5cb5b146107ed5780638ea5220f146108175780639213691314610841578063924de9b71461086b57806395d89b41146108935780639a7a23d6146108bd5761033f565b806349bd5a5e11610284578063715018a61161022257806375f0a874116101fc57806375f0a8741461075b5780637bce5a04146107855780638095d564146107af5780638a8c523c146107d75761033f565b8063715018a6146106f3578063751039fc146107095780637571336a146107335761033f565b80636303516c1161025e5780636303516c146106395780636a486a8e146106635780636ddd17131461068d57806370a08231146106b75761033f565b806349bd5a5e146105a95780634a62bb65146105d35780634fbee193146105fd5761033f565b80631a8145bb116102f157806323b872dd116102cb57806323b872dd146104dd57806327c8f83514610519578063313ce56714610543578063395093511461056d5761033f565b80631a8145bb146104615780631f3fed8f1461048b578063203e727e146104b55761033f565b806306fdde0314610343578063095ea7b31461036d57806310d5de53146103a95780631694505e146103e557806318160ddd1461040f5780631816467f146104395761033f565b3661033f57005b5f80fd5b34801561034e575f80fd5b50610357610ca5565b6040516103649190613a0d565b60405180910390f35b348015610378575f80fd5b50610393600480360381019061038e9190613abe565b610d35565b6040516103a09190613b16565b60405180910390f35b3480156103b4575f80fd5b506103cf60048036038101906103ca9190613b2f565b610d52565b6040516103dc9190613b16565b60405180910390f35b3480156103f0575f80fd5b506103f9610d6f565b6040516104069190613bb5565b60405180910390f35b34801561041a575f80fd5b50610423610d93565b6040516104309190613bdd565b60405180910390f35b348015610444575f80fd5b5061045f600480360381019061045a9190613b2f565b610d9c565b005b34801561046c575f80fd5b50610475610ed6565b6040516104829190613bdd565b60405180910390f35b348015610496575f80fd5b5061049f610edc565b6040516104ac9190613bdd565b60405180910390f35b3480156104c0575f80fd5b506104db60048036038101906104d69190613bf6565b610ee2565b005b3480156104e8575f80fd5b5061050360048036038101906104fe9190613c21565b610ff0565b6040516105109190613b16565b60405180910390f35b348015610524575f80fd5b5061052d6110e2565b60405161053a9190613c80565b60405180910390f35b34801561054e575f80fd5b506105576110e8565b6040516105649190613cb4565b60405180910390f35b348015610578575f80fd5b50610593600480360381019061058e9190613abe565b6110f0565b6040516105a09190613b16565b60405180910390f35b3480156105b4575f80fd5b506105bd611197565b6040516105ca9190613c80565b60405180910390f35b3480156105de575f80fd5b506105e76111bb565b6040516105f49190613b16565b60405180910390f35b348015610608575f80fd5b50610623600480360381019061061e9190613b2f565b6111cd565b6040516106309190613b16565b60405180910390f35b348015610644575f80fd5b5061064d61121f565b60405161065a9190613c80565b60405180910390f35b34801561066e575f80fd5b50610677611244565b6040516106849190613bdd565b60405180910390f35b348015610698575f80fd5b506106a161124a565b6040516106ae9190613b16565b60405180910390f35b3480156106c2575f80fd5b506106dd60048036038101906106d89190613b2f565b61125d565b6040516106ea9190613bdd565b60405180910390f35b3480156106fe575f80fd5b506107076112a2565b005b348015610714575f80fd5b5061071d611329565b60405161072a9190613b16565b60405180910390f35b34801561073e575f80fd5b5061075960048036038101906107549190613cf7565b6113f2565b005b348015610766575f80fd5b5061076f6114c6565b60405161077c9190613c80565b60405180910390f35b348015610790575f80fd5b506107996114eb565b6040516107a69190613bdd565b60405180910390f35b3480156107ba575f80fd5b506107d560048036038101906107d09190613d35565b6114f1565b005b3480156107e2575f80fd5b506107eb611604565b005b3480156107f8575f80fd5b506108016116b8565b60405161080e9190613c80565b60405180910390f35b348015610822575f80fd5b5061082b6116e0565b6040516108389190613c80565b60405180910390f35b34801561084c575f80fd5b50610855611705565b6040516108629190613bdd565b60405180910390f35b348015610876575f80fd5b50610891600480360381019061088c9190613d85565b61170b565b005b34801561089e575f80fd5b506108a76117a4565b6040516108b49190613a0d565b60405180910390f35b3480156108c8575f80fd5b506108e360048036038101906108de9190613cf7565b611834565b005b3480156108f0575f80fd5b506108f961194c565b6040516109069190613bdd565b60405180910390f35b34801561091a575f80fd5b50610923611952565b6040516109309190613bdd565b60405180910390f35b348015610944575f80fd5b5061094d611958565b60405161095a9190613bdd565b60405180910390f35b34801561096e575f80fd5b5061098960048036038101906109849190613abe565b61195e565b6040516109969190613b16565b60405180910390f35b3480156109aa575f80fd5b506109c560048036038101906109c09190613abe565b611a44565b6040516109d29190613b16565b60405180910390f35b3480156109e6575f80fd5b50610a0160048036038101906109fc9190613b2f565b611a61565b005b348015610a0e575f80fd5b50610a296004803603810190610a249190613b2f565b611b9b565b604051610a369190613b16565b60405180910390f35b348015610a4a575f80fd5b50610a53611bb8565b604051610a609190613b16565b60405180910390f35b348015610a74575f80fd5b50610a8f6004803603810190610a8a9190613cf7565b611bcb565b005b348015610a9c575f80fd5b50610ab76004803603810190610ab29190613d35565b611ced565b005b348015610ac4575f80fd5b50610adf6004803603810190610ada9190613bf6565b611e00565b005b348015610aec575f80fd5b50610af5611f0e565b604051610b029190613bdd565b60405180910390f35b348015610b16575f80fd5b50610b316004803603810190610b2c9190613bf6565b611f14565b604051610b3e9190613b16565b60405180910390f35b348015610b52575f80fd5b50610b5b612068565b604051610b689190613bdd565b60405180910390f35b348015610b7c575f80fd5b50610b976004803603810190610b929190613db0565b61206e565b604051610ba49190613bdd565b60405180910390f35b348015610bb8575f80fd5b50610bc16120f0565b604051610bce9190613bdd565b60405180910390f35b348015610be2575f80fd5b50610beb6120f6565b604051610bf89190613bdd565b60405180910390f35b348015610c0c575f80fd5b50610c276004803603810190610c229190613b2f565b6120fc565b005b348015610c34575f80fd5b50610c3d6121f2565b604051610c4a9190613bdd565b60405180910390f35b348015610c5e575f80fd5b50610c676121f8565b604051610c749190613bdd565b60405180910390f35b348015610c88575f80fd5b50610ca36004803603810190610c9e9190613b2f565b6121fe565b005b606060038054610cb490613e1b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce090613e1b565b8015610d2b5780601f10610d0257610100808354040283529160200191610d2b565b820191905f5260205f20905b815481529060010190602001808311610d0e57829003601f168201915b5050505050905090565b5f610d48610d41612338565b848461233f565b6001905092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b610da4612338565b73ffffffffffffffffffffffffffffffffffffffff16610dc26116b8565b73ffffffffffffffffffffffffffffffffffffffff1614610e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0f90613e95565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b60155481565b610eea612338565b73ffffffffffffffffffffffffffffffffffffffff16610f086116b8565b73ffffffffffffffffffffffffffffffffffffffff1614610f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5590613e95565b60405180910390fd5b670de0b6b3a764000060646001610f73610d93565b610f7d9190613ee0565b610f879190613f4e565b610f919190613f4e565b811015610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90613fee565b60405180910390fd5b670de0b6b3a764000081610fe79190613ee0565b60098190555050565b5f610ffc848484612502565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f611043612338565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156110c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b99061407c565b60405180910390fd5b6110d6856110ce612338565b85840361233f565b60019150509392505050565b61dead81565b5f6012905090565b5f61118d6110fc612338565b848460015f611109612338565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611188919061409a565b61233f565b6001905092915050565b7f000000000000000000000000a4ed8ddecdc44180c863a7e6c9516ee30495a85881565b600c5f9054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b600c60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112aa612338565b73ffffffffffffffffffffffffffffffffffffffff166112c86116b8565b73ffffffffffffffffffffffffffffffffffffffff161461131e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131590613e95565b60405180910390fd5b6113275f612f92565b565b5f611332612338565b73ffffffffffffffffffffffffffffffffffffffff166113506116b8565b73ffffffffffffffffffffffffffffffffffffffff16146113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d90613e95565b60405180910390fd5b5f600c5f6101000a81548160ff0219169083151502179055507f7bfa7bacf025baa75e5308bf15bcf2948f406c7ebe3eb1a8bb611862b9d647ef60405160405180910390a16001905090565b6113fa612338565b73ffffffffffffffffffffffffffffffffffffffff166114186116b8565b73ffffffffffffffffffffffffffffffffffffffff161461146e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146590613e95565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6114f9612338565b73ffffffffffffffffffffffffffffffffffffffff166115176116b8565b73ffffffffffffffffffffffffffffffffffffffff161461156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156490613e95565b60405180910390fd5b601481838561157c919061409a565b611586919061409a565b11156115c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115be9061413d565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e546115ef919061409a565b6115f9919061409a565b600d81905550505050565b61160c612338565b73ffffffffffffffffffffffffffffffffffffffff1661162a6116b8565b73ffffffffffffffffffffffffffffffffffffffff1614611680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167790613e95565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b611713612338565b73ffffffffffffffffffffffffffffffffffffffff166117316116b8565b73ffffffffffffffffffffffffffffffffffffffff1614611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177e90613e95565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b6060600480546117b390613e1b565b80601f01602080910402602001604051908101604052809291908181526020018280546117df90613e1b565b801561182a5780601f106118015761010080835404028352916020019161182a565b820191905f5260205f20905b81548152906001019060200180831161180d57829003601f168201915b5050505050905090565b61183c612338565b73ffffffffffffffffffffffffffffffffffffffff1661185a6116b8565b73ffffffffffffffffffffffffffffffffffffffff16146118b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a790613e95565b60405180910390fd5b7f000000000000000000000000a4ed8ddecdc44180c863a7e6c9516ee30495a85873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361193e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611935906141cb565b60405180910390fd5b6119488282613055565b5050565b60105481565b60175481565b60145481565b5f8060015f61196b612338565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c90614259565b60405180910390fd5b611a39611a30612338565b8585840361233f565b600191505092915050565b5f611a57611a50612338565b8484612502565b6001905092915050565b611a69612338565b73ffffffffffffffffffffffffffffffffffffffff16611a876116b8565b73ffffffffffffffffffffffffffffffffffffffff1614611add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad490613e95565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b600c60019054906101000a900460ff1681565b611bd3612338565b73ffffffffffffffffffffffffffffffffffffffff16611bf16116b8565b73ffffffffffffffffffffffffffffffffffffffff1614611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e90613e95565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ce19190613b16565b60405180910390a25050565b611cf5612338565b73ffffffffffffffffffffffffffffffffffffffff16611d136116b8565b73ffffffffffffffffffffffffffffffffffffffff1614611d69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6090613e95565b60405180910390fd5b6014818385611d78919061409a565b611d82919061409a565b1115611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba906142e7565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254611deb919061409a565b611df5919061409a565b601181905550505050565b611e08612338565b73ffffffffffffffffffffffffffffffffffffffff16611e266116b8565b73ffffffffffffffffffffffffffffffffffffffff1614611e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7390613e95565b60405180910390fd5b670de0b6b3a764000060646001611e91610d93565b611e9b9190613ee0565b611ea59190613f4e565b611eaf9190613f4e565b811015611ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee890614375565b60405180910390fd5b670de0b6b3a764000081611f059190613ee0565b600b8190555050565b60095481565b5f611f1d612338565b73ffffffffffffffffffffffffffffffffffffffff16611f3b6116b8565b73ffffffffffffffffffffffffffffffffffffffff1614611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890613e95565b60405180910390fd5b620186a06001611f9f610d93565b611fa99190613ee0565b611fb39190613f4e565b821015611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90614403565b60405180910390fd5b6103e86005612002610d93565b61200c9190613ee0565b6120169190613f4e565b821115612058576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204f90614491565b60405180910390fd5b81600a8190555060019050919050565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600a5481565b600f5481565b612104612338565b73ffffffffffffffffffffffffffffffffffffffff166121226116b8565b73ffffffffffffffffffffffffffffffffffffffff1614612178576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216f90613e95565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036121e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dd9061451f565b60405180910390fd5b6121ef81612f92565b50565b60135481565b600b5481565b612206612338565b73ffffffffffffffffffffffffffffffffffffffff166122246116b8565b73ffffffffffffffffffffffffffffffffffffffff161461227a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227190613e95565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8e4fb3162b55d3fcdb7507ecfed5ab4ea5d2bd7494d0bb621d698a52ea3f74b460405160405180910390a38060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036123ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a4906145ad565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361241b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124129061463b565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124f59190613bdd565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612570576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612567906146c9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d590614757565b60405180910390fd5b5f81036125f5576125f083835f6130f3565b612f8d565b600c5f9054906101000a900460ff1615612ad9576126116116b8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561267f575061264f6116b8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126b757505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126f1575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561270a5750600560149054906101000a900460ff16155b15612ad857600c60019054906101000a900460ff166127fe5760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806127be575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6127fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f4906147bf565b60405180910390fd5b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561289b575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612942576009548111156128e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128dc9061484d565b60405180910390fd5b600b546128f18361125d565b826128fc919061409a565b111561293d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612934906148b5565b60405180910390fd5b612ad7565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156129df575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612a2e57600954811115612a29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2090614943565b60405180910390fd5b612ad6565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612ad557600b54612a888361125d565b82612a93919061409a565b1115612ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acb906148b5565b60405180910390fd5b5b5b5b5b5b5f612ae33061125d565b90505f600a548210159050808015612b075750600c60029054906101000a900460ff165b8015612b205750600560149054906101000a900460ff16155b8015612b735750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612bc6575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612c19575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612c5c576001600560146101000a81548160ff021916908315150217905550612c41613368565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d0b575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612d14575f90505b5f8115612f7d57601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d7257505f601154115b15612e3c57612d9f6064612d916011548861360f90919063ffffffff16565b61362490919063ffffffff16565b905060115460135482612db29190613ee0565b612dbc9190613f4e565b60165f828254612dcc919061409a565b9250508190555060115460145482612de49190613ee0565b612dee9190613f4e565b60175f828254612dfe919061409a565b9250508190555060115460125482612e169190613ee0565b612e209190613f4e565b60155f828254612e30919061409a565b92505081905550612f5a565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e9357505f600d54115b15612f5957612ec06064612eb2600d548861360f90919063ffffffff16565b61362490919063ffffffff16565b9050600d54600f5482612ed39190613ee0565b612edd9190613f4e565b60165f828254612eed919061409a565b92505081905550600d5460105482612f059190613ee0565b612f0f9190613f4e565b60175f828254612f1f919061409a565b92505081905550600d54600e5482612f379190613ee0565b612f419190613f4e565b60155f828254612f51919061409a565b925050819055505b5b5f811115612f6e57612f6d8730836130f3565b5b8085612f7a9190614961565b94505b612f888787876130f3565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613161576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613158906146c9565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036131cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c690614757565b60405180910390fd5b6131da838383613639565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561325d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325490614a04565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546132eb919061409a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161334f9190613bdd565b60405180910390a361336284848461363e565b50505050565b5f6133723061125d565b90505f601754601554601654613388919061409a565b613392919061409a565b90505f808314806133a257505f82145b156133af5750505061360d565b5f600283601654866133c19190613ee0565b6133cb9190613f4e565b6133d59190613f4e565b90505f6133eb828661364390919063ffffffff16565b90505f4790506133fa82613658565b5f61340e824761364390919063ffffffff16565b90505f6134388761342a6015548561360f90919063ffffffff16565b61362490919063ffffffff16565b90505f613462886134546017548661360f90919063ffffffff16565b61362490919063ffffffff16565b90505f8183856134729190614961565b61347c9190614961565b90505f6016819055505f6015819055505f60178190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516134d890614a4f565b5f6040518083038185875af1925050503d805f8114613512576040519150601f19603f3d011682016040523d82523d5f602084013e613517565b606091505b5050809850505f8711801561352b57505f81115b156135785761353a878261388b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260165460405161356f93929190614a63565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516135bd90614a4f565b5f6040518083038185875af1925050503d805f81146135f7576040519150601f19603f3d011682016040523d82523d5f602084013e6135fc565b606091505b505080985050505050505050505050505b565b5f818361361c9190613ee0565b905092915050565b5f81836136319190613f4e565b905092915050565b505050565b505050565b5f81836136509190614961565b905092915050565b5f600267ffffffffffffffff81111561367457613673614a98565b5b6040519080825280602002602001820160405280156136a25781602001602082028036833780820191505090505b50905030815f815181106136b9576136b8614ac5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561375c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137809190614b06565b8160018151811061379457613793614ac5565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506137f9307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461233f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161385a959493929190614c21565b5f604051808303815f87803b158015613871575f80fd5b505af1158015613883573d5f803e3d5ffd5b505050505050565b6138b6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461233f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161393b96959493929190614c79565b60606040518083038185885af1158015613957573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061397c9190614cec565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156139ba57808201518184015260208101905061399f565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6139df82613983565b6139e9818561398d565b93506139f981856020860161399d565b613a02816139c5565b840191505092915050565b5f6020820190508181035f830152613a2581846139d5565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613a5a82613a31565b9050919050565b613a6a81613a50565b8114613a74575f80fd5b50565b5f81359050613a8581613a61565b92915050565b5f819050919050565b613a9d81613a8b565b8114613aa7575f80fd5b50565b5f81359050613ab881613a94565b92915050565b5f8060408385031215613ad457613ad3613a2d565b5b5f613ae185828601613a77565b9250506020613af285828601613aaa565b9150509250929050565b5f8115159050919050565b613b1081613afc565b82525050565b5f602082019050613b295f830184613b07565b92915050565b5f60208284031215613b4457613b43613a2d565b5b5f613b5184828501613a77565b91505092915050565b5f819050919050565b5f613b7d613b78613b7384613a31565b613b5a565b613a31565b9050919050565b5f613b8e82613b63565b9050919050565b5f613b9f82613b84565b9050919050565b613baf81613b95565b82525050565b5f602082019050613bc85f830184613ba6565b92915050565b613bd781613a8b565b82525050565b5f602082019050613bf05f830184613bce565b92915050565b5f60208284031215613c0b57613c0a613a2d565b5b5f613c1884828501613aaa565b91505092915050565b5f805f60608486031215613c3857613c37613a2d565b5b5f613c4586828701613a77565b9350506020613c5686828701613a77565b9250506040613c6786828701613aaa565b9150509250925092565b613c7a81613a50565b82525050565b5f602082019050613c935f830184613c71565b92915050565b5f60ff82169050919050565b613cae81613c99565b82525050565b5f602082019050613cc75f830184613ca5565b92915050565b613cd681613afc565b8114613ce0575f80fd5b50565b5f81359050613cf181613ccd565b92915050565b5f8060408385031215613d0d57613d0c613a2d565b5b5f613d1a85828601613a77565b9250506020613d2b85828601613ce3565b9150509250929050565b5f805f60608486031215613d4c57613d4b613a2d565b5b5f613d5986828701613aaa565b9350506020613d6a86828701613aaa565b9250506040613d7b86828701613aaa565b9150509250925092565b5f60208284031215613d9a57613d99613a2d565b5b5f613da784828501613ce3565b91505092915050565b5f8060408385031215613dc657613dc5613a2d565b5b5f613dd385828601613a77565b9250506020613de485828601613a77565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680613e3257607f821691505b602082108103613e4557613e44613dee565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613e7f60208361398d565b9150613e8a82613e4b565b602082019050919050565b5f6020820190508181035f830152613eac81613e73565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613eea82613a8b565b9150613ef583613a8b565b9250828202613f0381613a8b565b91508282048414831517613f1a57613f19613eb3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613f5882613a8b565b9150613f6383613a8b565b925082613f7357613f72613f21565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b5f613fd8602d8361398d565b9150613fe382613f7e565b604082019050919050565b5f6020820190508181035f83015261400581613fcc565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f61406660288361398d565b91506140718261400c565b604082019050919050565b5f6020820190508181035f8301526140938161405a565b9050919050565b5f6140a482613a8b565b91506140af83613a8b565b92508282019050808211156140c7576140c6613eb3565b5b92915050565b7f427579206665652063616e742062652073656e74206d6f7265207468616e20325f8201527f3025000000000000000000000000000000000000000000000000000000000000602082015250565b5f61412760228361398d565b9150614132826140cd565b604082019050919050565b5f6020820190508181035f8301526141548161411b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f6141b560398361398d565b91506141c08261415b565b604082019050919050565b5f6020820190508181035f8301526141e2816141a9565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61424360258361398d565b915061424e826141e9565b604082019050919050565b5f6020820190508181035f83015261427081614237565b9050919050565b7f53656c6c206665652063616e742062652073656e74206d6f7265207468616e205f8201527f3230250000000000000000000000000000000000000000000000000000000000602082015250565b5f6142d160238361398d565b91506142dc82614277565b604082019050919050565b5f6020820190508181035f8301526142fe816142c5565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f61435f60228361398d565b915061436a82614305565b604082019050919050565b5f6020820190508181035f83015261438c81614353565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f6143ed60358361398d565b91506143f882614393565b604082019050919050565b5f6020820190508181035f83015261441a816143e1565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f61447b60348361398d565b915061448682614421565b604082019050919050565b5f6020820190508181035f8301526144a88161446f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61450960268361398d565b9150614514826144af565b604082019050919050565b5f6020820190508181035f830152614536816144fd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61459760248361398d565b91506145a28261453d565b604082019050919050565b5f6020820190508181035f8301526145c48161458b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61462560228361398d565b9150614630826145cb565b604082019050919050565b5f6020820190508181035f83015261465281614619565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6146b360258361398d565b91506146be82614659565b604082019050919050565b5f6020820190508181035f8301526146e0816146a7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61474160238361398d565b915061474c826146e7565b604082019050919050565b5f6020820190508181035f83015261476e81614735565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6147a960168361398d565b91506147b482614775565b602082019050919050565b5f6020820190508181035f8301526147d68161479d565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61483760358361398d565b9150614842826147dd565b604082019050919050565b5f6020820190508181035f8301526148648161482b565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61489f60138361398d565b91506148aa8261486b565b602082019050919050565b5f6020820190508181035f8301526148cc81614893565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61492d60368361398d565b9150614938826148d3565b604082019050919050565b5f6020820190508181035f83015261495a81614921565b9050919050565b5f61496b82613a8b565b915061497683613a8b565b925082820390508181111561498e5761498d613eb3565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6149ee60268361398d565b91506149f982614994565b604082019050919050565b5f6020820190508181035f830152614a1b816149e2565b9050919050565b5f81905092915050565b50565b5f614a3a5f83614a22565b9150614a4582614a2c565b5f82019050919050565b5f614a5982614a2f565b9150819050919050565b5f606082019050614a765f830186613bce565b614a836020830185613bce565b614a906040830184613bce565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050614b0081613a61565b92915050565b5f60208284031215614b1b57614b1a613a2d565b5b5f614b2884828501614af2565b91505092915050565b5f819050919050565b5f614b54614b4f614b4a84614b31565b613b5a565b613a8b565b9050919050565b614b6481614b3a565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614b9c81613a50565b82525050565b5f614bad8383614b93565b60208301905092915050565b5f602082019050919050565b5f614bcf82614b6a565b614bd98185614b74565b9350614be483614b84565b805f5b83811015614c14578151614bfb8882614ba2565b9750614c0683614bb9565b925050600181019050614be7565b5085935050505092915050565b5f60a082019050614c345f830188613bce565b614c416020830187614b5b565b8181036040830152614c538186614bc5565b9050614c626060830185613c71565b614c6f6080830184613bce565b9695505050505050565b5f60c082019050614c8c5f830189613c71565b614c996020830188613bce565b614ca66040830187614b5b565b614cb36060830186614b5b565b614cc06080830185613c71565b614ccd60a0830184613bce565b979650505050505050565b5f81519050614ce681613a94565b92915050565b5f805f60608486031215614d0357614d02613a2d565b5b5f614d1086828701614cd8565b9350506020614d2186828701614cd8565b9250506040614d3286828701614cd8565b915050925092509256fea2646970667358221220bae9406685dbddf9229b32d84b9b80ef252b49534080434bca37ccb2deb7afaa64736f6c63430008150033

Deployed Bytecode Sourcemap

12276:15474:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2641:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3555:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13420:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12350:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2962:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20718:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13204:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13164;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17779:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3732:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12453:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2861:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4232:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12408:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12760:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20883:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12613:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13019:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12839:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3078:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;763:103;;;;;;;;;;;;;:::i;:::-;;17052:152;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18320:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12545:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12912;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18691:438;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16888:112;;;;;;;;;;;;;:::i;:::-;;540:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12582:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13054:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18583:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2749:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19781:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12986:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13244:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13130:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4455:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3213:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20289:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13641:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12800:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19591:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19137:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18059:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12645:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17274:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12878:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3396:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12687:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12949:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;874:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13092:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12727:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20528:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2641:100;2695:13;2728:5;2721:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2641:100;:::o;3555:169::-;3638:4;3655:39;3664:12;:10;:12::i;:::-;3678:7;3687:6;3655:8;:39::i;:::-;3712:4;3705:11;;3555:169;;;;:::o;13420:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;12350:51::-;;;:::o;2962:108::-;3023:7;3050:12;;3043:19;;2962:108;:::o;20718:157::-;686:12;:10;:12::i;:::-;675:23;;:7;:5;:7::i;:::-;:23;;;667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20825:9:::1;;;;;;;;;;;20797:38;;20814:9;20797:38;;;;;;;;;;;;20858:9;20846;;:21;;;;;;;;;;;;;;;;;;20718:157:::0;:::o;13204:33::-;;;;:::o;13164:::-;;;;:::o;17779:272::-;686:12;:10;:12::i;:::-;675:23;;:7;:5;:7::i;:::-;:23;;;667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17915:4:::1;17908:3;17903:1;17887:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17886:25;;;;:::i;:::-;17885:34;;;;:::i;:::-;17875:6;:44;;17853:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;18036:6;18026;:17;;;;:::i;:::-;18003:20;:40;;;;17779:272:::0;:::o;3732:492::-;3872:4;3889:36;3899:6;3907:9;3918:6;3889:9;:36::i;:::-;3938:24;3965:11;:19;3977:6;3965:19;;;;;;;;;;;;;;;:33;3985:12;:10;:12::i;:::-;3965:33;;;;;;;;;;;;;;;;3938:60;;4037:6;4017:16;:26;;4009:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4124:57;4133:6;4141:12;:10;:12::i;:::-;4174:6;4155:16;:25;4124:8;:57::i;:::-;4212:4;4205:11;;;3732:492;;;;;:::o;12453:53::-;12499:6;12453:53;:::o;2861:93::-;2919:5;2944:2;2937:9;;2861:93;:::o;4232:215::-;4320:4;4337:80;4346:12;:10;:12::i;:::-;4360:7;4406:10;4369:11;:25;4381:12;:10;:12::i;:::-;4369:25;;;;;;;;;;;;;;;:34;4395:7;4369:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4337:8;:80::i;:::-;4435:4;4428:11;;4232:215;;;;:::o;12408:38::-;;;:::o;12760:33::-;;;;;;;;;;;;;:::o;20883:126::-;20949:4;20973:19;:28;20993:7;20973:28;;;;;;;;;;;;;;;;;;;;;;;;;20966:35;;20883:126;;;:::o;12613:23::-;;;;;;;;;;;;;:::o;13019:28::-;;;;:::o;12839:30::-;;;;;;;;;;;;;:::o;3078:127::-;3152:7;3179:9;:18;3189:7;3179:18;;;;;;;;;;;;;;;;3172:25;;3078:127;;;:::o;763:103::-;686:12;:10;:12::i;:::-;675:23;;:7;:5;:7::i;:::-;:23;;;667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;828:30:::1;855:1;828:18;:30::i;:::-;763:103::o:0;17052:152::-;17104:4;686:12;:10;:12::i;:::-;675:23;;:7;:5;:7::i;:::-;:23;;;667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17138:5:::1;17121:14;;:22;;;;;;;;;;;;;;;;;;17159:15;;;;;;;;;;17192:4;17185:11;;17052:152:::0;:::o;18320:167::-;686:12;:10;:12::i;:::-;675:23;;:7;:5;:7::i;:::-;:23;;;667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18475:4:::1;18433:31;:39;18465:6;18433:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;18320:167:::0;;:::o;12545:30::-;;;;;;;;;;;;;:::o;12912:::-;;;;:::o;18691:438::-;686:12;:10;:12::i;:::-;675:23;;:7;:5;:7::i;:::-;:23;;;667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18895:2:::1;18883:7;18867:13;18851;:29;;;;:::i;:::-;:39;;;;:::i;:::-;18850:47;;18842:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;18965:13;18947:15;:31;;;;19007:13;18989:15;:31;;;;19043:7;19031:9;:19;;;;19112:9;;19094:15;;19076;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;19061:12;:60;;;;18691:438:::0;;;:::o;16888:112::-;686:12;:10;:12::i;:::-;675:23;;:7;:5;:7::i;:::-;:23;;;667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16959:4:::1;16943:13;;:20;;;;;;;;;;;;;;;;;;16988:4;16974:11;;:18;;;;;;;;;;;;;;;;;;16888:112::o:0;540:87::-;586:7;613:6;;;;;;;;;;;606:13;;540:87;:::o;12582:24::-;;;;;;;;;;;;;:::o;13054:31::-;;;;:::o;18583:100::-;686:12;:10;:12::i;:::-;675:23;;:7;:5;:7::i;:::-;:23;;;667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18668:7:::1;18654:11;;:21;;;;;;;;;;;;;;;;;;18583:100:::0;:::o;2749:104::-;2805:13;2838:7;2831:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2749:104;:::o;19781:304::-;686:12;:10;:12::i;:::-;675:23;;:7;:5;:7::i;:::-;:23;;;667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19925:13:::1;19917:21;;:4;:21;;::::0;19895:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20036:41;20065:4;20071:5;20036:28;:41::i;:::-;19781:304:::0;;:::o;12986:24::-;;;;:::o;13244:27::-;;;;:::o;13130:25::-;;;;:::o;4455:413::-;4548:4;4565:24;4592:11;:25;4604:12;:10;:12::i;:::-;4592:25;;;;;;;;;;;;;;;:34;4618:7;4592:34;;;;;;;;;;;;;;;;4565:61;;4665:15;4645:16;:35;;4637:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4758:67;4767:12;:10;:12::i;:::-;4781:7;4809:15;4790:16;:34;4758:8;:67::i;:::-;4856:4;4849:11;;;4455:413;;;;:::o;3213:175::-;3299:4;3316:42;3326:12;:10;:12::i;:::-;3340:9;3351:6;3316:9;:42::i;:::-;3376:4;3369:11;;3213:175;;;;:::o;20289:231::-;686:12;:10;:12::i;:::-;675:23;;:7;:5;:7::i;:::-;:23;;;667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20449:15:::1;;;;;;;;;;;20406:59;;20429:18;20406:59;;;;;;;;;;;;20494:18;20476:15;;:36;;;;;;;;;;;;;;;;;;20289:231:::0;:::o;13641:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;12800:32::-;;;;;;;;;;;;;:::o;19591:182::-;686:12;:10;:12::i;:::-;675:23;;:7;:5;:7::i;:::-;:23;;;667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19707:8:::1;19676:19;:28;19696:7;19676:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;19747:7;19731:34;;;19756:8;19731:34;;;;;;:::i;:::-;;;;;;;;19591:182:::0;;:::o;19137:446::-;686:12;:10;:12::i;:::-;675:23;;:7;:5;:7::i;:::-;:23;;;667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19341:2:::1;19329:7;19313:13;19297;:29;;;;:::i;:::-;:39;;;;:::i;:::-;19296:47;;19288:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;19413:13;19394:16;:32;;;;19456:13;19437:16;:32;;;;19493:7;19480:10;:20;;;;19565:10;;19546:16;;19527;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;19511:13;:64;;;;19137:446:::0;;;:::o;18059:253::-;686:12;:10;:12::i;:::-;675:23;;:7;:5;:7::i;:::-;:23;;;667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18198:4:::1;18191:3;18186:1;18170:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18169:25;;;;:::i;:::-;18168:34;;;;:::i;:::-;18158:6;:44;;18136:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;18297:6;18287;:17;;;;:::i;:::-;18275:9;:29;;;;18059:253:::0;:::o;12645:35::-;;;;:::o;17274:497::-;17382:4;686:12;:10;:12::i;:::-;675:23;;:7;:5;:7::i;:::-;:23;;;667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17461:6:::1;17456:1;17440:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17439:28;;;;:::i;:::-;17426:9;:41;;17404:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;17616:4;17611:1;17595:13;:11;:13::i;:::-;:17;;;;:::i;:::-;17594:26;;;;:::i;:::-;17581:9;:39;;17559:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;17732:9;17711:18;:30;;;;17759:4;17752:11;;17274:497:::0;;;:::o;12878:27::-;;;;:::o;3396:151::-;3485:7;3512:11;:18;3524:5;3512:18;;;;;;;;;;;;;;;:27;3531:7;3512:27;;;;;;;;;;;;;;;;3505:34;;3396:151;;;;:::o;12687:33::-;;;;:::o;12949:30::-;;;;:::o;874:201::-;686:12;:10;:12::i;:::-;675:23;;:7;:5;:7::i;:::-;:23;;;667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;983:1:::1;963:22;;:8;:22;;::::0;955:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1039:28;1058:8;1039:18;:28::i;:::-;874:201:::0;:::o;13092:31::-;;;;:::o;12727:24::-;;;;:::o;20528:182::-;686:12;:10;:12::i;:::-;675:23;;:7;:5;:7::i;:::-;:23;;;667:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20660:8:::1;;;;;;;;;;;20631:38;;20647:11;20631:38;;;;;;;;;;;;20691:11;20680:8;;:22;;;;;;;;;;;;;;;;;;20528:182:::0;:::o;193:98::-;246:7;273:10;266:17;;193:98;:::o;6024:380::-;6177:1;6160:19;;:5;:19;;;6152:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6258:1;6239:21;;:7;:21;;;6231:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6342:6;6312:11;:18;6324:5;6312:18;;;;;;;;;;;;;;;:27;6331:7;6312:27;;;;;;;;;;;;;;;:36;;;;6380:7;6364:32;;6373:5;6364:32;;;6389:6;6364:32;;;;;;:::i;:::-;;;;;;;;6024:380;;;:::o;21067:3924::-;21215:1;21199:18;;:4;:18;;;21191:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21292:1;21278:16;;:2;:16;;;21270:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21361:1;21351:6;:11;21347:93;;21379:28;21395:4;21401:2;21405:1;21379:15;:28::i;:::-;21422:7;;21347:93;21456:14;;;;;;;;;;;21452:1694;;;21517:7;:5;:7::i;:::-;21509:15;;:4;:15;;;;:49;;;;;21551:7;:5;:7::i;:::-;21545:13;;:2;:13;;;;21509:49;:86;;;;;21593:1;21579:16;;:2;:16;;;;21509:86;:128;;;;;21630:6;21616:21;;:2;:21;;;;21509:128;:158;;;;;21659:8;;;;;;;;;;;21658:9;21509:158;21487:1648;;;21707:13;;;;;;;;;;;21702:223;;21779:19;:25;21799:4;21779:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;21808:19;:23;21828:2;21808:23;;;;;;;;;;;;;;;;;;;;;;;;;21779:52;21745:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;21702:223;21999:25;:31;22025:4;21999:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;22056:31;:35;22088:2;22056:35;;;;;;;;;;;;;;;;;;;;;;;;;22055:36;21999:92;21973:1147;;;22178:20;;22168:6;:30;;22134:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;22386:9;;22369:13;22379:2;22369:9;:13::i;:::-;22360:6;:22;;;;:::i;:::-;:35;;22326:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;21973:1147;;;22564:25;:29;22590:2;22564:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;22619:31;:37;22651:4;22619:37;;;;;;;;;;;;;;;;;;;;;;;;;22618:38;22564:92;22538:582;;;22743:20;;22733:6;:30;;22699:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;22538:582;;;22900:31;:35;22932:2;22900:35;;;;;;;;;;;;;;;;;;;;;;;;;22895:225;;23020:9;;23003:13;23013:2;23003:9;:13::i;:::-;22994:6;:22;;;;:::i;:::-;:35;;22960:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;22895:225;22538:582;21973:1147;21487:1648;21452:1694;23158:28;23189:24;23207:4;23189:9;:24::i;:::-;23158:55;;23226:12;23265:18;;23241:20;:42;;23226:57;;23314:7;:35;;;;;23338:11;;;;;;;;;;;23314:35;:61;;;;;23367:8;;;;;;;;;;;23366:9;23314:61;:110;;;;;23393:25;:31;23419:4;23393:31;;;;;;;;;;;;;;;;;;;;;;;;;23392:32;23314:110;:153;;;;;23442:19;:25;23462:4;23442:25;;;;;;;;;;;;;;;;;;;;;;;;;23441:26;23314:153;:194;;;;;23485:19;:23;23505:2;23485:23;;;;;;;;;;;;;;;;;;;;;;;;;23484:24;23314:194;23296:326;;;23546:4;23535:8;;:15;;;;;;;;;;;;;;;;;;23567:10;:8;:10::i;:::-;23605:5;23594:8;;:16;;;;;;;;;;;;;;;;;;23296:326;23634:12;23650:8;;;;;;;;;;;23649:9;23634:24;;23760:19;:25;23780:4;23760:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;23789:19;:23;23809:2;23789:23;;;;;;;;;;;;;;;;;;;;;;;;;23760:52;23756:100;;;23839:5;23829:15;;23756:100;23868:12;23973:7;23969:969;;;24025:25;:29;24051:2;24025:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;24074:1;24058:13;;:17;24025:50;24021:768;;;24103:34;24133:3;24103:25;24114:13;;24103:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;24096:41;;24206:13;;24186:16;;24179:4;:23;;;;:::i;:::-;24178:41;;;;:::i;:::-;24156:18;;:63;;;;;;;:::i;:::-;;;;;;;;24276:13;;24262:10;;24255:4;:17;;;;:::i;:::-;24254:35;;;;:::i;:::-;24238:12;;:51;;;;;;;:::i;:::-;;;;;;;;24358:13;;24338:16;;24331:4;:23;;;;:::i;:::-;24330:41;;;;:::i;:::-;24308:18;;:63;;;;;;;:::i;:::-;;;;;;;;24021:768;;;24433:25;:31;24459:4;24433:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;24483:1;24468:12;;:16;24433:51;24429:360;;;24512:33;24541:3;24512:24;24523:12;;24512:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;24505:40;;24613:12;;24594:15;;24587:4;:22;;;;:::i;:::-;24586:39;;;;:::i;:::-;24564:18;;:61;;;;;;;:::i;:::-;;;;;;;;24681:12;;24668:9;;24661:4;:16;;;;:::i;:::-;24660:33;;;;:::i;:::-;24644:12;;:49;;;;;;;:::i;:::-;;;;;;;;24761:12;;24742:15;;24735:4;:22;;;;:::i;:::-;24734:39;;;;:::i;:::-;24712:18;;:61;;;;;;;:::i;:::-;;;;;;;;24429:360;24021:768;24816:1;24809:4;:8;24805:91;;;24838:42;24854:4;24868;24875;24838:15;:42::i;:::-;24805:91;24922:4;24912:14;;;;;:::i;:::-;;;23969:969;24950:33;24966:4;24972:2;24976:6;24950:15;:33::i;:::-;21180:3811;;;;21067:3924;;;;:::o;1083:191::-;1157:16;1176:6;;;;;;;;;;;1157:25;;1202:8;1193:6;;:17;;;;;;;;;;;;;;;;;;1257:8;1226:40;;1247:8;1226:40;;;;;;;;;;;;1146:128;1083:191;:::o;20093:188::-;20210:5;20176:25;:31;20202:4;20176:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20267:5;20233:40;;20261:4;20233:40;;;;;;;;;;;;20093:188;;:::o;4876:733::-;5034:1;5016:20;;:6;:20;;;5008:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5118:1;5097:23;;:9;:23;;;5089:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5173:47;5194:6;5202:9;5213:6;5173:20;:47::i;:::-;5233:21;5257:9;:17;5267:6;5257:17;;;;;;;;;;;;;;;;5233:41;;5310:6;5293:13;:23;;5285:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5431:6;5415:13;:22;5395:9;:17;5405:6;5395:17;;;;;;;;;;;;;;;:42;;;;5483:6;5459:9;:20;5469:9;5459:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5524:9;5507:35;;5516:6;5507:35;;;5535:6;5507:35;;;;;;:::i;:::-;;;;;;;;5555:46;5575:6;5583:9;5594:6;5555:19;:46::i;:::-;4997:612;4876:733;;;:::o;26118:1629::-;26157:23;26183:24;26201:4;26183:9;:24::i;:::-;26157:50;;26218:25;26314:12;;26280:18;;26246;;:52;;;;:::i;:::-;:80;;;;:::i;:::-;26218:108;;26337:12;26385:1;26366:15;:20;:46;;;;26411:1;26390:17;:22;26366:46;26362:85;;;26429:7;;;;;26362:85;26508:23;26621:1;26588:17;26553:18;;26535:15;:36;;;;:::i;:::-;26534:71;;;;:::i;:::-;:88;;;;:::i;:::-;26508:114;;26633:26;26662:36;26682:15;26662;:19;;:36;;;;:::i;:::-;26633:65;;26711:25;26739:21;26711:49;;26773:36;26790:18;26773:16;:36::i;:::-;26822:18;26843:44;26869:17;26843:21;:25;;:44;;;;:::i;:::-;26822:65;;26900:23;26926:81;26979:17;26926:34;26941:18;;26926:10;:14;;:34;;;;:::i;:::-;:38;;:81;;;;:::i;:::-;26900:107;;27018:17;27038:51;27071:17;27038:28;27053:12;;27038:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;27018:71;;27102:23;27159:9;27141:15;27128:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;27102:66;;27202:1;27181:18;:22;;;;27235:1;27214:18;:22;;;;27262:1;27247:12;:16;;;;27298:9;;;;;;;;;;;27290:23;;27321:9;27290:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27276:59;;;;;27370:1;27352:15;:19;:42;;;;;27393:1;27375:15;:19;27352:42;27348:278;;;27411:46;27424:15;27441;27411:12;:46::i;:::-;27477:137;27510:18;27547:15;27581:18;;27477:137;;;;;;;;:::i;:::-;;;;;;;;27348:278;27660:15;;;;;;;;;;;27652:29;;27703:21;27652:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27638:101;;;;;26146:1601;;;;;;;;;;26118:1629;:::o;6808:98::-;6866:7;6897:1;6893;:5;;;;:::i;:::-;6886:12;;6808:98;;;;:::o;6914:::-;6972:7;7003:1;6999;:5;;;;:::i;:::-;6992:12;;6914:98;;;;:::o;6412:125::-;;;;:::o;6545:124::-;;;;:::o;6702:98::-;6760:7;6791:1;6787;:5;;;;:::i;:::-;6780:12;;6702:98;;;;:::o;24999:589::-;25125:21;25163:1;25149:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25125:40;;25194:4;25176;25181:1;25176:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25220:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25210:4;25215:1;25210:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25255:62;25272:4;25287:15;25305:11;25255:8;:62::i;:::-;25356:15;:66;;;25437:11;25463:1;25507:4;25534;25554:15;25356:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25054:534;24999:589;:::o;25596:514::-;25744:62;25761:4;25776:15;25794:11;25744:8;:62::i;:::-;25849:15;:31;;;25888:9;25921:4;25941:11;25967:1;26010;26053:8;;;;;;;;;;;26076:15;25849:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25596:514;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:180::-;10567:77;10564:1;10557:88;10664:4;10661:1;10654:15;10688:4;10685:1;10678:15;10705:410;10745:7;10768:20;10786:1;10768:20;:::i;:::-;10763:25;;10802:20;10820:1;10802:20;:::i;:::-;10797:25;;10857:1;10854;10850:9;10879:30;10897:11;10879:30;:::i;:::-;10868:41;;11058:1;11049:7;11045:15;11042:1;11039:22;11019:1;11012:9;10992:83;10969:139;;11088:18;;:::i;:::-;10969:139;10753:362;10705:410;;;;:::o;11121:180::-;11169:77;11166:1;11159:88;11266:4;11263:1;11256:15;11290:4;11287:1;11280:15;11307:185;11347:1;11364:20;11382:1;11364:20;:::i;:::-;11359:25;;11398:20;11416:1;11398:20;:::i;:::-;11393:25;;11437:1;11427:35;;11442:18;;:::i;:::-;11427:35;11484:1;11481;11477:9;11472:14;;11307:185;;;;:::o;11498:232::-;11638:34;11634:1;11626:6;11622:14;11615:58;11707:15;11702:2;11694:6;11690:15;11683:40;11498:232;:::o;11736:366::-;11878:3;11899:67;11963:2;11958:3;11899:67;:::i;:::-;11892:74;;11975:93;12064:3;11975:93;:::i;:::-;12093:2;12088:3;12084:12;12077:19;;11736:366;;;:::o;12108:419::-;12274:4;12312:2;12301:9;12297:18;12289:26;;12361:9;12355:4;12351:20;12347:1;12336:9;12332:17;12325:47;12389:131;12515:4;12389:131;:::i;:::-;12381:139;;12108:419;;;:::o;12533:227::-;12673:34;12669:1;12661:6;12657:14;12650:58;12742:10;12737:2;12729:6;12725:15;12718:35;12533:227;:::o;12766:366::-;12908:3;12929:67;12993:2;12988:3;12929:67;:::i;:::-;12922:74;;13005:93;13094:3;13005:93;:::i;:::-;13123:2;13118:3;13114:12;13107:19;;12766:366;;;:::o;13138:419::-;13304:4;13342:2;13331:9;13327:18;13319:26;;13391:9;13385:4;13381:20;13377:1;13366:9;13362:17;13355:47;13419:131;13545:4;13419:131;:::i;:::-;13411:139;;13138:419;;;:::o;13563:191::-;13603:3;13622:20;13640:1;13622:20;:::i;:::-;13617:25;;13656:20;13674:1;13656:20;:::i;:::-;13651:25;;13699:1;13696;13692:9;13685:16;;13720:3;13717:1;13714:10;13711:36;;;13727:18;;:::i;:::-;13711:36;13563:191;;;;:::o;13760:221::-;13900:34;13896:1;13888:6;13884:14;13877:58;13969:4;13964:2;13956:6;13952:15;13945:29;13760:221;:::o;13987:366::-;14129:3;14150:67;14214:2;14209:3;14150:67;:::i;:::-;14143:74;;14226:93;14315:3;14226:93;:::i;:::-;14344:2;14339:3;14335:12;14328:19;;13987:366;;;:::o;14359:419::-;14525:4;14563:2;14552:9;14548:18;14540:26;;14612:9;14606:4;14602:20;14598:1;14587:9;14583:17;14576:47;14640:131;14766:4;14640:131;:::i;:::-;14632:139;;14359:419;;;:::o;14784:244::-;14924:34;14920:1;14912:6;14908:14;14901:58;14993:27;14988:2;14980:6;14976:15;14969:52;14784:244;:::o;15034:366::-;15176:3;15197:67;15261:2;15256:3;15197:67;:::i;:::-;15190:74;;15273:93;15362:3;15273:93;:::i;:::-;15391:2;15386:3;15382:12;15375:19;;15034:366;;;:::o;15406:419::-;15572:4;15610:2;15599:9;15595:18;15587:26;;15659:9;15653:4;15649:20;15645:1;15634:9;15630:17;15623:47;15687:131;15813:4;15687:131;:::i;:::-;15679:139;;15406:419;;;:::o;15831:224::-;15971:34;15967:1;15959:6;15955:14;15948:58;16040:7;16035:2;16027:6;16023:15;16016:32;15831:224;:::o;16061:366::-;16203:3;16224:67;16288:2;16283:3;16224:67;:::i;:::-;16217:74;;16300:93;16389:3;16300:93;:::i;:::-;16418:2;16413:3;16409:12;16402:19;;16061:366;;;:::o;16433:419::-;16599:4;16637:2;16626:9;16622:18;16614:26;;16686:9;16680:4;16676:20;16672:1;16661:9;16657:17;16650:47;16714:131;16840:4;16714:131;:::i;:::-;16706:139;;16433:419;;;:::o;16858:222::-;16998:34;16994:1;16986:6;16982:14;16975:58;17067:5;17062:2;17054:6;17050:15;17043:30;16858:222;:::o;17086:366::-;17228:3;17249:67;17313:2;17308:3;17249:67;:::i;:::-;17242:74;;17325:93;17414:3;17325:93;:::i;:::-;17443:2;17438:3;17434:12;17427:19;;17086:366;;;:::o;17458:419::-;17624:4;17662:2;17651:9;17647:18;17639:26;;17711:9;17705:4;17701:20;17697:1;17686:9;17682:17;17675:47;17739:131;17865:4;17739:131;:::i;:::-;17731:139;;17458:419;;;:::o;17883:221::-;18023:34;18019:1;18011:6;18007:14;18000:58;18092:4;18087:2;18079:6;18075:15;18068:29;17883:221;:::o;18110:366::-;18252:3;18273:67;18337:2;18332:3;18273:67;:::i;:::-;18266:74;;18349:93;18438:3;18349:93;:::i;:::-;18467:2;18462:3;18458:12;18451:19;;18110:366;;;:::o;18482:419::-;18648:4;18686:2;18675:9;18671:18;18663:26;;18735:9;18729:4;18725:20;18721:1;18710:9;18706:17;18699:47;18763:131;18889:4;18763:131;:::i;:::-;18755:139;;18482:419;;;:::o;18907:240::-;19047:34;19043:1;19035:6;19031:14;19024:58;19116:23;19111:2;19103:6;19099:15;19092:48;18907:240;:::o;19153:366::-;19295:3;19316:67;19380:2;19375:3;19316:67;:::i;:::-;19309:74;;19392:93;19481:3;19392:93;:::i;:::-;19510:2;19505:3;19501:12;19494:19;;19153:366;;;:::o;19525:419::-;19691:4;19729:2;19718:9;19714:18;19706:26;;19778:9;19772:4;19768:20;19764:1;19753:9;19749:17;19742:47;19806:131;19932:4;19806:131;:::i;:::-;19798:139;;19525:419;;;:::o;19950:239::-;20090:34;20086:1;20078:6;20074:14;20067:58;20159:22;20154:2;20146:6;20142:15;20135:47;19950:239;:::o;20195:366::-;20337:3;20358:67;20422:2;20417:3;20358:67;:::i;:::-;20351:74;;20434:93;20523:3;20434:93;:::i;:::-;20552:2;20547:3;20543:12;20536:19;;20195:366;;;:::o;20567:419::-;20733:4;20771:2;20760:9;20756:18;20748:26;;20820:9;20814:4;20810:20;20806:1;20795:9;20791:17;20784:47;20848:131;20974:4;20848:131;:::i;:::-;20840:139;;20567:419;;;:::o;20992:225::-;21132:34;21128:1;21120:6;21116:14;21109:58;21201:8;21196:2;21188:6;21184:15;21177:33;20992:225;:::o;21223:366::-;21365:3;21386:67;21450:2;21445:3;21386:67;:::i;:::-;21379:74;;21462:93;21551:3;21462:93;:::i;:::-;21580:2;21575:3;21571:12;21564:19;;21223:366;;;:::o;21595:419::-;21761:4;21799:2;21788:9;21784:18;21776:26;;21848:9;21842:4;21838:20;21834:1;21823:9;21819:17;21812:47;21876:131;22002:4;21876:131;:::i;:::-;21868:139;;21595:419;;;:::o;22020:223::-;22160:34;22156:1;22148:6;22144:14;22137:58;22229:6;22224:2;22216:6;22212:15;22205:31;22020:223;:::o;22249:366::-;22391:3;22412:67;22476:2;22471:3;22412:67;:::i;:::-;22405:74;;22488:93;22577:3;22488:93;:::i;:::-;22606:2;22601:3;22597:12;22590:19;;22249:366;;;:::o;22621:419::-;22787:4;22825:2;22814:9;22810:18;22802:26;;22874:9;22868:4;22864:20;22860:1;22849:9;22845:17;22838:47;22902:131;23028:4;22902:131;:::i;:::-;22894:139;;22621:419;;;:::o;23046:221::-;23186:34;23182:1;23174:6;23170:14;23163:58;23255:4;23250:2;23242:6;23238:15;23231:29;23046:221;:::o;23273:366::-;23415:3;23436:67;23500:2;23495:3;23436:67;:::i;:::-;23429:74;;23512:93;23601:3;23512:93;:::i;:::-;23630:2;23625:3;23621:12;23614:19;;23273:366;;;:::o;23645:419::-;23811:4;23849:2;23838:9;23834:18;23826:26;;23898:9;23892:4;23888:20;23884:1;23873:9;23869:17;23862:47;23926:131;24052:4;23926:131;:::i;:::-;23918:139;;23645:419;;;:::o;24070:224::-;24210:34;24206:1;24198:6;24194:14;24187:58;24279:7;24274:2;24266:6;24262:15;24255:32;24070:224;:::o;24300:366::-;24442:3;24463:67;24527:2;24522:3;24463:67;:::i;:::-;24456:74;;24539:93;24628:3;24539:93;:::i;:::-;24657:2;24652:3;24648:12;24641:19;;24300:366;;;:::o;24672:419::-;24838:4;24876:2;24865:9;24861:18;24853:26;;24925:9;24919:4;24915:20;24911:1;24900:9;24896:17;24889:47;24953:131;25079:4;24953:131;:::i;:::-;24945:139;;24672:419;;;:::o;25097:222::-;25237:34;25233:1;25225:6;25221:14;25214:58;25306:5;25301:2;25293:6;25289:15;25282:30;25097:222;:::o;25325:366::-;25467:3;25488:67;25552:2;25547:3;25488:67;:::i;:::-;25481:74;;25564:93;25653:3;25564:93;:::i;:::-;25682:2;25677:3;25673:12;25666:19;;25325:366;;;:::o;25697:419::-;25863:4;25901:2;25890:9;25886:18;25878:26;;25950:9;25944:4;25940:20;25936:1;25925:9;25921:17;25914:47;25978:131;26104:4;25978:131;:::i;:::-;25970:139;;25697:419;;;:::o;26122:172::-;26262:24;26258:1;26250:6;26246:14;26239:48;26122:172;:::o;26300:366::-;26442:3;26463:67;26527:2;26522:3;26463:67;:::i;:::-;26456:74;;26539:93;26628:3;26539:93;:::i;:::-;26657:2;26652:3;26648:12;26641:19;;26300:366;;;:::o;26672:419::-;26838:4;26876:2;26865:9;26861:18;26853:26;;26925:9;26919:4;26915:20;26911:1;26900:9;26896:17;26889:47;26953:131;27079:4;26953:131;:::i;:::-;26945:139;;26672:419;;;:::o;27097:240::-;27237:34;27233:1;27225:6;27221:14;27214:58;27306:23;27301:2;27293:6;27289:15;27282:48;27097:240;:::o;27343:366::-;27485:3;27506:67;27570:2;27565:3;27506:67;:::i;:::-;27499:74;;27582:93;27671:3;27582:93;:::i;:::-;27700:2;27695:3;27691:12;27684:19;;27343:366;;;:::o;27715:419::-;27881:4;27919:2;27908:9;27904:18;27896:26;;27968:9;27962:4;27958:20;27954:1;27943:9;27939:17;27932:47;27996:131;28122:4;27996:131;:::i;:::-;27988:139;;27715:419;;;:::o;28140:169::-;28280:21;28276:1;28268:6;28264:14;28257:45;28140:169;:::o;28315:366::-;28457:3;28478:67;28542:2;28537:3;28478:67;:::i;:::-;28471:74;;28554:93;28643:3;28554:93;:::i;:::-;28672:2;28667:3;28663:12;28656:19;;28315:366;;;:::o;28687:419::-;28853:4;28891:2;28880:9;28876:18;28868:26;;28940:9;28934:4;28930:20;28926:1;28915:9;28911:17;28904:47;28968:131;29094:4;28968:131;:::i;:::-;28960:139;;28687:419;;;:::o;29112:241::-;29252:34;29248:1;29240:6;29236:14;29229:58;29321:24;29316:2;29308:6;29304:15;29297:49;29112:241;:::o;29359:366::-;29501:3;29522:67;29586:2;29581:3;29522:67;:::i;:::-;29515:74;;29598:93;29687:3;29598:93;:::i;:::-;29716:2;29711:3;29707:12;29700:19;;29359:366;;;:::o;29731:419::-;29897:4;29935:2;29924:9;29920:18;29912:26;;29984:9;29978:4;29974:20;29970:1;29959:9;29955:17;29948:47;30012:131;30138:4;30012:131;:::i;:::-;30004:139;;29731:419;;;:::o;30156:194::-;30196:4;30216:20;30234:1;30216:20;:::i;:::-;30211:25;;30250:20;30268:1;30250:20;:::i;:::-;30245:25;;30294:1;30291;30287:9;30279:17;;30318:1;30312:4;30309:11;30306:37;;;30323:18;;:::i;:::-;30306:37;30156:194;;;;:::o;30356:225::-;30496:34;30492:1;30484:6;30480:14;30473:58;30565:8;30560:2;30552:6;30548:15;30541:33;30356:225;:::o;30587:366::-;30729:3;30750:67;30814:2;30809:3;30750:67;:::i;:::-;30743:74;;30826:93;30915:3;30826:93;:::i;:::-;30944:2;30939:3;30935:12;30928:19;;30587:366;;;:::o;30959:419::-;31125:4;31163:2;31152:9;31148:18;31140:26;;31212:9;31206:4;31202:20;31198:1;31187:9;31183:17;31176:47;31240:131;31366:4;31240:131;:::i;:::-;31232:139;;30959:419;;;:::o;31384:147::-;31485:11;31522:3;31507:18;;31384:147;;;;:::o;31537:114::-;;:::o;31657:398::-;31816:3;31837:83;31918:1;31913:3;31837:83;:::i;:::-;31830:90;;31929:93;32018:3;31929:93;:::i;:::-;32047:1;32042:3;32038:11;32031:18;;31657:398;;;:::o;32061:379::-;32245:3;32267:147;32410:3;32267:147;:::i;:::-;32260:154;;32431:3;32424:10;;32061:379;;;:::o;32446:442::-;32595:4;32633:2;32622:9;32618:18;32610:26;;32646:71;32714:1;32703:9;32699:17;32690:6;32646:71;:::i;:::-;32727:72;32795:2;32784:9;32780:18;32771:6;32727:72;:::i;:::-;32809;32877:2;32866:9;32862:18;32853:6;32809:72;:::i;:::-;32446:442;;;;;;:::o;32894:180::-;32942:77;32939:1;32932:88;33039:4;33036:1;33029:15;33063:4;33060:1;33053:15;33080:180;33128:77;33125:1;33118:88;33225:4;33222:1;33215:15;33249:4;33246:1;33239:15;33266:143;33323:5;33354:6;33348:13;33339:22;;33370:33;33397:5;33370:33;:::i;:::-;33266:143;;;;:::o;33415:351::-;33485:6;33534:2;33522:9;33513:7;33509:23;33505:32;33502:119;;;33540:79;;:::i;:::-;33502:119;33660:1;33685:64;33741:7;33732:6;33721:9;33717:22;33685:64;:::i;:::-;33675:74;;33631:128;33415:351;;;;:::o;33772:85::-;33817:7;33846:5;33835:16;;33772:85;;;:::o;33863:158::-;33921:9;33954:61;33972:42;33981:32;34007:5;33981:32;:::i;:::-;33972:42;:::i;:::-;33954:61;:::i;:::-;33941:74;;33863:158;;;:::o;34027:147::-;34122:45;34161:5;34122:45;:::i;:::-;34117:3;34110:58;34027:147;;:::o;34180:114::-;34247:6;34281:5;34275:12;34265:22;;34180:114;;;:::o;34300:184::-;34399:11;34433:6;34428:3;34421:19;34473:4;34468:3;34464:14;34449:29;;34300:184;;;;:::o;34490:132::-;34557:4;34580:3;34572:11;;34610:4;34605:3;34601:14;34593:22;;34490:132;;;:::o;34628:108::-;34705:24;34723:5;34705:24;:::i;:::-;34700:3;34693:37;34628:108;;:::o;34742:179::-;34811:10;34832:46;34874:3;34866:6;34832:46;:::i;:::-;34910:4;34905:3;34901:14;34887:28;;34742:179;;;;:::o;34927:113::-;34997:4;35029;35024:3;35020:14;35012:22;;34927:113;;;:::o;35076:732::-;35195:3;35224:54;35272:5;35224:54;:::i;:::-;35294:86;35373:6;35368:3;35294:86;:::i;:::-;35287:93;;35404:56;35454:5;35404:56;:::i;:::-;35483:7;35514:1;35499:284;35524:6;35521:1;35518:13;35499:284;;;35600:6;35594:13;35627:63;35686:3;35671:13;35627:63;:::i;:::-;35620:70;;35713:60;35766:6;35713:60;:::i;:::-;35703:70;;35559:224;35546:1;35543;35539:9;35534:14;;35499:284;;;35503:14;35799:3;35792:10;;35200:608;;;35076:732;;;;:::o;35814:831::-;36077:4;36115:3;36104:9;36100:19;36092:27;;36129:71;36197:1;36186:9;36182:17;36173:6;36129:71;:::i;:::-;36210:80;36286:2;36275:9;36271:18;36262:6;36210:80;:::i;:::-;36337:9;36331:4;36327:20;36322:2;36311:9;36307:18;36300:48;36365:108;36468:4;36459:6;36365:108;:::i;:::-;36357:116;;36483:72;36551:2;36540:9;36536:18;36527:6;36483:72;:::i;:::-;36565:73;36633:3;36622:9;36618:19;36609:6;36565:73;:::i;:::-;35814:831;;;;;;;;:::o;36651:807::-;36900:4;36938:3;36927:9;36923:19;36915:27;;36952:71;37020:1;37009:9;37005:17;36996:6;36952:71;:::i;:::-;37033:72;37101:2;37090:9;37086:18;37077:6;37033:72;:::i;:::-;37115:80;37191:2;37180:9;37176:18;37167:6;37115:80;:::i;:::-;37205;37281:2;37270:9;37266:18;37257:6;37205:80;:::i;:::-;37295:73;37363:3;37352:9;37348:19;37339:6;37295:73;:::i;:::-;37378;37446:3;37435:9;37431:19;37422:6;37378:73;:::i;:::-;36651:807;;;;;;;;;:::o;37464:143::-;37521:5;37552:6;37546:13;37537:22;;37568:33;37595:5;37568:33;:::i;:::-;37464:143;;;;:::o;37613:663::-;37701:6;37709;37717;37766:2;37754:9;37745:7;37741:23;37737:32;37734:119;;;37772:79;;:::i;:::-;37734:119;37892:1;37917:64;37973:7;37964:6;37953:9;37949:22;37917:64;:::i;:::-;37907:74;;37863:128;38030:2;38056:64;38112:7;38103:6;38092:9;38088:22;38056:64;:::i;:::-;38046:74;;38001:129;38169:2;38195:64;38251:7;38242:6;38231:9;38227:22;38195:64;:::i;:::-;38185:74;;38140:129;37613:663;;;;;:::o

Swarm Source

ipfs://bae9406685dbddf9229b32d84b9b80ef252b49534080434bca37ccb2deb7afaa

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.