Contract 0xfd51766bbf5b327cfe0e00f06835033c1edbf9dc

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x7701acc5f3d450a053b20f02bd42274c5047d9e401ce8bd69e6c6eb1b7c7d800Change Treasury201777222022-09-23 13:30:325 days 21 hrs ago0xd4df4d5c3a3afb6c0e65478c080f952b9a67eb38 IN  0xfd51766bbf5b327cfe0e00f06835033c1edbf9dc0 AVAX0.00075699 26
0xa8b500de288827af2562943ae5fd9fdecc72f1728c38103081728c456e1cc60eChange Guard201776792022-09-23 13:29:005 days 21 hrs ago0xd4df4d5c3a3afb6c0e65478c080f952b9a67eb38 IN  0xfd51766bbf5b327cfe0e00f06835033c1edbf9dc0 AVAX0.00120042 26
0x7411b75f49fd16af377dfa20844bee53cec36dbdd9a367563939ff3fdf19d0840x60806040201776282022-09-23 13:27:115 days 21 hrs ago0xd4df4d5c3a3afb6c0e65478c080f952b9a67eb38 IN  Create: NeFiFeeManager0 AVAX0.14098087525
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NeFiFeeManager

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2022-09-23
*/

/**
 *Submitted for verification at snowtrace.io on 2022-09-22
*/

/**
 *Submitted for verification at snowtrace.io on 2022-09-19
*/

//SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;
library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor() {
        _transferOwnership(_msgSender());
    }
    
    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);
    }
}
library NeFiLib {
	using SafeMath for uint256;
		
		function addressInList(address[] memory _list, address _account) internal pure returns (bool){
			for(uint i=0;i<_list.length;i++){
				if(_account == _list[i]){
					return true;
				}
			}
			return false;
		}
		function isInList(address[] memory _list, address _account) internal pure returns (uint256){
			for(uint i=0;i<_list.length;i++){
				if(_account == _list[i]){
					return i;
				}
			}
		}
		
		
		function getAllMultiple(uint256 _x,uint256 _y)internal pure returns(uint256,uint256){
			uint256 Zero = 0;
			if (_y == Zero || _x == Zero || _x > _y){
				return (Zero,_y);
			}
			uint256 z = _y;
			uint256 i = 0;
			while(z >= _x){
				
				z -=_x;
				i++;
							
			}
			return (i,z);
		}
		function getDecimals(uint256 _x) internal view returns(uint){
			uint i = 0;
			while(_x != 0){
				_x = _x.div(10);
				i++;
			}
			return i;
		}
		function elimZero(uint256 _y) internal view returns(uint256){
			uint i = getDecimals(_y);
			uint dec = i;
			uint refDec = i;
			uint _n = 0;
			uint k = 0;
			while(_n ==0 && refDec!=0){
				refDec -= 1;
				_n = _y.div(10**refDec);
				k +=1;
			}
			return k;
		}
		function sendPercentage(uint256 _x,uint256 perc) internal view returns(uint256){
			uint256 exp = getDecimals(_x);
			uint256 percDec = getDecimals(perc);
			uint denom =  21-percDec;
			uint trunc = elimZero(perc);
			uint[3] memory range = [exp,denom,trunc];
			uint256 _y = _x.mul(10**range[1]);
			uint256 _z = _y.mul(perc);
			return _z.div(10**(denom+percDec));
			
		}
		function getRemainder(uint256 _x,uint256 _y)internal pure returns(uint256){
			(uint256 mult,uint256 rem) =  getAllMultiple(_x,_y);
			return rem;
		}
		function getMultiple(uint256 _x,uint256 _y)internal pure returns(uint256){
			(uint256 mult,uint256 rem) = getAllMultiple(_x,_y);
			return mult;
		}
		function doMultiple(uint256 _x,uint256 _y)internal pure returns(uint256){
			uint256 Zero = 0;
			if (_y == Zero || _x == Zero || _x > _y){
				return Zero;
			}
			uint256 _z = _y;
			uint256 One = 1;
			while(_x > One){
				_z += _y;
				_x.sub(One); 		
			}
			return _z;
		}
		
		function findInList(address[] memory _ls,address _account) internal pure returns(uint){
			for(uint i = 0;i<_ls.length;i++){
				if(_ls[i] == _account){
					return i;
				}
			}
		}
		function isLower(uint256 _x,uint256 _y) internal pure returns(bool){
			if(_x<_y){
				return true;
			}
			return false;
		}
		function isHigher(uint256 _x,uint256 _y) internal pure returns(bool){
			if(_x>_y){
				return true;
			}
			return false;
		}
		function isEqual(uint256 _x,uint256 _y) internal pure returns(bool){
			if(isLower(_x,_y)==false && isHigher(_x,_y) ==false){
				return true;
			}
			return false;
		}
		function getLower(uint256 _x,uint256 _y) internal pure returns(uint256){
			if(isEqual(_x,_y)==true || isLower(_x,_y) == true){
				return _x;
			}
			return _y;
		}
		function getHigher(uint256 _x,uint256 _y) internal pure returns(uint256){
			if(isEqual(_x,_y)==true || isHigher(_x,_y) == true){
				return _x;
			}
			return _y;
		}
}pragma solidity ^0.8.0;
/**
 * @dev Collection of functions related to the address type
 */
library Address {
    
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
    
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");
        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }
    
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
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);
}
// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
library SafeERC20 {
    using Address for address;
    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }
    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }
    
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }
    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }
    
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}
// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
interface IERC20Metadata is IERC20 {
    
    function name() external view returns (string memory);
    
    function symbol() external view returns (string memory);
    
