Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Website Down
Overview
Max Total Supply
100,000,000,000,000,000 GDS
Holders
82 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
567,150,132,524.061164678 GDSValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
Token
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-04 */ // SPDX-License-Identifier: MIT /* ██████╗ ██████╗ ██╗ ██████╗ ██████╗ ██████╗ ██████╗ ███████╗ ███████╗ █████╗ ██████╗██╗ ██╗███████╗ ██╔════╝ ██╔═══██╗██║ ██╔══██╗██╔══██╗██╔═══██╗██╔════╝ ██╔════╝ ██╔════╝██╔══██╗██╔════╝██║ ██║██╔════╝ ██║ ███╗██║ ██║██║ ██║ ██║██║ ██║██║ ██║██║ ███╗█████╗ ███████╗███████║██║ ███████║███████╗ ██║ ██║██║ ██║██║ ██║ ██║██║ ██║██║ ██║██║ ██║██╔══╝ ╚════██║██╔══██║██║ ██╔══██║╚════██║ ╚██████╔╝╚██████╔╝███████╗██████╔╝██████╔╝╚██████╔╝╚██████╔╝███████╗ ███████║██║ ██║╚██████╗██║ ██║███████║ ╚═════╝ ╚═════╝ ╚══════╝╚═════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚══════╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝╚═╝ ╚═╝╚══════╝ 633% APY on a safe investment in the Crypto market with our leveraged portfolio? Invest your money with Golddoge Sachs and enjoy steady returns with a completely new, unique concept. Telegram: https://t.me/golddogesachs Website : https://golddogesachs.com CEO is @mobydick_BSC */ pragma solidity 0.8.9; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ 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); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ 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); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract Token is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); address public safuDevAddress; bool private swapping; address public marketingWallet; address public maintenanceWallet; address public portfolioWallet; uint256 public maxTransactionAmount; uint256 public maxWallet; uint8 private _decimals; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; uint256 public tradingActiveBlock; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyMaintenanceFee; uint256 public buyPortfolioFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellMaintenanceFee; uint256 public sellPortfolioFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForMaintenance; uint256 public tokensForPortfolio; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event maintenanceWalletUpdated(address indexed newWallet, address indexed oldWallet); event portfolioWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event PortfolioTriggered(uint256 amount); event OwnerForcedSwapBack(uint256 timestamp); modifier isAuth() { // both owner and safuDevAddress are authorized to make changes require(owner() == _msgSender() || _msgSender() == safuDevAddress, "Ownable: caller is not the owner"); _; } constructor() ERC20("Golddoge Sachs", "GDS") { address _owner = 0xD6f2F744439b11211196A9BE6FA621487D1047C8; safuDevAddress = _msgSender(); _decimals = 9; uint256 totalSupply = 1 * 1e17 * (10**_decimals); maxTransactionAmount = totalSupply * 2 / 100; // 2% maxTransactionAmountTxn maxWallet = totalSupply * 5 / 100; // 5% maxWallet buyMarketingFee = 3; buyLiquidityFee = 0; buyMaintenanceFee = 2; buyPortfolioFee = 10; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyMaintenanceFee + buyPortfolioFee; sellMarketingFee = 3; sellLiquidityFee = 0; sellMaintenanceFee = 2; sellPortfolioFee = 10; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellMaintenanceFee + sellPortfolioFee; marketingWallet = address(0x5d7854BD0DD8F91369eCD65B8f1159EFEa87E247); // set as marketing wallet maintenanceWallet = address(0xaabb008CD7F0036DbDA64836FF908b5c74D4e7e4); // set as maintenance wallet portfolioWallet = address(0x8FD8a31356afB964D764b1df3566efF278e638F1); // set as portfolioWallet address currentRouter; //Adding Variables for all the routers for easier deployment for our customers. if (block.chainid == 56) { currentRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // PCS Router } else if (block.chainid == 97) { currentRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // PCS Testnet } else if (block.chainid == 43114) { currentRouter = 0x60aE616a2155Ee3d9A68541Ba4544862310933d4; //Avax Mainnet } else if (block.chainid == 137) { currentRouter = 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff; //Polygon Ropsten } else if (block.chainid == 250) { currentRouter = 0xF491e7B69E4244ad4002BC14e878a34207E38c29; //SpookySwap FTM } else if (block.chainid == 3) { currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //Ropsten } else if (block.chainid == 1 || block.chainid == 4) { currentRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; //Mainnet } else { revert(); } //End of Router Variables. IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(currentRouter); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); // exclude from paying fees or having max transaction amount excludeFromFees(_owner, true); excludeFromFees(safuDevAddress, true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(_owner, true); excludeFromMaxTransaction(safuDevAddress, true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(_owner, totalSupply); transferOwnership(_owner); } receive() external payable { } // Safu dev will renounce ownership of the token after 30 days function renounceSafuDev () external { require(msg.sender == safuDevAddress, "Only safuDev can renounce"); safuDevAddress = address(0xdead); } // once enabled, can never be turned off function enableTrading() external isAuth { tradingActive = true; swapEnabled = true; tradingActiveBlock = block.number; } // remove limits after token is stable function removeLimits() external isAuth returns (bool){ limitsInEffect = false; return true; } function airdropToWallets(address[] memory airdropWallets, uint256[] memory amounts) external isAuth returns (bool){ require(!tradingActive, "Trading is already active, cannot airdrop after launch."); require(airdropWallets.length == amounts.length, "arrays must be the same length"); require(airdropWallets.length < 200, "Can only airdrop 200 wallets per txn due to gas limits"); // allows for airdrop + launch at the same exact time, reducing delays and reducing sniper input. for(uint256 i = 0; i < airdropWallets.length; i++){ address wallet = airdropWallets[i]; uint256 amount = amounts[i]; _transfer(msg.sender, wallet, amount); } return true; } function updateMaxAmount(uint256 newNum) external isAuth { require(newNum >= (totalSupply() * 1 / 100)/(10**_decimals), "Cannot set maxTransactionAmount lower than 1%"); maxTransactionAmount = newNum * (10**_decimals); } function updateMaxWallet(uint256 newNum) external isAuth { require(newNum >= (totalSupply() * 1 / 100)/(10**_decimals), "Cannot set maxTransactionAmount lower than 1%"); maxWallet= newNum * (10**_decimals); } function excludeFromMaxTransaction(address updAds, bool isEx) public isAuth { _isExcludedMaxTransactionAmount[updAds] = isEx; } function decimals() public view override returns (uint8) { return _decimals; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external isAuth(){ swapEnabled = enabled; } function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _maintenanceFee, uint256 _portfolioFee) external isAuth { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyMaintenanceFee = _maintenanceFee; buyPortfolioFee = _portfolioFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyMaintenanceFee + buyPortfolioFee; require(buyTotalFees <= 25, "Must keep fees at 25% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _maintenanceFee, uint256 _portfolioFee) external isAuth { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellMaintenanceFee = _maintenanceFee; sellPortfolioFee = _portfolioFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellMaintenanceFee + sellPortfolioFee; require(sellTotalFees <= 25, "Must keep fees at 25% or less"); } function excludeFromFees(address account, bool excluded) public isAuth { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) external isAuth { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateMaintenanceWallet(address newWallet) external onlyOwner { emit maintenanceWalletUpdated(newWallet, maintenanceWallet); maintenanceWallet = newWallet; } function updatePortfolioWallet(address newWallet) external onlyOwner { emit portfolioWalletUpdated(newWallet, portfolioWallet); portfolioWallet = newWallet; } function isExcludedFromFees(address account) external view returns(bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !(_isExcludedFromFees[from] || _isExcludedFromFees[to]) && !swapping ){ //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else { require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance > 0; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ if(tradingActiveBlock == block.number && (automatedMarketMakerPairs[to] || automatedMarketMakerPairs[from])){ fees = amount.mul(99).div(100); tokensForLiquidity += fees * 33 / 99; tokensForPortfolio += fees * 33 / 99; tokensForMarketing += fees * 33 / 99; } // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForMaintenance += fees * sellMaintenanceFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; tokensForPortfolio += fees * sellPortfolioFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForMaintenance += fees * buyMaintenanceFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; tokensForPortfolio += fees * buyPortfolioFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForMaintenance + tokensForPortfolio; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForMaintenance = ethBalance.mul(tokensForMaintenance).div(totalTokensToSwap); uint256 ethForPortfolio = ethBalance.mul(tokensForPortfolio).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForMaintenance - ethForPortfolio; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForMaintenance = 0; tokensForPortfolio = 0; (success,) = address(maintenanceWallet).call{value: ethForMaintenance}(""); (success,) = address(portfolioWallet).call{value: ethForPortfolio}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PortfolioTriggered","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"maintenanceWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"portfolioWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropToWallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMaintenanceFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyPortfolioFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maintenanceWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"portfolioWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceSafuDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"safuDevAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMaintenanceFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellPortfolioFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMaintenance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForPortfolio","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_maintenanceFee","type":"uint256"},{"internalType":"uint256","name":"_portfolioFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMaintenanceWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updatePortfolioWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_maintenanceFee","type":"uint256"},{"internalType":"uint256","name":"_portfolioFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526001600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff0219169083151502179055506000600c60036101000a81548160ff0219169083151502179055503480156200006257600080fd5b506040518060400160405280600e81526020017f476f6c64646f67652053616368730000000000000000000000000000000000008152506040518060400160405280600381526020017f47445300000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e79291906200108a565b508060049080519060200190620001009291906200108a565b505050600062000115620008d760201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600073d6f2f744439b11211196a9be6fa621487d1047c89050620001dd620008d760201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600c60006101000a81548160ff021916908360ff1602179055506000600c60009054906101000a900460ff16600a620002599190620012d4565b67016345785d8a00006200026e919062001325565b9050606460028262000281919062001325565b6200028d9190620013b5565b600a819055506064600582620002a4919062001325565b620002b09190620013b5565b600b819055506003600f8190555060006010819055506002601181905550600a601281905550601254601154601054600f54620002ee9190620013ed565b620002fa9190620013ed565b620003069190620013ed565b600e81905550600360148190555060006015819055506002601681905550600a601781905550601754601654601554601454620003449190620013ed565b620003509190620013ed565b6200035c9190620013ed565b601381905550735d7854bd0dd8f91369ecd65b8f1159efea87e247600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073aabb008cd7f0036dbda64836ff908b5c74d4e7e4600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738fd8a31356afb964d764b1df3566eff278e638f1600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060384614156200048a577310ed43c718714eb63d5aa57b78b54704e256024e90506200058c565b6061461415620004b15773d99d1c33f9fc3444f8101754abc46c52416550d190506200058b565b61a86a461415620004d9577360ae616a2155ee3d9a68541ba4544862310933d490506200058a565b6089461415620005005773a5e0829caced8ffdd4de3c43696c57f7d7a678ff905062000589565b60fa461415620005275773f491e7b69e4244ad4002bc14e878a34207e38c29905062000588565b60034614156200054e57737a250d5630b4cf539739df2c5dacb4c659f2488d905062000587565b60014614806200055e5750600446145b156200058157737a250d5630b4cf539739df2c5dacb4c659f2488d905062000586565b600080fd5b5b5b5b5b5b5b6000819050620005a4816001620008df60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200061f57600080fd5b505afa15801562000634573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200065a9190620014b4565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620006bd57600080fd5b505afa158015620006d2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006f89190620014b4565b6040518363ffffffff1660e01b815260040162000717929190620014f7565b602060405180830381600087803b1580156200073257600080fd5b505af115801562000747573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200076d9190620014b4565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620007b560a0516001620008df60201b60201c565b620007ca60a051600162000a3160201b60201c565b620007dd84600162000ad260201b60201c565b62000812600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600162000ad260201b60201c565b6200082530600162000ad260201b60201c565b6200083a61dead600162000ad260201b60201c565b6200084d846001620008df60201b60201c565b62000882600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008df60201b60201c565b62000895306001620008df60201b60201c565b620008aa61dead6001620008df60201b60201c565b620008bc848462000c7460201b60201c565b620008cd8462000e2360201b60201c565b50505050620017f0565b600033905090565b620008ef620008d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200091562000ff860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161480620009945750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166200097c620008d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16145b620009d6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009cd9062001585565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b62000ae2620008d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000b0862000ff860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16148062000b875750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1662000b6f620008d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16145b62000bc9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bc09062001585565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000c689190620015c4565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000ce7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cde9062001631565b60405180910390fd5b62000cfb600083836200102260201b60201c565b62000d17816002546200102760201b62002c571790919060201c565b60028190555062000d75816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200102760201b62002c571790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000e17919062001664565b60405180910390a35050565b62000e33620008d760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000ec5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ebc9062001585565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000f38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f2f90620016f7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b6000808284620010389190620013ed565b90508381101562001080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010779062001769565b60405180910390fd5b8091505092915050565b8280546200109890620017ba565b90600052602060002090601f016020900481019282620010bc576000855562001108565b82601f10620010d757805160ff191683800117855562001108565b8280016001018555821562001108579182015b8281111562001107578251825591602001919060010190620010ea565b5b5090506200111791906200111b565b5090565b5b80821115620011365760008160009055506001016200111c565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620011c857808604811115620011a0576200119f6200113a565b5b6001851615620011b05780820291505b8081029050620011c08562001169565b945062001180565b94509492505050565b600082620011e35760019050620012b6565b81620011f35760009050620012b6565b81600181146200120c576002811462001217576200124d565b6001915050620012b6565b60ff8411156200122c576200122b6200113a565b5b8360020a9150848211156200124657620012456200113a565b5b50620012b6565b5060208310610133831016604e8410600b8410161715620012875782820a9050838111156200128157620012806200113a565b5b620012b6565b62001296848484600162001176565b92509050818404811115620012b057620012af6200113a565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620012e182620012bd565b9150620012ee83620012c7565b92506200131d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620011d1565b905092915050565b60006200133282620012bd565b91506200133f83620012bd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156200137b576200137a6200113a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620013c282620012bd565b9150620013cf83620012bd565b925082620013e257620013e162001386565b5b828204905092915050565b6000620013fa82620012bd565b91506200140783620012bd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200143f576200143e6200113a565b5b828201905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200147c826200144f565b9050919050565b6200148e816200146f565b81146200149a57600080fd5b50565b600081519050620014ae8162001483565b92915050565b600060208284031215620014cd57620014cc6200144a565b5b6000620014dd848285016200149d565b91505092915050565b620014f1816200146f565b82525050565b60006040820190506200150e6000830185620014e6565b6200151d6020830184620014e6565b9392505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200156d60208362001524565b91506200157a8262001535565b602082019050919050565b60006020820190508181036000830152620015a0816200155e565b9050919050565b60008115159050919050565b620015be81620015a7565b82525050565b6000602082019050620015db6000830184620015b3565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001619601f8362001524565b91506200162682620015e1565b602082019050919050565b600060208201905081810360008301526200164c816200160a565b9050919050565b6200165e81620012bd565b82525050565b60006020820190506200167b600083018462001653565b92915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000620016df60268362001524565b9150620016ec8262001681565b604082019050919050565b600060208201905081810360008301526200171281620016d0565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001751601b8362001524565b91506200175e8262001719565b602082019050919050565b60006020820190508181036000830152620017848162001742565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620017d357607f821691505b60208210811415620017ea57620017e96200178b565b5b50919050565b60805160a051615fce62001840600039600081816119e701526122750152600081816110820152818161446b0152818161455b015281816145820152818161461e01526146450152615fce6000f3fe6080604052600436106103905760003560e01c8063751039fc116101dc578063b8b324bc11610102578063e6fb2eb0116100a0578063f2fde38b1161006f578063f2fde38b14610d4d578063f403d59914610d76578063f637434214610da1578063f8b45b0514610dcc57610397565b8063e6fb2eb014610ca3578063e7ad9fcd14610cce578063ee40166e14610cf7578063f11a24d314610d2257610397565b8063c8c8ebe4116100dc578063c8c8ebe414610be5578063d85ba06314610c10578063da12c12d14610c3b578063dd62ed3e14610c6657610397565b8063b8b324bc14610b68578063bbc0c74214610b91578063c024666814610bbc57610397565b8063921369131161017a578063a457c2d711610149578063a457c2d714610a88578063a9059cbb14610ac5578063aacebbe314610b02578063b62496f514610b2b57610397565b806392136913146109e0578063924de9b714610a0b57806395d89b4114610a345780639a7a23d614610a5f57610397565b80637bce5a04116101b65780637bce5a04146109485780638a64c030146109735780638a8c523c1461099e5780638da5cb5b146109b557610397565b8063751039fc146108c95780637571336a146108f457806375f0a8741461091d57610397565b8063313ce567116102c15780634fbee1931161025f5780636ddd17131161022e5780636ddd17131461081f5780637072152c1461084a57806370a0823114610875578063715018a6146108b257610397565b80634fbee19314610761578063540c53231461079e578063610a6460146107c95780636a486a8e146107f457610397565b8063395093511161029b57806339509351146106a55780633ec45bc6146106e257806349bd5a5e1461070b5780634a62bb651461073657610397565b8063313ce56714610638578063351b20e81461066357806335c5b3711461067a57610397565b80631a8145bb1161032e5780632307b441116103085780632307b4411461056a57806323b872dd146105a757806327c8f835146105e45780632e6ed7ef1461060f57610397565b80631a8145bb146104eb5780631c499ab0146105165780631f3fed8f1461053f57610397565b8063106b5da11161036a578063106b5da11461042f57806310d5de53146104585780631694505e1461049557806318160ddd146104c057610397565b8063057c09db1461039c57806306fdde03146103c7578063095ea7b3146103f257610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610df7565b6040516103be91906147a7565b60405180910390f35b3480156103d357600080fd5b506103dc610e1d565b6040516103e9919061485b565b60405180910390f35b3480156103fe57600080fd5b50610419600480360381019061041491906148f3565b610eaf565b604051610426919061494e565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190614969565b610ecd565b005b34801561046457600080fd5b5061047f600480360381019061047a9190614996565b611060565b60405161048c919061494e565b60405180910390f35b3480156104a157600080fd5b506104aa611080565b6040516104b79190614a22565b60405180910390f35b3480156104cc57600080fd5b506104d56110a4565b6040516104e29190614a4c565b60405180910390f35b3480156104f757600080fd5b506105006110ae565b60405161050d9190614a4c565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190614969565b6110b4565b005b34801561054b57600080fd5b50610554611247565b6040516105619190614a4c565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190614c72565b61124d565b60405161059e919061494e565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c99190614cea565b611477565b6040516105db919061494e565b60405180910390f35b3480156105f057600080fd5b506105f9611550565b60405161060691906147a7565b60405180910390f35b34801561061b57600080fd5b5061063660048036038101906106319190614d3d565b611556565b005b34801561064457600080fd5b5061064d6116c9565b60405161065a9190614dc0565b60405180910390f35b34801561066f57600080fd5b506106786116e0565b005b34801561068657600080fd5b5061068f6117b5565b60405161069c91906147a7565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c791906148f3565b6117db565b6040516106d9919061494e565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190614996565b61188e565b005b34801561071757600080fd5b506107206119e5565b60405161072d91906147a7565b60405180910390f35b34801561074257600080fd5b5061074b611a09565b604051610758919061494e565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190614996565b611a1c565b604051610795919061494e565b60405180910390f35b3480156107aa57600080fd5b506107b3611a72565b6040516107c09190614a4c565b60405180910390f35b3480156107d557600080fd5b506107de611a78565b6040516107eb9190614a4c565b60405180910390f35b34801561080057600080fd5b50610809611a7e565b6040516108169190614a4c565b60405180910390f35b34801561082b57600080fd5b50610834611a84565b604051610841919061494e565b60405180910390f35b34801561085657600080fd5b5061085f611a97565b60405161086c9190614a4c565b60405180910390f35b34801561088157600080fd5b5061089c60048036038101906108979190614996565b611a9d565b6040516108a99190614a4c565b60405180910390f35b3480156108be57600080fd5b506108c7611ae5565b005b3480156108d557600080fd5b506108de611c3d565b6040516108eb919061494e565b60405180910390f35b34801561090057600080fd5b5061091b60048036038101906109169190614e07565b611d3c565b005b34801561092957600080fd5b50610932611e72565b60405161093f91906147a7565b60405180910390f35b34801561095457600080fd5b5061095d611e98565b60405161096a9190614a4c565b60405180910390f35b34801561097f57600080fd5b50610988611e9e565b60405161099591906147a7565b60405180910390f35b3480156109aa57600080fd5b506109b3611ec4565b005b3480156109c157600080fd5b506109ca611fde565b6040516109d791906147a7565b60405180910390f35b3480156109ec57600080fd5b506109f5612008565b604051610a029190614a4c565b60405180910390f35b348015610a1757600080fd5b50610a326004803603810190610a2d9190614e47565b61200e565b005b348015610a4057600080fd5b50610a49612106565b604051610a56919061485b565b60405180910390f35b348015610a6b57600080fd5b50610a866004803603810190610a819190614e07565b612198565b005b348015610a9457600080fd5b50610aaf6004803603810190610aaa91906148f3565b612310565b604051610abc919061494e565b60405180910390f35b348015610ad157600080fd5b50610aec6004803603810190610ae791906148f3565b6123dd565b604051610af9919061494e565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b249190614996565b6123fb565b005b348015610b3757600080fd5b50610b526004803603810190610b4d9190614996565b612552565b604051610b5f919061494e565b60405180910390f35b348015610b7457600080fd5b50610b8f6004803603810190610b8a9190614996565b612572565b005b348015610b9d57600080fd5b50610ba66126c9565b604051610bb3919061494e565b60405180910390f35b348015610bc857600080fd5b50610be36004803603810190610bde9190614e07565b6126dc565b005b348015610bf157600080fd5b50610bfa612860565b604051610c079190614a4c565b60405180910390f35b348015610c1c57600080fd5b50610c25612866565b604051610c329190614a4c565b60405180910390f35b348015610c4757600080fd5b50610c5061286c565b604051610c5d9190614a4c565b60405180910390f35b348015610c7257600080fd5b50610c8d6004803603810190610c889190614e74565b612872565b604051610c9a9190614a4c565b60405180910390f35b348015610caf57600080fd5b50610cb86128f9565b604051610cc59190614a4c565b60405180910390f35b348015610cda57600080fd5b50610cf56004803603810190610cf09190614d3d565b6128ff565b005b348015610d0357600080fd5b50610d0c612a72565b604051610d199190614a4c565b60405180910390f35b348015610d2e57600080fd5b50610d37612a78565b604051610d449190614a4c565b60405180910390f35b348015610d5957600080fd5b50610d746004803603810190610d6f9190614996565b612a7e565b005b348015610d8257600080fd5b50610d8b612c45565b604051610d989190614a4c565b60405180910390f35b348015610dad57600080fd5b50610db6612c4b565b604051610dc39190614a4c565b60405180910390f35b348015610dd857600080fd5b50610de1612c51565b604051610dee9190614a4c565b60405180910390f35b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610e2c90614ee3565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5890614ee3565b8015610ea55780601f10610e7a57610100808354040283529160200191610ea5565b820191906000526020600020905b815481529060010190602001808311610e8857829003601f168201915b5050505050905090565b6000610ec3610ebc612cb5565b8484612cbd565b6001905092915050565b610ed5612cb5565b73ffffffffffffffffffffffffffffffffffffffff16610ef3611fde565b73ffffffffffffffffffffffffffffffffffffffff161480610f695750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f51612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f90614f61565b60405180910390fd5b600c60009054906101000a900460ff16600a610fc491906150e3565b60646001610fd06110a4565b610fda919061512e565b610fe491906151b7565b610fee91906151b7565b811015611030576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110279061525a565b60405180910390fd5b600c60009054906101000a900460ff16600a61104c91906150e3565b81611057919061512e565b600a8190555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60195481565b6110bc612cb5565b73ffffffffffffffffffffffffffffffffffffffff166110da611fde565b73ffffffffffffffffffffffffffffffffffffffff1614806111505750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611138612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b61118f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118690614f61565b60405180910390fd5b600c60009054906101000a900460ff16600a6111ab91906150e3565b606460016111b76110a4565b6111c1919061512e565b6111cb91906151b7565b6111d591906151b7565b811015611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120e9061525a565b60405180910390fd5b600c60009054906101000a900460ff16600a61123391906150e3565b8161123e919061512e565b600b8190555050565b60185481565b6000611257612cb5565b73ffffffffffffffffffffffffffffffffffffffff16611275611fde565b73ffffffffffffffffffffffffffffffffffffffff1614806112eb5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166112d3612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b61132a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132190614f61565b60405180910390fd5b600c60029054906101000a900460ff161561137a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611371906152ec565b60405180910390fd5b81518351146113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b590615358565b60405180910390fd5b60c8835110611402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f9906153ea565b60405180910390fd5b60005b835181101561146c5760008482815181106114235761142261540a565b5b6020026020010151905060008483815181106114425761144161540a565b5b60200260200101519050611457338383612e88565b5050808061146490615439565b915050611405565b506001905092915050565b6000611484848484612e88565b61154584611490612cb5565b61154085604051806060016040528060288152602001615f4c60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006114f6612cb5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b859092919063ffffffff16565b612cbd565b600190509392505050565b61dead81565b61155e612cb5565b73ffffffffffffffffffffffffffffffffffffffff1661157c611fde565b73ffffffffffffffffffffffffffffffffffffffff1614806115f25750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115da612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890614f61565b60405180910390fd5b83600f81905550826010819055508160118190555080601281905550601254601154601054600f546116639190615482565b61166d9190615482565b6116779190615482565b600e819055506019600e5411156116c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ba90615524565b60405180910390fd5b50505050565b6000600c60009054906101000a900460ff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176790615590565b60405180910390fd5b61dead600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006118846117e8612cb5565b8461187f85600160006117f9612cb5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b612cbd565b6001905092915050565b611896612cb5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90614f61565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f330d4d2fb107f96fe41cb476582de203d687c0acbcbd00a76e307f915d6db58a60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600c60019054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601b5481565b60125481565b60135481565b600c60039054906101000a900460ff1681565b601a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611aed612cb5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7390614f61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611c47612cb5565b73ffffffffffffffffffffffffffffffffffffffff16611c65611fde565b73ffffffffffffffffffffffffffffffffffffffff161480611cdb5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611cc3612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b611d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1190614f61565b60405180910390fd5b6000600c60016101000a81548160ff0219169083151502179055506001905090565b611d44612cb5565b73ffffffffffffffffffffffffffffffffffffffff16611d62611fde565b73ffffffffffffffffffffffffffffffffffffffff161480611dd85750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611dc0612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e90614f61565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ecc612cb5565b73ffffffffffffffffffffffffffffffffffffffff16611eea611fde565b73ffffffffffffffffffffffffffffffffffffffff161480611f605750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f48612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690614f61565b60405180910390fd5b6001600c60026101000a81548160ff0219169083151502179055506001600c60036101000a81548160ff02191690831515021790555043600d81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b612016612cb5565b73ffffffffffffffffffffffffffffffffffffffff16612034611fde565b73ffffffffffffffffffffffffffffffffffffffff1614806120aa5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612092612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b6120e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e090614f61565b60405180910390fd5b80600c60036101000a81548160ff02191690831515021790555050565b60606004805461211590614ee3565b80601f016020809104026020016040519081016040528092919081815260200182805461214190614ee3565b801561218e5780601f106121635761010080835404028352916020019161218e565b820191906000526020600020905b81548152906001019060200180831161217157829003601f168201915b5050505050905090565b6121a0612cb5565b73ffffffffffffffffffffffffffffffffffffffff166121be611fde565b73ffffffffffffffffffffffffffffffffffffffff1614806122345750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661221c612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b612273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226a90614f61565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f990615622565b60405180910390fd5b61230c8282613be9565b5050565b60006123d361231d612cb5565b846123ce85604051806060016040528060258152602001615f746025913960016000612347612cb5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b859092919063ffffffff16565b612cbd565b6001905092915050565b60006123f16123ea612cb5565b8484612e88565b6001905092915050565b612403612cb5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248990614f61565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b61257a612cb5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260090614f61565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3fa25a6f648969f60c137897d8045b588f90f7c5d47ce64973e91ea16a90efbd60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60029054906101000a900460ff1681565b6126e4612cb5565b73ffffffffffffffffffffffffffffffffffffffff16612702611fde565b73ffffffffffffffffffffffffffffffffffffffff1614806127785750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612760612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b6127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae90614f61565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612854919061494e565b60405180910390a25050565b600a5481565b600e5481565b60175481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60165481565b612907612cb5565b73ffffffffffffffffffffffffffffffffffffffff16612925611fde565b73ffffffffffffffffffffffffffffffffffffffff16148061299b5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612983612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b6129da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d190614f61565b60405180910390fd5b83601481905550826015819055508160168190555080601781905550601754601654601554601454612a0c9190615482565b612a169190615482565b612a209190615482565b60138190555060196013541115612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390615524565b60405180910390fd5b50505050565b600d5481565b60105481565b612a86612cb5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0c90614f61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7c906156b4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b60155481565b600b5481565b6000808284612c669190615482565b905083811015612cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca290615720565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d24906157b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9490615844565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e7b9190614a4c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eef906158d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5f90615968565b60405180910390fd5b600c60029054906101000a900460ff1661305d57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061301d5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61305c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613053906159d4565b60405180910390fd5b5b60008114156130775761307283836000613c8a565b613b80565b600c60019054906101000a900460ff16156134d557613094611fde565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561310257506130d2611fde565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561313b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613175575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561321f5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061321d5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b80156132385750600660149054906101000a900460ff16155b156134d457601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132e05750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561338757600a5481111561332a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332190615a66565b60405180910390fd5b600b5461333683611a9d565b826133419190615482565b1115613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990615ad2565b60405180910390fd5b6134d3565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561342a5750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561347957600a54811115613474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346b90615b64565b60405180910390fd5b6134d2565b600b5461348583611a9d565b826134909190615482565b11156134d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c890615ad2565b60405180910390fd5b5b5b5b5b60006134e030611a9d565b9050600080821190508080156135025750600c60039054906101000a900460ff165b801561351b5750600660149054906101000a900460ff16155b80156135715750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135c75750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561361d5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613661576001600660146101000a81548160ff021916908315150217905550613645613f1f565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137175750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561372157600090505b60008115613b705743600d541480156137d75750601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137d65750601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b156138995761380360646137f56063886142b890919063ffffffff16565b61433390919063ffffffff16565b90506063602182613814919061512e565b61381e91906151b7565b6019600082825461382f9190615482565b925050819055506063602182613845919061512e565b61384f91906151b7565b601b60008282546138609190615482565b925050819055506063602182613876919061512e565b61388091906151b7565b601860008282546138919190615482565b925050819055505b601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138f457506000601354115b156139f4576139216064613913601354886142b890919063ffffffff16565b61433390919063ffffffff16565b905060135460155482613934919061512e565b61393e91906151b7565b6019600082825461394f9190615482565b9250508190555060135460165482613967919061512e565b61397191906151b7565b601a60008282546139829190615482565b925050819055506013546014548261399a919061512e565b6139a491906151b7565b601860008282546139b59190615482565b92505081905550601354601754826139cd919061512e565b6139d791906151b7565b601b60008282546139e89190615482565b92505081905550613b4c565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a4f57506000600e54115b15613b4b57613a7c6064613a6e600e54886142b890919063ffffffff16565b61433390919063ffffffff16565b9050600e5460105482613a8f919061512e565b613a9991906151b7565b60196000828254613aaa9190615482565b92505081905550600e5460115482613ac2919061512e565b613acc91906151b7565b601a6000828254613add9190615482565b92505081905550600e54600f5482613af5919061512e565b613aff91906151b7565b60186000828254613b109190615482565b92505081905550600e5460125482613b28919061512e565b613b3291906151b7565b601b6000828254613b439190615482565b925050819055505b5b6000811115613b6157613b60873083613c8a565b5b8085613b6d9190615b84565b94505b613b7b878787613c8a565b505050505b505050565b6000838311158290613bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bc4919061485b565b60405180910390fd5b5060008385613bdc9190615b84565b9050809150509392505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cf1906158d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d6190615968565b60405180910390fd5b613d7583838361437d565b613de081604051806060016040528060268152602001615f26602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b859092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e73816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f129190614a4c565b60405180910390a3505050565b6000613f2a30611a9d565b90506000601b54601a54601854601954613f449190615482565b613f4e9190615482565b613f589190615482565b9050600080831480613f6a5750600082145b15613f77575050506142b6565b600060028360195486613f8a919061512e565b613f9491906151b7565b613f9e91906151b7565b90506000613fb5828661438290919063ffffffff16565b90506000479050613fc5826143cc565b6000613fda824761438290919063ffffffff16565b9050600061400587613ff7601854856142b890919063ffffffff16565b61433390919063ffffffff16565b9050600061403088614022601a54866142b890919063ffffffff16565b61433390919063ffffffff16565b9050600061405b8961404d601b54876142b890919063ffffffff16565b61433390919063ffffffff16565b905060008183858761406d9190615b84565b6140779190615b84565b6140819190615b84565b9050600060198190555060006018819055506000601a819055506000601b81905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516140e990615be9565b60006040518083038185875af1925050503d8060008114614126576040519150601f19603f3d011682016040523d82523d6000602084013e61412b565b606091505b505080995050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161417790615be9565b60006040518083038185875af1925050503d80600081146141b4576040519150601f19603f3d011682016040523d82523d6000602084013e6141b9565b606091505b5050809950506000881180156141cf5750600081115b1561421c576141de8882614618565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561878260195460405161421393929190615bfe565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161426290615be9565b60006040518083038185875af1925050503d806000811461429f576040519150601f19603f3d011682016040523d82523d6000602084013e6142a4565b606091505b50508099505050505050505050505050505b565b6000808314156142cb576000905061432d565b600082846142d9919061512e565b90508284826142e891906151b7565b14614328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161431f90615ca7565b60405180910390fd5b809150505b92915050565b600061437583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614703565b905092915050565b505050565b60006143c483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613b85565b905092915050565b6000600267ffffffffffffffff8111156143e9576143e8614a6c565b5b6040519080825280602002602001820160405280156144175781602001602082028036833780820191505090505b509050308160008151811061442f5761442e61540a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156144cf57600080fd5b505afa1580156144e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145079190615cdc565b8160018151811061451b5761451a61540a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614580307f000000000000000000000000000000000000000000000000000000000000000084612cbd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016145e2959493929190615e02565b600060405180830381600087803b1580156145fc57600080fd5b505af1158015614610573d6000803e3d6000fd5b505050505050565b614643307f000000000000000000000000000000000000000000000000000000000000000084612cbd565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016146aa96959493929190615e5c565b6060604051808303818588803b1580156146c357600080fd5b505af11580156146d7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906146fc9190615ed2565b5050505050565b6000808311829061474a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614741919061485b565b60405180910390fd5b506000838561475991906151b7565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061479182614766565b9050919050565b6147a181614786565b82525050565b60006020820190506147bc6000830184614798565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156147fc5780820151818401526020810190506147e1565b8381111561480b576000848401525b50505050565b6000601f19601f8301169050919050565b600061482d826147c2565b61483781856147cd565b93506148478185602086016147de565b61485081614811565b840191505092915050565b600060208201905081810360008301526148758184614822565b905092915050565b6000604051905090565b600080fd5b600080fd5b61489a81614786565b81146148a557600080fd5b50565b6000813590506148b781614891565b92915050565b6000819050919050565b6148d0816148bd565b81146148db57600080fd5b50565b6000813590506148ed816148c7565b92915050565b6000806040838503121561490a57614909614887565b5b6000614918858286016148a8565b9250506020614929858286016148de565b9150509250929050565b60008115159050919050565b61494881614933565b82525050565b6000602082019050614963600083018461493f565b92915050565b60006020828403121561497f5761497e614887565b5b600061498d848285016148de565b91505092915050565b6000602082840312156149ac576149ab614887565b5b60006149ba848285016148a8565b91505092915050565b6000819050919050565b60006149e86149e36149de84614766565b6149c3565b614766565b9050919050565b60006149fa826149cd565b9050919050565b6000614a0c826149ef565b9050919050565b614a1c81614a01565b82525050565b6000602082019050614a376000830184614a13565b92915050565b614a46816148bd565b82525050565b6000602082019050614a616000830184614a3d565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614aa482614811565b810181811067ffffffffffffffff82111715614ac357614ac2614a6c565b5b80604052505050565b6000614ad661487d565b9050614ae28282614a9b565b919050565b600067ffffffffffffffff821115614b0257614b01614a6c565b5b602082029050602081019050919050565b600080fd5b6000614b2b614b2684614ae7565b614acc565b90508083825260208201905060208402830185811115614b4e57614b4d614b13565b5b835b81811015614b775780614b6388826148a8565b845260208401935050602081019050614b50565b5050509392505050565b600082601f830112614b9657614b95614a67565b5b8135614ba6848260208601614b18565b91505092915050565b600067ffffffffffffffff821115614bca57614bc9614a6c565b5b602082029050602081019050919050565b6000614bee614be984614baf565b614acc565b90508083825260208201905060208402830185811115614c1157614c10614b13565b5b835b81811015614c3a5780614c2688826148de565b845260208401935050602081019050614c13565b5050509392505050565b600082601f830112614c5957614c58614a67565b5b8135614c69848260208601614bdb565b91505092915050565b60008060408385031215614c8957614c88614887565b5b600083013567ffffffffffffffff811115614ca757614ca661488c565b5b614cb385828601614b81565b925050602083013567ffffffffffffffff811115614cd457614cd361488c565b5b614ce085828601614c44565b9150509250929050565b600080600060608486031215614d0357614d02614887565b5b6000614d11868287016148a8565b9350506020614d22868287016148a8565b9250506040614d33868287016148de565b9150509250925092565b60008060008060808587031215614d5757614d56614887565b5b6000614d65878288016148de565b9450506020614d76878288016148de565b9350506040614d87878288016148de565b9250506060614d98878288016148de565b91505092959194509250565b600060ff82169050919050565b614dba81614da4565b82525050565b6000602082019050614dd56000830184614db1565b92915050565b614de481614933565b8114614def57600080fd5b50565b600081359050614e0181614ddb565b92915050565b60008060408385031215614e1e57614e1d614887565b5b6000614e2c858286016148a8565b9250506020614e3d85828601614df2565b9150509250929050565b600060208284031215614e5d57614e5c614887565b5b6000614e6b84828501614df2565b91505092915050565b60008060408385031215614e8b57614e8a614887565b5b6000614e99858286016148a8565b9250506020614eaa858286016148a8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614efb57607f821691505b60208210811415614f0f57614f0e614eb4565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614f4b6020836147cd565b9150614f5682614f15565b602082019050919050565b60006020820190508181036000830152614f7a81614f3e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561500757808604811115614fe357614fe2614f81565b5b6001851615614ff25780820291505b808102905061500085614fb0565b9450614fc7565b94509492505050565b60008261502057600190506150dc565b8161502e57600090506150dc565b8160018114615044576002811461504e5761507d565b60019150506150dc565b60ff8411156150605761505f614f81565b5b8360020a91508482111561507757615076614f81565b5b506150dc565b5060208310610133831016604e8410600b84101617156150b25782820a9050838111156150ad576150ac614f81565b5b6150dc565b6150bf8484846001614fbd565b925090508184048111156150d6576150d5614f81565b5b81810290505b9392505050565b60006150ee826148bd565b91506150f983614da4565b92506151267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615010565b905092915050565b6000615139826148bd565b9150615144836148bd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561517d5761517c614f81565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151c2826148bd565b91506151cd836148bd565b9250826151dd576151dc615188565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b6000615244602d836147cd565b915061524f826151e8565b604082019050919050565b6000602082019050818103600083015261527381615237565b9050919050565b7f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60008201527f742061697264726f70206166746572206c61756e63682e000000000000000000602082015250565b60006152d66037836147cd565b91506152e18261527a565b604082019050919050565b60006020820190508181036000830152615305816152c9565b9050919050565b7f617272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b6000615342601e836147cd565b915061534d8261530c565b602082019050919050565b6000602082019050818103600083015261537181615335565b9050919050565b7f43616e206f6e6c792061697264726f70203230302077616c6c6574732070657260008201527f2074786e2064756520746f20676173206c696d69747300000000000000000000602082015250565b60006153d46036836147cd565b91506153df82615378565b604082019050919050565b60006020820190508181036000830152615403816153c7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000615444826148bd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561547757615476614f81565b5b600182019050919050565b600061548d826148bd565b9150615498836148bd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154cd576154cc614f81565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b600061550e601d836147cd565b9150615519826154d8565b602082019050919050565b6000602082019050818103600083015261553d81615501565b9050919050565b7f4f6e6c7920736166754465762063616e2072656e6f756e636500000000000000600082015250565b600061557a6019836147cd565b915061558582615544565b602082019050919050565b600060208201905081810360008301526155a98161556d565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061560c6039836147cd565b9150615617826155b0565b604082019050919050565b6000602082019050818103600083015261563b816155ff565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061569e6026836147cd565b91506156a982615642565b604082019050919050565b600060208201905081810360008301526156cd81615691565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061570a601b836147cd565b9150615715826156d4565b602082019050919050565b60006020820190508181036000830152615739816156fd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061579c6024836147cd565b91506157a782615740565b604082019050919050565b600060208201905081810360008301526157cb8161578f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061582e6022836147cd565b9150615839826157d2565b604082019050919050565b6000602082019050818103600083015261585d81615821565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006158c06025836147cd565b91506158cb82615864565b604082019050919050565b600060208201905081810360008301526158ef816158b3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006159526023836147cd565b915061595d826158f6565b604082019050919050565b6000602082019050818103600083015261598181615945565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006159be6016836147cd565b91506159c982615988565b602082019050919050565b600060208201905081810360008301526159ed816159b1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615a506035836147cd565b9150615a5b826159f4565b604082019050919050565b60006020820190508181036000830152615a7f81615a43565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615abc6013836147cd565b9150615ac782615a86565b602082019050919050565b60006020820190508181036000830152615aeb81615aaf565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615b4e6036836147cd565b9150615b5982615af2565b604082019050919050565b60006020820190508181036000830152615b7d81615b41565b9050919050565b6000615b8f826148bd565b9150615b9a836148bd565b925082821015615bad57615bac614f81565b5b828203905092915050565b600081905092915050565b50565b6000615bd3600083615bb8565b9150615bde82615bc3565b600082019050919050565b6000615bf482615bc6565b9150819050919050565b6000606082019050615c136000830186614a3d565b615c206020830185614a3d565b615c2d6040830184614a3d565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c916021836147cd565b9150615c9c82615c35565b604082019050919050565b60006020820190508181036000830152615cc081615c84565b9050919050565b600081519050615cd681614891565b92915050565b600060208284031215615cf257615cf1614887565b5b6000615d0084828501615cc7565b91505092915050565b6000819050919050565b6000615d2e615d29615d2484615d09565b6149c3565b6148bd565b9050919050565b615d3e81615d13565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d7981614786565b82525050565b6000615d8b8383615d70565b60208301905092915050565b6000602082019050919050565b6000615daf82615d44565b615db98185615d4f565b9350615dc483615d60565b8060005b83811015615df5578151615ddc8882615d7f565b9750615de783615d97565b925050600181019050615dc8565b5085935050505092915050565b600060a082019050615e176000830188614a3d565b615e246020830187615d35565b8181036040830152615e368186615da4565b9050615e456060830185614798565b615e526080830184614a3d565b9695505050505050565b600060c082019050615e716000830189614798565b615e7e6020830188614a3d565b615e8b6040830187615d35565b615e986060830186615d35565b615ea56080830185614798565b615eb260a0830184614a3d565b979650505050505050565b600081519050615ecc816148c7565b92915050565b600080600060608486031215615eeb57615eea614887565b5b6000615ef986828701615ebd565b9350506020615f0a86828701615ebd565b9250506040615f1b86828701615ebd565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207f546db0916b27ad1706c7d0aeaa22df0f34ca9664cfd6015591ed662b35a47d64736f6c63430008090033
Deployed Bytecode
0x6080604052600436106103905760003560e01c8063751039fc116101dc578063b8b324bc11610102578063e6fb2eb0116100a0578063f2fde38b1161006f578063f2fde38b14610d4d578063f403d59914610d76578063f637434214610da1578063f8b45b0514610dcc57610397565b8063e6fb2eb014610ca3578063e7ad9fcd14610cce578063ee40166e14610cf7578063f11a24d314610d2257610397565b8063c8c8ebe4116100dc578063c8c8ebe414610be5578063d85ba06314610c10578063da12c12d14610c3b578063dd62ed3e14610c6657610397565b8063b8b324bc14610b68578063bbc0c74214610b91578063c024666814610bbc57610397565b8063921369131161017a578063a457c2d711610149578063a457c2d714610a88578063a9059cbb14610ac5578063aacebbe314610b02578063b62496f514610b2b57610397565b806392136913146109e0578063924de9b714610a0b57806395d89b4114610a345780639a7a23d614610a5f57610397565b80637bce5a04116101b65780637bce5a04146109485780638a64c030146109735780638a8c523c1461099e5780638da5cb5b146109b557610397565b8063751039fc146108c95780637571336a146108f457806375f0a8741461091d57610397565b8063313ce567116102c15780634fbee1931161025f5780636ddd17131161022e5780636ddd17131461081f5780637072152c1461084a57806370a0823114610875578063715018a6146108b257610397565b80634fbee19314610761578063540c53231461079e578063610a6460146107c95780636a486a8e146107f457610397565b8063395093511161029b57806339509351146106a55780633ec45bc6146106e257806349bd5a5e1461070b5780634a62bb651461073657610397565b8063313ce56714610638578063351b20e81461066357806335c5b3711461067a57610397565b80631a8145bb1161032e5780632307b441116103085780632307b4411461056a57806323b872dd146105a757806327c8f835146105e45780632e6ed7ef1461060f57610397565b80631a8145bb146104eb5780631c499ab0146105165780631f3fed8f1461053f57610397565b8063106b5da11161036a578063106b5da11461042f57806310d5de53146104585780631694505e1461049557806318160ddd146104c057610397565b8063057c09db1461039c57806306fdde03146103c7578063095ea7b3146103f257610397565b3661039757005b600080fd5b3480156103a857600080fd5b506103b1610df7565b6040516103be91906147a7565b60405180910390f35b3480156103d357600080fd5b506103dc610e1d565b6040516103e9919061485b565b60405180910390f35b3480156103fe57600080fd5b50610419600480360381019061041491906148f3565b610eaf565b604051610426919061494e565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190614969565b610ecd565b005b34801561046457600080fd5b5061047f600480360381019061047a9190614996565b611060565b60405161048c919061494e565b60405180910390f35b3480156104a157600080fd5b506104aa611080565b6040516104b79190614a22565b60405180910390f35b3480156104cc57600080fd5b506104d56110a4565b6040516104e29190614a4c565b60405180910390f35b3480156104f757600080fd5b506105006110ae565b60405161050d9190614a4c565b60405180910390f35b34801561052257600080fd5b5061053d60048036038101906105389190614969565b6110b4565b005b34801561054b57600080fd5b50610554611247565b6040516105619190614a4c565b60405180910390f35b34801561057657600080fd5b50610591600480360381019061058c9190614c72565b61124d565b60405161059e919061494e565b60405180910390f35b3480156105b357600080fd5b506105ce60048036038101906105c99190614cea565b611477565b6040516105db919061494e565b60405180910390f35b3480156105f057600080fd5b506105f9611550565b60405161060691906147a7565b60405180910390f35b34801561061b57600080fd5b5061063660048036038101906106319190614d3d565b611556565b005b34801561064457600080fd5b5061064d6116c9565b60405161065a9190614dc0565b60405180910390f35b34801561066f57600080fd5b506106786116e0565b005b34801561068657600080fd5b5061068f6117b5565b60405161069c91906147a7565b60405180910390f35b3480156106b157600080fd5b506106cc60048036038101906106c791906148f3565b6117db565b6040516106d9919061494e565b60405180910390f35b3480156106ee57600080fd5b5061070960048036038101906107049190614996565b61188e565b005b34801561071757600080fd5b506107206119e5565b60405161072d91906147a7565b60405180910390f35b34801561074257600080fd5b5061074b611a09565b604051610758919061494e565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190614996565b611a1c565b604051610795919061494e565b60405180910390f35b3480156107aa57600080fd5b506107b3611a72565b6040516107c09190614a4c565b60405180910390f35b3480156107d557600080fd5b506107de611a78565b6040516107eb9190614a4c565b60405180910390f35b34801561080057600080fd5b50610809611a7e565b6040516108169190614a4c565b60405180910390f35b34801561082b57600080fd5b50610834611a84565b604051610841919061494e565b60405180910390f35b34801561085657600080fd5b5061085f611a97565b60405161086c9190614a4c565b60405180910390f35b34801561088157600080fd5b5061089c60048036038101906108979190614996565b611a9d565b6040516108a99190614a4c565b60405180910390f35b3480156108be57600080fd5b506108c7611ae5565b005b3480156108d557600080fd5b506108de611c3d565b6040516108eb919061494e565b60405180910390f35b34801561090057600080fd5b5061091b60048036038101906109169190614e07565b611d3c565b005b34801561092957600080fd5b50610932611e72565b60405161093f91906147a7565b60405180910390f35b34801561095457600080fd5b5061095d611e98565b60405161096a9190614a4c565b60405180910390f35b34801561097f57600080fd5b50610988611e9e565b60405161099591906147a7565b60405180910390f35b3480156109aa57600080fd5b506109b3611ec4565b005b3480156109c157600080fd5b506109ca611fde565b6040516109d791906147a7565b60405180910390f35b3480156109ec57600080fd5b506109f5612008565b604051610a029190614a4c565b60405180910390f35b348015610a1757600080fd5b50610a326004803603810190610a2d9190614e47565b61200e565b005b348015610a4057600080fd5b50610a49612106565b604051610a56919061485b565b60405180910390f35b348015610a6b57600080fd5b50610a866004803603810190610a819190614e07565b612198565b005b348015610a9457600080fd5b50610aaf6004803603810190610aaa91906148f3565b612310565b604051610abc919061494e565b60405180910390f35b348015610ad157600080fd5b50610aec6004803603810190610ae791906148f3565b6123dd565b604051610af9919061494e565b60405180910390f35b348015610b0e57600080fd5b50610b296004803603810190610b249190614996565b6123fb565b005b348015610b3757600080fd5b50610b526004803603810190610b4d9190614996565b612552565b604051610b5f919061494e565b60405180910390f35b348015610b7457600080fd5b50610b8f6004803603810190610b8a9190614996565b612572565b005b348015610b9d57600080fd5b50610ba66126c9565b604051610bb3919061494e565b60405180910390f35b348015610bc857600080fd5b50610be36004803603810190610bde9190614e07565b6126dc565b005b348015610bf157600080fd5b50610bfa612860565b604051610c079190614a4c565b60405180910390f35b348015610c1c57600080fd5b50610c25612866565b604051610c329190614a4c565b60405180910390f35b348015610c4757600080fd5b50610c5061286c565b604051610c5d9190614a4c565b60405180910390f35b348015610c7257600080fd5b50610c8d6004803603810190610c889190614e74565b612872565b604051610c9a9190614a4c565b60405180910390f35b348015610caf57600080fd5b50610cb86128f9565b604051610cc59190614a4c565b60405180910390f35b348015610cda57600080fd5b50610cf56004803603810190610cf09190614d3d565b6128ff565b005b348015610d0357600080fd5b50610d0c612a72565b604051610d199190614a4c565b60405180910390f35b348015610d2e57600080fd5b50610d37612a78565b604051610d449190614a4c565b60405180910390f35b348015610d5957600080fd5b50610d746004803603810190610d6f9190614996565b612a7e565b005b348015610d8257600080fd5b50610d8b612c45565b604051610d989190614a4c565b60405180910390f35b348015610dad57600080fd5b50610db6612c4b565b604051610dc39190614a4c565b60405180910390f35b348015610dd857600080fd5b50610de1612c51565b604051610dee9190614a4c565b60405180910390f35b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060038054610e2c90614ee3565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5890614ee3565b8015610ea55780601f10610e7a57610100808354040283529160200191610ea5565b820191906000526020600020905b815481529060010190602001808311610e8857829003601f168201915b5050505050905090565b6000610ec3610ebc612cb5565b8484612cbd565b6001905092915050565b610ed5612cb5565b73ffffffffffffffffffffffffffffffffffffffff16610ef3611fde565b73ffffffffffffffffffffffffffffffffffffffff161480610f695750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610f51612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f90614f61565b60405180910390fd5b600c60009054906101000a900460ff16600a610fc491906150e3565b60646001610fd06110a4565b610fda919061512e565b610fe491906151b7565b610fee91906151b7565b811015611030576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110279061525a565b60405180910390fd5b600c60009054906101000a900460ff16600a61104c91906150e3565b81611057919061512e565b600a8190555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60195481565b6110bc612cb5565b73ffffffffffffffffffffffffffffffffffffffff166110da611fde565b73ffffffffffffffffffffffffffffffffffffffff1614806111505750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611138612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b61118f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118690614f61565b60405180910390fd5b600c60009054906101000a900460ff16600a6111ab91906150e3565b606460016111b76110a4565b6111c1919061512e565b6111cb91906151b7565b6111d591906151b7565b811015611217576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120e9061525a565b60405180910390fd5b600c60009054906101000a900460ff16600a61123391906150e3565b8161123e919061512e565b600b8190555050565b60185481565b6000611257612cb5565b73ffffffffffffffffffffffffffffffffffffffff16611275611fde565b73ffffffffffffffffffffffffffffffffffffffff1614806112eb5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166112d3612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b61132a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132190614f61565b60405180910390fd5b600c60029054906101000a900460ff161561137a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611371906152ec565b60405180910390fd5b81518351146113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b590615358565b60405180910390fd5b60c8835110611402576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f9906153ea565b60405180910390fd5b60005b835181101561146c5760008482815181106114235761142261540a565b5b6020026020010151905060008483815181106114425761144161540a565b5b60200260200101519050611457338383612e88565b5050808061146490615439565b915050611405565b506001905092915050565b6000611484848484612e88565b61154584611490612cb5565b61154085604051806060016040528060288152602001615f4c60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006114f6612cb5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b859092919063ffffffff16565b612cbd565b600190509392505050565b61dead81565b61155e612cb5565b73ffffffffffffffffffffffffffffffffffffffff1661157c611fde565b73ffffffffffffffffffffffffffffffffffffffff1614806115f25750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115da612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890614f61565b60405180910390fd5b83600f81905550826010819055508160118190555080601281905550601254601154601054600f546116639190615482565b61166d9190615482565b6116779190615482565b600e819055506019600e5411156116c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ba90615524565b60405180910390fd5b50505050565b6000600c60009054906101000a900460ff16905090565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611770576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176790615590565b60405180910390fd5b61dead600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006118846117e8612cb5565b8461187f85600160006117f9612cb5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b612cbd565b6001905092915050565b611896612cb5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90614f61565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f330d4d2fb107f96fe41cb476582de203d687c0acbcbd00a76e307f915d6db58a60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000b2d6a4775fa94675a6629200a687808e2dd2a0be81565b600c60019054906101000a900460ff1681565b6000601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601b5481565b60125481565b60135481565b600c60039054906101000a900460ff1681565b601a5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611aed612cb5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7390614f61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611c47612cb5565b73ffffffffffffffffffffffffffffffffffffffff16611c65611fde565b73ffffffffffffffffffffffffffffffffffffffff161480611cdb5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611cc3612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b611d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1190614f61565b60405180910390fd5b6000600c60016101000a81548160ff0219169083151502179055506001905090565b611d44612cb5565b73ffffffffffffffffffffffffffffffffffffffff16611d62611fde565b73ffffffffffffffffffffffffffffffffffffffff161480611dd85750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611dc0612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b611e17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0e90614f61565b60405180910390fd5b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ecc612cb5565b73ffffffffffffffffffffffffffffffffffffffff16611eea611fde565b73ffffffffffffffffffffffffffffffffffffffff161480611f605750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f48612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b611f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9690614f61565b60405180910390fd5b6001600c60026101000a81548160ff0219169083151502179055506001600c60036101000a81548160ff02191690831515021790555043600d81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b612016612cb5565b73ffffffffffffffffffffffffffffffffffffffff16612034611fde565b73ffffffffffffffffffffffffffffffffffffffff1614806120aa5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612092612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b6120e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e090614f61565b60405180910390fd5b80600c60036101000a81548160ff02191690831515021790555050565b60606004805461211590614ee3565b80601f016020809104026020016040519081016040528092919081815260200182805461214190614ee3565b801561218e5780601f106121635761010080835404028352916020019161218e565b820191906000526020600020905b81548152906001019060200180831161217157829003601f168201915b5050505050905090565b6121a0612cb5565b73ffffffffffffffffffffffffffffffffffffffff166121be611fde565b73ffffffffffffffffffffffffffffffffffffffff1614806122345750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661221c612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b612273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226a90614f61565b60405180910390fd5b7f000000000000000000000000b2d6a4775fa94675a6629200a687808e2dd2a0be73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612302576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f990615622565b60405180910390fd5b61230c8282613be9565b5050565b60006123d361231d612cb5565b846123ce85604051806060016040528060258152602001615f746025913960016000612347612cb5565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b859092919063ffffffff16565b612cbd565b6001905092915050565b60006123f16123ea612cb5565b8484612e88565b6001905092915050565b612403612cb5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612492576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248990614f61565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601e6020528060005260406000206000915054906101000a900460ff1681565b61257a612cb5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612609576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260090614f61565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f3fa25a6f648969f60c137897d8045b588f90f7c5d47ce64973e91ea16a90efbd60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600c60029054906101000a900460ff1681565b6126e4612cb5565b73ffffffffffffffffffffffffffffffffffffffff16612702611fde565b73ffffffffffffffffffffffffffffffffffffffff1614806127785750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612760612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b6127b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127ae90614f61565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612854919061494e565b60405180910390a25050565b600a5481565b600e5481565b60175481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60165481565b612907612cb5565b73ffffffffffffffffffffffffffffffffffffffff16612925611fde565b73ffffffffffffffffffffffffffffffffffffffff16148061299b5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612983612cb5565b73ffffffffffffffffffffffffffffffffffffffff16145b6129da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129d190614f61565b60405180910390fd5b83601481905550826015819055508160168190555080601781905550601754601654601554601454612a0c9190615482565b612a169190615482565b612a209190615482565b60138190555060196013541115612a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6390615524565b60405180910390fd5b50505050565b600d5481565b60105481565b612a86612cb5565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0c90614f61565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612b85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7c906156b4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60115481565b60155481565b600b5481565b6000808284612c669190615482565b905083811015612cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca290615720565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d24906157b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9490615844565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e7b9190614a4c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eef906158d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5f90615968565b60405180910390fd5b600c60029054906101000a900460ff1661305d57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061301d5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61305c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613053906159d4565b60405180910390fd5b5b60008114156130775761307283836000613c8a565b613b80565b600c60019054906101000a900460ff16156134d557613094611fde565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561310257506130d2611fde565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561313b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015613175575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561321f5750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061321d5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b80156132385750600660149054906101000a900460ff16155b156134d457601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132e05750601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561338757600a5481111561332a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161332190615a66565b60405180910390fd5b600b5461333683611a9d565b826133419190615482565b1115613382576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337990615ad2565b60405180910390fd5b6134d3565b601e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561342a5750601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561347957600a54811115613474576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346b90615b64565b60405180910390fd5b6134d2565b600b5461348583611a9d565b826134909190615482565b11156134d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c890615ad2565b60405180910390fd5b5b5b5b5b60006134e030611a9d565b9050600080821190508080156135025750600c60039054906101000a900460ff165b801561351b5750600660149054906101000a900460ff16155b80156135715750601e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156135c75750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561361d5750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613661576001600660146101000a81548160ff021916908315150217905550613645613f1f565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137175750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561372157600090505b60008115613b705743600d541480156137d75750601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806137d65750601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b5b156138995761380360646137f56063886142b890919063ffffffff16565b61433390919063ffffffff16565b90506063602182613814919061512e565b61381e91906151b7565b6019600082825461382f9190615482565b925050819055506063602182613845919061512e565b61384f91906151b7565b601b60008282546138609190615482565b925050819055506063602182613876919061512e565b61388091906151b7565b601860008282546138919190615482565b925050819055505b601e60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156138f457506000601354115b156139f4576139216064613913601354886142b890919063ffffffff16565b61433390919063ffffffff16565b905060135460155482613934919061512e565b61393e91906151b7565b6019600082825461394f9190615482565b9250508190555060135460165482613967919061512e565b61397191906151b7565b601a60008282546139829190615482565b925050819055506013546014548261399a919061512e565b6139a491906151b7565b601860008282546139b59190615482565b92505081905550601354601754826139cd919061512e565b6139d791906151b7565b601b60008282546139e89190615482565b92505081905550613b4c565b601e60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613a4f57506000600e54115b15613b4b57613a7c6064613a6e600e54886142b890919063ffffffff16565b61433390919063ffffffff16565b9050600e5460105482613a8f919061512e565b613a9991906151b7565b60196000828254613aaa9190615482565b92505081905550600e5460115482613ac2919061512e565b613acc91906151b7565b601a6000828254613add9190615482565b92505081905550600e54600f5482613af5919061512e565b613aff91906151b7565b60186000828254613b109190615482565b92505081905550600e5460125482613b28919061512e565b613b3291906151b7565b601b6000828254613b439190615482565b925050819055505b5b6000811115613b6157613b60873083613c8a565b5b8085613b6d9190615b84565b94505b613b7b878787613c8a565b505050505b505050565b6000838311158290613bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bc4919061485b565b60405180910390fd5b5060008385613bdc9190615b84565b9050809150509392505050565b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cf1906158d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613d6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d6190615968565b60405180910390fd5b613d7583838361437d565b613de081604051806060016040528060268152602001615f26602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613b859092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e73816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612c5790919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613f129190614a4c565b60405180910390a3505050565b6000613f2a30611a9d565b90506000601b54601a54601854601954613f449190615482565b613f4e9190615482565b613f589190615482565b9050600080831480613f6a5750600082145b15613f77575050506142b6565b600060028360195486613f8a919061512e565b613f9491906151b7565b613f9e91906151b7565b90506000613fb5828661438290919063ffffffff16565b90506000479050613fc5826143cc565b6000613fda824761438290919063ffffffff16565b9050600061400587613ff7601854856142b890919063ffffffff16565b61433390919063ffffffff16565b9050600061403088614022601a54866142b890919063ffffffff16565b61433390919063ffffffff16565b9050600061405b8961404d601b54876142b890919063ffffffff16565b61433390919063ffffffff16565b905060008183858761406d9190615b84565b6140779190615b84565b6140819190615b84565b9050600060198190555060006018819055506000601a819055506000601b81905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516140e990615be9565b60006040518083038185875af1925050503d8060008114614126576040519150601f19603f3d011682016040523d82523d6000602084013e61412b565b606091505b505080995050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161417790615be9565b60006040518083038185875af1925050503d80600081146141b4576040519150601f19603f3d011682016040523d82523d6000602084013e6141b9565b606091505b5050809950506000881180156141cf5750600081115b1561421c576141de8882614618565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561878260195460405161421393929190615bfe565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161426290615be9565b60006040518083038185875af1925050503d806000811461429f576040519150601f19603f3d011682016040523d82523d6000602084013e6142a4565b606091505b50508099505050505050505050505050505b565b6000808314156142cb576000905061432d565b600082846142d9919061512e565b90508284826142e891906151b7565b14614328576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161431f90615ca7565b60405180910390fd5b809150505b92915050565b600061437583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250614703565b905092915050565b505050565b60006143c483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613b85565b905092915050565b6000600267ffffffffffffffff8111156143e9576143e8614a6c565b5b6040519080825280602002602001820160405280156144175781602001602082028036833780820191505090505b509050308160008151811061442f5761442e61540a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156144cf57600080fd5b505afa1580156144e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145079190615cdc565b8160018151811061451b5761451a61540a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614580307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612cbd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016145e2959493929190615e02565b600060405180830381600087803b1580156145fc57600080fd5b505af1158015614610573d6000803e3d6000fd5b505050505050565b614643307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612cbd565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b81526004016146aa96959493929190615e5c565b6060604051808303818588803b1580156146c357600080fd5b505af11580156146d7573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906146fc9190615ed2565b5050505050565b6000808311829061474a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614741919061485b565b60405180910390fd5b506000838561475991906151b7565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061479182614766565b9050919050565b6147a181614786565b82525050565b60006020820190506147bc6000830184614798565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156147fc5780820151818401526020810190506147e1565b8381111561480b576000848401525b50505050565b6000601f19601f8301169050919050565b600061482d826147c2565b61483781856147cd565b93506148478185602086016147de565b61485081614811565b840191505092915050565b600060208201905081810360008301526148758184614822565b905092915050565b6000604051905090565b600080fd5b600080fd5b61489a81614786565b81146148a557600080fd5b50565b6000813590506148b781614891565b92915050565b6000819050919050565b6148d0816148bd565b81146148db57600080fd5b50565b6000813590506148ed816148c7565b92915050565b6000806040838503121561490a57614909614887565b5b6000614918858286016148a8565b9250506020614929858286016148de565b9150509250929050565b60008115159050919050565b61494881614933565b82525050565b6000602082019050614963600083018461493f565b92915050565b60006020828403121561497f5761497e614887565b5b600061498d848285016148de565b91505092915050565b6000602082840312156149ac576149ab614887565b5b60006149ba848285016148a8565b91505092915050565b6000819050919050565b60006149e86149e36149de84614766565b6149c3565b614766565b9050919050565b60006149fa826149cd565b9050919050565b6000614a0c826149ef565b9050919050565b614a1c81614a01565b82525050565b6000602082019050614a376000830184614a13565b92915050565b614a46816148bd565b82525050565b6000602082019050614a616000830184614a3d565b92915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b614aa482614811565b810181811067ffffffffffffffff82111715614ac357614ac2614a6c565b5b80604052505050565b6000614ad661487d565b9050614ae28282614a9b565b919050565b600067ffffffffffffffff821115614b0257614b01614a6c565b5b602082029050602081019050919050565b600080fd5b6000614b2b614b2684614ae7565b614acc565b90508083825260208201905060208402830185811115614b4e57614b4d614b13565b5b835b81811015614b775780614b6388826148a8565b845260208401935050602081019050614b50565b5050509392505050565b600082601f830112614b9657614b95614a67565b5b8135614ba6848260208601614b18565b91505092915050565b600067ffffffffffffffff821115614bca57614bc9614a6c565b5b602082029050602081019050919050565b6000614bee614be984614baf565b614acc565b90508083825260208201905060208402830185811115614c1157614c10614b13565b5b835b81811015614c3a5780614c2688826148de565b845260208401935050602081019050614c13565b5050509392505050565b600082601f830112614c5957614c58614a67565b5b8135614c69848260208601614bdb565b91505092915050565b60008060408385031215614c8957614c88614887565b5b600083013567ffffffffffffffff811115614ca757614ca661488c565b5b614cb385828601614b81565b925050602083013567ffffffffffffffff811115614cd457614cd361488c565b5b614ce085828601614c44565b9150509250929050565b600080600060608486031215614d0357614d02614887565b5b6000614d11868287016148a8565b9350506020614d22868287016148a8565b9250506040614d33868287016148de565b9150509250925092565b60008060008060808587031215614d5757614d56614887565b5b6000614d65878288016148de565b9450506020614d76878288016148de565b9350506040614d87878288016148de565b9250506060614d98878288016148de565b91505092959194509250565b600060ff82169050919050565b614dba81614da4565b82525050565b6000602082019050614dd56000830184614db1565b92915050565b614de481614933565b8114614def57600080fd5b50565b600081359050614e0181614ddb565b92915050565b60008060408385031215614e1e57614e1d614887565b5b6000614e2c858286016148a8565b9250506020614e3d85828601614df2565b9150509250929050565b600060208284031215614e5d57614e5c614887565b5b6000614e6b84828501614df2565b91505092915050565b60008060408385031215614e8b57614e8a614887565b5b6000614e99858286016148a8565b9250506020614eaa858286016148a8565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614efb57607f821691505b60208210811415614f0f57614f0e614eb4565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614f4b6020836147cd565b9150614f5682614f15565b602082019050919050565b60006020820190508181036000830152614f7a81614f3e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111561500757808604811115614fe357614fe2614f81565b5b6001851615614ff25780820291505b808102905061500085614fb0565b9450614fc7565b94509492505050565b60008261502057600190506150dc565b8161502e57600090506150dc565b8160018114615044576002811461504e5761507d565b60019150506150dc565b60ff8411156150605761505f614f81565b5b8360020a91508482111561507757615076614f81565b5b506150dc565b5060208310610133831016604e8410600b84101617156150b25782820a9050838111156150ad576150ac614f81565b5b6150dc565b6150bf8484846001614fbd565b925090508184048111156150d6576150d5614f81565b5b81810290505b9392505050565b60006150ee826148bd565b91506150f983614da4565b92506151267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484615010565b905092915050565b6000615139826148bd565b9150615144836148bd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561517d5761517c614f81565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006151c2826148bd565b91506151cd836148bd565b9250826151dd576151dc615188565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20312500000000000000000000000000000000000000602082015250565b6000615244602d836147cd565b915061524f826151e8565b604082019050919050565b6000602082019050818103600083015261527381615237565b9050919050565b7f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60008201527f742061697264726f70206166746572206c61756e63682e000000000000000000602082015250565b60006152d66037836147cd565b91506152e18261527a565b604082019050919050565b60006020820190508181036000830152615305816152c9565b9050919050565b7f617272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b6000615342601e836147cd565b915061534d8261530c565b602082019050919050565b6000602082019050818103600083015261537181615335565b9050919050565b7f43616e206f6e6c792061697264726f70203230302077616c6c6574732070657260008201527f2074786e2064756520746f20676173206c696d69747300000000000000000000602082015250565b60006153d46036836147cd565b91506153df82615378565b604082019050919050565b60006020820190508181036000830152615403816153c7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000615444826148bd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561547757615476614f81565b5b600182019050919050565b600061548d826148bd565b9150615498836148bd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154cd576154cc614f81565b5b828201905092915050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b600061550e601d836147cd565b9150615519826154d8565b602082019050919050565b6000602082019050818103600083015261553d81615501565b9050919050565b7f4f6e6c7920736166754465762063616e2072656e6f756e636500000000000000600082015250565b600061557a6019836147cd565b915061558582615544565b602082019050919050565b600060208201905081810360008301526155a98161556d565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061560c6039836147cd565b9150615617826155b0565b604082019050919050565b6000602082019050818103600083015261563b816155ff565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061569e6026836147cd565b91506156a982615642565b604082019050919050565b600060208201905081810360008301526156cd81615691565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061570a601b836147cd565b9150615715826156d4565b602082019050919050565b60006020820190508181036000830152615739816156fd565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061579c6024836147cd565b91506157a782615740565b604082019050919050565b600060208201905081810360008301526157cb8161578f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061582e6022836147cd565b9150615839826157d2565b604082019050919050565b6000602082019050818103600083015261585d81615821565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006158c06025836147cd565b91506158cb82615864565b604082019050919050565b600060208201905081810360008301526158ef816158b3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006159526023836147cd565b915061595d826158f6565b604082019050919050565b6000602082019050818103600083015261598181615945565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006159be6016836147cd565b91506159c982615988565b602082019050919050565b600060208201905081810360008301526159ed816159b1565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615a506035836147cd565b9150615a5b826159f4565b604082019050919050565b60006020820190508181036000830152615a7f81615a43565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615abc6013836147cd565b9150615ac782615a86565b602082019050919050565b60006020820190508181036000830152615aeb81615aaf565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615b4e6036836147cd565b9150615b5982615af2565b604082019050919050565b60006020820190508181036000830152615b7d81615b41565b9050919050565b6000615b8f826148bd565b9150615b9a836148bd565b925082821015615bad57615bac614f81565b5b828203905092915050565b600081905092915050565b50565b6000615bd3600083615bb8565b9150615bde82615bc3565b600082019050919050565b6000615bf482615bc6565b9150819050919050565b6000606082019050615c136000830186614a3d565b615c206020830185614a3d565b615c2d6040830184614a3d565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c916021836147cd565b9150615c9c82615c35565b604082019050919050565b60006020820190508181036000830152615cc081615c84565b9050919050565b600081519050615cd681614891565b92915050565b600060208284031215615cf257615cf1614887565b5b6000615d0084828501615cc7565b91505092915050565b6000819050919050565b6000615d2e615d29615d2484615d09565b6149c3565b6148bd565b9050919050565b615d3e81615d13565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615d7981614786565b82525050565b6000615d8b8383615d70565b60208301905092915050565b6000602082019050919050565b6000615daf82615d44565b615db98185615d4f565b9350615dc483615d60565b8060005b83811015615df5578151615ddc8882615d7f565b9750615de783615d97565b925050600181019050615dc8565b5085935050505092915050565b600060a082019050615e176000830188614a3d565b615e246020830187615d35565b8181036040830152615e368186615da4565b9050615e456060830185614798565b615e526080830184614a3d565b9695505050505050565b600060c082019050615e716000830189614798565b615e7e6020830188614a3d565b615e8b6040830187615d35565b615e986060830186615d35565b615ea56080830185614798565b615eb260a0830184614a3d565b979650505050505050565b600081519050615ecc816148c7565b92915050565b600080600060608486031215615eeb57615eea614887565b5b6000615ef986828701615ebd565b9350506020615f0a86828701615ebd565b9250506040615f1b86828701615ebd565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207f546db0916b27ad1706c7d0aeaa22df0f34ca9664cfd6015591ed662b35a47d64736f6c63430008090033
Deployed Bytecode Sourcemap
31545:18061:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31888:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9701:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11868:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39209:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32943:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31620:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10821:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32674:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39464:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32634:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38448:749;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12519:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31723:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40158:481;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39856:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37891:165;;;;;;;;;;;;;:::i;:::-;;31783:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13283:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42210:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31678:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32075:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42405:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32756:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32396:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32439:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32155:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32714:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10992:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24166:148;;;;;;;;;;;;;:::i;:::-;;38319:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39707:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31851:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32283;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31927;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38110:153;;;;;;;;;;;;;:::i;:::-;;23524:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32474:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40048:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9920:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41338:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14004:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11332:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41789:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33165:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42009:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32115:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41151:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31970:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32249:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32590:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11570:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32550:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40651:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32199:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32320:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24469:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32357:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32512:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32012:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31888:32;;;;;;;;;;;;;:::o;9701:100::-;9755:13;9788:5;9781:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9701:100;:::o;11868:169::-;11951:4;11968:39;11977:12;:10;:12::i;:::-;11991:7;12000:6;11968:8;:39::i;:::-;12025:4;12018:11;;11868:169;;;;:::o;39209:243::-;34126:12;:10;:12::i;:::-;34115:23;;:7;:5;:7::i;:::-;:23;;;:57;;;;34158:14;;;;;;;;;;;34142:30;;:12;:10;:12::i;:::-;:30;;;34115:57;34107:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;39326:9:::1;;;;;;;;;;;39322:2;:13;;;;:::i;:::-;39316:3;39312:1;39296:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;39295:41;;;;:::i;:::-;39285:6;:51;;39277:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;39434:9;;;;;;;;;;;39430:2;:13;;;;:::i;:::-;39420:6;:24;;;;:::i;:::-;39397:20;:47;;;;39209:243:::0;:::o;32943:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;31620:51::-;;;:::o;10821:108::-;10882:7;10909:12;;10902:19;;10821:108;:::o;32674:33::-;;;;:::o;39464:231::-;34126:12;:10;:12::i;:::-;34115:23;;:7;:5;:7::i;:::-;:23;;;:57;;;;34158:14;;;;;;;;;;;34142:30;;:12;:10;:12::i;:::-;:30;;;34115:57;34107:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;39581:9:::1;;;;;;;;;;;39577:2;:13;;;;:::i;:::-;39571:3;39567:1;39551:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:23;;;;:::i;:::-;39550:41;;;;:::i;:::-;39540:6;:51;;39532:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;39677:9;;;;;;;;;;;39673:2;:13;;;;:::i;:::-;39663:6;:24;;;;:::i;:::-;39652:9;:35;;;;39464:231:::0;:::o;32634:33::-;;;;:::o;38448:749::-;38558:4;34126:12;:10;:12::i;:::-;34115:23;;:7;:5;:7::i;:::-;:23;;;:57;;;;34158:14;;;;;;;;;;;34142:30;;:12;:10;:12::i;:::-;:30;;;34115:57;34107:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;38583:13:::1;;;;;;;;;;;38582:14;38574:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;38700:7;:14;38675;:21;:39;38667:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;38792:3;38768:14;:21;:27;38760:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;38967:9;38963:205;38986:14;:21;38982:1;:25;38963:205;;;39028:14;39045;39060:1;39045:17;;;;;;;;:::i;:::-;;;;;;;;39028:34;;39077:14;39094:7;39102:1;39094:10;;;;;;;;:::i;:::-;;;;;;;;39077:27;;39119:37;39129:10;39141:6;39149;39119:9;:37::i;:::-;39013:155;;39009:3;;;;;:::i;:::-;;;;38963:205;;;;39185:4;39178:11;;38448:749:::0;;;;:::o;12519:355::-;12659:4;12676:36;12686:6;12694:9;12705:6;12676:9;:36::i;:::-;12723:121;12732:6;12740:12;:10;:12::i;:::-;12754:89;12792:6;12754:89;;;;;;;;;;;;;;;;;:11;:19;12766:6;12754:19;;;;;;;;;;;;;;;:33;12774:12;:10;:12::i;:::-;12754:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;12723:8;:121::i;:::-;12862:4;12855:11;;12519:355;;;;;:::o;31723:53::-;31769:6;31723:53;:::o;40158:481::-;34126:12;:10;:12::i;:::-;34115:23;;:7;:5;:7::i;:::-;:23;;;:57;;;;34158:14;;;;;;;;;;;34142:30;;:12;:10;:12::i;:::-;:30;;;34115:57;34107:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;40320:13:::1;40302:15;:31;;;;40362:13;40344:15;:31;;;;40406:15;40386:17;:35;;;;40450:13;40432:15;:31;;;;40545:15;;40525:17;;40507:15;;40489;;:33;;;;:::i;:::-;:53;;;;:::i;:::-;:71;;;;:::i;:::-;40474:12;:86;;;;40595:2;40579:12;;:18;;40571:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;40158:481:::0;;;;:::o;39856:92::-;39906:5;39931:9;;;;;;;;;;;39924:16;;39856:92;:::o;37891:165::-;37961:14;;;;;;;;;;;37947:28;;:10;:28;;;37939:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38041:6;38016:14;;:32;;;;;;;;;;;;;;;;;;37891:165::o;31783:29::-;;;;;;;;;;;;;:::o;13283:218::-;13371:4;13388:83;13397:12;:10;:12::i;:::-;13411:7;13420:50;13459:10;13420:11;:25;13432:12;:10;:12::i;:::-;13420:25;;;;;;;;;;;;;;;:34;13446:7;13420:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;13388:8;:83::i;:::-;13489:4;13482:11;;13283:218;;;;:::o;42210:181::-;23746:12;:10;:12::i;:::-;23736:22;;:6;;;;;;;;;;;:22;;;23728:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42329:15:::1;;;;;;;;;;;42295:50;;42318:9;42295:50;;;;;;;;;;;;42374:9;42356:15;;:27;;;;;;;;;;;;;;;;;;42210:181:::0;:::o;31678:38::-;;;:::o;32075:33::-;;;;;;;;;;;;;:::o;42405:127::-;42472:4;42496:19;:28;42516:7;42496:28;;;;;;;;;;;;;;;;;;;;;;;;;42489:35;;42405:127;;;:::o;32756:33::-;;;;:::o;32396:30::-;;;;:::o;32439:28::-;;;;:::o;32155:31::-;;;;;;;;;;;;;:::o;32714:35::-;;;;:::o;10992:127::-;11066:7;11093:9;:18;11103:7;11093:18;;;;;;;;;;;;;;;;11086:25;;10992:127;;;:::o;24166:148::-;23746:12;:10;:12::i;:::-;23736:22;;:6;;;;;;;;;;;:22;;;23728:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24273:1:::1;24236:40;;24257:6;;;;;;;;;;;24236:40;;;;;;;;;;;;24304:1;24287:6;;:19;;;;;;;;;;;;;;;;;;24166:148::o:0;38319:117::-;38368:4;34126:12;:10;:12::i;:::-;34115:23;;:7;:5;:7::i;:::-;:23;;;:57;;;;34158:14;;;;;;;;;;;34142:30;;:12;:10;:12::i;:::-;:30;;;34115:57;34107:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;38401:5:::1;38384:14;;:22;;;;;;;;;;;;;;;;;;38424:4;38417:11;;38319:117:::0;:::o;39707:141::-;34126:12;:10;:12::i;:::-;34115:23;;:7;:5;:7::i;:::-;:23;;;:57;;;;34158:14;;;;;;;;;;;34142:30;;:12;:10;:12::i;:::-;:30;;;34115:57;34107:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;39836:4:::1;39794:31;:39;39826:6;39794:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39707:141:::0;;:::o;31851:30::-;;;;;;;;;;;;;:::o;32283:::-;;;;:::o;31927:::-;;;;;;;;;;;;;:::o;38110:153::-;34126:12;:10;:12::i;:::-;34115:23;;:7;:5;:7::i;:::-;:23;;;:57;;;;34158:14;;;;;;;;;;;34142:30;;:12;:10;:12::i;:::-;:30;;;34115:57;34107:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;38178:4:::1;38162:13;;:20;;;;;;;;;;;;;;;;;;38207:4;38193:11;;:18;;;;;;;;;;;;;;;;;;38243:12;38222:18;:33;;;;38110:153::o:0;23524:79::-;23562:7;23589:6;;;;;;;;;;;23582:13;;23524:79;:::o;32474:31::-;;;;:::o;40048:98::-;34126:12;:10;:12::i;:::-;34115:23;;:7;:5;:7::i;:::-;:23;;;:57;;;;34158:14;;;;;;;;;;;34142:30;;:12;:10;:12::i;:::-;:30;;;34115:57;34107:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;40131:7:::1;40117:11;;:21;;;;;;;;;;;;;;;;;;40048:98:::0;:::o;9920:104::-;9976:13;10009:7;10002:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9920:104;:::o;41338:243::-;34126:12;:10;:12::i;:::-;34115:23;;:7;:5;:7::i;:::-;:23;;;:57;;;;34158:14;;;;;;;;;;;34142:30;;:12;:10;:12::i;:::-;:30;;;34115:57;34107:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;41444:13:::1;41436:21;;:4;:21;;;;41428:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;41532:41;41561:4;41567:5;41532:28;:41::i;:::-;41338:243:::0;;:::o;14004:269::-;14097:4;14114:129;14123:12;:10;:12::i;:::-;14137:7;14146:96;14185:15;14146:96;;;;;;;;;;;;;;;;;:11;:25;14158:12;:10;:12::i;:::-;14146:25;;;;;;;;;;;;;;;:34;14172:7;14146:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;14114:8;:129::i;:::-;14261:4;14254:11;;14004:269;;;;:::o;11332:175::-;11418:4;11435:42;11445:12;:10;:12::i;:::-;11459:9;11470:6;11435:9;:42::i;:::-;11495:4;11488:11;;11332:175;;;;:::o;41789:208::-;23746:12;:10;:12::i;:::-;23736:22;;:6;;;;;;;;;;;:22;;;23728:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41926:15:::1;;;;;;;;;;;41883:59;;41906:18;41883:59;;;;;;;;;;;;41971:18;41953:15;;:36;;;;;;;;;;;;;;;;;;41789:208:::0;:::o;33165:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;42009:189::-;23746:12;:10;:12::i;:::-;23736:22;;:6;;;;;;;;;;;:22;;;23728:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42132:17:::1;;;;;;;;;;;42096:54;;42121:9;42096:54;;;;;;;;;;;;42181:9;42161:17;;:29;;;;;;;;;;;;;;;;;;42009:189:::0;:::o;32115:33::-;;;;;;;;;;;;;:::o;41151:179::-;34126:12;:10;:12::i;:::-;34115:23;;:7;:5;:7::i;:::-;:23;;;:57;;;;34158:14;;;;;;;;;;;34142:30;;:12;:10;:12::i;:::-;:30;;;34115:57;34107:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;41264:8:::1;41233:19;:28;41253:7;41233:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41304:7;41288:34;;;41313:8;41288:34;;;;;;:::i;:::-;;;;;;;;41151:179:::0;;:::o;31970:35::-;;;;:::o;32249:27::-;;;;:::o;32590:31::-;;;;:::o;11570:151::-;11659:7;11686:11;:18;11698:5;11686:18;;;;;;;;;;;;;;;:27;11705:7;11686:27;;;;;;;;;;;;;;;;11679:34;;11570:151;;;;:::o;32550:33::-;;;;:::o;40651:492::-;34126:12;:10;:12::i;:::-;34115:23;;:7;:5;:7::i;:::-;:23;;;:57;;;;34158:14;;;;;;;;;;;34142:30;;:12;:10;:12::i;:::-;:30;;;34115:57;34107:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;40815:13:::1;40796:16;:32;;;;40858:13;40839:16;:32;;;;40903:15;40882:18;:36;;;;40948:13;40929:16;:32;;;;41047:16;;41026:18;;41007:16;;40988;;:35;;;;:::i;:::-;:56;;;;:::i;:::-;:75;;;;:::i;:::-;40972:13;:91;;;;41099:2;41082:13;;:19;;41074:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40651:492:::0;;;;:::o;32199:33::-;;;;:::o;32320:30::-;;;;:::o;24469:244::-;23746:12;:10;:12::i;:::-;23736:22;;:6;;;;;;;;;;;:22;;;23728:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24578:1:::1;24558:22;;:8;:22;;;;24550:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24668:8;24639:38;;24660:6;;;;;;;;;;;24639:38;;;;;;;;;;;;24697:8;24688:6;;:17;;;;;;;;;;;;;;;;;;24469:244:::0;:::o;32357:32::-;;;;:::o;32512:31::-;;;;:::o;32012:24::-;;;;:::o;18568:181::-;18626:7;18646:9;18662:1;18658;:5;;;;:::i;:::-;18646:17;;18687:1;18682;:6;;18674:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;18740:1;18733:8;;;18568:181;;;;:::o;2337:98::-;2390:7;2417:10;2410:17;;2337:98;:::o;17190:380::-;17343:1;17326:19;;:5;:19;;;;17318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17424:1;17405:21;;:7;:21;;;;17397:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17508:6;17478:11;:18;17490:5;17478:18;;;;;;;;;;;;;;;:27;17497:7;17478:27;;;;;;;;;;;;;;;:36;;;;17546:7;17530:32;;17539:5;17530:32;;;17555:6;17530:32;;;;;;:::i;:::-;;;;;;;;17190:380;;;:::o;42544:4085::-;42692:1;42676:18;;:4;:18;;;;42668:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42769:1;42755:16;;:2;:16;;;;42747:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42826:13;;;;;;;;;;;42822:132;;42863:19;:25;42883:4;42863:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42892:19;:23;42912:2;42892:23;;;;;;;;;;;;;;;;;;;;;;;;;42863:52;42855:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;42822:132;42978:1;42968:6;:11;42965:92;;;42996:28;43012:4;43018:2;43022:1;42996:15;:28::i;:::-;43039:7;;42965:92;43080:14;;;;;;;;;;;43077:1134;;;43140:7;:5;:7::i;:::-;43132:15;;:4;:15;;;;:49;;;;;43174:7;:5;:7::i;:::-;43168:13;;:2;:13;;;;43132:49;:86;;;;;43216:1;43202:16;;:2;:16;;;;43132:86;:128;;;;;43253:6;43239:21;;:2;:21;;;;43132:128;:204;;;;;43283:19;:25;43303:4;43283:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43312:19;:23;43332:2;43312:23;;;;;;;;;;;;;;;;;;;;;;;;;43283:52;43281:55;43132:204;:234;;;;;43358:8;;;;;;;;;;;43357:9;43132:234;43110:1090;;;43451:25;:31;43477:4;43451:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;43487:31;:35;43519:2;43487:35;;;;;;;;;;;;;;;;;;;;;;;;;43486:36;43451:71;43447:738;;;43569:20;;43559:6;:30;;43551:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;43708:9;;43691:13;43701:2;43691:9;:13::i;:::-;43682:6;:22;;;;:::i;:::-;:35;;43674:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43447:738;;;43835:25;:29;43861:2;43835:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;43869:31;:37;43901:4;43869:37;;;;;;;;;;;;;;;;;;;;;;;;;43868:38;43835:71;43831:354;;;43953:20;;43943:6;:30;;43935:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;43831:354;;;44132:9;;44115:13;44125:2;44115:9;:13::i;:::-;44106:6;:22;;;;:::i;:::-;:35;;44098:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43831:354;43447:738;43110:1090;43077:1134;44225:28;44256:24;44274:4;44256:9;:24::i;:::-;44225:55;;44301:12;44339:1;44316:20;:24;44301:39;;44371:7;:35;;;;;44395:11;;;;;;;;;;;44371:35;:61;;;;;44424:8;;;;;;;;;;;44423:9;44371:61;:110;;;;;44450:25;:31;44476:4;44450:31;;;;;;;;;;;;;;;;;;;;;;;;;44449:32;44371:110;:153;;;;;44499:19;:25;44519:4;44499:25;;;;;;;;;;;;;;;;;;;;;;;;;44498:26;44371:153;:194;;;;;44542:19;:23;44562:2;44542:23;;;;;;;;;;;;;;;;;;;;;;;;;44541:24;44371:194;44353:338;;;44603:4;44592:8;;:15;;;;;;;;;;;;;;;;;;44636:10;:8;:10::i;:::-;44674:5;44663:8;;:16;;;;;;;;;;;;;;;;;;44353:338;44711:12;44727:8;;;;;;;;;;;44726:9;44711:24;;44836:19;:25;44856:4;44836:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;44865:19;:23;44885:2;44865:23;;;;;;;;;;;;;;;;;;;;;;;;;44836:52;44833:99;;;44915:5;44905:15;;44833:99;44952:12;45056:7;45053:1523;;;45118:12;45096:18;;:34;:104;;;;;45135:25;:29;45161:2;45135:29;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;45168:25;:31;45194:4;45168:31;;;;;;;;;;;;;;;;;;;;;;;;;45135:64;45096:104;45093:338;;;45227:23;45246:3;45227:14;45238:2;45227:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;45220:30;;45303:2;45298;45291:4;:9;;;;:::i;:::-;:14;;;;:::i;:::-;45269:18;;:36;;;;;;;:::i;:::-;;;;;;;;45358:2;45353;45346:4;:9;;;;:::i;:::-;:14;;;;:::i;:::-;45324:18;;:36;;;;;;;:::i;:::-;;;;;;;;45413:2;45408;45401:4;:9;;;;:::i;:::-;:14;;;;:::i;:::-;45379:18;;:36;;;;;;;:::i;:::-;;;;;;;;45093:338;45473:25;:29;45499:2;45473:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;45522:1;45506:13;;:17;45473:50;45469:938;;;45550:34;45580:3;45550:25;45561:13;;45550:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;45543:41;;45651:13;;45632:16;;45625:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;45603:18;;:61;;;;;;;:::i;:::-;;;;;;;;45735:13;;45714:18;;45707:4;:25;;;;:::i;:::-;:41;;;;:::i;:::-;45683:20;;:65;;;;;;;:::i;:::-;;;;;;;;45815:13;;45796:16;;45789:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;45767:18;;:61;;;;;;;:::i;:::-;;;;;;;;45895:13;;45876:16;;45869:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;45847:18;;:61;;;;;;;:::i;:::-;;;;;;;;45469:938;;;45969:25;:31;45995:4;45969:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;46019:1;46004:12;;:16;45969:51;45966:441;;;46045:33;46074:3;46045:24;46056:12;;46045:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;46038:40;;46141:12;;46123:15;;46116:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;46094:18;;:59;;;;;;;:::i;:::-;;;;;;;;46223:12;;46203:17;;46196:4;:24;;;;:::i;:::-;:39;;;;:::i;:::-;46172:20;;:63;;;;;;;:::i;:::-;;;;;;;;46301:12;;46283:15;;46276:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;46254:18;;:59;;;;;;;:::i;:::-;;;;;;;;46379:12;;46361:15;;46354:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;46332:18;;:59;;;;;;;:::i;:::-;;;;;;;;45966:441;45469:938;46445:1;46438:4;:8;46435:93;;;46470:42;46486:4;46500;46507;46470:15;:42::i;:::-;46435:93;46560:4;46550:14;;;;;:::i;:::-;;;45053:1523;46588:33;46604:4;46610:2;46614:6;46588:15;:33::i;:::-;42657:3972;;;;42544:4085;;;;:::o;19471:192::-;19557:7;19590:1;19585;:6;;19593:12;19577:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19617:9;19633:1;19629;:5;;;;:::i;:::-;19617:17;;19654:1;19647:8;;;19471:192;;;;;:::o;41593:188::-;41710:5;41676:25;:31;41702:4;41676:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41767:5;41733:40;;41761:4;41733:40;;;;;;;;;;;;41593:188;;:::o;14763:573::-;14921:1;14903:20;;:6;:20;;;;14895:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15005:1;14984:23;;:9;:23;;;;14976:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15060:47;15081:6;15089:9;15100:6;15060:20;:47::i;:::-;15140:71;15162:6;15140:71;;;;;;;;;;;;;;;;;:9;:17;15150:6;15140:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;15120:9;:17;15130:6;15120:17;;;;;;;;;;;;;;;:91;;;;15245:32;15270:6;15245:9;:20;15255:9;15245:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;15222:9;:20;15232:9;15222:20;;;;;;;;;;;;;;;:55;;;;15310:9;15293:35;;15302:6;15293:35;;;15321:6;15293:35;;;;;;:::i;:::-;;;;;;;;14763:573;;;:::o;47775:1828::-;47814:23;47840:24;47858:4;47840:9;:24::i;:::-;47814:50;;47877:25;47970:18;;47947:20;;47926:18;;47905;;:39;;;;:::i;:::-;:62;;;;:::i;:::-;:83;;;;:::i;:::-;47877:111;;47999:12;48054:1;48035:15;:20;:46;;;;48080:1;48059:17;:22;48035:46;48032:60;;;48084:7;;;;;48032:60;48161:23;48246:1;48226:17;48205:18;;48187:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;48161:86;;48258:26;48287:36;48307:15;48287;:19;;:36;;;;:::i;:::-;48258:65;;48344:25;48372:21;48344:49;;48406:36;48423:18;48406:16;:36::i;:::-;48464:18;48485:44;48511:17;48485:21;:25;;:44;;;;:::i;:::-;48464:65;;48550:23;48576:57;48615:17;48576:34;48591:18;;48576:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;48550:83;;48644:25;48672:59;48713:17;48672:36;48687:20;;48672:10;:14;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;48644:87;;48742:23;48768:57;48807:17;48768:34;48783:18;;48768:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;48742:83;;48846:23;48923:15;48903:17;48885:15;48872:10;:28;;;;:::i;:::-;:48;;;;:::i;:::-;:66;;;;:::i;:::-;48846:92;;48980:1;48959:18;:22;;;;49013:1;48992:18;:22;;;;49048:1;49025:20;:24;;;;49081:1;49060:18;:22;;;;49124:17;;;;;;;;;;;49116:31;;49155:17;49116:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49103:74;;;;;49209:15;;;;;;;;;;;49201:29;;49238:15;49201:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49188:70;;;;;49300:1;49282:15;:19;:42;;;;;49323:1;49305:15;:19;49282:42;49279:210;;;49340:46;49353:15;49370;49340:12;:46::i;:::-;49406:71;49421:18;49441:15;49458:18;;49406:71;;;;;;;;:::i;:::-;;;;;;;;49279:210;49530:15;;;;;;;;;;;49522:29;;49559:21;49522:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49509:76;;;;;47803:1800;;;;;;;;;;;47775:1828;:::o;19922:471::-;19980:7;20230:1;20225;:6;20221:47;;;20255:1;20248:8;;;;20221:47;20280:9;20296:1;20292;:5;;;;:::i;:::-;20280:17;;20325:1;20320;20316;:5;;;;:::i;:::-;:10;20308:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;20384:1;20377:8;;;19922:471;;;;;:::o;20869:132::-;20927:7;20954:39;20958:1;20961;20954:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;20947:46;;20869:132;;;;:::o;18173:125::-;;;;:::o;19032:136::-;19090:7;19117:43;19121:1;19124;19117:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;19110:50;;19032:136;;;;:::o;46637:601::-;46765:21;46803:1;46789:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46765:40;;46834:4;46816;46821:1;46816:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;46860:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46850:4;46855:1;46850:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;46895:62;46912:4;46927:15;46945:11;46895:8;:62::i;:::-;46996:15;:66;;;47077:11;47103:1;47147:4;47174;47194:15;46996:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46692:546;46637:601;:::o;47250:517::-;47398:62;47415:4;47430:15;47448:11;47398:8;:62::i;:::-;47503:15;:31;;;47542:9;47575:4;47595:11;47621:1;47664;31769:6;47733:15;47503:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;47250:517;;:::o;21497:278::-;21583:7;21615:1;21611;:5;21618:12;21603:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;21642:9;21658:1;21654;:5;;;;:::i;:::-;21642:17;;21766:1;21759:8;;;21497:278;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:307::-;941:1;951:113;965:6;962:1;959:13;951:113;;;1050:1;1045:3;1041:11;1035:18;1031:1;1026:3;1022:11;1015:39;987:2;984:1;980:10;975:15;;951:113;;;1082:6;1079:1;1076:13;1073:101;;;1162:1;1153:6;1148:3;1144:16;1137:27;1073:101;922:258;873:307;;;:::o;1186:102::-;1227:6;1278:2;1274:7;1269:2;1262:5;1258:14;1254:28;1244:38;;1186:102;;;:::o;1294:364::-;1382:3;1410:39;1443:5;1410:39;:::i;:::-;1465:71;1529:6;1524:3;1465:71;:::i;:::-;1458:78;;1545:52;1590:6;1585:3;1578:4;1571:5;1567:16;1545:52;:::i;:::-;1622:29;1644:6;1622:29;:::i;:::-;1617:3;1613:39;1606:46;;1386:272;1294:364;;;;:::o;1664:313::-;1777:4;1815:2;1804:9;1800:18;1792:26;;1864:9;1858:4;1854:20;1850:1;1839:9;1835:17;1828:47;1892:78;1965:4;1956:6;1892:78;:::i;:::-;1884:86;;1664:313;;;;:::o;1983:75::-;2016:6;2049:2;2043:9;2033:19;;1983:75;:::o;2064:117::-;2173:1;2170;2163:12;2187:117;2296:1;2293;2286:12;2310:122;2383:24;2401:5;2383:24;:::i;:::-;2376:5;2373:35;2363:63;;2422:1;2419;2412:12;2363:63;2310:122;:::o;2438:139::-;2484:5;2522:6;2509:20;2500:29;;2538:33;2565:5;2538:33;:::i;:::-;2438:139;;;;:::o;2583:77::-;2620:7;2649:5;2638:16;;2583:77;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:::-;4240:6;4289:2;4277:9;4268:7;4264:23;4260:32;4257:119;;;4295:79;;:::i;:::-;4257:119;4415:1;4440:53;4485:7;4476:6;4465:9;4461:22;4440:53;:::i;:::-;4430:63;;4386:117;4181:329;;;;:::o;4516:60::-;4544:3;4565:5;4558:12;;4516:60;;;:::o;4582:142::-;4632:9;4665:53;4683:34;4692:24;4710:5;4692:24;:::i;:::-;4683:34;:::i;:::-;4665:53;:::i;:::-;4652:66;;4582:142;;;:::o;4730:126::-;4780:9;4813:37;4844:5;4813:37;:::i;:::-;4800:50;;4730:126;;;:::o;4862:153::-;4939:9;4972:37;5003:5;4972:37;:::i;:::-;4959:50;;4862:153;;;:::o;5021:185::-;5135:64;5193:5;5135:64;:::i;:::-;5130:3;5123:77;5021:185;;:::o;5212:276::-;5332:4;5370:2;5359:9;5355:18;5347:26;;5383:98;5478:1;5467:9;5463:17;5454:6;5383:98;:::i;:::-;5212:276;;;;:::o;5494:118::-;5581:24;5599:5;5581:24;:::i;:::-;5576:3;5569:37;5494:118;;:::o;5618:222::-;5711:4;5749:2;5738:9;5734:18;5726:26;;5762:71;5830:1;5819:9;5815:17;5806:6;5762:71;:::i;:::-;5618:222;;;;:::o;5846:117::-;5955:1;5952;5945:12;5969:180;6017:77;6014:1;6007:88;6114:4;6111:1;6104:15;6138:4;6135:1;6128:15;6155:281;6238:27;6260:4;6238:27;:::i;:::-;6230:6;6226:40;6368:6;6356:10;6353:22;6332:18;6320:10;6317:34;6314:62;6311:88;;;6379:18;;:::i;:::-;6311:88;6419:10;6415:2;6408:22;6198:238;6155:281;;:::o;6442:129::-;6476:6;6503:20;;:::i;:::-;6493:30;;6532:33;6560:4;6552:6;6532:33;:::i;:::-;6442:129;;;:::o;6577:311::-;6654:4;6744:18;6736:6;6733:30;6730:56;;;6766:18;;:::i;:::-;6730:56;6816:4;6808:6;6804:17;6796:25;;6876:4;6870;6866:15;6858:23;;6577:311;;;:::o;6894:117::-;7003:1;7000;6993:12;7034:710;7130:5;7155:81;7171:64;7228:6;7171:64;:::i;:::-;7155:81;:::i;:::-;7146:90;;7256:5;7285:6;7278:5;7271:21;7319:4;7312:5;7308:16;7301:23;;7372:4;7364:6;7360:17;7352:6;7348:30;7401:3;7393:6;7390:15;7387:122;;;7420:79;;:::i;:::-;7387:122;7535:6;7518:220;7552:6;7547:3;7544:15;7518:220;;;7627:3;7656:37;7689:3;7677:10;7656:37;:::i;:::-;7651:3;7644:50;7723:4;7718:3;7714:14;7707:21;;7594:144;7578:4;7573:3;7569:14;7562:21;;7518:220;;;7522:21;7136:608;;7034:710;;;;;:::o;7767:370::-;7838:5;7887:3;7880:4;7872:6;7868:17;7864:27;7854:122;;7895:79;;:::i;:::-;7854:122;8012:6;7999:20;8037:94;8127:3;8119:6;8112:4;8104:6;8100:17;8037:94;:::i;:::-;8028:103;;7844:293;7767:370;;;;:::o;8143:311::-;8220:4;8310:18;8302:6;8299:30;8296:56;;;8332:18;;:::i;:::-;8296:56;8382:4;8374:6;8370:17;8362:25;;8442:4;8436;8432:15;8424:23;;8143:311;;;:::o;8477:710::-;8573:5;8598:81;8614:64;8671:6;8614:64;:::i;:::-;8598:81;:::i;:::-;8589:90;;8699:5;8728:6;8721:5;8714:21;8762:4;8755:5;8751:16;8744:23;;8815:4;8807:6;8803:17;8795:6;8791:30;8844:3;8836:6;8833:15;8830:122;;;8863:79;;:::i;:::-;8830:122;8978:6;8961:220;8995:6;8990:3;8987:15;8961:220;;;9070:3;9099:37;9132:3;9120:10;9099:37;:::i;:::-;9094:3;9087:50;9166:4;9161:3;9157:14;9150:21;;9037:144;9021:4;9016:3;9012:14;9005:21;;8961:220;;;8965:21;8579:608;;8477:710;;;;;:::o;9210:370::-;9281:5;9330:3;9323:4;9315:6;9311:17;9307:27;9297:122;;9338:79;;:::i;:::-;9297:122;9455:6;9442:20;9480:94;9570:3;9562:6;9555:4;9547:6;9543:17;9480:94;:::i;:::-;9471:103;;9287:293;9210:370;;;;:::o;9586:894::-;9704:6;9712;9761:2;9749:9;9740:7;9736:23;9732:32;9729:119;;;9767:79;;:::i;:::-;9729:119;9915:1;9904:9;9900:17;9887:31;9945:18;9937:6;9934:30;9931:117;;;9967:79;;:::i;:::-;9931:117;10072:78;10142:7;10133:6;10122:9;10118:22;10072:78;:::i;:::-;10062:88;;9858:302;10227:2;10216:9;10212:18;10199:32;10258:18;10250:6;10247:30;10244:117;;;10280:79;;:::i;:::-;10244:117;10385:78;10455:7;10446:6;10435:9;10431:22;10385:78;:::i;:::-;10375:88;;10170:303;9586:894;;;;;:::o;10486:619::-;10563:6;10571;10579;10628:2;10616:9;10607:7;10603:23;10599:32;10596:119;;;10634:79;;:::i;:::-;10596:119;10754:1;10779:53;10824:7;10815:6;10804:9;10800:22;10779:53;:::i;:::-;10769:63;;10725:117;10881:2;10907:53;10952:7;10943:6;10932:9;10928:22;10907:53;:::i;:::-;10897:63;;10852:118;11009:2;11035:53;11080:7;11071:6;11060:9;11056:22;11035:53;:::i;:::-;11025:63;;10980:118;10486:619;;;;;:::o;11111:765::-;11197:6;11205;11213;11221;11270:3;11258:9;11249:7;11245:23;11241:33;11238:120;;;11277:79;;:::i;:::-;11238:120;11397:1;11422:53;11467:7;11458:6;11447:9;11443:22;11422:53;:::i;:::-;11412:63;;11368:117;11524:2;11550:53;11595:7;11586:6;11575:9;11571:22;11550:53;:::i;:::-;11540:63;;11495:118;11652:2;11678:53;11723:7;11714:6;11703:9;11699:22;11678:53;:::i;:::-;11668:63;;11623:118;11780:2;11806:53;11851:7;11842:6;11831:9;11827:22;11806:53;:::i;:::-;11796:63;;11751:118;11111:765;;;;;;;:::o;11882:86::-;11917:7;11957:4;11950:5;11946:16;11935:27;;11882:86;;;:::o;11974:112::-;12057:22;12073:5;12057:22;:::i;:::-;12052:3;12045:35;11974:112;;:::o;12092:214::-;12181:4;12219:2;12208:9;12204:18;12196:26;;12232:67;12296:1;12285:9;12281:17;12272:6;12232:67;:::i;:::-;12092:214;;;;:::o;12312:116::-;12382:21;12397:5;12382:21;:::i;:::-;12375:5;12372:32;12362:60;;12418:1;12415;12408:12;12362:60;12312:116;:::o;12434:133::-;12477:5;12515:6;12502:20;12493:29;;12531:30;12555:5;12531:30;:::i;:::-;12434:133;;;;:::o;12573:468::-;12638:6;12646;12695:2;12683:9;12674:7;12670:23;12666:32;12663:119;;;12701:79;;:::i;:::-;12663:119;12821:1;12846:53;12891:7;12882:6;12871:9;12867:22;12846:53;:::i;:::-;12836:63;;12792:117;12948:2;12974:50;13016:7;13007:6;12996:9;12992:22;12974:50;:::i;:::-;12964:60;;12919:115;12573:468;;;;;:::o;13047:323::-;13103:6;13152:2;13140:9;13131:7;13127:23;13123:32;13120:119;;;13158:79;;:::i;:::-;13120:119;13278:1;13303:50;13345:7;13336:6;13325:9;13321:22;13303:50;:::i;:::-;13293:60;;13249:114;13047:323;;;;:::o;13376:474::-;13444:6;13452;13501:2;13489:9;13480:7;13476:23;13472:32;13469:119;;;13507:79;;:::i;:::-;13469:119;13627:1;13652:53;13697:7;13688:6;13677:9;13673:22;13652:53;:::i;:::-;13642:63;;13598:117;13754:2;13780:53;13825:7;13816:6;13805:9;13801:22;13780:53;:::i;:::-;13770:63;;13725:118;13376:474;;;;;:::o;13856:180::-;13904:77;13901:1;13894:88;14001:4;13998:1;13991:15;14025:4;14022:1;14015:15;14042:320;14086:6;14123:1;14117:4;14113:12;14103:22;;14170:1;14164:4;14160:12;14191:18;14181:81;;14247:4;14239:6;14235:17;14225:27;;14181:81;14309:2;14301:6;14298:14;14278:18;14275:38;14272:84;;;14328:18;;:::i;:::-;14272:84;14093:269;14042:320;;;:::o;14368:182::-;14508:34;14504:1;14496:6;14492:14;14485:58;14368:182;:::o;14556:366::-;14698:3;14719:67;14783:2;14778:3;14719:67;:::i;:::-;14712:74;;14795:93;14884:3;14795:93;:::i;:::-;14913:2;14908:3;14904:12;14897:19;;14556:366;;;:::o;14928:419::-;15094:4;15132:2;15121:9;15117:18;15109:26;;15181:9;15175:4;15171:20;15167:1;15156:9;15152:17;15145:47;15209:131;15335:4;15209:131;:::i;:::-;15201:139;;14928:419;;;:::o;15353:180::-;15401:77;15398:1;15391:88;15498:4;15495:1;15488:15;15522:4;15519:1;15512:15;15539:102;15581:8;15628:5;15625:1;15621:13;15600:34;;15539:102;;;:::o;15647:848::-;15708:5;15715:4;15739:6;15730:15;;15763:5;15754:14;;15777:712;15798:1;15788:8;15785:15;15777:712;;;15893:4;15888:3;15884:14;15878:4;15875:24;15872:50;;;15902:18;;:::i;:::-;15872:50;15952:1;15942:8;15938:16;15935:451;;;16367:4;16360:5;16356:16;16347:25;;15935:451;16417:4;16411;16407:15;16399:23;;16447:32;16470:8;16447:32;:::i;:::-;16435:44;;15777:712;;;15647:848;;;;;;;:::o;16501:1073::-;16555:5;16746:8;16736:40;;16767:1;16758:10;;16769:5;;16736:40;16795:4;16785:36;;16812:1;16803:10;;16814:5;;16785:36;16881:4;16929:1;16924:27;;;;16965:1;16960:191;;;;16874:277;;16924:27;16942:1;16933:10;;16944:5;;;16960:191;17005:3;16995:8;16992:17;16989:43;;;17012:18;;:::i;:::-;16989:43;17061:8;17058:1;17054:16;17045:25;;17096:3;17089:5;17086:14;17083:40;;;17103:18;;:::i;:::-;17083:40;17136:5;;;16874:277;;17260:2;17250:8;17247:16;17241:3;17235:4;17232:13;17228:36;17210:2;17200:8;17197:16;17192:2;17186:4;17183:12;17179:35;17163:111;17160:246;;;17316:8;17310:4;17306:19;17297:28;;17351:3;17344:5;17341:14;17338:40;;;17358:18;;:::i;:::-;17338:40;17391:5;;17160:246;17431:42;17469:3;17459:8;17453:4;17450:1;17431:42;:::i;:::-;17416:57;;;;17505:4;17500:3;17496:14;17489:5;17486:25;17483:51;;;17514:18;;:::i;:::-;17483:51;17563:4;17556:5;17552:16;17543:25;;16501:1073;;;;;;:::o;17580:281::-;17638:5;17662:23;17680:4;17662:23;:::i;:::-;17654:31;;17706:25;17722:8;17706:25;:::i;:::-;17694:37;;17750:104;17787:66;17777:8;17771:4;17750:104;:::i;:::-;17741:113;;17580:281;;;;:::o;17867:348::-;17907:7;17930:20;17948:1;17930:20;:::i;:::-;17925:25;;17964:20;17982:1;17964:20;:::i;:::-;17959:25;;18152:1;18084:66;18080:74;18077:1;18074:81;18069:1;18062:9;18055:17;18051:105;18048:131;;;18159:18;;:::i;:::-;18048:131;18207:1;18204;18200:9;18189:20;;17867:348;;;;:::o;18221:180::-;18269:77;18266:1;18259:88;18366:4;18363:1;18356:15;18390:4;18387:1;18380:15;18407:185;18447:1;18464:20;18482:1;18464:20;:::i;:::-;18459:25;;18498:20;18516:1;18498:20;:::i;:::-;18493:25;;18537:1;18527:35;;18542:18;;:::i;:::-;18527:35;18584:1;18581;18577:9;18572:14;;18407:185;;;;:::o;18598:232::-;18738:34;18734:1;18726:6;18722:14;18715:58;18807:15;18802:2;18794:6;18790:15;18783:40;18598:232;:::o;18836:366::-;18978:3;18999:67;19063:2;19058:3;18999:67;:::i;:::-;18992:74;;19075:93;19164:3;19075:93;:::i;:::-;19193:2;19188:3;19184:12;19177:19;;18836:366;;;:::o;19208:419::-;19374:4;19412:2;19401:9;19397:18;19389:26;;19461:9;19455:4;19451:20;19447:1;19436:9;19432:17;19425:47;19489:131;19615:4;19489:131;:::i;:::-;19481:139;;19208:419;;;:::o;19633:242::-;19773:34;19769:1;19761:6;19757:14;19750:58;19842:25;19837:2;19829:6;19825:15;19818:50;19633:242;:::o;19881:366::-;20023:3;20044:67;20108:2;20103:3;20044:67;:::i;:::-;20037:74;;20120:93;20209:3;20120:93;:::i;:::-;20238:2;20233:3;20229:12;20222:19;;19881:366;;;:::o;20253:419::-;20419:4;20457:2;20446:9;20442:18;20434:26;;20506:9;20500:4;20496:20;20492:1;20481:9;20477:17;20470:47;20534:131;20660:4;20534:131;:::i;:::-;20526:139;;20253:419;;;:::o;20678:180::-;20818:32;20814:1;20806:6;20802:14;20795:56;20678:180;:::o;20864:366::-;21006:3;21027:67;21091:2;21086:3;21027:67;:::i;:::-;21020:74;;21103:93;21192:3;21103:93;:::i;:::-;21221:2;21216:3;21212:12;21205:19;;20864:366;;;:::o;21236:419::-;21402:4;21440:2;21429:9;21425:18;21417:26;;21489:9;21483:4;21479:20;21475:1;21464:9;21460:17;21453:47;21517:131;21643:4;21517:131;:::i;:::-;21509:139;;21236:419;;;:::o;21661:241::-;21801:34;21797:1;21789:6;21785:14;21778:58;21870:24;21865:2;21857:6;21853:15;21846:49;21661:241;:::o;21908:366::-;22050:3;22071:67;22135:2;22130:3;22071:67;:::i;:::-;22064:74;;22147:93;22236:3;22147:93;:::i;:::-;22265:2;22260:3;22256:12;22249:19;;21908:366;;;:::o;22280:419::-;22446:4;22484:2;22473:9;22469:18;22461:26;;22533:9;22527:4;22523:20;22519:1;22508:9;22504:17;22497:47;22561:131;22687:4;22561:131;:::i;:::-;22553:139;;22280:419;;;:::o;22705:180::-;22753:77;22750:1;22743:88;22850:4;22847:1;22840:15;22874:4;22871:1;22864:15;22891:233;22930:3;22953:24;22971:5;22953:24;:::i;:::-;22944:33;;22999:66;22992:5;22989:77;22986:103;;;23069:18;;:::i;:::-;22986:103;23116:1;23109:5;23105:13;23098:20;;22891:233;;;:::o;23130:305::-;23170:3;23189:20;23207:1;23189:20;:::i;:::-;23184:25;;23223:20;23241:1;23223:20;:::i;:::-;23218:25;;23377:1;23309:66;23305:74;23302:1;23299:81;23296:107;;;23383:18;;:::i;:::-;23296:107;23427:1;23424;23420:9;23413:16;;23130:305;;;;:::o;23441:179::-;23581:31;23577:1;23569:6;23565:14;23558:55;23441:179;:::o;23626:366::-;23768:3;23789:67;23853:2;23848:3;23789:67;:::i;:::-;23782:74;;23865:93;23954:3;23865:93;:::i;:::-;23983:2;23978:3;23974:12;23967:19;;23626:366;;;:::o;23998:419::-;24164:4;24202:2;24191:9;24187:18;24179:26;;24251:9;24245:4;24241:20;24237:1;24226:9;24222:17;24215:47;24279:131;24405:4;24279:131;:::i;:::-;24271:139;;23998:419;;;:::o;24423:175::-;24563:27;24559:1;24551:6;24547:14;24540:51;24423:175;:::o;24604:366::-;24746:3;24767:67;24831:2;24826:3;24767:67;:::i;:::-;24760:74;;24843:93;24932:3;24843:93;:::i;:::-;24961:2;24956:3;24952:12;24945:19;;24604:366;;;:::o;24976:419::-;25142:4;25180:2;25169:9;25165:18;25157:26;;25229:9;25223:4;25219:20;25215:1;25204:9;25200:17;25193:47;25257:131;25383:4;25257:131;:::i;:::-;25249:139;;24976:419;;;:::o;25401:244::-;25541:34;25537:1;25529:6;25525:14;25518:58;25610:27;25605:2;25597:6;25593:15;25586:52;25401:244;:::o;25651:366::-;25793:3;25814:67;25878:2;25873:3;25814:67;:::i;:::-;25807:74;;25890:93;25979:3;25890:93;:::i;:::-;26008:2;26003:3;25999:12;25992:19;;25651:366;;;:::o;26023:419::-;26189:4;26227:2;26216:9;26212:18;26204:26;;26276:9;26270:4;26266:20;26262:1;26251:9;26247:17;26240:47;26304:131;26430:4;26304:131;:::i;:::-;26296:139;;26023:419;;;:::o;26448:225::-;26588:34;26584:1;26576:6;26572:14;26565:58;26657:8;26652:2;26644:6;26640:15;26633:33;26448:225;:::o;26679:366::-;26821:3;26842:67;26906:2;26901:3;26842:67;:::i;:::-;26835:74;;26918:93;27007:3;26918:93;:::i;:::-;27036:2;27031:3;27027:12;27020:19;;26679:366;;;:::o;27051:419::-;27217:4;27255:2;27244:9;27240:18;27232:26;;27304:9;27298:4;27294:20;27290:1;27279:9;27275:17;27268:47;27332:131;27458:4;27332:131;:::i;:::-;27324:139;;27051:419;;;:::o;27476:177::-;27616:29;27612:1;27604:6;27600:14;27593:53;27476:177;:::o;27659:366::-;27801:3;27822:67;27886:2;27881:3;27822:67;:::i;:::-;27815:74;;27898:93;27987:3;27898:93;:::i;:::-;28016:2;28011:3;28007:12;28000:19;;27659:366;;;:::o;28031:419::-;28197:4;28235:2;28224:9;28220:18;28212:26;;28284:9;28278:4;28274:20;28270:1;28259:9;28255:17;28248:47;28312:131;28438:4;28312:131;:::i;:::-;28304:139;;28031:419;;;:::o;28456:223::-;28596:34;28592:1;28584:6;28580:14;28573:58;28665:6;28660:2;28652:6;28648:15;28641:31;28456:223;:::o;28685:366::-;28827:3;28848:67;28912:2;28907:3;28848:67;:::i;:::-;28841:74;;28924:93;29013:3;28924:93;:::i;:::-;29042:2;29037:3;29033:12;29026:19;;28685:366;;;:::o;29057:419::-;29223:4;29261:2;29250:9;29246:18;29238:26;;29310:9;29304:4;29300:20;29296:1;29285:9;29281:17;29274:47;29338:131;29464:4;29338:131;:::i;:::-;29330:139;;29057:419;;;:::o;29482:221::-;29622:34;29618:1;29610:6;29606:14;29599:58;29691:4;29686:2;29678:6;29674:15;29667:29;29482:221;:::o;29709:366::-;29851:3;29872:67;29936:2;29931:3;29872:67;:::i;:::-;29865:74;;29948:93;30037:3;29948:93;:::i;:::-;30066:2;30061:3;30057:12;30050:19;;29709:366;;;:::o;30081:419::-;30247:4;30285:2;30274:9;30270:18;30262:26;;30334:9;30328:4;30324:20;30320:1;30309:9;30305:17;30298:47;30362:131;30488:4;30362:131;:::i;:::-;30354:139;;30081:419;;;:::o;30506:224::-;30646:34;30642:1;30634:6;30630:14;30623:58;30715:7;30710:2;30702:6;30698:15;30691:32;30506:224;:::o;30736:366::-;30878:3;30899:67;30963:2;30958:3;30899:67;:::i;:::-;30892:74;;30975:93;31064:3;30975:93;:::i;:::-;31093:2;31088:3;31084:12;31077:19;;30736:366;;;:::o;31108:419::-;31274:4;31312:2;31301:9;31297:18;31289:26;;31361:9;31355:4;31351:20;31347:1;31336:9;31332:17;31325:47;31389:131;31515:4;31389:131;:::i;:::-;31381:139;;31108:419;;;:::o;31533:222::-;31673:34;31669:1;31661:6;31657:14;31650:58;31742:5;31737:2;31729:6;31725:15;31718:30;31533:222;:::o;31761:366::-;31903:3;31924:67;31988:2;31983:3;31924:67;:::i;:::-;31917:74;;32000:93;32089:3;32000:93;:::i;:::-;32118:2;32113:3;32109:12;32102:19;;31761:366;;;:::o;32133:419::-;32299:4;32337:2;32326:9;32322:18;32314:26;;32386:9;32380:4;32376:20;32372:1;32361:9;32357:17;32350:47;32414:131;32540:4;32414:131;:::i;:::-;32406:139;;32133:419;;;:::o;32558:172::-;32698:24;32694:1;32686:6;32682:14;32675:48;32558:172;:::o;32736:366::-;32878:3;32899:67;32963:2;32958:3;32899:67;:::i;:::-;32892:74;;32975:93;33064:3;32975:93;:::i;:::-;33093:2;33088:3;33084:12;33077:19;;32736:366;;;:::o;33108:419::-;33274:4;33312:2;33301:9;33297:18;33289:26;;33361:9;33355:4;33351:20;33347:1;33336:9;33332:17;33325:47;33389:131;33515:4;33389:131;:::i;:::-;33381:139;;33108:419;;;:::o;33533:240::-;33673:34;33669:1;33661:6;33657:14;33650:58;33742:23;33737:2;33729:6;33725:15;33718:48;33533:240;:::o;33779:366::-;33921:3;33942:67;34006:2;34001:3;33942:67;:::i;:::-;33935:74;;34018:93;34107:3;34018:93;:::i;:::-;34136:2;34131:3;34127:12;34120:19;;33779:366;;;:::o;34151:419::-;34317:4;34355:2;34344:9;34340:18;34332:26;;34404:9;34398:4;34394:20;34390:1;34379:9;34375:17;34368:47;34432:131;34558:4;34432:131;:::i;:::-;34424:139;;34151:419;;;:::o;34576:169::-;34716:21;34712:1;34704:6;34700:14;34693:45;34576:169;:::o;34751:366::-;34893:3;34914:67;34978:2;34973:3;34914:67;:::i;:::-;34907:74;;34990:93;35079:3;34990:93;:::i;:::-;35108:2;35103:3;35099:12;35092:19;;34751:366;;;:::o;35123:419::-;35289:4;35327:2;35316:9;35312:18;35304:26;;35376:9;35370:4;35366:20;35362:1;35351:9;35347:17;35340:47;35404:131;35530:4;35404:131;:::i;:::-;35396:139;;35123:419;;;:::o;35548:241::-;35688:34;35684:1;35676:6;35672:14;35665:58;35757:24;35752:2;35744:6;35740:15;35733:49;35548:241;:::o;35795:366::-;35937:3;35958:67;36022:2;36017:3;35958:67;:::i;:::-;35951:74;;36034:93;36123:3;36034:93;:::i;:::-;36152:2;36147:3;36143:12;36136:19;;35795:366;;;:::o;36167:419::-;36333:4;36371:2;36360:9;36356:18;36348:26;;36420:9;36414:4;36410:20;36406:1;36395:9;36391:17;36384:47;36448:131;36574:4;36448:131;:::i;:::-;36440:139;;36167:419;;;:::o;36592:191::-;36632:4;36652:20;36670:1;36652:20;:::i;:::-;36647:25;;36686:20;36704:1;36686:20;:::i;:::-;36681:25;;36725:1;36722;36719:8;36716:34;;;36730:18;;:::i;:::-;36716:34;36775:1;36772;36768:9;36760:17;;36592:191;;;;:::o;36789:147::-;36890:11;36927:3;36912:18;;36789:147;;;;:::o;36942:114::-;;:::o;37062:398::-;37221:3;37242:83;37323:1;37318:3;37242:83;:::i;:::-;37235:90;;37334:93;37423:3;37334:93;:::i;:::-;37452:1;37447:3;37443:11;37436:18;;37062:398;;;:::o;37466:379::-;37650:3;37672:147;37815:3;37672:147;:::i;:::-;37665:154;;37836:3;37829:10;;37466:379;;;:::o;37851:442::-;38000:4;38038:2;38027:9;38023:18;38015:26;;38051:71;38119:1;38108:9;38104:17;38095:6;38051:71;:::i;:::-;38132:72;38200:2;38189:9;38185:18;38176:6;38132:72;:::i;:::-;38214;38282:2;38271:9;38267:18;38258:6;38214:72;:::i;:::-;37851:442;;;;;;:::o;38299:220::-;38439:34;38435:1;38427:6;38423:14;38416:58;38508:3;38503:2;38495:6;38491:15;38484:28;38299:220;:::o;38525:366::-;38667:3;38688:67;38752:2;38747:3;38688:67;:::i;:::-;38681:74;;38764:93;38853:3;38764:93;:::i;:::-;38882:2;38877:3;38873:12;38866:19;;38525:366;;;:::o;38897:419::-;39063:4;39101:2;39090:9;39086:18;39078:26;;39150:9;39144:4;39140:20;39136:1;39125:9;39121:17;39114:47;39178:131;39304:4;39178:131;:::i;:::-;39170:139;;38897:419;;;:::o;39322:143::-;39379:5;39410:6;39404:13;39395:22;;39426:33;39453:5;39426:33;:::i;:::-;39322:143;;;;:::o;39471:351::-;39541:6;39590:2;39578:9;39569:7;39565:23;39561:32;39558:119;;;39596:79;;:::i;:::-;39558:119;39716:1;39741:64;39797:7;39788:6;39777:9;39773:22;39741:64;:::i;:::-;39731:74;;39687:128;39471:351;;;;:::o;39828:85::-;39873:7;39902:5;39891:16;;39828:85;;;:::o;39919:158::-;39977:9;40010:61;40028:42;40037:32;40063:5;40037:32;:::i;:::-;40028:42;:::i;:::-;40010:61;:::i;:::-;39997:74;;39919:158;;;:::o;40083:147::-;40178:45;40217:5;40178:45;:::i;:::-;40173:3;40166:58;40083:147;;:::o;40236:114::-;40303:6;40337:5;40331:12;40321:22;;40236:114;;;:::o;40356:184::-;40455:11;40489:6;40484:3;40477:19;40529:4;40524:3;40520:14;40505:29;;40356:184;;;;:::o;40546:132::-;40613:4;40636:3;40628:11;;40666:4;40661:3;40657:14;40649:22;;40546:132;;;:::o;40684:108::-;40761:24;40779:5;40761:24;:::i;:::-;40756:3;40749:37;40684:108;;:::o;40798:179::-;40867:10;40888:46;40930:3;40922:6;40888:46;:::i;:::-;40966:4;40961:3;40957:14;40943:28;;40798:179;;;;:::o;40983:113::-;41053:4;41085;41080:3;41076:14;41068:22;;40983:113;;;:::o;41132:732::-;41251:3;41280:54;41328:5;41280:54;:::i;:::-;41350:86;41429:6;41424:3;41350:86;:::i;:::-;41343:93;;41460:56;41510:5;41460:56;:::i;:::-;41539:7;41570:1;41555:284;41580:6;41577:1;41574:13;41555:284;;;41656:6;41650:13;41683:63;41742:3;41727:13;41683:63;:::i;:::-;41676:70;;41769:60;41822:6;41769:60;:::i;:::-;41759:70;;41615:224;41602:1;41599;41595:9;41590:14;;41555:284;;;41559:14;41855:3;41848:10;;41256:608;;;41132:732;;;;:::o;41870:831::-;42133:4;42171:3;42160:9;42156:19;42148:27;;42185:71;42253:1;42242:9;42238:17;42229:6;42185:71;:::i;:::-;42266:80;42342:2;42331:9;42327:18;42318:6;42266:80;:::i;:::-;42393:9;42387:4;42383:20;42378:2;42367:9;42363:18;42356:48;42421:108;42524:4;42515:6;42421:108;:::i;:::-;42413:116;;42539:72;42607:2;42596:9;42592:18;42583:6;42539:72;:::i;:::-;42621:73;42689:3;42678:9;42674:19;42665:6;42621:73;:::i;:::-;41870:831;;;;;;;;:::o;42707:807::-;42956:4;42994:3;42983:9;42979:19;42971:27;;43008:71;43076:1;43065:9;43061:17;43052:6;43008:71;:::i;:::-;43089:72;43157:2;43146:9;43142:18;43133:6;43089:72;:::i;:::-;43171:80;43247:2;43236:9;43232:18;43223:6;43171:80;:::i;:::-;43261;43337:2;43326:9;43322:18;43313:6;43261:80;:::i;:::-;43351:73;43419:3;43408:9;43404:19;43395:6;43351:73;:::i;:::-;43434;43502:3;43491:9;43487:19;43478:6;43434:73;:::i;:::-;42707:807;;;;;;;;;:::o;43520:143::-;43577:5;43608:6;43602:13;43593:22;;43624:33;43651:5;43624:33;:::i;:::-;43520:143;;;;:::o;43669:663::-;43757:6;43765;43773;43822:2;43810:9;43801:7;43797:23;43793:32;43790:119;;;43828:79;;:::i;:::-;43790:119;43948:1;43973:64;44029:7;44020:6;44009:9;44005:22;43973:64;:::i;:::-;43963:74;;43919:128;44086:2;44112:64;44168:7;44159:6;44148:9;44144:22;44112:64;:::i;:::-;44102:74;;44057:129;44225:2;44251:64;44307:7;44298:6;44287:9;44283:22;44251:64;:::i;:::-;44241:74;;44196:129;43669:663;;;;;:::o
Swarm Source
ipfs://7f546db0916b27ad1706c7d0aeaa22df0f34ca9664cfd6015591ed662b35a47d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.