Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 237 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 16044471 | 1217 days ago | IN | 0 ETH | 0.00029588 | ||||
| Approve | 15510306 | 1292 days ago | IN | 0 ETH | 0.00041875 | ||||
| Approve | 15461592 | 1300 days ago | IN | 0 ETH | 0.00018639 | ||||
| Approve | 15433949 | 1305 days ago | IN | 0 ETH | 0.00054774 | ||||
| Approve | 15427265 | 1306 days ago | IN | 0 ETH | 0.00023631 | ||||
| Approve | 15417465 | 1307 days ago | IN | 0 ETH | 0.00082157 | ||||
| Approve | 15416309 | 1308 days ago | IN | 0 ETH | 0.00065878 | ||||
| Approve | 15415757 | 1308 days ago | IN | 0 ETH | 0.00148724 | ||||
| Approve | 15415068 | 1308 days ago | IN | 0 ETH | 0.00021592 | ||||
| Approve | 15414727 | 1308 days ago | IN | 0 ETH | 0.00017865 | ||||
| Approve | 15414726 | 1308 days ago | IN | 0 ETH | 0.00030389 | ||||
| Approve | 15413543 | 1308 days ago | IN | 0 ETH | 0.00033062 | ||||
| Approve | 15412285 | 1308 days ago | IN | 0 ETH | 0.00065748 | ||||
| Approve | 15411790 | 1308 days ago | IN | 0 ETH | 0.00040672 | ||||
| Approve | 15410331 | 1309 days ago | IN | 0 ETH | 0.00271759 | ||||
| Approve | 15410331 | 1309 days ago | IN | 0 ETH | 0.00271759 | ||||
| Approve | 15410330 | 1309 days ago | IN | 0 ETH | 0.00286027 | ||||
| Approve | 15410287 | 1309 days ago | IN | 0 ETH | 0.00154818 | ||||
| Approve | 15409717 | 1309 days ago | IN | 0 ETH | 0.00069511 | ||||
| Approve | 15409549 | 1309 days ago | IN | 0 ETH | 0.00107293 | ||||
| Approve | 15409489 | 1309 days ago | IN | 0 ETH | 0.00077397 | ||||
| Approve | 15409419 | 1309 days ago | IN | 0 ETH | 0.00050066 | ||||
| Approve | 15409407 | 1309 days ago | IN | 0 ETH | 0.00050037 | ||||
| Approve | 15409362 | 1309 days ago | IN | 0 ETH | 0.0002929 | ||||
| Approve | 15409361 | 1309 days ago | IN | 0 ETH | 0.00047578 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 24363969 | 52 days ago | 0.00002148 ETH | ||||
| Add Liquidity ET... | 24363969 | 52 days ago | 0.0000223 ETH | ||||
| Transfer | 24363969 | 52 days ago | 0.00109441 ETH | ||||
| Transfer | 24363969 | 52 days ago | 0.00111671 ETH | ||||
| Transfer | 24360085 | 53 days ago | 0.00002148 ETH | ||||
| Add Liquidity ET... | 24360085 | 53 days ago | 0.0000223 ETH | ||||
| Transfer | 24360085 | 53 days ago | 0.00109441 ETH | ||||
| Transfer | 24360085 | 53 days ago | 0.00111671 ETH | ||||
| Transfer | 24359168 | 53 days ago | 0.00002148 ETH | ||||
| Add Liquidity ET... | 24359168 | 53 days ago | 0.0000223 ETH | ||||
| Transfer | 24359168 | 53 days ago | 0.00109441 ETH | ||||
| Transfer | 24359168 | 53 days ago | 0.00111671 ETH | ||||
| Add Liquidity ET... | 15459647 | 1301 days ago | 0.00083737 ETH | ||||
| Transfer | 15459647 | 1301 days ago | 0.00083737 ETH | ||||
| Transfer | 15433958 | 1305 days ago | 0.00022993 ETH | ||||
| Add Liquidity ET... | 15433958 | 1305 days ago | 0.00063595 ETH | ||||
| Transfer | 15433958 | 1305 days ago | 0.00084319 ETH | ||||
| Transfer | 15433958 | 1305 days ago | 0.00147915 ETH | ||||
| Add Liquidity ET... | 15426823 | 1306 days ago | 0.00091878 ETH | ||||
| Transfer | 15426823 | 1306 days ago | 0.00091878 ETH | ||||
| Add Liquidity ET... | 15417468 | 1307 days ago | 0.00058383 ETH | ||||
| Transfer | 15417468 | 1307 days ago | 0.00058383 ETH | ||||
| Transfer | 15415759 | 1308 days ago | 0.00018873 ETH | ||||
| Add Liquidity ET... | 15415759 | 1308 days ago | 0.00049229 ETH | ||||
| Transfer | 15415759 | 1308 days ago | 0.00082323 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
GrabProtocol
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-08-25
*/
/*
http://www.GRAB.fm
https://t.me/GrabProtocol
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IUniswapV2Factory {
function createPair(address tokenA, address tokenB)
external
returns (address pair);
}
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (
uint256 amountToken,
uint256 amountETH,
uint256 liquidity
);
}
interface IUniswapV2Router02 is IUniswapV2Router01 {
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
}
interface IUniswapV2Pair {
function sync() external;
}
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
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);
}
}
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
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
);
}
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
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);
}
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
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 updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* Requirements:
*
* - `sender` and `recipient` cannot be the zero address.
* - `sender` must have a balance of at least `amount`.
* - the caller must have allowance for ``sender``'s tokens of at least
* `amount`.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
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 updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue)
public
virtual
returns (bool)
{
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender] + addedValue
);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue)
public
virtual
returns (bool)
{
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 {}
}
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
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;
}
}
}
contract GrabProtocol is ERC20, Ownable {
using SafeMath for uint256;
IUniswapV2Router02 public immutable uniswapV2Router;
address public uniswapV2Pair;
address public constant deadAddress = address(0xdead);
bool private swapping;
address public devWallet;
uint256 public maxTransactionAmount;
uint256 public swapTokensAtAmount;
uint256 public maxWallet;
uint256 public percentForLPBurn = 20; // 20 = .20%
bool public lpBurnEnabled = true;
uint256 public lpBurnFrequency = 3600 seconds;
uint256 public lastLpBurnTime;
uint256 public manualBurnFrequency = 30 minutes;
uint256 public lastManualLpBurnTime;
bool public limitsInEffect = true;
bool public tradingActive = false;
bool public swapEnabled = false;
// Anti-bot and anti-whale mappings and variables
mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
bool public transferDelayEnabled = true;
uint256 public buyTotalFees;
uint256 public buyBurnFee = 0;
uint256 public buyLiquidityFee = 0;
uint256 public buyDevFee = 2;
uint256 public sellTotalFees;
uint256 public sellBurnFee = 0;
uint256 public sellLiquidityFee = 2;
uint256 public sellDevFee = 0;
uint256 public tokensForBurn;
uint256 public tokensForLiquidity;
uint256 public tokensForDev;
/******************/
// exlcude from fees and max transaction amount
mapping(address => bool) private _isExcludedFromFees;
mapping(address => bool) public _isExcludedMaxTransactionAmount;
// store addresses that a automatic market maker pairs. Any transfer *to* these addresses
// could be subject to a maximum transfer amount
mapping(address => bool) public automatedMarketMakerPairs;
event UpdateUniswapV2Router(
address indexed newAddress,
address indexed oldAddress
);
event ExcludeFromFees(address indexed account, bool isExcluded);
event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
event devWalletUpdated(
address indexed newWallet,
address indexed oldWallet
);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiquidity
);
event AutoNukeLP();
event ManualNukeLP();
event BoughtEarly(address indexed sniper);
constructor() ERC20("Grab Protocol", "GRAB") {
IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
);
excludeFromMaxTransaction(address(_uniswapV2Router), true);
uniswapV2Router = _uniswapV2Router;
uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
.createPair(address(this), _uniswapV2Router.WETH());
excludeFromMaxTransaction(address(uniswapV2Pair), true);
_setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
uint256 totalSupply = 1_000_000 * 1e18; // 1 million total supply
maxTransactionAmount = 10_000 * 1e18; // 1% from total supply
maxWallet = 10_000 * 1e18; // 1% from total supply maxWallet
swapTokensAtAmount = (totalSupply * 3) / 10000; // 0.03% swap wallet
buyTotalFees = buyBurnFee + buyLiquidityFee + buyDevFee;
sellTotalFees = sellBurnFee + sellLiquidityFee + sellDevFee;
devWallet = address(0x00a9eee968A11828A8DFFCa05d978E65B87566aE); // set as dev wallet
// exclude from paying fees or having max transaction amount
excludeFromFees(owner(), true);
excludeFromFees(address(this), true);
excludeFromFees(address(0xdead), true);
excludeFromMaxTransaction(owner(), true);
excludeFromMaxTransaction(address(this), true);
excludeFromMaxTransaction(address(0xdead), true);
/*
_mint is an internal function in ERC20.sol that is only called here,
and CANNOT be called ever again
*/
_mint(msg.sender, totalSupply);
}
receive() external payable {}
// once enabled, can never be turned off
function startTrading() external onlyOwner {
tradingActive = true;
swapEnabled = true;
lastLpBurnTime = block.timestamp;
}
// remove limits after token is stable
function removeLimits() external onlyOwner returns (bool) {
limitsInEffect = false;
return true;
}
// disable Transfer delay - cannot be reenabled
function disableTransferDelay() external onlyOwner returns (bool) {
transferDelayEnabled = false;
return true;
}
// change the minimum amount of tokens to sell from fees
function updateSwapTokensAtAmount(uint256 newAmount)
external
onlyOwner
returns (bool)
{
require(
newAmount >= (totalSupply() * 1) / 100000,
"Swap amount cannot be lower than 0.001% total supply."
);
require(
newAmount <= (totalSupply() * 5) / 1000,
"Swap amount cannot be higher than 0.5% total supply."
);
swapTokensAtAmount = newAmount;
return true;
}
function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
require(
newNum >= ((totalSupply() * 1) / 1000) / 1e18,
"Cannot set maxTransactionAmount lower than 0.1%"
);
maxTransactionAmount = newNum * (10**18);
}
function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
require(
newNum >= ((totalSupply() * 5) / 1000) / 1e18,
"Cannot set maxWallet lower than 0.5%"
);
maxWallet = newNum * (10**18);
}
function excludeFromMaxTransaction(address updAds, bool isEx)
public
onlyOwner
{
_isExcludedMaxTransactionAmount[updAds] = isEx;
}
// only use to disable contract sales if absolutely necessary (emergency use only)
function updateSwapEnabled(bool enabled) external onlyOwner {
swapEnabled = enabled;
}
function updateBuyFees(
uint256 _burnFee,
uint256 _liquidityFee,
uint256 _devFee
) external onlyOwner {
buyBurnFee = _burnFee;
buyLiquidityFee = _liquidityFee;
buyDevFee = _devFee;
buyTotalFees = buyBurnFee + buyLiquidityFee + buyDevFee;
require(buyTotalFees <= 5, "Must keep fees at 5% or less");
}
function updateSellFees(
uint256 _burnFee,
uint256 _liquidityFee,
uint256 _devFee
) external onlyOwner {
sellBurnFee = _burnFee;
sellLiquidityFee = _liquidityFee;
sellDevFee = _devFee;
sellTotalFees = sellBurnFee + sellLiquidityFee + sellDevFee;
require(sellTotalFees <= 5, "Must keep fees at 5% or less");
}
function excludeFromFees(address account, bool excluded) public onlyOwner {
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
function setAutomatedMarketMakerPair(address pair, bool value)
public
onlyOwner
{
require(
pair != uniswapV2Pair,
"The pair cannot be removed from automatedMarketMakerPairs"
);
_setAutomatedMarketMakerPair(pair, value);
}
function _setAutomatedMarketMakerPair(address pair, bool value) private {
automatedMarketMakerPairs[pair] = value;
emit SetAutomatedMarketMakerPair(pair, value);
}
function updateDevWallet(address newWallet) external onlyOwner {
emit devWalletUpdated(newWallet, devWallet);
devWallet = newWallet;
}
function isExcludedFromFees(address account) public view returns (bool) {
return _isExcludedFromFees[account];
}
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
if (amount == 0) {
super._transfer(from, to, 0);
return;
}
if (limitsInEffect) {
if (
from != owner() &&
to != owner() &&
to != address(0) &&
to != address(0xdead) &&
!swapping
) {
if (!tradingActive) {
require(
_isExcludedFromFees[from] || _isExcludedFromFees[to],
"Trading is not active."
);
}
// at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
if (transferDelayEnabled) {
if (
to != owner() &&
to != address(uniswapV2Router) &&
to != address(uniswapV2Pair)
) {
require(
_holderLastTransferTimestamp[tx.origin] <
block.number,
"_transfer:: Transfer Delay enabled. Only one purchase per block allowed."
);
_holderLastTransferTimestamp[tx.origin] = block.number;
}
}
//when buy
if (
automatedMarketMakerPairs[from] &&
!_isExcludedMaxTransactionAmount[to]
) {
require(
amount <= maxTransactionAmount,
"Buy transfer amount exceeds the maxTransactionAmount."
);
require(
amount + balanceOf(to) <= maxWallet,
"Max wallet exceeded"
);
}
//when sell
else if (
automatedMarketMakerPairs[to] &&
!_isExcludedMaxTransactionAmount[from]
) {
require(
amount <= maxTransactionAmount,
"Sell transfer amount exceeds the maxTransactionAmount."
);
} else if (!_isExcludedMaxTransactionAmount[to]) {
require(
amount + balanceOf(to) <= maxWallet,
"Max wallet exceeded"
);
}
}
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
if (
canSwap &&
swapEnabled &&
!swapping &&
!automatedMarketMakerPairs[from] &&
!_isExcludedFromFees[from] &&
!_isExcludedFromFees[to]
) {
swapping = true;
swapBack();
swapping = false;
}
if (
!swapping &&
automatedMarketMakerPairs[to] &&
lpBurnEnabled &&
block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
!_isExcludedFromFees[from]
) {
autoBurnLiquidityPairTokens();
}
bool takeFee = !swapping;
// if any account belongs to _isExcludedFromFee account then remove the fee
if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
takeFee = false;
}
uint256 fees = 0;
// only take fees on buys/sells, do not take on wallet transfers
if (takeFee) {
// on sell
if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
fees = amount.mul(sellTotalFees).div(100);
tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
tokensForDev += (fees * sellDevFee) / sellTotalFees;
tokensForBurn += (fees * sellBurnFee) / sellTotalFees;
}
// on buy
else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
fees = amount.mul(buyTotalFees).div(100);
tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
tokensForDev += (fees * buyDevFee) / buyTotalFees;
tokensForBurn += (fees * buyBurnFee) / buyTotalFees;
}
if (fees > 0) {
super._transfer(from, address(this), fees);
}
amount -= fees;
}
super._transfer(from, to, amount);
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = uniswapV2Router.WETH();
_approve(address(this), address(uniswapV2Router), tokenAmount);
// make the swap
uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
// approve token transfer to cover all possible scenarios
_approve(address(this), address(uniswapV2Router), tokenAmount);
// add the liquidity
uniswapV2Router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
devWallet,
block.timestamp
);
}
function swapBack() private {
uint256 contractBalance = balanceOf(address(this));
uint256 totalTokensToSwap = tokensForLiquidity +
tokensForDev;
bool success;
if (contractBalance == 0 || totalTokensToSwap == 0) {
return;
}
if (contractBalance > swapTokensAtAmount * 20) {
contractBalance = swapTokensAtAmount * 20;
}
// Halve the amount of liquidity tokens
uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
totalTokensToSwap /
2;
uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens).sub(tokensForBurn);
uint256 initialETHBalance = address(this).balance;
swapTokensForEth(amountToSwapForETH);
uint256 ethBalance = address(this).balance.sub(initialETHBalance);
uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap);
uint256 ethForLiquidity = ethBalance - ethForDev;
if (tokensForBurn > 0) {
super._transfer(address(this), address(0xdead), tokensForBurn);
}
tokensForLiquidity = 0;
tokensForBurn = 0;
tokensForDev = 0;
(success, ) = address(devWallet).call{value: ethForDev}("");
if (liquidityTokens > 0 && ethForLiquidity > 0) {
addLiquidity(liquidityTokens, ethForLiquidity);
emit SwapAndLiquify(
amountToSwapForETH,
ethForLiquidity,
tokensForLiquidity
);
}
}
function setAutoLPBurnSettings(
uint256 _frequencyInSeconds,
uint256 _percent,
bool _Enabled
) external onlyOwner {
require(
_frequencyInSeconds >= 600,
"cannot set buyback more often than every 10 minutes"
);
require(
_percent <= 1000 && _percent >= 0,
"Must set auto LP burn percent between 0% and 10%"
);
lpBurnFrequency = _frequencyInSeconds;
percentForLPBurn = _percent;
lpBurnEnabled = _Enabled;
}
function autoBurnLiquidityPairTokens() internal returns (bool) {
lastLpBurnTime = block.timestamp;
// get balance of liquidity pair
uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
// calculate amount to burn
uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(
10000
);
// pull tokens from pancakePair liquidity and move to dead address permanently
if (amountToBurn > 0) {
super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
}
//sync price since this is not in a swap transaction!
IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
pair.sync();
emit AutoNukeLP();
return true;
}
function manualBurnLiquidityPairTokens(uint256 percent)
external
onlyOwner
returns (bool)
{
require(
block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
"Must wait for cooldown to finish"
);
require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
lastManualLpBurnTime = block.timestamp;
// get balance of liquidity pair
uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);
// calculate amount to burn
uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);
// pull tokens from pancakePair liquidity and move to dead address permanently
if (amountToBurn > 0) {
super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
}
//sync price since this is not in a swap transaction!
IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
pair.sync();
emit ManualNukeLP();
return true;
}
}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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60a06040526014600b556001600c60006101000a81548160ff021916908315150217905550610e10600d55610708600f556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055506001601360006101000a81548160ff02191690831515021790555060006015556000601655600260175560006019556002601a556000601b55348015620000c757600080fd5b506040518060400160405280600d81526020017f477261622050726f746f636f6c000000000000000000000000000000000000008152506040518060400160405280600481526020017f475241420000000000000000000000000000000000000000000000000000000081525081600390805190602001906200014c92919062000b0f565b5080600490805190602001906200016592919062000b0f565b505050620001886200017c620005cf60201b60201c565b620005d760201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001b48160016200069d60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023257600080fd5b505afa15801562000247573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026d919062000bd6565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002d057600080fd5b505afa158015620002e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030b919062000bd6565b6040518363ffffffff1660e01b81526004016200032a92919062000c89565b602060405180830381600087803b1580156200034557600080fd5b505af11580156200035a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000380919062000bd6565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003f5600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200069d60201b60201c565b6200042a600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200078760201b60201c565b600069d3c21bcecceda1000000905069021e19e0c9bab240000060088190555069021e19e0c9bab2400000600a819055506127106003826200046d919062000dda565b62000479919062000da2565b60098190555060175460165460155462000494919062000d45565b620004a0919062000d45565b601481905550601b54601a54601954620004bb919062000d45565b620004c7919062000d45565b60188190555072a9eee968a11828a8dffca05d978e65b87566ae600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000543620005356200082860201b60201c565b60016200085260201b60201c565b620005563060016200085260201b60201c565b6200056b61dead60016200085260201b60201c565b6200058d6200057f6200082860201b60201c565b60016200069d60201b60201c565b620005a03060016200069d60201b60201c565b620005b561dead60016200069d60201b60201c565b620005c733826200098c60201b60201c565b505062000fb9565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006ad620005cf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006d36200082860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200072c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007239062000cd3565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000862620005cf60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008886200082860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008d89062000cd3565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000980919062000cb6565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f69062000cf5565b60405180910390fd5b62000a136000838362000b0560201b60201c565b806002600082825462000a27919062000d45565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a7e919062000d45565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ae5919062000d17565b60405180910390a362000b016000838362000b0a60201b60201c565b5050565b505050565b505050565b82805462000b1d9062000e85565b90600052602060002090601f01602090048101928262000b41576000855562000b8d565b82601f1062000b5c57805160ff191683800117855562000b8d565b8280016001018555821562000b8d579182015b8281111562000b8c57825182559160200191906001019062000b6f565b5b50905062000b9c919062000ba0565b5090565b5b8082111562000bbb57600081600090555060010162000ba1565b5090565b60008151905062000bd08162000f9f565b92915050565b60006020828403121562000bef5762000bee62000f48565b5b600062000bff8482850162000bbf565b91505092915050565b62000c138162000e3b565b82525050565b62000c248162000e4f565b82525050565b600062000c3960208362000d34565b915062000c468262000f4d565b602082019050919050565b600062000c60601f8362000d34565b915062000c6d8262000f76565b602082019050919050565b62000c838162000e7b565b82525050565b600060408201905062000ca0600083018562000c08565b62000caf602083018462000c08565b9392505050565b600060208201905062000ccd600083018462000c19565b92915050565b6000602082019050818103600083015262000cee8162000c2a565b9050919050565b6000602082019050818103600083015262000d108162000c51565b9050919050565b600060208201905062000d2e600083018462000c78565b92915050565b600082825260208201905092915050565b600062000d528262000e7b565b915062000d5f8362000e7b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d975762000d9662000ebb565b5b828201905092915050565b600062000daf8262000e7b565b915062000dbc8362000e7b565b92508262000dcf5762000dce62000eea565b5b828204905092915050565b600062000de78262000e7b565b915062000df48362000e7b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e305762000e2f62000ebb565b5b828202905092915050565b600062000e488262000e5b565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000e9e57607f821691505b6020821081141562000eb55762000eb462000f19565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b62000faa8162000e3b565b811462000fb657600080fd5b50565b60805160601c615a036200100260003960008181610f2601528181612c6401528181613f9001528181614080015281816140a701528181614143015261416a0152615a036000f3fe60806040526004361061039b5760003560e01c80638ea5220f116101dc578063c17b5b8c11610102578063e2f45605116100a0578063f2fde38b1161006f578063f2fde38b14610d99578063f637434214610dc2578063f8b45b0514610ded578063fe72b27a14610e18576103a2565b8063e2f4560514610ced578063e71dc3f514610d18578063e884f26014610d43578063f11a24d314610d6e576103a2565b8063c8c8ebe4116100dc578063c8c8ebe414610c1d578063d257b34f14610c48578063d85ba06314610c85578063dd62ed3e14610cb0576103a2565b8063c17b5b8c14610ba0578063c18bc19514610bc9578063c876d0b914610bf2576103a2565b8063a0d82dc51161017a578063adb873bd11610149578063adb873bd14610ae4578063b62496f514610b0f578063bbc0c74214610b4c578063c024666814610b77576103a2565b8063a0d82dc514610a14578063a457c2d714610a3f578063a4c82a0014610a7c578063a9059cbb14610aa7576103a2565b80639a7a23d6116101b65780639a7a23d61461096a5780639c3b4fdc146109935780639ec22c0e146109be5780639fccce32146109e9576103a2565b80638ea5220f146108eb578063924de9b71461091657806395d89b411461093f576103a2565b80632e82f1a0116102c15780636ddd17131161025f578063751039fc1161022e578063751039fc146108435780637571336a1461086e5780638095d564146108975780638da5cb5b146108c0576103a2565b80636ddd17131461079b57806370a08231146107c6578063715018a614610803578063730c18881461081a576103a2565b806349bd5a5e1161029b57806349bd5a5e146106dd5780634a62bb65146107085780634fbee193146107335780636a486a8e14610770576103a2565b80632e82f1a01461064a578063313ce5671461067557806339509351146106a0576103a2565b8063199ffc721161033957806323b872dd1161030857806323b872dd146105a057806327c8f835146105dd578063293230b8146106085780632c3e486c1461061f576103a2565b8063199ffc72146104f65780631a8145bb146105215780631d7778561461054c578063203e727e14610577576103a2565b80631694505e116103755780631694505e1461044c57806318160ddd146104775780631816467f146104a2578063184c16c5146104cb576103a2565b806306fdde03146103a7578063095ea7b3146103d257806310d5de531461040f576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e55565b6040516103c99190614b0b565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f491906143de565b610ee7565b6040516104069190614ad5565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906142b1565b610f05565b6040516104439190614ad5565b60405180910390f35b34801561045857600080fd5b50610461610f24565b60405161046e9190614af0565b60405180910390f35b34801561048357600080fd5b5061048c610f48565b6040516104999190614e4d565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c491906142b1565b610f52565b005b3480156104d757600080fd5b506104e061108e565b6040516104ed9190614e4d565b60405180910390f35b34801561050257600080fd5b5061050b611094565b6040516105189190614e4d565b60405180910390f35b34801561052d57600080fd5b5061053661109a565b6040516105439190614e4d565b60405180910390f35b34801561055857600080fd5b506105616110a0565b60405161056e9190614e4d565b60405180910390f35b34801561058357600080fd5b5061059e6004803603810190610599919061444b565b6110a6565b005b3480156105ac57600080fd5b506105c760048036038101906105c2919061434b565b6111b5565b6040516105d49190614ad5565b60405180910390f35b3480156105e957600080fd5b506105f26112ad565b6040516105ff9190614a59565b60405180910390f35b34801561061457600080fd5b5061061d6112b3565b005b34801561062b57600080fd5b5061063461136e565b6040516106419190614e4d565b60405180910390f35b34801561065657600080fd5b5061065f611374565b60405161066c9190614ad5565b60405180910390f35b34801561068157600080fd5b5061068a611387565b6040516106979190614ef9565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c291906143de565b611390565b6040516106d49190614ad5565b60405180910390f35b3480156106e957600080fd5b506106f261143c565b6040516106ff9190614a59565b60405180910390f35b34801561071457600080fd5b5061071d611462565b60405161072a9190614ad5565b60405180910390f35b34801561073f57600080fd5b5061075a600480360381019061075591906142b1565b611475565b6040516107679190614ad5565b60405180910390f35b34801561077c57600080fd5b506107856114cb565b6040516107929190614e4d565b60405180910390f35b3480156107a757600080fd5b506107b06114d1565b6040516107bd9190614ad5565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e891906142b1565b6114e4565b6040516107fa9190614e4d565b60405180910390f35b34801561080f57600080fd5b5061081861152c565b005b34801561082657600080fd5b50610841600480360381019061083c91906144a5565b6115b4565b005b34801561084f57600080fd5b506108586116f4565b6040516108659190614ad5565b60405180910390f35b34801561087a57600080fd5b506108956004803603810190610890919061439e565b611794565b005b3480156108a357600080fd5b506108be60048036038101906108b991906144f8565b61186b565b005b3480156108cc57600080fd5b506108d561196a565b6040516108e29190614a59565b60405180910390f35b3480156108f757600080fd5b50610900611994565b60405161090d9190614a59565b60405180910390f35b34801561092257600080fd5b5061093d6004803603810190610938919061441e565b6119ba565b005b34801561094b57600080fd5b50610954611a53565b6040516109619190614b0b565b60405180910390f35b34801561097657600080fd5b50610991600480360381019061098c919061439e565b611ae5565b005b34801561099f57600080fd5b506109a8611c00565b6040516109b59190614e4d565b60405180910390f35b3480156109ca57600080fd5b506109d3611c06565b6040516109e09190614e4d565b60405180910390f35b3480156109f557600080fd5b506109fe611c0c565b604051610a0b9190614e4d565b60405180910390f35b348015610a2057600080fd5b50610a29611c12565b604051610a369190614e4d565b60405180910390f35b348015610a4b57600080fd5b50610a666004803603810190610a6191906143de565b611c18565b604051610a739190614ad5565b60405180910390f35b348015610a8857600080fd5b50610a91611d03565b604051610a9e9190614e4d565b60405180910390f35b348015610ab357600080fd5b50610ace6004803603810190610ac991906143de565b611d09565b604051610adb9190614ad5565b60405180910390f35b348015610af057600080fd5b50610af9611d27565b604051610b069190614e4d565b60405180910390f35b348015610b1b57600080fd5b50610b366004803603810190610b3191906142b1565b611d2d565b604051610b439190614ad5565b60405180910390f35b348015610b5857600080fd5b50610b61611d4d565b604051610b6e9190614ad5565b60405180910390f35b348015610b8357600080fd5b50610b9e6004803603810190610b99919061439e565b611d60565b005b348015610bac57600080fd5b50610bc76004803603810190610bc291906144f8565b611e85565b005b348015610bd557600080fd5b50610bf06004803603810190610beb919061444b565b611f84565b005b348015610bfe57600080fd5b50610c07612093565b604051610c149190614ad5565b60405180910390f35b348015610c2957600080fd5b50610c326120a6565b604051610c3f9190614e4d565b60405180910390f35b348015610c5457600080fd5b50610c6f6004803603810190610c6a919061444b565b6120ac565b604051610c7c9190614ad5565b60405180910390f35b348015610c9157600080fd5b50610c9a612201565b604051610ca79190614e4d565b60405180910390f35b348015610cbc57600080fd5b50610cd76004803603810190610cd2919061430b565b612207565b604051610ce49190614e4d565b60405180910390f35b348015610cf957600080fd5b50610d0261228e565b604051610d0f9190614e4d565b60405180910390f35b348015610d2457600080fd5b50610d2d612294565b604051610d3a9190614e4d565b60405180910390f35b348015610d4f57600080fd5b50610d5861229a565b604051610d659190614ad5565b60405180910390f35b348015610d7a57600080fd5b50610d8361233a565b604051610d909190614e4d565b60405180910390f35b348015610da557600080fd5b50610dc06004803603810190610dbb91906142b1565b612340565b005b348015610dce57600080fd5b50610dd7612438565b604051610de49190614e4d565b60405180910390f35b348015610df957600080fd5b50610e0261243e565b604051610e0f9190614e4d565b60405180910390f35b348015610e2457600080fd5b50610e3f6004803603810190610e3a919061444b565b612444565b604051610e4c9190614ad5565b60405180910390f35b606060038054610e6490615159565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9090615159565b8015610edd5780601f10610eb257610100808354040283529160200191610edd565b820191906000526020600020905b815481529060010190602001808311610ec057829003601f168201915b5050505050905090565b6000610efb610ef4612731565b8484612739565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610f5a612731565b73ffffffffffffffffffffffffffffffffffffffff16610f7861196a565b73ffffffffffffffffffffffffffffffffffffffff1614610fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc590614d0d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6110ae612731565b73ffffffffffffffffffffffffffffffffffffffff166110cc61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111990614d0d565b60405180910390fd5b670de0b6b3a76400006103e86001611138610f48565b6111429190614ffb565b61114c9190614fca565b6111569190614fca565b811015611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f90614e2d565b60405180910390fd5b670de0b6b3a7640000816111ac9190614ffb565b60088190555050565b60006111c2848484612904565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061120d612731565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561128d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128490614ced565b60405180910390fd5b6112a185611299612731565b858403612739565b60019150509392505050565b61dead81565b6112bb612731565b73ffffffffffffffffffffffffffffffffffffffff166112d961196a565b73ffffffffffffffffffffffffffffffffffffffff161461132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132690614d0d565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b600061143261139d612731565b8484600160006113ab612731565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461142d9190614f74565b612739565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611534612731565b73ffffffffffffffffffffffffffffffffffffffff1661155261196a565b73ffffffffffffffffffffffffffffffffffffffff16146115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f90614d0d565b60405180910390fd5b6115b2600061369e565b565b6115bc612731565b73ffffffffffffffffffffffffffffffffffffffff166115da61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790614d0d565b60405180910390fd5b610258831015611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90614bad565b60405180910390fd5b6103e88211158015611688575060008210155b6116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be90614c4d565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006116fe612731565b73ffffffffffffffffffffffffffffffffffffffff1661171c61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176990614d0d565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b61179c612731565b73ffffffffffffffffffffffffffffffffffffffff166117ba61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180790614d0d565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611873612731565b73ffffffffffffffffffffffffffffffffffffffff1661189161196a565b73ffffffffffffffffffffffffffffffffffffffff16146118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de90614d0d565b60405180910390fd5b82601581905550816016819055508060178190555060175460165460155461190f9190614f74565b6119199190614f74565b60148190555060056014541115611965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195c90614d2d565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119c2612731565b73ffffffffffffffffffffffffffffffffffffffff166119e061196a565b73ffffffffffffffffffffffffffffffffffffffff1614611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90614d0d565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611a6290615159565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8e90615159565b8015611adb5780601f10611ab057610100808354040283529160200191611adb565b820191906000526020600020905b815481529060010190602001808311611abe57829003601f168201915b5050505050905090565b611aed612731565b73ffffffffffffffffffffffffffffffffffffffff16611b0b61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5890614d0d565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be990614bed565b60405180910390fd5b611bfc8282613764565b5050565b60175481565b60105481565b601e5481565b601b5481565b60008060016000611c27612731565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb90614e0d565b60405180910390fd5b611cf8611cef612731565b85858403612739565b600191505092915050565b600e5481565b6000611d1d611d16612731565b8484612904565b6001905092915050565b60195481565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611d68612731565b73ffffffffffffffffffffffffffffffffffffffff16611d8661196a565b73ffffffffffffffffffffffffffffffffffffffff1614611ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd390614d0d565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e799190614ad5565b60405180910390a25050565b611e8d612731565b73ffffffffffffffffffffffffffffffffffffffff16611eab61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef890614d0d565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a54601954611f299190614f74565b611f339190614f74565b60188190555060056018541115611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690614d4d565b60405180910390fd5b505050565b611f8c612731565b73ffffffffffffffffffffffffffffffffffffffff16611faa61196a565b73ffffffffffffffffffffffffffffffffffffffff1614612000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff790614d0d565b60405180910390fd5b670de0b6b3a76400006103e86005612016610f48565b6120209190614ffb565b61202a9190614fca565b6120349190614fca565b811015612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d90614bcd565b60405180910390fd5b670de0b6b3a76400008161208a9190614ffb565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b60006120b6612731565b73ffffffffffffffffffffffffffffffffffffffff166120d461196a565b73ffffffffffffffffffffffffffffffffffffffff161461212a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212190614d0d565b60405180910390fd5b620186a06001612138610f48565b6121429190614ffb565b61214c9190614fca565b82101561218e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218590614c6d565b60405180910390fd5b6103e8600561219b610f48565b6121a59190614ffb565b6121af9190614fca565b8211156121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890614c8d565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60155481565b60006122a4612731565b73ffffffffffffffffffffffffffffffffffffffff166122c261196a565b73ffffffffffffffffffffffffffffffffffffffff1614612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f90614d0d565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b612348612731565b73ffffffffffffffffffffffffffffffffffffffff1661236661196a565b73ffffffffffffffffffffffffffffffffffffffff16146123bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b390614d0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561242c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242390614b6d565b60405180910390fd5b6124358161369e565b50565b601a5481565b600a5481565b600061244e612731565b73ffffffffffffffffffffffffffffffffffffffff1661246c61196a565b73ffffffffffffffffffffffffffffffffffffffff16146124c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b990614d0d565b60405180910390fd5b600f546010546124d29190614f74565b4211612513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250a90614dad565b60405180910390fd5b6103e8821115612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f90614d6d565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016125bc9190614a59565b60206040518083038186803b1580156125d457600080fd5b505afa1580156125e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260c9190614478565b90506000612637612710612629868561380590919063ffffffff16565b61381b90919063ffffffff16565b9050600081111561267257612671600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83613831565b5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156126e157600080fd5b505af11580156126f5573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a090614dcd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281090614b8d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128f79190614e4d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296b90614d8d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db90614b2d565b60405180910390fd5b60008114156129fe576129f983836000613831565b613699565b601160009054906101000a900460ff16156130c357612a1b61196a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a895750612a5961196a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ac25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612afc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b155750600660149054906101000a900460ff16155b156130c257601160019054906101000a900460ff16612c0f57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bcf5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0590614b4d565b60405180910390fd5b5b601360009054906101000a900460ff1615612dd957612c2c61196a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612cb357507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d0d5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612dd85743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8a90614ccd565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e7c5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f2357600854811115612ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebd90614cad565b60405180910390fd5b600a54612ed2836114e4565b82612edd9190614f74565b1115612f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1590614ded565b60405180910390fd5b6130c1565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fc65750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561301557600854811115613010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300790614c2d565b60405180910390fd5b6130c0565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130bf57600a54613072836114e4565b8261307d9190614f74565b11156130be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b590614ded565b60405180910390fd5b5b5b5b5b5b60006130ce306114e4565b9050600060095482101590508080156130f35750601160029054906101000a900460ff165b801561310c5750600660149054906101000a900460ff16155b80156131625750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131b85750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561320e5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613252576001600660146101000a81548160ff021916908315150217905550613236613ab2565b6000600660146101000a81548160ff0219169083151502179055505b600660149054906101000a900460ff161580156132b85750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156132d05750600c60009054906101000a900460ff165b80156132eb5750600d54600e546132e79190614f74565b4210155b80156133415750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133505761334e613cf6565b505b6000600660149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134065750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561341057600090505b6000811561368957602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561347357506000601854115b15613540576134a060646134926018548861380590919063ffffffff16565b61381b90919063ffffffff16565b9050601854601a54826134b39190614ffb565b6134bd9190614fca565b601d60008282546134ce9190614f74565b92505081905550601854601b54826134e69190614ffb565b6134f09190614fca565b601e60008282546135019190614f74565b92505081905550601854601954826135199190614ffb565b6135239190614fca565b601c60008282546135349190614f74565b92505081905550613665565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561359b57506000601454115b15613664576135c860646135ba6014548861380590919063ffffffff16565b61381b90919063ffffffff16565b9050601454601654826135db9190614ffb565b6135e59190614fca565b601d60008282546135f69190614f74565b925050819055506014546017548261360e9190614ffb565b6136189190614fca565b601e60008282546136299190614f74565b92505081905550601454601554826136419190614ffb565b61364b9190614fca565b601c600082825461365c9190614f74565b925050819055505b5b600081111561367a57613679873083613831565b5b80856136869190615055565b94505b613694878787613831565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836138139190614ffb565b905092915050565b600081836138299190614fca565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156138a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389890614d8d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390890614b2d565b60405180910390fd5b61391c838383613ed1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156139a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399990614c0d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a359190614f74565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a999190614e4d565b60405180910390a3613aac848484613ed6565b50505050565b6000613abd306114e4565b90506000601e54601d54613ad19190614f74565b9050600080831480613ae35750600082145b15613af057505050613cf4565b6014600954613aff9190614ffb565b831115613b18576014600954613b159190614ffb565b92505b6000600283601d5486613b2b9190614ffb565b613b359190614fca565b613b3f9190614fca565b90506000613b6a601c54613b5c8488613edb90919063ffffffff16565b613edb90919063ffffffff16565b90506000479050613b7a82613ef1565b6000613b8f8247613edb90919063ffffffff16565b90506000613bba87613bac601e548561380590919063ffffffff16565b61381b90919063ffffffff16565b905060008183613bca9190615055565b90506000601c541115613be757613be63061dead601c54613831565b5b6000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c4590614a44565b60006040518083038185875af1925050503d8060008114613c82576040519150601f19603f3d011682016040523d82523d6000602084013e613c87565b606091505b505080975050600086118015613c9d5750600081115b15613cea57613cac868261413d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601d54604051613ce193929190614ec2565b60405180910390a15b5050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401613d5c9190614a59565b60206040518083038186803b158015613d7457600080fd5b505afa158015613d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dac9190614478565b90506000613dd9612710613dcb600b548561380590919063ffffffff16565b61381b90919063ffffffff16565b90506000811115613e1457613e13600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83613831565b5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613e8357600080fd5b505af1158015613e97573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613ee99190615055565b905092915050565b6000600267ffffffffffffffff811115613f0e57613f0d615247565b5b604051908082528060200260200182016040528015613f3c5781602001602082028036833780820191505090505b5090503081600081518110613f5457613f53615218565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ff457600080fd5b505afa158015614008573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061402c91906142de565b816001815181106140405761403f615218565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506140a5307f000000000000000000000000000000000000000000000000000000000000000084612739565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614107959493929190614e68565b600060405180830381600087803b15801561412157600080fd5b505af1158015614135573d6000803e3d6000fd5b505050505050565b614168307f000000000000000000000000000000000000000000000000000000000000000084612739565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016141ef96959493929190614a74565b6060604051808303818588803b15801561420857600080fd5b505af115801561421c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614241919061454b565b5050505050565b60008135905061425781615988565b92915050565b60008151905061426c81615988565b92915050565b6000813590506142818161599f565b92915050565b600081359050614296816159b6565b92915050565b6000815190506142ab816159b6565b92915050565b6000602082840312156142c7576142c6615276565b5b60006142d584828501614248565b91505092915050565b6000602082840312156142f4576142f3615276565b5b60006143028482850161425d565b91505092915050565b6000806040838503121561432257614321615276565b5b600061433085828601614248565b925050602061434185828601614248565b9150509250929050565b60008060006060848603121561436457614363615276565b5b600061437286828701614248565b935050602061438386828701614248565b925050604061439486828701614287565b9150509250925092565b600080604083850312156143b5576143b4615276565b5b60006143c385828601614248565b92505060206143d485828601614272565b9150509250929050565b600080604083850312156143f5576143f4615276565b5b600061440385828601614248565b925050602061441485828601614287565b9150509250929050565b60006020828403121561443457614433615276565b5b600061444284828501614272565b91505092915050565b60006020828403121561446157614460615276565b5b600061446f84828501614287565b91505092915050565b60006020828403121561448e5761448d615276565b5b600061449c8482850161429c565b91505092915050565b6000806000606084860312156144be576144bd615276565b5b60006144cc86828701614287565b93505060206144dd86828701614287565b92505060406144ee86828701614272565b9150509250925092565b60008060006060848603121561451157614510615276565b5b600061451f86828701614287565b935050602061453086828701614287565b925050604061454186828701614287565b9150509250925092565b60008060006060848603121561456457614563615276565b5b60006145728682870161429c565b93505060206145838682870161429c565b92505060406145948682870161429c565b9150509250925092565b60006145aa83836145b6565b60208301905092915050565b6145bf81615089565b82525050565b6145ce81615089565b82525050565b60006145df82614f24565b6145e98185614f47565b93506145f483614f14565b8060005b8381101561462557815161460c888261459e565b975061461783614f3a565b9250506001810190506145f8565b5085935050505092915050565b61463b8161509b565b82525050565b61464a816150de565b82525050565b614659816150f0565b82525050565b600061466a82614f2f565b6146748185614f63565b9350614684818560208601615126565b61468d8161527b565b840191505092915050565b60006146a5602383614f63565b91506146b08261528c565b604082019050919050565b60006146c8601683614f63565b91506146d3826152db565b602082019050919050565b60006146eb602683614f63565b91506146f682615304565b604082019050919050565b600061470e602283614f63565b915061471982615353565b604082019050919050565b6000614731603383614f63565b915061473c826153a2565b604082019050919050565b6000614754602483614f63565b915061475f826153f1565b604082019050919050565b6000614777603983614f63565b915061478282615440565b604082019050919050565b600061479a602683614f63565b91506147a58261548f565b604082019050919050565b60006147bd603683614f63565b91506147c8826154de565b604082019050919050565b60006147e0603083614f63565b91506147eb8261552d565b604082019050919050565b6000614803603583614f63565b915061480e8261557c565b604082019050919050565b6000614826603483614f63565b9150614831826155cb565b604082019050919050565b6000614849603583614f63565b91506148548261561a565b604082019050919050565b600061486c604983614f63565b915061487782615669565b606082019050919050565b600061488f602883614f63565b915061489a826156de565b604082019050919050565b60006148b2602083614f63565b91506148bd8261572d565b602082019050919050565b60006148d5601c83614f63565b91506148e082615756565b602082019050919050565b60006148f8601d83614f63565b91506149038261577f565b602082019050919050565b600061491b602a83614f63565b9150614926826157a8565b604082019050919050565b600061493e602583614f63565b9150614949826157f7565b604082019050919050565b6000614961602083614f63565b915061496c82615846565b602082019050919050565b6000614984600083614f58565b915061498f8261586f565b600082019050919050565b60006149a7602483614f63565b91506149b282615872565b604082019050919050565b60006149ca601383614f63565b91506149d5826158c1565b602082019050919050565b60006149ed602583614f63565b91506149f8826158ea565b604082019050919050565b6000614a10602f83614f63565b9150614a1b82615939565b604082019050919050565b614a2f816150c7565b82525050565b614a3e816150d1565b82525050565b6000614a4f82614977565b9150819050919050565b6000602082019050614a6e60008301846145c5565b92915050565b600060c082019050614a8960008301896145c5565b614a966020830188614a26565b614aa36040830187614650565b614ab06060830186614650565b614abd60808301856145c5565b614aca60a0830184614a26565b979650505050505050565b6000602082019050614aea6000830184614632565b92915050565b6000602082019050614b056000830184614641565b92915050565b60006020820190508181036000830152614b25818461465f565b905092915050565b60006020820190508181036000830152614b4681614698565b9050919050565b60006020820190508181036000830152614b66816146bb565b9050919050565b60006020820190508181036000830152614b86816146de565b9050919050565b60006020820190508181036000830152614ba681614701565b9050919050565b60006020820190508181036000830152614bc681614724565b9050919050565b60006020820190508181036000830152614be681614747565b9050919050565b60006020820190508181036000830152614c068161476a565b9050919050565b60006020820190508181036000830152614c268161478d565b9050919050565b60006020820190508181036000830152614c46816147b0565b9050919050565b60006020820190508181036000830152614c66816147d3565b9050919050565b60006020820190508181036000830152614c86816147f6565b9050919050565b60006020820190508181036000830152614ca681614819565b9050919050565b60006020820190508181036000830152614cc68161483c565b9050919050565b60006020820190508181036000830152614ce68161485f565b9050919050565b60006020820190508181036000830152614d0681614882565b9050919050565b60006020820190508181036000830152614d26816148a5565b9050919050565b60006020820190508181036000830152614d46816148c8565b9050919050565b60006020820190508181036000830152614d66816148eb565b9050919050565b60006020820190508181036000830152614d868161490e565b9050919050565b60006020820190508181036000830152614da681614931565b9050919050565b60006020820190508181036000830152614dc681614954565b9050919050565b60006020820190508181036000830152614de68161499a565b9050919050565b60006020820190508181036000830152614e06816149bd565b9050919050565b60006020820190508181036000830152614e26816149e0565b9050919050565b60006020820190508181036000830152614e4681614a03565b9050919050565b6000602082019050614e626000830184614a26565b92915050565b600060a082019050614e7d6000830188614a26565b614e8a6020830187614650565b8181036040830152614e9c81866145d4565b9050614eab60608301856145c5565b614eb86080830184614a26565b9695505050505050565b6000606082019050614ed76000830186614a26565b614ee46020830185614a26565b614ef16040830184614a26565b949350505050565b6000602082019050614f0e6000830184614a35565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614f7f826150c7565b9150614f8a836150c7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fbf57614fbe61518b565b5b828201905092915050565b6000614fd5826150c7565b9150614fe0836150c7565b925082614ff057614fef6151ba565b5b828204905092915050565b6000615006826150c7565b9150615011836150c7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561504a5761504961518b565b5b828202905092915050565b6000615060826150c7565b915061506b836150c7565b92508282101561507e5761507d61518b565b5b828203905092915050565b6000615094826150a7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006150e982615102565b9050919050565b60006150fb826150c7565b9050919050565b600061510d82615114565b9050919050565b600061511f826150a7565b9050919050565b60005b83811015615144578082015181840152602081019050615129565b83811115615153576000848401525b50505050565b6000600282049050600182168061517157607f821691505b60208210811415615185576151846151e9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b7f4d757374206b656570206665657320617420203525206f72206c657373000000600082015250565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b61599181615089565b811461599c57600080fd5b50565b6159a88161509b565b81146159b357600080fd5b50565b6159bf816150c7565b81146159ca57600080fd5b5056fea2646970667358221220293f6b4bd85b7b2e7d48e1a61fe1946a78da54ee649a90576a96102eaa96869664736f6c63430008070033
Deployed Bytecode
0x60806040526004361061039b5760003560e01c80638ea5220f116101dc578063c17b5b8c11610102578063e2f45605116100a0578063f2fde38b1161006f578063f2fde38b14610d99578063f637434214610dc2578063f8b45b0514610ded578063fe72b27a14610e18576103a2565b8063e2f4560514610ced578063e71dc3f514610d18578063e884f26014610d43578063f11a24d314610d6e576103a2565b8063c8c8ebe4116100dc578063c8c8ebe414610c1d578063d257b34f14610c48578063d85ba06314610c85578063dd62ed3e14610cb0576103a2565b8063c17b5b8c14610ba0578063c18bc19514610bc9578063c876d0b914610bf2576103a2565b8063a0d82dc51161017a578063adb873bd11610149578063adb873bd14610ae4578063b62496f514610b0f578063bbc0c74214610b4c578063c024666814610b77576103a2565b8063a0d82dc514610a14578063a457c2d714610a3f578063a4c82a0014610a7c578063a9059cbb14610aa7576103a2565b80639a7a23d6116101b65780639a7a23d61461096a5780639c3b4fdc146109935780639ec22c0e146109be5780639fccce32146109e9576103a2565b80638ea5220f146108eb578063924de9b71461091657806395d89b411461093f576103a2565b80632e82f1a0116102c15780636ddd17131161025f578063751039fc1161022e578063751039fc146108435780637571336a1461086e5780638095d564146108975780638da5cb5b146108c0576103a2565b80636ddd17131461079b57806370a08231146107c6578063715018a614610803578063730c18881461081a576103a2565b806349bd5a5e1161029b57806349bd5a5e146106dd5780634a62bb65146107085780634fbee193146107335780636a486a8e14610770576103a2565b80632e82f1a01461064a578063313ce5671461067557806339509351146106a0576103a2565b8063199ffc721161033957806323b872dd1161030857806323b872dd146105a057806327c8f835146105dd578063293230b8146106085780632c3e486c1461061f576103a2565b8063199ffc72146104f65780631a8145bb146105215780631d7778561461054c578063203e727e14610577576103a2565b80631694505e116103755780631694505e1461044c57806318160ddd146104775780631816467f146104a2578063184c16c5146104cb576103a2565b806306fdde03146103a7578063095ea7b3146103d257806310d5de531461040f576103a2565b366103a257005b600080fd5b3480156103b357600080fd5b506103bc610e55565b6040516103c99190614b0b565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f491906143de565b610ee7565b6040516104069190614ad5565b60405180910390f35b34801561041b57600080fd5b50610436600480360381019061043191906142b1565b610f05565b6040516104439190614ad5565b60405180910390f35b34801561045857600080fd5b50610461610f24565b60405161046e9190614af0565b60405180910390f35b34801561048357600080fd5b5061048c610f48565b6040516104999190614e4d565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c491906142b1565b610f52565b005b3480156104d757600080fd5b506104e061108e565b6040516104ed9190614e4d565b60405180910390f35b34801561050257600080fd5b5061050b611094565b6040516105189190614e4d565b60405180910390f35b34801561052d57600080fd5b5061053661109a565b6040516105439190614e4d565b60405180910390f35b34801561055857600080fd5b506105616110a0565b60405161056e9190614e4d565b60405180910390f35b34801561058357600080fd5b5061059e6004803603810190610599919061444b565b6110a6565b005b3480156105ac57600080fd5b506105c760048036038101906105c2919061434b565b6111b5565b6040516105d49190614ad5565b60405180910390f35b3480156105e957600080fd5b506105f26112ad565b6040516105ff9190614a59565b60405180910390f35b34801561061457600080fd5b5061061d6112b3565b005b34801561062b57600080fd5b5061063461136e565b6040516106419190614e4d565b60405180910390f35b34801561065657600080fd5b5061065f611374565b60405161066c9190614ad5565b60405180910390f35b34801561068157600080fd5b5061068a611387565b6040516106979190614ef9565b60405180910390f35b3480156106ac57600080fd5b506106c760048036038101906106c291906143de565b611390565b6040516106d49190614ad5565b60405180910390f35b3480156106e957600080fd5b506106f261143c565b6040516106ff9190614a59565b60405180910390f35b34801561071457600080fd5b5061071d611462565b60405161072a9190614ad5565b60405180910390f35b34801561073f57600080fd5b5061075a600480360381019061075591906142b1565b611475565b6040516107679190614ad5565b60405180910390f35b34801561077c57600080fd5b506107856114cb565b6040516107929190614e4d565b60405180910390f35b3480156107a757600080fd5b506107b06114d1565b6040516107bd9190614ad5565b60405180910390f35b3480156107d257600080fd5b506107ed60048036038101906107e891906142b1565b6114e4565b6040516107fa9190614e4d565b60405180910390f35b34801561080f57600080fd5b5061081861152c565b005b34801561082657600080fd5b50610841600480360381019061083c91906144a5565b6115b4565b005b34801561084f57600080fd5b506108586116f4565b6040516108659190614ad5565b60405180910390f35b34801561087a57600080fd5b506108956004803603810190610890919061439e565b611794565b005b3480156108a357600080fd5b506108be60048036038101906108b991906144f8565b61186b565b005b3480156108cc57600080fd5b506108d561196a565b6040516108e29190614a59565b60405180910390f35b3480156108f757600080fd5b50610900611994565b60405161090d9190614a59565b60405180910390f35b34801561092257600080fd5b5061093d6004803603810190610938919061441e565b6119ba565b005b34801561094b57600080fd5b50610954611a53565b6040516109619190614b0b565b60405180910390f35b34801561097657600080fd5b50610991600480360381019061098c919061439e565b611ae5565b005b34801561099f57600080fd5b506109a8611c00565b6040516109b59190614e4d565b60405180910390f35b3480156109ca57600080fd5b506109d3611c06565b6040516109e09190614e4d565b60405180910390f35b3480156109f557600080fd5b506109fe611c0c565b604051610a0b9190614e4d565b60405180910390f35b348015610a2057600080fd5b50610a29611c12565b604051610a369190614e4d565b60405180910390f35b348015610a4b57600080fd5b50610a666004803603810190610a6191906143de565b611c18565b604051610a739190614ad5565b60405180910390f35b348015610a8857600080fd5b50610a91611d03565b604051610a9e9190614e4d565b60405180910390f35b348015610ab357600080fd5b50610ace6004803603810190610ac991906143de565b611d09565b604051610adb9190614ad5565b60405180910390f35b348015610af057600080fd5b50610af9611d27565b604051610b069190614e4d565b60405180910390f35b348015610b1b57600080fd5b50610b366004803603810190610b3191906142b1565b611d2d565b604051610b439190614ad5565b60405180910390f35b348015610b5857600080fd5b50610b61611d4d565b604051610b6e9190614ad5565b60405180910390f35b348015610b8357600080fd5b50610b9e6004803603810190610b99919061439e565b611d60565b005b348015610bac57600080fd5b50610bc76004803603810190610bc291906144f8565b611e85565b005b348015610bd557600080fd5b50610bf06004803603810190610beb919061444b565b611f84565b005b348015610bfe57600080fd5b50610c07612093565b604051610c149190614ad5565b60405180910390f35b348015610c2957600080fd5b50610c326120a6565b604051610c3f9190614e4d565b60405180910390f35b348015610c5457600080fd5b50610c6f6004803603810190610c6a919061444b565b6120ac565b604051610c7c9190614ad5565b60405180910390f35b348015610c9157600080fd5b50610c9a612201565b604051610ca79190614e4d565b60405180910390f35b348015610cbc57600080fd5b50610cd76004803603810190610cd2919061430b565b612207565b604051610ce49190614e4d565b60405180910390f35b348015610cf957600080fd5b50610d0261228e565b604051610d0f9190614e4d565b60405180910390f35b348015610d2457600080fd5b50610d2d612294565b604051610d3a9190614e4d565b60405180910390f35b348015610d4f57600080fd5b50610d5861229a565b604051610d659190614ad5565b60405180910390f35b348015610d7a57600080fd5b50610d8361233a565b604051610d909190614e4d565b60405180910390f35b348015610da557600080fd5b50610dc06004803603810190610dbb91906142b1565b612340565b005b348015610dce57600080fd5b50610dd7612438565b604051610de49190614e4d565b60405180910390f35b348015610df957600080fd5b50610e0261243e565b604051610e0f9190614e4d565b60405180910390f35b348015610e2457600080fd5b50610e3f6004803603810190610e3a919061444b565b612444565b604051610e4c9190614ad5565b60405180910390f35b606060038054610e6490615159565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9090615159565b8015610edd5780601f10610eb257610100808354040283529160200191610edd565b820191906000526020600020905b815481529060010190602001808311610ec057829003601f168201915b5050505050905090565b6000610efb610ef4612731565b8484612739565b6001905092915050565b602080528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610f5a612731565b73ffffffffffffffffffffffffffffffffffffffff16610f7861196a565b73ffffffffffffffffffffffffffffffffffffffff1614610fce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc590614d0d565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b600b5481565b601d5481565b601c5481565b6110ae612731565b73ffffffffffffffffffffffffffffffffffffffff166110cc61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611122576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111990614d0d565b60405180910390fd5b670de0b6b3a76400006103e86001611138610f48565b6111429190614ffb565b61114c9190614fca565b6111569190614fca565b811015611198576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118f90614e2d565b60405180910390fd5b670de0b6b3a7640000816111ac9190614ffb565b60088190555050565b60006111c2848484612904565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061120d612731565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561128d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128490614ced565b60405180910390fd5b6112a185611299612731565b858403612739565b60019150509392505050565b61dead81565b6112bb612731565b73ffffffffffffffffffffffffffffffffffffffff166112d961196a565b73ffffffffffffffffffffffffffffffffffffffff161461132f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132690614d0d565b60405180910390fd5b6001601160016101000a81548160ff0219169083151502179055506001601160026101000a81548160ff02191690831515021790555042600e81905550565b600d5481565b600c60009054906101000a900460ff1681565b60006012905090565b600061143261139d612731565b8484600160006113ab612731565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461142d9190614f74565b612739565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601160009054906101000a900460ff1681565b6000601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60185481565b601160029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611534612731565b73ffffffffffffffffffffffffffffffffffffffff1661155261196a565b73ffffffffffffffffffffffffffffffffffffffff16146115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f90614d0d565b60405180910390fd5b6115b2600061369e565b565b6115bc612731565b73ffffffffffffffffffffffffffffffffffffffff166115da61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611630576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162790614d0d565b60405180910390fd5b610258831015611675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166c90614bad565b60405180910390fd5b6103e88211158015611688575060008210155b6116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be90614c4d565b60405180910390fd5b82600d8190555081600b8190555080600c60006101000a81548160ff021916908315150217905550505050565b60006116fe612731565b73ffffffffffffffffffffffffffffffffffffffff1661171c61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176990614d0d565b60405180910390fd5b6000601160006101000a81548160ff0219169083151502179055506001905090565b61179c612731565b73ffffffffffffffffffffffffffffffffffffffff166117ba61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611810576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180790614d0d565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611873612731565b73ffffffffffffffffffffffffffffffffffffffff1661189161196a565b73ffffffffffffffffffffffffffffffffffffffff16146118e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118de90614d0d565b60405180910390fd5b82601581905550816016819055508060178190555060175460165460155461190f9190614f74565b6119199190614f74565b60148190555060056014541115611965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195c90614d2d565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119c2612731565b73ffffffffffffffffffffffffffffffffffffffff166119e061196a565b73ffffffffffffffffffffffffffffffffffffffff1614611a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2d90614d0d565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b606060048054611a6290615159565b80601f0160208091040260200160405190810160405280929190818152602001828054611a8e90615159565b8015611adb5780601f10611ab057610100808354040283529160200191611adb565b820191906000526020600020905b815481529060010190602001808311611abe57829003601f168201915b5050505050905090565b611aed612731565b73ffffffffffffffffffffffffffffffffffffffff16611b0b61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5890614d0d565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be990614bed565b60405180910390fd5b611bfc8282613764565b5050565b60175481565b60105481565b601e5481565b601b5481565b60008060016000611c27612731565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ce4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cdb90614e0d565b60405180910390fd5b611cf8611cef612731565b85858403612739565b600191505092915050565b600e5481565b6000611d1d611d16612731565b8484612904565b6001905092915050565b60195481565b60216020528060005260406000206000915054906101000a900460ff1681565b601160019054906101000a900460ff1681565b611d68612731565b73ffffffffffffffffffffffffffffffffffffffff16611d8661196a565b73ffffffffffffffffffffffffffffffffffffffff1614611ddc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd390614d0d565b60405180910390fd5b80601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611e799190614ad5565b60405180910390a25050565b611e8d612731565b73ffffffffffffffffffffffffffffffffffffffff16611eab61196a565b73ffffffffffffffffffffffffffffffffffffffff1614611f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef890614d0d565b60405180910390fd5b8260198190555081601a8190555080601b81905550601b54601a54601954611f299190614f74565b611f339190614f74565b60188190555060056018541115611f7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7690614d4d565b60405180910390fd5b505050565b611f8c612731565b73ffffffffffffffffffffffffffffffffffffffff16611faa61196a565b73ffffffffffffffffffffffffffffffffffffffff1614612000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff790614d0d565b60405180910390fd5b670de0b6b3a76400006103e86005612016610f48565b6120209190614ffb565b61202a9190614fca565b6120349190614fca565b811015612076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206d90614bcd565b60405180910390fd5b670de0b6b3a76400008161208a9190614ffb565b600a8190555050565b601360009054906101000a900460ff1681565b60085481565b60006120b6612731565b73ffffffffffffffffffffffffffffffffffffffff166120d461196a565b73ffffffffffffffffffffffffffffffffffffffff161461212a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212190614d0d565b60405180910390fd5b620186a06001612138610f48565b6121429190614ffb565b61214c9190614fca565b82101561218e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218590614c6d565b60405180910390fd5b6103e8600561219b610f48565b6121a59190614ffb565b6121af9190614fca565b8211156121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890614c8d565b60405180910390fd5b8160098190555060019050919050565b60145481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b60155481565b60006122a4612731565b73ffffffffffffffffffffffffffffffffffffffff166122c261196a565b73ffffffffffffffffffffffffffffffffffffffff1614612318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230f90614d0d565b60405180910390fd5b6000601360006101000a81548160ff0219169083151502179055506001905090565b60165481565b612348612731565b73ffffffffffffffffffffffffffffffffffffffff1661236661196a565b73ffffffffffffffffffffffffffffffffffffffff16146123bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b390614d0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561242c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242390614b6d565b60405180910390fd5b6124358161369e565b50565b601a5481565b600a5481565b600061244e612731565b73ffffffffffffffffffffffffffffffffffffffff1661246c61196a565b73ffffffffffffffffffffffffffffffffffffffff16146124c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b990614d0d565b60405180910390fd5b600f546010546124d29190614f74565b4211612513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250a90614dad565b60405180910390fd5b6103e8821115612558576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254f90614d6d565b60405180910390fd5b4260108190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016125bc9190614a59565b60206040518083038186803b1580156125d457600080fd5b505afa1580156125e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260c9190614478565b90506000612637612710612629868561380590919063ffffffff16565b61381b90919063ffffffff16565b9050600081111561267257612671600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83613831565b5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156126e157600080fd5b505af11580156126f5573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a090614dcd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612819576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281090614b8d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128f79190614e4d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296b90614d8d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129db90614b2d565b60405180910390fd5b60008114156129fe576129f983836000613831565b613699565b601160009054906101000a900460ff16156130c357612a1b61196a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612a895750612a5961196a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ac25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612afc575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b155750600660149054906101000a900460ff16155b156130c257601160019054906101000a900460ff16612c0f57601f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bcf5750601f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c0590614b4d565b60405180910390fd5b5b601360009054906101000a900460ff1615612dd957612c2c61196a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612cb357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d0d5750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612dd85743601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8a90614ccd565b60405180910390fd5b43601260003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e7c5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f2357600854811115612ec6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ebd90614cad565b60405180910390fd5b600a54612ed2836114e4565b82612edd9190614f74565b1115612f1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1590614ded565b60405180910390fd5b6130c1565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fc65750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561301557600854811115613010576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300790614c2d565b60405180910390fd5b6130c0565b602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166130bf57600a54613072836114e4565b8261307d9190614f74565b11156130be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130b590614ded565b60405180910390fd5b5b5b5b5b5b60006130ce306114e4565b9050600060095482101590508080156130f35750601160029054906101000a900460ff165b801561310c5750600660149054906101000a900460ff16155b80156131625750602160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131b85750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561320e5750601f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613252576001600660146101000a81548160ff021916908315150217905550613236613ab2565b6000600660146101000a81548160ff0219169083151502179055505b600660149054906101000a900460ff161580156132b85750602160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156132d05750600c60009054906101000a900460ff165b80156132eb5750600d54600e546132e79190614f74565b4210155b80156133415750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133505761334e613cf6565b505b6000600660149054906101000a900460ff16159050601f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134065750601f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561341057600090505b6000811561368957602160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561347357506000601854115b15613540576134a060646134926018548861380590919063ffffffff16565b61381b90919063ffffffff16565b9050601854601a54826134b39190614ffb565b6134bd9190614fca565b601d60008282546134ce9190614f74565b92505081905550601854601b54826134e69190614ffb565b6134f09190614fca565b601e60008282546135019190614f74565b92505081905550601854601954826135199190614ffb565b6135239190614fca565b601c60008282546135349190614f74565b92505081905550613665565b602160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561359b57506000601454115b15613664576135c860646135ba6014548861380590919063ffffffff16565b61381b90919063ffffffff16565b9050601454601654826135db9190614ffb565b6135e59190614fca565b601d60008282546135f69190614f74565b925050819055506014546017548261360e9190614ffb565b6136189190614fca565b601e60008282546136299190614f74565b92505081905550601454601554826136419190614ffb565b61364b9190614fca565b601c600082825461365c9190614f74565b925050819055505b5b600081111561367a57613679873083613831565b5b80856136869190615055565b94505b613694878787613831565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600081836138139190614ffb565b905092915050565b600081836138299190614fca565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156138a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161389890614d8d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613911576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161390890614b2d565b60405180910390fd5b61391c838383613ed1565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156139a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161399990614c0d565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613a359190614f74565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613a999190614e4d565b60405180910390a3613aac848484613ed6565b50505050565b6000613abd306114e4565b90506000601e54601d54613ad19190614f74565b9050600080831480613ae35750600082145b15613af057505050613cf4565b6014600954613aff9190614ffb565b831115613b18576014600954613b159190614ffb565b92505b6000600283601d5486613b2b9190614ffb565b613b359190614fca565b613b3f9190614fca565b90506000613b6a601c54613b5c8488613edb90919063ffffffff16565b613edb90919063ffffffff16565b90506000479050613b7a82613ef1565b6000613b8f8247613edb90919063ffffffff16565b90506000613bba87613bac601e548561380590919063ffffffff16565b61381b90919063ffffffff16565b905060008183613bca9190615055565b90506000601c541115613be757613be63061dead601c54613831565b5b6000601d819055506000601c819055506000601e81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613c4590614a44565b60006040518083038185875af1925050503d8060008114613c82576040519150601f19603f3d011682016040523d82523d6000602084013e613c87565b606091505b505080975050600086118015613c9d5750600081115b15613cea57613cac868261413d565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618582601d54604051613ce193929190614ec2565b60405180910390a15b5050505050505050505b565b600042600e8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a08231600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401613d5c9190614a59565b60206040518083038186803b158015613d7457600080fd5b505afa158015613d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dac9190614478565b90506000613dd9612710613dcb600b548561380590919063ffffffff16565b61381b90919063ffffffff16565b90506000811115613e1457613e13600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661dead83613831565b5b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613e8357600080fd5b505af1158015613e97573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b505050565b505050565b60008183613ee99190615055565b905092915050565b6000600267ffffffffffffffff811115613f0e57613f0d615247565b5b604051908082528060200260200182016040528015613f3c5781602001602082028036833780820191505090505b5090503081600081518110613f5457613f53615218565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613ff457600080fd5b505afa158015614008573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061402c91906142de565b816001815181106140405761403f615218565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506140a5307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612739565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401614107959493929190614e68565b600060405180830381600087803b15801561412157600080fd5b505af1158015614135573d6000803e3d6000fd5b505050505050565b614168307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612739565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016141ef96959493929190614a74565b6060604051808303818588803b15801561420857600080fd5b505af115801561421c573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614241919061454b565b5050505050565b60008135905061425781615988565b92915050565b60008151905061426c81615988565b92915050565b6000813590506142818161599f565b92915050565b600081359050614296816159b6565b92915050565b6000815190506142ab816159b6565b92915050565b6000602082840312156142c7576142c6615276565b5b60006142d584828501614248565b91505092915050565b6000602082840312156142f4576142f3615276565b5b60006143028482850161425d565b91505092915050565b6000806040838503121561432257614321615276565b5b600061433085828601614248565b925050602061434185828601614248565b9150509250929050565b60008060006060848603121561436457614363615276565b5b600061437286828701614248565b935050602061438386828701614248565b925050604061439486828701614287565b9150509250925092565b600080604083850312156143b5576143b4615276565b5b60006143c385828601614248565b92505060206143d485828601614272565b9150509250929050565b600080604083850312156143f5576143f4615276565b5b600061440385828601614248565b925050602061441485828601614287565b9150509250929050565b60006020828403121561443457614433615276565b5b600061444284828501614272565b91505092915050565b60006020828403121561446157614460615276565b5b600061446f84828501614287565b91505092915050565b60006020828403121561448e5761448d615276565b5b600061449c8482850161429c565b91505092915050565b6000806000606084860312156144be576144bd615276565b5b60006144cc86828701614287565b93505060206144dd86828701614287565b92505060406144ee86828701614272565b9150509250925092565b60008060006060848603121561451157614510615276565b5b600061451f86828701614287565b935050602061453086828701614287565b925050604061454186828701614287565b9150509250925092565b60008060006060848603121561456457614563615276565b5b60006145728682870161429c565b93505060206145838682870161429c565b92505060406145948682870161429c565b9150509250925092565b60006145aa83836145b6565b60208301905092915050565b6145bf81615089565b82525050565b6145ce81615089565b82525050565b60006145df82614f24565b6145e98185614f47565b93506145f483614f14565b8060005b8381101561462557815161460c888261459e565b975061461783614f3a565b9250506001810190506145f8565b5085935050505092915050565b61463b8161509b565b82525050565b61464a816150de565b82525050565b614659816150f0565b82525050565b600061466a82614f2f565b6146748185614f63565b9350614684818560208601615126565b61468d8161527b565b840191505092915050565b60006146a5602383614f63565b91506146b08261528c565b604082019050919050565b60006146c8601683614f63565b91506146d3826152db565b602082019050919050565b60006146eb602683614f63565b91506146f682615304565b604082019050919050565b600061470e602283614f63565b915061471982615353565b604082019050919050565b6000614731603383614f63565b915061473c826153a2565b604082019050919050565b6000614754602483614f63565b915061475f826153f1565b604082019050919050565b6000614777603983614f63565b915061478282615440565b604082019050919050565b600061479a602683614f63565b91506147a58261548f565b604082019050919050565b60006147bd603683614f63565b91506147c8826154de565b604082019050919050565b60006147e0603083614f63565b91506147eb8261552d565b604082019050919050565b6000614803603583614f63565b915061480e8261557c565b604082019050919050565b6000614826603483614f63565b9150614831826155cb565b604082019050919050565b6000614849603583614f63565b91506148548261561a565b604082019050919050565b600061486c604983614f63565b915061487782615669565b606082019050919050565b600061488f602883614f63565b915061489a826156de565b604082019050919050565b60006148b2602083614f63565b91506148bd8261572d565b602082019050919050565b60006148d5601c83614f63565b91506148e082615756565b602082019050919050565b60006148f8601d83614f63565b91506149038261577f565b602082019050919050565b600061491b602a83614f63565b9150614926826157a8565b604082019050919050565b600061493e602583614f63565b9150614949826157f7565b604082019050919050565b6000614961602083614f63565b915061496c82615846565b602082019050919050565b6000614984600083614f58565b915061498f8261586f565b600082019050919050565b60006149a7602483614f63565b91506149b282615872565b604082019050919050565b60006149ca601383614f63565b91506149d5826158c1565b602082019050919050565b60006149ed602583614f63565b91506149f8826158ea565b604082019050919050565b6000614a10602f83614f63565b9150614a1b82615939565b604082019050919050565b614a2f816150c7565b82525050565b614a3e816150d1565b82525050565b6000614a4f82614977565b9150819050919050565b6000602082019050614a6e60008301846145c5565b92915050565b600060c082019050614a8960008301896145c5565b614a966020830188614a26565b614aa36040830187614650565b614ab06060830186614650565b614abd60808301856145c5565b614aca60a0830184614a26565b979650505050505050565b6000602082019050614aea6000830184614632565b92915050565b6000602082019050614b056000830184614641565b92915050565b60006020820190508181036000830152614b25818461465f565b905092915050565b60006020820190508181036000830152614b4681614698565b9050919050565b60006020820190508181036000830152614b66816146bb565b9050919050565b60006020820190508181036000830152614b86816146de565b9050919050565b60006020820190508181036000830152614ba681614701565b9050919050565b60006020820190508181036000830152614bc681614724565b9050919050565b60006020820190508181036000830152614be681614747565b9050919050565b60006020820190508181036000830152614c068161476a565b9050919050565b60006020820190508181036000830152614c268161478d565b9050919050565b60006020820190508181036000830152614c46816147b0565b9050919050565b60006020820190508181036000830152614c66816147d3565b9050919050565b60006020820190508181036000830152614c86816147f6565b9050919050565b60006020820190508181036000830152614ca681614819565b9050919050565b60006020820190508181036000830152614cc68161483c565b9050919050565b60006020820190508181036000830152614ce68161485f565b9050919050565b60006020820190508181036000830152614d0681614882565b9050919050565b60006020820190508181036000830152614d26816148a5565b9050919050565b60006020820190508181036000830152614d46816148c8565b9050919050565b60006020820190508181036000830152614d66816148eb565b9050919050565b60006020820190508181036000830152614d868161490e565b9050919050565b60006020820190508181036000830152614da681614931565b9050919050565b60006020820190508181036000830152614dc681614954565b9050919050565b60006020820190508181036000830152614de68161499a565b9050919050565b60006020820190508181036000830152614e06816149bd565b9050919050565b60006020820190508181036000830152614e26816149e0565b9050919050565b60006020820190508181036000830152614e4681614a03565b9050919050565b6000602082019050614e626000830184614a26565b92915050565b600060a082019050614e7d6000830188614a26565b614e8a6020830187614650565b8181036040830152614e9c81866145d4565b9050614eab60608301856145c5565b614eb86080830184614a26565b9695505050505050565b6000606082019050614ed76000830186614a26565b614ee46020830185614a26565b614ef16040830184614a26565b949350505050565b6000602082019050614f0e6000830184614a35565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000614f7f826150c7565b9150614f8a836150c7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614fbf57614fbe61518b565b5b828201905092915050565b6000614fd5826150c7565b9150614fe0836150c7565b925082614ff057614fef6151ba565b5b828204905092915050565b6000615006826150c7565b9150615011836150c7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561504a5761504961518b565b5b828202905092915050565b6000615060826150c7565b915061506b836150c7565b92508282101561507e5761507d61518b565b5b828203905092915050565b6000615094826150a7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006150e982615102565b9050919050565b60006150fb826150c7565b9050919050565b600061510d82615114565b9050919050565b600061511f826150a7565b9050919050565b60005b83811015615144578082015181840152602081019050615129565b83811115615153576000848401525b50505050565b6000600282049050600182168061517157607f821691505b60208210811415615185576151846151e9565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d757374206b6565702066656573206174203525206f72206c65737300000000600082015250565b7f4d757374206b656570206665657320617420203525206f72206c657373000000600082015250565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b50565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b61599181615089565b811461599c57600080fd5b50565b6159a88161509b565b81146159b357600080fd5b50565b6159bf816150c7565b81146159ca57600080fd5b5056fea2646970667358221220293f6b4bd85b7b2e7d48e1a61fe1946a78da54ee649a90576a96102eaa96869664736f6c63430008070033
Deployed Bytecode Sourcemap
27096:18242:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9692:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12000:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28699:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27178:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10812:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34887:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27696:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27511:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28483:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28448:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32483:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12692:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27271:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31385:154;;;;;;;;;;;;;:::i;:::-;;27606:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27567:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10654:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13630:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27236:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27794:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35052:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28292:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27874:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10983:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3488:103;;;;;;;;;;;;;:::i;:::-;;42920:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31591:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33030:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33401:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2837:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27363:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33293:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9911:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34379:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28254:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27750:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28523:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28409:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14430:482;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27658:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11373:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28328:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28920:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27834:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34189:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33790:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32766:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28092:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27396:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31978:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28140:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11652:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27438:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28175:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31773:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28212:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3746:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28366:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27478:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44279:1056;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9692:100;9746:13;9779:5;9772:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9692:100;:::o;12000:210::-;12119:4;12141:39;12150:12;:10;:12::i;:::-;12164:7;12173:6;12141:8;:39::i;:::-;12198:4;12191:11;;12000:210;;;;:::o;28699:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;27178:51::-;;;:::o;10812:108::-;10873:7;10900:12;;10893:19;;10812:108;:::o;34887:157::-;3068:12;:10;:12::i;:::-;3057:23;;:7;:5;:7::i;:::-;:23;;;3049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34994:9:::1;;;;;;;;;;;34966:38;;34983:9;34966:38;;;;;;;;;;;;35027:9;35015;;:21;;;;;;;;;;;;;;;;;;34887:157:::0;:::o;27696:47::-;;;;:::o;27511:36::-;;;;:::o;28483:33::-;;;;:::o;28448:28::-;;;;:::o;32483:275::-;3068:12;:10;:12::i;:::-;3057:23;;:7;:5;:7::i;:::-;:23;;;3049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32620:4:::1;32612;32607:1;32591:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32590:26;;;;:::i;:::-;32589:35;;;;:::i;:::-;32579:6;:45;;32557:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;32743:6;32733;:17;;;;:::i;:::-;32710:20;:40;;;;32483:275:::0;:::o;12692:529::-;12832:4;12849:36;12859:6;12867:9;12878:6;12849:9;:36::i;:::-;12898:24;12925:11;:19;12937:6;12925:19;;;;;;;;;;;;;;;:33;12945:12;:10;:12::i;:::-;12925:33;;;;;;;;;;;;;;;;12898:60;;13011:6;12991:16;:26;;12969:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;13121:57;13130:6;13138:12;:10;:12::i;:::-;13171:6;13152:16;:25;13121:8;:57::i;:::-;13209:4;13202:11;;;12692:529;;;;;:::o;27271:53::-;27317:6;27271:53;:::o;31385:154::-;3068:12;:10;:12::i;:::-;3057:23;;:7;:5;:7::i;:::-;:23;;;3049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31455:4:::1;31439:13;;:20;;;;;;;;;;;;;;;;;;31484:4;31470:11;;:18;;;;;;;;;;;;;;;;;;31516:15;31499:14;:32;;;;31385:154::o:0;27606:45::-;;;;:::o;27567:32::-;;;;;;;;;;;;;:::o;10654:93::-;10712:5;10737:2;10730:9;;10654:93;:::o;13630:297::-;13745:4;13767:130;13790:12;:10;:12::i;:::-;13817:7;13876:10;13839:11;:25;13851:12;:10;:12::i;:::-;13839:25;;;;;;;;;;;;;;;:34;13865:7;13839:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13767:8;:130::i;:::-;13915:4;13908:11;;13630:297;;;;:::o;27236:28::-;;;;;;;;;;;;;:::o;27794:33::-;;;;;;;;;;;;;:::o;35052:126::-;35118:4;35142:19;:28;35162:7;35142:28;;;;;;;;;;;;;;;;;;;;;;;;;35135:35;;35052:126;;;:::o;28292:29::-;;;;:::o;27874:31::-;;;;;;;;;;;;;:::o;10983:177::-;11102:7;11134:9;:18;11144:7;11134:18;;;;;;;;;;;;;;;;11127:25;;10983:177;;;:::o;3488:103::-;3068:12;:10;:12::i;:::-;3057:23;;:7;:5;:7::i;:::-;:23;;;3049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3553:30:::1;3580:1;3553:18;:30::i;:::-;3488:103::o:0;42920:555::-;3068:12;:10;:12::i;:::-;3057:23;;:7;:5;:7::i;:::-;:23;;;3049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43122:3:::1;43099:19;:26;;43077:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;43249:4;43237:8;:16;;:33;;;;;43269:1;43257:8;:13;;43237:33;43215:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;43375:19;43357:15;:37;;;;43424:8;43405:16;:27;;;;43459:8;43443:13;;:24;;;;;;;;;;;;;;;;;;42920:555:::0;;;:::o;31591:121::-;31643:4;3068:12;:10;:12::i;:::-;3057:23;;:7;:5;:7::i;:::-;:23;;;3049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31677:5:::1;31660:14;;:22;;;;;;;;;;;;;;;;;;31700:4;31693:11;;31591:121:::0;:::o;33030:167::-;3068:12;:10;:12::i;:::-;3057:23;;:7;:5;:7::i;:::-;:23;;;3049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33185:4:::1;33143:31;:39;33175:6;33143:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33030:167:::0;;:::o;33401:381::-;3068:12;:10;:12::i;:::-;3057:23;;:7;:5;:7::i;:::-;:23;;;3049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33559:8:::1;33546:10;:21;;;;33596:13;33578:15;:31;;;;33632:7;33620:9;:19;;;;33696:9;;33678:15;;33665:10;;:28;;;;:::i;:::-;:40;;;;:::i;:::-;33650:12;:55;;;;33740:1;33724:12;;:17;;33716:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33401:381:::0;;;:::o;2837:87::-;2883:7;2910:6;;;;;;;;;;;2903:13;;2837:87;:::o;27363:24::-;;;;;;;;;;;;;:::o;33293:100::-;3068:12;:10;:12::i;:::-;3057:23;;:7;:5;:7::i;:::-;:23;;;3049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33378:7:::1;33364:11;;:21;;;;;;;;;;;;;;;;;;33293:100:::0;:::o;9911:104::-;9967:13;10000:7;9993:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9911:104;:::o;34379:304::-;3068:12;:10;:12::i;:::-;3057:23;;:7;:5;:7::i;:::-;:23;;;3049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34523:13:::1;;;;;;;;;;;34515:21;;:4;:21;;;;34493:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;34634:41;34663:4;34669:5;34634:28;:41::i;:::-;34379:304:::0;;:::o;28254:29::-;;;;:::o;27750:35::-;;;;:::o;28523:27::-;;;;:::o;28409:30::-;;;;:::o;14430:482::-;14550:4;14572:24;14599:11;:25;14611:12;:10;:12::i;:::-;14599:25;;;;;;;;;;;;;;;:34;14625:7;14599:34;;;;;;;;;;;;;;;;14572:61;;14686:15;14666:16;:35;;14644:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14802:67;14811:12;:10;:12::i;:::-;14825:7;14853:15;14834:16;:34;14802:8;:67::i;:::-;14900:4;14893:11;;;14430:482;;;;:::o;27658:29::-;;;;:::o;11373:216::-;11495:4;11517:42;11527:12;:10;:12::i;:::-;11541:9;11552:6;11517:9;:42::i;:::-;11577:4;11570:11;;11373:216;;;;:::o;28328:31::-;;;;:::o;28920:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;27834:33::-;;;;;;;;;;;;;:::o;34189:182::-;3068:12;:10;:12::i;:::-;3057:23;;:7;:5;:7::i;:::-;:23;;;3049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34305:8:::1;34274:19;:28;34294:7;34274:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34345:7;34329:34;;;34354:8;34329:34;;;;;;:::i;:::-;;;;;;;;34189:182:::0;;:::o;33790:391::-;3068:12;:10;:12::i;:::-;3057:23;;:7;:5;:7::i;:::-;:23;;;3049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33950:8:::1;33936:11;:22;;;;33988:13;33969:16;:32;;;;34025:7;34012:10;:20;;;;34092:10;;34073:16;;34059:11;;:30;;;;:::i;:::-;:43;;;;:::i;:::-;34043:13;:59;;;;34138:1;34121:13;;:18;;34113:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;33790:391:::0;;;:::o;32766:256::-;3068:12;:10;:12::i;:::-;3057:23;;:7;:5;:7::i;:::-;:23;;;3049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32906:4:::1;32898;32893:1;32877:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32876:26;;;;:::i;:::-;32875:35;;;;:::i;:::-;32865:6;:45;;32843:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;33007:6;32997;:17;;;;:::i;:::-;32985:9;:29;;;;32766:256:::0;:::o;28092:39::-;;;;;;;;;;;;;:::o;27396:35::-;;;;:::o;31978:497::-;32086:4;3068:12;:10;:12::i;:::-;3057:23;;:7;:5;:7::i;:::-;:23;;;3049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32165:6:::1;32160:1;32144:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32143:28;;;;:::i;:::-;32130:9;:41;;32108:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;32320:4;32315:1;32299:13;:11;:13::i;:::-;:17;;;;:::i;:::-;32298:26;;;;:::i;:::-;32285:9;:39;;32263:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;32436:9;32415:18;:30;;;;32463:4;32456:11;;31978:497:::0;;;:::o;28140:28::-;;;;:::o;11652:201::-;11786:7;11818:11;:18;11830:5;11818:18;;;;;;;;;;;;;;;:27;11837:7;11818:27;;;;;;;;;;;;;;;;11811:34;;11652:201;;;;:::o;27438:33::-;;;;:::o;28175:30::-;;;;:::o;31773:135::-;31833:4;3068:12;:10;:12::i;:::-;3057:23;;:7;:5;:7::i;:::-;:23;;;3049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31873:5:::1;31850:20;;:28;;;;;;;;;;;;;;;;;;31896:4;31889:11;;31773:135:::0;:::o;28212:35::-;;;;:::o;3746:238::-;3068:12;:10;:12::i;:::-;3057:23;;:7;:5;:7::i;:::-;:23;;;3049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3869:1:::1;3849:22;;:8;:22;;;;3827:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;3948:28;3967:8;3948:18;:28::i;:::-;3746:238:::0;:::o;28366:36::-;;;;:::o;27478:24::-;;;;:::o;44279:1056::-;44390:4;3068:12;:10;:12::i;:::-;3057:23;;:7;:5;:7::i;:::-;:23;;;3049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44475:19:::1;;44452:20;;:42;;;;:::i;:::-;44434:15;:60;44412:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;44584:4;44573:7;:15;;44565:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;44669:15;44646:20;:38;;;;44739:28;44770:4;:14;;;44785:13;;;;;;;;;;;44770:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44739:60;;44849:20;44872:44;44910:5;44872:33;44897:7;44872:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;44849:67;;45036:1;45021:12;:16;45017:110;;;45054:61;45070:13;;;;;;;;;;;45093:6;45102:12;45054:15;:61::i;:::-;45017:110;45202:19;45239:13;;;;;;;;;;;45202:51;;45264:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;45291:14;;;;;;;;;;45323:4;45316:11;;;;;44279:1056:::0;;;:::o;1679:98::-;1732:7;1759:10;1752:17;;1679:98;:::o;18220:380::-;18373:1;18356:19;;:5;:19;;;;18348:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18454:1;18435:21;;:7;:21;;;;18427:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18538:6;18508:11;:18;18520:5;18508:18;;;;;;;;;;;;;;;:27;18527:7;18508:27;;;;;;;;;;;;;;;:36;;;;18576:7;18560:32;;18569:5;18560:32;;;18585:6;18560:32;;;;;;:::i;:::-;;;;;;;;18220:380;;;:::o;35186:4991::-;35334:1;35318:18;;:4;:18;;;;35310:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35411:1;35397:16;;:2;:16;;;;35389:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35480:1;35470:6;:11;35466:93;;;35498:28;35514:4;35520:2;35524:1;35498:15;:28::i;:::-;35541:7;;35466:93;35575:14;;;;;;;;;;;35571:2487;;;35636:7;:5;:7::i;:::-;35628:15;;:4;:15;;;;:49;;;;;35670:7;:5;:7::i;:::-;35664:13;;:2;:13;;;;35628:49;:86;;;;;35712:1;35698:16;;:2;:16;;;;35628:86;:128;;;;;35749:6;35735:21;;:2;:21;;;;35628:128;:158;;;;;35778:8;;;;;;;;;;;35777:9;35628:158;35606:2441;;;35826:13;;;;;;;;;;;35821:223;;35898:19;:25;35918:4;35898:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35927:19;:23;35947:2;35927:23;;;;;;;;;;;;;;;;;;;;;;;;;35898:52;35864:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;35821:223;36200:20;;;;;;;;;;;36196:641;;;36281:7;:5;:7::i;:::-;36275:13;;:2;:13;;;;:72;;;;;36331:15;36317:30;;:2;:30;;;;36275:72;:129;;;;;36390:13;;;;;;;;;;;36376:28;;:2;:28;;;;36275:129;36245:573;;;36568:12;36493:28;:39;36522:9;36493:39;;;;;;;;;;;;;;;;:87;36455:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;36782:12;36740:28;:39;36769:9;36740:39;;;;;;;;;;;;;;;:54;;;;36245:573;36196:641;36911:25;:31;36937:4;36911:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;36968:31;:35;37000:2;36968:35;;;;;;;;;;;;;;;;;;;;;;;;;36967:36;36911:92;36885:1147;;;37090:20;;37080:6;:30;;37046:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;37298:9;;37281:13;37291:2;37281:9;:13::i;:::-;37272:6;:22;;;;:::i;:::-;:35;;37238:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;36885:1147;;;37476:25;:29;37502:2;37476:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;37531:31;:37;37563:4;37531:37;;;;;;;;;;;;;;;;;;;;;;;;;37530:38;37476:92;37450:582;;;37655:20;;37645:6;:30;;37611:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;37450:582;;;37812:31;:35;37844:2;37812:35;;;;;;;;;;;;;;;;;;;;;;;;;37807:225;;37932:9;;37915:13;37925:2;37915:9;:13::i;:::-;37906:6;:22;;;;:::i;:::-;:35;;37872:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;37807:225;37450:582;36885:1147;35606:2441;35571:2487;38070:28;38101:24;38119:4;38101:9;:24::i;:::-;38070:55;;38138:12;38177:18;;38153:20;:42;;38138:57;;38226:7;:35;;;;;38250:11;;;;;;;;;;;38226:35;:61;;;;;38279:8;;;;;;;;;;;38278:9;38226:61;:110;;;;;38305:25;:31;38331:4;38305:31;;;;;;;;;;;;;;;;;;;;;;;;;38304:32;38226:110;:153;;;;;38354:19;:25;38374:4;38354:25;;;;;;;;;;;;;;;;;;;;;;;;;38353:26;38226:153;:194;;;;;38397:19;:23;38417:2;38397:23;;;;;;;;;;;;;;;;;;;;;;;;;38396:24;38226:194;38208:326;;;38458:4;38447:8;;:15;;;;;;;;;;;;;;;;;;38479:10;:8;:10::i;:::-;38517:5;38506:8;;:16;;;;;;;;;;;;;;;;;;38208:326;38565:8;;;;;;;;;;;38564:9;:55;;;;;38590:25;:29;38616:2;38590:29;;;;;;;;;;;;;;;;;;;;;;;;;38564:55;:85;;;;;38636:13;;;;;;;;;;;38564:85;:153;;;;;38702:15;;38685:14;;:32;;;;:::i;:::-;38666:15;:51;;38564:153;:196;;;;;38735:19;:25;38755:4;38735:25;;;;;;;;;;;;;;;;;;;;;;;;;38734:26;38564:196;38546:282;;;38787:29;:27;:29::i;:::-;;38546:282;38840:12;38856:8;;;;;;;;;;;38855:9;38840:24;;38966:19;:25;38986:4;38966:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38995:19;:23;39015:2;38995:23;;;;;;;;;;;;;;;;;;;;;;;;;38966:52;38962:100;;;39045:5;39035:15;;38962:100;39074:12;39179:7;39175:949;;;39231:25;:29;39257:2;39231:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;39280:1;39264:13;;:17;39231:50;39227:748;;;39309:34;39339:3;39309:25;39320:13;;39309:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39302:41;;39412:13;;39392:16;;39385:4;:23;;;;:::i;:::-;39384:41;;;;:::i;:::-;39362:18;;:63;;;;;;;:::i;:::-;;;;;;;;39482:13;;39468:10;;39461:4;:17;;;;:::i;:::-;39460:35;;;;:::i;:::-;39444:12;;:51;;;;;;;:::i;:::-;;;;;;;;39554:13;;39539:11;;39532:4;:18;;;;:::i;:::-;39531:36;;;;:::i;:::-;39514:13;;:53;;;;;;;:::i;:::-;;;;;;;;39227:748;;;39629:25;:31;39655:4;39629:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;39679:1;39664:12;;:16;39629:51;39625:350;;;39708:33;39737:3;39708:24;39719:12;;39708:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;39701:40;;39809:12;;39790:15;;39783:4;:22;;;;:::i;:::-;39782:39;;;;:::i;:::-;39760:18;;:61;;;;;;;:::i;:::-;;;;;;;;39877:12;;39864:9;;39857:4;:16;;;;:::i;:::-;39856:33;;;;:::i;:::-;39840:12;;:49;;;;;;;:::i;:::-;;;;;;;;39947:12;;39933:10;;39926:4;:17;;;;:::i;:::-;39925:34;;;;:::i;:::-;39908:13;;:51;;;;;;;:::i;:::-;;;;;;;;39625:350;39227:748;40002:1;39995:4;:8;39991:91;;;40024:42;40040:4;40054;40061;40024:15;:42::i;:::-;39991:91;40108:4;40098:14;;;;;:::i;:::-;;;39175:949;40136:33;40152:4;40158:2;40162:6;40136:15;:33::i;:::-;35299:4878;;;;35186:4991;;;;:::o;4144:191::-;4218:16;4237:6;;;;;;;;;;;4218:25;;4263:8;4254:6;;:17;;;;;;;;;;;;;;;;;;4318:8;4287:40;;4308:8;4287:40;;;;;;;;;;;;4207:128;4144:191;:::o;34691:188::-;34808:5;34774:25;:31;34800:4;34774:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34865:5;34831:40;;34859:4;34831:40;;;;;;;;;;;;34691:188;;:::o;23669:98::-;23727:7;23758:1;23754;:5;;;;:::i;:::-;23747:12;;23669:98;;;;:::o;24068:::-;24126:7;24157:1;24153;:5;;;;:::i;:::-;24146:12;;24068:98;;;;:::o;15402:770::-;15560:1;15542:20;;:6;:20;;;;15534:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15644:1;15623:23;;:9;:23;;;;15615:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15699:47;15720:6;15728:9;15739:6;15699:20;:47::i;:::-;15759:21;15783:9;:17;15793:6;15783:17;;;;;;;;;;;;;;;;15759:41;;15850:6;15833:13;:23;;15811:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;15994:6;15978:13;:22;15958:9;:17;15968:6;15958:17;;;;;;;;;;;;;;;:42;;;;16046:6;16022:9;:20;16032:9;16022:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;16087:9;16070:35;;16079:6;16070:35;;;16098:6;16070:35;;;;;;:::i;:::-;;;;;;;;16118:46;16138:6;16146:9;16157:6;16118:19;:46::i;:::-;15523:649;15402:770;;;:::o;41305:1607::-;41344:23;41370:24;41388:4;41370:9;:24::i;:::-;41344:50;;41405:25;41467:12;;41433:18;;:46;;;;:::i;:::-;41405:74;;41490:12;41538:1;41519:15;:20;:46;;;;41564:1;41543:17;:22;41519:46;41515:85;;;41582:7;;;;;41515:85;41655:2;41634:18;;:23;;;;:::i;:::-;41616:15;:41;41612:115;;;41713:2;41692:18;;:23;;;;:::i;:::-;41674:41;;41612:115;41788:23;41901:1;41868:17;41833:18;;41815:15;:36;;;;:::i;:::-;41814:71;;;;:::i;:::-;:88;;;;:::i;:::-;41788:114;;41913:26;41942:55;41983:13;;41942:36;41962:15;41942;:19;;:36;;;;:::i;:::-;:40;;:55;;;;:::i;:::-;41913:84;;42010:25;42038:21;42010:49;;42072:36;42089:18;42072:16;:36::i;:::-;42121:18;42142:44;42168:17;42142:21;:25;;:44;;;;:::i;:::-;42121:65;;42199:17;42219:51;42252:17;42219:28;42234:12;;42219:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;42199:71;;42283:23;42322:9;42309:10;:22;;;;:::i;:::-;42283:48;;42362:1;42346:13;;:17;42342:109;;;42376:62;42400:4;42415:6;42424:13;;42376:15;:62::i;:::-;42342:109;42484:1;42463:18;:22;;;;42512:1;42496:13;:17;;;;42539:1;42524:12;:16;;;;42577:9;;;;;;;;;;;42569:23;;42600:9;42569:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42555:59;;;;;42649:1;42631:15;:19;:42;;;;;42672:1;42654:15;:19;42631:42;42627:278;;;42690:46;42703:15;42720;42690:12;:46::i;:::-;42756:137;42789:18;42826:15;42860:18;;42756:137;;;;;;;;:::i;:::-;;;;;;;;42627:278;41333:1579;;;;;;;;;41305:1607;:::o;43483:788::-;43540:4;43574:15;43557:14;:32;;;;43644:28;43675:4;:14;;;43690:13;;;;;;;;;;;43675:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43644:60;;43754:20;43777:77;43838:5;43777:42;43802:16;;43777:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;43754:100;;43974:1;43959:12;:16;43955:110;;;43992:61;44008:13;;;;;;;;;;;44031:6;44040:12;43992:15;:61::i;:::-;43955:110;44140:19;44177:13;;;;;;;;;;;44140:51;;44202:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44229:12;;;;;;;;;;44259:4;44252:11;;;;;43483:788;:::o;19200:125::-;;;;:::o;19929:124::-;;;;:::o;23312:98::-;23370:7;23401:1;23397;:5;;;;:::i;:::-;23390:12;;23312:98;;;;:::o;40185:589::-;40311:21;40349:1;40335:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40311:40;;40380:4;40362;40367:1;40362:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40406:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40396:4;40401:1;40396:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40441:62;40458:4;40473:15;40491:11;40441:8;:62::i;:::-;40542:15;:66;;;40623:11;40649:1;40693:4;40720;40740:15;40542:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40240:534;40185:589;:::o;40782:515::-;40930:62;40947:4;40962:15;40980:11;40930:8;:62::i;:::-;41035:15;:31;;;41074:9;41107:4;41127:11;41153:1;41196;41239:9;;;;;;;;;;;41263:15;41035:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40782:515;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;301:133;;;;:::o;440:139::-;486:5;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;440:139;;;;:::o;585:143::-;642:5;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;585:143;;;;:::o;734:329::-;793:6;842:2;830:9;821:7;817:23;813:32;810:119;;;848:79;;:::i;:::-;810:119;968:1;993:53;1038:7;1029:6;1018:9;1014:22;993:53;:::i;:::-;983:63;;939:117;734:329;;;;:::o;1069:351::-;1139:6;1188:2;1176:9;1167:7;1163:23;1159:32;1156:119;;;1194:79;;:::i;:::-;1156:119;1314:1;1339:64;1395:7;1386:6;1375:9;1371:22;1339:64;:::i;:::-;1329:74;;1285:128;1069:351;;;;:::o;1426:474::-;1494:6;1502;1551:2;1539:9;1530:7;1526:23;1522:32;1519:119;;;1557:79;;:::i;:::-;1519:119;1677:1;1702:53;1747:7;1738:6;1727:9;1723:22;1702:53;:::i;:::-;1692:63;;1648:117;1804:2;1830:53;1875:7;1866:6;1855:9;1851:22;1830:53;:::i;:::-;1820:63;;1775:118;1426:474;;;;;:::o;1906:619::-;1983:6;1991;1999;2048:2;2036:9;2027:7;2023:23;2019:32;2016:119;;;2054:79;;:::i;:::-;2016:119;2174:1;2199:53;2244:7;2235:6;2224:9;2220:22;2199:53;:::i;:::-;2189:63;;2145:117;2301:2;2327:53;2372:7;2363:6;2352:9;2348:22;2327:53;:::i;:::-;2317:63;;2272:118;2429:2;2455:53;2500:7;2491:6;2480:9;2476:22;2455:53;:::i;:::-;2445:63;;2400:118;1906:619;;;;;:::o;2531:468::-;2596:6;2604;2653:2;2641:9;2632:7;2628:23;2624:32;2621:119;;;2659:79;;:::i;:::-;2621:119;2779:1;2804:53;2849:7;2840:6;2829:9;2825:22;2804:53;:::i;:::-;2794:63;;2750:117;2906:2;2932:50;2974:7;2965:6;2954:9;2950:22;2932:50;:::i;:::-;2922:60;;2877:115;2531:468;;;;;:::o;3005:474::-;3073:6;3081;3130:2;3118:9;3109:7;3105:23;3101:32;3098:119;;;3136:79;;:::i;:::-;3098:119;3256:1;3281:53;3326:7;3317:6;3306:9;3302:22;3281:53;:::i;:::-;3271:63;;3227:117;3383:2;3409:53;3454:7;3445:6;3434:9;3430:22;3409:53;:::i;:::-;3399:63;;3354:118;3005:474;;;;;:::o;3485:323::-;3541:6;3590:2;3578:9;3569:7;3565:23;3561:32;3558:119;;;3596:79;;:::i;:::-;3558:119;3716:1;3741:50;3783:7;3774:6;3763:9;3759:22;3741:50;:::i;:::-;3731:60;;3687:114;3485:323;;;;:::o;3814:329::-;3873:6;3922:2;3910:9;3901:7;3897:23;3893:32;3890:119;;;3928:79;;:::i;:::-;3890:119;4048:1;4073:53;4118:7;4109:6;4098:9;4094:22;4073:53;:::i;:::-;4063:63;;4019:117;3814:329;;;;:::o;4149:351::-;4219:6;4268:2;4256:9;4247:7;4243:23;4239:32;4236:119;;;4274:79;;:::i;:::-;4236:119;4394:1;4419:64;4475:7;4466:6;4455:9;4451:22;4419:64;:::i;:::-;4409:74;;4365:128;4149:351;;;;:::o;4506:613::-;4580:6;4588;4596;4645:2;4633:9;4624:7;4620:23;4616:32;4613:119;;;4651:79;;:::i;:::-;4613:119;4771:1;4796:53;4841:7;4832:6;4821:9;4817:22;4796:53;:::i;:::-;4786:63;;4742:117;4898:2;4924:53;4969:7;4960:6;4949:9;4945:22;4924:53;:::i;:::-;4914:63;;4869:118;5026:2;5052:50;5094:7;5085:6;5074:9;5070:22;5052:50;:::i;:::-;5042:60;;4997:115;4506:613;;;;;:::o;5125:619::-;5202:6;5210;5218;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5520:2;5546:53;5591:7;5582:6;5571:9;5567:22;5546:53;:::i;:::-;5536:63;;5491:118;5648:2;5674:53;5719:7;5710:6;5699:9;5695:22;5674:53;:::i;:::-;5664:63;;5619:118;5125:619;;;;;:::o;5750:663::-;5838:6;5846;5854;5903:2;5891:9;5882:7;5878:23;5874:32;5871:119;;;5909:79;;:::i;:::-;5871:119;6029:1;6054:64;6110:7;6101:6;6090:9;6086:22;6054:64;:::i;:::-;6044:74;;6000:128;6167:2;6193:64;6249:7;6240:6;6229:9;6225:22;6193:64;:::i;:::-;6183:74;;6138:129;6306:2;6332:64;6388:7;6379:6;6368:9;6364:22;6332:64;:::i;:::-;6322:74;;6277:129;5750:663;;;;;:::o;6419:179::-;6488:10;6509:46;6551:3;6543:6;6509:46;:::i;:::-;6587:4;6582:3;6578:14;6564:28;;6419:179;;;;:::o;6604:108::-;6681:24;6699:5;6681:24;:::i;:::-;6676:3;6669:37;6604:108;;:::o;6718:118::-;6805:24;6823:5;6805:24;:::i;:::-;6800:3;6793:37;6718:118;;:::o;6872:732::-;6991:3;7020:54;7068:5;7020:54;:::i;:::-;7090:86;7169:6;7164:3;7090:86;:::i;:::-;7083:93;;7200:56;7250:5;7200:56;:::i;:::-;7279:7;7310:1;7295:284;7320:6;7317:1;7314:13;7295:284;;;7396:6;7390:13;7423:63;7482:3;7467:13;7423:63;:::i;:::-;7416:70;;7509:60;7562:6;7509:60;:::i;:::-;7499:70;;7355:224;7342:1;7339;7335:9;7330:14;;7295:284;;;7299:14;7595:3;7588:10;;6996:608;;;6872:732;;;;:::o;7610:109::-;7691:21;7706:5;7691:21;:::i;:::-;7686:3;7679:34;7610:109;;:::o;7725:181::-;7837:62;7893:5;7837:62;:::i;:::-;7832:3;7825:75;7725:181;;:::o;7912:147::-;8007:45;8046:5;8007:45;:::i;:::-;8002:3;7995:58;7912:147;;:::o;8065:364::-;8153:3;8181:39;8214:5;8181:39;:::i;:::-;8236:71;8300:6;8295:3;8236:71;:::i;:::-;8229:78;;8316:52;8361:6;8356:3;8349:4;8342:5;8338:16;8316:52;:::i;:::-;8393:29;8415:6;8393:29;:::i;:::-;8388:3;8384:39;8377:46;;8157:272;8065:364;;;;:::o;8435:366::-;8577:3;8598:67;8662:2;8657:3;8598:67;:::i;:::-;8591:74;;8674:93;8763:3;8674:93;:::i;:::-;8792:2;8787:3;8783:12;8776:19;;8435:366;;;:::o;8807:::-;8949:3;8970:67;9034:2;9029:3;8970:67;:::i;:::-;8963:74;;9046:93;9135:3;9046:93;:::i;:::-;9164:2;9159:3;9155:12;9148:19;;8807:366;;;:::o;9179:::-;9321:3;9342:67;9406:2;9401:3;9342:67;:::i;:::-;9335:74;;9418:93;9507:3;9418:93;:::i;:::-;9536:2;9531:3;9527:12;9520:19;;9179:366;;;:::o;9551:::-;9693:3;9714:67;9778:2;9773:3;9714:67;:::i;:::-;9707:74;;9790:93;9879:3;9790:93;:::i;:::-;9908:2;9903:3;9899:12;9892:19;;9551:366;;;:::o;9923:::-;10065:3;10086:67;10150:2;10145:3;10086:67;:::i;:::-;10079:74;;10162:93;10251:3;10162:93;:::i;:::-;10280:2;10275:3;10271:12;10264:19;;9923:366;;;:::o;10295:::-;10437:3;10458:67;10522:2;10517:3;10458:67;:::i;:::-;10451:74;;10534:93;10623:3;10534:93;:::i;:::-;10652:2;10647:3;10643:12;10636:19;;10295:366;;;:::o;10667:::-;10809:3;10830:67;10894:2;10889:3;10830:67;:::i;:::-;10823:74;;10906:93;10995:3;10906:93;:::i;:::-;11024:2;11019:3;11015:12;11008:19;;10667:366;;;:::o;11039:::-;11181:3;11202:67;11266:2;11261:3;11202:67;:::i;:::-;11195:74;;11278:93;11367:3;11278:93;:::i;:::-;11396:2;11391:3;11387:12;11380:19;;11039:366;;;:::o;11411:::-;11553:3;11574:67;11638:2;11633:3;11574:67;:::i;:::-;11567:74;;11650:93;11739:3;11650:93;:::i;:::-;11768:2;11763:3;11759:12;11752:19;;11411:366;;;:::o;11783:::-;11925:3;11946:67;12010:2;12005:3;11946:67;:::i;:::-;11939:74;;12022:93;12111:3;12022:93;:::i;:::-;12140:2;12135:3;12131:12;12124:19;;11783:366;;;:::o;12155:::-;12297:3;12318:67;12382:2;12377:3;12318:67;:::i;:::-;12311:74;;12394:93;12483:3;12394:93;:::i;:::-;12512:2;12507:3;12503:12;12496:19;;12155:366;;;:::o;12527:::-;12669:3;12690:67;12754:2;12749:3;12690:67;:::i;:::-;12683:74;;12766:93;12855:3;12766:93;:::i;:::-;12884:2;12879:3;12875:12;12868:19;;12527:366;;;:::o;12899:::-;13041:3;13062:67;13126:2;13121:3;13062:67;:::i;:::-;13055:74;;13138:93;13227:3;13138:93;:::i;:::-;13256:2;13251:3;13247:12;13240:19;;12899:366;;;:::o;13271:::-;13413:3;13434:67;13498:2;13493:3;13434:67;:::i;:::-;13427:74;;13510:93;13599:3;13510:93;:::i;:::-;13628:2;13623:3;13619:12;13612:19;;13271:366;;;:::o;13643:::-;13785:3;13806:67;13870:2;13865:3;13806:67;:::i;:::-;13799:74;;13882:93;13971:3;13882:93;:::i;:::-;14000:2;13995:3;13991:12;13984:19;;13643:366;;;:::o;14015:::-;14157:3;14178:67;14242:2;14237:3;14178:67;:::i;:::-;14171:74;;14254:93;14343:3;14254:93;:::i;:::-;14372:2;14367:3;14363:12;14356:19;;14015:366;;;:::o;14387:::-;14529:3;14550:67;14614:2;14609:3;14550:67;:::i;:::-;14543:74;;14626:93;14715:3;14626:93;:::i;:::-;14744:2;14739:3;14735:12;14728:19;;14387:366;;;:::o;14759:::-;14901:3;14922:67;14986:2;14981:3;14922:67;:::i;:::-;14915:74;;14998:93;15087:3;14998:93;:::i;:::-;15116:2;15111:3;15107:12;15100:19;;14759:366;;;:::o;15131:::-;15273:3;15294:67;15358:2;15353:3;15294:67;:::i;:::-;15287:74;;15370:93;15459:3;15370:93;:::i;:::-;15488:2;15483:3;15479:12;15472:19;;15131:366;;;:::o;15503:::-;15645:3;15666:67;15730:2;15725:3;15666:67;:::i;:::-;15659:74;;15742:93;15831:3;15742:93;:::i;:::-;15860:2;15855:3;15851:12;15844:19;;15503:366;;;:::o;15875:::-;16017:3;16038:67;16102:2;16097:3;16038:67;:::i;:::-;16031:74;;16114:93;16203:3;16114:93;:::i;:::-;16232:2;16227:3;16223:12;16216:19;;15875:366;;;:::o;16247:398::-;16406:3;16427:83;16508:1;16503:3;16427:83;:::i;:::-;16420:90;;16519:93;16608:3;16519:93;:::i;:::-;16637:1;16632:3;16628:11;16621:18;;16247:398;;;:::o;16651:366::-;16793:3;16814:67;16878:2;16873:3;16814:67;:::i;:::-;16807:74;;16890:93;16979:3;16890:93;:::i;:::-;17008:2;17003:3;16999:12;16992:19;;16651:366;;;:::o;17023:::-;17165:3;17186:67;17250:2;17245:3;17186:67;:::i;:::-;17179:74;;17262:93;17351:3;17262:93;:::i;:::-;17380:2;17375:3;17371:12;17364:19;;17023:366;;;:::o;17395:::-;17537:3;17558:67;17622:2;17617:3;17558:67;:::i;:::-;17551:74;;17634:93;17723:3;17634:93;:::i;:::-;17752:2;17747:3;17743:12;17736:19;;17395:366;;;:::o;17767:::-;17909:3;17930:67;17994:2;17989:3;17930:67;:::i;:::-;17923:74;;18006:93;18095:3;18006:93;:::i;:::-;18124:2;18119:3;18115:12;18108:19;;17767:366;;;:::o;18139:118::-;18226:24;18244:5;18226:24;:::i;:::-;18221:3;18214:37;18139:118;;:::o;18263:112::-;18346:22;18362:5;18346:22;:::i;:::-;18341:3;18334:35;18263:112;;:::o;18381:379::-;18565:3;18587:147;18730:3;18587:147;:::i;:::-;18580:154;;18751:3;18744:10;;18381:379;;;:::o;18766:222::-;18859:4;18897:2;18886:9;18882:18;18874:26;;18910:71;18978:1;18967:9;18963:17;18954:6;18910:71;:::i;:::-;18766:222;;;;:::o;18994:807::-;19243:4;19281:3;19270:9;19266:19;19258:27;;19295:71;19363:1;19352:9;19348:17;19339:6;19295:71;:::i;:::-;19376:72;19444:2;19433:9;19429:18;19420:6;19376:72;:::i;:::-;19458:80;19534:2;19523:9;19519:18;19510:6;19458:80;:::i;:::-;19548;19624:2;19613:9;19609:18;19600:6;19548:80;:::i;:::-;19638:73;19706:3;19695:9;19691:19;19682:6;19638:73;:::i;:::-;19721;19789:3;19778:9;19774:19;19765:6;19721:73;:::i;:::-;18994:807;;;;;;;;;:::o;19807:210::-;19894:4;19932:2;19921:9;19917:18;19909:26;;19945:65;20007:1;19996:9;19992:17;19983:6;19945:65;:::i;:::-;19807:210;;;;:::o;20023:272::-;20141:4;20179:2;20168:9;20164:18;20156:26;;20192:96;20285:1;20274:9;20270:17;20261:6;20192:96;:::i;:::-;20023:272;;;;:::o;20301:313::-;20414:4;20452:2;20441:9;20437:18;20429:26;;20501:9;20495:4;20491:20;20487:1;20476:9;20472:17;20465:47;20529:78;20602:4;20593:6;20529:78;:::i;:::-;20521:86;;20301:313;;;;:::o;20620:419::-;20786:4;20824:2;20813:9;20809:18;20801:26;;20873:9;20867:4;20863:20;20859:1;20848:9;20844:17;20837:47;20901:131;21027:4;20901:131;:::i;:::-;20893:139;;20620:419;;;:::o;21045:::-;21211:4;21249:2;21238:9;21234:18;21226:26;;21298:9;21292:4;21288:20;21284:1;21273:9;21269:17;21262:47;21326:131;21452:4;21326:131;:::i;:::-;21318:139;;21045:419;;;:::o;21470:::-;21636:4;21674:2;21663:9;21659:18;21651:26;;21723:9;21717:4;21713:20;21709:1;21698:9;21694:17;21687:47;21751:131;21877:4;21751:131;:::i;:::-;21743:139;;21470:419;;;:::o;21895:::-;22061:4;22099:2;22088:9;22084:18;22076:26;;22148:9;22142:4;22138:20;22134:1;22123:9;22119:17;22112:47;22176:131;22302:4;22176:131;:::i;:::-;22168:139;;21895:419;;;:::o;22320:::-;22486:4;22524:2;22513:9;22509:18;22501:26;;22573:9;22567:4;22563:20;22559:1;22548:9;22544:17;22537:47;22601:131;22727:4;22601:131;:::i;:::-;22593:139;;22320:419;;;:::o;22745:::-;22911:4;22949:2;22938:9;22934:18;22926:26;;22998:9;22992:4;22988:20;22984:1;22973:9;22969:17;22962:47;23026:131;23152:4;23026:131;:::i;:::-;23018:139;;22745:419;;;:::o;23170:::-;23336:4;23374:2;23363:9;23359:18;23351:26;;23423:9;23417:4;23413:20;23409:1;23398:9;23394:17;23387:47;23451:131;23577:4;23451:131;:::i;:::-;23443:139;;23170:419;;;:::o;23595:::-;23761:4;23799:2;23788:9;23784:18;23776:26;;23848:9;23842:4;23838:20;23834:1;23823:9;23819:17;23812:47;23876:131;24002:4;23876:131;:::i;:::-;23868:139;;23595:419;;;:::o;24020:::-;24186:4;24224:2;24213:9;24209:18;24201:26;;24273:9;24267:4;24263:20;24259:1;24248:9;24244:17;24237:47;24301:131;24427:4;24301:131;:::i;:::-;24293:139;;24020:419;;;:::o;24445:::-;24611:4;24649:2;24638:9;24634:18;24626:26;;24698:9;24692:4;24688:20;24684:1;24673:9;24669:17;24662:47;24726:131;24852:4;24726:131;:::i;:::-;24718:139;;24445:419;;;:::o;24870:::-;25036:4;25074:2;25063:9;25059:18;25051:26;;25123:9;25117:4;25113:20;25109:1;25098:9;25094:17;25087:47;25151:131;25277:4;25151:131;:::i;:::-;25143:139;;24870:419;;;:::o;25295:::-;25461:4;25499:2;25488:9;25484:18;25476:26;;25548:9;25542:4;25538:20;25534:1;25523:9;25519:17;25512:47;25576:131;25702:4;25576:131;:::i;:::-;25568:139;;25295:419;;;:::o;25720:::-;25886:4;25924:2;25913:9;25909:18;25901:26;;25973:9;25967:4;25963:20;25959:1;25948:9;25944:17;25937:47;26001:131;26127:4;26001:131;:::i;:::-;25993:139;;25720:419;;;:::o;26145:::-;26311:4;26349:2;26338:9;26334:18;26326:26;;26398:9;26392:4;26388:20;26384:1;26373:9;26369:17;26362:47;26426:131;26552:4;26426:131;:::i;:::-;26418:139;;26145:419;;;:::o;26570:::-;26736:4;26774:2;26763:9;26759:18;26751:26;;26823:9;26817:4;26813:20;26809:1;26798:9;26794:17;26787:47;26851:131;26977:4;26851:131;:::i;:::-;26843:139;;26570:419;;;:::o;26995:::-;27161:4;27199:2;27188:9;27184:18;27176:26;;27248:9;27242:4;27238:20;27234:1;27223:9;27219:17;27212:47;27276:131;27402:4;27276:131;:::i;:::-;27268:139;;26995:419;;;:::o;27420:::-;27586:4;27624:2;27613:9;27609:18;27601:26;;27673:9;27667:4;27663:20;27659:1;27648:9;27644:17;27637:47;27701:131;27827:4;27701:131;:::i;:::-;27693:139;;27420:419;;;:::o;27845:::-;28011:4;28049:2;28038:9;28034:18;28026:26;;28098:9;28092:4;28088:20;28084:1;28073:9;28069:17;28062:47;28126:131;28252:4;28126:131;:::i;:::-;28118:139;;27845:419;;;:::o;28270:::-;28436:4;28474:2;28463:9;28459:18;28451:26;;28523:9;28517:4;28513:20;28509:1;28498:9;28494:17;28487:47;28551:131;28677:4;28551:131;:::i;:::-;28543:139;;28270:419;;;:::o;28695:::-;28861:4;28899:2;28888:9;28884:18;28876:26;;28948:9;28942:4;28938:20;28934:1;28923:9;28919:17;28912:47;28976:131;29102:4;28976:131;:::i;:::-;28968:139;;28695:419;;;:::o;29120:::-;29286:4;29324:2;29313:9;29309:18;29301:26;;29373:9;29367:4;29363:20;29359:1;29348:9;29344:17;29337:47;29401:131;29527:4;29401:131;:::i;:::-;29393:139;;29120:419;;;:::o;29545:::-;29711:4;29749:2;29738:9;29734:18;29726:26;;29798:9;29792:4;29788:20;29784:1;29773:9;29769:17;29762:47;29826:131;29952:4;29826:131;:::i;:::-;29818:139;;29545:419;;;:::o;29970:::-;30136:4;30174:2;30163:9;30159:18;30151:26;;30223:9;30217:4;30213:20;30209:1;30198:9;30194:17;30187:47;30251:131;30377:4;30251:131;:::i;:::-;30243:139;;29970:419;;;:::o;30395:::-;30561:4;30599:2;30588:9;30584:18;30576:26;;30648:9;30642:4;30638:20;30634:1;30623:9;30619:17;30612:47;30676:131;30802:4;30676:131;:::i;:::-;30668:139;;30395:419;;;:::o;30820:::-;30986:4;31024:2;31013:9;31009:18;31001:26;;31073:9;31067:4;31063:20;31059:1;31048:9;31044:17;31037:47;31101:131;31227:4;31101:131;:::i;:::-;31093:139;;30820:419;;;:::o;31245:222::-;31338:4;31376:2;31365:9;31361:18;31353:26;;31389:71;31457:1;31446:9;31442:17;31433:6;31389:71;:::i;:::-;31245:222;;;;:::o;31473:831::-;31736:4;31774:3;31763:9;31759:19;31751:27;;31788:71;31856:1;31845:9;31841:17;31832:6;31788:71;:::i;:::-;31869:80;31945:2;31934:9;31930:18;31921:6;31869:80;:::i;:::-;31996:9;31990:4;31986:20;31981:2;31970:9;31966:18;31959:48;32024:108;32127:4;32118:6;32024:108;:::i;:::-;32016:116;;32142:72;32210:2;32199:9;32195:18;32186:6;32142:72;:::i;:::-;32224:73;32292:3;32281:9;32277:19;32268:6;32224:73;:::i;:::-;31473:831;;;;;;;;:::o;32310:442::-;32459:4;32497:2;32486:9;32482:18;32474:26;;32510:71;32578:1;32567:9;32563:17;32554:6;32510:71;:::i;:::-;32591:72;32659:2;32648:9;32644:18;32635:6;32591:72;:::i;:::-;32673;32741:2;32730:9;32726:18;32717:6;32673:72;:::i;:::-;32310:442;;;;;;:::o;32758:214::-;32847:4;32885:2;32874:9;32870:18;32862:26;;32898:67;32962:1;32951:9;32947:17;32938:6;32898:67;:::i;:::-;32758:214;;;;:::o;33059:132::-;33126:4;33149:3;33141:11;;33179:4;33174:3;33170:14;33162:22;;33059:132;;;:::o;33197:114::-;33264:6;33298:5;33292:12;33282:22;;33197:114;;;:::o;33317:99::-;33369:6;33403:5;33397:12;33387:22;;33317:99;;;:::o;33422:113::-;33492:4;33524;33519:3;33515:14;33507:22;;33422:113;;;:::o;33541:184::-;33640:11;33674:6;33669:3;33662:19;33714:4;33709:3;33705:14;33690:29;;33541:184;;;;:::o;33731:147::-;33832:11;33869:3;33854:18;;33731:147;;;;:::o;33884:169::-;33968:11;34002:6;33997:3;33990:19;34042:4;34037:3;34033:14;34018:29;;33884:169;;;;:::o;34059:305::-;34099:3;34118:20;34136:1;34118:20;:::i;:::-;34113:25;;34152:20;34170:1;34152:20;:::i;:::-;34147:25;;34306:1;34238:66;34234:74;34231:1;34228:81;34225:107;;;34312:18;;:::i;:::-;34225:107;34356:1;34353;34349:9;34342:16;;34059:305;;;;:::o;34370:185::-;34410:1;34427:20;34445:1;34427:20;:::i;:::-;34422:25;;34461:20;34479:1;34461:20;:::i;:::-;34456:25;;34500:1;34490:35;;34505:18;;:::i;:::-;34490:35;34547:1;34544;34540:9;34535:14;;34370:185;;;;:::o;34561:348::-;34601:7;34624:20;34642:1;34624:20;:::i;:::-;34619:25;;34658:20;34676:1;34658:20;:::i;:::-;34653:25;;34846:1;34778:66;34774:74;34771:1;34768:81;34763:1;34756:9;34749:17;34745:105;34742:131;;;34853:18;;:::i;:::-;34742:131;34901:1;34898;34894:9;34883:20;;34561:348;;;;:::o;34915:191::-;34955:4;34975:20;34993:1;34975:20;:::i;:::-;34970:25;;35009:20;35027:1;35009:20;:::i;:::-;35004:25;;35048:1;35045;35042:8;35039:34;;;35053:18;;:::i;:::-;35039:34;35098:1;35095;35091:9;35083:17;;34915:191;;;;:::o;35112:96::-;35149:7;35178:24;35196:5;35178:24;:::i;:::-;35167:35;;35112:96;;;:::o;35214:90::-;35248:7;35291:5;35284:13;35277:21;35266:32;;35214:90;;;:::o;35310:126::-;35347:7;35387:42;35380:5;35376:54;35365:65;;35310:126;;;:::o;35442:77::-;35479:7;35508:5;35497:16;;35442:77;;;:::o;35525:86::-;35560:7;35600:4;35593:5;35589:16;35578:27;;35525:86;;;:::o;35617:151::-;35692:9;35725:37;35756:5;35725:37;:::i;:::-;35712:50;;35617:151;;;:::o;35774:121::-;35832:9;35865:24;35883:5;35865:24;:::i;:::-;35852:37;;35774:121;;;:::o;35901:126::-;35951:9;35984:37;36015:5;35984:37;:::i;:::-;35971:50;;35901:126;;;:::o;36033:113::-;36083:9;36116:24;36134:5;36116:24;:::i;:::-;36103:37;;36033:113;;;:::o;36152:307::-;36220:1;36230:113;36244:6;36241:1;36238:13;36230:113;;;36329:1;36324:3;36320:11;36314:18;36310:1;36305:3;36301:11;36294:39;36266:2;36263:1;36259:10;36254:15;;36230:113;;;36361:6;36358:1;36355:13;36352:101;;;36441:1;36432:6;36427:3;36423:16;36416:27;36352:101;36201:258;36152:307;;;:::o;36465:320::-;36509:6;36546:1;36540:4;36536:12;36526:22;;36593:1;36587:4;36583:12;36614:18;36604:81;;36670:4;36662:6;36658:17;36648:27;;36604:81;36732:2;36724:6;36721:14;36701:18;36698:38;36695:84;;;36751:18;;:::i;:::-;36695:84;36516:269;36465:320;;;:::o;36791:180::-;36839:77;36836:1;36829:88;36936:4;36933:1;36926:15;36960:4;36957:1;36950:15;36977:180;37025:77;37022:1;37015:88;37122:4;37119:1;37112:15;37146:4;37143:1;37136:15;37163:180;37211:77;37208:1;37201:88;37308:4;37305:1;37298:15;37332:4;37329:1;37322:15;37349:180;37397:77;37394:1;37387:88;37494:4;37491:1;37484:15;37518:4;37515:1;37508:15;37535:180;37583:77;37580:1;37573:88;37680:4;37677:1;37670:15;37704:4;37701:1;37694:15;37844:117;37953:1;37950;37943:12;37967:102;38008:6;38059:2;38055:7;38050:2;38043:5;38039:14;38035:28;38025:38;;37967:102;;;:::o;38075:222::-;38215:34;38211:1;38203:6;38199:14;38192:58;38284:5;38279:2;38271:6;38267:15;38260:30;38075:222;:::o;38303:172::-;38443:24;38439:1;38431:6;38427:14;38420:48;38303:172;:::o;38481:225::-;38621:34;38617:1;38609:6;38605:14;38598:58;38690:8;38685:2;38677:6;38673:15;38666:33;38481:225;:::o;38712:221::-;38852:34;38848:1;38840:6;38836:14;38829:58;38921:4;38916:2;38908:6;38904:15;38897:29;38712:221;:::o;38939:238::-;39079:34;39075:1;39067:6;39063:14;39056:58;39148:21;39143:2;39135:6;39131:15;39124:46;38939:238;:::o;39183:223::-;39323:34;39319:1;39311:6;39307:14;39300:58;39392:6;39387:2;39379:6;39375:15;39368:31;39183:223;:::o;39412:244::-;39552:34;39548:1;39540:6;39536:14;39529:58;39621:27;39616:2;39608:6;39604:15;39597:52;39412:244;:::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:241::-;40033:34;40029:1;40021:6;40017:14;40010:58;40102:24;40097:2;40089:6;40085:15;40078:49;39893:241;:::o;40140:235::-;40280:34;40276:1;40268:6;40264:14;40257:58;40349:18;40344:2;40336:6;40332:15;40325:43;40140:235;:::o;40381:240::-;40521:34;40517:1;40509:6;40505:14;40498:58;40590:23;40585:2;40577:6;40573:15;40566:48;40381:240;:::o;40627:239::-;40767:34;40763:1;40755:6;40751:14;40744:58;40836:22;40831:2;40823:6;40819:15;40812:47;40627:239;:::o;40872:240::-;41012:34;41008:1;41000:6;40996:14;40989:58;41081:23;41076:2;41068:6;41064:15;41057:48;40872:240;:::o;41118:297::-;41258:34;41254:1;41246:6;41242:14;41235:58;41327:34;41322:2;41314:6;41310:15;41303:59;41396:11;41391:2;41383:6;41379:15;41372:36;41118:297;:::o;41421:227::-;41561:34;41557:1;41549:6;41545:14;41538:58;41630:10;41625:2;41617:6;41613:15;41606:35;41421:227;:::o;41654:182::-;41794:34;41790:1;41782:6;41778:14;41771:58;41654:182;:::o;41842:178::-;41982:30;41978:1;41970:6;41966:14;41959:54;41842:178;:::o;42026:179::-;42166:31;42162:1;42154:6;42150:14;42143:55;42026:179;:::o;42211:229::-;42351:34;42347:1;42339:6;42335:14;42328:58;42420:12;42415:2;42407:6;42403:15;42396:37;42211:229;:::o;42446:224::-;42586:34;42582:1;42574:6;42570:14;42563:58;42655:7;42650:2;42642:6;42638:15;42631:32;42446:224;:::o;42676:182::-;42816:34;42812:1;42804:6;42800:14;42793:58;42676:182;:::o;42864:114::-;;:::o;42984:223::-;43124:34;43120:1;43112:6;43108:14;43101:58;43193:6;43188:2;43180:6;43176:15;43169:31;42984:223;:::o;43213:169::-;43353:21;43349:1;43341:6;43337:14;43330:45;43213:169;:::o;43388:224::-;43528:34;43524:1;43516:6;43512:14;43505:58;43597:7;43592:2;43584:6;43580:15;43573:32;43388:224;:::o;43618:234::-;43758:34;43754:1;43746:6;43742:14;43735:58;43827:17;43822:2;43814:6;43810:15;43803:42;43618:234;:::o;43858:122::-;43931:24;43949:5;43931:24;:::i;:::-;43924:5;43921:35;43911:63;;43970:1;43967;43960:12;43911:63;43858:122;:::o;43986:116::-;44056:21;44071:5;44056:21;:::i;:::-;44049:5;44046:32;44036:60;;44092:1;44089;44082:12;44036:60;43986:116;:::o;44108:122::-;44181:24;44199:5;44181:24;:::i;:::-;44174:5;44171:35;44161:63;;44220:1;44217;44210:12;44161:63;44108:122;:::o
Swarm Source
ipfs://293f6b4bd85b7b2e7d48e1a61fe1946a78da54ee649a90576a96102eaa968696
Loading...
Loading
Loading...
Loading
Net Worth in USD
$218.98
Net Worth in ETH
0.105899
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,067.84 | 0.1059 | $218.98 |
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.