    function decimals() external view returns (uint8);
}
// File: @openzeppelin/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
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 _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _beforeTokenTransfer(account, address(0), amount);
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;
        emit Transfer(account, address(0), amount);
        _afterTokenTransfer(account, address(0), 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 {}
}
abstract contract boostManager is Context {
	function getIncreasedDecay(address _account,uint256 _x) external virtual returns(uint256);
}
abstract contract overseer is Context {
	 function getMultiplier(uint256 _x) external virtual returns(uint256);
	 function getBoostPerMin(uint256 _x) external virtual view returns(uint256);
	 function getRewardsPerMin() external virtual view returns (uint256);
	 function getCashoutRed(uint256 _x) external virtual view returns (uint256);
	 function getNftTimes(address _account, uint256 _id,uint256 _x) external virtual view returns(uint256);
	 function isStaked(address _account) internal virtual returns(bool);
	 function getNftAmount(address _account, uint256 _id) external view virtual returns(uint256);
	 function getFee() external virtual view returns(uint256);
	 function getModFee(uint256 _val) external virtual view returns(uint256);
	 function getNftPrice(uint _val) external virtual view returns(uint256);
	 function getEm() external virtual view returns (uint256);  
}
abstract contract dropManager is Context{
	function queryFees(address _account) external virtual returns(uint256) ;
	function queryClaimed(address _account) external virtual returns(uint256);
	function queryDropped(address _account) external virtual returns(uint256);
}
contract NeFiFeeManager is Ownable{
	using SafeMath for uint256;
	struct TOTALFEES{
		uint256 totalPayable;
		uint256 protos;
		uint256 feesOwed;
		uint256 futureFees;
		uint256 feesPaid;
		uint256 collapsed;
		uint256 feeFroze;
		uint256 insolvent;
		uint256 imploded;
		}
	struct PROTOOWNERS{
		string name;
		uint256 protoCreationDate;
		uint256 protoElapsed;
		uint256 protoCollapseDate;
		uint256 protoNextDue;
		uint256 protoDueElapsed;
		uint256 protoFeesPaid;
		uint256 protoFutureFees;
		uint256 protoIncreasedDecay;
		uint256 protoFeeFroze;
		uint256 protoTotalPayable;
		}
	struct BOOL{
		bool owed;
		bool boolInsolvent;
		bool boolImploded;
		bool boolCollapsed;
		}
	
	mapping(address => TOTALFEES) public totalfees;
	mapping(address => PROTOOWNERS[]) public protoowners;
	mapping(address => BOOL[]) public bools;
	address[] public protoOwners;
	address[] public Managers;
	address payable teamPool;
	uint256 public teamPerc;
	address payable rewardsPool;
	uint256 public rewardsPerc;
	uint256 public treasuryPerc;
	uint256 public gracePeriod = 5 days;
	uint256 public protoLife = 500 days;
	uint256 public maxFeePayment = 365 days;
	uint256 public maxPayPeriods = 12;
	uint256 public feePeriod = 31 days;
	bool  boostem = false;
	uint256 public tokFee = 15*(10**6);
	address public feeToken;
	address payable treasury;
	bool public feeFroze = true;
	uint256  Zero =0;
	uint256  One = 1;
	address public Guard;
	boostManager public boostMGR;
	dropManager public dropMGR;
	overseer public over;
	IERC20 public feeTok;
	modifier onlyManager() {require(_msgSender() == owner() || NeFiLib.addressInList(Managers,_msgSender()), "NOT_Manager");_;}
	modifier onlyGuard() {require(Guard == _msgSender() || _msgSender() == owner(), "NOT_GUARD");_;}
	constructor(address[] memory _addresses){
		boostMGR = boostManager(_addresses[0]);
		over = overseer(_addresses[1]);
		feeTok = IERC20(_addresses[2]);
		dropMGR = dropManager(_addresses[3]);
		treasury = payable(owner());
	}
	function payFeeToken(address _account, uint256 _intervals, uint256 _x,uint256 _amount) payable external onlyGuard{
	    uint256 total = NeFiLib.doMultiple(_intervals,tokFee);
	    feeTok.transferFrom(_account, teamPool, NeFiLib.sendPercentage(_amount,teamPerc));
	    feeTok.transferFrom(_account, rewardsPool, NeFiLib.sendPercentage(_amount,rewardsPerc));
	    feeTok.transferFrom(_account, treasury, NeFiLib.sendPercentage(_amount,treasuryPerc));
	    uint256 leftover = _amount.sub(NeFiLib.sendPercentage(_amount,teamPerc)).sub(NeFiLib.sendPercentage(_amount,rewardsPerc)).sub(NeFiLib.sendPercentage(_amount,treasuryPerc));
	    feeTok.transferFrom(_account, treasury, leftover);
	    updateFeesPaid(_account,_intervals,_x);
	}
	function payFeeAvax(address _account,uint256 _intervals, uint256 _x) payable external onlyGuard{
	    uint256 _amount = msg.value;
	    payable(teamPool).transfer(NeFiLib.sendPercentage(_amount,teamPerc));
	    payable(rewardsPool).transfer(NeFiLib.sendPercentage(_amount,rewardsPerc));
	    payable(treasury).transfer(NeFiLib.sendPercentage(_amount,treasuryPerc));
	    uint256 balanceRemainder = _amount.sub(NeFiLib.sendPercentage(_amount,treasuryPerc)).sub(NeFiLib.sendPercentage(_amount,rewardsPerc)).sub(NeFiLib.sendPercentage(_amount,teamPerc));
	    if(balanceRemainder>0){
	    	payable(treasury).transfer(balanceRemainder);
	    }
	    updateFeesPaid(_account,_intervals,_x);
	}
	function queryAvaxBalance(address _account) internal view returns(uint256) {
		return _account.balance;
	}
	function queryFeeTokBalance(address _account) internal view returns(uint256) {
		return feeTok.balanceOf(_account);
	}
	function checkAvaxBalanceOfUser(address _account,uint256 _requested) internal{
		require(_requested <= queryAvaxBalance(_account),"you do not have enough to make this purchase");
	}
	function checkFeeTokenBalanceOfUser(address _account,uint256 _total) internal{
		require(_total <= queryFeeTokBalance(_account),"you do not have enough to make this purchase");
	}	
	function reconcileFees() external onlyGuard{
		for(uint i = 0;i<protoOwners.length;i++){
			INTreconcileAccountFees(protoOwners[i]);
		}
	}
	function reconcileAccountFees(address _account) external onlyGuard{
		INTreconcileAccountFees(_account);
	}
	function INTreconcileAccountFees(address _account) internal{

		for(uint i = 0;i<getProtoOwnersLength(_account);i++){
			
			INTreconcileFees(_account,i);
			
		}
		
		INTupdateOwed(_account);
		
		INTupdateFutureFees(_account);
		
		INTupdateTotalPayable(_account);
		
	}
	function reconcileFees(address _account,uint256 _x) external  onlyGuard{
		INTreconcileFees(_account,_x);
	}
	function INTreconcileFees(address _account,uint256 _x) internal{
		INTupdateProtoIncreasedDecay(_account,_x);
		INTupdateProtoCollapseDate(_account,_x);
		INTupdateProtoFeeFroze(_account,_x,block.timestamp);
		INTupdateProtoElapsed(_account,_x);
		INTupdateProtoDueElapsed(_account,_x);
	    	INTupdateBoolOwed(_account,_x);
		INTupdateBoolInsolvent(_account,_x);
		INTupdateProtoFutureFees(_account,_x);
		INTupdateProtoTotalPayable(_account,_x);
	}
	function addProto(address _account,string memory _name) external onlyGuard{
		INTaddProto(_account,_name);
	}
	function INTaddProto(address _account,string memory _name) internal{
		uint256 _time = block.timestamp;
		
		if(NeFiLib.addressInList(protoOwners,_account) == false){
			protoOwners.push(_account);
		}		
		uint256 _protoFeeFroze = Zero;
		uint256 life = block.timestamp.add(protoLife);
		PROTOOWNERS[] storage _protoowners = protoowners[_account];
		uint256 len = _protoowners.length.add(1);	
		_protoowners.push(PROTOOWNERS({
			name:_name,
			protoCreationDate:block.timestamp,
			protoElapsed:Zero,
			protoCollapseDate:life,
			protoNextDue:block.timestamp,
			protoDueElapsed:Zero,
			protoFeesPaid:Zero,
			protoFutureFees:Zero,
			protoIncreasedDecay:Zero,
			protoFeeFroze:Zero,
			protoTotalPayable:maxPayPeriods
		}));		
		BOOL[] storage _bool = bools[_account];
		_bool.push(BOOL({boolInsolvent:false,boolImploded:false,boolCollapsed:false,owed:false}));
		INTupdateProtos(_account,true,One);
		updateFeesPaid(_account,1,len.sub(1));

		
	}
	function collapseProto(address _account,string memory _name)external onlyGuard{
		require(nameExists(_account,_name)==true,"the proto to be collapsed could not be found");
		INTcollapse(_account,findFromName(_account,_name));
	}
	function INTcollapse(address _account,uint256 _x) internal{
	    	PROTOOWNERS[] storage protos = protoowners[_account];
	    	BOOL[] storage boo = bools[_account];
	    	if(bools[_account][_x].boolCollapsed == true){
	    		INTupdateCollapsed(_account);
	    	}
	    	for(uint i=_x;i<protos.length;i++){
	    		if(i != protos.length-1){
	  			PROTOOWNERS storage proto_bef = protos[i];
	  			PROTOOWNERS storage proto_now = protos[i+1];
	    			BOOL storage bool_bef = boo[i];
				BOOL storage bool_now = boo[i+1];
		    	        proto_bef.name =proto_now.name;
				proto_bef.protoCreationDate = proto_now.protoCreationDate;
				proto_bef.protoElapsed = proto_now.protoElapsed;
				proto_bef.protoCollapseDate = proto_now.protoCollapseDate;
				proto_bef.protoNextDue = proto_now.protoNextDue;
				proto_bef.protoDueElapsed = proto_now.protoDueElapsed;
				proto_bef.protoFutureFees = proto_now.protoFutureFees;
				proto_bef.protoIncreasedDecay = proto_now.protoIncreasedDecay;
				proto_bef.protoFeeFroze = proto_now.protoFeeFroze;
				proto_bef.protoTotalPayable = proto_now.protoTotalPayable;
				bool_bef.owed = bool_now.owed;
				bool_bef.boolInsolvent = bool_now.boolInsolvent;
				bool_bef.boolImploded = bool_now.boolImploded;
				bool_bef.boolCollapsed = bool_now.boolCollapsed;
	    		}
	    	}
	    	protos.pop();
	    	boo.pop();
    	}
    	function getProtoOwnersLength(address _account) internal returns(uint256){
    		PROTOOWNERS[] storage protos = protoowners[_account];
		return protos.length;
	}
    	function updateFeesPaid(address _account,uint _intervals,uint256 _x) internal{
    		if(_x == 101){
	    		for(uint i=0;i<_intervals;i++){
		    		INTupdateFeesPaid(_account,true,findLowest(_account),1);
		    	}
		}else{
			for(uint i=0;i<_intervals;i++){
				
				INTupdateFeesPaid(_account,true,_x,1);
			}
		}
		INTreconcileAccountFees(_account);
    	}
    	function MGRrecPayFees(address _account, uint _intervals,uint256 _x)external onlyGuard(){
    		updateFeesPaid(_account,_intervals,_x);
    	}
    	function EXTnameExists(address _account, string memory _name) external returns(bool){
    		return nameExists(_account,_name);
    	}
    	function nameExists(address _account, string memory _name) internal returns(bool){
    		PROTOOWNERS[] storage protos = protoowners[_account];
    		for(uint i = 0;i<protos.length;i++) {
    			PROTOOWNERS storage proto = protos[i];
    			if(keccak256(bytes(proto.name)) == keccak256(bytes(_name))){
    				return true;
    			}
    		}
    	return false;
    	}
    	function findFromName(address _account, string memory _name) internal view returns(uint256){
    	    	PROTOOWNERS[] storage protos = protoowners[_account];
    	    	for(uint i = 0;i<protos.length;i++) {
    			PROTOOWNERS storage proto = protos[i];
    			if(keccak256(bytes(proto.name)) == keccak256(bytes(_name))){
    				return i;
    			}
    		}
    	}
	function findLowest(address _account) internal returns(uint256){
		uint256 now;
	    	uint256 low;
	    	uint256 lowest = INTgetProtoDueElapsed(_account,0);
	    	INTreconcileAccountFees(_account);
	    	for(uint j = 0;j<INTgetProtoownersLength(_account);j++){
	    		now = INTgetProtoDueElapsed(_account,j);
	    		if(now < lowest && bools[_account][j].boolCollapsed != true && bools[_account][j].boolImploded != true){
	    			low = j;
	    			lowest = INTgetProtoDueElapsed(_account,j);
	      		} 
	    	}
    		return low;
   	}
   	function findHighest(address _account) internal returns(uint256){
	    	uint256 high;
	    	uint256 highest = INTgetProtoDueElapsed(_account,0);
	    	INTreconcileAccountFees(_account);
	    	for(uint j = 0;j<INTgetProtoownersLength(_account);j++){
	    		
	    		if(INTgetProtoDueElapsed(_account,j) > highest){
	    			high = j;
	    			highest = INTgetProtoDueElapsed(_account,j);
	      		} 
	    	}
    		return high;
   	}
   	function getTotalfees(address _account) external returns(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256) {
		TOTALFEES storage _totalfees = totalfees[_account];
		return (_totalfees.totalPayable,_totalfees.protos,_totalfees.feesOwed,_totalfees.futureFees,_totalfees.feesPaid,_totalfees.collapsed,_totalfees.feeFroze,_totalfees.insolvent,_totalfees.imploded);
	}
	//internal updates
	function INTupdateProtoIncreasedDecay(address _account,uint256 _x) internal {
		if(boostem == true){
			protoowners[_account][_x].protoIncreasedDecay = boostMGR.getIncreasedDecay(_account,_x);
		}else{
			protoowners[_account][_x].protoIncreasedDecay = Zero;
		}
	}
	function INTupdateProtoFeeFroze(address _account,uint256 _x,uint256 _time) internal {
		if(feeFroze == false && INTgetFeeFroze() != Zero){
			protoowners[_account][_x].protoFeeFroze =_time.sub(NeFiLib.getHigher(INTgetFeeFroze(),INTgetProtoCreationDate(_account,_x)));
			INTupdateProtoNextDue(_account,_x,protoowners[_account][_x].protoFeeFroze,true);
			totalfees[_account].feeFroze += _time.sub(INTgetFeeFroze());
			protoowners[_account][_x].protoFeeFroze = Zero;
		}else if(feeFroze == true){
			protoowners[_account][_x].protoFeeFroze =_time.sub(NeFiLib.getHigher(INTgetFeeFroze(),INTgetProtoCreationDate(_account,_x)));
			}
		
	}
	function INTupdateProtoTotalPayable(address _account,uint256 _x) internal {
		protoowners[_account][_x].protoTotalPayable = NeFiLib.getMultiple(feePeriod,NeFiLib.getLower(INTgetProtoCollapseDate(_account,_x).sub(block.timestamp),maxFeePayment)).sub(protoowners[_account][_x].protoFutureFees);
	}
	function INTupdateProtoElapsed(address _account,uint256 _x) internal{		
		protoowners[_account][_x].protoElapsed = (block.timestamp.sub(INTgetProtoCreationDate(_account,_x))).add(INTgetProtoIncreasedDecay(_account,_x));
	}
	function INTupdateProtoDueElapsed(address _account,uint256 _x) internal{
		uint256 next =  INTgetProtoFeeFroze(_account,_x).add(INTgetProtoNextDue(_account,_x));
		if(NeFiLib.isLower(next,block.timestamp)==true){
			if(block.timestamp.sub(next)>=gracePeriod){
				INTupdateBoolImploded(_account,_x);
			}
		}
		protoowners[_account][_x].protoDueElapsed = next.sub(block.timestamp);
	}
	function INTupdateProtoCollapseDate(address _account,uint256 _x) internal {
		protoowners[_account][_x].protoCollapseDate = INTgetProtoCreationDate(_account,_x).add(protoLife.add(INTgetProtoIncreasedDecay(_account,_x)));
	}
	function INTupdateProtoFutureFees(address _account,uint256 _x) internal {
		protoowners[_account][_x].protoFutureFees = NeFiLib.getMultiple(feePeriod,INTgetProtoDueElapsed(_account,_x));
	}
	function INTupdateBoolOwed(address _account,uint256 _x) internal {
		if(INTgetProtoDueElapsed(_account,_x)<feePeriod){
    			bools[_account][_x].owed = true;
    		}else{
    			bools[_account][_x].owed = false;
    		}
	}
	function INTupdateBoolInsolvent(address _account,uint256 _x) internal {
		if(INTgetProtoDueElapsed(_account,_x)<gracePeriod){
			bools[_account][_x].boolInsolvent = true;
		}else if(INTgetProtoDueElapsed(_account,_x)>gracePeriod){
			bools[_account][_x].boolInsolvent = false;
		}else if(INTgetProtoDueElapsed(_account,_x)>gracePeriod){
			bools[_account][_x].boolInsolvent = false;
		}				
	}
	function INTupdateFeeFroze(uint256 _time) internal {
		if(feeFroze == false){
			totalfees[address(this)].feeFroze = Zero;
		}else{
			totalfees[address(this)].feeFroze = _time;
		}
	}
	function INTupdateProtos(address _account,bool _bool,uint256 _protos) internal {
		if(_bool==false){
			totalfees[_account].protos -= _protos;
			totalfees[address(this)].protos -= _protos;
		}else{
			totalfees[_account].protos += _protos;
			totalfees[address(this)].protos += _protos;
		}
	}
	function INTupdateTotalPayable(address _account) internal {
		totalfees[address(this)].totalPayable -= totalfees[_account].totalPayable;
		totalfees[_account].totalPayable = Zero;
		for(uint i=0;i<totalfees[_account].protos;i++){
			totalfees[_account].totalPayable += protoowners[_account][i].protoTotalPayable;
		}
		totalfees[address(this)].totalPayable += totalfees[_account].totalPayable;
	}
	function INTupdateFutureFees(address _account) internal {
		totalfees[address(this)].futureFees -= totalfees[_account].futureFees;
		totalfees[_account].futureFees = Zero;
		for(uint i=0;i<totalfees[_account].protos;i++){
			totalfees[_account].futureFees += protoowners[_account][i].protoFutureFees;
		}
		totalfees[address(this)].futureFees += totalfees[_account].futureFees;
	}
	function INTupdateOwed(address _account) internal {
		totalfees[address(this)].feesOwed -= totalfees[_account].feesOwed;
		totalfees[_account].feesOwed = Zero;
		for(uint i=0;i<totalfees[_account].protos;i++){
			if(bools[_account][i].owed == true){
				totalfees[_account].feesOwed += 1;
			}
		}
		totalfees[address(this)].feesOwed += totalfees[_account].feesOwed;
	}
	function INTupdateFeesPaid(address _account,bool _bool,uint256 _x,uint256 _feesPaid) internal {
		if(_bool==true){
			protoowners[_account][_x].protoFeesPaid +=_feesPaid;
			protoowners[_account][_x].protoNextDue += feePeriod.mul(_feesPaid);
			totalfees[_account].feesPaid += _feesPaid;
			totalfees[address(this)].feesPaid += _feesPaid;
		}else{
			protoowners[_account][_x].protoFeesPaid -=_feesPaid;
			protoowners[_account][_x].protoNextDue -= feePeriod.mul(_feesPaid);
			totalfees[_account].feesPaid -= _feesPaid;
			totalfees[address(this)].feesPaid -= _feesPaid;
		}
	}
	function INTupdateCollapsed(address _account) internal {
			totalfees[_account].collapsed += 1;
			totalfees[address(this)].collapsed += 1;
			INTupdateProtos(_account,false,1);
	}
	function INTupdateImploded(address _account) internal {
		totalfees[_account].insolvent += 1;
		totalfees[address(this)].insolvent += 1;
		INTupdateProtos(_account,false,1);
		
	}
	function INTupdateProtoNextDue(address _account,uint256 _x,uint256 _protoNextDue,bool _bool) internal {
		if(_bool == false){
			protoowners[_account][_x].protoNextDue -= _protoNextDue;
		}else{
			protoowners[_account][_x].protoNextDue += _protoNextDue;
		}
		INTupdateBoolInsolvent(_account,_x);
		INTupdateBoolOwed(_account,_x);
		INTupdateProtoFutureFees(_account,_x);
		INTupdateProtoTotalPayable(_account,_x);
		
	}
	function INTupdateBoolImploded(address _account,uint256 _x) internal {
			bools[_account][_x].boolImploded = true;
			INTupdateImploded(_account);
			INTcollapse(_account,_x);	
	}
	
	function INTupdateBoolCollapsed(address _account,uint256 _x) internal {
		uint256 coll = INTgetProtoCollapseDate(_account,_x);
		if(NeFiLib.isLower(INTgetProtoCollapseDate(_account,_x),block.timestamp)==true){
			bools[_account][_x].boolCollapsed = true;
		}
	}
	function INTupdateName(address _account,string memory _Oldname,string memory _newName) internal {
		protoowners[_account][findFromName(_account,_Oldname)].name = _newName;
	}
	//internal gets
	function INTgetBoolImploded(address _account,uint256 _x) internal view returns(bool){
		return bools[_account][_x].boolImploded;
	}
	function INTgetInsolvent(address _account) internal view returns(uint256){
		return totalfees[_account].insolvent;
	}
	function INTgetName(address _account,uint256 _x) internal view returns(string memory){
		return protoowners[_account][_x].name;
	}
	function INTgetTotalPayable(address _account) internal view returns(uint256){
		return totalfees[_account].totalPayable;
	}
	function INTgetFeeFroze() internal view returns(uint256){
		return totalfees[address(this)].feeFroze;
	}
	function INTgetProtoDueElapsed(address _account,uint256 _x) internal view returns(uint256){
		return protoowners[_account][_x].protoDueElapsed;
	}
	function INTgetFeesOwed(address _account) internal view returns(uint256){
		return totalfees[_account].feesOwed;
	}
	function INTgetProtoElapsed(address _account,uint256 _x) internal view returns (uint256){
		return protoowners[_account][_x].protoElapsed;
	}

	function INTgetBoolOwed(address _account,uint256 _x) internal view returns(bool){
		return bools[_account][_x].owed;
	}
	function INTgetBoolInsolvent(address _account,uint256 _x) internal view returns(bool){
		return bools[_account][_x].boolInsolvent;
	}
	function INTgetProtos(address _account) internal view returns(uint256){
		return totalfees[_account].protos;
	}
	function INTgetFutureFees(address _account) internal view returns(uint256){
		return totalfees[_account].futureFees;
	}
	function INTgetFeesPaid(address _account) internal view returns(uint256){
		return totalfees[_account].feesPaid;
	}
	function INTgetProtoCreationDate(address _account,uint256 _x) internal view returns(uint256){
		return protoowners[_account][_x].protoCreationDate;
	}
	function INTgetProtoNextDue(address _account,uint256 _x) internal view returns(uint256){
		return protoowners[_account][_x].protoNextDue;
	}
	function INTgetProtoFutureFees(address _account,uint256 _x) internal view returns(uint256){
		return protoowners[_account][_x].protoFutureFees;
	}
	function INTgetProtoIncreasedDecay(address _account,uint256 _x) internal view returns(uint256){
		return protoowners[_account][_x].protoIncreasedDecay;
	}
	function INTgetProtoCollapseDate(address _account,uint256 _x) internal view returns(uint256){
		return protoowners[_account][_x].protoCollapseDate;
	}
	function INTgetProtoFeeFroze(address _account,uint256 _x) internal view returns(uint256){
		return protoowners[_account][_x].protoFeeFroze;
	}
	function INTgetProtoTotalPayable(address _account,uint256 _x) internal view returns(uint256){
		return protoowners[_account][_x].protoTotalPayable;
	}
	function INTgetBoolCollapsed(address _account,uint256 _x) internal view returns(bool){
		return bools[_account][_x].boolCollapsed;
	}
	function INTgetImploded(address _account) internal view returns(uint256){
		return totalfees[_account].imploded;
	}
	function INTgetCollapsed(address _account) internal view returns(uint256){
		return totalfees[_account].collapsed;
	}
	//ext updates
//ext updates
	function updateBoolOwed(address _account,uint256 _x,bool _owed) external onlyManager() {
		bools[_account][_x].owed = _owed;
	}
	function updateTotalPayable(address _account,uint256 _totalPayable) external  onlyManager() {
		totalfees[_account].totalPayable = _totalPayable;
	}
	function updateProtos(address _account,uint256 _protos) external  onlyManager() {
		totalfees[_account].protos = _protos;
	}
	function updateFeesOwed(address _account,uint256 _feesOwed) external  onlyManager() {
		totalfees[_account].feesOwed = _feesOwed;
	}
	function updateFutureFees(address _account,uint256 _futureFees) external  onlyManager() {
		totalfees[_account].futureFees = _futureFees;
	}
	function updateCollapsed(address _account,uint256 _collapsed) external  onlyManager() {
		totalfees[_account].collapsed = _collapsed;
	}
	function updateFeeFroze(address _account,uint256 _feeFroze) external  onlyManager() {
		totalfees[_account].feeFroze = _feeFroze;
	}
	function updateInsolvent(address _account,uint256 _insolvent) external  onlyManager() {
		totalfees[_account].insolvent = _insolvent;
	}
	function updateImploded(address _account,uint256 _imploded) external  onlyManager() {
		totalfees[_account].imploded = _imploded;
	}
	function updateName(address _account,uint256 _x,string memory _name) external  onlyManager() {
		protoowners[_account][_x].name = _name;
	}
	function updateProtoCreationDate(address _account,uint256 _x,uint256 _protoCreationDate) external  onlyManager() {
		protoowners[_account][_x].protoCreationDate = _protoCreationDate;
	}
	function updateProtoCollapseDate(address _account,uint256 _x,uint256 _protoCollapseDate) external  onlyManager() {
		protoowners[_account][_x].protoCollapseDate = _protoCollapseDate;
	}
	function updateProtoNextDue(address _account,uint256 _x,uint256 _protoNextDue) external  onlyManager() {
		protoowners[_account][_x].protoNextDue = _protoNextDue;
	}
	function updateBoolCollapsed(address _account,uint256 _x,bool _bool) external  onlyManager() {
		bools[_account][_x].boolCollapsed = _bool;
	}
	function updateProtoFutureFees(address _account,uint256 _x,uint256 _protoFutureFees) external  onlyManager() {
		protoowners[_account][_x].protoFutureFees = _protoFutureFees;
	}
	function updateProtoIncreasedDecay(address _account,uint256 _x,uint256 _protoIncreasedDecay) external  onlyManager() {
		protoowners[_account][_x].protoIncreasedDecay = _protoIncreasedDecay;
	}
	function updateProtoFeeFroze(address _account,uint256 _x,uint256 _protoFeeFroze) external  onlyManager() {
		protoowners[_account][_x].protoFeeFroze = _protoFeeFroze;
	}
	function updateBoolImploded(address _account,uint256 _x,bool _boolImploded) external  onlyManager() {
		bools[_account][_x].boolImploded = _boolImploded;
	}
	function updateProtoTotalPayable(address _account,uint256 _x,uint256 _protoTotalPayable) external onlyManager() {
		protoowners[_account][_x].protoTotalPayable = _protoTotalPayable;
	}
	//external gets
	function getTotalPayable(address _account) external view returns(uint256){
		return totalfees[_account].totalPayable;
	}
	function getProtos(address _account) external view returns(uint256){
		return totalfees[_account].protos;
	}
	function getFeesOwed(address _account) external view returns(uint256){
		return totalfees[_account].feesOwed;
	}
	function getFutureFees(address _account) external view returns(uint256){
		return totalfees[_account].futureFees;
	}
	
	function getFeesPaid(address _account) external view returns(uint256){
		return totalfees[_account].feesPaid;
	}
	function getInsolvent(address _account) external view returns(uint256){
		return totalfees[_account].insolvent;
	}
	function getCollapsed(address _account) external view returns(uint256){
		return totalfees[_account].collapsed;
	}
	function getFeeFroze(address _account) external view returns(uint256){
		return totalfees[_account].feeFroze;
	}
	function getImploded(address _account) external view returns(uint256){
		return totalfees[_account].imploded;
	}
	function getName(address _account,uint256 _x) external view returns(string memory){
		return protoowners[_account][_x].name;
	}
	function getProtoCreationDate(address _account,uint256 _x) external view returns(uint256){
		return protoowners[_account][_x].protoCreationDate;
	}
	function getProtoCollapseDate(address _account,uint256 _x) external view returns(uint256){
		return protoowners[_account][_x].protoCollapseDate;
	}
	function getProtoNextDue(address _account,uint256 _x) external view returns(uint256){
		return protoowners[_account][_x].protoNextDue;
	}
	function getProtoIncreasedDecay(address _account,uint256 _x) external view returns(uint256){
		return protoowners[_account][_x].protoIncreasedDecay;
	}
	function getProtoFutureFees(address _account,uint256 _x) external view returns(uint256){
		return protoowners[_account][_x].protoFutureFees;
	}
	function getProtoFeeFroze(address _account,uint256 _x) external view returns(uint256){
		return protoowners[_account][_x].protoFeeFroze;
	}
	function getProtoTotalPayable(address _account,uint256 _x) external view returns(uint256){
		return protoowners[_account][_x].protoTotalPayable;
	}
	function getBoolInsolvent(address _account,uint256 _x) external view returns(bool){
		return bools[_account][_x].boolInsolvent;
	}
	function getBoolImploded(address _account,uint256 _x) external view returns(bool){
		return bools[_account][_x].boolImploded;
	}
	function getBoolCollapsed(address _account,uint256 _x) external view returns(bool){
		return bools[_account][_x].boolCollapsed;
	}
	//get Struct
	function getTotalfees(address _account,uint256 _x) external returns(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256){
		TOTALFEES storage _totalfees = totalfees[_account];
		return (_totalfees.totalPayable,_totalfees.protos,_totalfees.feesOwed,_totalfees.futureFees,_totalfees.feesPaid,_totalfees.collapsed,_totalfees.feeFroze,_totalfees.insolvent,_totalfees.imploded);
	}
	function getProtoowners(address _account,uint256 _x) external returns(string memory,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256){
		PROTOOWNERS[] storage _protoowners = protoowners[_account];
		PROTOOWNERS storage _protoowners_ = _protoowners[_x];
		return (_protoowners_.name,_protoowners_.protoCreationDate,_protoowners_.protoElapsed,_protoowners_.protoCollapseDate,_protoowners_.protoNextDue,_protoowners_.protoDueElapsed,_protoowners_.protoFutureFees,_protoowners_.protoIncreasedDecay,_protoowners_.protoFeeFroze,_protoowners_.protoTotalPayable);
	}
	function getProtoownersAccountsLength() external returns(uint256){
		return protoOwners.length;
	}
	function getProtoAddress(uint256 _x) external returns(address){
		return protoOwners[_x];
	}
	function getBool(address _account,uint256 _x) external returns(bool,bool,bool,bool){
		BOOL[] storage _bool = bools[_account];
		BOOL storage _bool_ = _bool[_x];
		return (_bool_.owed,_bool_.boolInsolvent,_bool_.boolImploded,_bool_.boolCollapsed);
	}
	function getProtoownersLength(address _account) external view returns(uint256){
		return INTgetProtoownersLength(_account);
	}
	function INTgetProtoownersLength(address _account) internal view returns(uint256){
		PROTOOWNERS[] storage _protoowners = protoowners[_account];
		 return _protoowners.length;
	}
	//only Owner Functions
	function pauseFees(bool _x) external onlyOwner {
	    	feeFroze = _x;
		uint256 _time = block.timestamp;
		for(uint j = 0;j<protoOwners.length;j++){
			address _account = protoOwners[j];
			for(uint i = 0;i<INTgetProtoownersLength(_account);i++) {
		    		INTupdateProtoFeeFroze(_account,i,_time);
		    	}
		}
		INTupdateFeeFroze(_time);
	}
	function removeManagers() external onlyOwner() {
    		for(uint i=0;i<Managers.length;i++){
    			Managers.pop();
    		}
    	}
    	function updateManagers(address newVal) external  onlyOwner{
    		if(NeFiLib.addressInList(Managers,newVal) ==false){
        		Managers.push(newVal); //token swap address
        	}
    	}
    	function changeMaxPeriods(uint256 _periods) external  onlyOwner() {
    		maxPayPeriods = _periods;
    		maxFeePayment = maxPayPeriods.mul(feePeriod);
   	 }
    	function changeFeePeriod(uint256 _days) external onlyOwner() {
    		uint256 maxPeriods = NeFiLib.getMultiple(feePeriod,maxFeePayment);
    		feePeriod = _days.mul(1 days);
    		maxFeePayment = maxPeriods.mul(feePeriod);
        }
        function changeTreasury(address payable _account) external onlyOwner{
    		treasury = _account;
        }
        function changeGuard(address _account) external onlyOwner(){
    		Guard = _account;
        }
        function boostit(bool _bool) external onlyOwner(){
        	boostem = _bool;
        }
        function changeOverseer(address _account) external  onlyOwner(){
    		over = overseer(_account);
        }
        function changeBoostManager(address _account) external  onlyOwner(){
    		boostMGR = boostManager(_account);
        }
	function changeDropManager(address _account) external  onlyOwner(){
    		dropMGR = dropManager(_account);
        }
        function updateTeamPool(address payable _account) external onlyOwner(){
        	teamPool = _account;
        }
        function updateRewardsPool(address payable _account) external onlyOwner(){
        	rewardsPool = _account;
        }
        function updateTeamPoolPercentage(uint256 _perc) external onlyOwner(){
        	teamPerc =_perc;
        }
        function updateTreasuryPoolPercentage(uint256 _perc) external onlyOwner(){
        	treasuryPerc =_perc;
        }
        function updateRewardsPoolPercentage(uint256 _perc) external onlyOwner(){
        	rewardsPerc =_perc;
        }
	function transferOut(address payable _to,uint256 _amount) payable external  onlyOwner(){
		_to.transfer(_amount);
	}
	function sendTokenOut(address _to,address _token, uint256 _amount) external onlyOwner(){
		IERC20 newtok = IERC20(_token);
		feeTok.transferFrom(address(this), _to, _amount);
	}
	function transferAllOut(address payable _to,uint256 _amount) payable external onlyOwner(){
		_to.transfer(address(this).balance);
	}
	function sendAllTokenOut(address payable _to,address _token) external onlyOwner(){
		IERC20 newtok = IERC20(_token);
		feeTok.transferFrom(address(this), _to, feeTok.balanceOf(address(this)));
	}

}

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"string","name":"_name","type":"string"}],"name":"EXTnameExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Guard","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_intervals","type":"uint256"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"MGRrecPayFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"Managers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"string","name":"_name","type":"string"}],"name":"addProto","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"bools","outputs":[{"internalType":"bool","name":"owed","type":"bool"},{"internalType":"bool","name":"boolInsolvent","type":"bool"},{"internalType":"bool","name":"boolImploded","type":"bool"},{"internalType":"bool","name":"boolCollapsed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"boostMGR","outputs":[{"internalType":"contract boostManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_bool","type":"bool"}],"name":"boostit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"changeBoostManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"changeDropManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_days","type":"uint256"}],"name":"changeFeePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"changeGuard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_periods","type":"uint256"}],"name":"changeMaxPeriods","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"changeOverseer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_account","type":"address"}],"name":"changeTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"string","name":"_name","type":"string"}],"name":"collapseProto","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dropMGR","outputs":[{"internalType":"contract dropManager","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeFroze","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeTok","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getBool","outputs":[{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"},{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getBoolCollapsed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getBoolImploded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getBoolInsolvent","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getCollapsed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getFeeFroze","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getFeesOwed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getFeesPaid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getFutureFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getImploded","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getInsolvent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getProtoAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getProtoCollapseDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getProtoCreationDate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getProtoFeeFroze","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getProtoFutureFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getProtoIncreasedDecay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getProtoNextDue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getProtoTotalPayable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getProtoowners","outputs":[{"internalType":"string","name":"","type":"string"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getProtoownersAccountsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getProtoownersLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getProtos","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getTotalPayable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"getTotalfees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"getTotalfees","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gracePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFeePayment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPayPeriods","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"over","outputs":[{"internalType":"contract overseer","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_x","type":"bool"}],"name":"pauseFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_intervals","type":"uint256"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"payFeeAvax","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_intervals","type":"uint256"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"payFeeToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"protoLife","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"protoOwners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"protoowners","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"uint256","name":"protoCreationDate","type":"uint256"},{"internalType":"uint256","name":"protoElapsed","type":"uint256"},{"internalType":"uint256","name":"protoCollapseDate","type":"uint256"},{"internalType":"uint256","name":"protoNextDue","type":"uint256"},{"internalType":"uint256","name":"protoDueElapsed","type":"uint256"},{"internalType":"uint256","name":"protoFeesPaid","type":"uint256"},{"internalType":"uint256","name":"protoFutureFees","type":"uint256"},{"internalType":"uint256","name":"protoIncreasedDecay","type":"uint256"},{"internalType":"uint256","name":"protoFeeFroze","type":"uint256"},{"internalType":"uint256","name":"protoTotalPayable","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"reconcileAccountFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reconcileFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"}],"name":"reconcileFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeManagers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardsPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"sendAllTokenOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"sendTokenOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"teamPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalfees","outputs":[{"internalType":"uint256","name":"totalPayable","type":"uint256"},{"internalType":"uint256","name":"protos","type":"uint256"},{"internalType":"uint256","name":"feesOwed","type":"uint256"},{"internalType":"uint256","name":"futureFees","type":"uint256"},{"internalType":"uint256","name":"feesPaid","type":"uint256"},{"internalType":"uint256","name":"collapsed","type":"uint256"},{"internalType":"uint256","name":"feeFroze","type":"uint256"},{"internalType":"uint256","name":"insolvent","type":"uint256"},{"internalType":"uint256","name":"imploded","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferAllOut","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferOut","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryPerc","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"bool","name":"_bool","type":"bool"}],"name":"updateBoolCollapsed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"bool","name":"_boolImploded","type":"bool"}],"name":"updateBoolImploded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"bool","name":"_owed","type":"bool"}],"name":"updateBoolOwed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_collapsed","type":"uint256"}],"name":"updateCollapsed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_feeFroze","type":"uint256"}],"name":"updateFeeFroze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_feesOwed","type":"uint256"}],"name":"updateFeesOwed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_futureFees","type":"uint256"}],"name":"updateFutureFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_imploded","type":"uint256"}],"name":"updateImploded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_insolvent","type":"uint256"}],"name":"updateInsolvent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newVal","type":"address"}],"name":"updateManagers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"string","name":"_name","type":"string"}],"name":"updateName","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"uint256","name":"_protoCollapseDate","type":"uint256"}],"name":"updateProtoCollapseDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"uint256","name":"_protoCreationDate","type":"uint256"}],"name":"updateProtoCreationDate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"uint256","name":"_protoFeeFroze","type":"uint256"}],"name":"updateProtoFeeFroze","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"uint256","name":"_protoFutureFees","type":"uint256"}],"name":"updateProtoFutureFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"uint256","name":"_protoIncreasedDecay","type":"uint256"}],"name":"updateProtoIncreasedDecay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"uint256","name":"_protoNextDue","type":"uint256"}],"name":"updateProtoNextDue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_x","type":"uint256"},{"internalType":"uint256","name":"_protoTotalPayable","type":"uint256"}],"name":"updateProtoTotalPayable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_protos","type":"uint256"}],"name":"updateProtos","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_account","type":"address"}],"name":"updateRewardsPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_perc","type":"uint256"}],"name":"updateRewardsPoolPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_account","type":"address"}],"name":"updateTeamPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_perc","type":"uint256"}],"name":"updateTeamPoolPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_totalPayable","type":"uint256"}],"name":"updateTotalPayable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_perc","type":"uint256"}],"name":"updateTreasuryPoolPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405262069780600b556302932e00600c9081556301e13380600d55600e556228de80600f556010805460ff1916905562e4e1c06011556013805460ff60a01b1916600160a01b179055600060145560016015553480156200006257600080fd5b50604051620062bb380380620062bb833981016040819052620000859162000247565b6200009033620001c4565b80600081518110620000a657620000a662000319565b6020026020010151601760006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080600181518110620000ea57620000ea62000319565b6020026020010151601960006101000a8154816001600160a01b0302191690836001600160a01b03160217905550806002815181106200012e576200012e62000319565b6020026020010151601a60006101000a8154816001600160a01b0302191690836001600160a01b031602179055508060038151811062000172576200017262000319565b6020908102919091010151601880546001600160a01b0319166001600160a01b0392831617905560005416601380546001600160a01b0319166001600160a01b0392909216919091179055506200032f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b03811681146200024257600080fd5b919050565b600060208083850312156200025b57600080fd5b82516001600160401b03808211156200027357600080fd5b818501915085601f8301126200028857600080fd5b8151818111156200029d576200029d62000214565b8060051b604051601f19603f83011681018181108582111715620002c557620002c562000214565b604052918252848201925083810185019188831115620002e457600080fd5b938501935b828510156200030d57620002fd856200022a565b84529385019392850192620002e9565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b615f7c806200033f6000396000f3fe6080604052600436106105735760003560e01c806396c5f957116102d8578063d298479b11610180578063e49e0cba116100e7578063f2fde38b116100a0578063f60e55b41161007a578063f60e55b414611336578063f9ca8a111461136f578063fba26bbc1461138f578063fecdb2c1146113af57600080fd5b8063f2fde38b14611284578063f32bff80146112a4578063f56b4f23146112c457600080fd5b8063e49e0cba146111ce578063e84e4ccc146111ee578063ea8f6d981461120e578063eebab6aa1461122e578063f2383edb14611244578063f250ed221461126457600080fd5b8063dbadca1111610139578063dbadca1114611093578063dd10bd2c146110b3578063df19f79b1461111c578063e0bf364714611132578063e1090cff14611168578063e44f288c1461119557600080fd5b8063d298479b14610fc4578063d490cc0714610fe4578063d68cd46414611004578063d842a1451461103d578063d99145bd14611053578063db9a99281461107357600080fd5b8063b17086f81161023f578063be5f667d116101f8578063cde11074116101d2578063cde1107414610f39578063cfcf69b014610f6f578063d11895c314610f84578063d2299b2414610fa457600080fd5b8063be5f667d14610e42578063c7a96bbb14610e62578063cc96ebc614610f1957600080fd5b8063b17086f814610d66578063b3fdf9d214610da0578063b884383314610db6578063b9cc523114610dd6578063ba2e350c14610df6578063bd52416314610e2f57600080fd5b8063a38a6dbc11610291578063a38a6dbc14610cb9578063ab28014414610cd9578063ac3d083214610cef578063ad23dd5614610d05578063af76880014610d26578063b14f2a3914610d4657600080fd5b806396c5f95714610bea5780639a4a5fec14610c0a5780639a8d9b6a14610c435780639edd6e4214610c63578063a06db7dc14610c83578063a08af92114610c9957600080fd5b80634e3c15811161043b57806373f92c4f116103a25780637e19494f1161035b5780638da45306116103355780638da4530614610b6c5780638da5cb5b14610b8c5780638e7de8b514610baa57806393e3118a14610bca57600080fd5b80637e19494f14610af55780637eaef50c14610b2c5780637ebcf69f14610b4c57600080fd5b806373f92c4f14610a295780637617334614610a4957806376890c5814610a6957806378e6802514610a7c5780637a0ee7fc14610ab55780637c73b9cc14610ad557600080fd5b80636872e994116103f45780636872e9941461098b5780636bdd6be7146109ab5780636ccc8d03146109cb5780636cd0587e146109de5780636eacab12146109f4578063715018a614610a1457600080fd5b80634e3c1581146108d85780634f89478a146108f85780635716b7d714610918578063647846a51461093857806365876f20146109585780636653a3401461096b57600080fd5b80632f0a32b1116104df578063439a851e11610498578063439a851e1461080a57806345deeda614610842578063476b183d1461085857806349ca605e146108785780634c2f9687146108985780634d788c72146108b857600080fd5b80632f0a32b1146107235780632faee1f11461076a5780633322c0581461078a578063370fce37146107aa5780633c2b2fe0146107ca5780634046603a146107ea57600080fd5b806311cf40931161053157806311cf40931461064f57806317e015961461066f578063191475b51461068f578063191c986d146106a45780631a7f51da146106b957806328d237bf1461070357600080fd5b80625f44171461057857806302bf55181461059a57806303dd0733146105ba578063090e5ac3146105da5780630c2c9e4d1461060f5780630ea0634b1461062f575b600080fd5b34801561058457600080fd5b506105986105933660046157c3565b6113cf565b005b3480156105a657600080fd5b506105986105b53660046157ef565b61148e565b3480156105c657600080fd5b506105986105d53660046157ef565b611568565b3480156105e657600080fd5b506105fa6105f53660046157c3565b611642565b60405190151581526020015b60405180910390f35b34801561061b57600080fd5b5061059861062a366004615832565b61168b565b34801561063b57600080fd5b5061059861064a36600461584f565b611766565b34801561065b57600080fd5b5061059861066a3660046157ef565b6117b2565b34801561067b57600080fd5b5061059861068a3660046157ef565b611801565b34801561069b57600080fd5b506105986118db565b3480156106b057600080fd5b5061059861195a565b3480156106c557600080fd5b506106d96106d43660046157c3565b6119e8565b60408051941515855292151560208501529015159183019190915215156060820152608001610606565b34801561070f57600080fd5b506105fa61071e3660046157c3565b611a55565b34801561072f57600080fd5b5061075c61073e36600461584f565b6001600160a01b031660009081526001602052604090206006015490565b604051908152602001610606565b34801561077657600080fd5b5061075c6107853660046157c3565b611a9b565b34801561079657600080fd5b506105986107a536600461586c565b611adf565b3480156107b657600080fd5b506105986107c536600461586c565b611b22565b3480156107d657600080fd5b506105986107e536600461584f565b611b82565b3480156107f657600080fd5b5061075c6108053660046157c3565b611bce565b34801561081657600080fd5b50601a5461082a906001600160a01b031681565b6040516001600160a01b039091168152602001610606565b34801561084e57600080fd5b5061075c600f5481565b34801561086457600080fd5b506105986108733660046157c3565b611c12565b34801561088457600080fd5b506105986108933660046157c3565b611cc4565b3480156108a457600080fd5b506105986108b33660046157c3565b611d76565b3480156108c457600080fd5b5060185461082a906001600160a01b031681565b3480156108e457600080fd5b506105986108f3366004615885565b611e28565b34801561090457600080fd5b506105fa6109133660046157c3565b611f10565b34801561092457600080fd5b5061059861093336600461586c565b611f55565b34801561094457600080fd5b5060125461082a906001600160a01b031681565b6105986109663660046157ef565b611f84565b34801561097757600080fd5b5061059861098636600461584f565b612133565b34801561099757600080fd5b506105986109a63660046157c3565b61217f565b3480156109b757600080fd5b5060175461082a906001600160a01b031681565b6105986109d93660046157c3565b612231565b3480156109ea57600080fd5b5061075c60095481565b348015610a0057600080fd5b50610598610a0f36600461584f565b612290565b348015610a2057600080fd5b506105986122dc565b348015610a3557600080fd5b50610598610a443660046158c7565b612312565b348015610a5557600080fd5b50610598610a64366004615908565b6123b3565b610598610a773660046157c3565b6124bd565b348015610a8857600080fd5b5061075c610a9736600461584f565b6001600160a01b031660009081526001602052604090206002015490565b348015610ac157600080fd5b50610598610ad03660046157c3565b61251d565b348015610ae157600080fd5b50610598610af0366004615885565b6125d0565b348015610b0157600080fd5b50610b15610b103660046157c3565b6126af565b6040516106069b9a9998979695949392919061598e565b348015610b3857600080fd5b5060195461082a906001600160a01b031681565b348015610b5857600080fd5b5061075c610b673660046157c3565b6127ae565b348015610b7857600080fd5b50610598610b8736600461586c565b6127f2565b348015610b9857600080fd5b506000546001600160a01b031661082a565b348015610bb657600080fd5b506106d9610bc53660046157c3565b612821565b348015610bd657600080fd5b5061075c610be53660046157c3565b61286d565b348015610bf657600080fd5b50610598610c053660046157c3565b6128b1565b348015610c1657600080fd5b5061075c610c2536600461584f565b6001600160a01b031660009081526001602052604090206003015490565b348015610c4f57600080fd5b5061075c610c5e3660046157c3565b612963565b348015610c6f57600080fd5b50610598610c7e3660046157ef565b6129a7565b348015610c8f57600080fd5b5061075c600b5481565b348015610ca557600080fd5b50610598610cb4366004615832565b612a81565b348015610cc557600080fd5b50610598610cd43660046157ef565b612abe565b348015610ce557600080fd5b5061075c600a5481565b348015610cfb57600080fd5b5061075c600e5481565b348015610d1157600080fd5b506013546105fa90600160a01b900460ff1681565b348015610d3257600080fd5b50610598610d413660046157ef565b612b98565b348015610d5257600080fd5b50610598610d6136600461584f565b612c72565b348015610d7257600080fd5b5061075c610d8136600461584f565b6001600160a01b03166000908152600160208190526040909120015490565b348015610dac57600080fd5b5061075c600d5481565b348015610dc257600080fd5b5061075c610dd13660046157c3565b612cbe565b348015610de257600080fd5b5061082a610df136600461586c565b612d02565b348015610e0257600080fd5b5061075c610e1136600461584f565b6001600160a01b031660009081526001602052604090206004015490565b610598610e3d3660046159f1565b612d2c565b348015610e4e57600080fd5b5061075c610e5d3660046157c3565b612fea565b348015610e6e57600080fd5b50610ed5610e7d3660046157c3565b506001600160a01b031660009081526001602081905260409091208054918101546002820154600383015460048401546005850154600686015460078701546008909701549798959794969395929491939092909190565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a085015260c084015260e083015261010082015261012001610606565b348015610f2557600080fd5b50610598610f343660046157ef565b61302e565b348015610f4557600080fd5b50610f59610f543660046157c3565b613108565b6040516106069a99989796959493929190615a2c565b348015610f7b57600080fd5b5060045461075c565b348015610f9057600080fd5b50610598610f9f36600461584f565b613246565b348015610fb057600080fd5b5061082a610fbf36600461586c565b613292565b348015610fd057600080fd5b50610598610fdf366004615b29565b6132c2565b348015610ff057600080fd5b50610598610fff36600461584f565b6133a6565b34801561101057600080fd5b5061075c61101f36600461584f565b6001600160a01b031660009081526001602052604090206005015490565b34801561104957600080fd5b5061075c60075481565b34801561105f57600080fd5b5060165461082a906001600160a01b031681565b34801561107f57600080fd5b5061059861108e366004615885565b61348d565b34801561109f57600080fd5b5061082a6110ae36600461586c565b613577565b3480156110bf57600080fd5b50610ed56110ce36600461584f565b60016020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080154905089565b34801561112857600080fd5b5061075c60115481565b34801561113e57600080fd5b5061075c61114d36600461584f565b6001600160a01b031660009081526001602052604090205490565b34801561117457600080fd5b506111886111833660046157c3565b613587565b6040516106069190615b82565b3480156111a157600080fd5b5061075c6111b036600461584f565b6001600160a01b031660009081526001602052604090206007015490565b3480156111da57600080fd5b506105986111e9366004615b95565b613657565b3480156111fa57600080fd5b506105fa611209366004615b95565b613719565b34801561121a57600080fd5b5061059861122936600461584f565b61372c565b34801561123a57600080fd5b5061075c600c5481565b34801561125057600080fd5b5061059861125f36600461586c565b613774565b34801561127057600080fd5b5061059861127f36600461584f565b6137a3565b34801561129057600080fd5b5061059861129f36600461584f565b6137ef565b3480156112b057600080fd5b5061075c6112bf36600461584f565b613887565b3480156112d057600080fd5b50610ed56112df36600461584f565b6001600160a01b031660009081526001602081905260409091208054918101546002820154600383015460048401546005850154600686015460078701546008909701549798959794969395929491939092909190565b34801561134257600080fd5b5061075c61135136600461584f565b6001600160a01b031660009081526001602052604090206008015490565b34801561137b57600080fd5b5061059861138a3660046157c3565b6138a5565b34801561139b57600080fd5b506105986113aa3660046157c3565b613957565b3480156113bb57600080fd5b506105986113ca366004615b95565b6139a0565b6000546001600160a01b031633148061144d575061144d600580548060200260200160405190810160405280929190818152602001828054801561143c57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161141e575b50505050506114483390565b6139e9565b6114725760405162461bcd60e51b815260040161146990615be5565b60405180910390fd5b6001600160a01b03909116600090815260016020526040902055565b6000546001600160a01b03163314806115055750611505600580548060200260200160405190810160405280929190818152602001828054801561143c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141e5750505050506114483390565b6115215760405162461bcd60e51b815260040161146990615be5565b6001600160a01b038316600090815260026020526040902080548291908490811061154e5761154e615c0a565b90600052602060002090600b020160030181905550505050565b6000546001600160a01b03163314806115df57506115df600580548060200260200160405190810160405280929190818152602001828054801561143c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141e5750505050506114483390565b6115fb5760405162461bcd60e51b815260040161146990615be5565b6001600160a01b038316600090815260026020526040902080548291908490811061162857611628615c0a565b90600052602060002090600b0201600a0181905550505050565b6001600160a01b038216600090815260036020526040812080548390811061166c5761166c615c0a565b6000918252602090912001546301000000900460ff1690505b92915050565b6000546001600160a01b031633146116b55760405162461bcd60e51b815260040161146990615c20565b6013805460ff60a01b1916600160a01b831515021790554260005b600454811015611758576000600482815481106116ef576116ef615c0a565b60009182526020822001546001600160a01b031691505b6001600160a01b03821660009081526002602052604090205481101561174357611731828286613a4e565b8061173b81615c6b565b915050611706565b5050808061175090615c6b565b9150506116d0565b5061176281613c21565b5050565b6000546001600160a01b031633146117905760405162461bcd60e51b815260040161146990615c20565b601880546001600160a01b0319166001600160a01b0392909216919091179055565b6016546001600160a01b03163314806117d557506000546001600160a01b031633145b6117f15760405162461bcd60e51b815260040161146990615c84565b6117fc838383613c65565b505050565b6000546001600160a01b03163314806118785750611878600580548060200260200160405190810160405280929190818152602001828054801561143c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141e5750505050506114483390565b6118945760405162461bcd60e51b815260040161146990615be5565b6001600160a01b03831660009081526002602052604090208054829190849081106118c1576118c1615c0a565b90600052602060002090600b020160090181905550505050565b6000546001600160a01b031633146119055760405162461bcd60e51b815260040161146990615c20565b60005b60055481101561195757600580548061192357611923615ca7565b600082815260209020810160001990810180546001600160a01b03191690550190558061194f81615c6b565b915050611908565b50565b6016546001600160a01b031633148061197d57506000546001600160a01b031633145b6119995760405162461bcd60e51b815260040161146990615c84565b60005b600454811015611957576119d6600482815481106119bc576119bc615c0a565b6000918252602090912001546001600160a01b0316613cd8565b806119e081615c6b565b91505061199c565b6001600160a01b03821660009081526003602052604081208054829182918291908290829088908110611a1d57611a1d615c0a565b60009182526020909120015460ff8082169a610100830482169a50620100008304821699506301000000909204169650945050505050565b6001600160a01b0382166000908152600360205260408120805483908110611a7f57611a7f615c0a565b60009182526020909120015462010000900460ff169392505050565b6001600160a01b0382166000908152600260205260408120805483908110611ac557611ac5615c0a565b90600052602060002090600b020160070154905092915050565b6000546001600160a01b03163314611b095760405162461bcd60e51b815260040161146990615c20565b600e819055600f54611b1c908290613d33565b600d5550565b6000546001600160a01b03163314611b4c5760405162461bcd60e51b815260040161146990615c20565b6000611b5c600f54600d54613d3f565b9050611b6b8262015180613d33565b600f819055611b7b908290613d33565b600d555050565b6000546001600160a01b03163314611bac5760405162461bcd60e51b815260040161146990615c20565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382166000908152600260205260408120805483908110611bf857611bf8615c0a565b90600052602060002090600b020160010154905092915050565b6000546001600160a01b0316331480611c895750611c89600580548060200260200160405190810160405280929190818152602001828054801561143c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141e5750505050506114483390565b611ca55760405162461bcd60e51b815260040161146990615be5565b6001600160a01b03909116600090815260016020526040902060080155565b6000546001600160a01b0316331480611d3b5750611d3b600580548060200260200160405190810160405280929190818152602001828054801561143c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141e5750505050506114483390565b611d575760405162461bcd60e51b815260040161146990615be5565b6001600160a01b03909116600090815260016020526040902060020155565b6000546001600160a01b0316331480611ded5750611ded600580548060200260200160405190810160405280929190818152602001828054801561143c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141e5750505050506114483390565b611e095760405162461bcd60e51b815260040161146990615be5565b6001600160a01b03909116600090815260016020526040902060070155565b6000546001600160a01b0316331480611e9f5750611e9f600580548060200260200160405190810160405280929190818152602001828054801561143c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141e5750505050506114483390565b611ebb5760405162461bcd60e51b815260040161146990615be5565b6001600160a01b0383166000908152600360205260409020805482919084908110611ee857611ee8615c0a565b60009182526020909120018054911515620100000262ff000019909216919091179055505050565b6001600160a01b0382166000908152600360205260408120805483908110611f3a57611f3a615c0a565b600091825260209091200154610100900460ff169392505050565b6000546001600160a01b03163314611f7f5760405162461bcd60e51b815260040161146990615c20565b600955565b6016546001600160a01b0316331480611fa757506000546001600160a01b031633145b611fc35760405162461bcd60e51b815260040161146990615c84565b60065460075434916001600160a01b0316906108fc90611fe4908490613d58565b6040518115909202916000818181858888f1935050505015801561200c573d6000803e3d6000fd5b506008546009546001600160a01b03909116906108fc9061202e908490613d58565b6040518115909202916000818181858888f19350505050158015612056573d6000803e3d6000fd5b50601354600a546001600160a01b03909116906108fc90612078908490613d58565b6040518115909202916000818181858888f193505050501580156120a0573d6000803e3d6000fd5b5060006120dd6120b283600754613d58565b6120d76120c185600954613d58565b6120d76120d087600a54613d58565b8790613dfe565b90613dfe565b90508015612121576013546040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561211f573d6000803e3d6000fd5b505b61212c858585613c65565b5050505050565b6000546001600160a01b0316331461215d5760405162461bcd60e51b815260040161146990615c20565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314806121f657506121f6600580548060200260200160405190810160405280929190818152602001828054801561143c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141e5750505050506114483390565b6122125760405162461bcd60e51b815260040161146990615be5565b6001600160a01b03909116600090815260016020526040902060060155565b6000546001600160a01b0316331461225b5760405162461bcd60e51b815260040161146990615c20565b6040516001600160a01b038316904780156108fc02916000818181858888f193505050501580156117fc573d6000803e3d6000fd5b6000546001600160a01b031633146122ba5760405162461bcd60e51b815260040161146990615c20565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146123065760405162461bcd60e51b815260040161146990615c20565b6123106000613e0a565b565b6000546001600160a01b0316331461233c5760405162461bcd60e51b815260040161146990615c20565b601a546040516323b872dd60e01b815283916001600160a01b0316906323b872dd9061237090309088908790600401615cbd565b6020604051808303816000875af115801561238f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061212c9190615ce1565b6000546001600160a01b031633146123dd5760405162461bcd60e51b815260040161146990615c20565b601a546040516370a0823160e01b8152306004820181905283926001600160a01b0316916323b872dd9190869084906370a0823190602401602060405180830381865afa158015612432573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124569190615cfe565b6040518463ffffffff1660e01b815260040161247493929190615cbd565b6020604051808303816000875af1158015612493573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b79190615ce1565b50505050565b6000546001600160a01b031633146124e75760405162461bcd60e51b815260040161146990615c20565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156117fc573d6000803e3d6000fd5b6000546001600160a01b03163314806125945750612594600580548060200260200160405190810160405280929190818152602001828054801561143c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141e5750505050506114483390565b6125b05760405162461bcd60e51b815260040161146990615be5565b6001600160a01b0390911660009081526001602081905260409091200155565b6000546001600160a01b03163314806126475750612647600580548060200260200160405190810160405280929190818152602001828054801561143c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141e5750505050506114483390565b6126635760405162461bcd60e51b815260040161146990615be5565b6001600160a01b038316600090815260036020526040902080548291908490811061269057612690615c0a565b6000918252602090912001805460ff1916911515919091179055505050565b600260205281600052604060002081815481106126cb57600080fd5b90600052602060002090600b0201600091509150508060000180546126ef90615d17565b80601f016020809104026020016040519081016040528092919081815260200182805461271b90615d17565b80156127685780601f1061273d57610100808354040283529160200191612768565b820191906000526020600020905b81548152906001019060200180831161274b57829003601f168201915b50505050509080600101549080600201549080600301549080600401549080600501549080600601549080600701549080600801549080600901549080600a015490508b565b6001600160a01b03821660009081526002602052604081208054839081106127d8576127d8615c0a565b90600052602060002090600b0201600a0154905092915050565b6000546001600160a01b0316331461281c5760405162461bcd60e51b815260040161146990615c20565b600755565b6003602052816000526040600020818154811061283d57600080fd5b60009182526020909120015460ff8082169350610100820481169250620100008204811691630100000090041684565b6001600160a01b038216600090815260026020526040812080548390811061289757612897615c0a565b90600052602060002090600b020160040154905092915050565b6000546001600160a01b03163314806129285750612928600580548060200260200160405190810160405280929190818152602001828054801561143c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141e5750505050506114483390565b6129445760405162461bcd60e51b815260040161146990615be5565b6001600160a01b03909116600090815260016020526040902060030155565b6001600160a01b038216600090815260026020526040812080548390811061298d5761298d615c0a565b90600052602060002090600b020160030154905092915050565b6000546001600160a01b0316331480612a1e5750612a1e600580548060200260200160405190810160405280929190818152602001828054801561143c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141e5750505050506114483390565b612a3a5760405162461bcd60e51b815260040161146990615be5565b6001600160a01b0383166000908152600260205260409020805482919084908110612a6757612a67615c0a565b90600052602060002090600b020160040181905550505050565b6000546001600160a01b03163314612aab5760405162461bcd60e51b815260040161146990615c20565b6010805460ff1916911515919091179055565b6000546001600160a01b0316331480612b355750612b35600580548060200260200160405190810160405280929190818152602001828054801561143c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141e5750505050506114483390565b612b515760405162461bcd60e51b815260040161146990615be5565b6001600160a01b0383166000908152600260205260409020805482919084908110612b7e57612b7e615c0a565b90600052602060002090600b020160080181905550505050565b6000546001600160a01b0316331480612c0f5750612c0f600580548060200260200160405190810160405280929190818152602001828054801561143c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141e5750505050506114483390565b612c2b5760405162461bcd60e51b815260040161146990615be5565b6001600160a01b0383166000908152600260205260409020805482919084908110612c5857612c58615c0a565b90600052602060002090600b020160010181905550505050565b6000546001600160a01b03163314612c9c5760405162461bcd60e51b815260040161146990615c20565b601380546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0382166000908152600260205260408120805483908110612ce857612ce8615c0a565b90600052602060002090600b020160090154905092915050565b60058181548110612d1257600080fd5b6000918252602090912001546001600160a01b0316905081565b6016546001600160a01b0316331480612d4f57506000546001600160a01b031633145b612d6b5760405162461bcd60e51b815260040161146990615c84565b6000612d7984601154613e5a565b601a546006546007549293506001600160a01b03918216926323b872dd9289921690612da6908790613d58565b6040518463ffffffff1660e01b8152600401612dc493929190615cbd565b6020604051808303816000875af1158015612de3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e079190615ce1565b50601a546008546009546001600160a01b03928316926323b872dd928992911690612e33908790613d58565b6040518463ffffffff1660e01b8152600401612e5193929190615cbd565b6020604051808303816000875af1158015612e70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e949190615ce1565b50601a54601354600a546001600160a01b03928316926323b872dd928992911690612ec0908790613d58565b6040518463ffffffff1660e01b8152600401612ede93929190615cbd565b6020604051808303816000875af1158015612efd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f219190615ce1565b506000612f58612f3384600a54613d58565b6120d7612f4286600954613d58565b6120d7612f5188600754613d58565b8890613dfe565b601a546013546040516323b872dd60e01b81529293506001600160a01b03918216926323b872dd92612f93928b929116908690600401615cbd565b6020604051808303816000875af1158015612fb2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd69190615ce1565b50612fe2868686613c65565b505050505050565b6001600160a01b038216600090815260026020526040812080548390811061301457613014615c0a565b90600052602060002090600b020160080154905092915050565b6000546001600160a01b03163314806130a557506130a5600580548060200260200160405190810160405280929190818152602001828054801561143c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141e5750505050506114483390565b6130c15760405162461bcd60e51b815260040161146990615be5565b6001600160a01b03831660009081526002602052604090208054829190849081106130ee576130ee615c0a565b90600052602060002090600b020160070181905550505050565b6060600080600080600080600080600080600260008e6001600160a01b03166001600160a01b0316815260200190815260200160002090506000818d8154811061315457613154615c0a565b90600052602060002090600b02019050806000018160010154826002015483600301548460040154856005015486600701548760080154886009015489600a01548980546131a190615d17565b80601f01602080910402602001604051908101604052809291908181526020018280546131cd90615d17565b801561321a5780601f106131ef5761010080835404028352916020019161321a565b820191906000526020600020905b8154815290600101906020018083116131fd57829003601f168201915b505050505099509b509b509b509b509b509b509b509b509b509b5050509295989b9194979a5092959850565b6000546001600160a01b031633146132705760405162461bcd60e51b815260040161146990615c20565b601680546001600160a01b0319166001600160a01b0392909216919091179055565b6000600482815481106132a7576132a7615c0a565b6000918252602090912001546001600160a01b031692915050565b6000546001600160a01b03163314806133395750613339600580548060200260200160405190810160405280929190818152602001828054801561143c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141e5750505050506114483390565b6133555760405162461bcd60e51b815260040161146990615be5565b6001600160a01b038316600090815260026020526040902080548291908490811061338257613382615c0a565b90600052602060002090600b020160000190805190602001906124b7929190615664565b6000546001600160a01b031633146133d05760405162461bcd60e51b815260040161146990615c20565b613434600580548060200260200160405190810160405280929190818152602001828054801561342957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161340b575b5050505050826139e9565b151560000361195757600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0383166001600160a01b031990911617905550565b6000546001600160a01b03163314806135045750613504600580548060200260200160405190810160405280929190818152602001828054801561143c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141e5750505050506114483390565b6135205760405162461bcd60e51b815260040161146990615be5565b6001600160a01b038316600090815260036020526040902080548291908490811061354d5761354d615c0a565b6000918252602090912001805491151563010000000263ff00000019909216919091179055505050565b60048181548110612d1257600080fd5b6001600160a01b0382166000908152600260205260409020805460609190839081106135b5576135b5615c0a565b90600052602060002090600b020160000180546135d190615d17565b80601f01602080910402602001604051908101604052809291908181526020018280546135fd90615d17565b801561364a5780601f1061361f5761010080835404028352916020019161364a565b820191906000526020600020905b81548152906001019060200180831161362d57829003601f168201915b5050505050905092915050565b6016546001600160a01b031633148061367a57506000546001600160a01b031633145b6136965760405162461bcd60e51b815260040161146990615c84565b6136a08282613eb0565b15156001146137065760405162461bcd60e51b815260206004820152602c60248201527f7468652070726f746f20746f20626520636f6c6c617073656420636f756c642060448201526b1b9bdd08189948199bdd5b9960a21b6064820152608401611469565b611762826137148484613f47565b613fd9565b60006137258383613eb0565b9392505050565b6016546001600160a01b031633148061374f57506000546001600160a01b031633145b61376b5760405162461bcd60e51b815260040161146990615c84565b61195781613cd8565b6000546001600160a01b0316331461379e5760405162461bcd60e51b815260040161146990615c20565b600a55565b6000546001600160a01b031633146137cd5760405162461bcd60e51b815260040161146990615c20565b601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146138195760405162461bcd60e51b815260040161146990615c20565b6001600160a01b03811661387e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401611469565b61195781613e0a565b6001600160a01b038116600090815260026020526040812054611685565b6000546001600160a01b031633148061391c575061391c600580548060200260200160405190810160405280929190818152602001828054801561143c576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161141e5750505050506114483390565b6139385760405162461bcd60e51b815260040161146990615be5565b6001600160a01b03909116600090815260016020526040902060050155565b6016546001600160a01b031633148061397a57506000546001600160a01b031633145b6139965760405162461bcd60e51b815260040161146990615c84565b61176282826142b9565b6016546001600160a01b03163314806139c357506000546001600160a01b031633145b6139df5760405162461bcd60e51b815260040161146990615c84565b6117628282614314565b6000805b8351811015613a4457838181518110613a0857613a08615c0a565b60200260200101516001600160a01b0316836001600160a01b031603613a32576001915050611685565b80613a3c81615c6b565b9150506139ed565b5060009392505050565b601354600160a01b900460ff16158015613a7c57506014543060009081526001602052604090206006015414155b15613bc257613ab6613aaf613aa03060009081526001602052604090206006015490565b613aaa8686611bce565b6145db565b8290613dfe565b6001600160a01b0384166000908152600260205260409020805484908110613ae057613ae0615c0a565b90600052602060002090600b020160090181905550613b49838360026000876001600160a01b03166001600160a01b031681526020019081526020016000208581548110613b3057613b30615c0a565b90600052602060002090600b0201600901546001614614565b613b65613aaf3060009081526001602052604090206006015490565b6001600160a01b03841660009081526001602052604081206006018054909190613b90908490615d4b565b90915550506014546001600160a01b03841660009081526002602052604090208054849081106118c1576118c1615c0a565b601354600160a01b900460ff1615156001036117fc57613bf7613aaf613aa03060009081526001602052604090206006015490565b6001600160a01b03841660009081526002602052604090208054849081106118c1576118c1615c0a565b601354600160a01b900460ff161515600003613c50576014543060009081526001602052604090206006015550565b30600090815260016020526040902060060155565b80606503613ca65760005b82811015613ca057613c8e846001613c87876146f1565b600161480b565b80613c9881615c6b565b915050613c70565b50613cd3565b60005b82811015613cd157613cbf84600184600161480b565b80613cc981615c6b565b915050613ca9565b505b6117fc835b60005b6001600160a01b038216600090815260026020526040902054811015613d1757613d0582826142b9565b80613d0f81615c6b565b915050613cdb565b50613d2181614a2b565b613d2a81614b76565b61195781614cbc565b60006137258284615d63565b6000806000613d4e8585614df3565b5095945050505050565b600080613d6484614e52565b90506000613d7184614e52565b90506000613d80826015615d82565b90506000613d8d86614e7b565b60408051606081018252868152602081018590529081018290529091506000613dc1613dba85600a615e7d565b8a90613d33565b90506000613dcf828a613d33565b9050613df0613dde8787615d4b565b613de990600a615e7d565b8290614ee1565b9a9950505050505050505050565b60006137258284615d82565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080821580613e6957508084145b80613e7357508284115b15613e7f579050611685565b8260015b80861115613ea757613e958583615d4b565b9150613ea18682613dfe565b50613e83565b50949350505050565b6001600160a01b0382166000908152600260205260408120815b8154811015613f3c576000828281548110613ee757613ee7615c0a565b90600052602060002090600b02019050848051906020012081600001604051613f109190615e89565b604051809103902003613f295760019350505050611685565b5080613f3481615c6b565b915050613eca565b506000949350505050565b6001600160a01b0382166000908152600260205260408120815b8154811015613fd1576000828281548110613f7e57613f7e615c0a565b90600052602060002090600b02019050848051906020012081600001604051613fa79190615e89565b604051809103902003613fbe575091506116859050565b5080613fc981615c6b565b915050613f61565b505092915050565b6001600160a01b03821660009081526002602090815260408083206003909252909120805481908490811061401057614010615c0a565b6000918252602090912001546301000000900460ff1615156001036140385761403884614eed565b825b82548110156141ff57825461405190600190615d82565b81146141ed57600083828154811061406b5761406b615c0a565b600091825260208220600b90910201915084614088846001615d4b565b8154811061409857614098615c0a565b90600052602060002090600b0201905060008484815481106140bc576140bc615c0a565b600091825260208220019150856140d4866001615d4b565b815481106140e4576140e4615c0a565b906000526020600020019050826000018460000190805461410490615d17565b61410f9291906156e8565b506001808401549085015560028084015490850155600380840154908501556004808401549085015560058084015490850155600780840154908501556008808401549085015560098084015490850155600a9283015492909301919091558154815460ff918216151560ff19821681178455845461010090819004841615150261ff001990911661ffff19909216919091171780835583546201000090819004831615150262ff0000198216811784559354630100000090819004909216151590910263ff0000001990931663ffff000019909116179190911790555b806141f781615c6b565b91505061403a565b508180548061421057614210615ca7565b60008281526020812060001990920191600b830201906142308282615763565b600182016000905560028201600090556003820160009055600482016000905560058201600090556006820160009055600782016000905560088201600090556009820160009055600a820160009055505090558080548061429457614294615ca7565b6000828152602090208101600019908101805463ffffffff1916905501905550505050565b6142c38282614f58565b6142cd828261504e565b6142d8828242613a4e565b6142e282826150ba565b6142ec828261511e565b6142f682826151b6565b614300828261523f565b61430a828261531f565b6117628282615377565b600042905061437d600480548060200260200160405190810160405280929190818152602001828054801561437257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311614354575b5050505050846139e9565b15156000036143d257600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0385161790555b601454600c546000906143e690429061541a565b6001600160a01b038616600090815260026020526040812080549293509161440f90600161541a565b604080516101608101825288815242602080830182905260145493830184905260608301889052608083019190915260a0820183905260c0820183905260e082018390526101008201839052610120820192909252600e5461014082015284546001810186556000868152839020825180519596509294600b909202019261449b928492910190615664565b506020828101516001808401919091556040808501516002850155606080860151600380870191909155608080880151600488015560a0880151600588015560c0880151600688015560e08801516007880155610100808901516008890155610120890151600989015561014090980151600a909701969096556001600160a01b038e1660009081529085528281208351968701845281875286860182815293870182815292870182815281548087018355828452969092209651969095018054935192519151151563010000000263ff0000001992151562010000029290921663ffff00001993151590980261ff00199715159790971661ffff1990941693909317959095171694909417929092179092556015546145bc918a91615426565b6145d18860016145cc8582613dfe565b613c65565b5050505050505050565b60006145e783836154e9565b15156001148061460257506145fc838361551f565b15156001145b1561460e575081611685565b50919050565b801515600003614676576001600160a01b038416600090815260026020526040902080548391908590811061464b5761464b615c0a565b90600052602060002090600b0201600401600082825461466b9190615d82565b909155506146c99050565b6001600160a01b03841660009081526002602052604090208054839190859081106146a3576146a3615c0a565b90600052602060002090600b020160040160008282546146c39190615d4b565b90915550505b6146d3848461523f565b6146dd84846151b6565b6146e7848461531f565b6124b78484615377565b600080600080614702856000615531565b905061470d85613cd8565b60005b6001600160a01b0386166000908152600260205260409020548110156148015761473a8682615531565b9350818410801561478d57506001600160a01b038616600090815260036020526040902080548290811061477057614770615c0a565b6000918252602090912001546301000000900460ff161515600114155b80156147da57506001600160a01b03861660009081526003602052604090208054829081106147be576147be615c0a565b60009182526020909120015462010000900460ff161515600114155b156147ef578092506147ec8682615531565b91505b806147f981615c6b565b915050614710565b5090949350505050565b821515600103614920576001600160a01b038416600090815260026020526040902080548291908490811061484257614842615c0a565b90600052602060002090600b020160060160008282546148629190615d4b565b9091555050600f546148749082613d33565b6001600160a01b038516600090815260026020526040902080548490811061489e5761489e615c0a565b90600052602060002090600b020160040160008282546148be9190615d4b565b90915550506001600160a01b038416600090815260016020526040812060040180548392906148ee908490615d4b565b90915550503060009081526001602052604081206004018054839290614915908490615d4b565b909155506124b79050565b6001600160a01b038416600090815260026020526040902080548291908490811061494d5761494d615c0a565b90600052602060002090600b0201600601600082825461496d9190615d82565b9091555050600f5461497f9082613d33565b6001600160a01b03851660009081526002602052604090208054849081106149a9576149a9615c0a565b90600052602060002090600b020160040160008282546149c99190615d82565b90915550506001600160a01b038416600090815260016020526040812060040180548392906149f9908490615d82565b90915550503060009081526001602052604081206004018054839290614a20908490615d82565b909155505050505050565b6001600160a01b03811660009081526001602052604080822060029081015430845291832001805491929091614a62908490615d82565b90915550506014546001600160a01b0382166000908152600160205260408120600201919091555b6001600160a01b03821660009081526001602081905260409091200154811015614b36576001600160a01b0382166000908152600360205260409020805482908110614ad857614ad8615c0a565b60009182526020909120015460ff161515600103614b24576001600160a01b03821660009081526001602081905260408220600201805491929091614b1e908490615d4b565b90915550505b80614b2e81615c6b565b915050614a8a565b506001600160a01b03811660009081526001602052604080822060029081015430845291832001805491929091614b6e908490615d4b565b909155505050565b6001600160a01b03811660009081526001602052604080822060039081015430845291832001805491929091614bad908490615d82565b90915550506014546001600160a01b0382166000908152600160205260408120600301919091555b6001600160a01b03821660009081526001602081905260409091200154811015614c84576001600160a01b0382166000908152600260205260409020805482908110614c2357614c23615c0a565b90600052602060002090600b02016007015460016000846001600160a01b03166001600160a01b031681526020019081526020016000206003016000828254614c6c9190615d4b565b90915550819050614c7c81615c6b565b915050614bd5565b506001600160a01b03811660009081526001602052604080822060039081015430845291832001805491929091614b6e908490615d4b565b6001600160a01b03811660009081526001602052604080822054308352908220805491929091614ced908490615d82565b90915550506014546001600160a01b0382166000908152600160205260408120919091555b6001600160a01b03821660009081526001602081905260409091200154811015614dc1576001600160a01b0382166000908152600260205260409020805482908110614d6057614d60615c0a565b90600052602060002090600b0201600a015460016000846001600160a01b03166001600160a01b031681526020019081526020016000206000016000828254614da99190615d4b565b90915550819050614db981615c6b565b915050614d12565b506001600160a01b03811660009081526001602052604080822054308352908220805491929091614b6e908490615d4b565b60008080831580614e0357508085145b80614e0d57508385115b15614e1c579150829050614e4b565b8360005b868210614e4557614e318783615d82565b915080614e3d81615c6b565b915050614e20565b93509150505b9250929050565b6000805b821561168557614e6783600a614ee1565b925080614e7381615c6b565b915050614e56565b600080614e8783614e52565b905080806000805b81158015614e9c57508215155b15614ed757614eac600184615d82565b9250614ec3614ebc84600a615e7d565b8890614ee1565b9150614ed0600182615d4b565b9050614e8f565b9695505050505050565b60006137258284615f24565b6001600160a01b03811660009081526001602081905260408220600501805491929091614f1b908490615d4b565b90915550503060009081526001602081905260408220600501805491929091614f45908490615d4b565b9091555061195790508160006001615426565b60105460ff161515600103615021576017546040516357e094a360e11b81526001600160a01b038481166004830152602482018490529091169063afc12946906044016020604051808303816000875af1158015614fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fde9190615cfe565b6001600160a01b038316600090815260026020526040902080548390811061500857615008615c0a565b90600052602060002090600b0201600801819055505050565b6014546001600160a01b038316600090815260026020526040902080548390811061500857615008615c0a565b61507761506761505e8484612fea565b600c549061541a565b6150718484611bce565b9061541a565b6001600160a01b03831660009081526002602052604090208054839081106150a1576150a1615c0a565b90600052602060002090600b0201600301819055505050565b6150db6150c78383612fea565b6150716150d48585611bce565b4290613dfe565b6001600160a01b038316600090815260026020526040902080548390811061510557615105615c0a565b90600052602060002090600b0201600201819055505050565b600061513761512d848461286d565b6150718585612cbe565b90506151438142615575565b151560010361516857600b546151594283613dfe565b10615168576151688383615587565b6151728142613dfe565b6001600160a01b038416600090815260026020526040902080548490811061519c5761519c615c0a565b90600052602060002090600b020160050181905550505050565b600f546151c38383615531565b1015615215576001600160a01b0382166000908152600360205260409020805460019190839081106151f7576151f7615c0a565b6000918252602090912001805460ff19169115159190911790555050565b6001600160a01b03821660009081526003602052604081208054839081106151f7576151f7615c0a565b600b5461524c8383615531565b10156152a5576001600160a01b03821660009081526003602052604090208054600191908390811061528057615280615c0a565b600091825260209091200180549115156101000261ff00199092169190911790555050565b600b546152b28383615531565b11156152e2576001600160a01b038216600090815260036020526040812080548390811061528057615280615c0a565b600b546152ef8383615531565b1115611762576001600160a01b038216600090815260036020526040812080548390811061528057615280615c0a565b615334600f5461532f8484615531565b613d3f565b6001600160a01b038316600090815260026020526040902080548390811061535e5761535e615c0a565b90600052602060002090600b0201600701819055505050565b6001600160a01b038216600090815260026020526040902080546153d79190839081106153a6576153a6615c0a565b90600052602060002090600b0201600701546120d7600f5461532f6153cf426120d78989612963565b600d546155eb565b6001600160a01b038316600090815260026020526040902080548390811061540157615401615c0a565b90600052602060002090600b0201600a01819055505050565b60006137258284615d4b565b81151560000361548d576001600160a01b0383166000908152600160208190526040822001805483929061545b908490615d82565b90915550503060009081526001602081905260408220018054839290615482908490615d82565b909155506117fc9050565b6001600160a01b038316600090815260016020819052604082200180548392906154b8908490615d4b565b909155505030600090815260016020819052604082200180548392906154df908490615d4b565b9091555050505050565b60006154f58383615575565b1580156155095750615507838361551f565b155b1561551657506001611685565b50600092915050565b60008183111561551657506001611685565b6001600160a01b038216600090815260026020526040812080548390811061555b5761555b615c0a565b90600052602060002090600b020160050154905092915050565b60008183101561551657506001611685565b6001600160a01b0382166000908152600360205260409020805460019190839081106155b5576155b5615c0a565b60009182526020909120018054911515620100000262ff0000199092169190911790556155e18261560c565b6117628282613fd9565b60006155f783836154e9565b15156001148061460257506145fc8383615575565b6001600160a01b0381166000908152600160208190526040822060070180549192909161563a908490615d4b565b90915550503060009081526001602081905260408220600701805491929091614f45908490615d4b565b82805461567090615d17565b90600052602060002090601f01602090048101928261569257600085556156d8565b82601f106156ab57805160ff19168380011785556156d8565b828001600101855582156156d8579182015b828111156156d85782518255916020019190600101906156bd565b506156e4929150615799565b5090565b8280546156f490615d17565b90600052602060002090601f01602090048101928261571657600085556156d8565b82601f1061572757805485556156d8565b828001600101855582156156d857600052602060002091601f016020900482015b828111156156d8578254825591600101919060010190615748565b50805461576f90615d17565b6000825580601f1061577f575050565b601f01602090049060005260206000209081019061195791905b5b808211156156e4576000815560010161579a565b6001600160a01b038116811461195757600080fd5b600080604083850312156157d657600080fd5b82356157e1816157ae565b946020939093013593505050565b60008060006060848603121561580457600080fd5b833561580f816157ae565b95602085013595506040909401359392505050565b801515811461195757600080fd5b60006020828403121561584457600080fd5b813561372581615824565b60006020828403121561586157600080fd5b8135613725816157ae565b60006020828403121561587e57600080fd5b5035919050565b60008060006060848603121561589a57600080fd5b83356158a5816157ae565b92506020840135915060408401356158bc81615824565b809150509250925092565b6000806000606084860312156158dc57600080fd5b83356158e7816157ae565b925060208401356158f7816157ae565b929592945050506040919091013590565b6000806040838503121561591b57600080fd5b8235615926816157ae565b91506020830135615936816157ae565b809150509250929050565b6000815180845260005b818110156159675760208185018101518683018201520161594b565b81811115615979576000602083870101525b50601f01601f19169290920160200192915050565b60006101608083526159a28184018f615941565b602084019d909d52505060408101999099526060890197909752608088019590955260a087019390935260c086019190915260e085015261010084015261012083015261014090910152919050565b60008060008060808587031215615a0757600080fd5b8435615a12816157ae565b966020860135965060408601359560600135945092505050565b6000610140808352615a408184018e615941565b602084019c909c52505060408101989098526060880196909652608087019490945260a086019290925260c085015260e084015261010083015261012090910152919050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112615aad57600080fd5b813567ffffffffffffffff80821115615ac857615ac8615a86565b604051601f8301601f19908116603f01168101908282118183101715615af057615af0615a86565b81604052838152866020858801011115615b0957600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215615b3e57600080fd5b8335615b49816157ae565b925060208401359150604084013567ffffffffffffffff811115615b6c57600080fd5b615b7886828701615a9c565b9150509250925092565b6020815260006137256020830184615941565b60008060408385031215615ba857600080fd5b8235615bb3816157ae565b9150602083013567ffffffffffffffff811115615bcf57600080fd5b615bdb85828601615a9c565b9150509250929050565b6020808252600b908201526a2727aa2fa6b0b730b3b2b960a91b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600060018201615c7d57615c7d615c55565b5060010190565b6020808252600990820152681393d517d1d550549160ba1b604082015260600190565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b600060208284031215615cf357600080fd5b815161372581615824565b600060208284031215615d1057600080fd5b5051919050565b600181811c90821680615d2b57607f821691505b60208210810361460e57634e487b7160e01b600052602260045260246000fd5b60008219821115615d5e57615d5e615c55565b500190565b6000816000190483118215151615615d7d57615d7d615c55565b500290565b600082821015615d9457615d94615c55565b500390565b600181815b80851115615dd4578160001904821115615dba57615dba615c55565b80851615615dc757918102915b93841c9390800290615d9e565b509250929050565b600082615deb57506001611685565b81615df857506000611685565b8160018114615e0e5760028114615e1857615e34565b6001915050611685565b60ff841115615e2957615e29615c55565b50506001821b611685565b5060208310610133831016604e8410600b8410161715615e57575081810a611685565b615e618383615d99565b8060001904821115615e7557615e75615c55565b029392505050565b60006137258383615ddc565b600080835481600182811c915080831680615ea557607f831692505b60208084108203615ec457634e487b7160e01b86526022600452602486fd5b818015615ed85760018114615ee957615f16565b60ff19861689528489019650615f16565b60008a81526020902060005b86811015615f0e5781548b820152908501908301615ef5565b505084890196505b509498975050505050505050565b600082615f4157634e487b7160e01b600052601260045260246000fd5b50049056fea264697066735822122063bcca3885691b2300112b31747e6a2fa4541b97d694847dc520c767d180ae1c64736f6c634300080d003300000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004000000000000000000000000c00e5e886e571c5451766289e3fe73bd2ffa0a5a000000000000000000000000dfd6fa1d4ec0888480aa4ac21ec82e98b0f5708e000000000000000000000000b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e000000000000000000000000efa645af8ed503ac944c38965729454341917b9c

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000004000000000000000000000000c00e5e886e571c5451766289e3fe73bd2ffa0a5a000000000000000000000000dfd6fa1d4ec0888480aa4ac21ec82e98b0f5708e000000000000000000000000b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e000000000000000000000000efa645af8ed503ac944c38965729454341917b9c

