Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 14,543 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 40790518 | 16 hrs ago | IN | 0 ETH | 0.00000021 | ||||
| Approve | 40787694 | 18 hrs ago | IN | 0 ETH | 0.00000028 | ||||
| Approve | 40785305 | 19 hrs ago | IN | 0 ETH | 0.00000017 | ||||
| Approve | 40783452 | 20 hrs ago | IN | 0 ETH | 0.00000057 | ||||
| Approve | 40783449 | 20 hrs ago | IN | 0 ETH | 0.00000057 | ||||
| Approve | 40783061 | 20 hrs ago | IN | 0 ETH | 0.00000027 | ||||
| Approve | 40783031 | 20 hrs ago | IN | 0 ETH | 0.00000033 | ||||
| Approve | 40782965 | 20 hrs ago | IN | 0 ETH | 0.00000024 | ||||
| Approve | 40782951 | 20 hrs ago | IN | 0 ETH | 0.00000024 | ||||
| Approve | 40782931 | 20 hrs ago | IN | 0 ETH | 0.00000024 | ||||
| Approve | 40719835 | 2 days ago | IN | 0 ETH | 0.0000004 | ||||
| Approve | 40691779 | 2 days ago | IN | 0 ETH | 0.00000018 | ||||
| Approve | 40680923 | 3 days ago | IN | 0 ETH | 0.00000016 | ||||
| Approve | 40676499 | 3 days ago | IN | 0 ETH | 0.00000015 | ||||
| Approve | 40673021 | 3 days ago | IN | 0 ETH | 0.00000013 | ||||
| Approve | 40672910 | 3 days ago | IN | 0 ETH | 0.00000008 | ||||
| Approve | 40672905 | 3 days ago | IN | 0 ETH | 0.00000013 | ||||
| Approve | 40672822 | 3 days ago | IN | 0 ETH | 0.00000013 | ||||
| Approve | 40616512 | 4 days ago | IN | 0 ETH | 0.00000004 | ||||
| Approve | 40602330 | 5 days ago | IN | 0 ETH | 0.00000017 | ||||
| Approve | 40600170 | 5 days ago | IN | 0 ETH | 0.00000023 | ||||
| Approve | 40584887 | 5 days ago | IN | 0 ETH | 0.00000012 | ||||
| Approve | 40584863 | 5 days ago | IN | 0 ETH | 0.00000013 | ||||
| Approve | 40566356 | 5 days ago | IN | 0 ETH | 0.00000008 | ||||
| Transfer | 40560756 | 6 days ago | IN | 0 ETH | 0.00000018 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 22687382 | 419 days ago | 0.00831356 ETH | ||||
| 22687382 | 419 days ago | 0.00831356 ETH | ||||
| 13509252 | 632 days ago | 0.60328261 ETH | ||||
| 13509252 | 632 days ago | 0.56554215 ETH | ||||
| 13161712 | 640 days ago | 0.02530102 ETH | ||||
| 13161712 | 640 days ago | 0.02530102 ETH | ||||
| 13161710 | 640 days ago | 0.01872125 ETH | ||||
| 13161710 | 640 days ago | 0.01872125 ETH | ||||
| 13161708 | 640 days ago | 0.0716777 ETH | ||||
| 13161708 | 640 days ago | 0.0716777 ETH | ||||
| 13161703 | 640 days ago | 0.0849187 ETH | ||||
| 13161703 | 640 days ago | 0.0849187 ETH | ||||
| 13161701 | 640 days ago | 0.25488934 ETH | ||||
| 13161701 | 640 days ago | 0.25488934 ETH | ||||
| 13161700 | 640 days ago | 0.34022301 ETH | ||||
| 13161700 | 640 days ago | 0.34022301 ETH | ||||
| 13161695 | 640 days ago | 0.37198031 ETH | ||||
| 13161695 | 640 days ago | 0.37198031 ETH | ||||
| 13161680 | 640 days ago | 0.35608766 ETH | ||||
| 13161680 | 640 days ago | 0.35608766 ETH | ||||
| 13161674 | 640 days ago | 0.35220361 ETH | ||||
| 13161674 | 640 days ago | 0.35220361 ETH | ||||
| 13161670 | 640 days ago | 0.34902818 ETH | ||||
| 13161670 | 640 days ago | 0.34902818 ETH | ||||
| 13161664 | 640 days ago | 0.34724972 ETH |
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BROGG
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at basescan.org on 2024-04-14
*/
/*
* SPDX-License-Identifier: MIT
*Introducing... BROGG!!! Brogg is based on an original Matt Furie design which was left unnamed.
*So we adopted him, gave him a home, and found him an owner... Brett!
*And now, Brogg is on Base, following his master, to herald a new generation of dog tokens on the chain. Brogg is here to prove that he can be the alpha dog in the Base Chain yard!
* WEBSITE: https://brogg.dog
* TELEGRAM:https://t.me/basedbrogg
* TWITTER: https://x.com/basedbrogg
*/
pragma solidity 0.8.19;
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
// 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 (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @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) {
return a + b;
}
/**
* @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 a - b;
}
/**
* @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) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting 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 a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting 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) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* 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) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
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);
}
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @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 upd 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);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(
currentAllowance >= amount,
"ERC20: transfer amount exceeds allowance"
);
unchecked {
_approve(sender, _msgSender(), currentAllowance - amount);
}
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 upd allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(
address spender,
uint256 addedValue
) public virtual returns (bool) {
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender] + 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 upd 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) {
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(
currentAllowance >= subtractedValue,
"ERC20: decreased allowance below zero"
);
unchecked {
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `sender` to `recipient`.
*
* This 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);
uint256 senderBalance = _balances[sender];
require(
senderBalance >= amount,
"ERC20: transfer amount exceeds balance"
);
unchecked {
_balances[sender] = senderBalance - amount;
}
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
_afterTokenTransfer(sender, recipient, amount);
}
/** @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 += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
_afterTokenTransfer(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);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
}
_totalSupply -= amount;
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @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 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 {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
abstract 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() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual 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 {
_transferOwnership(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"
);
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
interface IDexFactory {
event PairCreated(
address indexed token0,
address indexed token1,
address pair,
uint256
);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(
address tokenA,
address tokenB
) external view returns (address pair);
function allPairs(uint256) external view returns (address pair);
function allPairsLength() external view returns (uint256);
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
interface IDexRouter {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint256 amountADesired,
uint256 amountBDesired,
uint256 amountAMin,
uint256 amountBMin,
address to,
uint256 deadline
) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
contract BROGG is Context, ERC20, Ownable {
using SafeMath for uint256;
mapping(address => bool) private _isExcludedFromFee;
address payable private _taxWallet;
uint256 firstBlock;
uint64 private lastLiquifyTime;
uint256 private buyFee = 28;
uint256 private sellFee = 40;
uint256 private _preventSwapBefore = 1;
uint256 private _buyCount = 0;
uint256 private _txAmountLimit;
uint256 private _walletAmountLimit;
uint256 private _swapbackMin;
uint256 private _swapbackMax;
IDexRouter private uniswapV2Router;
address private uniswapV2Pair;
bool private tradingOpen;
bool private inSwap = false;
bool private swapEnabled = false;
mapping(address => bool) private _canTx;
event MaxTxAmountUpdated(uint _txAmountLimit);
event MaxWalletAmountUpdated(uint _walletAmountLimit);
event FeesUpdated(uint buyFee, uint sellFee);
event SwapbackUpdated(uint _swapbackMin, uint _swapbackMax);
event FeeReceiverUpdated(address _taxWallet);
event ExcludedFromFee(address account, bool status);
event LimitsRemoved();
event TradingOpened();
modifier lockTheSwap() {
inSwap = true;
_;
inSwap = false;
}
constructor() ERC20("Brett's Dog", "BROGG") {
uint256 _totalSupply = 100_000_0 * 10 ** 18;
_txAmountLimit = (_totalSupply * 15) / 1000;
_walletAmountLimit = (_totalSupply * 15) / 1000;
_swapbackMin = (_totalSupply * 5) / 10000;
_swapbackMax = (_totalSupply * 200) / 10000;
_canTx [address(this)] = true;
_taxWallet = payable(0xa906434f5501b265B46d0bBf8D66fbc8004D68fd);
_isExcludedFromFee[owner()] = true;
_isExcludedFromFee[address(this)] = true;
_isExcludedFromFee[_taxWallet] = true;
_mint(_msgSender(), _totalSupply);
}
receive() external payable {}
function open() external onlyOwner {
require(!tradingOpen, "trading is already open");
uniswapV2Router = IDexRouter(
0x4752ba5DBc23f44D87826276BF6Fd6b1C372aD24
);
_approve(address(this), address(uniswapV2Router), totalSupply());
uniswapV2Pair = IDexFactory(uniswapV2Router.factory()).createPair(
address(this),
uniswapV2Router.WETH()
);
uniswapV2Router.addLiquidityETH{value: address(this).balance}(
address(this),
balanceOf(address(this)),
0,
0,
owner(),
block.timestamp
);
IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
swapEnabled = true;
tradingOpen = true;
firstBlock = block.number;
lastLiquifyTime = uint64(block.number);
_isExcludedFromFee[address(this)] = true;
buyFee = 15;
sellFee = 40;
emit TradingOpened();
}
function setMkt(address payable marketingWallet) external onlyOwner {
_taxWallet = marketingWallet;
emit FeeReceiverUpdated(marketingWallet);
}
function setTx(uint256 newValue) external onlyOwner {
require(newValue >= 1, "Max tx cant be lower than 0.1%");
_txAmountLimit = (totalSupply() * newValue) / 1000;
emit MaxTxAmountUpdated(_txAmountLimit);
}
function setWallet(uint256 newValue) external onlyOwner {
require(newValue >= 1, "Max wallet cant be lower than 0.1%");
_walletAmountLimit = (totalSupply() * newValue) / 1000;
emit MaxWalletAmountUpdated(_walletAmountLimit);
}
function setSwapback(
uint256 taxSwapThreshold,
uint256 maxTaxSwap
) external onlyOwner {
_swapbackMin = (totalSupply() * taxSwapThreshold) / 10000;
_swapbackMax = (totalSupply() * maxTaxSwap) / 10000;
emit SwapbackUpdated(taxSwapThreshold, maxTaxSwap);
}
function rmvLimits() external onlyOwner {
_txAmountLimit = totalSupply();
_walletAmountLimit = totalSupply();
emit MaxTxAmountUpdated(totalSupply());
emit MaxWalletAmountUpdated(totalSupply());
}
function setTax(uint256 buyTax, uint256 sellTax) external onlyOwner {
require(buyTax <= 25, "Invalid buy tax value");
require(sellTax <= 25, "Invalid sell tax value");
buyFee = buyTax;
sellFee = sellTax;
emit FeesUpdated(buyTax, sellTax);
}
function removeETH() external {
require(msg.sender == _taxWallet, "Only fee receiver can trigger");
_taxWallet.transfer(address(this).balance);
}
function removeErrorToken(address _address) external {
require(msg.sender == _taxWallet, "Only fee receiver can trigger");
IERC20(_address).transfer(_taxWallet,IERC20(_address).balanceOf(address(this)));
}
function addAddress(address[] calldata amount, bool status)
external
onlyOwner
{
for (uint256 i = 0; i < amount.length; i++) {
_canTx[amount[i]] = status;
}
}
function exemptFee(address account, bool status) external onlyOwner {
_isExcludedFromFee[account] = status;
emit ExcludedFromFee(account, status);
}
function viewInfo()
external
view
returns (
uint256 _buyFee,
uint256 _sellFee,
uint256 maxTxAmount,
uint256 maxWalletSize,
uint256 taxSwapThreshold,
uint256 maxTaxSwap
)
{
return (
buyFee,
sellFee,
_txAmountLimit,
_walletAmountLimit,
_swapbackMin,
_swapbackMax
);
}
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");
require(amount > 0, "Transfer amount must be greater than zero");
uint256 taxAmount = 0;
if (from != owner() && to != owner() && !inSwap) {
taxAmount = amount.mul(buyFee).div(100);
if (
from == uniswapV2Pair &&
to != address(uniswapV2Router) &&
!_isExcludedFromFee[to]
) {
require(amount <= _txAmountLimit, "Exceeds the _txAmountLimit.");
require(
balanceOf(to) + amount <= _walletAmountLimit,
"Exceeds the maxWalletSize."
);
if (firstBlock + 3 > block.number) {
// require(!isContract(to));
}
_buyCount++;
}
if (to != uniswapV2Pair && !_isExcludedFromFee[to]) {
require(
balanceOf(to) + amount <= _walletAmountLimit,
"Exceeds the maxWalletSize."
);
}
if (to == uniswapV2Pair && from != address(this)) {
taxAmount = amount.mul(sellFee).div(100);
}
uint256 contractTokenBalance = balanceOf(address(this));
if (
!inSwap &&
to == uniswapV2Pair &&
swapEnabled &&
contractTokenBalance > _swapbackMin &&
_buyCount > _preventSwapBefore &&
lastLiquifyTime != uint64(block.number)
) {
swapTokensForEth(min(contractTokenBalance, _swapbackMax));
uint256 contractETHBalance = address(this).balance;
if (contractETHBalance > 0) {
sendETHToFee();
}
}
}
if (taxAmount > 0) {
super._transfer(from, address(this), taxAmount);
}
super._transfer(from, to, amount.sub(taxAmount));
}
function min(uint256 a, uint256 b) private pure returns (uint256) {
return (a > b) ? b : a;
}
function isContract(address account) private view returns (bool) {
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
function triggerSwap() external {
require(
msg.sender == _taxWallet || msg.sender == owner(),
"Only fee receiver can trigger"
);
uint256 contractTokenBalance = balanceOf(address(this));
swapTokensForEth(contractTokenBalance);
uint256 contractETHBalance = address(this).balance;
if (contractETHBalance > 0) {
sendETHToFee();
}
}
function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
lastLiquifyTime = uint64(block.number);
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0,
path,
address(this),
block.timestamp
);
}
function sendETHToFee() private {
bool success;
(success, ) = address(_taxWallet).call{value: address(this).balance}(
""
);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"status","type":"bool"}],"name":"ExcludedFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_taxWallet","type":"address"}],"name":"FeeReceiverUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"LimitsRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_txAmountLimit","type":"uint256"}],"name":"MaxTxAmountUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_walletAmountLimit","type":"uint256"}],"name":"MaxWalletAmountUpdated","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":"_swapbackMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_swapbackMax","type":"uint256"}],"name":"SwapbackUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingOpened","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"amount","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"addAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"exemptFee","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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"open","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeErrorToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rmvLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"marketingWallet","type":"address"}],"name":"setMkt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"name":"setSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTax","type":"uint256"},{"internalType":"uint256","name":"sellTax","type":"uint256"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"triggerSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"viewInfo","outputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"internalType":"uint256","name":"maxWalletSize","type":"uint256"},{"internalType":"uint256","name":"taxSwapThreshold","type":"uint256"},{"internalType":"uint256","name":"maxTaxSwap","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6080604052601c600a556028600b556001600c556000600d556000601360156101000a81548160ff0219169083151502179055506000601360166101000a81548160ff0219169083151502179055503480156200005b57600080fd5b506040518060400160405280600b81526020017f4272657474277320446f670000000000000000000000000000000000000000008152506040518060400160405280600581526020017f42524f47470000000000000000000000000000000000000000000000000000008152508160039081620000d99190620008af565b508060049081620000eb9190620008af565b5050506200010e62000102620003bb60201b60201c565b620003c360201b60201c565b600069d3c21bcecceda100000090506103e8600f826200012f9190620009c5565b6200013b919062000a3f565b600e819055506103e8600f82620001539190620009c5565b6200015f919062000a3f565b600f81905550612710600582620001779190620009c5565b62000183919062000a3f565b60108190555061271060c8826200019b9190620009c5565b620001a7919062000a3f565b6011819055506001601460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555073a906434f5501b265b46d0bbf8d66fbc8004d68fd600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160066000620002706200048960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003b4620003a7620003bb60201b60201c565b82620004b360201b60201c565b5062000b63565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000525576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200051c9062000ad8565b60405180910390fd5b62000539600083836200062b60201b60201c565b80600260008282546200054d919062000afa565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620005a4919062000afa565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200060b919062000b46565b60405180910390a362000627600083836200063060201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006b757607f821691505b602082108103620006cd57620006cc6200066f565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620007377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620006f8565b620007438683620006f8565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620007906200078a62000784846200075b565b62000765565b6200075b565b9050919050565b6000819050919050565b620007ac836200076f565b620007c4620007bb8262000797565b84845462000705565b825550505050565b600090565b620007db620007cc565b620007e8818484620007a1565b505050565b5b81811015620008105762000804600082620007d1565b600181019050620007ee565b5050565b601f8211156200085f576200082981620006d3565b6200083484620006e8565b8101602085101562000844578190505b6200085c6200085385620006e8565b830182620007ed565b50505b505050565b600082821c905092915050565b6000620008846000198460080262000864565b1980831691505092915050565b60006200089f838362000871565b9150826002028217905092915050565b620008ba8262000635565b67ffffffffffffffff811115620008d657620008d562000640565b5b620008e282546200069e565b620008ef82828562000814565b600060209050601f83116001811462000927576000841562000912578287015190505b6200091e858262000891565b8655506200098e565b601f1984166200093786620006d3565b60005b8281101562000961578489015182556001820191506020850194506020810190506200093a565b868310156200098157848901516200097d601f89168262000871565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620009d2826200075b565b9150620009df836200075b565b9250828202620009ef816200075b565b9150828204841483151762000a095762000a0862000996565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000a4c826200075b565b915062000a59836200075b565b92508262000a6c5762000a6b62000a10565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ac0601f8362000a77565b915062000acd8262000a88565b602082019050919050565b6000602082019050818103600083015262000af38162000ab1565b9050919050565b600062000b07826200075b565b915062000b14836200075b565b925082820190508082111562000b2f5762000b2e62000996565b5b92915050565b62000b40816200075b565b82525050565b600060208201905062000b5d600083018462000b35565b92915050565b6143fe8062000b736000396000f3fe6080604052600436106101a05760003560e01c80636ed6a48d116100ec578063a9059cbb1161008a578063c8e0a45d11610064578063c8e0a45d1461059c578063dd62ed3e146105c5578063f2fde38b14610602578063fcfff16f1461062b576101a7565b8063a9059cbb14610506578063ae60148014610543578063b5973bd414610573576101a7565b80638da5cb5b116100c65780638da5cb5b1461045c5780638f937cc41461048757806395d89b411461049e578063a457c2d7146104c9576101a7565b80636ed6a48d146103f157806370a0823114610408578063715018a614610445576101a7565b8063217b6da611610159578063313ce56711610133578063313ce567146103375780633950935114610362578063620cc86c1461039f578063667f6526146103c8576101a7565b8063217b6da6146102ba57806323b872dd146102d15780632dc4f5e61461030e576101a7565b80630313fc4b146101ac57806306fdde03146101d5578063095ea7b31461020057806314d0c4341461023d57806318160ddd146102665780631c537de514610291576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101d360048036038101906101ce9190612ee0565b610642565b005b3480156101e157600080fd5b506101ea610747565b6040516101f79190612fb0565b60405180910390f35b34801561020c57600080fd5b5061022760048036038101906102229190613030565b6107d9565b604051610234919061308b565b60405180910390f35b34801561024957600080fd5b50610264600480360381019061025f91906130a6565b6107f7565b005b34801561027257600080fd5b5061027b610919565b60405161028891906130e2565b60405180910390f35b34801561029d57600080fd5b506102b860048036038101906102b3919061318e565b610923565b005b3480156102c657600080fd5b506102cf610a44565b005b3480156102dd57600080fd5b506102f860048036038101906102f391906131ee565b610b3f565b604051610305919061308b565b60405180910390f35b34801561031a57600080fd5b5061033560048036038101906103309190613241565b610c37565b005b34801561034357600080fd5b5061034c610d47565b604051610359919061329d565b60405180910390f35b34801561036e57600080fd5b5061038960048036038101906103849190613030565b610d50565b604051610396919061308b565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c191906130a6565b610dfc565b005b3480156103d457600080fd5b506103ef60048036038101906103ea9190612ee0565b610f1e565b005b3480156103fd57600080fd5b5061040661106d565b005b34801561041457600080fd5b5061042f600480360381019061042a91906132b8565b611183565b60405161043c91906130e2565b60405180910390f35b34801561045157600080fd5b5061045a6111cb565b005b34801561046857600080fd5b50610471611253565b60405161047e91906132f4565b60405180910390f35b34801561049357600080fd5b5061049c61127d565b005b3480156104aa57600080fd5b506104b361137b565b6040516104c09190612fb0565b60405180910390f35b3480156104d557600080fd5b506104f060048036038101906104eb9190613030565b61140d565b6040516104fd919061308b565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190613030565b6114f8565b60405161053a919061308b565b60405180910390f35b34801561054f57600080fd5b50610558611516565b60405161056a9695949392919061330f565b60405180910390f35b34801561057f57600080fd5b5061059a600480360381019061059591906133ae565b611545565b005b3480156105a857600080fd5b506105c360048036038101906105be91906132b8565b61163c565b005b3480156105d157600080fd5b506105ec60048036038101906105e791906133db565b6117e9565b6040516105f991906130e2565b60405180910390f35b34801561060e57600080fd5b50610629600480360381019061062491906132b8565b611870565b005b34801561063757600080fd5b50610640611967565b005b61064a611f35565b73ffffffffffffffffffffffffffffffffffffffff16610668611253565b73ffffffffffffffffffffffffffffffffffffffff16146106be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b590613467565b60405180910390fd5b612710826106ca610919565b6106d491906134b6565b6106de9190613527565b601081905550612710816106f0610919565b6106fa91906134b6565b6107049190613527565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb1828260405161073b929190613558565b60405180910390a15050565b606060038054610756906135b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610782906135b0565b80156107cf5780601f106107a4576101008083540402835291602001916107cf565b820191906000526020600020905b8154815290600101906020018083116107b257829003601f168201915b5050505050905090565b60006107ed6107e6611f35565b8484611f3d565b6001905092915050565b6107ff611f35565b73ffffffffffffffffffffffffffffffffffffffff1661081d611253565b73ffffffffffffffffffffffffffffffffffffffff1614610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a90613467565b60405180910390fd5b60018110156108b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ae90613653565b60405180910390fd5b6103e8816108c3610919565b6108cd91906134b6565b6108d79190613527565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f5460405161090e91906130e2565b60405180910390a150565b6000600254905090565b61092b611f35565b73ffffffffffffffffffffffffffffffffffffffff16610949611253565b73ffffffffffffffffffffffffffffffffffffffff161461099f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099690613467565b60405180910390fd5b60005b83839050811015610a3e5781601460008686858181106109c5576109c4613673565b5b90506020020160208101906109da91906132b8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610a36906136a2565b9150506109a2565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acb90613736565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610b3c573d6000803e3d6000fd5b50565b6000610b4c848484612106565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b97611f35565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e906137c8565b60405180910390fd5b610c2b85610c23611f35565b858403611f3d565b60019150509392505050565b610c3f611f35565b73ffffffffffffffffffffffffffffffffffffffff16610c5d611253565b73ffffffffffffffffffffffffffffffffffffffff1614610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90613467565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610d3b9291906137e8565b60405180910390a15050565b60006012905090565b6000610df2610d5d611f35565b848460016000610d6b611f35565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ded9190613811565b611f3d565b6001905092915050565b610e04611f35565b73ffffffffffffffffffffffffffffffffffffffff16610e22611253565b73ffffffffffffffffffffffffffffffffffffffff1614610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f90613467565b60405180910390fd5b6001811015610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb390613891565b60405180910390fd5b6103e881610ec8610919565b610ed291906134b6565b610edc9190613527565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610f1391906130e2565b60405180910390a150565b610f26611f35565b73ffffffffffffffffffffffffffffffffffffffff16610f44611253565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190613467565b60405180910390fd5b6019821115610fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd5906138fd565b60405180910390fd5b6019811115611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990613969565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051611061929190613558565b60405180910390a15050565b611075611f35565b73ffffffffffffffffffffffffffffffffffffffff16611093611253565b73ffffffffffffffffffffffffffffffffffffffff16146110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090613467565b60405180910390fd5b6110f1610919565b600e819055506110ff610919565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf61112e610919565b60405161113b91906130e2565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00161116c610919565b60405161117991906130e2565b60405180910390a1565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111d3611f35565b73ffffffffffffffffffffffffffffffffffffffff166111f1611253565b73ffffffffffffffffffffffffffffffffffffffff1614611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90613467565b60405180910390fd5b61125160006127c1565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061130b57506112dc611253565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190613736565b60405180910390fd5b600061135530611183565b905061136081612887565b6000479050600081111561137757611376612b29565b5b5050565b60606004805461138a906135b0565b80601f01602080910402602001604051908101604052809291908181526020018280546113b6906135b0565b80156114035780601f106113d857610100808354040283529160200191611403565b820191906000526020600020905b8154815290600101906020018083116113e657829003601f168201915b5050505050905090565b6000806001600061141c611f35565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d0906139fb565b60405180910390fd5b6114ed6114e4611f35565b85858403611f3d565b600191505092915050565b600061150c611505611f35565b8484612106565b6001905092915050565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b61154d611f35565b73ffffffffffffffffffffffffffffffffffffffff1661156b611253565b73ffffffffffffffffffffffffffffffffffffffff16146115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b890613467565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516116319190613a7a565b60405180910390a150565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c390613736565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161174491906132f4565b602060405180830381865afa158015611761573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117859190613aaa565b6040518363ffffffff1660e01b81526004016117a2929190613ad7565b6020604051808303816000875af11580156117c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e59190613b15565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611878611f35565b73ffffffffffffffffffffffffffffffffffffffff16611896611253565b73ffffffffffffffffffffffffffffffffffffffff16146118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e390613467565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361195b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195290613bb4565b60405180910390fd5b611964816127c1565b50565b61196f611f35565b73ffffffffffffffffffffffffffffffffffffffff1661198d611253565b73ffffffffffffffffffffffffffffffffffffffff16146119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90613467565b60405180910390fd5b601360149054906101000a900460ff1615611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a90613c20565b60405180910390fd5b734752ba5dbc23f44d87826276bf6fd6b1c372ad24601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611abc30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611ab7610919565b611f3d565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4d9190613c55565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfa9190613c55565b6040518363ffffffff1660e01b8152600401611c17929190613c82565b6020604051808303816000875af1158015611c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5a9190613c55565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611ce330611183565b600080611cee611253565b426040518863ffffffff1660e01b8152600401611d1096959493929190613ce6565b60606040518083038185885af1158015611d2e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d539190613d47565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611df5929190613d9a565b6020604051808303816000875af1158015611e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e389190613b15565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600f600a819055506028600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa390613e35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361201b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201290613ec7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120f991906130e2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c90613f59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90613feb565b60405180910390fd5b60008111612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e9061407d565b60405180910390fd5b6000612231611253565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561229f575061226f611253565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156122b85750601360159054906101000a900460ff16155b15612789576122e560646122d7600a5485612bbc90919063ffffffff16565b612bd290919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156123925750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156123e85750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124b557600e54821115612432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612429906140e9565b60405180910390fd5b600f548261243f85611183565b6124499190613811565b111561248a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248190614155565b60405180910390fd5b43600360085461249a9190613811565b5050600d60008154809291906124af906136a2565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561255d5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125bb57600f548261256f85611183565b6125799190613811565b11156125ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b190614155565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561264457503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612674576126716064612663600b5485612bbc90919063ffffffff16565b612bd290919063ffffffff16565b90505b600061267f30611183565b9050601360159054906101000a900460ff161580156126eb5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156127035750601360169054906101000a900460ff165b8015612710575060105481115b801561271f5750600c54600d54115b801561275557504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156127875761276e61276982601154612be8565b612887565b6000479050600081111561278557612784612b29565b5b505b505b600081111561279e5761279d843083612c01565b5b6127bb84846127b68486612e8090919063ffffffff16565b612c01565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff8111156128e8576128e7614175565b5b6040519080825280602002602001820160405280156129165781602001602082028036833780820191505090505b509050308160008151811061292e5761292d613673565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f99190613c55565b81600181518110612a0d57612a0c613673565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a7430601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f3d565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612ad8959493929190614262565b600060405180830381600087803b158015612af257600080fd5b505af1158015612b06573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612b71906142ed565b60006040518083038185875af1925050503d8060008114612bae576040519150601f19603f3d011682016040523d82523d6000602084013e612bb3565b606091505b50508091505050565b60008183612bca91906134b6565b905092915050565b60008183612be09190613527565b905092915050565b6000818311612bf75782612bf9565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6790613f59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd690613feb565b60405180910390fd5b612cea838383612e96565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6790614374565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e039190613811565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e6791906130e2565b60405180910390a3612e7a848484612e9b565b50505050565b60008183612e8e9190614394565b905092915050565b505050565b505050565b600080fd5b600080fd5b6000819050919050565b612ebd81612eaa565b8114612ec857600080fd5b50565b600081359050612eda81612eb4565b92915050565b60008060408385031215612ef757612ef6612ea0565b5b6000612f0585828601612ecb565b9250506020612f1685828601612ecb565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f5a578082015181840152602081019050612f3f565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f8282612f20565b612f8c8185612f2b565b9350612f9c818560208601612f3c565b612fa581612f66565b840191505092915050565b60006020820190508181036000830152612fca8184612f77565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ffd82612fd2565b9050919050565b61300d81612ff2565b811461301857600080fd5b50565b60008135905061302a81613004565b92915050565b6000806040838503121561304757613046612ea0565b5b60006130558582860161301b565b925050602061306685828601612ecb565b9150509250929050565b60008115159050919050565b61308581613070565b82525050565b60006020820190506130a0600083018461307c565b92915050565b6000602082840312156130bc576130bb612ea0565b5b60006130ca84828501612ecb565b91505092915050565b6130dc81612eaa565b82525050565b60006020820190506130f760008301846130d3565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613122576131216130fd565b5b8235905067ffffffffffffffff81111561313f5761313e613102565b5b60208301915083602082028301111561315b5761315a613107565b5b9250929050565b61316b81613070565b811461317657600080fd5b50565b60008135905061318881613162565b92915050565b6000806000604084860312156131a7576131a6612ea0565b5b600084013567ffffffffffffffff8111156131c5576131c4612ea5565b5b6131d18682870161310c565b935093505060206131e486828701613179565b9150509250925092565b60008060006060848603121561320757613206612ea0565b5b60006132158682870161301b565b93505060206132268682870161301b565b925050604061323786828701612ecb565b9150509250925092565b6000806040838503121561325857613257612ea0565b5b60006132668582860161301b565b925050602061327785828601613179565b9150509250929050565b600060ff82169050919050565b61329781613281565b82525050565b60006020820190506132b2600083018461328e565b92915050565b6000602082840312156132ce576132cd612ea0565b5b60006132dc8482850161301b565b91505092915050565b6132ee81612ff2565b82525050565b600060208201905061330960008301846132e5565b92915050565b600060c08201905061332460008301896130d3565b61333160208301886130d3565b61333e60408301876130d3565b61334b60608301866130d3565b61335860808301856130d3565b61336560a08301846130d3565b979650505050505050565b600061337b82612fd2565b9050919050565b61338b81613370565b811461339657600080fd5b50565b6000813590506133a881613382565b92915050565b6000602082840312156133c4576133c3612ea0565b5b60006133d284828501613399565b91505092915050565b600080604083850312156133f2576133f1612ea0565b5b60006134008582860161301b565b92505060206134118582860161301b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613451602083612f2b565b915061345c8261341b565b602082019050919050565b6000602082019050818103600083015261348081613444565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134c182612eaa565b91506134cc83612eaa565b92508282026134da81612eaa565b915082820484148315176134f1576134f0613487565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061353282612eaa565b915061353d83612eaa565b92508261354d5761354c6134f8565b5b828204905092915050565b600060408201905061356d60008301856130d3565b61357a60208301846130d3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135c857607f821691505b6020821081036135db576135da613581565b5b50919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061363d602283612f2b565b9150613648826135e1565b604082019050919050565b6000602082019050818103600083015261366c81613630565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006136ad82612eaa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136df576136de613487565b5b600182019050919050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b6000613720601d83612f2b565b915061372b826136ea565b602082019050919050565b6000602082019050818103600083015261374f81613713565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006137b2602883612f2b565b91506137bd82613756565b604082019050919050565b600060208201905081810360008301526137e1816137a5565b9050919050565b60006040820190506137fd60008301856132e5565b61380a602083018461307c565b9392505050565b600061381c82612eaa565b915061382783612eaa565b925082820190508082111561383f5761383e613487565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b600061387b601e83612f2b565b915061388682613845565b602082019050919050565b600060208201905081810360008301526138aa8161386e565b9050919050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b60006138e7601583612f2b565b91506138f2826138b1565b602082019050919050565b60006020820190508181036000830152613916816138da565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b6000613953601683612f2b565b915061395e8261391d565b602082019050919050565b6000602082019050818103600083015261398281613946565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006139e5602583612f2b565b91506139f082613989565b604082019050919050565b60006020820190508181036000830152613a14816139d8565b9050919050565b6000819050919050565b6000613a40613a3b613a3684612fd2565b613a1b565b612fd2565b9050919050565b6000613a5282613a25565b9050919050565b6000613a6482613a47565b9050919050565b613a7481613a59565b82525050565b6000602082019050613a8f6000830184613a6b565b92915050565b600081519050613aa481612eb4565b92915050565b600060208284031215613ac057613abf612ea0565b5b6000613ace84828501613a95565b91505092915050565b6000604082019050613aec6000830185613a6b565b613af960208301846130d3565b9392505050565b600081519050613b0f81613162565b92915050565b600060208284031215613b2b57613b2a612ea0565b5b6000613b3984828501613b00565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b9e602683612f2b565b9150613ba982613b42565b604082019050919050565b60006020820190508181036000830152613bcd81613b91565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000613c0a601783612f2b565b9150613c1582613bd4565b602082019050919050565b60006020820190508181036000830152613c3981613bfd565b9050919050565b600081519050613c4f81613004565b92915050565b600060208284031215613c6b57613c6a612ea0565b5b6000613c7984828501613c40565b91505092915050565b6000604082019050613c9760008301856132e5565b613ca460208301846132e5565b9392505050565b6000819050919050565b6000613cd0613ccb613cc684613cab565b613a1b565b612eaa565b9050919050565b613ce081613cb5565b82525050565b600060c082019050613cfb60008301896132e5565b613d0860208301886130d3565b613d156040830187613cd7565b613d226060830186613cd7565b613d2f60808301856132e5565b613d3c60a08301846130d3565b979650505050505050565b600080600060608486031215613d6057613d5f612ea0565b5b6000613d6e86828701613a95565b9350506020613d7f86828701613a95565b9250506040613d9086828701613a95565b9150509250925092565b6000604082019050613daf60008301856132e5565b613dbc60208301846130d3565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e1f602483612f2b565b9150613e2a82613dc3565b604082019050919050565b60006020820190508181036000830152613e4e81613e12565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613eb1602283612f2b565b9150613ebc82613e55565b604082019050919050565b60006020820190508181036000830152613ee081613ea4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f43602583612f2b565b9150613f4e82613ee7565b604082019050919050565b60006020820190508181036000830152613f7281613f36565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613fd5602383612f2b565b9150613fe082613f79565b604082019050919050565b6000602082019050818103600083015261400481613fc8565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614067602983612f2b565b91506140728261400b565b604082019050919050565b600060208201905081810360008301526140968161405a565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b60006140d3601b83612f2b565b91506140de8261409d565b602082019050919050565b60006020820190508181036000830152614102816140c6565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b600061413f601a83612f2b565b915061414a82614109565b602082019050919050565b6000602082019050818103600083015261416e81614132565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6141d981612ff2565b82525050565b60006141eb83836141d0565b60208301905092915050565b6000602082019050919050565b600061420f826141a4565b61421981856141af565b9350614224836141c0565b8060005b8381101561425557815161423c88826141df565b9750614247836141f7565b925050600181019050614228565b5085935050505092915050565b600060a08201905061427760008301886130d3565b6142846020830187613cd7565b81810360408301526142968186614204565b90506142a560608301856132e5565b6142b260808301846130d3565b9695505050505050565b600081905092915050565b50565b60006142d76000836142bc565b91506142e2826142c7565b600082019050919050565b60006142f8826142ca565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061435e602683612f2b565b915061436982614302565b604082019050919050565b6000602082019050818103600083015261438d81614351565b9050919050565b600061439f82612eaa565b91506143aa83612eaa565b92508282039050818111156143c2576143c1613487565b5b9291505056fea2646970667358221220dd66147193c6a60c7655917265d5f4651ced99020e27be64da675ec892069d6f64736f6c63430008130033
Deployed Bytecode
0x6080604052600436106101a05760003560e01c80636ed6a48d116100ec578063a9059cbb1161008a578063c8e0a45d11610064578063c8e0a45d1461059c578063dd62ed3e146105c5578063f2fde38b14610602578063fcfff16f1461062b576101a7565b8063a9059cbb14610506578063ae60148014610543578063b5973bd414610573576101a7565b80638da5cb5b116100c65780638da5cb5b1461045c5780638f937cc41461048757806395d89b411461049e578063a457c2d7146104c9576101a7565b80636ed6a48d146103f157806370a0823114610408578063715018a614610445576101a7565b8063217b6da611610159578063313ce56711610133578063313ce567146103375780633950935114610362578063620cc86c1461039f578063667f6526146103c8576101a7565b8063217b6da6146102ba57806323b872dd146102d15780632dc4f5e61461030e576101a7565b80630313fc4b146101ac57806306fdde03146101d5578063095ea7b31461020057806314d0c4341461023d57806318160ddd146102665780631c537de514610291576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101d360048036038101906101ce9190612ee0565b610642565b005b3480156101e157600080fd5b506101ea610747565b6040516101f79190612fb0565b60405180910390f35b34801561020c57600080fd5b5061022760048036038101906102229190613030565b6107d9565b604051610234919061308b565b60405180910390f35b34801561024957600080fd5b50610264600480360381019061025f91906130a6565b6107f7565b005b34801561027257600080fd5b5061027b610919565b60405161028891906130e2565b60405180910390f35b34801561029d57600080fd5b506102b860048036038101906102b3919061318e565b610923565b005b3480156102c657600080fd5b506102cf610a44565b005b3480156102dd57600080fd5b506102f860048036038101906102f391906131ee565b610b3f565b604051610305919061308b565b60405180910390f35b34801561031a57600080fd5b5061033560048036038101906103309190613241565b610c37565b005b34801561034357600080fd5b5061034c610d47565b604051610359919061329d565b60405180910390f35b34801561036e57600080fd5b5061038960048036038101906103849190613030565b610d50565b604051610396919061308b565b60405180910390f35b3480156103ab57600080fd5b506103c660048036038101906103c191906130a6565b610dfc565b005b3480156103d457600080fd5b506103ef60048036038101906103ea9190612ee0565b610f1e565b005b3480156103fd57600080fd5b5061040661106d565b005b34801561041457600080fd5b5061042f600480360381019061042a91906132b8565b611183565b60405161043c91906130e2565b60405180910390f35b34801561045157600080fd5b5061045a6111cb565b005b34801561046857600080fd5b50610471611253565b60405161047e91906132f4565b60405180910390f35b34801561049357600080fd5b5061049c61127d565b005b3480156104aa57600080fd5b506104b361137b565b6040516104c09190612fb0565b60405180910390f35b3480156104d557600080fd5b506104f060048036038101906104eb9190613030565b61140d565b6040516104fd919061308b565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190613030565b6114f8565b60405161053a919061308b565b60405180910390f35b34801561054f57600080fd5b50610558611516565b60405161056a9695949392919061330f565b60405180910390f35b34801561057f57600080fd5b5061059a600480360381019061059591906133ae565b611545565b005b3480156105a857600080fd5b506105c360048036038101906105be91906132b8565b61163c565b005b3480156105d157600080fd5b506105ec60048036038101906105e791906133db565b6117e9565b6040516105f991906130e2565b60405180910390f35b34801561060e57600080fd5b50610629600480360381019061062491906132b8565b611870565b005b34801561063757600080fd5b50610640611967565b005b61064a611f35565b73ffffffffffffffffffffffffffffffffffffffff16610668611253565b73ffffffffffffffffffffffffffffffffffffffff16146106be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b590613467565b60405180910390fd5b612710826106ca610919565b6106d491906134b6565b6106de9190613527565b601081905550612710816106f0610919565b6106fa91906134b6565b6107049190613527565b6011819055507f2b3f4c022d9943b151090e389857495bb9d8493714259cc19a540f5a11475fb1828260405161073b929190613558565b60405180910390a15050565b606060038054610756906135b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610782906135b0565b80156107cf5780601f106107a4576101008083540402835291602001916107cf565b820191906000526020600020905b8154815290600101906020018083116107b257829003601f168201915b5050505050905090565b60006107ed6107e6611f35565b8484611f3d565b6001905092915050565b6107ff611f35565b73ffffffffffffffffffffffffffffffffffffffff1661081d611253565b73ffffffffffffffffffffffffffffffffffffffff1614610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a90613467565b60405180910390fd5b60018110156108b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108ae90613653565b60405180910390fd5b6103e8816108c3610919565b6108cd91906134b6565b6108d79190613527565b600f819055507f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e001600f5460405161090e91906130e2565b60405180910390a150565b6000600254905090565b61092b611f35565b73ffffffffffffffffffffffffffffffffffffffff16610949611253565b73ffffffffffffffffffffffffffffffffffffffff161461099f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099690613467565b60405180910390fd5b60005b83839050811015610a3e5781601460008686858181106109c5576109c4613673565b5b90506020020160208101906109da91906132b8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508080610a36906136a2565b9150506109a2565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610acb90613736565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610b3c573d6000803e3d6000fd5b50565b6000610b4c848484612106565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b97611f35565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0e906137c8565b60405180910390fd5b610c2b85610c23611f35565b858403611f3d565b60019150509392505050565b610c3f611f35565b73ffffffffffffffffffffffffffffffffffffffff16610c5d611253565b73ffffffffffffffffffffffffffffffffffffffff1614610cb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610caa90613467565b60405180910390fd5b80600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2d43abd87b27cee7b0aa8c6f7e0b4a3247b683262a83cbc2318b0df398a49aa98282604051610d3b9291906137e8565b60405180910390a15050565b60006012905090565b6000610df2610d5d611f35565b848460016000610d6b611f35565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ded9190613811565b611f3d565b6001905092915050565b610e04611f35565b73ffffffffffffffffffffffffffffffffffffffff16610e22611253565b73ffffffffffffffffffffffffffffffffffffffff1614610e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6f90613467565b60405180910390fd5b6001811015610ebc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb390613891565b60405180910390fd5b6103e881610ec8610919565b610ed291906134b6565b610edc9190613527565b600e819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf600e54604051610f1391906130e2565b60405180910390a150565b610f26611f35565b73ffffffffffffffffffffffffffffffffffffffff16610f44611253565b73ffffffffffffffffffffffffffffffffffffffff1614610f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9190613467565b60405180910390fd5b6019821115610fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd5906138fd565b60405180910390fd5b6019811115611022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101990613969565b60405180910390fd5b81600a8190555080600b819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a18282604051611061929190613558565b60405180910390a15050565b611075611f35565b73ffffffffffffffffffffffffffffffffffffffff16611093611253565b73ffffffffffffffffffffffffffffffffffffffff16146110e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e090613467565b60405180910390fd5b6110f1610919565b600e819055506110ff610919565b600f819055507f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf61112e610919565b60405161113b91906130e2565b60405180910390a17f4b39c36d20c57d220f61fd25c4349d4435cc03ef6c2a680942f15333c3c3e00161116c610919565b60405161117991906130e2565b60405180910390a1565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111d3611f35565b73ffffffffffffffffffffffffffffffffffffffff166111f1611253565b73ffffffffffffffffffffffffffffffffffffffff1614611247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123e90613467565b60405180910390fd5b61125160006127c1565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061130b57506112dc611253565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61134a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134190613736565b60405180910390fd5b600061135530611183565b905061136081612887565b6000479050600081111561137757611376612b29565b5b5050565b60606004805461138a906135b0565b80601f01602080910402602001604051908101604052809291908181526020018280546113b6906135b0565b80156114035780601f106113d857610100808354040283529160200191611403565b820191906000526020600020905b8154815290600101906020018083116113e657829003601f168201915b5050505050905090565b6000806001600061141c611f35565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156114d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d0906139fb565b60405180910390fd5b6114ed6114e4611f35565b85858403611f3d565b600191505092915050565b600061150c611505611f35565b8484612106565b6001905092915050565b600080600080600080600a54600b54600e54600f54601054601154955095509550955095509550909192939495565b61154d611f35565b73ffffffffffffffffffffffffffffffffffffffff1661156b611253565b73ffffffffffffffffffffffffffffffffffffffff16146115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b890613467565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f27aae5db36d94179909d019ae0b1ac7c16d96d953148f63c0f6a0a9c8ead79ee816040516116319190613a7a565b60405180910390a150565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c390613736565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161174491906132f4565b602060405180830381865afa158015611761573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117859190613aaa565b6040518363ffffffff1660e01b81526004016117a2929190613ad7565b6020604051808303816000875af11580156117c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117e59190613b15565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611878611f35565b73ffffffffffffffffffffffffffffffffffffffff16611896611253565b73ffffffffffffffffffffffffffffffffffffffff16146118ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e390613467565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361195b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195290613bb4565b60405180910390fd5b611964816127c1565b50565b61196f611f35565b73ffffffffffffffffffffffffffffffffffffffff1661198d611253565b73ffffffffffffffffffffffffffffffffffffffff16146119e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119da90613467565b60405180910390fd5b601360149054906101000a900460ff1615611a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2a90613c20565b60405180910390fd5b734752ba5dbc23f44d87826276bf6fd6b1c372ad24601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611abc30601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611ab7610919565b611f3d565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4d9190613c55565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfa9190613c55565b6040518363ffffffff1660e01b8152600401611c17929190613c82565b6020604051808303816000875af1158015611c36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c5a9190613c55565b601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7194730611ce330611183565b600080611cee611253565b426040518863ffffffff1660e01b8152600401611d1096959493929190613ce6565b60606040518083038185885af1158015611d2e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d539190613d47565b505050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b8152600401611df5929190613d9a565b6020604051808303816000875af1158015611e14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e389190613b15565b506001601360166101000a81548160ff0219169083151502179055506001601360146101000a81548160ff0219169083151502179055504360088190555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600f600a819055506028600b819055507fea4359d5c4b8f0945a64ab9c37fe830b3407d45e0e6e6f84275977a570457d6f60405160405180910390a1565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa390613e35565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361201b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201290613ec7565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120f991906130e2565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216c90613f59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90613feb565b60405180910390fd5b60008111612227576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221e9061407d565b60405180910390fd5b6000612231611253565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561229f575061226f611253565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156122b85750601360159054906101000a900460ff16155b15612789576122e560646122d7600a5485612bbc90919063ffffffff16565b612bd290919063ffffffff16565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156123925750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156123e85750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124b557600e54821115612432576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612429906140e9565b60405180910390fd5b600f548261243f85611183565b6124499190613811565b111561248a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248190614155565b60405180910390fd5b43600360085461249a9190613811565b5050600d60008154809291906124af906136a2565b91905055505b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561255d5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125bb57600f548261256f85611183565b6125799190613811565b11156125ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b190614155565b60405180910390fd5b5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561264457503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15612674576126716064612663600b5485612bbc90919063ffffffff16565b612bd290919063ffffffff16565b90505b600061267f30611183565b9050601360159054906101000a900460ff161580156126eb5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156127035750601360169054906101000a900460ff165b8015612710575060105481115b801561271f5750600c54600d54115b801561275557504367ffffffffffffffff16600960009054906101000a900467ffffffffffffffff1667ffffffffffffffff1614155b156127875761276e61276982601154612be8565b612887565b6000479050600081111561278557612784612b29565b5b505b505b600081111561279e5761279d843083612c01565b5b6127bb84846127b68486612e8090919063ffffffff16565b612c01565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601360156101000a81548160ff02191690831515021790555043600960006101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600267ffffffffffffffff8111156128e8576128e7614175565b5b6040519080825280602002602001820160405280156129165781602001602082028036833780820191505090505b509050308160008151811061292e5761292d613673565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f99190613c55565b81600181518110612a0d57612a0c613673565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612a7430601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f3d565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612ad8959493929190614262565b600060405180830381600087803b158015612af257600080fd5b505af1158015612b06573d6000803e3d6000fd5b50505050506000601360156101000a81548160ff02191690831515021790555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612b71906142ed565b60006040518083038185875af1925050503d8060008114612bae576040519150601f19603f3d011682016040523d82523d6000602084013e612bb3565b606091505b50508091505050565b60008183612bca91906134b6565b905092915050565b60008183612be09190613527565b905092915050565b6000818311612bf75782612bf9565b815b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c6790613f59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd690613feb565b60405180910390fd5b612cea838383612e96565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6790614374565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e039190613811565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e6791906130e2565b60405180910390a3612e7a848484612e9b565b50505050565b60008183612e8e9190614394565b905092915050565b505050565b505050565b600080fd5b600080fd5b6000819050919050565b612ebd81612eaa565b8114612ec857600080fd5b50565b600081359050612eda81612eb4565b92915050565b60008060408385031215612ef757612ef6612ea0565b5b6000612f0585828601612ecb565b9250506020612f1685828601612ecb565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612f5a578082015181840152602081019050612f3f565b60008484015250505050565b6000601f19601f8301169050919050565b6000612f8282612f20565b612f8c8185612f2b565b9350612f9c818560208601612f3c565b612fa581612f66565b840191505092915050565b60006020820190508181036000830152612fca8184612f77565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612ffd82612fd2565b9050919050565b61300d81612ff2565b811461301857600080fd5b50565b60008135905061302a81613004565b92915050565b6000806040838503121561304757613046612ea0565b5b60006130558582860161301b565b925050602061306685828601612ecb565b9150509250929050565b60008115159050919050565b61308581613070565b82525050565b60006020820190506130a0600083018461307c565b92915050565b6000602082840312156130bc576130bb612ea0565b5b60006130ca84828501612ecb565b91505092915050565b6130dc81612eaa565b82525050565b60006020820190506130f760008301846130d3565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112613122576131216130fd565b5b8235905067ffffffffffffffff81111561313f5761313e613102565b5b60208301915083602082028301111561315b5761315a613107565b5b9250929050565b61316b81613070565b811461317657600080fd5b50565b60008135905061318881613162565b92915050565b6000806000604084860312156131a7576131a6612ea0565b5b600084013567ffffffffffffffff8111156131c5576131c4612ea5565b5b6131d18682870161310c565b935093505060206131e486828701613179565b9150509250925092565b60008060006060848603121561320757613206612ea0565b5b60006132158682870161301b565b93505060206132268682870161301b565b925050604061323786828701612ecb565b9150509250925092565b6000806040838503121561325857613257612ea0565b5b60006132668582860161301b565b925050602061327785828601613179565b9150509250929050565b600060ff82169050919050565b61329781613281565b82525050565b60006020820190506132b2600083018461328e565b92915050565b6000602082840312156132ce576132cd612ea0565b5b60006132dc8482850161301b565b91505092915050565b6132ee81612ff2565b82525050565b600060208201905061330960008301846132e5565b92915050565b600060c08201905061332460008301896130d3565b61333160208301886130d3565b61333e60408301876130d3565b61334b60608301866130d3565b61335860808301856130d3565b61336560a08301846130d3565b979650505050505050565b600061337b82612fd2565b9050919050565b61338b81613370565b811461339657600080fd5b50565b6000813590506133a881613382565b92915050565b6000602082840312156133c4576133c3612ea0565b5b60006133d284828501613399565b91505092915050565b600080604083850312156133f2576133f1612ea0565b5b60006134008582860161301b565b92505060206134118582860161301b565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613451602083612f2b565b915061345c8261341b565b602082019050919050565b6000602082019050818103600083015261348081613444565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006134c182612eaa565b91506134cc83612eaa565b92508282026134da81612eaa565b915082820484148315176134f1576134f0613487565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061353282612eaa565b915061353d83612eaa565b92508261354d5761354c6134f8565b5b828204905092915050565b600060408201905061356d60008301856130d3565b61357a60208301846130d3565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806135c857607f821691505b6020821081036135db576135da613581565b5b50919050565b7f4d61782077616c6c65742063616e74206265206c6f776572207468616e20302e60008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b600061363d602283612f2b565b9150613648826135e1565b604082019050919050565b6000602082019050818103600083015261366c81613630565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006136ad82612eaa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036136df576136de613487565b5b600182019050919050565b7f4f6e6c79206665652072656365697665722063616e2074726967676572000000600082015250565b6000613720601d83612f2b565b915061372b826136ea565b602082019050919050565b6000602082019050818103600083015261374f81613713565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006137b2602883612f2b565b91506137bd82613756565b604082019050919050565b600060208201905081810360008301526137e1816137a5565b9050919050565b60006040820190506137fd60008301856132e5565b61380a602083018461307c565b9392505050565b600061381c82612eaa565b915061382783612eaa565b925082820190508082111561383f5761383e613487565b5b92915050565b7f4d61782074782063616e74206265206c6f776572207468616e20302e31250000600082015250565b600061387b601e83612f2b565b915061388682613845565b602082019050919050565b600060208201905081810360008301526138aa8161386e565b9050919050565b7f496e76616c696420627579207461782076616c75650000000000000000000000600082015250565b60006138e7601583612f2b565b91506138f2826138b1565b602082019050919050565b60006020820190508181036000830152613916816138da565b9050919050565b7f496e76616c69642073656c6c207461782076616c756500000000000000000000600082015250565b6000613953601683612f2b565b915061395e8261391d565b602082019050919050565b6000602082019050818103600083015261398281613946565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006139e5602583612f2b565b91506139f082613989565b604082019050919050565b60006020820190508181036000830152613a14816139d8565b9050919050565b6000819050919050565b6000613a40613a3b613a3684612fd2565b613a1b565b612fd2565b9050919050565b6000613a5282613a25565b9050919050565b6000613a6482613a47565b9050919050565b613a7481613a59565b82525050565b6000602082019050613a8f6000830184613a6b565b92915050565b600081519050613aa481612eb4565b92915050565b600060208284031215613ac057613abf612ea0565b5b6000613ace84828501613a95565b91505092915050565b6000604082019050613aec6000830185613a6b565b613af960208301846130d3565b9392505050565b600081519050613b0f81613162565b92915050565b600060208284031215613b2b57613b2a612ea0565b5b6000613b3984828501613b00565b91505092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b9e602683612f2b565b9150613ba982613b42565b604082019050919050565b60006020820190508181036000830152613bcd81613b91565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e000000000000000000600082015250565b6000613c0a601783612f2b565b9150613c1582613bd4565b602082019050919050565b60006020820190508181036000830152613c3981613bfd565b9050919050565b600081519050613c4f81613004565b92915050565b600060208284031215613c6b57613c6a612ea0565b5b6000613c7984828501613c40565b91505092915050565b6000604082019050613c9760008301856132e5565b613ca460208301846132e5565b9392505050565b6000819050919050565b6000613cd0613ccb613cc684613cab565b613a1b565b612eaa565b9050919050565b613ce081613cb5565b82525050565b600060c082019050613cfb60008301896132e5565b613d0860208301886130d3565b613d156040830187613cd7565b613d226060830186613cd7565b613d2f60808301856132e5565b613d3c60a08301846130d3565b979650505050505050565b600080600060608486031215613d6057613d5f612ea0565b5b6000613d6e86828701613a95565b9350506020613d7f86828701613a95565b9250506040613d9086828701613a95565b9150509250925092565b6000604082019050613daf60008301856132e5565b613dbc60208301846130d3565b9392505050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e1f602483612f2b565b9150613e2a82613dc3565b604082019050919050565b60006020820190508181036000830152613e4e81613e12565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613eb1602283612f2b565b9150613ebc82613e55565b604082019050919050565b60006020820190508181036000830152613ee081613ea4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f43602583612f2b565b9150613f4e82613ee7565b604082019050919050565b60006020820190508181036000830152613f7281613f36565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613fd5602383612f2b565b9150613fe082613f79565b604082019050919050565b6000602082019050818103600083015261400481613fc8565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000614067602983612f2b565b91506140728261400b565b604082019050919050565b600060208201905081810360008301526140968161405a565b9050919050565b7f4578636565647320746865205f7478416d6f756e744c696d69742e0000000000600082015250565b60006140d3601b83612f2b565b91506140de8261409d565b602082019050919050565b60006020820190508181036000830152614102816140c6565b9050919050565b7f4578636565647320746865206d617857616c6c657453697a652e000000000000600082015250565b600061413f601a83612f2b565b915061414a82614109565b602082019050919050565b6000602082019050818103600083015261416e81614132565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6141d981612ff2565b82525050565b60006141eb83836141d0565b60208301905092915050565b6000602082019050919050565b600061420f826141a4565b61421981856141af565b9350614224836141c0565b8060005b8381101561425557815161423c88826141df565b9750614247836141f7565b925050600181019050614228565b5085935050505092915050565b600060a08201905061427760008301886130d3565b6142846020830187613cd7565b81810360408301526142968186614204565b90506142a560608301856132e5565b6142b260808301846130d3565b9695505050505050565b600081905092915050565b50565b60006142d76000836142bc565b91506142e2826142c7565b600082019050919050565b60006142f8826142ca565b9150819050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061435e602683612f2b565b915061436982614302565b604082019050919050565b6000602082019050818103600083015261438d81614351565b9050919050565b600061439f82612eaa565b91506143aa83612eaa565b92508282039050818111156143c2576143c1613487565b5b9291505056fea2646970667358221220dd66147193c6a60c7655917265d5f4651ced99020e27be64da675ec892069d6f64736f6c63430008130033
Deployed Bytecode Sourcemap
25797:9632:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29469:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11395:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13628:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29203:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12515:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30753:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30335:168;;;;;;;;;;;;;:::i;:::-;;14300:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30978:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12357:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15234:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28957:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30037:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29793:236;;;;;;;;;;;;;:::i;:::-;;12686:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22734:103;;;;;;;;;;;;;:::i;:::-;;22083:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34272:436;;;;;;;;;;;;;:::i;:::-;;11614:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16023:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13042:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31157:485;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;28781:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30513:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13305:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22992:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27749:1024;;;;;;;;;;;;;:::i;:::-;;29469:310;22314:12;:10;:12::i;:::-;22303:23;;:7;:5;:7::i;:::-;:23;;;22295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29643:5:::1;29623:16;29607:13;:11;:13::i;:::-;:32;;;;:::i;:::-;29606:42;;;;:::i;:::-;29591:12;:57;;;;29705:5;29691:10;29675:13;:11;:13::i;:::-;:26;;;;:::i;:::-;29674:36;;;;:::i;:::-;29659:12;:51;;;;29726:45;29742:16;29760:10;29726:45;;;;;;;:::i;:::-;;;;;;;;29469:310:::0;;:::o;11395:100::-;11449:13;11482:5;11475:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11395:100;:::o;13628:194::-;13736:4;13753:39;13762:12;:10;:12::i;:::-;13776:7;13785:6;13753:8;:39::i;:::-;13810:4;13803:11;;13628:194;;;;:::o;29203:258::-;22314:12;:10;:12::i;:::-;22303:23;;:7;:5;:7::i;:::-;:23;;;22295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29290:1:::1;29278:8;:13;;29270:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29391:4;29379:8;29363:13;:11;:13::i;:::-;:24;;;;:::i;:::-;29362:33;;;;:::i;:::-;29341:18;:54;;;;29411:42;29434:18;;29411:42;;;;;;:::i;:::-;;;;;;;;29203:258:::0;:::o;12515:108::-;12576:7;12603:12;;12596:19;;12515:108;:::o;30753:217::-;22314:12;:10;:12::i;:::-;22303:23;;:7;:5;:7::i;:::-;:23;;;22295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30871:9:::1;30866:97;30890:6;;:13;;30886:1;:17;30866:97;;;30945:6;30925;:17;30932:6;;30939:1;30932:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30925:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;30905:3;;;;;:::i;:::-;;;;30866:97;;;;30753:217:::0;;;:::o;30335:168::-;30398:10;;;;;;;;;;;30384:24;;:10;:24;;;30376:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30453:10;;;;;;;;;;;:19;;:42;30473:21;30453:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30335:168::o;14300:529::-;14440:4;14457:36;14467:6;14475:9;14486:6;14457:9;:36::i;:::-;14506:24;14533:11;:19;14545:6;14533:19;;;;;;;;;;;;;;;:33;14553:12;:10;:12::i;:::-;14533:33;;;;;;;;;;;;;;;;14506:60;;14619:6;14599:16;:26;;14577:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;14729:57;14738:6;14746:12;:10;:12::i;:::-;14779:6;14760:16;:25;14729:8;:57::i;:::-;14817:4;14810:11;;;14300:529;;;;;:::o;30978:171::-;22314:12;:10;:12::i;:::-;22303:23;;:7;:5;:7::i;:::-;:23;;;22295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31087:6:::1;31057:18;:27;31076:7;31057:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;31109:32;31125:7;31134:6;31109:32;;;;;;;:::i;:::-;;;;;;;;30978:171:::0;;:::o;12357:93::-;12415:5;12440:2;12433:9;;12357:93;:::o;15234:290::-;15347:4;15364:130;15387:12;:10;:12::i;:::-;15414:7;15473:10;15436:11;:25;15448:12;:10;:12::i;:::-;15436:25;;;;;;;;;;;;;;;:34;15462:7;15436:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;15364:8;:130::i;:::-;15512:4;15505:11;;15234:290;;;;:::o;28957:238::-;22314:12;:10;:12::i;:::-;22303:23;;:7;:5;:7::i;:::-;:23;;;22295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29040:1:::1;29028:8;:13;;29020:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;29133:4;29121:8;29105:13;:11;:13::i;:::-;:24;;;;:::i;:::-;29104:33;;;;:::i;:::-;29087:14;:50;;;;29153:34;29172:14;;29153:34;;;;;;:::i;:::-;;;;;;;;28957:238:::0;:::o;30037:290::-;22314:12;:10;:12::i;:::-;22303:23;;:7;:5;:7::i;:::-;:23;;;22295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30134:2:::1;30124:6;:12;;30116:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;30192:2;30181:7;:13;;30173:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;30241:6;30232;:15;;;;30268:7;30258;:17;;;;30291:28;30303:6;30311:7;30291:28;;;;;;;:::i;:::-;;;;;;;;30037:290:::0;;:::o;29793:236::-;22314:12;:10;:12::i;:::-;22303:23;;:7;:5;:7::i;:::-;:23;;;22295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29861:13:::1;:11;:13::i;:::-;29844:14;:30;;;;29906:13;:11;:13::i;:::-;29885:18;:34;;;;29935:33;29954:13;:11;:13::i;:::-;29935:33;;;;;;:::i;:::-;;;;;;;;29984:37;30007:13;:11;:13::i;:::-;29984:37;;;;;;:::i;:::-;;;;;;;;29793:236::o:0;12686:143::-;12776:7;12803:9;:18;12813:7;12803:18;;;;;;;;;;;;;;;;12796:25;;12686:143;;;:::o;22734:103::-;22314:12;:10;:12::i;:::-;22303:23;;:7;:5;:7::i;:::-;:23;;;22295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22799:30:::1;22826:1;22799:18;:30::i;:::-;22734:103::o:0;22083:87::-;22129:7;22156:6;;;;;;;;;;;22149:13;;22083:87;:::o;34272:436::-;34351:10;;;;;;;;;;;34337:24;;:10;:24;;;:49;;;;34379:7;:5;:7::i;:::-;34365:21;;:10;:21;;;34337:49;34315:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;34454:28;34485:24;34503:4;34485:9;:24::i;:::-;34454:55;;34522:38;34539:20;34522:16;:38::i;:::-;34571:26;34600:21;34571:50;;34657:1;34636:18;:22;34632:69;;;34675:14;:12;:14::i;:::-;34632:69;34304:404;;34272:436::o;11614:104::-;11670:13;11703:7;11696:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11614:104;:::o;16023:475::-;16141:4;16158:24;16185:11;:25;16197:12;:10;:12::i;:::-;16185:25;;;;;;;;;;;;;;;:34;16211:7;16185:34;;;;;;;;;;;;;;;;16158:61;;16272:15;16252:16;:35;;16230:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;16388:67;16397:12;:10;:12::i;:::-;16411:7;16439:15;16420:16;:34;16388:8;:67::i;:::-;16486:4;16479:11;;;16023:475;;;;:::o;13042:200::-;13153:4;13170:42;13180:12;:10;:12::i;:::-;13194:9;13205:6;13170:9;:42::i;:::-;13230:4;13223:11;;13042:200;;;;:::o;31157:485::-;31241:15;31271:16;31302:19;31336:21;31372:24;31411:18;31479:6;;31500:7;;31522:14;;31551:18;;31584:12;;31611;;31457:177;;;;;;;;;;;;31157:485;;;;;;:::o;28781:168::-;22314:12;:10;:12::i;:::-;22303:23;;:7;:5;:7::i;:::-;:23;;;22295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28873:15:::1;28860:10;;:28;;;;;;;;;;;;;;;;;;28906:35;28925:15;28906:35;;;;;;:::i;:::-;;;;;;;;28781:168:::0;:::o;30513:232::-;30599:10;;;;;;;;;;;30585:24;;:10;:24;;;30577:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30661:8;30654:25;;;30680:10;;;;;;;;;;;30698:8;30691:26;;;30726:4;30691:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30654:79;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30513:232;:::o;13305:176::-;13419:7;13446:11;:18;13458:5;13446:18;;;;;;;;;;;;;;;:27;13465:7;13446:27;;;;;;;;;;;;;;;;13439:34;;13305:176;;;;:::o;22992:238::-;22314:12;:10;:12::i;:::-;22303:23;;:7;:5;:7::i;:::-;:23;;;22295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23115:1:::1;23095:22;;:8;:22;;::::0;23073:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23194:28;23213:8;23194:18;:28::i;:::-;22992:238:::0;:::o;27749:1024::-;22314:12;:10;:12::i;:::-;22303:23;;:7;:5;:7::i;:::-;:23;;;22295:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27804:11:::1;;;;;;;;;;;27803:12;27795:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;27897:42;27854:15;;:96;;;;;;;;;;;;;;;;;;27961:64;27978:4;27993:15;;;;;;;;;;;28011:13;:11;:13::i;:::-;27961:8;:64::i;:::-;28064:15;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28052:49;;;28124:4;28144:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28052:125;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28036:13;;:141;;;;;;;;;;;;;;;;;;28188:15;;;;;;;;;;;:31;;;28227:21;28272:4;28292:24;28310:4;28292:9;:24::i;:::-;28331:1;28347::::0;28363:7:::1;:5;:7::i;:::-;28385:15;28188:223;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28429:13;;;;;;;;;;;28422:29;;;28460:15;;;;;;;;;;;28478:14;28422:71;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28518:4;28504:11;;:18;;;;;;;;;;;;;;;;;;28547:4;28533:11;;:18;;;;;;;;;;;;;;;;;;28575:12;28562:10;:25;;;;28623:12;28598:15;;:38;;;;;;;;;;;;;;;;;;28683:4;28647:18;:33;28674:4;28647:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;28707:2;28698:6;:11;;;;28730:2;28720:7;:12;;;;28750:15;;;;;;;;;;27749:1024::o:0;10401:98::-;10454:7;10481:10;10474:17;;10401:98;:::o;19806:380::-;19959:1;19942:19;;:5;:19;;;19934:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20040:1;20021:21;;:7;:21;;;20013:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20124:6;20094:11;:18;20106:5;20094:18;;;;;;;;;;;;;;;:27;20113:7;20094:27;;;;;;;;;;;;;;;:36;;;;20162:7;20146:32;;20155:5;20146:32;;;20171:6;20146:32;;;;;;:::i;:::-;;;;;;;;19806:380;;;:::o;31650:2296::-;31798:1;31782:18;;:4;:18;;;31774:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31875:1;31861:16;;:2;:16;;;31853:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31945:1;31936:6;:10;31928:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32003:17;32047:7;:5;:7::i;:::-;32039:15;;:4;:15;;;;:32;;;;;32064:7;:5;:7::i;:::-;32058:13;;:2;:13;;;;32039:32;:43;;;;;32076:6;;;;;;;;;;;32075:7;32039:43;32035:1740;;;32127:27;32150:3;32127:18;32138:6;;32127;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;32115:39;;32201:13;;;;;;;;;;;32193:21;;:4;:21;;;:72;;;;;32249:15;;;;;;;;;;;32235:30;;:2;:30;;;;32193:72;:116;;;;;32287:18;:22;32306:2;32287:22;;;;;;;;;;;;;;;;;;;;;;;;;32286:23;32193:116;32171:571;;;32362:14;;32352:6;:24;;32344:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32483:18;;32473:6;32457:13;32467:2;32457:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32427:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32613:12;32609:1;32596:10;;:14;;;;:::i;:::-;:29;;32715:9;;:11;;;;;;;;;:::i;:::-;;;;;;32171:571;32768:13;;;;;;;;;;;32762:19;;:2;:19;;;;:46;;;;;32786:18;:22;32805:2;32786:22;;;;;;;;;;;;;;;;;;;;;;;;;32785:23;32762:46;32758:231;;;32885:18;;32875:6;32859:13;32869:2;32859:9;:13::i;:::-;:22;;;;:::i;:::-;:44;;32829:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32758:231;33015:13;;;;;;;;;;;33009:19;;:2;:19;;;:44;;;;;33048:4;33032:21;;:4;:21;;;;33009:44;33005:125;;;33086:28;33110:3;33086:19;33097:7;;33086:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;33074:40;;33005:125;33146:28;33177:24;33195:4;33177:9;:24::i;:::-;33146:55;;33239:6;;;;;;;;;;;33238:7;:47;;;;;33272:13;;;;;;;;;;;33266:19;;:2;:19;;;33238:47;:79;;;;;33306:11;;;;;;;;;;;33238:79;:135;;;;;33361:12;;33338:20;:35;33238:135;:186;;;;;33406:18;;33394:9;;:30;33238:186;:246;;;;;33471:12;33445:39;;:15;;;;;;;;;;;:39;;;;33238:246;33216:548;;;33519:57;33536:39;33540:20;33562:12;;33536:3;:39::i;:::-;33519:16;:57::i;:::-;33595:26;33624:21;33595:50;;33689:1;33668:18;:22;33664:85;;;33715:14;:12;:14::i;:::-;33664:85;33500:264;33216:548;32084:1691;32035:1740;33803:1;33791:9;:13;33787:93;;;33821:47;33837:4;33851;33858:9;33821:15;:47::i;:::-;33787:93;33890:48;33906:4;33912:2;33916:21;33927:9;33916:6;:10;;:21;;;;:::i;:::-;33890:15;:48::i;:::-;31763:2183;31650:2296;;;:::o;23390:191::-;23464:16;23483:6;;;;;;;;;;;23464:25;;23509:8;23500:6;;:17;;;;;;;;;;;;;;;;;;23564:8;23533:40;;23554:8;23533:40;;;;;;;;;;;;23453:128;23390:191;:::o;34716:532::-;27014:4;27005:6;;:13;;;;;;;;;;;;;;;;;;34819:12:::1;34794:15;;:38;;;;;;;;;;;;;;;;;;34843:21;34881:1;34867:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34843:40;;34912:4;34894;34899:1;34894:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;34938:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34928:4;34933:1;34928:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;34971:62;34988:4;35003:15;;;;;;;;;;;35021:11;34971:8;:62::i;:::-;35044:15;;;;;;;;;;;:66;;;35125:11;35151:1;35167:4;35194;35214:15;35044:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34783:465;27050:5:::0;27041:6;;:14;;;;;;;;;;;;;;;;;;34716:532;:::o;35256:170::-;35299:12;35344:10;;;;;;;;;;;35336:24;;35368:21;35336:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35322:96;;;;;35288:138;35256:170::o;3760:98::-;3818:7;3849:1;3845;:5;;;;:::i;:::-;3838:12;;3760:98;;;;:::o;4159:::-;4217:7;4248:1;4244;:5;;;;:::i;:::-;4237:12;;4159:98;;;;:::o;33954:107::-;34011:7;34043:1;34039;:5;34038:15;;34052:1;34038:15;;;34048:1;34038:15;34031:22;;33954:107;;;;:::o;16988:770::-;17146:1;17128:20;;:6;:20;;;17120:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;17230:1;17209:23;;:9;:23;;;17201:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17285:47;17306:6;17314:9;17325:6;17285:20;:47::i;:::-;17345:21;17369:9;:17;17379:6;17369:17;;;;;;;;;;;;;;;;17345:41;;17436:6;17419:13;:23;;17397:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;17580:6;17564:13;:22;17544:9;:17;17554:6;17544:17;;;;;;;;;;;;;;;:42;;;;17632:6;17608:9;:20;17618:9;17608:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;17673:9;17656:35;;17665:6;17656:35;;;17684:6;17656:35;;;;;;:::i;:::-;;;;;;;;17704:46;17724:6;17732:9;17743:6;17704:19;:46::i;:::-;17109:649;16988:770;;;:::o;3403:98::-;3461:7;3492:1;3488;:5;;;;:::i;:::-;3481:12;;3403:98;;;;:::o;20786:125::-;;;;:::o;21515:124::-;;;;:::o;88:117:1:-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:474::-;758:6;766;815:2;803:9;794:7;790:23;786:32;783:119;;;821:79;;:::i;:::-;783:119;941:1;966:53;1011:7;1002:6;991:9;987:22;966:53;:::i;:::-;956:63;;912:117;1068:2;1094:53;1139:7;1130:6;1119:9;1115:22;1094:53;:::i;:::-;1084:63;;1039:118;690:474;;;;;:::o;1170:99::-;1222:6;1256:5;1250:12;1240:22;;1170:99;;;:::o;1275:169::-;1359:11;1393:6;1388:3;1381:19;1433:4;1428:3;1424:14;1409:29;;1275:169;;;;:::o;1450:246::-;1531:1;1541:113;1555:6;1552:1;1549:13;1541:113;;;1640:1;1635:3;1631:11;1625:18;1621:1;1616:3;1612:11;1605:39;1577:2;1574:1;1570:10;1565:15;;1541:113;;;1688:1;1679:6;1674:3;1670:16;1663:27;1512:184;1450:246;;;:::o;1702:102::-;1743:6;1794:2;1790:7;1785:2;1778:5;1774:14;1770:28;1760:38;;1702:102;;;:::o;1810:377::-;1898:3;1926:39;1959:5;1926:39;:::i;:::-;1981:71;2045:6;2040:3;1981:71;:::i;:::-;1974:78;;2061:65;2119:6;2114:3;2107:4;2100:5;2096:16;2061:65;:::i;:::-;2151:29;2173:6;2151:29;:::i;:::-;2146:3;2142:39;2135:46;;1902:285;1810:377;;;;:::o;2193:313::-;2306:4;2344:2;2333:9;2329:18;2321:26;;2393:9;2387:4;2383:20;2379:1;2368:9;2364:17;2357:47;2421:78;2494:4;2485:6;2421:78;:::i;:::-;2413:86;;2193:313;;;;:::o;2512:126::-;2549:7;2589:42;2582:5;2578:54;2567:65;;2512:126;;;:::o;2644:96::-;2681:7;2710:24;2728:5;2710:24;:::i;:::-;2699:35;;2644:96;;;:::o;2746:122::-;2819:24;2837:5;2819:24;:::i;:::-;2812:5;2809:35;2799:63;;2858:1;2855;2848:12;2799:63;2746:122;:::o;2874:139::-;2920:5;2958:6;2945:20;2936:29;;2974:33;3001:5;2974:33;:::i;:::-;2874:139;;;;:::o;3019:474::-;3087:6;3095;3144:2;3132:9;3123:7;3119:23;3115:32;3112:119;;;3150:79;;:::i;:::-;3112:119;3270:1;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3241:117;3397:2;3423:53;3468:7;3459:6;3448:9;3444:22;3423:53;:::i;:::-;3413:63;;3368:118;3019:474;;;;;:::o;3499:90::-;3533:7;3576:5;3569:13;3562:21;3551:32;;3499:90;;;:::o;3595:109::-;3676:21;3691:5;3676:21;:::i;:::-;3671:3;3664:34;3595:109;;:::o;3710:210::-;3797:4;3835:2;3824:9;3820:18;3812:26;;3848:65;3910:1;3899:9;3895:17;3886:6;3848:65;:::i;:::-;3710:210;;;;:::o;3926:329::-;3985:6;4034:2;4022:9;4013:7;4009:23;4005:32;4002:119;;;4040:79;;:::i;:::-;4002:119;4160:1;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4131:117;3926:329;;;;:::o;4261:118::-;4348:24;4366:5;4348:24;:::i;:::-;4343:3;4336:37;4261:118;;:::o;4385:222::-;4478:4;4516:2;4505:9;4501:18;4493:26;;4529:71;4597:1;4586:9;4582:17;4573:6;4529:71;:::i;:::-;4385:222;;;;:::o;4613:117::-;4722:1;4719;4712:12;4736:117;4845:1;4842;4835:12;4859:117;4968:1;4965;4958:12;4999:568;5072:8;5082:6;5132:3;5125:4;5117:6;5113:17;5109:27;5099:122;;5140:79;;:::i;:::-;5099:122;5253:6;5240:20;5230:30;;5283:18;5275:6;5272:30;5269:117;;;5305:79;;:::i;:::-;5269:117;5419:4;5411:6;5407:17;5395:29;;5473:3;5465:4;5457:6;5453:17;5443:8;5439:32;5436:41;5433:128;;;5480:79;;:::i;:::-;5433:128;4999:568;;;;;:::o;5573:116::-;5643:21;5658:5;5643:21;:::i;:::-;5636:5;5633:32;5623:60;;5679:1;5676;5669:12;5623:60;5573:116;:::o;5695:133::-;5738:5;5776:6;5763:20;5754:29;;5792:30;5816:5;5792:30;:::i;:::-;5695:133;;;;:::o;5834:698::-;5926:6;5934;5942;5991:2;5979:9;5970:7;5966:23;5962:32;5959:119;;;5997:79;;:::i;:::-;5959:119;6145:1;6134:9;6130:17;6117:31;6175:18;6167:6;6164:30;6161:117;;;6197:79;;:::i;:::-;6161:117;6310:80;6382:7;6373:6;6362:9;6358:22;6310:80;:::i;:::-;6292:98;;;;6088:312;6439:2;6465:50;6507:7;6498:6;6487:9;6483:22;6465:50;:::i;:::-;6455:60;;6410:115;5834:698;;;;;:::o;6538:619::-;6615:6;6623;6631;6680:2;6668:9;6659:7;6655:23;6651:32;6648:119;;;6686:79;;:::i;:::-;6648:119;6806:1;6831:53;6876:7;6867:6;6856:9;6852:22;6831:53;:::i;:::-;6821:63;;6777:117;6933:2;6959:53;7004:7;6995:6;6984:9;6980:22;6959:53;:::i;:::-;6949:63;;6904:118;7061:2;7087:53;7132:7;7123:6;7112:9;7108:22;7087:53;:::i;:::-;7077:63;;7032:118;6538:619;;;;;:::o;7163:468::-;7228:6;7236;7285:2;7273:9;7264:7;7260:23;7256:32;7253:119;;;7291:79;;:::i;:::-;7253:119;7411:1;7436:53;7481:7;7472:6;7461:9;7457:22;7436:53;:::i;:::-;7426:63;;7382:117;7538:2;7564:50;7606:7;7597:6;7586:9;7582:22;7564:50;:::i;:::-;7554:60;;7509:115;7163:468;;;;;:::o;7637:86::-;7672:7;7712:4;7705:5;7701:16;7690:27;;7637:86;;;:::o;7729:112::-;7812:22;7828:5;7812:22;:::i;:::-;7807:3;7800:35;7729:112;;:::o;7847:214::-;7936:4;7974:2;7963:9;7959:18;7951:26;;7987:67;8051:1;8040:9;8036:17;8027:6;7987:67;:::i;:::-;7847:214;;;;:::o;8067:329::-;8126:6;8175:2;8163:9;8154:7;8150:23;8146:32;8143:119;;;8181:79;;:::i;:::-;8143:119;8301:1;8326:53;8371:7;8362:6;8351:9;8347:22;8326:53;:::i;:::-;8316:63;;8272:117;8067:329;;;;:::o;8402:118::-;8489:24;8507:5;8489:24;:::i;:::-;8484:3;8477:37;8402:118;;:::o;8526:222::-;8619:4;8657:2;8646:9;8642:18;8634:26;;8670:71;8738:1;8727:9;8723:17;8714:6;8670:71;:::i;:::-;8526:222;;;;:::o;8754:775::-;8987:4;9025:3;9014:9;9010:19;9002:27;;9039:71;9107:1;9096:9;9092:17;9083:6;9039:71;:::i;:::-;9120:72;9188:2;9177:9;9173:18;9164:6;9120:72;:::i;:::-;9202;9270:2;9259:9;9255:18;9246:6;9202:72;:::i;:::-;9284;9352:2;9341:9;9337:18;9328:6;9284:72;:::i;:::-;9366:73;9434:3;9423:9;9419:19;9410:6;9366:73;:::i;:::-;9449;9517:3;9506:9;9502:19;9493:6;9449:73;:::i;:::-;8754:775;;;;;;;;;:::o;9535:104::-;9580:7;9609:24;9627:5;9609:24;:::i;:::-;9598:35;;9535:104;;;:::o;9645:138::-;9726:32;9752:5;9726:32;:::i;:::-;9719:5;9716:43;9706:71;;9773:1;9770;9763:12;9706:71;9645:138;:::o;9789:155::-;9843:5;9881:6;9868:20;9859:29;;9897:41;9932:5;9897:41;:::i;:::-;9789:155;;;;:::o;9950:345::-;10017:6;10066:2;10054:9;10045:7;10041:23;10037:32;10034:119;;;10072:79;;:::i;:::-;10034:119;10192:1;10217:61;10270:7;10261:6;10250:9;10246:22;10217:61;:::i;:::-;10207:71;;10163:125;9950:345;;;;:::o;10301:474::-;10369:6;10377;10426:2;10414:9;10405:7;10401:23;10397:32;10394:119;;;10432:79;;:::i;:::-;10394:119;10552:1;10577:53;10622:7;10613:6;10602:9;10598:22;10577:53;:::i;:::-;10567:63;;10523:117;10679:2;10705:53;10750:7;10741:6;10730:9;10726:22;10705:53;:::i;:::-;10695:63;;10650:118;10301:474;;;;;:::o;10781:182::-;10921:34;10917:1;10909:6;10905:14;10898:58;10781:182;:::o;10969:366::-;11111:3;11132:67;11196:2;11191:3;11132:67;:::i;:::-;11125:74;;11208:93;11297:3;11208:93;:::i;:::-;11326:2;11321:3;11317:12;11310:19;;10969:366;;;:::o;11341:419::-;11507:4;11545:2;11534:9;11530:18;11522:26;;11594:9;11588:4;11584:20;11580:1;11569:9;11565:17;11558:47;11622:131;11748:4;11622:131;:::i;:::-;11614:139;;11341:419;;;:::o;11766:180::-;11814:77;11811:1;11804:88;11911:4;11908:1;11901:15;11935:4;11932:1;11925:15;11952:410;11992:7;12015:20;12033:1;12015:20;:::i;:::-;12010:25;;12049:20;12067:1;12049:20;:::i;:::-;12044:25;;12104:1;12101;12097:9;12126:30;12144:11;12126:30;:::i;:::-;12115:41;;12305:1;12296:7;12292:15;12289:1;12286:22;12266:1;12259:9;12239:83;12216:139;;12335:18;;:::i;:::-;12216:139;12000:362;11952:410;;;;:::o;12368:180::-;12416:77;12413:1;12406:88;12513:4;12510:1;12503:15;12537:4;12534:1;12527:15;12554:185;12594:1;12611:20;12629:1;12611:20;:::i;:::-;12606:25;;12645:20;12663:1;12645:20;:::i;:::-;12640:25;;12684:1;12674:35;;12689:18;;:::i;:::-;12674:35;12731:1;12728;12724:9;12719:14;;12554:185;;;;:::o;12745:332::-;12866:4;12904:2;12893:9;12889:18;12881:26;;12917:71;12985:1;12974:9;12970:17;12961:6;12917:71;:::i;:::-;12998:72;13066:2;13055:9;13051:18;13042:6;12998:72;:::i;:::-;12745:332;;;;;:::o;13083:180::-;13131:77;13128:1;13121:88;13228:4;13225:1;13218:15;13252:4;13249:1;13242:15;13269:320;13313:6;13350:1;13344:4;13340:12;13330:22;;13397:1;13391:4;13387:12;13418:18;13408:81;;13474:4;13466:6;13462:17;13452:27;;13408:81;13536:2;13528:6;13525:14;13505:18;13502:38;13499:84;;13555:18;;:::i;:::-;13499:84;13320:269;13269:320;;;:::o;13595:221::-;13735:34;13731:1;13723:6;13719:14;13712:58;13804:4;13799:2;13791:6;13787:15;13780:29;13595:221;:::o;13822:366::-;13964:3;13985:67;14049:2;14044:3;13985:67;:::i;:::-;13978:74;;14061:93;14150:3;14061:93;:::i;:::-;14179:2;14174:3;14170:12;14163:19;;13822:366;;;:::o;14194:419::-;14360:4;14398:2;14387:9;14383:18;14375:26;;14447:9;14441:4;14437:20;14433:1;14422:9;14418:17;14411:47;14475:131;14601:4;14475:131;:::i;:::-;14467:139;;14194:419;;;:::o;14619:180::-;14667:77;14664:1;14657:88;14764:4;14761:1;14754:15;14788:4;14785:1;14778:15;14805:233;14844:3;14867:24;14885:5;14867:24;:::i;:::-;14858:33;;14913:66;14906:5;14903:77;14900:103;;14983:18;;:::i;:::-;14900:103;15030:1;15023:5;15019:13;15012:20;;14805:233;;;:::o;15044:179::-;15184:31;15180:1;15172:6;15168:14;15161:55;15044:179;:::o;15229:366::-;15371:3;15392:67;15456:2;15451:3;15392:67;:::i;:::-;15385:74;;15468:93;15557:3;15468:93;:::i;:::-;15586:2;15581:3;15577:12;15570:19;;15229:366;;;:::o;15601:419::-;15767:4;15805:2;15794:9;15790:18;15782:26;;15854:9;15848:4;15844:20;15840:1;15829:9;15825:17;15818:47;15882:131;16008:4;15882:131;:::i;:::-;15874:139;;15601:419;;;:::o;16026:227::-;16166:34;16162:1;16154:6;16150:14;16143:58;16235:10;16230:2;16222:6;16218:15;16211:35;16026:227;:::o;16259:366::-;16401:3;16422:67;16486:2;16481:3;16422:67;:::i;:::-;16415:74;;16498:93;16587:3;16498:93;:::i;:::-;16616:2;16611:3;16607:12;16600:19;;16259:366;;;:::o;16631:419::-;16797:4;16835:2;16824:9;16820:18;16812:26;;16884:9;16878:4;16874:20;16870:1;16859:9;16855:17;16848:47;16912:131;17038:4;16912:131;:::i;:::-;16904:139;;16631:419;;;:::o;17056:320::-;17171:4;17209:2;17198:9;17194:18;17186:26;;17222:71;17290:1;17279:9;17275:17;17266:6;17222:71;:::i;:::-;17303:66;17365:2;17354:9;17350:18;17341:6;17303:66;:::i;:::-;17056:320;;;;;:::o;17382:191::-;17422:3;17441:20;17459:1;17441:20;:::i;:::-;17436:25;;17475:20;17493:1;17475:20;:::i;:::-;17470:25;;17518:1;17515;17511:9;17504:16;;17539:3;17536:1;17533:10;17530:36;;;17546:18;;:::i;:::-;17530:36;17382:191;;;;:::o;17579:180::-;17719:32;17715:1;17707:6;17703:14;17696:56;17579:180;:::o;17765:366::-;17907:3;17928:67;17992:2;17987:3;17928:67;:::i;:::-;17921:74;;18004:93;18093:3;18004:93;:::i;:::-;18122:2;18117:3;18113:12;18106:19;;17765:366;;;:::o;18137:419::-;18303:4;18341:2;18330:9;18326:18;18318:26;;18390:9;18384:4;18380:20;18376:1;18365:9;18361:17;18354:47;18418:131;18544:4;18418:131;:::i;:::-;18410:139;;18137:419;;;:::o;18562:171::-;18702:23;18698:1;18690:6;18686:14;18679:47;18562:171;:::o;18739:366::-;18881:3;18902:67;18966:2;18961:3;18902:67;:::i;:::-;18895:74;;18978:93;19067:3;18978:93;:::i;:::-;19096:2;19091:3;19087:12;19080:19;;18739:366;;;:::o;19111:419::-;19277:4;19315:2;19304:9;19300:18;19292:26;;19364:9;19358:4;19354:20;19350:1;19339:9;19335:17;19328:47;19392:131;19518:4;19392:131;:::i;:::-;19384:139;;19111:419;;;:::o;19536:172::-;19676:24;19672:1;19664:6;19660:14;19653:48;19536:172;:::o;19714:366::-;19856:3;19877:67;19941:2;19936:3;19877:67;:::i;:::-;19870:74;;19953:93;20042:3;19953:93;:::i;:::-;20071:2;20066:3;20062:12;20055:19;;19714:366;;;:::o;20086:419::-;20252:4;20290:2;20279:9;20275:18;20267:26;;20339:9;20333:4;20329:20;20325:1;20314:9;20310:17;20303:47;20367:131;20493:4;20367:131;:::i;:::-;20359:139;;20086:419;;;:::o;20511:224::-;20651:34;20647:1;20639:6;20635:14;20628:58;20720:7;20715:2;20707:6;20703:15;20696:32;20511:224;:::o;20741:366::-;20883:3;20904:67;20968:2;20963:3;20904:67;:::i;:::-;20897:74;;20980:93;21069:3;20980:93;:::i;:::-;21098:2;21093:3;21089:12;21082:19;;20741:366;;;:::o;21113:419::-;21279:4;21317:2;21306:9;21302:18;21294:26;;21366:9;21360:4;21356:20;21352:1;21341:9;21337:17;21330:47;21394:131;21520:4;21394:131;:::i;:::-;21386:139;;21113:419;;;:::o;21538:60::-;21566:3;21587:5;21580:12;;21538:60;;;:::o;21604:142::-;21654:9;21687:53;21705:34;21714:24;21732:5;21714:24;:::i;:::-;21705:34;:::i;:::-;21687:53;:::i;:::-;21674:66;;21604:142;;;:::o;21752:126::-;21802:9;21835:37;21866:5;21835:37;:::i;:::-;21822:50;;21752:126;;;:::o;21884:134::-;21942:9;21975:37;22006:5;21975:37;:::i;:::-;21962:50;;21884:134;;;:::o;22024:147::-;22119:45;22158:5;22119:45;:::i;:::-;22114:3;22107:58;22024:147;;:::o;22177:238::-;22278:4;22316:2;22305:9;22301:18;22293:26;;22329:79;22405:1;22394:9;22390:17;22381:6;22329:79;:::i;:::-;22177:238;;;;:::o;22421:143::-;22478:5;22509:6;22503:13;22494:22;;22525:33;22552:5;22525:33;:::i;:::-;22421:143;;;;:::o;22570:351::-;22640:6;22689:2;22677:9;22668:7;22664:23;22660:32;22657:119;;;22695:79;;:::i;:::-;22657:119;22815:1;22840:64;22896:7;22887:6;22876:9;22872:22;22840:64;:::i;:::-;22830:74;;22786:128;22570:351;;;;:::o;22927:348::-;23056:4;23094:2;23083:9;23079:18;23071:26;;23107:79;23183:1;23172:9;23168:17;23159:6;23107:79;:::i;:::-;23196:72;23264:2;23253:9;23249:18;23240:6;23196:72;:::i;:::-;22927:348;;;;;:::o;23281:137::-;23335:5;23366:6;23360:13;23351:22;;23382:30;23406:5;23382:30;:::i;:::-;23281:137;;;;:::o;23424:345::-;23491:6;23540:2;23528:9;23519:7;23515:23;23511:32;23508:119;;;23546:79;;:::i;:::-;23508:119;23666:1;23691:61;23744:7;23735:6;23724:9;23720:22;23691:61;:::i;:::-;23681:71;;23637:125;23424:345;;;;:::o;23775:225::-;23915:34;23911:1;23903:6;23899:14;23892:58;23984:8;23979:2;23971:6;23967:15;23960:33;23775:225;:::o;24006:366::-;24148:3;24169:67;24233:2;24228:3;24169:67;:::i;:::-;24162:74;;24245:93;24334:3;24245:93;:::i;:::-;24363:2;24358:3;24354:12;24347:19;;24006:366;;;:::o;24378:419::-;24544:4;24582:2;24571:9;24567:18;24559:26;;24631:9;24625:4;24621:20;24617:1;24606:9;24602:17;24595:47;24659:131;24785:4;24659:131;:::i;:::-;24651:139;;24378:419;;;:::o;24803:173::-;24943:25;24939:1;24931:6;24927:14;24920:49;24803:173;:::o;24982:366::-;25124:3;25145:67;25209:2;25204:3;25145:67;:::i;:::-;25138:74;;25221:93;25310:3;25221:93;:::i;:::-;25339:2;25334:3;25330:12;25323:19;;24982:366;;;:::o;25354:419::-;25520:4;25558:2;25547:9;25543:18;25535:26;;25607:9;25601:4;25597:20;25593:1;25582:9;25578:17;25571:47;25635:131;25761:4;25635:131;:::i;:::-;25627:139;;25354:419;;;:::o;25779:143::-;25836:5;25867:6;25861:13;25852:22;;25883:33;25910:5;25883:33;:::i;:::-;25779:143;;;;:::o;25928:351::-;25998:6;26047:2;26035:9;26026:7;26022:23;26018:32;26015:119;;;26053:79;;:::i;:::-;26015:119;26173:1;26198:64;26254:7;26245:6;26234:9;26230:22;26198:64;:::i;:::-;26188:74;;26144:128;25928:351;;;;:::o;26285:332::-;26406:4;26444:2;26433:9;26429:18;26421:26;;26457:71;26525:1;26514:9;26510:17;26501:6;26457:71;:::i;:::-;26538:72;26606:2;26595:9;26591:18;26582:6;26538:72;:::i;:::-;26285:332;;;;;:::o;26623:85::-;26668:7;26697:5;26686:16;;26623:85;;;:::o;26714:158::-;26772:9;26805:61;26823:42;26832:32;26858:5;26832:32;:::i;:::-;26823:42;:::i;:::-;26805:61;:::i;:::-;26792:74;;26714:158;;;:::o;26878:147::-;26973:45;27012:5;26973:45;:::i;:::-;26968:3;26961:58;26878:147;;:::o;27031:807::-;27280:4;27318:3;27307:9;27303:19;27295:27;;27332:71;27400:1;27389:9;27385:17;27376:6;27332:71;:::i;:::-;27413:72;27481:2;27470:9;27466:18;27457:6;27413:72;:::i;:::-;27495:80;27571:2;27560:9;27556:18;27547:6;27495:80;:::i;:::-;27585;27661:2;27650:9;27646:18;27637:6;27585:80;:::i;:::-;27675:73;27743:3;27732:9;27728:19;27719:6;27675:73;:::i;:::-;27758;27826:3;27815:9;27811:19;27802:6;27758:73;:::i;:::-;27031:807;;;;;;;;;:::o;27844:663::-;27932:6;27940;27948;27997:2;27985:9;27976:7;27972:23;27968:32;27965:119;;;28003:79;;:::i;:::-;27965:119;28123:1;28148:64;28204:7;28195:6;28184:9;28180:22;28148:64;:::i;:::-;28138:74;;28094:128;28261:2;28287:64;28343:7;28334:6;28323:9;28319:22;28287:64;:::i;:::-;28277:74;;28232:129;28400:2;28426:64;28482:7;28473:6;28462:9;28458:22;28426:64;:::i;:::-;28416:74;;28371:129;27844:663;;;;;:::o;28513:332::-;28634:4;28672:2;28661:9;28657:18;28649:26;;28685:71;28753:1;28742:9;28738:17;28729:6;28685:71;:::i;:::-;28766:72;28834:2;28823:9;28819:18;28810:6;28766:72;:::i;:::-;28513:332;;;;;:::o;28851:223::-;28991:34;28987:1;28979:6;28975:14;28968:58;29060:6;29055:2;29047:6;29043:15;29036:31;28851:223;:::o;29080:366::-;29222:3;29243:67;29307:2;29302:3;29243:67;:::i;:::-;29236:74;;29319:93;29408:3;29319:93;:::i;:::-;29437:2;29432:3;29428:12;29421:19;;29080:366;;;:::o;29452:419::-;29618:4;29656:2;29645:9;29641:18;29633:26;;29705:9;29699:4;29695:20;29691:1;29680:9;29676:17;29669:47;29733:131;29859:4;29733:131;:::i;:::-;29725:139;;29452:419;;;:::o;29877:221::-;30017:34;30013:1;30005:6;30001:14;29994:58;30086:4;30081:2;30073:6;30069:15;30062:29;29877:221;:::o;30104:366::-;30246:3;30267:67;30331:2;30326:3;30267:67;:::i;:::-;30260:74;;30343:93;30432:3;30343:93;:::i;:::-;30461:2;30456:3;30452:12;30445:19;;30104:366;;;:::o;30476:419::-;30642:4;30680:2;30669:9;30665:18;30657:26;;30729:9;30723:4;30719:20;30715:1;30704:9;30700:17;30693:47;30757:131;30883:4;30757:131;:::i;:::-;30749:139;;30476:419;;;:::o;30901:224::-;31041:34;31037:1;31029:6;31025:14;31018:58;31110:7;31105:2;31097:6;31093:15;31086:32;30901:224;:::o;31131:366::-;31273:3;31294:67;31358:2;31353:3;31294:67;:::i;:::-;31287:74;;31370:93;31459:3;31370:93;:::i;:::-;31488:2;31483:3;31479:12;31472:19;;31131:366;;;:::o;31503:419::-;31669:4;31707:2;31696:9;31692:18;31684:26;;31756:9;31750:4;31746:20;31742:1;31731:9;31727:17;31720:47;31784:131;31910:4;31784:131;:::i;:::-;31776:139;;31503:419;;;:::o;31928:222::-;32068:34;32064:1;32056:6;32052:14;32045:58;32137:5;32132:2;32124:6;32120:15;32113:30;31928:222;:::o;32156:366::-;32298:3;32319:67;32383:2;32378:3;32319:67;:::i;:::-;32312:74;;32395:93;32484:3;32395:93;:::i;:::-;32513:2;32508:3;32504:12;32497:19;;32156:366;;;:::o;32528:419::-;32694:4;32732:2;32721:9;32717:18;32709:26;;32781:9;32775:4;32771:20;32767:1;32756:9;32752:17;32745:47;32809:131;32935:4;32809:131;:::i;:::-;32801:139;;32528:419;;;:::o;32953:228::-;33093:34;33089:1;33081:6;33077:14;33070:58;33162:11;33157:2;33149:6;33145:15;33138:36;32953:228;:::o;33187:366::-;33329:3;33350:67;33414:2;33409:3;33350:67;:::i;:::-;33343:74;;33426:93;33515:3;33426:93;:::i;:::-;33544:2;33539:3;33535:12;33528:19;;33187:366;;;:::o;33559:419::-;33725:4;33763:2;33752:9;33748:18;33740:26;;33812:9;33806:4;33802:20;33798:1;33787:9;33783:17;33776:47;33840:131;33966:4;33840:131;:::i;:::-;33832:139;;33559:419;;;:::o;33984:177::-;34124:29;34120:1;34112:6;34108:14;34101:53;33984:177;:::o;34167:366::-;34309:3;34330:67;34394:2;34389:3;34330:67;:::i;:::-;34323:74;;34406:93;34495:3;34406:93;:::i;:::-;34524:2;34519:3;34515:12;34508:19;;34167:366;;;:::o;34539:419::-;34705:4;34743:2;34732:9;34728:18;34720:26;;34792:9;34786:4;34782:20;34778:1;34767:9;34763:17;34756:47;34820:131;34946:4;34820:131;:::i;:::-;34812:139;;34539:419;;;:::o;34964:176::-;35104:28;35100:1;35092:6;35088:14;35081:52;34964:176;:::o;35146:366::-;35288:3;35309:67;35373:2;35368:3;35309:67;:::i;:::-;35302:74;;35385:93;35474:3;35385:93;:::i;:::-;35503:2;35498:3;35494:12;35487:19;;35146:366;;;:::o;35518:419::-;35684:4;35722:2;35711:9;35707:18;35699:26;;35771:9;35765:4;35761:20;35757:1;35746:9;35742:17;35735:47;35799:131;35925:4;35799:131;:::i;:::-;35791:139;;35518:419;;;:::o;35943:180::-;35991:77;35988:1;35981:88;36088:4;36085:1;36078:15;36112:4;36109:1;36102:15;36129:114;36196:6;36230:5;36224:12;36214:22;;36129:114;;;:::o;36249:184::-;36348:11;36382:6;36377:3;36370:19;36422:4;36417:3;36413:14;36398:29;;36249:184;;;;:::o;36439:132::-;36506:4;36529:3;36521:11;;36559:4;36554:3;36550:14;36542:22;;36439:132;;;:::o;36577:108::-;36654:24;36672:5;36654:24;:::i;:::-;36649:3;36642:37;36577:108;;:::o;36691:179::-;36760:10;36781:46;36823:3;36815:6;36781:46;:::i;:::-;36859:4;36854:3;36850:14;36836:28;;36691:179;;;;:::o;36876:113::-;36946:4;36978;36973:3;36969:14;36961:22;;36876:113;;;:::o;37025:732::-;37144:3;37173:54;37221:5;37173:54;:::i;:::-;37243:86;37322:6;37317:3;37243:86;:::i;:::-;37236:93;;37353:56;37403:5;37353:56;:::i;:::-;37432:7;37463:1;37448:284;37473:6;37470:1;37467:13;37448:284;;;37549:6;37543:13;37576:63;37635:3;37620:13;37576:63;:::i;:::-;37569:70;;37662:60;37715:6;37662:60;:::i;:::-;37652:70;;37508:224;37495:1;37492;37488:9;37483:14;;37448:284;;;37452:14;37748:3;37741:10;;37149:608;;;37025:732;;;;:::o;37763:831::-;38026:4;38064:3;38053:9;38049:19;38041:27;;38078:71;38146:1;38135:9;38131:17;38122:6;38078:71;:::i;:::-;38159:80;38235:2;38224:9;38220:18;38211:6;38159:80;:::i;:::-;38286:9;38280:4;38276:20;38271:2;38260:9;38256:18;38249:48;38314:108;38417:4;38408:6;38314:108;:::i;:::-;38306:116;;38432:72;38500:2;38489:9;38485:18;38476:6;38432:72;:::i;:::-;38514:73;38582:3;38571:9;38567:19;38558:6;38514:73;:::i;:::-;37763:831;;;;;;;;:::o;38600:147::-;38701:11;38738:3;38723:18;;38600:147;;;;:::o;38753:114::-;;:::o;38873:398::-;39032:3;39053:83;39134:1;39129:3;39053:83;:::i;:::-;39046:90;;39145:93;39234:3;39145:93;:::i;:::-;39263:1;39258:3;39254:11;39247:18;;38873:398;;;:::o;39277:379::-;39461:3;39483:147;39626:3;39483:147;:::i;:::-;39476:154;;39647:3;39640:10;;39277:379;;;:::o;39662:225::-;39802:34;39798:1;39790:6;39786:14;39779:58;39871:8;39866:2;39858:6;39854:15;39847:33;39662:225;:::o;39893:366::-;40035:3;40056:67;40120:2;40115:3;40056:67;:::i;:::-;40049:74;;40132:93;40221:3;40132:93;:::i;:::-;40250:2;40245:3;40241:12;40234:19;;39893:366;;;:::o;40265:419::-;40431:4;40469:2;40458:9;40454:18;40446:26;;40518:9;40512:4;40508:20;40504:1;40493:9;40489:17;40482:47;40546:131;40672:4;40546:131;:::i;:::-;40538:139;;40265:419;;;:::o;40690:194::-;40730:4;40750:20;40768:1;40750:20;:::i;:::-;40745:25;;40784:20;40802:1;40784:20;:::i;:::-;40779:25;;40828:1;40825;40821:9;40813:17;;40852:1;40846:4;40843:11;40840:37;;;40857:18;;:::i;:::-;40840:37;40690:194;;;;:::o
Swarm Source
ipfs://dd66147193c6a60c7655917265d5f4651ced99020e27be64da675ec892069d6f
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.80
Net Worth in ETH
0.000239
Token Allocations
ETH
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| OP | 100.00% | $3,361.87 | 0.00023883 | $0.802916 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.