-----Decoded View---------------
Arg [0] : _addresses (address[]): 0xc00e5e886e571c5451766289e3fe73bd2ffa0a5a,0xdfd6fa1d4ec0888480aa4ac21ec82e98b0f5708e,0xb97ef9ef8734c71904d8002f8b6bc66dd9c48a6e,0xefa645af8ed503ac944c38965729454341917b9c

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [2] : 000000000000000000000000c00e5e886e571c5451766289e3fe73bd2ffa0a5a
Arg [3] : 000000000000000000000000dfd6fa1d4ec0888480aa4ac21ec82e98b0f5708e
Arg [4] : 000000000000000000000000b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e
Arg [5] : 000000000000000000000000efa645af8ed503ac944c38965729454341917b9c


Deployed ByteCode Sourcemap

21892:31247:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42747:150;;;;;;;;;;-1:-1:-1;42747:150:0;;;;;:::i;:::-;;:::i;:::-;;44201:187;;;;;;;;;;-1:-1:-1;44201:187:0;;;;;:::i;:::-;;:::i;45423:186::-;;;;;;;;;;-1:-1:-1;45423:186:0;;;;;:::i;:::-;;:::i;48144:132::-;;;;;;;;;;-1:-1:-1;48144:132:0;;;;;:::i;:::-;;:::i;:::-;;;1023:14:1;;1016:22;998:41;;986:2;971:18;48144:132:0;;;;;;;;50081:351;;;;;;;;;;-1:-1:-1;50081:351:0;;;;;:::i;:::-;;:::i;51754:118::-;;;;;;;;;;-1:-1:-1;51754:118:0;;;;;:::i;:::-;;:::i;30376:144::-;;;;;;;;;;-1:-1:-1;30376:144:0;;;;;:::i;:::-;;:::i;45088:171::-;;;;;;;;;;-1:-1:-1;45088:171:0;;;;;:::i;:::-;;:::i;50435:133::-;;;;;;;;;;;;;:::i;25989:143::-;;;;;;;;;;;;;:::i;49484:254::-;;;;;;;;;;-1:-1:-1;49484:254:0;;;;;:::i;:::-;;:::i;:::-;;;;1903:14:1;;1896:22;1878:41;;1962:14;;1955:22;1950:2;1935:18;;1928:50;2021:14;;2014:22;1994:18;;;1987:50;;;;2080:14;2073:22;2068:2;2053:18;;2046:50;1865:3;1850:19;49484:254:0;1671:431:1;48011:130:0;;;;;;;;;;-1:-1:-1;48011:130:0;;;;;:::i;:::-;;:::i;46464:114::-;;;;;;;;;;-1:-1:-1;46464:114:0;;;;;:::i;:::-;-1:-1:-1;;;;;46545:19:0;46525:7;46545:19;;;:9;:19;;;;;:28;;;;46464:114;;;;2253:25:1;;;2241:2;2226:18;46464:114:0;2107:177:1;47432:145:0;;;;;;;;;;-1:-1:-1;47432:145:0;;;;;:::i;:::-;;:::i;50776:161::-;;;;;;;;;;-1:-1:-1;50776:161:0;;;;;:::i;:::-;;:::i;50944:235::-;;;;;;;;;;-1:-1:-1;50944:235:0;;;;;:::i;:::-;;:::i;51630:121::-;;;;;;;;;;-1:-1:-1;51630:121:0;;;;;:::i;:::-;;:::i;46830:149::-;;;;;;;;;;-1:-1:-1;46830:149:0;;;;;:::i;:::-;;:::i;23460:20::-;;;;;;;;;;-1:-1:-1;23460:20:0;;;;-1:-1:-1;;;;;23460:20:0;;;;;;-1:-1:-1;;;;;2653:32:1;;;2635:51;;2623:2;2608:18;23460:20:0;2474:218:1;23123:34:0;;;;;;;;;;;;;;;;43730:134;;;;;;;;;;-1:-1:-1;43730:134:0;;;;;:::i;:::-;;:::i;43029:::-;;;;;;;;;;-1:-1:-1;43029:134:0;;;;;:::i;:::-;;:::i;43589:138::-;;;;;;;;;;-1:-1:-1;43589:138:0;;;;;:::i;:::-;;:::i;23406:26::-;;;;;;;;;;-1:-1:-1;23406:26:0;;;;-1:-1:-1;;;;;23406:26:0;;;45262:158;;;;;;;;;;-1:-1:-1;45262:158:0;;;;;:::i;:::-;;:::i;47876:132::-;;;;;;;;;;-1:-1:-1;47876:132:0;;;;;:::i;:::-;;:::i;52378:114::-;;;;;;;;;;-1:-1:-1;52378:114:0;;;;;:::i;:::-;;:::i;23224:23::-;;;;;;;;;;-1:-1:-1;23224:23:0;;;;-1:-1:-1;;;;;23224:23:0;;;24684:697;;;;;;:::i;:::-;;:::i;52005:119::-;;;;;;;;;;-1:-1:-1;52005:119:0;;;;;:::i;:::-;;:::i;43452:134::-;;;;;;;;;;-1:-1:-1;43452:134:0;;;;;:::i;:::-;;:::i;23374:28::-;;;;;;;;;;-1:-1:-1;23374:28:0;;;;-1:-1:-1;;;;;23374:28:0;;;52799:134;;;;;;:::i;:::-;;:::i;22904:26::-;;;;;;;;;;;;;;;;51882:113;;;;;;;;;;-1:-1:-1;51882:113:0;;;;;:::i;:::-;;:::i;3327:103::-;;;;;;;;;;;;;:::i;52616:180::-;;;;;;;;;;-1:-1:-1;52616:180:0;;;;;:::i;:::-;;:::i;52936:198::-;;;;;;;;;;-1:-1:-1;52936:198:0;;;;;:::i;:::-;;:::i;52495:118::-;;;;;;:::i;:::-;;:::i;45868:114::-;;;;;;;;;;-1:-1:-1;45868:114:0;;;;;:::i;:::-;-1:-1:-1;;;;;45949:19:0;45929:7;45949:19;;;:9;:19;;;;;:28;;;;45868:114;42900:126;;;;;;;;;;-1:-1:-1;42900:126:0;;;;;:::i;:::-;;:::i;42615:129::-;;;;;;;;;;-1:-1:-1;42615:129:0;;;;;:::i;:::-;;:::i;22658:52::-;;;;;;;;;;-1:-1:-1;22658:52:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;23436:20::-;;;;;;;;;;-1:-1:-1;23436:20:0;;;;-1:-1:-1;;;;;23436:20:0;;;47724:149;;;;;;;;;;-1:-1:-1;47724:149:0;;;;;:::i;:::-;;:::i;52134:108::-;;;;;;;;;;-1:-1:-1;52134:108:0;;;;;:::i;:::-;;:::i;3096:87::-;;;;;;;;;;-1:-1:-1;3142:7:0;3169:6;-1:-1:-1;;;;;3169:6:0;3096:87;;22714:39;;;;;;;;;;-1:-1:-1;22714:39:0;;;;;:::i;:::-;;:::i;47134:139::-;;;;;;;;;;-1:-1:-1;47134:139:0;;;;;:::i;:::-;;:::i;43166:142::-;;;;;;;;;;-1:-1:-1;43166:142:0;;;;;:::i;:::-;;:::i;45985:118::-;;;;;;;;;;-1:-1:-1;45985:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;46068:19:0;46048:7;46068:19;;;:9;:19;;;;;:30;;;;45985:118;46982:149;;;;;;;;;;-1:-1:-1;46982:149:0;;;;;:::i;:::-;;:::i;44391:167::-;;;;;;;;;;-1:-1:-1;44391:167:0;;;;;:::i;:::-;;:::i;22965:35::-;;;;;;;;;;;;;;;;51413:88;;;;;;;;;;-1:-1:-1;51413:88:0;;;;;:::i;:::-;;:::i;44890:195::-;;;;;;;;;;-1:-1:-1;44890:195:0;;;;;:::i;:::-;;:::i;22934:27::-;;;;;;;;;;;;;;;;23086:33;;;;;;;;;;;;;;;;23279:27;;;;;;;;;;-1:-1:-1;23279:27:0;;;;-1:-1:-1;;;23279:27:0;;;;;;44011:187;;;;;;;;;;-1:-1:-1;44011:187:0;;;;;:::i;:::-;;:::i;51189:108::-;;;;;;;;;;-1:-1:-1;51189:108:0;;;;;:::i;:::-;;:::i;45755:110::-;;;;;;;;;;-1:-1:-1;45755:110:0;;;;;:::i;:::-;-1:-1:-1;;;;;45834:19:0;45814:7;45834:19;;;:9;:19;;;;;;;;:26;;;45755:110;23043:39;;;;;;;;;;;;;;;;47580:141;;;;;;;;;;-1:-1:-1;47580:141:0;;;;;:::i;:::-;;:::i;22789:25::-;;;;;;;;;;-1:-1:-1;22789:25:0;;;;;:::i;:::-;;:::i;46109:114::-;;;;;;;;;;-1:-1:-1;46109:114:0;;;;;:::i;:::-;-1:-1:-1;;;;;46190:19:0;46170:7;46190:19;;;:9;:19;;;;;:28;;;;46109:114;23943:738;;;;;;:::i;:::-;;:::i;47276:153::-;;;;;;;;;;-1:-1:-1;47276:153:0;;;;;:::i;:::-;;:::i;48294:399::-;;;;;;;;;;-1:-1:-1;48294:399:0;;;;;:::i;:::-;-1:-1:-1;;;;;;48470:19:0;48362:7;48470:19;;;:9;:19;;;;;;;;48502:23;;48526:17;;;;48544:19;;;;48564:21;;;;48586:19;;;;48606:20;;;;48627:19;;;;48647:20;;;;48668:19;;;;;48502:23;;48526:17;;48544:19;;48564:21;;48586:19;;48606:20;;48627:19;;48647:20;;48668:19;48294:399;;;;;7763:25:1;;;7819:2;7804:18;;7797:34;;;;7847:18;;;7840:34;;;;7905:2;7890:18;;7883:34;;;;7948:3;7933:19;;7926:35;;;;7992:3;7977:19;;7970:35;8036:3;8021:19;;8014:35;8080:3;8065:19;;8058:35;8124:3;8109:19;;8102:35;7750:3;7735:19;48294:399:0;7392:751:1;44708:179:0;;;;;;;;;;-1:-1:-1;44708:179:0;;;;;:::i;:::-;;:::i;48696:585::-;;;;;;;;;;-1:-1:-1;48696:585:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;49284:100::-;;;;;;;;;;-1:-1:-1;49361:11:0;:18;49284:100;;51307:96;;;;;;;;;;-1:-1:-1;51307:96:0;;;;;:::i;:::-;;:::i;49387:94::-;;;;;;;;;;-1:-1:-1;49387:94:0;;;;;:::i;:::-;;:::i;43867:141::-;;;;;;;;;;-1:-1:-1;43867:141:0;;;;;:::i;:::-;;:::i;50575:194::-;;;;;;;;;;-1:-1:-1;50575:194:0;;;;;:::i;:::-;;:::i;46345:116::-;;;;;;;;;;-1:-1:-1;46345:116:0;;;;;:::i;:::-;-1:-1:-1;;;;;46427:19:0;46407:7;46427:19;;;:9;:19;;;;;:29;;;;46345:116;22846:23;;;;;;;;;;;;;;;;23350:20;;;;;;;;;;-1:-1:-1;23350:20:0;;;;-1:-1:-1;;;;;23350:20:0;;;44561:144;;;;;;;;;;-1:-1:-1;44561:144:0;;;;;:::i;:::-;;:::i;22757:28::-;;;;;;;;;;-1:-1:-1;22757:28:0;;;;;:::i;:::-;;:::i;22608:46::-;;;;;;;;;;-1:-1:-1;22608:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23186:34;;;;;;;;;;;;;;;;45630:122;;;;;;;;;;-1:-1:-1;45630:122:0;;;;;:::i;:::-;-1:-1:-1;;;;;45715:19:0;45695:7;45715:19;;;:9;:19;;;;;:32;;45630:122;46698:129;;;;;;;;;;-1:-1:-1;46698:129:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;46226:116::-;;;;;;;;;;-1:-1:-1;46226:116:0;;;;;:::i;:::-;-1:-1:-1;;;;;46308:19:0;46288:7;46308:19;;;:9;:19;;;;;:29;;;;46226:116;28209:231;;;;;;;;;;-1:-1:-1;28209:231:0;;;;;:::i;:::-;;:::i;30527:135::-;;;;;;;;;;-1:-1:-1;30527:135:0;;;;;:::i;:::-;;:::i;26135:109::-;;;;;;;;;;-1:-1:-1;26135:109:0;;;;;:::i;:::-;;:::i;23004:35::-;;;;;;;;;;;;;;;;52252:116;;;;;;;;;;-1:-1:-1;52252:116:0;;;;;:::i;:::-;;:::i;51511:109::-;;;;;;;;;;-1:-1:-1;51511:109:0;;;;;:::i;:::-;;:::i;3442:201::-;;;;;;;;;;-1:-1:-1;3442:201:0;;;;;:::i;:::-;;:::i;49741:128::-;;;;;;;;;;-1:-1:-1;49741:128:0;;;;;:::i;:::-;;:::i;32418:389::-;;;;;;;;;;-1:-1:-1;32418:389:0;;;;;:::i;:::-;-1:-1:-1;;;;;32584:19:0;32475:7;32584:19;;;:9;:19;;;;;;;;32616:23;;32640:17;;;;32658:19;;;;32678:21;;;;32700:19;;;;32720:20;;;;32741:19;;;;32761:20;;;;32782:19;;;;;32616:23;;32640:17;;32658:19;;32678:21;;32700:19;;32720:20;;32741:19;;32761:20;;32782:19;32418:389;46581:114;;;;;;;;;;-1:-1:-1;46581:114:0;;;;;:::i;:::-;-1:-1:-1;;;;;46662:19:0;46642:7;46662:19;;;:9;:19;;;;;:28;;;;46581:114;43311:138;;;;;;;;;;-1:-1:-1;43311:138:0;;;;;:::i;:::-;;:::i;26536:110::-;;;;;;;;;;-1:-1:-1;26536:110:0;;;;;:::i;:::-;;:::i;27112:111::-;;;;;;;;;;-1:-1:-1;27112:111:0;;;;;:::i;:::-;;:::i;42747:150::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23574:12;23543:21;:44::i;:::-;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;42844:19:0;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:48;42747:150::o;44201:187::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23543:44;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44319:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;:25;;44365:18;;44319:21;44341:2;;44319:25;::::1;;;;;:::i;:::-;;;;;;;;;;;:43;;:64;;;;44201:187:::0;;;:::o;45423:186::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23543:44;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45540:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;:25;;45586:18;;45540:21;45562:2;;45540:25;::::1;;;;;:::i;:::-;;;;;;;;;;;:43;;:64;;;;45423:186:::0;;;:::o;48144:132::-;-1:-1:-1;;;;;48238:15:0;;48221:4;48238:15;;;:5;:15;;;;;:19;;48254:2;;48238:19;;;;;;:::i;:::-;;;;;;;;;;:33;;;;;;;-1:-1:-1;48144:132:0;;;;;:::o;50081:351::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;50137:8:::1;:13:::0;;-1:-1:-1;;;;50137:13:0::1;-1:-1:-1::0;;;50137:13:0;::::1;;;;::::0;;50171:15:::1;-1:-1:-1::0;50191:208:0::1;50208:11;:18:::0;50206:20;::::1;50191:208;;;50237:16;50256:11;50268:1;50256:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;::::0;-1:-1:-1;;;;;50256:14:0::1;::::0;-1:-1:-1;50276:118:0::1;-1:-1:-1::0;;;;;49995:21:0;;49945:7;49995:21;;;:11;:21;;;;;50029:19;50291:1:::1;:35;50276:118;;;50343:40;50366:8;50375:1;50377:5;50343:22;:40::i;:::-;50327:3:::0;::::1;::::0;::::1;:::i;:::-;;;;50276:118;;;;50231:168;50227:3;;;;;:::i;:::-;;;;50191:208;;;;50403:24;50421:5;50403:17;:24::i;:::-;50128:304;50081:351:::0;:::o;51754:118::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;51829:7:::1;:31:::0;;-1:-1:-1;;;;;;51829:31:0::1;-1:-1:-1::0;;;;;51829:31:0;;;::::1;::::0;;;::::1;::::0;;51754:118::o;30376:144::-;23640:5;;-1:-1:-1;;;;;23640:5:0;2720:10;23640:21;;:48;;-1:-1:-1;3142:7:0;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23665:23;23640:48;23632:70;;;;-1:-1:-1;;;23632:70:0;;;;;;;:::i;:::-;30473:38:::1;30488:8;30497:10;30508:2;30473:14;:38::i;:::-;30376:144:::0;;;:::o;45088:171::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23543:44;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45198:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;:25;;45240:14;;45198:21;45220:2;;45198:25;::::1;;;;;:::i;:::-;;;;;;;;;;;:39;;:56;;;;45088:171:::0;;;:::o;50435:133::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;50495:6:::1;50491:69;50506:8;:15:::0;50504:17;::::1;50491:69;;;50536:8;:14;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;50536:14:0;;;;;-1:-1:-1;;;;;;50536:14:0::1;::::0;;;;;50522:3;::::1;::::0;::::1;:::i;:::-;;;;50491:69;;;;50435:133::o:0;25989:143::-;23640:5;;-1:-1:-1;;;;;23640:5:0;2720:10;23640:21;;:48;;-1:-1:-1;3142:7:0;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23665:23;23640:48;23632:70;;;;-1:-1:-1;;;23632:70:0;;;;;;;:::i;:::-;26041:6:::1;26037:91;26054:11;:18:::0;26052:20;::::1;26037:91;;;26083:39;26107:11;26119:1;26107:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;26107:14:0::1;26083:23;:39::i;:::-;26073:3:::0;::::1;::::0;::::1;:::i;:::-;;;;26037:91;;49484:254:::0;-1:-1:-1;;;;;49595:15:0;;49547:4;49595:15;;;:5;:15;;;;;49637:9;;49547:4;;;;;;49595:15;49547:4;;49595:15;;49643:2;;49637:9;;;;;;:::i;:::-;;;;;;;;;;49659:11;;;;;;;49671:20;;;;;-1:-1:-1;49692:19:0;;;;;;-1:-1:-1;49712:20:0;;;;;;-1:-1:-1;49484:254:0;-1:-1:-1;;;;;49484:254:0:o;48011:130::-;-1:-1:-1;;;;;48104:15:0;;48087:4;48104:15;;;:5;:15;;;;;:19;;48120:2;;48104:19;;;;;;:::i;:::-;;;;;;;;;;:32;;;;;;;48011:130;-1:-1:-1;;;48011:130:0:o;47432:145::-;-1:-1:-1;;;;;47531:21:0;;47511:7;47531:21;;;:11;:21;;;;;:25;;47553:2;;47531:25;;;;;;:::i;:::-;;;;;;;;;;;:41;;;47524:48;;47432:145;;;;:::o;50776:161::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;50851:13:::1;:24:::0;;;50918:9:::1;::::0;50900:28:::1;::::0;50867:8;;50900:17:::1;:28::i;:::-;50884:13;:44:::0;-1:-1:-1;50776:161:0:o;50944:235::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;51014:18:::1;51035:44;51055:9;;51065:13;;51035:19;:44::i;:::-;51014:65:::0;-1:-1:-1;51100:17:0::1;:5:::0;51110:6:::1;51100:9;:17::i;:::-;51088:9;:29:::0;;;51142:25:::1;::::0;:10;;:14:::1;:25::i;:::-;51126:13;:41:::0;-1:-1:-1;;50944:235:0:o;51630:121::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;51706:8:::1;:33:::0;;-1:-1:-1;;;;;;51706:33:0::1;-1:-1:-1::0;;;;;51706:33:0;;;::::1;::::0;;;::::1;::::0;;51630:121::o;46830:149::-;-1:-1:-1;;;;;46931:21:0;;46911:7;46931:21;;;:11;:21;;;;;:25;;46953:2;;46931:25;;;;;;:::i;:::-;;;;;;;;;;;:43;;;46924:50;;46830:149;;;;:::o;43730:134::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23543:44;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43819:19:0;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:28:::1;;:40:::0;43730:134::o;43029:::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23543:44;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43118:19:0;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:28:::1;;:40:::0;43029:134::o;43589:138::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23543:44;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43680:19:0;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:29:::1;;:42:::0;43589:138::o;45262:158::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23543:44;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45367:15:0;::::1;;::::0;;;:5:::1;:15;::::0;;;;:19;;45402:13;;45367:15;45383:2;;45367:19;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:48:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;45367:48:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;45262:158:0:o;47876:132::-;-1:-1:-1;;;;;47970:15:0;;47953:4;47970:15;;;:5;:15;;;;;:19;;47986:2;;47970:19;;;;;;:::i;:::-;;;;;;;;;;:33;;;;;;;47876:132;-1:-1:-1;;;47876:132:0:o;52378:114::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;52462:11:::1;:18:::0;52378:114::o;24684:697::-;23640:5;;-1:-1:-1;;;;;23640:5:0;2720:10;23640:21;;:48;;-1:-1:-1;3142:7:0;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23665:23;23640:48;23632:70;;;;-1:-1:-1;;;23632:70:0;;;;;;;:::i;:::-;24830:8:::1;::::0;24880::::1;::::0;24805:9:::1;::::0;-1:-1:-1;;;;;24830:8:0::1;::::0;24822:68:::1;::::0;24849:40:::1;::::0;24805:9;;24849:22:::1;:40::i;:::-;24822:68;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;24906:11:0::1;::::0;24959::::1;::::0;-1:-1:-1;;;;;24906:11:0;;::::1;::::0;24898:74:::1;::::0;24928:43:::1;::::0;24951:7;;24928:22:::1;:43::i;:::-;24898:74;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;24988:8:0::1;::::0;25038:12:::1;::::0;-1:-1:-1;;;;;24988:8:0;;::::1;::::0;24980:72:::1;::::0;25007:44:::1;::::0;25030:7;;25007:22:::1;:44::i;:::-;24980:72;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25060:24;25087:152;25198:40;25221:7;25229:8;;25198:22;:40::i;:::-;25087:106;25149:43;25172:7;25180:11;;25149:22;:43::i;:::-;25087:57;25099:44;25122:7;25130:12;;25099:22;:44::i;:::-;25087:7:::0;;:11:::1;:57::i;:::-;:61:::0;::::1;:106::i;:152::-;25060:179:::0;-1:-1:-1;25250:18:0;;25247:84:::1;;25286:8;::::0;25278:44:::1;::::0;-1:-1:-1;;;;;25286:8:0;;::::1;::::0;25278:44;::::1;;;::::0;25305:16;;25286:8:::1;25278:44:::0;25286:8;25278:44;25305:16;25286:8;25278:44;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;25247:84;25338:38;25353:8;25362:10;25373:2;25338:14;:38::i;:::-;24779:602;;24684:697:::0;;;:::o;52005:119::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;52090:11:::1;:22:::0;;-1:-1:-1;;;;;;52090:22:0::1;-1:-1:-1::0;;;;;52090:22:0;;;::::1;::::0;;;::::1;::::0;;52005:119::o;43452:134::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23543:44;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43541:19:0;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:28:::1;;:40:::0;43452:134::o;52799:::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;52893:35:::1;::::0;-1:-1:-1;;;;;52893:12:0;::::1;::::0;52906:21:::1;52893:35:::0;::::1;;;::::0;::::1;::::0;;;52906:21;52893:12;:35;::::1;;;;;;;;;;;;;::::0;::::1;;;;51882:113:::0;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;51964:8:::1;:19:::0;;-1:-1:-1;;;;;;51964:19:0::1;-1:-1:-1::0;;;;;51964:19:0;;;::::1;::::0;;;::::1;::::0;;51882:113::o;3327:103::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;3392:30:::1;3419:1;3392:18;:30::i;:::-;3327:103::o:0;52616:180::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;52743:6:::1;::::0;:48:::1;::::0;-1:-1:-1;;;52743:48:0;;52731:6;;-1:-1:-1;;;;;52743:6:0::1;::::0;:19:::1;::::0;:48:::1;::::0;52771:4:::1;::::0;52778:3;;52783:7;;52743:48:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;52936:198::-:0;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;53057:6:::1;::::0;53097:31:::1;::::0;-1:-1:-1;;;53097:31:0;;53085:4:::1;53097:31;::::0;::::1;2635:51:1::0;;;53045:6:0;;-1:-1:-1;;;;;53057:6:0::1;::::0;:19:::1;::::0;53085:4;53092:3;;53057:6;;53097:16:::1;::::0;2608:18:1;;53097:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53057:72;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;53017:117;52936:198:::0;;:::o;52495:118::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;52587:21:::1;::::0;-1:-1:-1;;;;;52587:12:0;::::1;::::0;:21;::::1;;;::::0;52600:7;;52587:21:::1;::::0;;;52600:7;52587:12;:21;::::1;;;;;;;;;;;;;::::0;::::1;;;;42900:126:::0;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23543:44;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42985:19:0;;::::1;;::::0;;;:9:::1;:19;::::0;;;;;;;:26:::1;:36:::0;42900:126::o;42615:129::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23543:44;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42707:15:0;::::1;;::::0;;;:5:::1;:15;::::0;;;;:19;;42734:5;;42707:15;42723:2;;42707:19;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:32:::0;;-1:-1:-1;;42707:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;;;42615:129:0:o;22658:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47724:149::-;-1:-1:-1;;;;;47825:21:0;;47805:7;47825:21;;;:11;:21;;;;;:25;;47847:2;;47825:25;;;;;;:::i;:::-;;;;;;;;;;;:43;;;47818:50;;47724:149;;;;:::o;52134:108::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;52215:8:::1;:15:::0;52134:108::o;22714:39::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22714:39:0;;;;;;-1:-1:-1;22714:39:0;;;;;;;;;;;:::o;47134:139::-;-1:-1:-1;;;;;47230:21:0;;47210:7;47230:21;;;:11;:21;;;;;:25;;47252:2;;47230:25;;;;;;:::i;:::-;;;;;;;;;;;:38;;;47223:45;;47134:139;;;;:::o;43166:142::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23543:44;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43259:19:0;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:30:::1;;:44:::0;43166:142::o;46982:149::-;-1:-1:-1;;;;;47083:21:0;;47063:7;47083:21;;;:11;:21;;;;;:25;;47105:2;;47083:25;;;;;;:::i;:::-;;;;;;;;;;;:43;;;47076:50;;46982:149;;;;:::o;44391:167::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23543:44;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44499:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;:25;;44540:13;;44499:21;44521:2;;44499:25;::::1;;;;;:::i;:::-;;;;;;;;;;;:38;;:54;;;;44391:167:::0;;;:::o;51413:88::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;51474:7:::1;:15:::0;;-1:-1:-1;;51474:15:0::1;::::0;::::1;;::::0;;;::::1;::::0;;51413:88::o;44890:195::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23543:44;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;45012:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;:25;;45060:20;;45012:21;45034:2;;45012:25;::::1;;;;;:::i;:::-;;;;;;;;;;;:45;;:68;;;;44890:195:::0;;;:::o;44011:187::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23543:44;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44129:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;:25;;44175:18;;44129:21;44151:2;;44129:25;::::1;;;;;:::i;:::-;;;;;;;;;;;:43;;:64;;;;44011:187:::0;;;:::o;51189:108::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;51266:8:::1;:19:::0;;-1:-1:-1;;;;;;51266:19:0::1;-1:-1:-1::0;;;;;51266:19:0;;;::::1;::::0;;;::::1;::::0;;51189:108::o;47580:141::-;-1:-1:-1;;;;;47677:21:0;;47657:7;47677:21;;;:11;:21;;;;;:25;;47699:2;;47677:25;;;;;;:::i;:::-;;;;;;;;;;;:39;;;47670:46;;47580:141;;;;:::o;22789:25::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22789:25:0;;-1:-1:-1;22789:25:0;:::o;23943:738::-;23640:5;;-1:-1:-1;;;;;23640:5:0;2720:10;23640:21;;:48;;-1:-1:-1;3142:7:0;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23665:23;23640:48;23632:70;;;;-1:-1:-1;;;23632:70:0;;;;;;;:::i;:::-;24064:13:::1;24080:37;24099:10;24110:6;;24080:18;:37::i;:::-;24125:6;::::0;24155:8:::1;::::0;24196::::1;::::0;24064:53;;-1:-1:-1;;;;;;24125:6:0;;::::1;::::0;:19:::1;::::0;24145:8;;24155::::1;::::0;24165:40:::1;::::0;24188:7;;24165:22:::1;:40::i;:::-;24125:81;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;24214:6:0::1;::::0;24244:11:::1;::::0;24288::::1;::::0;-1:-1:-1;;;;;24214:6:0;;::::1;::::0;:19:::1;::::0;24234:8;;24244:11;::::1;::::0;24257:43:::1;::::0;24280:7;;24257:22:::1;:43::i;:::-;24214:87;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;24309:6:0::1;::::0;24339:8:::1;::::0;24380:12:::1;::::0;-1:-1:-1;;;;;24309:6:0;;::::1;::::0;:19:::1;::::0;24329:8;;24339;::::1;::::0;24349:44:::1;::::0;24372:7;;24349:22:::1;:44::i;:::-;24309:85;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24402:16;24421:152;24528:44;24551:7;24559:12;;24528:22;:44::i;:::-;24421:102;24479:43;24502:7;24510:11;;24479:22;:43::i;:::-;24421:53;24433:40;24456:7;24464:8;;24433:22;:40::i;:::-;24421:7:::0;;:11:::1;:53::i;:152::-;24581:6;::::0;24611:8:::1;::::0;24581:49:::1;::::0;-1:-1:-1;;;24581:49:0;;24402:171;;-1:-1:-1;;;;;;24581:6:0;;::::1;::::0;:19:::1;::::0;:49:::1;::::0;24601:8;;24611;::::1;::::0;24402:171;;24581:49:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24638:38;24653:8;24662:10;24673:2;24638:14;:38::i;:::-;24056:625;;23943:738:::0;;;;:::o;47276:153::-;-1:-1:-1;;;;;47379:21:0;;47359:7;47379:21;;;:11;:21;;;;;:25;;47401:2;;47379:25;;;;;;:::i;:::-;;;;;;;;;;;:45;;;47372:52;;47276:153;;;;:::o;44708:179::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23543:44;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44822:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;:25;;44866:16;;44822:21;44844:2;;44822:25;::::1;;;;;:::i;:::-;;;;;;;;;;;:41;;:60;;;;44708:179:::0;;;:::o;48696:585::-;48766:13;48780:7;48788;48796;48804;48812;48820;48828;48836;48844;48857:34;48894:11;:21;48906:8;-1:-1:-1;;;;;48894:21:0;-1:-1:-1;;;;;48894:21:0;;;;;;;;;;;;48857:58;;48920:33;48956:12;48969:2;48956:16;;;;;;;;:::i;:::-;;;;;;;;;;;48920:52;;48985:13;:18;;49004:13;:31;;;49036:13;:26;;;49063:13;:31;;;49095:13;:26;;;49122:13;:29;;;49152:13;:29;;;49182:13;:33;;;49216:13;:27;;;49244:13;:31;;;48977:299;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48696:585;;;;;;;;;;;;;:::o;51307:96::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;51375:5:::1;:16:::0;;-1:-1:-1;;;;;;51375:16:0::1;-1:-1:-1::0;;;;;51375:16:0;;;::::1;::::0;;;::::1;::::0;;51307:96::o;49387:94::-;49441:7;49461:11;49473:2;49461:15;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;49461:15:0;;49387:94;-1:-1:-1;;49387:94:0:o;43867:141::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23543:44;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43965:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;:25;;43998:5;;43965:21;43987:2;;43965:25;::::1;;;;;:::i;:::-;;;;;;;;;;;:30;;:38;;;;;;;;;;;;:::i;50575:194::-:0;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;50646:38:::1;50668:8;50646:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;50646:38:0::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;50677:6;50646:21;:38::i;:::-;:46;;50687:5;50646:46:::0;50643:118:::1;;50706:8;:21:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;50706:21:0;;;;;::::1;::::0;;-1:-1:-1;;;;;50706:21:0;::::1;-1:-1:-1::0;;;;;;50706:21:0;;::::1;;::::0;;50575:194;:::o;44561:144::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23543:44;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44659:15:0;::::1;;::::0;;;:5:::1;:15;::::0;;;;:19;;44695:5;;44659:15;44675:2;;44659:19;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:41:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;44659:41:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;44561:144:0:o;22757:28::-;;;;;;;;;;;;46698:129;-1:-1:-1;;;;;46792:21:0;;;;;;:11;:21;;;;;:25;;46766:13;;46792:21;46814:2;;46792:25;;;;;;:::i;:::-;;;;;;;;;;;:30;;46785:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46698:129;;;;:::o;28209:231::-;23640:5;;-1:-1:-1;;;;;23640:5:0;2720:10;23640:21;;:48;;-1:-1:-1;3142:7:0;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23665:23;23640:48;23632:70;;;;-1:-1:-1;;;23632:70:0;;;;;;;:::i;:::-;28300:26:::1;28311:8;28320:5;28300:10;:26::i;:::-;:32;;28328:4;28300:32;28292:88;;;::::0;-1:-1:-1;;;28292:88:0;;14481:2:1;28292:88:0::1;::::0;::::1;14463:21:1::0;14520:2;14500:18;;;14493:30;14559:34;14539:18;;;14532:62;-1:-1:-1;;;14610:18:1;;;14603:42;14662:19;;28292:88:0::1;14279:408:1::0;28292:88:0::1;28385:50;28397:8;28406:28;28419:8;28428:5;28406:12;:28::i;:::-;28385:11;:50::i;30527:135::-:0;30606:4;30627:26;30638:8;30647:5;30627:10;:26::i;:::-;30620:33;30527:135;-1:-1:-1;;;30527:135:0:o;26135:109::-;23640:5;;-1:-1:-1;;;;;23640:5:0;2720:10;23640:21;;:48;;-1:-1:-1;3142:7:0;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23665:23;23640:48;23632:70;;;;-1:-1:-1;;;23632:70:0;;;;;;;:::i;:::-;26206:33:::1;26230:8;26206:23;:33::i;52252:116::-:0;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;52337:12:::1;:19:::0;52252:116::o;51511:109::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;51583:4:::1;:25:::0;;-1:-1:-1;;;;;;51583:25:0::1;-1:-1:-1::0;;;;;51583:25:0;;;::::1;::::0;;;::::1;::::0;;51511:109::o;3442:201::-;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;3235:23;3227:68;;;;-1:-1:-1;;;3227:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3531:22:0;::::1;3523:73;;;::::0;-1:-1:-1;;;3523:73:0;;14894:2:1;3523:73:0::1;::::0;::::1;14876:21:1::0;14933:2;14913:18;;;14906:30;14972:34;14952:18;;;14945:62;-1:-1:-1;;;15023:18:1;;;15016:36;15069:19;;3523:73:0::1;14692:402:1::0;3523:73:0::1;3607:28;3626:8;3607:18;:28::i;49741:128::-:0;-1:-1:-1;;;;;49995:21:0;;49811:7;49995:21;;;:11;:21;;;;;50029:19;49831:33;49872:181;43311:138;3142:7;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23516:23;;:71;;;23543:44;23565:8;23543:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23543:44:0;;;;;;;;;;;;;;;;;;;;23574:12;2720:10;;2640:98;23543:44;23508:95;;;;-1:-1:-1;;;23508:95:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43402:19:0;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:29:::1;;:42:::0;43311:138::o;26536:110::-;23640:5;;-1:-1:-1;;;;;23640:5:0;2720:10;23640:21;;:48;;-1:-1:-1;3142:7:0;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23665:23;23640:48;23632:70;;;;-1:-1:-1;;;23632:70:0;;;;;;;:::i;:::-;26612:29:::1;26629:8;26638:2;26612:16;:29::i;27112:111::-:0;23640:5;;-1:-1:-1;;;;;23640:5:0;2720:10;23640:21;;:48;;-1:-1:-1;3142:7:0;3169:6;-1:-1:-1;;;;;3169:6:0;2720:10;23665:23;23640:48;23632:70;;;;-1:-1:-1;;;23632:70:0;;;;;;;:::i;:::-;27191:27:::1;27203:8;27212:5;27191:11;:27::i;3906:218::-:0;3994:4;;4005:96;4020:5;:12;4018:1;:14;4005:96;;;4059:5;4065:1;4059:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;4047:20:0;:8;-1:-1:-1;;;;;4047:20:0;;4044:51;;4083:4;4076:11;;;;;4044:51;4033:3;;;;:::i;:::-;;;;4005:96;;;-1:-1:-1;4113:5:0;;3906:218;-1:-1:-1;;;3906:218:0:o;33105:646::-;33197:8;;-1:-1:-1;;;33197:8:0;;;;:17;;;:45;;-1:-1:-1;33238:4:0;;40073;40035:7;40055:24;;;:9;:24;;;;;:33;;;33218:24;;33197:45;33194:549;;;33290:83;33300:72;33318:16;40073:4;40035:7;40055:24;;;:9;:24;;;;;:33;;;;39987:106;33318:16;33335:36;33359:8;33368:2;33335:23;:36::i;:::-;33300:17;:72::i;:::-;33290:5;;:9;:83::i;:::-;-1:-1:-1;;;;;33249:21:0;;;;;;:11;:21;;;;;:25;;33271:2;;33249:25;;;;;;:::i;:::-;;;;;;;;;;;:39;;:124;;;;33379:79;33401:8;33410:2;33413:11;:21;33425:8;-1:-1:-1;;;;;33413:21:0;-1:-1:-1;;;;;33413:21:0;;;;;;;;;;;;33435:2;33413:25;;;;;;;;:::i;:::-;;;;;;;;;;;:39;;;33453:4;33379:21;:79::i;:::-;33496:27;33506:16;40073:4;40035:7;40055:24;;;:9;:24;;;;;:33;;;;39987:106;33496:27;-1:-1:-1;;;;;33464:19:0;;;;;;:9;:19;;;;;:28;;:59;;:28;;:19;:59;;;;;:::i;:::-;;;;-1:-1:-1;;33571:4:0;;-1:-1:-1;;;;;33529:21:0;;;;;;:11;:21;;;;;:25;;33551:2;;33529:25;;;;;;:::i;33194:549::-;33589:8;;-1:-1:-1;;;33589:8:0;;;;:16;;33601:4;33589:16;33586:157;;33653:83;33663:72;33681:16;40073:4;40035:7;40055:24;;;:9;:24;;;;;:33;;;;39987:106;33653:83;-1:-1:-1;;;;;33612:21:0;;;;;;:11;:21;;;;;:25;;33634:2;;33612:25;;;;;;:::i;35734:190::-;35793:8;;-1:-1:-1;;;35793:8:0;;;;:17;;35805:5;35793:17;35790:130;;35853:4;;35835;35817:24;;;;:9;:24;;;;;:33;;:40;50491:69:::1;50435:133::o:0;35790:130::-;35891:4;35873:24;;;;:9;:24;;;;;:33;;:41;35734:190::o;30000:369::-;30089:2;30095:3;30089:9;30086:237;;30113:6;30109:107;30124:10;30122:1;:12;30109:107;;;30150:55;30168:8;30177:4;30182:20;30193:8;30182:10;:20::i;:::-;30203:1;30150:17;:55::i;:::-;30135:3;;;;:::i;:::-;;;;30109:107;;;;30086:237;;;30235:6;30231:87;30246:10;30244:1;:12;30231:87;;;30274:37;30292:8;30301:4;30306:2;30309:1;30274:17;:37::i;:::-;30257:3;;;;:::i;:::-;;;;30231:87;;;;30086:237;30327:33;30351:8;26247:286;26317:6;26313:102;-1:-1:-1;;;;;49995:21:0;;49945:7;49995:21;;;:11;:21;;;;;50029:19;26328:1;:32;26313:102;;;26376:28;26393:8;26402:1;26376:16;:28::i;:::-;26361:3;;;;:::i;:::-;;;;26313:102;;;;26423:23;26437:8;26423:13;:23::i;:::-;26455:29;26475:8;26455:19;:29::i;:::-;26493:31;26515:8;26493:21;:31::i;1550:98::-;1608:7;1635:5;1639:1;1635;:5;:::i;5635:152::-;5700:7;5715:12;5728:11;5743:21;5758:2;5761;5743:14;:21::i;:::-;-1:-1:-1;5714:50:0;5635:152;-1:-1:-1;;;;;5635:152:0:o;5089:385::-;5160:7;5174:11;5188:15;5200:2;5188:11;:15::i;:::-;5174:29;;5209:15;5227:17;5239:4;5227:11;:17::i;:::-;5209:35;-1:-1:-1;5250:10:0;5264;5209:35;5264:2;:10;:::i;:::-;5250:24;;5280:10;5293:14;5302:4;5293:8;:14::i;:::-;5313:40;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5372:20:0;5379:12;5313:40;5379:2;:12;:::i;:::-;5372:2;;:6;:20::i;:::-;5359:33;-1:-1:-1;5398:10:0;5411:12;5359:33;5418:4;5411:6;:12::i;:::-;5398:25;-1:-1:-1;5436:27:0;5448:13;5454:7;5448:5;:13;:::i;:::-;5443:19;;:2;:19;:::i;:::-;5436:2;;:6;:27::i;:::-;5429:34;5089:385;-1:-1:-1;;;;;;;;;;5089:385:0:o;1444:98::-;1502:7;1529:5;1533:1;1529;:5;:::i;3655:191::-;3729:16;3748:6;;-1:-1:-1;;;;;3765:17:0;;;-1:-1:-1;;;;;;3765:17:0;;;;;;3798:40;;3748:6;;;;;;;3798:40;;3729:16;3798:40;3718:128;3655:191;:::o;5791:290::-;5855:7;;5895:10;;;:24;;;5915:4;5909:2;:10;5895:24;:35;;;;5928:2;5923;:7;5895:35;5891:65;;;5945:4;-1:-1:-1;5938:11:0;;5891:65;5974:2;5996:1;6003:58;6014:3;6009:2;:8;6003:58;;;6025:8;6031:2;6025:8;;:::i;:::-;;-1:-1:-1;6040:11:0;:2;6047:3;6040:6;:11::i;:::-;;6003:58;;;-1:-1:-1;6073:2:0;5791:290;-1:-1:-1;;;;5791:290:0:o;30669:373::-;-1:-1:-1;;;;;30790:21:0;;30745:4;30790:21;;;:11;:21;;;;;30745:4;30820:194;30837:13;;30835:15;;30820:194;;;30866:25;30894:6;30901:1;30894:9;;;;;;;;:::i;:::-;;;;;;;;;;;30866:37;;30964:5;30948:23;;;;;;30932:5;:10;;30916:28;;;;;;:::i;:::-;;;;;;;;:55;30913:92;;30990:4;30983:11;;;;;;;30913:92;-1:-1:-1;30851:3:0;;;;:::i;:::-;;;;30820:194;;;-1:-1:-1;31028:5:0;;30669:373;-1:-1:-1;;;;30669:373:0:o;31049:368::-;-1:-1:-1;;;;;31184:21:0;;31132:7;31184:21;;;:11;:21;;;;;31132:7;31218:191;31235:13;;31233:15;;31218:191;;;31264:25;31292:6;31299:1;31292:9;;;;;;;;:::i;:::-;;;;;;;;;;;31264:37;;31362:5;31346:23;;;;;;31330:5;:10;;31314:28;;;;;;:::i;:::-;;;;;;;;:55;31311:89;;-1:-1:-1;31388:1:0;-1:-1:-1;31381:8:0;;-1:-1:-1;31381:8:0;31311:89;-1:-1:-1;31249:3:0;;;;:::i;:::-;;;;31218:191;;;;31140:277;31049:368;;;;:::o;28443:1379::-;-1:-1:-1;;;;;28541:21:0;;28510:28;28541:21;;;:11;:21;;;;;;;;28592:5;:15;;;;;;28619:19;;28592:15;;28635:2;;28619:19;;;;;;:::i;:::-;;;;;;;;;;:33;;;;;;:41;;28656:4;28619:41;28616:93;;28671:28;28690:8;28671:18;:28::i;:::-;28728:2;28717:1058;28733:13;;28731:15;;28717:1058;;;28769:13;;:15;;28783:1;;28769:15;:::i;:::-;28764:1;:20;28761:1005;;28794:29;28826:6;28833:1;28826:9;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;28876:6:0;28883:3;:1;28885;28883:3;:::i;:::-;28876:11;;;;;;;;:::i;:::-;;;;;;;;;;;28844:43;;28898:21;28922:3;28926:1;28922:6;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;28959:3:0;28963;:1;28965;28963:3;:::i;:::-;28959:8;;;;;;;;:::i;:::-;;;;;;;;28935:32;;29001:9;:14;;28985:9;:14;;:30;;;;;;:::i;:::-;;;;;;:::i;:::-;-1:-1:-1;29052:27:0;;;;;29022;;;:57;29111:22;;;;;29086;;;:47;29170:27;;;;;29140;;;:57;29229:22;;;;;29204;;;:47;29286:25;;;;;29258;;;:53;29346:25;;;;;29318;;;:53;29410:29;;;;;29378;;;:61;29472:23;;;;;29446;;;:49;29532:27;;;;;29502;;;;:57;;;;29582:13;;29566:29;;29582:13;;;;29566:29;;-1:-1:-1;;29566:29:0;;;;;;29627:22;;29582:13;29627:22;;;;;;29602:47;;;-1:-1:-1;;29602:47:0;;;-1:-1:-1;;29602:47:0;;;;;;;;;;;29680:21;;;;;;;;;29656:45;;;-1:-1:-1;;29656:45:0;;;;;;29733:22;;;;;;;;;;29708:47;;;;;-1:-1:-1;;29708:47:0;;;-1:-1:-1;;29708:47:0;;;;;;;;;;28761:1005;28747:3;;;;:::i;:::-;;;;28717:1058;;;;29783:6;:12;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;29783:12:0;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29804:3;:9;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;29804:9:0;;;;;-1:-1:-1;;29804:9:0;;;;;;-1:-1:-1;;;;28443:1379:0:o;26649:460::-;26717:41;26746:8;26755:2;26717:28;:41::i;:::-;26763:39;26790:8;26799:2;26763:26;:39::i;:::-;26807:51;26830:8;26839:2;26842:15;26807:22;:51::i;:::-;26863:34;26885:8;26894:2;26863:21;:34::i;:::-;26902:37;26927:8;26936:2;26902:24;:37::i;:::-;26948:30;26966:8;26975:2;26948:17;:30::i;:::-;26983:35;27006:8;27015:2;26983:22;:35::i;:::-;27023:37;27048:8;27057:2;27023:24;:37::i;:::-;27065:39;27092:8;27101:2;27065:26;:39::i;27226:980::-;27298:13;27314:15;27298:31;;27341:43;27363:11;27341:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27341:43:0;;;;;;;;;;;;;;;;;;;;;27375:8;27341:21;:43::i;:::-;:52;;27388:5;27341:52;27338:94;;27400:11;:26;;;;;;;-1:-1:-1;27400:26:0;;;;;;;;-1:-1:-1;;;;;;27400:26:0;-1:-1:-1;;;;;27400:26:0;;;;;27338:94;27463:4;;27507:9;;27438:22;;27487:30;;:15;;:19;:30::i;:::-;-1:-1:-1;;;;;27559:21:0;;27522:34;27559:21;;;:11;:21;;;;;27599:19;;27472:45;;-1:-1:-1;27559:21:0;27599:26;;27623:1;27599:23;:26::i;:::-;27649:325;;;;;;;;;;;27701:15;27649:325;;;;;;;27735:4;;27649:325;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27955:13;;27649:325;;;;27631:344;;;;;;;-1:-1:-1;27631:344:0;;;;;;;;;;27585:40;;-1:-1:-1;27649:325:0;;27631:344;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;27631:344:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28005:15:0;;-1:-1:-1;28005:15:0;;;;;;;;;28036:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;28025:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28025:89:0;;;;;;;;;-1:-1:-1;;28025:89:0;;;;;;-1:-1:-1;;28025:89:0;;;;;;;-1:-1:-1;;28025:89:0;;;;;;;;;;;;;;;;;;;;;;;28149:3;;28119:34;;28011:8;;28119:15;:34::i;:::-;28158:37;28173:8;28182:1;28184:10;:3;28182:1;28184:7;:10::i;:::-;28158:14;:37::i;:::-;27293:913;;;;;;27226:980;;:::o;6901:172::-;6965:7;6982:14;6990:2;6993;6982:7;:14::i;:::-;:20;;6998:4;6982:20;;:47;;;7006:15;7015:2;7018;7006:8;:15::i;:::-;:23;;7025:4;7006:23;6982:47;6979:74;;;-1:-1:-1;7044:2:0;7037:9;;6979:74;-1:-1:-1;7065:2:0;6901:172;-1:-1:-1;6901:172:0:o;38376:432::-;38486:14;;;38495:5;38486:14;38483:156;;-1:-1:-1;;;;;38507:21:0;;;;;;:11;:21;;;;;:25;;38549:13;;38507:21;38529:2;;38507:25;;;;;;:::i;:::-;;;;;;;;;;;:38;;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;38483:156:0;;-1:-1:-1;38483:156:0;;-1:-1:-1;;;;;38578:21:0;;;;;;:11;:21;;;;;:25;;38620:13;;38578:21;38600:2;;38578:25;;;;;;:::i;:::-;;;;;;;;;;;:38;;;:55;;;;;;;:::i;:::-;;;;-1:-1:-1;;38483:156:0;38643:35;38666:8;38675:2;38643:22;:35::i;:::-;38683:30;38701:8;38710:2;38683:17;:30::i;:::-;38718:37;38743:8;38752:2;38718:24;:37::i;:::-;38760:39;38787:8;38796:2;38760:26;:39::i;31420:546::-;31475:7;31488:11;31508;31528:14;31545:33;31567:8;31576:1;31545:21;:33::i;:::-;31528:50;;31587:33;31611:8;31587:23;:33::i;:::-;31633:6;31629:311;-1:-1:-1;;;;;49995:21:0;;49945:7;49995:21;;;:11;:21;;;;;50029:19;31644:1;:35;31629:311;;;31700:33;31722:8;31731:1;31700:21;:33::i;:::-;31694:39;;31752:6;31746:3;:12;:56;;;;-1:-1:-1;;;;;;31762:15:0;;;;;;:5;:15;;;;;:18;;31778:1;;31762:18;;;;;;:::i;:::-;;;;;;;;;;:32;;;;;;:40;;31798:4;31762:40;;31746:56;:99;;;;-1:-1:-1;;;;;;31806:15:0;;;;;;:5;:15;;;;;:18;;31822:1;;31806:18;;;;;;:::i;:::-;;;;;;;;;;:31;;;;;;:39;;31841:4;31806:39;;31746:99;31743:187;;;31863:1;31857:7;;31884:33;31906:8;31915:1;31884:21;:33::i;:::-;31875:42;;31743:187;31680:3;;;;:::i;:::-;;;;31629:311;;;-1:-1:-1;31955:3:0;;31420:546;-1:-1:-1;;;;31420:546:0:o;37409:590::-;37511:11;;;37518:4;37511:11;37508:487;;-1:-1:-1;;;;;37529:21:0;;;;;;:11;:21;;;;;:25;;37571:9;;37529:21;37551:2;;37529:25;;;;;;:::i;:::-;;;;;;;;;;;:39;;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;37628:9:0;;:24;;37642:9;37628:13;:24::i;:::-;-1:-1:-1;;;;;37586:21:0;;;;;;:11;:21;;;;;:25;;37608:2;;37586:25;;;;;;:::i;:::-;;;;;;;;;;;:38;;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;37658:19:0;;;;;;:9;:19;;;;;:28;;:41;;37690:9;;37658:19;:41;;37690:9;;37658:41;:::i;:::-;;;;-1:-1:-1;;37723:4:0;37705:24;;;;:9;:24;;;;;:33;;:46;;37742:9;;37705:24;:46;;37742:9;;37705:46;:::i;:::-;;;;-1:-1:-1;37508:487:0;;-1:-1:-1;37508:487:0;;-1:-1:-1;;;;;37767:21:0;;;;;;:11;:21;;;;;:25;;37809:9;;37767:21;37789:2;;37767:25;;;;;;:::i;:::-;;;;;;;;;;;:39;;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;37866:9:0;;:24;;37880:9;37866:13;:24::i;:::-;-1:-1:-1;;;;;37824:21:0;;;;;;:11;:21;;;;;:25;;37846:2;;37824:25;;;;;;:::i;:::-;;;;;;;;;;;:38;;;:66;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;37896:19:0;;;;;;:9;:19;;;;;:28;;:41;;37928:9;;37896:19;:41;;37928:9;;37896:41;:::i;:::-;;;;-1:-1:-1;;37961:4:0;37943:24;;;;:9;:24;;;;;:33;;:46;;37980:9;;37943:24;:46;;37980:9;;37943:46;:::i;:::-;;;;-1:-1:-1;;37409:590:0;;;;:::o;37028:378::-;-1:-1:-1;;;;;37120:19:0;;;;;;:9;:19;;;;;;:28;;;;;37101:4;37083:24;;;;;:33;:65;;37120:28;;37083:33;;:65;;37120:28;;37083:65;:::i;:::-;;;;-1:-1:-1;;37184:4:0;;-1:-1:-1;;;;;37153:19:0;;;;;;:9;:19;;;;;:28;;:35;;;;37193:139;-1:-1:-1;;;;;37208:19:0;;;;;;:9;:19;;;;;;;;:26;;37206:28;;37193:139;;;-1:-1:-1;;;;;37248:15:0;;;;;;:5;:15;;;;;:18;;37264:1;;37248:18;;;;;;:::i;:::-;;;;;;;;;;:23;;;:31;;:23;:31;37245:82;;-1:-1:-1;;;;;37287:19:0;;;;;;37319:1;37287:19;;;;;;;:28;;:33;;37319:1;;37287:28;;:33;;37319:1;;37287:33;:::i;:::-;;;;-1:-1:-1;;37245:82:0;37235:3;;;;:::i;:::-;;;;37193:139;;;-1:-1:-1;;;;;;37373:19:0;;;;;;:9;:19;;;;;;:28;;;;;37354:4;37336:24;;;;;:33;:65;;37373:28;;37336:33;;:65;;37373:28;;37336:65;:::i;:::-;;;;-1:-1:-1;;;37028:378:0:o;36638:387::-;-1:-1:-1;;;;;36738:19:0;;;;;;:9;:19;;;;;;:30;;;;;36717:4;36699:24;;;;;:35;:69;;36738:30;;36699:35;;:69;;36738:30;;36699:69;:::i;:::-;;;;-1:-1:-1;;36806:4:0;;-1:-1:-1;;;;;36773:19:0;;;;;;:9;:19;;;;;:30;;:37;;;;36815:132;-1:-1:-1;;;;;36830:19:0;;;;;;:9;:19;;;;;;;;:26;;36828:28;;36815:132;;;-1:-1:-1;;;;;36901:21:0;;;;;;:11;:21;;;;;:24;;36923:1;;36901:24;;;;;;:::i;:::-;;;;;;;;;;;:40;;;36867:9;:19;36877:8;-1:-1:-1;;;;;36867:19:0;-1:-1:-1;;;;;36867:19:0;;;;;;;;;;;;:30;;;:74;;;;;;;:::i;:::-;;;;-1:-1:-1;36857:3:0;;-1:-1:-1;36857:3:0;;;:::i;:::-;;;;36815:132;;;-1:-1:-1;;;;;;36990:19:0;;;;;;:9;:19;;;;;;:30;;;;;36969:4;36951:24;;;;;:35;:69;;36990:30;;36951:35;;:69;;36990:30;;36951:69;:::i;36232:403::-;-1:-1:-1;;;;;36336:19:0;;;;;;:9;:19;;;;;;:32;36313:4;36295:24;;;;;:73;;36336:32;;36295:24;;:73;;36336:32;;36295:73;:::i;:::-;;;;-1:-1:-1;;36408:4:0;;-1:-1:-1;;;;;36373:19:0;;;;;;:9;:19;;;;;:39;;;;36417:136;-1:-1:-1;;;;;36432:19:0;;;;;;:9;:19;;;;;;;;:26;;36430:28;;36417:136;;;-1:-1:-1;;;;;36505:21:0;;;;;;:11;:21;;;;;:24;;36527:1;;36505:24;;;;;;:::i;:::-;;;;;;;;;;;:42;;;36469:9;:19;36479:8;-1:-1:-1;;;;;36469:19:0;-1:-1:-1;;;;;36469:19:0;;;;;;;;;;;;:32;;;:78;;;;;;;:::i;:::-;;;;-1:-1:-1;36459:3:0;;-1:-1:-1;36459:3:0;;;:::i;:::-;;;;36417:136;;;-1:-1:-1;;;;;;36598:19:0;;;;;;:9;:19;;;;;;:32;36575:4;36557:24;;;;;:73;;36598:32;;36557:24;;:73;;36598:32;;36557:73;:::i;4335:308::-;4403:7;;;4451:10;;;:24;;;4471:4;4465:2;:10;4451:24;:35;;;;4484:2;4479;:7;4451:35;4447:70;;;4502:4;-1:-1:-1;4507:2:0;;-1:-1:-1;4494:16:0;;4447:70;4534:2;4522:9;4561:59;4572:2;4567:1;:7;4561:59;;4588:6;4592:2;4588:6;;:::i;:::-;;-1:-1:-1;4601:3:0;;;;:::i;:::-;;;;4561:59;;;4633:1;-1:-1:-1;4635:1:0;-1:-1:-1;;4335:308:0;;;;;;:::o;4647:154::-;4702:4;;4729:53;4735:7;;4729:53;;4755:10;:2;4762;4755:6;:10::i;:::-;4750:15;-1:-1:-1;4772:3:0;;;;:::i;:::-;;;;4729:53;;4805:280;4857:7;4871:6;4880:15;4892:2;4880:11;:15::i;:::-;4871:24;-1:-1:-1;4871:24:0;;4901:8;;4973:93;4979:6;;:19;;;;-1:-1:-1;4989:9:0;;;4979:19;4973:93;;;5006:11;5016:1;5006:11;;:::i;:::-;;-1:-1:-1;5029:18:0;5036:10;5006:11;5036:2;:10;:::i;:::-;5029:2;;:6;:18::i;:::-;5024:23;-1:-1:-1;5054:5:0;5058:1;5054:5;;:::i;:::-;;;4973:93;;;5078:1;4805:280;-1:-1:-1;;;;;;4805:280:0:o;1656:98::-;1714:7;1741:5;1745:1;1741;:5;:::i;38002:184::-;-1:-1:-1;;;;;38063:19:0;;;;;;38096:1;38063:19;;;;;;;:29;;:34;;38096:1;;38063:29;;:34;;38096:1;;38063:34;:::i;:::-;;;;-1:-1:-1;;38121:4:0;38103:24;;;;38141:1;38103:24;;;;;;;:34;;:39;;38141:1;;38103:34;;:39;;38141:1;;38103:39;:::i;:::-;;;;-1:-1:-1;38148:33:0;;-1:-1:-1;38164:8:0;38173:5;38179:1;38148:15;:33::i;32831:271::-;32915:7;;;;:15;;:7;:15;32912:186;;32985:8;;:39;;-1:-1:-1;;;32985:39:0;;-1:-1:-1;;;;;18561:32:1;;;32985:39:0;;;18543:51:1;18610:18;;;18603:34;;;32985:8:0;;;;:26;;18516:18:1;;32985:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;32937:21:0;;;;;;:11;:21;;;;;:25;;32959:2;;32937:25;;;;;;:::i;:::-;;;;;;;;;;;:45;;:87;;;;50128:304:::1;50081:351:::0;:::o;32912:186::-;33088:4;;-1:-1:-1;;;;;33040:21:0;;;;;;:11;:21;;;;;:25;;33062:2;;33040:25;;;;;;:::i;34676:225::-;34801:95;34842:53;34856:38;34882:8;34891:2;34856:25;:38::i;:::-;34842:9;;;:13;:53::i;:::-;34801:36;34825:8;34834:2;34801:23;:36::i;:::-;:40;;:95::i;:::-;-1:-1:-1;;;;;34755:21:0;;;;;;:11;:21;;;;;:25;;34777:2;;34755:25;;;;;;:::i;:::-;;;;;;;;;;;:43;;:141;;;;34676:225;;:::o;34054:224::-;34170:103;34234:38;34260:8;34269:2;34234:25;:38::i;:::-;34171:57;34191:36;34215:8;34224:2;34191:23;:36::i;:::-;34171:15;;:19;:57::i;34170:103::-;-1:-1:-1;;;;;34129:21:0;;;;;;:11;:21;;;;;:25;;34151:2;;34129:25;;;;;;:::i;:::-;;;;;;;;;;;:38;;:144;;;;34054:224;;:::o;34281:392::-;34357:12;34373:69;34410:31;34429:8;34438:2;34410:18;:31::i;:::-;34373:32;34393:8;34402:2;34373:19;:32::i;:69::-;34357:85;;34450:37;34466:4;34471:15;34450;:37::i;:::-;:43;;34489:4;34450:43;34447:148;;34530:11;;34503:25;:15;34523:4;34503:19;:25::i;:::-;:38;34500:90;;34549:34;34571:8;34580:2;34549:21;:34::i;:::-;34643:25;:4;34652:15;34643:8;:25::i;:::-;-1:-1:-1;;;;;34599:21:0;;;;;;:11;:21;;;;;:25;;34621:2;;34599:25;;;;;;:::i;:::-;;;;;;;;;;;:41;;:69;;;;34352:321;34281:392;;:::o;35098:229::-;35206:9;;35171:34;35193:8;35202:2;35171:21;:34::i;:::-;:44;35168:155;;;-1:-1:-1;;;;;35226:15:0;;;;;;:5;:15;;;;;:19;;35253:4;;35226:15;35242:2;;35226:19;;;;;;:::i;:::-;;;;;;;;;;:31;;-1:-1:-1;;35226:31:0;;;;;;;;;;-1:-1:-1;;50081:351:0:o;35168:155::-;-1:-1:-1;;;;;35281:15:0;;35308:5;35281:15;;;:5;:15;;;;;:19;;35297:2;;35281:19;;;;;;:::i;35330:401::-;35443:11;;35408:34;35430:8;35439:2;35408:21;:34::i;:::-;:46;35405:318;;;-1:-1:-1;;;;;35461:15:0;;;;;;:5;:15;;;;;:19;;35497:4;;35461:15;35477:2;;35461:19;;;;;;:::i;:::-;;;;;;;;;;:40;;;;;;;-1:-1:-1;;35461:40:0;;;;;;;;;50128:304:::1;50081:351:::0;:::o;35405:318::-;35550:11;;35515:34;35537:8;35546:2;35515:21;:34::i;:::-;:46;35512:211;;;-1:-1:-1;;;;;35568:15:0;;35604:5;35568:15;;;:5;:15;;;;;:19;;35584:2;;35568:19;;;;;;:::i;35512:211::-;35658:11;;35623:34;35645:8;35654:2;35623:21;:34::i;:::-;:46;35620:103;;;-1:-1:-1;;;;;35676:15:0;;35712:5;35676:15;;;:5;:15;;;;;:19;;35692:2;;35676:19;;;;;;:::i;34904:191::-;35025:65;35045:9;;35055:34;35077:8;35086:2;35055:21;:34::i;:::-;35025:19;:65::i;:::-;-1:-1:-1;;;;;34981:21:0;;;;;;:11;:21;;;;;:25;;35003:2;;34981:25;;;;;;:::i;:::-;;;;;;;;;;;:41;;:109;;;;34904:191;;:::o;33754:297::-;-1:-1:-1;;;;;34004:21:0;;;;;;:11;:21;;;;;:25;;33879:167;;34004:21;34026:2;;34004:25;;;;;;:::i;:::-;;;;;;;;;;;:41;;;33879:120;33899:9;;33909:89;33926:57;33967:15;33926:36;33950:8;33959:2;33926:23;:36::i;:57::-;33984:13;;33909:16;:89::i;33879:167::-;-1:-1:-1;;;;;33833:21:0;;;;;;:11;:21;;;;;:25;;33855:2;;33833:25;;;;;;:::i;:::-;;;;;;;;;;;:43;;:213;;;;33754:297;;:::o;1338:98::-;1396:7;1423:5;1427:1;1423;:5;:::i;35927:302::-;36014:12;;;36021:5;36014:12;36011:214;;-1:-1:-1;;;;;36033:19:0;;;;;;:9;:19;;;;;;;:26;:37;;36063:7;;36033:19;:37;;36063:7;;36033:37;:::i;:::-;;;;-1:-1:-1;;36094:4:0;36076:24;;;;:9;:24;;;;;;;:31;:42;;36111:7;;36076:24;:42;;36111:7;;36076:42;:::i;:::-;;;;-1:-1:-1;36011:214:0;;-1:-1:-1;36011:214:0;;-1:-1:-1;;;;;36134:19:0;;;;;;:9;:19;;;;;;;:26;:37;;36164:7;;36134:19;:37;;36164:7;;36134:37;:::i;:::-;;;;-1:-1:-1;;36195:4:0;36177:24;;;;:9;:24;;;;;;;:31;:42;;36212:7;;36177:24;:42;;36212:7;;36177:42;:::i;:::-;;;;-1:-1:-1;;35927:302:0;;;:::o;6550:173::-;6612:4;6626:14;6634:2;6637;6626:7;:14::i;:::-;:21;;;:48;;;6651:15;6660:2;6663;6651:8;:15::i;:::-;:23;6626:48;6623:77;;;-1:-1:-1;6689:4:0;6682:11;;6623:77;-1:-1:-1;6712:5:0;6550:173;;;;:::o;6415:131::-;6478:4;6495:2;6492;:5;6489:34;;;-1:-1:-1;6512:4:0;6505:11;;40096:148;-1:-1:-1;;;;;40198:21:0;;40178:7;40198:21;;;:11;:21;;;;;:25;;40220:2;;40198:25;;;;;;:::i;:::-;;;;;;;;;;;:41;;;40191:48;;40096:148;;;;:::o;6281:130::-;6343:4;6360:2;6357;:5;6354:34;;;-1:-1:-1;6377:4:0;6370:11;;38811:183;-1:-1:-1;;;;;38886:15:0;;;;;;:5;:15;;;;;:19;;38921:4;;38886:15;38902:2;;38886:19;;;;;;:::i;:::-;;;;;;;;;;:39;;;;;;;-1:-1:-1;;38886:39:0;;;;;;;;;38931:27;38949:8;38931:17;:27::i;:::-;38964:24;38976:8;38985:2;38964:11;:24::i;6727:170::-;6790:7;6807:14;6815:2;6818;6807:7;:14::i;:::-;:20;;6823:4;6807:20;;:46;;;6831:14;6839:2;6842;6831:7;:14::i;38189:184::-;-1:-1:-1;;;;;38248:19:0;;;;;;38281:1;38248:19;;;;;;;:29;;:34;;38281:1;;38248:29;;:34;;38281:1;;38248:34;:::i;:::-;;;;-1:-1:-1;;38305:4:0;38287:24;;;;38325:1;38287:24;;;;;;;:34;;:39;;38325:1;;38287:34;;:39;;38325:1;;38287:39;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:1:o;470:383::-;547:6;555;563;616:2;604:9;595:7;591:23;587:32;584:52;;;632:1;629;622:12;584:52;671:9;658:23;690:31;715:5;690:31;:::i;:::-;740:5;792:2;777:18;;764:32;;-1:-1:-1;843:2:1;828:18;;;815:32;;470:383;-1:-1:-1;;;470:383:1:o;1050:118::-;1136:5;1129:13;1122:21;1115:5;1112:32;1102:60;;1158:1;1155;1148:12;1173:241;1229:6;1282:2;1270:9;1261:7;1257:23;1253:32;1250:52;;;1298:1;1295;1288:12;1250:52;1337:9;1324:23;1356:28;1378:5;1356:28;:::i;1419:247::-;1478:6;1531:2;1519:9;1510:7;1506:23;1502:32;1499:52;;;1547:1;1544;1537:12;1499:52;1586:9;1573:23;1605:31;1630:5;1605:31;:::i;2289:180::-;2348:6;2401:2;2389:9;2380:7;2376:23;2372:32;2369:52;;;2417:1;2414;2407:12;2369:52;-1:-1:-1;2440:23:1;;2289:180;-1:-1:-1;2289:180:1:o;2925:450::-;2999:6;3007;3015;3068:2;3056:9;3047:7;3043:23;3039:32;3036:52;;;3084:1;3081;3074:12;3036:52;3123:9;3110:23;3142:31;3167:5;3142:31;:::i;:::-;3192:5;-1:-1:-1;3244:2:1;3229:18;;3216:32;;-1:-1:-1;3300:2:1;3285:18;;3272:32;3313:30;3272:32;3313:30;:::i;:::-;3362:7;3352:17;;;2925:450;;;;;:::o;4405:456::-;4482:6;4490;4498;4551:2;4539:9;4530:7;4526:23;4522:32;4519:52;;;4567:1;4564;4557:12;4519:52;4606:9;4593:23;4625:31;4650:5;4625:31;:::i;:::-;4675:5;-1:-1:-1;4732:2:1;4717:18;;4704:32;4745:33;4704:32;4745:33;:::i;:::-;4405:456;;4797:7;;-1:-1:-1;;;4851:2:1;4836:18;;;;4823:32;;4405:456::o;4866:396::-;4942:6;4950;5003:2;4991:9;4982:7;4978:23;4974:32;4971:52;;;5019:1;5016;5009:12;4971:52;5058:9;5045:23;5077:31;5102:5;5077:31;:::i;:::-;5127:5;-1:-1:-1;5184:2:1;5169:18;;5156:32;5197:33;5156:32;5197:33;:::i;:::-;5249:7;5239:17;;;4866:396;;;;;:::o;5267:472::-;5309:3;5347:5;5341:12;5374:6;5369:3;5362:19;5399:1;5409:162;5423:6;5420:1;5417:13;5409:162;;;5485:4;5541:13;;;5537:22;;5531:29;5513:11;;;5509:20;;5502:59;5438:12;5409:162;;;5589:6;5586:1;5583:13;5580:87;;;5655:1;5648:4;5639:6;5634:3;5630:16;5626:27;5619:38;5580:87;-1:-1:-1;5721:2:1;5700:15;-1:-1:-1;;5696:29:1;5687:39;;;;5728:4;5683:50;;5267:472;-1:-1:-1;;5267:472:1:o;5744:961::-;6137:4;6166:3;6196:2;6185:9;6178:21;6216:45;6257:2;6246:9;6242:18;6234:6;6216:45;:::i;:::-;6292:2;6277:18;;6270:34;;;;-1:-1:-1;;6335:2:1;6320:18;;6313:34;;;;6378:2;6363:18;;6356:34;;;;6421:3;6406:19;;6399:35;;;;6465:3;6450:19;;6443:35;;;;6509:3;6494:19;;6487:35;;;;6553:3;6538:19;;6531:35;6597:3;6582:19;;6575:35;6641:3;6626:19;;6619:35;6685:3;6670:19;;;6663:36;6208:53;5744:961;-1:-1:-1;5744:961:1:o;6935:452::-;7021:6;7029;7037;7045;7098:3;7086:9;7077:7;7073:23;7069:33;7066:53;;;7115:1;7112;7105:12;7066:53;7154:9;7141:23;7173:31;7198:5;7173:31;:::i;:::-;7223:5;7275:2;7260:18;;7247:32;;-1:-1:-1;7326:2:1;7311:18;;7298:32;;7377:2;7362:18;7349:32;;-1:-1:-1;6935:452:1;-1:-1:-1;;;6935:452:1:o;8148:887::-;8512:4;8541:3;8571:2;8560:9;8553:21;8591:45;8632:2;8621:9;8617:18;8609:6;8591:45;:::i;:::-;8667:2;8652:18;;8645:34;;;;-1:-1:-1;;8710:2:1;8695:18;;8688:34;;;;8753:2;8738:18;;8731:34;;;;8796:3;8781:19;;8774:35;;;;8840:3;8825:19;;8818:35;;;;8884:3;8869:19;;8862:35;8928:3;8913:19;;8906:35;8972:3;8957:19;;8950:35;9016:3;9001:19;;;8994:35;8583:53;8148:887;-1:-1:-1;8148:887:1:o;9040:127::-;9101:10;9096:3;9092:20;9089:1;9082:31;9132:4;9129:1;9122:15;9156:4;9153:1;9146:15;9172:719;9215:5;9268:3;9261:4;9253:6;9249:17;9245:27;9235:55;;9286:1;9283;9276:12;9235:55;9322:6;9309:20;9348:18;9385:2;9381;9378:10;9375:36;;;9391:18;;:::i;:::-;9466:2;9460:9;9434:2;9520:13;;-1:-1:-1;;9516:22:1;;;9540:2;9512:31;9508:40;9496:53;;;9564:18;;;9584:22;;;9561:46;9558:72;;;9610:18;;:::i;:::-;9650:10;9646:2;9639:22;9685:2;9677:6;9670:18;9731:3;9724:4;9719:2;9711:6;9707:15;9703:26;9700:35;9697:55;;;9748:1;9745;9738:12;9697:55;9812:2;9805:4;9797:6;9793:17;9786:4;9778:6;9774:17;9761:54;9859:1;9852:4;9847:2;9839:6;9835:15;9831:26;9824:37;9879:6;9870:15;;;;;;9172:719;;;;:::o;9896:525::-;9983:6;9991;9999;10052:2;10040:9;10031:7;10027:23;10023:32;10020:52;;;10068:1;10065;10058:12;10020:52;10107:9;10094:23;10126:31;10151:5;10126:31;:::i;:::-;10176:5;-1:-1:-1;10228:2:1;10213:18;;10200:32;;-1:-1:-1;10283:2:1;10268:18;;10255:32;10310:18;10299:30;;10296:50;;;10342:1;10339;10332:12;10296:50;10365;10407:7;10398:6;10387:9;10383:22;10365:50;:::i;:::-;10355:60;;;9896:525;;;;;:::o;10426:220::-;10575:2;10564:9;10557:21;10538:4;10595:45;10636:2;10625:9;10621:18;10613:6;10595:45;:::i;10651:457::-;10729:6;10737;10790:2;10778:9;10769:7;10765:23;10761:32;10758:52;;;10806:1;10803;10796:12;10758:52;10845:9;10832:23;10864:31;10889:5;10864:31;:::i;:::-;10914:5;-1:-1:-1;10970:2:1;10955:18;;10942:32;10997:18;10986:30;;10983:50;;;11029:1;11026;11019:12;10983:50;11052;11094:7;11085:6;11074:9;11070:22;11052:50;:::i;:::-;11042:60;;;10651:457;;;;;:::o;11113:335::-;11315:2;11297:21;;;11354:2;11334:18;;;11327:30;-1:-1:-1;;;11388:2:1;11373:18;;11366:41;11439:2;11424:18;;11113:335::o;11453:127::-;11514:10;11509:3;11505:20;11502:1;11495:31;11545:4;11542:1;11535:15;11569:4;11566:1;11559:15;11585:356;11787:2;11769:21;;;11806:18;;;11799:30;11865:34;11860:2;11845:18;;11838:62;11932:2;11917:18;;11585:356::o;11946:127::-;12007:10;12002:3;11998:20;11995:1;11988:31;12038:4;12035:1;12028:15;12062:4;12059:1;12052:15;12078:135;12117:3;12138:17;;;12135:43;;12158:18;;:::i;:::-;-1:-1:-1;12205:1:1;12194:13;;12078:135::o;12218:332::-;12420:2;12402:21;;;12459:1;12439:18;;;12432:29;-1:-1:-1;;;12492:2:1;12477:18;;12470:39;12541:2;12526:18;;12218:332::o;12555:127::-;12616:10;12611:3;12607:20;12604:1;12597:31;12647:4;12644:1;12637:15;12671:4;12668:1;12661:15;12687:375;-1:-1:-1;;;;;12945:15:1;;;12927:34;;12997:15;;;;12992:2;12977:18;;12970:43;13044:2;13029:18;;13022:34;;;;12877:2;12862:18;;12687:375::o;13067:245::-;13134:6;13187:2;13175:9;13166:7;13162:23;13158:32;13155:52;;;13203:1;13200;13193:12;13155:52;13235:9;13229:16;13254:28;13276:5;13254:28;:::i;13317:184::-;13387:6;13440:2;13428:9;13419:7;13415:23;13411:32;13408:52;;;13456:1;13453;13446:12;13408:52;-1:-1:-1;13479:16:1;;13317:184;-1:-1:-1;13317:184:1:o;13894:380::-;13973:1;13969:12;;;;14016;;;14037:61;;14091:4;14083:6;14079:17;14069:27;;14037:61;14144:2;14136:6;14133:14;14113:18;14110:38;14107:161;;14190:10;14185:3;14181:20;14178:1;14171:31;14225:4;14222:1;14215:15;14253:4;14250:1;14243:15;15099:128;15139:3;15170:1;15166:6;15163:1;15160:13;15157:39;;;15176:18;;:::i;:::-;-1:-1:-1;15212:9:1;;15099:128::o;15232:168::-;15272:7;15338:1;15334;15330:6;15326:14;15323:1;15320:21;15315:1;15308:9;15301:17;15297:45;15294:71;;;15345:18;;:::i;:::-;-1:-1:-1;15385:9:1;;15232:168::o;15405:125::-;15445:4;15473:1;15470;15467:8;15464:34;;;15478:18;;:::i;:::-;-1:-1:-1;15515:9:1;;15405:125::o;15535:422::-;15624:1;15667:5;15624:1;15681:270;15702:7;15692:8;15689:21;15681:270;;;15761:4;15757:1;15753:6;15749:17;15743:4;15740:27;15737:53;;;15770:18;;:::i;:::-;15820:7;15810:8;15806:22;15803:55;;;15840:16;;;;15803:55;15919:22;;;;15879:15;;;;15681:270;;;15685:3;15535:422;;;;;:::o;15962:806::-;16011:5;16041:8;16031:80;;-1:-1:-1;16082:1:1;16096:5;;16031:80;16130:4;16120:76;;-1:-1:-1;16167:1:1;16181:5;;16120:76;16212:4;16230:1;16225:59;;;;16298:1;16293:130;;;;16205:218;;16225:59;16255:1;16246:10;;16269:5;;;16293:130;16330:3;16320:8;16317:17;16314:43;;;16337:18;;:::i;:::-;-1:-1:-1;;16393:1:1;16379:16;;16408:5;;16205:218;;16507:2;16497:8;16494:16;16488:3;16482:4;16479:13;16475:36;16469:2;16459:8;16456:16;16451:2;16445:4;16442:12;16438:35;16435:77;16432:159;;;-1:-1:-1;16544:19:1;;;16576:5;;16432:159;16623:34;16648:8;16642:4;16623:34;:::i;:::-;16693:6;16689:1;16685:6;16681:19;16672:7;16669:32;16666:58;;;16704:18;;:::i;:::-;16742:20;;15962:806;-1:-1:-1;;;15962:806:1:o;16773:131::-;16833:5;16862:36;16889:8;16883:4;16862:36;:::i;17038:1104::-;17168:3;17197:1;17230:6;17224:13;17260:3;17282:1;17310:9;17306:2;17302:18;17292:28;;17370:2;17359:9;17355:18;17392;17382:61;;17436:4;17428:6;17424:17;17414:27;;17382:61;17462:2;17510;17502:6;17499:14;17479:18;17476:38;17473:165;;-1:-1:-1;;;17537:33:1;;17593:4;17590:1;17583:15;17623:4;17544:3;17611:17;17473:165;17654:18;17681:104;;;;17799:1;17794:323;;;;17647:470;;17681:104;-1:-1:-1;;17714:24:1;;17702:37;;17759:16;;;;-1:-1:-1;17681:104:1;;17794:323;16985:1;16978:14;;;17022:4;17009:18;;17892:1;17906:165;17920:6;17917:1;17914:13;17906:165;;;17998:14;;17985:11;;;17978:35;18041:16;;;;17935:10;;17906:165;;;17910:3;;18100:6;18095:3;18091:16;18084:23;;17647:470;-1:-1:-1;18133:3:1;;17038:1104;-1:-1:-1;;;;;;;;17038:1104:1:o;18147:217::-;18187:1;18213;18203:132;;18257:10;18252:3;18248:20;18245:1;18238:31;18292:4;18289:1;18282:15;18320:4;18317:1;18310:15;18203:132;-1:-1:-1;18349:9:1;;18147:217::o

Swarm Source

ipfs://63bcca3885691b2300112b31747e6a2fa4541b97d694847dc520c767d180ae1c
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.