More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 86 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 16789655 | 659 days ago | IN | 0 ETH | 0.00094936 | ||||
Approve | 16587671 | 687 days ago | IN | 0 ETH | 0.00107554 | ||||
Approve | 16587231 | 687 days ago | IN | 0 ETH | 0.00142083 | ||||
Approve | 16586688 | 687 days ago | IN | 0 ETH | 0.00159297 | ||||
Approve | 16585924 | 687 days ago | IN | 0 ETH | 0.0016286 | ||||
Approve | 16585667 | 687 days ago | IN | 0 ETH | 0.00232271 | ||||
Approve | 16585543 | 687 days ago | IN | 0 ETH | 0.0022674 | ||||
Approve | 16584683 | 687 days ago | IN | 0 ETH | 0.00190119 | ||||
Approve | 16584089 | 687 days ago | IN | 0 ETH | 0.00139045 | ||||
Approve | 16583751 | 687 days ago | IN | 0 ETH | 0.00123665 | ||||
Approve | 16582873 | 688 days ago | IN | 0 ETH | 0.00108724 | ||||
Approve | 16581316 | 688 days ago | IN | 0 ETH | 0.00131412 | ||||
Approve | 16580376 | 688 days ago | IN | 0 ETH | 0.00205725 | ||||
Approve | 16579704 | 688 days ago | IN | 0 ETH | 0.00215573 | ||||
Approve | 16579249 | 688 days ago | IN | 0 ETH | 0.00192963 | ||||
Approve | 16578652 | 688 days ago | IN | 0 ETH | 0.00264538 | ||||
Approve | 16578504 | 688 days ago | IN | 0 ETH | 0.00264358 | ||||
Approve | 16578499 | 688 days ago | IN | 0 ETH | 0.00289602 | ||||
Approve | 16578494 | 688 days ago | IN | 0 ETH | 0.00244844 | ||||
Approve | 16578326 | 688 days ago | IN | 0 ETH | 0.00184739 | ||||
Approve | 16578300 | 688 days ago | IN | 0 ETH | 0.00182565 | ||||
Approve | 16578287 | 688 days ago | IN | 0 ETH | 0.00167721 | ||||
Approve | 16577917 | 688 days ago | IN | 0 ETH | 0.0016091 | ||||
Approve | 16577743 | 688 days ago | IN | 0 ETH | 0.00104707 | ||||
Approve | 16577742 | 688 days ago | IN | 0 ETH | 0.00179466 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
HalfApe
Compiler Version
v0.8.12+commit.f00d7308
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-02-07 */ // SPDX-License-Identifier: MIT /* You got $APE ready to ape? https://t.me/HalfApeEntry */ pragma solidity ^0.8.12; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @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); } } ////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol) /* pragma solidity ^0.8.0; */ /** * @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); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol) /* pragma solidity ^0.8.0; */ /* import "../IERC20.sol"; */ /** * @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); } ////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol // OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol) /* pragma solidity ^0.8.0; */ /* import "./IERC20.sol"; */ /* import "./extensions/IERC20Metadata.sol"; */ /* import "../../utils/Context.sol"; */ /** * @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 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 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 {} } ////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol) /* pragma solidity ^0.8.0; */ // 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; } } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); function createPair(address tokenA, address tokenB) external returns (address pair); } interface IUniswapV2Router02 { function factory() external pure returns (address); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract HalfApe is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; address public constant deadAddress = address(0xdead); address public APE = 0x4d224452801ACEd8B2F0aebE155379bb5D594381; bool private swapping; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = true; uint256 public buyTotalFees; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellDevFee; /******************/ // exlcude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; event ExcludeFromFees(address indexed account, bool isExcluded); event devWalletUpdated( address indexed newWallet, address indexed oldWallet ); constructor() ERC20("Half Ape", "APE0.5") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), APE); excludeFromMaxTransaction(address(uniswapV2Pair), true); uint256 _buyDevFee = 5; uint256 _sellDevFee = 80; uint256 totalSupply = 1_000_000_000 * 1e18; maxTransactionAmount = totalSupply * 2 / 100; // 2% from total supply maxTransactionAmountTxn maxWallet = totalSupply * 2 / 100; // 2% from total supply maxWallet swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet buyDevFee = _buyDevFee; buyTotalFees = buyDevFee; sellDevFee = _sellDevFee; sellTotalFees = sellDevFee; devWallet = address(0x45Af1606e0A130Feb2d6f2c38221664dAd8D3E30); // 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 enableTrading() external onlyOwner { buyDevFee = 85; buyTotalFees = buyDevFee; tradingActive = true; swapEnabled = true; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool) { limitsInEffect = 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 _devFee ) external onlyOwner { buyDevFee = _devFee; buyTotalFees = buyDevFee; require(buyTotalFees <= 100, ""); } function updateSellFees( uint256 _devFee ) external onlyOwner { sellDevFee = _devFee; sellTotalFees = sellDevFee; require(sellTotalFees <= 100, ""); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function updateDevWallet(address newDevWallet) external onlyOwner { emit devWalletUpdated(newDevWallet, devWallet); devWallet = newDevWallet; } 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. //when buy if ( from == uniswapV2Pair && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } 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 && to == uniswapV2Pair && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; uint256 tokensForDev = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (to == uniswapV2Pair && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForDev = (fees * sellDevFee) / sellTotalFees; } // on buy else if (from == uniswapV2Pair && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForDev = (fees * buyDevFee) / buyTotalFees; } if (fees> 0) { super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForAPE(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = APE; _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of APE path, devWallet, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); if (contractBalance == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } swapTokensForAPE(contractBalance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":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":"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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[],"name":"APE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","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":"_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
60c0604052734d224452801aced8b2f0aebe155379bb5d594381600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550348015620000b757600080fd5b506040518060400160405280600881526020017f48616c66204170650000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f415045302e35000000000000000000000000000000000000000000000000000081525081600390805190602001906200013c92919062000981565b5080600490805190602001906200015592919062000981565b505050620001786200016c620004e260201b60201c565b620004ea60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001a4816001620005b060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024a919062000a9b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401620002a892919062000ade565b6020604051808303816000875af1158015620002c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ee919062000a9b565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033660a0516001620005b060201b60201c565b60006005905060006050905060006b033b2e3c9fd0803ce80000009050606460028262000364919062000b44565b62000370919062000bd4565b600881905550606460028262000387919062000b44565b62000393919062000bd4565b600a81905550612710600582620003ab919062000b44565b620003b7919062000bd4565b60098190555082600d81905550600d54600c8190555081600f81905550600f54600e819055507345af1606e0a130feb2d6f2c38221664dad8d3e30600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000454620004466200069a60201b60201c565b6001620006c460201b60201c565b62000467306001620006c460201b60201c565b6200047c61dead6001620006c460201b60201c565b6200049e620004906200069a60201b60201c565b6001620005b060201b60201c565b620004b1306001620005b060201b60201c565b620004c661dead6001620005b060201b60201c565b620004d83382620007fe60201b60201c565b5050505062000e2b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005c0620004e260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005e66200069a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200063f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006369062000c6d565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006d4620004e260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006fa6200069a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000753576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074a9062000c6d565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007f2919062000cac565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000871576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008689062000d19565b60405180910390fd5b62000885600083836200097760201b60201c565b806002600082825462000899919062000d3b565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008f0919062000d3b565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000957919062000da9565b60405180910390a362000973600083836200097c60201b60201c565b5050565b505050565b505050565b8280546200098f9062000df5565b90600052602060002090601f016020900481019282620009b35760008555620009ff565b82601f10620009ce57805160ff1916838001178555620009ff565b82800160010185558215620009ff579182015b82811115620009fe578251825591602001919060010190620009e1565b5b50905062000a0e919062000a12565b5090565b5b8082111562000a2d57600081600090555060010162000a13565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a638262000a36565b9050919050565b62000a758162000a56565b811462000a8157600080fd5b50565b60008151905062000a958162000a6a565b92915050565b60006020828403121562000ab45762000ab362000a31565b5b600062000ac48482850162000a84565b91505092915050565b62000ad88162000a56565b82525050565b600060408201905062000af5600083018562000acd565b62000b04602083018462000acd565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b518262000b0b565b915062000b5e8362000b0b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000b9a5762000b9962000b15565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000be18262000b0b565b915062000bee8362000b0b565b92508262000c015762000c0062000ba5565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000c5560208362000c0c565b915062000c628262000c1d565b602082019050919050565b6000602082019050818103600083015262000c888162000c46565b9050919050565b60008115159050919050565b62000ca68162000c8f565b82525050565b600060208201905062000cc3600083018462000c9b565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000d01601f8362000c0c565b915062000d0e8262000cc9565b602082019050919050565b6000602082019050818103600083015262000d348162000cf2565b9050919050565b600062000d488262000b0b565b915062000d558362000b0b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d8d5762000d8c62000b15565b5b828201905092915050565b62000da38162000b0b565b82525050565b600060208201905062000dc0600083018462000d98565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e0e57607f821691505b6020821081141562000e255762000e2462000dc6565b5b50919050565b60805160a051613af962000e7b60003960008181610dd101528181611ee30152818161212c0152818161233501526123e3015260008181610a2b015281816129a801526129cf0152613af96000f3fe60806040526004361061023f5760003560e01c80637571336a1161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e14610874578063e2f45605146108b1578063eba4c333146108dc578063f2fde38b14610905578063f8b45b051461092e57610246565b8063c02466681461078f578063c18bc195146107b8578063c8c8ebe4146107e1578063d257b34f1461080c578063d85ba0631461084957610246565b806395d89b41116100f257806395d89b41146106a65780639c3b4fdc146106d1578063a0d82dc5146106fc578063a9059cbb14610727578063bbc0c7421461076457610246565b80637571336a146105e75780638a8c523c146106105780638da5cb5b146106275780638ea5220f14610652578063924de9b71461067d57610246565b8063313ce567116101bc5780636ddd1713116101805780636ddd17131461051457806370a082311461053f578063715018a61461057c57806371fc468814610593578063751039fc146105bc57610246565b8063313ce5671461042b57806349bd5a5e146104565780634a62bb65146104815780634fbee193146104ac5780636a486a8e146104e957610246565b80631816467f116102035780631816467f146103465780631b5d145d1461036f578063203e727e1461039a57806323b872dd146103c357806327c8f8351461040057610246565b806306fdde031461024b578063095ea7b31461027657806310d5de53146102b35780631694505e146102f057806318160ddd1461031b57610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610959565b60405161026d9190612b20565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190612bdb565b6109eb565b6040516102aa9190612c36565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190612c51565b610a09565b6040516102e79190612c36565b60405180910390f35b3480156102fc57600080fd5b50610305610a29565b6040516103129190612cdd565b60405180910390f35b34801561032757600080fd5b50610330610a4d565b60405161033d9190612d07565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190612c51565b610a57565b005b34801561037b57600080fd5b50610384610b93565b6040516103919190612d31565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc9190612d4c565b610bb9565b005b3480156103cf57600080fd5b506103ea60048036038101906103e59190612d79565b610cc8565b6040516103f79190612c36565b60405180910390f35b34801561040c57600080fd5b50610415610dc0565b6040516104229190612d31565b60405180910390f35b34801561043757600080fd5b50610440610dc6565b60405161044d9190612de8565b60405180910390f35b34801561046257600080fd5b5061046b610dcf565b6040516104789190612d31565b60405180910390f35b34801561048d57600080fd5b50610496610df3565b6040516104a39190612c36565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190612c51565b610e06565b6040516104e09190612c36565b60405180910390f35b3480156104f557600080fd5b506104fe610e5c565b60405161050b9190612d07565b60405180910390f35b34801561052057600080fd5b50610529610e62565b6040516105369190612c36565b60405180910390f35b34801561054b57600080fd5b5061056660048036038101906105619190612c51565b610e75565b6040516105739190612d07565b60405180910390f35b34801561058857600080fd5b50610591610ebd565b005b34801561059f57600080fd5b506105ba60048036038101906105b59190612d4c565b610f45565b005b3480156105c857600080fd5b506105d161101a565b6040516105de9190612c36565b60405180910390f35b3480156105f357600080fd5b5061060e60048036038101906106099190612e2f565b6110ba565b005b34801561061c57600080fd5b50610625611191565b005b34801561063357600080fd5b5061063c611256565b6040516106499190612d31565b60405180910390f35b34801561065e57600080fd5b50610667611280565b6040516106749190612d31565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190612e6f565b6112a6565b005b3480156106b257600080fd5b506106bb61133f565b6040516106c89190612b20565b60405180910390f35b3480156106dd57600080fd5b506106e66113d1565b6040516106f39190612d07565b60405180910390f35b34801561070857600080fd5b506107116113d7565b60405161071e9190612d07565b60405180910390f35b34801561073357600080fd5b5061074e60048036038101906107499190612bdb565b6113dd565b60405161075b9190612c36565b60405180910390f35b34801561077057600080fd5b506107796113fb565b6040516107869190612c36565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190612e2f565b61140e565b005b3480156107c457600080fd5b506107df60048036038101906107da9190612d4c565b611533565b005b3480156107ed57600080fd5b506107f6611642565b6040516108039190612d07565b60405180910390f35b34801561081857600080fd5b50610833600480360381019061082e9190612d4c565b611648565b6040516108409190612c36565b60405180910390f35b34801561085557600080fd5b5061085e61179d565b60405161086b9190612d07565b60405180910390f35b34801561088057600080fd5b5061089b60048036038101906108969190612e9c565b6117a3565b6040516108a89190612d07565b60405180910390f35b3480156108bd57600080fd5b506108c661182a565b6040516108d39190612d07565b60405180910390f35b3480156108e857600080fd5b5061090360048036038101906108fe9190612d4c565b611830565b005b34801561091157600080fd5b5061092c60048036038101906109279190612c51565b611905565b005b34801561093a57600080fd5b506109436119fd565b6040516109509190612d07565b60405180910390f35b60606003805461096890612f0b565b80601f016020809104026020016040519081016040528092919081815260200182805461099490612f0b565b80156109e15780601f106109b6576101008083540402835291602001916109e1565b820191906000526020600020905b8154815290600101906020018083116109c457829003601f168201915b5050505050905090565b60006109ff6109f8611a03565b8484611a0b565b6001905092915050565b60116020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610a5f611a03565b73ffffffffffffffffffffffffffffffffffffffff16610a7d611256565b73ffffffffffffffffffffffffffffffffffffffff1614610ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aca90612f89565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610bc1611a03565b73ffffffffffffffffffffffffffffffffffffffff16610bdf611256565b73ffffffffffffffffffffffffffffffffffffffff1614610c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2c90612f89565b60405180910390fd5b670de0b6b3a76400006103e86001610c4b610a4d565b610c559190612fd8565b610c5f9190613061565b610c699190613061565b811015610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca290613104565b60405180910390fd5b670de0b6b3a764000081610cbf9190612fd8565b60088190555050565b6000610cd5848484611bd6565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d20611a03565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9790613196565b60405180910390fd5b610db485610dac611a03565b858403611a0b565b60019150509392505050565b61dead81565b60006012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ec5611a03565b73ffffffffffffffffffffffffffffffffffffffff16610ee3611256565b73ffffffffffffffffffffffffffffffffffffffff1614610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3090612f89565b60405180910390fd5b610f4360006124c6565b565b610f4d611a03565b73ffffffffffffffffffffffffffffffffffffffff16610f6b611256565b73ffffffffffffffffffffffffffffffffffffffff1614610fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb890612f89565b60405180910390fd5b80600d81905550600d54600c819055506064600c541115611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e906131dc565b60405180910390fd5b50565b6000611024611a03565b73ffffffffffffffffffffffffffffffffffffffff16611042611256565b73ffffffffffffffffffffffffffffffffffffffff1614611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f90612f89565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6110c2611a03565b73ffffffffffffffffffffffffffffffffffffffff166110e0611256565b73ffffffffffffffffffffffffffffffffffffffff1614611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d90612f89565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611199611a03565b73ffffffffffffffffffffffffffffffffffffffff166111b7611256565b73ffffffffffffffffffffffffffffffffffffffff161461120d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120490612f89565b60405180910390fd5b6055600d81905550600d54600c819055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112ae611a03565b73ffffffffffffffffffffffffffffffffffffffff166112cc611256565b73ffffffffffffffffffffffffffffffffffffffff1614611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990612f89565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461134e90612f0b565b80601f016020809104026020016040519081016040528092919081815260200182805461137a90612f0b565b80156113c75780601f1061139c576101008083540402835291602001916113c7565b820191906000526020600020905b8154815290600101906020018083116113aa57829003601f168201915b5050505050905090565b600d5481565b600f5481565b60006113f16113ea611a03565b8484611bd6565b6001905092915050565b600b60019054906101000a900460ff1681565b611416611a03565b73ffffffffffffffffffffffffffffffffffffffff16611434611256565b73ffffffffffffffffffffffffffffffffffffffff161461148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148190612f89565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115279190612c36565b60405180910390a25050565b61153b611a03565b73ffffffffffffffffffffffffffffffffffffffff16611559611256565b73ffffffffffffffffffffffffffffffffffffffff16146115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a690612f89565b60405180910390fd5b670de0b6b3a76400006103e860056115c5610a4d565b6115cf9190612fd8565b6115d99190613061565b6115e39190613061565b811015611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c9061326e565b60405180910390fd5b670de0b6b3a7640000816116399190612fd8565b600a8190555050565b60085481565b6000611652611a03565b73ffffffffffffffffffffffffffffffffffffffff16611670611256565b73ffffffffffffffffffffffffffffffffffffffff16146116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90612f89565b60405180910390fd5b620186a060016116d4610a4d565b6116de9190612fd8565b6116e89190613061565b82101561172a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172190613300565b60405180910390fd5b6103e86005611737610a4d565b6117419190612fd8565b61174b9190613061565b82111561178d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178490613392565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b611838611a03565b73ffffffffffffffffffffffffffffffffffffffff16611856611256565b73ffffffffffffffffffffffffffffffffffffffff16146118ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a390612f89565b60405180910390fd5b80600f81905550600f54600e819055506064600e541115611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f9906131dc565b60405180910390fd5b50565b61190d611a03565b73ffffffffffffffffffffffffffffffffffffffff1661192b611256565b73ffffffffffffffffffffffffffffffffffffffff1614611981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197890612f89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e890613424565b60405180910390fd5b6119fa816124c6565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a72906134b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae290613548565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bc99190612d07565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3d906135da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad9061366c565b60405180910390fd5b6000811415611cd057611ccb8383600061258c565b6124c1565b600b60009054906101000a900460ff16156120da57611ced611256565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d5b5750611d2b611256565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d945750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dce575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611de75750600660149054906101000a900460ff16155b156120d957600b60019054906101000a900460ff16611ee157601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ea15750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed7906136d8565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611f865750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561202d57600854811115611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc79061376a565b60405180910390fd5b600a54611fdc83610e75565b82611fe7919061378a565b1115612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201f9061382c565b60405180910390fd5b6120d8565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120d757600a5461208a83610e75565b82612095919061378a565b11156120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cd9061382c565b60405180910390fd5b5b5b5b5b60006120e530610e75565b90506000600954821015905080801561210a5750600b60029054906101000a900460ff165b80156121235750600660149054906101000a900460ff16155b801561217a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156121d05750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122265750601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561226a576001600660146101000a81548160ff02191690831515021790555061224e61280d565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123205750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561232a57600090505b60008082156124b0577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614801561239057506000600e54115b156123e1576123bd60646123af600e548961285e90919063ffffffff16565b61287490919063ffffffff16565b9150600e54600f54836123d09190612fd8565b6123da9190613061565b905061248c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561243e57506000600c54115b1561248b5761246b606461245d600c548961285e90919063ffffffff16565b61287490919063ffffffff16565b9150600c54600d548361247e9190612fd8565b6124889190613061565b90505b5b60008211156124a1576124a088308461258c565b5b81866124ad919061384c565b95505b6124bb88888861258c565b50505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f3906135da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561266c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126639061366c565b60405180910390fd5b61267783838361288a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156126fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f4906138f2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612790919061378a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127f49190612d07565b60405180910390a361280784848461288f565b50505050565b600061281830610e75565b90506000811415612829575061285c565b60146009546128389190612fd8565b81111561285157601460095461284e9190612fd8565b90505b61285a81612894565b505b565b6000818361286c9190612fd8565b905092915050565b600081836128829190613061565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156128b1576128b0613912565b5b6040519080825280602002602001820160405280156128df5781602001602082028036833780820191505090505b50905030816000815181106128f7576128f6613941565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061296857612967613941565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129cd307f000000000000000000000000000000000000000000000000000000000000000084611a0b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612a51959493929190613a69565b600060405180830381600087803b158015612a6b57600080fd5b505af1158015612a7f573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ac1578082015181840152602081019050612aa6565b83811115612ad0576000848401525b50505050565b6000601f19601f8301169050919050565b6000612af282612a87565b612afc8185612a92565b9350612b0c818560208601612aa3565b612b1581612ad6565b840191505092915050565b60006020820190508181036000830152612b3a8184612ae7565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b7282612b47565b9050919050565b612b8281612b67565b8114612b8d57600080fd5b50565b600081359050612b9f81612b79565b92915050565b6000819050919050565b612bb881612ba5565b8114612bc357600080fd5b50565b600081359050612bd581612baf565b92915050565b60008060408385031215612bf257612bf1612b42565b5b6000612c0085828601612b90565b9250506020612c1185828601612bc6565b9150509250929050565b60008115159050919050565b612c3081612c1b565b82525050565b6000602082019050612c4b6000830184612c27565b92915050565b600060208284031215612c6757612c66612b42565b5b6000612c7584828501612b90565b91505092915050565b6000819050919050565b6000612ca3612c9e612c9984612b47565b612c7e565b612b47565b9050919050565b6000612cb582612c88565b9050919050565b6000612cc782612caa565b9050919050565b612cd781612cbc565b82525050565b6000602082019050612cf26000830184612cce565b92915050565b612d0181612ba5565b82525050565b6000602082019050612d1c6000830184612cf8565b92915050565b612d2b81612b67565b82525050565b6000602082019050612d466000830184612d22565b92915050565b600060208284031215612d6257612d61612b42565b5b6000612d7084828501612bc6565b91505092915050565b600080600060608486031215612d9257612d91612b42565b5b6000612da086828701612b90565b9350506020612db186828701612b90565b9250506040612dc286828701612bc6565b9150509250925092565b600060ff82169050919050565b612de281612dcc565b82525050565b6000602082019050612dfd6000830184612dd9565b92915050565b612e0c81612c1b565b8114612e1757600080fd5b50565b600081359050612e2981612e03565b92915050565b60008060408385031215612e4657612e45612b42565b5b6000612e5485828601612b90565b9250506020612e6585828601612e1a565b9150509250929050565b600060208284031215612e8557612e84612b42565b5b6000612e9384828501612e1a565b91505092915050565b60008060408385031215612eb357612eb2612b42565b5b6000612ec185828601612b90565b9250506020612ed285828601612b90565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f2357607f821691505b60208210811415612f3757612f36612edc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f73602083612a92565b9150612f7e82612f3d565b602082019050919050565b60006020820190508181036000830152612fa281612f66565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fe382612ba5565b9150612fee83612ba5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561302757613026612fa9565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061306c82612ba5565b915061307783612ba5565b92508261308757613086613032565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006130ee602f83612a92565b91506130f982613092565b604082019050919050565b6000602082019050818103600083015261311d816130e1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613180602883612a92565b915061318b82613124565b604082019050919050565b600060208201905081810360008301526131af81613173565b9050919050565b50565b60006131c6600083612a92565b91506131d1826131b6565b600082019050919050565b600060208201905081810360008301526131f5816131b9565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613258602483612a92565b9150613263826131fc565b604082019050919050565b600060208201905081810360008301526132878161324b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006132ea603583612a92565b91506132f58261328e565b604082019050919050565b60006020820190508181036000830152613319816132dd565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061337c603483612a92565b915061338782613320565b604082019050919050565b600060208201905081810360008301526133ab8161336f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061340e602683612a92565b9150613419826133b2565b604082019050919050565b6000602082019050818103600083015261343d81613401565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006134a0602483612a92565b91506134ab82613444565b604082019050919050565b600060208201905081810360008301526134cf81613493565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613532602283612a92565b915061353d826134d6565b604082019050919050565b6000602082019050818103600083015261356181613525565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006135c4602583612a92565b91506135cf82613568565b604082019050919050565b600060208201905081810360008301526135f3816135b7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613656602383612a92565b9150613661826135fa565b604082019050919050565b6000602082019050818103600083015261368581613649565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006136c2601683612a92565b91506136cd8261368c565b602082019050919050565b600060208201905081810360008301526136f1816136b5565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613754603583612a92565b915061375f826136f8565b604082019050919050565b6000602082019050818103600083015261378381613747565b9050919050565b600061379582612ba5565b91506137a083612ba5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137d5576137d4612fa9565b5b828201905092915050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613816601383612a92565b9150613821826137e0565b602082019050919050565b6000602082019050818103600083015261384581613809565b9050919050565b600061385782612ba5565b915061386283612ba5565b92508282101561387557613874612fa9565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006138dc602683612a92565b91506138e782613880565b604082019050919050565b6000602082019050818103600083015261390b816138cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061399561399061398b84613970565b612c7e565b612ba5565b9050919050565b6139a58161397a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139e081612b67565b82525050565b60006139f283836139d7565b60208301905092915050565b6000602082019050919050565b6000613a16826139ab565b613a2081856139b6565b9350613a2b836139c7565b8060005b83811015613a5c578151613a4388826139e6565b9750613a4e836139fe565b925050600181019050613a2f565b5085935050505092915050565b600060a082019050613a7e6000830188612cf8565b613a8b602083018761399c565b8181036040830152613a9d8186613a0b565b9050613aac6060830185612d22565b613ab96080830184612cf8565b969550505050505056fea26469706673582212206e607a693ea63875ace814bd9ac66fcdcc6bb8a27f8d5fbeb5a6516b6f5a9ebb64736f6c634300080c0033
Deployed Bytecode
0x60806040526004361061023f5760003560e01c80637571336a1161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e14610874578063e2f45605146108b1578063eba4c333146108dc578063f2fde38b14610905578063f8b45b051461092e57610246565b8063c02466681461078f578063c18bc195146107b8578063c8c8ebe4146107e1578063d257b34f1461080c578063d85ba0631461084957610246565b806395d89b41116100f257806395d89b41146106a65780639c3b4fdc146106d1578063a0d82dc5146106fc578063a9059cbb14610727578063bbc0c7421461076457610246565b80637571336a146105e75780638a8c523c146106105780638da5cb5b146106275780638ea5220f14610652578063924de9b71461067d57610246565b8063313ce567116101bc5780636ddd1713116101805780636ddd17131461051457806370a082311461053f578063715018a61461057c57806371fc468814610593578063751039fc146105bc57610246565b8063313ce5671461042b57806349bd5a5e146104565780634a62bb65146104815780634fbee193146104ac5780636a486a8e146104e957610246565b80631816467f116102035780631816467f146103465780631b5d145d1461036f578063203e727e1461039a57806323b872dd146103c357806327c8f8351461040057610246565b806306fdde031461024b578063095ea7b31461027657806310d5de53146102b35780631694505e146102f057806318160ddd1461031b57610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610959565b60405161026d9190612b20565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190612bdb565b6109eb565b6040516102aa9190612c36565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190612c51565b610a09565b6040516102e79190612c36565b60405180910390f35b3480156102fc57600080fd5b50610305610a29565b6040516103129190612cdd565b60405180910390f35b34801561032757600080fd5b50610330610a4d565b60405161033d9190612d07565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190612c51565b610a57565b005b34801561037b57600080fd5b50610384610b93565b6040516103919190612d31565b60405180910390f35b3480156103a657600080fd5b506103c160048036038101906103bc9190612d4c565b610bb9565b005b3480156103cf57600080fd5b506103ea60048036038101906103e59190612d79565b610cc8565b6040516103f79190612c36565b60405180910390f35b34801561040c57600080fd5b50610415610dc0565b6040516104229190612d31565b60405180910390f35b34801561043757600080fd5b50610440610dc6565b60405161044d9190612de8565b60405180910390f35b34801561046257600080fd5b5061046b610dcf565b6040516104789190612d31565b60405180910390f35b34801561048d57600080fd5b50610496610df3565b6040516104a39190612c36565b60405180910390f35b3480156104b857600080fd5b506104d360048036038101906104ce9190612c51565b610e06565b6040516104e09190612c36565b60405180910390f35b3480156104f557600080fd5b506104fe610e5c565b60405161050b9190612d07565b60405180910390f35b34801561052057600080fd5b50610529610e62565b6040516105369190612c36565b60405180910390f35b34801561054b57600080fd5b5061056660048036038101906105619190612c51565b610e75565b6040516105739190612d07565b60405180910390f35b34801561058857600080fd5b50610591610ebd565b005b34801561059f57600080fd5b506105ba60048036038101906105b59190612d4c565b610f45565b005b3480156105c857600080fd5b506105d161101a565b6040516105de9190612c36565b60405180910390f35b3480156105f357600080fd5b5061060e60048036038101906106099190612e2f565b6110ba565b005b34801561061c57600080fd5b50610625611191565b005b34801561063357600080fd5b5061063c611256565b6040516106499190612d31565b60405180910390f35b34801561065e57600080fd5b50610667611280565b6040516106749190612d31565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190612e6f565b6112a6565b005b3480156106b257600080fd5b506106bb61133f565b6040516106c89190612b20565b60405180910390f35b3480156106dd57600080fd5b506106e66113d1565b6040516106f39190612d07565b60405180910390f35b34801561070857600080fd5b506107116113d7565b60405161071e9190612d07565b60405180910390f35b34801561073357600080fd5b5061074e60048036038101906107499190612bdb565b6113dd565b60405161075b9190612c36565b60405180910390f35b34801561077057600080fd5b506107796113fb565b6040516107869190612c36565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190612e2f565b61140e565b005b3480156107c457600080fd5b506107df60048036038101906107da9190612d4c565b611533565b005b3480156107ed57600080fd5b506107f6611642565b6040516108039190612d07565b60405180910390f35b34801561081857600080fd5b50610833600480360381019061082e9190612d4c565b611648565b6040516108409190612c36565b60405180910390f35b34801561085557600080fd5b5061085e61179d565b60405161086b9190612d07565b60405180910390f35b34801561088057600080fd5b5061089b60048036038101906108969190612e9c565b6117a3565b6040516108a89190612d07565b60405180910390f35b3480156108bd57600080fd5b506108c661182a565b6040516108d39190612d07565b60405180910390f35b3480156108e857600080fd5b5061090360048036038101906108fe9190612d4c565b611830565b005b34801561091157600080fd5b5061092c60048036038101906109279190612c51565b611905565b005b34801561093a57600080fd5b506109436119fd565b6040516109509190612d07565b60405180910390f35b60606003805461096890612f0b565b80601f016020809104026020016040519081016040528092919081815260200182805461099490612f0b565b80156109e15780601f106109b6576101008083540402835291602001916109e1565b820191906000526020600020905b8154815290600101906020018083116109c457829003601f168201915b5050505050905090565b60006109ff6109f8611a03565b8484611a0b565b6001905092915050565b60116020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610a5f611a03565b73ffffffffffffffffffffffffffffffffffffffff16610a7d611256565b73ffffffffffffffffffffffffffffffffffffffff1614610ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aca90612f89565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610bc1611a03565b73ffffffffffffffffffffffffffffffffffffffff16610bdf611256565b73ffffffffffffffffffffffffffffffffffffffff1614610c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2c90612f89565b60405180910390fd5b670de0b6b3a76400006103e86001610c4b610a4d565b610c559190612fd8565b610c5f9190613061565b610c699190613061565b811015610cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca290613104565b60405180910390fd5b670de0b6b3a764000081610cbf9190612fd8565b60088190555050565b6000610cd5848484611bd6565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d20611a03565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610da0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9790613196565b60405180910390fd5b610db485610dac611a03565b858403611a0b565b60019150509392505050565b61dead81565b60006012905090565b7f0000000000000000000000005a19ace4a7d1cefa94c5f30625df8d986953c99c81565b600b60009054906101000a900460ff1681565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ec5611a03565b73ffffffffffffffffffffffffffffffffffffffff16610ee3611256565b73ffffffffffffffffffffffffffffffffffffffff1614610f39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3090612f89565b60405180910390fd5b610f4360006124c6565b565b610f4d611a03565b73ffffffffffffffffffffffffffffffffffffffff16610f6b611256565b73ffffffffffffffffffffffffffffffffffffffff1614610fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb890612f89565b60405180910390fd5b80600d81905550600d54600c819055506064600c541115611017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100e906131dc565b60405180910390fd5b50565b6000611024611a03565b73ffffffffffffffffffffffffffffffffffffffff16611042611256565b73ffffffffffffffffffffffffffffffffffffffff1614611098576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108f90612f89565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6110c2611a03565b73ffffffffffffffffffffffffffffffffffffffff166110e0611256565b73ffffffffffffffffffffffffffffffffffffffff1614611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d90612f89565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611199611a03565b73ffffffffffffffffffffffffffffffffffffffff166111b7611256565b73ffffffffffffffffffffffffffffffffffffffff161461120d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120490612f89565b60405180910390fd5b6055600d81905550600d54600c819055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6112ae611a03565b73ffffffffffffffffffffffffffffffffffffffff166112cc611256565b73ffffffffffffffffffffffffffffffffffffffff1614611322576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131990612f89565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461134e90612f0b565b80601f016020809104026020016040519081016040528092919081815260200182805461137a90612f0b565b80156113c75780601f1061139c576101008083540402835291602001916113c7565b820191906000526020600020905b8154815290600101906020018083116113aa57829003601f168201915b5050505050905090565b600d5481565b600f5481565b60006113f16113ea611a03565b8484611bd6565b6001905092915050565b600b60019054906101000a900460ff1681565b611416611a03565b73ffffffffffffffffffffffffffffffffffffffff16611434611256565b73ffffffffffffffffffffffffffffffffffffffff161461148a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148190612f89565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115279190612c36565b60405180910390a25050565b61153b611a03565b73ffffffffffffffffffffffffffffffffffffffff16611559611256565b73ffffffffffffffffffffffffffffffffffffffff16146115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a690612f89565b60405180910390fd5b670de0b6b3a76400006103e860056115c5610a4d565b6115cf9190612fd8565b6115d99190613061565b6115e39190613061565b811015611625576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161c9061326e565b60405180910390fd5b670de0b6b3a7640000816116399190612fd8565b600a8190555050565b60085481565b6000611652611a03565b73ffffffffffffffffffffffffffffffffffffffff16611670611256565b73ffffffffffffffffffffffffffffffffffffffff16146116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90612f89565b60405180910390fd5b620186a060016116d4610a4d565b6116de9190612fd8565b6116e89190613061565b82101561172a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172190613300565b60405180910390fd5b6103e86005611737610a4d565b6117419190612fd8565b61174b9190613061565b82111561178d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178490613392565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b611838611a03565b73ffffffffffffffffffffffffffffffffffffffff16611856611256565b73ffffffffffffffffffffffffffffffffffffffff16146118ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118a390612f89565b60405180910390fd5b80600f81905550600f54600e819055506064600e541115611902576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f9906131dc565b60405180910390fd5b50565b61190d611a03565b73ffffffffffffffffffffffffffffffffffffffff1661192b611256565b73ffffffffffffffffffffffffffffffffffffffff1614611981576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197890612f89565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e890613424565b60405180910390fd5b6119fa816124c6565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a72906134b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611aeb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae290613548565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bc99190612d07565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3d906135da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad9061366c565b60405180910390fd5b6000811415611cd057611ccb8383600061258c565b6124c1565b600b60009054906101000a900460ff16156120da57611ced611256565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d5b5750611d2b611256565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d945750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dce575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611de75750600660149054906101000a900460ff16155b156120d957600b60019054906101000a900460ff16611ee157601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611ea15750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed7906136d8565b60405180910390fd5b5b7f0000000000000000000000005a19ace4a7d1cefa94c5f30625df8d986953c99c73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611f865750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561202d57600854811115611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc79061376a565b60405180910390fd5b600a54611fdc83610e75565b82611fe7919061378a565b1115612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201f9061382c565b60405180910390fd5b6120d8565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120d757600a5461208a83610e75565b82612095919061378a565b11156120d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cd9061382c565b60405180910390fd5b5b5b5b5b60006120e530610e75565b90506000600954821015905080801561210a5750600b60029054906101000a900460ff165b80156121235750600660149054906101000a900460ff16155b801561217a57507f0000000000000000000000005a19ace4a7d1cefa94c5f30625df8d986953c99c73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156121d05750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122265750601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561226a576001600660146101000a81548160ff02191690831515021790555061224e61280d565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806123205750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561232a57600090505b60008082156124b0577f0000000000000000000000005a19ace4a7d1cefa94c5f30625df8d986953c99c73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614801561239057506000600e54115b156123e1576123bd60646123af600e548961285e90919063ffffffff16565b61287490919063ffffffff16565b9150600e54600f54836123d09190612fd8565b6123da9190613061565b905061248c565b7f0000000000000000000000005a19ace4a7d1cefa94c5f30625df8d986953c99c73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561243e57506000600c54115b1561248b5761246b606461245d600c548961285e90919063ffffffff16565b61287490919063ffffffff16565b9150600c54600d548361247e9190612fd8565b6124889190613061565b90505b5b60008211156124a1576124a088308461258c565b5b81866124ad919061384c565b95505b6124bb88888861258c565b50505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f3906135da565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561266c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126639061366c565b60405180910390fd5b61267783838361288a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156126fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f4906138f2565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612790919061378a565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127f49190612d07565b60405180910390a361280784848461288f565b50505050565b600061281830610e75565b90506000811415612829575061285c565b60146009546128389190612fd8565b81111561285157601460095461284e9190612fd8565b90505b61285a81612894565b505b565b6000818361286c9190612fd8565b905092915050565b600081836128829190613061565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156128b1576128b0613912565b5b6040519080825280602002602001820160405280156128df5781602001602082028036833780820191505090505b50905030816000815181106128f7576128f6613941565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061296857612967613941565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129cd307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611a0b565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612a51959493929190613a69565b600060405180830381600087803b158015612a6b57600080fd5b505af1158015612a7f573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ac1578082015181840152602081019050612aa6565b83811115612ad0576000848401525b50505050565b6000601f19601f8301169050919050565b6000612af282612a87565b612afc8185612a92565b9350612b0c818560208601612aa3565b612b1581612ad6565b840191505092915050565b60006020820190508181036000830152612b3a8184612ae7565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b7282612b47565b9050919050565b612b8281612b67565b8114612b8d57600080fd5b50565b600081359050612b9f81612b79565b92915050565b6000819050919050565b612bb881612ba5565b8114612bc357600080fd5b50565b600081359050612bd581612baf565b92915050565b60008060408385031215612bf257612bf1612b42565b5b6000612c0085828601612b90565b9250506020612c1185828601612bc6565b9150509250929050565b60008115159050919050565b612c3081612c1b565b82525050565b6000602082019050612c4b6000830184612c27565b92915050565b600060208284031215612c6757612c66612b42565b5b6000612c7584828501612b90565b91505092915050565b6000819050919050565b6000612ca3612c9e612c9984612b47565b612c7e565b612b47565b9050919050565b6000612cb582612c88565b9050919050565b6000612cc782612caa565b9050919050565b612cd781612cbc565b82525050565b6000602082019050612cf26000830184612cce565b92915050565b612d0181612ba5565b82525050565b6000602082019050612d1c6000830184612cf8565b92915050565b612d2b81612b67565b82525050565b6000602082019050612d466000830184612d22565b92915050565b600060208284031215612d6257612d61612b42565b5b6000612d7084828501612bc6565b91505092915050565b600080600060608486031215612d9257612d91612b42565b5b6000612da086828701612b90565b9350506020612db186828701612b90565b9250506040612dc286828701612bc6565b9150509250925092565b600060ff82169050919050565b612de281612dcc565b82525050565b6000602082019050612dfd6000830184612dd9565b92915050565b612e0c81612c1b565b8114612e1757600080fd5b50565b600081359050612e2981612e03565b92915050565b60008060408385031215612e4657612e45612b42565b5b6000612e5485828601612b90565b9250506020612e6585828601612e1a565b9150509250929050565b600060208284031215612e8557612e84612b42565b5b6000612e9384828501612e1a565b91505092915050565b60008060408385031215612eb357612eb2612b42565b5b6000612ec185828601612b90565b9250506020612ed285828601612b90565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f2357607f821691505b60208210811415612f3757612f36612edc565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f73602083612a92565b9150612f7e82612f3d565b602082019050919050565b60006020820190508181036000830152612fa281612f66565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fe382612ba5565b9150612fee83612ba5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561302757613026612fa9565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061306c82612ba5565b915061307783612ba5565b92508261308757613086613032565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006130ee602f83612a92565b91506130f982613092565b604082019050919050565b6000602082019050818103600083015261311d816130e1565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613180602883612a92565b915061318b82613124565b604082019050919050565b600060208201905081810360008301526131af81613173565b9050919050565b50565b60006131c6600083612a92565b91506131d1826131b6565b600082019050919050565b600060208201905081810360008301526131f5816131b9565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000613258602483612a92565b9150613263826131fc565b604082019050919050565b600060208201905081810360008301526132878161324b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006132ea603583612a92565b91506132f58261328e565b604082019050919050565b60006020820190508181036000830152613319816132dd565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061337c603483612a92565b915061338782613320565b604082019050919050565b600060208201905081810360008301526133ab8161336f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061340e602683612a92565b9150613419826133b2565b604082019050919050565b6000602082019050818103600083015261343d81613401565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006134a0602483612a92565b91506134ab82613444565b604082019050919050565b600060208201905081810360008301526134cf81613493565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613532602283612a92565b915061353d826134d6565b604082019050919050565b6000602082019050818103600083015261356181613525565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006135c4602583612a92565b91506135cf82613568565b604082019050919050565b600060208201905081810360008301526135f3816135b7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613656602383612a92565b9150613661826135fa565b604082019050919050565b6000602082019050818103600083015261368581613649565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006136c2601683612a92565b91506136cd8261368c565b602082019050919050565b600060208201905081810360008301526136f1816136b5565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613754603583612a92565b915061375f826136f8565b604082019050919050565b6000602082019050818103600083015261378381613747565b9050919050565b600061379582612ba5565b91506137a083612ba5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137d5576137d4612fa9565b5b828201905092915050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613816601383612a92565b9150613821826137e0565b602082019050919050565b6000602082019050818103600083015261384581613809565b9050919050565b600061385782612ba5565b915061386283612ba5565b92508282101561387557613874612fa9565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006138dc602683612a92565b91506138e782613880565b604082019050919050565b6000602082019050818103600083015261390b816138cf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061399561399061398b84613970565b612c7e565b612ba5565b9050919050565b6139a58161397a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139e081612b67565b82525050565b60006139f283836139d7565b60208301905092915050565b6000602082019050919050565b6000613a16826139ab565b613a2081856139b6565b9350613a2b836139c7565b8060005b83811015613a5c578151613a4388826139e6565b9750613a4e836139fe565b925050600181019050613a2f565b5085935050505092915050565b600060a082019050613a7e6000830188612cf8565b613a8b602083018761399c565b8181036040830152613a9d8186613a0b565b9050613aac6060830185612d22565b613ab96080830184612cf8565b969550505050505056fea26469706673582212206e607a693ea63875ace814bd9ac66fcdcc6bb8a27f8d5fbeb5a6516b6f5a9ebb64736f6c634300080c0033
Deployed Bytecode Sourcemap
23350:9905:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8206:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10373:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24235:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23427:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9326:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28658:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23590:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27147:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11024:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23530:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9168:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23485:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23840:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28857:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24026:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23920:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9497:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1441:103;;;;;;;;;;;;;:::i;:::-;;28065:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26451:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27694:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26227:172;;;;;;;;;;;;;:::i;:::-;;790:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23692:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27957:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8425:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23993:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24061:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9837:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23880:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28468:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27430:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23725:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26642:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23959:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10075:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23767:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28264:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1699:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23807:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8206:100;8260:13;8293:5;8286:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8206:100;:::o;10373:169::-;10456:4;10473:39;10482:12;:10;:12::i;:::-;10496:7;10505:6;10473:8;:39::i;:::-;10530:4;10523:11;;10373:169;;;;:::o;24235:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;23427:51::-;;;:::o;9326:108::-;9387:7;9414:12;;9407:19;;9326:108;:::o;28658:189::-;1021:12;:10;:12::i;:::-;1010:23;;:7;:5;:7::i;:::-;:23;;;1002:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28794:9:::1;;;;;;;;;;;28763:41;;28780:12;28763:41;;;;;;;;;;;;28827:12;28815:9;;:24;;;;;;;;;;;;;;;;;;28658:189:::0;:::o;23590:63::-;;;;;;;;;;;;;:::o;27147:275::-;1021:12;:10;:12::i;:::-;1010:23;;:7;:5;:7::i;:::-;:23;;;1002:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27284:4:::1;27276;27271:1;27255:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27254:26;;;;:::i;:::-;27253:35;;;;:::i;:::-;27243:6;:45;;27221:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;27407:6;27397;:17;;;;:::i;:::-;27374:20;:40;;;;27147:275:::0;:::o;11024:492::-;11164:4;11181:36;11191:6;11199:9;11210:6;11181:9;:36::i;:::-;11230:24;11257:11;:19;11269:6;11257:19;;;;;;;;;;;;;;;:33;11277:12;:10;:12::i;:::-;11257:33;;;;;;;;;;;;;;;;11230:60;;11329:6;11309:16;:26;;11301:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;11416:57;11425:6;11433:12;:10;:12::i;:::-;11466:6;11447:16;:25;11416:8;:57::i;:::-;11504:4;11497:11;;;11024:492;;;;;:::o;23530:53::-;23576:6;23530:53;:::o;9168:93::-;9226:5;9251:2;9244:9;;9168:93;:::o;23485:38::-;;;:::o;23840:33::-;;;;;;;;;;;;;:::o;28857:126::-;28923:4;28947:19;:28;28967:7;28947:28;;;;;;;;;;;;;;;;;;;;;;;;;28940:35;;28857:126;;;:::o;24026:28::-;;;;:::o;23920:30::-;;;;;;;;;;;;;:::o;9497:127::-;9571:7;9598:9;:18;9608:7;9598:18;;;;;;;;;;;;;;;;9591:25;;9497:127;;;:::o;1441:103::-;1021:12;:10;:12::i;:::-;1010:23;;:7;:5;:7::i;:::-;:23;;;1002:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1506:30:::1;1533:1;1506:18;:30::i;:::-;1441:103::o:0;28065:191::-;1021:12;:10;:12::i;:::-;1010:23;;:7;:5;:7::i;:::-;:23;;;1002:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28163:7:::1;28151:9;:19;;;;28196:9;;28181:12;:24;;;;28240:3;28224:12;;:19;;28216:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;28065:191:::0;:::o;26451:121::-;26503:4;1021:12;:10;:12::i;:::-;1010:23;;:7;:5;:7::i;:::-;:23;;;1002:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26537:5:::1;26520:14;;:22;;;;;;;;;;;;;;;;;;26560:4;26553:11;;26451:121:::0;:::o;27694:167::-;1021:12;:10;:12::i;:::-;1010:23;;:7;:5;:7::i;:::-;:23;;;1002:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27849:4:::1;27807:31;:39;27839:6;27807:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27694:167:::0;;:::o;26227:172::-;1021:12;:10;:12::i;:::-;1010:23;;:7;:5;:7::i;:::-;:23;;;1002:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26294:2:::1;26282:9;:14;;;;26322:9;;26307:12;:24;;;;26358:4;26342:13;;:20;;;;;;;;;;;;;;;;;;26387:4;26373:11;;:18;;;;;;;;;;;;;;;;;;26227:172::o:0;790:87::-;836:7;863:6;;;;;;;;;;;856:13;;790:87;:::o;23692:24::-;;;;;;;;;;;;;:::o;27957:100::-;1021:12;:10;:12::i;:::-;1010:23;;:7;:5;:7::i;:::-;:23;;;1002:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28042:7:::1;28028:11;;:21;;;;;;;;;;;;;;;;;;27957:100:::0;:::o;8425:104::-;8481:13;8514:7;8507:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8425:104;:::o;23993:24::-;;;;:::o;24061:25::-;;;;:::o;9837:175::-;9923:4;9940:42;9950:12;:10;:12::i;:::-;9964:9;9975:6;9940:9;:42::i;:::-;10000:4;9993:11;;9837:175;;;;:::o;23880:33::-;;;;;;;;;;;;;:::o;28468:182::-;1021:12;:10;:12::i;:::-;1010:23;;:7;:5;:7::i;:::-;:23;;;1002:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28584:8:::1;28553:19;:28;28573:7;28553:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;28624:7;28608:34;;;28633:8;28608:34;;;;;;:::i;:::-;;;;;;;;28468:182:::0;;:::o;27430:256::-;1021:12;:10;:12::i;:::-;1010:23;;:7;:5;:7::i;:::-;:23;;;1002:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27570:4:::1;27562;27557:1;27541:13;:11;:13::i;:::-;:17;;;;:::i;:::-;27540:26;;;;:::i;:::-;27539:35;;;;:::i;:::-;27529:6;:45;;27507:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;27671:6;27661;:17;;;;:::i;:::-;27649:9;:29;;;;27430:256:::0;:::o;23725:35::-;;;;:::o;26642:497::-;26750:4;1021:12;:10;:12::i;:::-;1010:23;;:7;:5;:7::i;:::-;:23;;;1002:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26829:6:::1;26824:1;26808:13;:11;:13::i;:::-;:17;;;;:::i;:::-;26807:28;;;;:::i;:::-;26794:9;:41;;26772:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;26984:4;26979:1;26963:13;:11;:13::i;:::-;:17;;;;:::i;:::-;26962:26;;;;:::i;:::-;26949:9;:39;;26927:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;27100:9;27079:18;:30;;;;27127:4;27120:11;;26642:497:::0;;;:::o;23959:27::-;;;;:::o;10075:151::-;10164:7;10191:11;:18;10203:5;10191:18;;;;;;;;;;;;;;;:27;10210:7;10191:27;;;;;;;;;;;;;;;;10184:34;;10075:151;;;;:::o;23767:33::-;;;;:::o;28264:196::-;1021:12;:10;:12::i;:::-;1010:23;;:7;:5;:7::i;:::-;:23;;;1002:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28364:7:::1;28351:10;:20;;;;28398:10;;28382:13;:26;;;;28444:3;28427:13;;:20;;28419:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;28264:196:::0;:::o;1699:201::-;1021:12;:10;:12::i;:::-;1010:23;;:7;:5;:7::i;:::-;:23;;;1002:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1808:1:::1;1788:22;;:8;:22;;;;1780:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1864:28;1883:8;1864:18;:28::i;:::-;1699:201:::0;:::o;23807:24::-;;;;:::o;162:98::-;215:7;242:10;235:17;;162:98;:::o;13865:380::-;14018:1;14001:19;;:5;:19;;;;13993:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14099:1;14080:21;;:7;:21;;;;14072:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14183:6;14153:11;:18;14165:5;14153:18;;;;;;;;;;;;;;;:27;14172:7;14153:27;;;;;;;;;;;;;;;:36;;;;14221:7;14205:32;;14214:5;14205:32;;;14230:6;14205:32;;;;;;:::i;:::-;;;;;;;;13865:380;;;:::o;28991:3335::-;29139:1;29123:18;;:4;:18;;;;29115:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29216:1;29202:16;;:2;:16;;;;29194:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29285:1;29275:6;:11;29271:93;;;29303:28;29319:4;29325:2;29329:1;29303:15;:28::i;:::-;29346:7;;29271:93;29380:14;;;;;;;;;;;29376:1430;;;29441:7;:5;:7::i;:::-;29433:15;;:4;:15;;;;:49;;;;;29475:7;:5;:7::i;:::-;29469:13;;:2;:13;;;;29433:49;:86;;;;;29517:1;29503:16;;:2;:16;;;;29433:86;:128;;;;;29554:6;29540:21;;:2;:21;;;;29433:128;:158;;;;;29583:8;;;;;;;;;;;29582:9;29433:158;29411:1384;;;29631:13;;;;;;;;;;;29626:223;;29703:19;:25;29723:4;29703:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29732:19;:23;29752:2;29732:23;;;;;;;;;;;;;;;;;;;;;;;;;29703:52;29669:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;29626:223;30063:13;30055:21;;:4;:21;;;:82;;;;;30102:31;:35;30134:2;30102:35;;;;;;;;;;;;;;;;;;;;;;;;;30101:36;30055:82;30029:751;;;30224:20;;30214:6;:30;;30180:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;30432:9;;30415:13;30425:2;30415:9;:13::i;:::-;30406:6;:22;;;;:::i;:::-;:35;;30372:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;30029:751;;;30560:31;:35;30592:2;30560:35;;;;;;;;;;;;;;;;;;;;;;;;;30555:225;;30680:9;;30663:13;30673:2;30663:9;:13::i;:::-;30654:6;:22;;;;:::i;:::-;:35;;30620:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;30555:225;30029:751;29411:1384;29376:1430;30818:28;30849:24;30867:4;30849:9;:24::i;:::-;30818:55;;30886:12;30925:18;;30901:20;:42;;30886:57;;30974:7;:35;;;;;30998:11;;;;;;;;;;;30974:35;:61;;;;;31027:8;;;;;;;;;;;31026:9;30974:61;:97;;;;;31058:13;31052:19;;:2;:19;;;30974:97;:140;;;;;31089:19;:25;31109:4;31089:25;;;;;;;;;;;;;;;;;;;;;;;;;31088:26;30974:140;:181;;;;;31132:19;:23;31152:2;31132:23;;;;;;;;;;;;;;;;;;;;;;;;;31131:24;30974:181;30956:313;;;31193:4;31182:8;;:15;;;;;;;;;;;;;;;;;;31214:10;:8;:10::i;:::-;31252:5;31241:8;;:16;;;;;;;;;;;;;;;;;;30956:313;31281:12;31297:8;;;;;;;;;;;31296:9;31281:24;;31407:19;:25;31427:4;31407:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;31436:19;:23;31456:2;31436:23;;;;;;;;;;;;;;;;;;;;;;;;;31407:52;31403:100;;;31486:5;31476:15;;31403:100;31515:12;31542:20;31655:7;31651:622;;;31713:13;31707:19;;:2;:19;;;:40;;;;;31746:1;31730:13;;:17;31707:40;31703:422;;;31775:34;31805:3;31775:25;31786:13;;31775:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;31768:41;;31865:13;;31851:10;;31844:4;:17;;;;:::i;:::-;31843:35;;;;:::i;:::-;31828:50;;31703:422;;;31948:13;31940:21;;:4;:21;;;:41;;;;;31980:1;31965:12;;:16;31940:41;31936:189;;;32009:33;32038:3;32009:24;32020:12;;32009:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;32002:40;;32097:12;;32084:9;;32077:4;:16;;;;:::i;:::-;32076:33;;;;:::i;:::-;32061:48;;31936:189;31703:422;32151:1;32145:4;:7;32141:90;;;32173:42;32189:4;32203;32210;32173:15;:42::i;:::-;32141:90;32257:4;32247:14;;;;;:::i;:::-;;;31651:622;32285:33;32301:4;32307:2;32311:6;32285:15;:33::i;:::-;29104:3222;;;;;28991:3335;;;;:::o;2060:191::-;2134:16;2153:6;;;;;;;;;;;2134:25;;2179:8;2170:6;;:17;;;;;;;;;;;;;;;;;;2234:8;2203:40;;2224:8;2203:40;;;;;;;;;;;;2123:128;2060:191;:::o;12006:733::-;12164:1;12146:20;;:6;:20;;;;12138:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12248:1;12227:23;;:9;:23;;;;12219:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12303:47;12324:6;12332:9;12343:6;12303:20;:47::i;:::-;12363:21;12387:9;:17;12397:6;12387:17;;;;;;;;;;;;;;;;12363:41;;12440:6;12423:13;:23;;12415:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12561:6;12545:13;:22;12525:9;:17;12535:6;12525:17;;;;;;;;;;;;;;;:42;;;;12613:6;12589:9;:20;12599:9;12589:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12654:9;12637:35;;12646:6;12637:35;;;12665:6;12637:35;;;;;;:::i;:::-;;;;;;;;12685:46;12705:6;12713:9;12724:6;12685:19;:46::i;:::-;12127:612;12006:733;;;:::o;32911:339::-;32950:23;32976:24;32994:4;32976:9;:24::i;:::-;32950:50;;33034:1;33015:15;:20;33011:59;;;33052:7;;;33011:59;33125:2;33104:18;;:23;;;;:::i;:::-;33086:15;:41;33082:115;;;33183:2;33162:18;;:23;;;;:::i;:::-;33144:41;;33082:115;33209:33;33226:15;33209:16;:33::i;:::-;32939:311;32911:339;:::o;19318:98::-;19376:7;19407:1;19403;:5;;;;:::i;:::-;19396:12;;19318:98;;;;:::o;19717:::-;19775:7;19806:1;19802;:5;;;;:::i;:::-;19795:12;;19717:98;;;;:::o;14845:125::-;;;;:::o;15574:124::-;;;;:::o;32334:569::-;32460:21;32498:1;32484:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32460:40;;32529:4;32511;32516:1;32511:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;32555:3;;;;;;;;;;;32545:4;32550:1;32545:7;;;;;;;;:::i;:::-;;;;;;;:13;;;;;;;;;;;32571:62;32588:4;32603:15;32621:11;32571:8;:62::i;:::-;32672:15;:69;;;32756:11;32782:1;32826:4;32845:9;;;;;;;;;;;32869:15;32672:223;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32389:514;32334:569;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:152::-;4251:9;4284:37;4315:5;4284:37;:::i;:::-;4271:50;;4175:152;;;:::o;4333:183::-;4446:63;4503:5;4446:63;:::i;:::-;4441:3;4434:76;4333:183;;:::o;4522:274::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:97;4786:1;4775:9;4771:17;4762:6;4692:97;:::i;:::-;4522:274;;;;:::o;4802:118::-;4889:24;4907:5;4889:24;:::i;:::-;4884:3;4877:37;4802:118;;:::o;4926:222::-;5019:4;5057:2;5046:9;5042:18;5034:26;;5070:71;5138:1;5127:9;5123:17;5114:6;5070:71;:::i;:::-;4926:222;;;;:::o;5154:118::-;5241:24;5259:5;5241:24;:::i;:::-;5236:3;5229:37;5154:118;;:::o;5278:222::-;5371:4;5409:2;5398:9;5394:18;5386:26;;5422:71;5490:1;5479:9;5475:17;5466:6;5422:71;:::i;:::-;5278:222;;;;:::o;5506:329::-;5565:6;5614:2;5602:9;5593:7;5589:23;5585:32;5582:119;;;5620:79;;:::i;:::-;5582:119;5740:1;5765:53;5810:7;5801:6;5790:9;5786:22;5765:53;:::i;:::-;5755:63;;5711:117;5506:329;;;;:::o;5841:619::-;5918:6;5926;5934;5983:2;5971:9;5962:7;5958:23;5954:32;5951:119;;;5989:79;;:::i;:::-;5951:119;6109:1;6134:53;6179:7;6170:6;6159:9;6155:22;6134:53;:::i;:::-;6124:63;;6080:117;6236:2;6262:53;6307:7;6298:6;6287:9;6283:22;6262:53;:::i;:::-;6252:63;;6207:118;6364:2;6390:53;6435:7;6426:6;6415:9;6411:22;6390:53;:::i;:::-;6380:63;;6335:118;5841:619;;;;;:::o;6466:86::-;6501:7;6541:4;6534:5;6530:16;6519:27;;6466:86;;;:::o;6558:112::-;6641:22;6657:5;6641:22;:::i;:::-;6636:3;6629:35;6558:112;;:::o;6676:214::-;6765:4;6803:2;6792:9;6788:18;6780:26;;6816:67;6880:1;6869:9;6865:17;6856:6;6816:67;:::i;:::-;6676:214;;;;:::o;6896:116::-;6966:21;6981:5;6966:21;:::i;:::-;6959:5;6956:32;6946:60;;7002:1;6999;6992:12;6946:60;6896:116;:::o;7018:133::-;7061:5;7099:6;7086:20;7077:29;;7115:30;7139:5;7115:30;:::i;:::-;7018:133;;;;:::o;7157:468::-;7222:6;7230;7279:2;7267:9;7258:7;7254:23;7250:32;7247:119;;;7285:79;;:::i;:::-;7247:119;7405:1;7430:53;7475:7;7466:6;7455:9;7451:22;7430:53;:::i;:::-;7420:63;;7376:117;7532:2;7558:50;7600:7;7591:6;7580:9;7576:22;7558:50;:::i;:::-;7548:60;;7503:115;7157:468;;;;;:::o;7631:323::-;7687:6;7736:2;7724:9;7715:7;7711:23;7707:32;7704:119;;;7742:79;;:::i;:::-;7704:119;7862:1;7887:50;7929:7;7920:6;7909:9;7905:22;7887:50;:::i;:::-;7877:60;;7833:114;7631:323;;;;:::o;7960:474::-;8028:6;8036;8085:2;8073:9;8064:7;8060:23;8056:32;8053:119;;;8091:79;;:::i;:::-;8053:119;8211:1;8236:53;8281:7;8272:6;8261:9;8257:22;8236:53;:::i;:::-;8226:63;;8182:117;8338:2;8364:53;8409:7;8400:6;8389:9;8385:22;8364:53;:::i;:::-;8354:63;;8309:118;7960:474;;;;;:::o;8440:180::-;8488:77;8485:1;8478:88;8585:4;8582:1;8575:15;8609:4;8606:1;8599:15;8626:320;8670:6;8707:1;8701:4;8697:12;8687:22;;8754:1;8748:4;8744:12;8775:18;8765:81;;8831:4;8823:6;8819:17;8809:27;;8765:81;8893:2;8885:6;8882:14;8862:18;8859:38;8856:84;;;8912:18;;:::i;:::-;8856:84;8677:269;8626:320;;;:::o;8952:182::-;9092:34;9088:1;9080:6;9076:14;9069:58;8952:182;:::o;9140:366::-;9282:3;9303:67;9367:2;9362:3;9303:67;:::i;:::-;9296:74;;9379:93;9468:3;9379:93;:::i;:::-;9497:2;9492:3;9488:12;9481:19;;9140:366;;;:::o;9512:419::-;9678:4;9716:2;9705:9;9701:18;9693:26;;9765:9;9759:4;9755:20;9751:1;9740:9;9736:17;9729:47;9793:131;9919:4;9793:131;:::i;:::-;9785:139;;9512:419;;;:::o;9937:180::-;9985:77;9982:1;9975:88;10082:4;10079:1;10072:15;10106:4;10103:1;10096:15;10123:348;10163:7;10186:20;10204:1;10186:20;:::i;:::-;10181:25;;10220:20;10238:1;10220:20;:::i;:::-;10215:25;;10408:1;10340:66;10336:74;10333:1;10330:81;10325:1;10318:9;10311:17;10307:105;10304:131;;;10415:18;;:::i;:::-;10304:131;10463:1;10460;10456:9;10445:20;;10123:348;;;;:::o;10477:180::-;10525:77;10522:1;10515:88;10622:4;10619:1;10612:15;10646:4;10643:1;10636:15;10663:185;10703:1;10720:20;10738:1;10720:20;:::i;:::-;10715:25;;10754:20;10772:1;10754:20;:::i;:::-;10749:25;;10793:1;10783:35;;10798:18;;:::i;:::-;10783:35;10840:1;10837;10833:9;10828:14;;10663:185;;;;:::o;10854:234::-;10994:34;10990:1;10982:6;10978:14;10971:58;11063:17;11058:2;11050:6;11046:15;11039:42;10854:234;:::o;11094:366::-;11236:3;11257:67;11321:2;11316:3;11257:67;:::i;:::-;11250:74;;11333:93;11422:3;11333:93;:::i;:::-;11451:2;11446:3;11442:12;11435:19;;11094:366;;;:::o;11466:419::-;11632:4;11670:2;11659:9;11655:18;11647:26;;11719:9;11713:4;11709:20;11705:1;11694:9;11690:17;11683:47;11747:131;11873:4;11747:131;:::i;:::-;11739:139;;11466:419;;;:::o;11891:227::-;12031:34;12027:1;12019:6;12015:14;12008:58;12100:10;12095:2;12087:6;12083:15;12076:35;11891:227;:::o;12124:366::-;12266:3;12287:67;12351:2;12346:3;12287:67;:::i;:::-;12280:74;;12363:93;12452:3;12363:93;:::i;:::-;12481:2;12476:3;12472:12;12465:19;;12124:366;;;:::o;12496:419::-;12662:4;12700:2;12689:9;12685:18;12677:26;;12749:9;12743:4;12739:20;12735:1;12724:9;12720:17;12713:47;12777:131;12903:4;12777:131;:::i;:::-;12769:139;;12496:419;;;:::o;12921:114::-;;:::o;13041:364::-;13183:3;13204:66;13268:1;13263:3;13204:66;:::i;:::-;13197:73;;13279:93;13368:3;13279:93;:::i;:::-;13397:1;13392:3;13388:11;13381:18;;13041:364;;;:::o;13411:419::-;13577:4;13615:2;13604:9;13600:18;13592:26;;13664:9;13658:4;13654:20;13650:1;13639:9;13635:17;13628:47;13692:131;13818:4;13692:131;:::i;:::-;13684:139;;13411:419;;;:::o;13836:223::-;13976:34;13972:1;13964:6;13960:14;13953:58;14045:6;14040:2;14032:6;14028:15;14021:31;13836:223;:::o;14065:366::-;14207:3;14228:67;14292:2;14287:3;14228:67;:::i;:::-;14221:74;;14304:93;14393:3;14304:93;:::i;:::-;14422:2;14417:3;14413:12;14406:19;;14065:366;;;:::o;14437:419::-;14603:4;14641:2;14630:9;14626:18;14618:26;;14690:9;14684:4;14680:20;14676:1;14665:9;14661:17;14654:47;14718:131;14844:4;14718:131;:::i;:::-;14710:139;;14437:419;;;:::o;14862:240::-;15002:34;14998:1;14990:6;14986:14;14979:58;15071:23;15066:2;15058:6;15054:15;15047:48;14862:240;:::o;15108:366::-;15250:3;15271:67;15335:2;15330:3;15271:67;:::i;:::-;15264:74;;15347:93;15436:3;15347:93;:::i;:::-;15465:2;15460:3;15456:12;15449:19;;15108:366;;;:::o;15480:419::-;15646:4;15684:2;15673:9;15669:18;15661:26;;15733:9;15727:4;15723:20;15719:1;15708:9;15704:17;15697:47;15761:131;15887:4;15761:131;:::i;:::-;15753:139;;15480:419;;;:::o;15905:239::-;16045:34;16041:1;16033:6;16029:14;16022:58;16114:22;16109:2;16101:6;16097:15;16090:47;15905:239;:::o;16150:366::-;16292:3;16313:67;16377:2;16372:3;16313:67;:::i;:::-;16306:74;;16389:93;16478:3;16389:93;:::i;:::-;16507:2;16502:3;16498:12;16491:19;;16150:366;;;:::o;16522:419::-;16688:4;16726:2;16715:9;16711:18;16703:26;;16775:9;16769:4;16765:20;16761:1;16750:9;16746:17;16739:47;16803:131;16929:4;16803:131;:::i;:::-;16795:139;;16522:419;;;:::o;16947:225::-;17087:34;17083:1;17075:6;17071:14;17064:58;17156:8;17151:2;17143:6;17139:15;17132:33;16947:225;:::o;17178:366::-;17320:3;17341:67;17405:2;17400:3;17341:67;:::i;:::-;17334:74;;17417:93;17506:3;17417:93;:::i;:::-;17535:2;17530:3;17526:12;17519:19;;17178:366;;;:::o;17550:419::-;17716:4;17754:2;17743:9;17739:18;17731:26;;17803:9;17797:4;17793:20;17789:1;17778:9;17774:17;17767:47;17831:131;17957:4;17831:131;:::i;:::-;17823:139;;17550:419;;;:::o;17975:223::-;18115:34;18111:1;18103:6;18099:14;18092:58;18184:6;18179:2;18171:6;18167:15;18160:31;17975:223;:::o;18204:366::-;18346:3;18367:67;18431:2;18426:3;18367:67;:::i;:::-;18360:74;;18443:93;18532:3;18443:93;:::i;:::-;18561:2;18556:3;18552:12;18545:19;;18204:366;;;:::o;18576:419::-;18742:4;18780:2;18769:9;18765:18;18757:26;;18829:9;18823:4;18819:20;18815:1;18804:9;18800:17;18793:47;18857:131;18983:4;18857:131;:::i;:::-;18849:139;;18576:419;;;:::o;19001:221::-;19141:34;19137:1;19129:6;19125:14;19118:58;19210:4;19205:2;19197:6;19193:15;19186:29;19001:221;:::o;19228:366::-;19370:3;19391:67;19455:2;19450:3;19391:67;:::i;:::-;19384:74;;19467:93;19556:3;19467:93;:::i;:::-;19585:2;19580:3;19576:12;19569:19;;19228:366;;;:::o;19600:419::-;19766:4;19804:2;19793:9;19789:18;19781:26;;19853:9;19847:4;19843:20;19839:1;19828:9;19824:17;19817:47;19881:131;20007:4;19881:131;:::i;:::-;19873:139;;19600:419;;;:::o;20025:224::-;20165:34;20161:1;20153:6;20149:14;20142:58;20234:7;20229:2;20221:6;20217:15;20210:32;20025:224;:::o;20255:366::-;20397:3;20418:67;20482:2;20477:3;20418:67;:::i;:::-;20411:74;;20494:93;20583:3;20494:93;:::i;:::-;20612:2;20607:3;20603:12;20596:19;;20255:366;;;:::o;20627:419::-;20793:4;20831:2;20820:9;20816:18;20808:26;;20880:9;20874:4;20870:20;20866:1;20855:9;20851:17;20844:47;20908:131;21034:4;20908:131;:::i;:::-;20900:139;;20627:419;;;:::o;21052:222::-;21192:34;21188:1;21180:6;21176:14;21169:58;21261:5;21256:2;21248:6;21244:15;21237:30;21052:222;:::o;21280:366::-;21422:3;21443:67;21507:2;21502:3;21443:67;:::i;:::-;21436:74;;21519:93;21608:3;21519:93;:::i;:::-;21637:2;21632:3;21628:12;21621:19;;21280:366;;;:::o;21652:419::-;21818:4;21856:2;21845:9;21841:18;21833:26;;21905:9;21899:4;21895:20;21891:1;21880:9;21876:17;21869:47;21933:131;22059:4;21933:131;:::i;:::-;21925:139;;21652:419;;;:::o;22077:172::-;22217:24;22213:1;22205:6;22201:14;22194:48;22077:172;:::o;22255:366::-;22397:3;22418:67;22482:2;22477:3;22418:67;:::i;:::-;22411:74;;22494:93;22583:3;22494:93;:::i;:::-;22612:2;22607:3;22603:12;22596:19;;22255:366;;;:::o;22627:419::-;22793:4;22831:2;22820:9;22816:18;22808:26;;22880:9;22874:4;22870:20;22866:1;22855:9;22851:17;22844:47;22908:131;23034:4;22908:131;:::i;:::-;22900:139;;22627:419;;;:::o;23052:240::-;23192:34;23188:1;23180:6;23176:14;23169:58;23261:23;23256:2;23248:6;23244:15;23237:48;23052:240;:::o;23298:366::-;23440:3;23461:67;23525:2;23520:3;23461:67;:::i;:::-;23454:74;;23537:93;23626:3;23537:93;:::i;:::-;23655:2;23650:3;23646:12;23639:19;;23298:366;;;:::o;23670:419::-;23836:4;23874:2;23863:9;23859:18;23851:26;;23923:9;23917:4;23913:20;23909:1;23898:9;23894:17;23887:47;23951:131;24077:4;23951:131;:::i;:::-;23943:139;;23670:419;;;:::o;24095:305::-;24135:3;24154:20;24172:1;24154:20;:::i;:::-;24149:25;;24188:20;24206:1;24188:20;:::i;:::-;24183:25;;24342:1;24274:66;24270:74;24267:1;24264:81;24261:107;;;24348:18;;:::i;:::-;24261:107;24392:1;24389;24385:9;24378:16;;24095:305;;;;:::o;24406:169::-;24546:21;24542:1;24534:6;24530:14;24523:45;24406:169;:::o;24581:366::-;24723:3;24744:67;24808:2;24803:3;24744:67;:::i;:::-;24737:74;;24820:93;24909:3;24820:93;:::i;:::-;24938:2;24933:3;24929:12;24922:19;;24581:366;;;:::o;24953:419::-;25119:4;25157:2;25146:9;25142:18;25134:26;;25206:9;25200:4;25196:20;25192:1;25181:9;25177:17;25170:47;25234:131;25360:4;25234:131;:::i;:::-;25226:139;;24953:419;;;:::o;25378:191::-;25418:4;25438:20;25456:1;25438:20;:::i;:::-;25433:25;;25472:20;25490:1;25472:20;:::i;:::-;25467:25;;25511:1;25508;25505:8;25502:34;;;25516:18;;:::i;:::-;25502:34;25561:1;25558;25554:9;25546:17;;25378:191;;;;:::o;25575:225::-;25715:34;25711:1;25703:6;25699:14;25692:58;25784:8;25779:2;25771:6;25767:15;25760:33;25575:225;:::o;25806:366::-;25948:3;25969:67;26033:2;26028:3;25969:67;:::i;:::-;25962:74;;26045:93;26134:3;26045:93;:::i;:::-;26163:2;26158:3;26154:12;26147:19;;25806:366;;;:::o;26178:419::-;26344:4;26382:2;26371:9;26367:18;26359:26;;26431:9;26425:4;26421:20;26417:1;26406:9;26402:17;26395:47;26459:131;26585:4;26459:131;:::i;:::-;26451:139;;26178:419;;;:::o;26603:180::-;26651:77;26648:1;26641:88;26748:4;26745:1;26738:15;26772:4;26769:1;26762:15;26789:180;26837:77;26834:1;26827:88;26934:4;26931:1;26924:15;26958:4;26955:1;26948:15;26975:85;27020:7;27049:5;27038:16;;26975:85;;;:::o;27066:158::-;27124:9;27157:61;27175:42;27184:32;27210:5;27184:32;:::i;:::-;27175:42;:::i;:::-;27157:61;:::i;:::-;27144:74;;27066:158;;;:::o;27230:147::-;27325:45;27364:5;27325:45;:::i;:::-;27320:3;27313:58;27230:147;;:::o;27383:114::-;27450:6;27484:5;27478:12;27468:22;;27383:114;;;:::o;27503:184::-;27602:11;27636:6;27631:3;27624:19;27676:4;27671:3;27667:14;27652:29;;27503:184;;;;:::o;27693:132::-;27760:4;27783:3;27775:11;;27813:4;27808:3;27804:14;27796:22;;27693:132;;;:::o;27831:108::-;27908:24;27926:5;27908:24;:::i;:::-;27903:3;27896:37;27831:108;;:::o;27945:179::-;28014:10;28035:46;28077:3;28069:6;28035:46;:::i;:::-;28113:4;28108:3;28104:14;28090:28;;27945:179;;;;:::o;28130:113::-;28200:4;28232;28227:3;28223:14;28215:22;;28130:113;;;:::o;28279:732::-;28398:3;28427:54;28475:5;28427:54;:::i;:::-;28497:86;28576:6;28571:3;28497:86;:::i;:::-;28490:93;;28607:56;28657:5;28607:56;:::i;:::-;28686:7;28717:1;28702:284;28727:6;28724:1;28721:13;28702:284;;;28803:6;28797:13;28830:63;28889:3;28874:13;28830:63;:::i;:::-;28823:70;;28916:60;28969:6;28916:60;:::i;:::-;28906:70;;28762:224;28749:1;28746;28742:9;28737:14;;28702:284;;;28706:14;29002:3;28995:10;;28403:608;;;28279:732;;;;:::o;29017:831::-;29280:4;29318:3;29307:9;29303:19;29295:27;;29332:71;29400:1;29389:9;29385:17;29376:6;29332:71;:::i;:::-;29413:80;29489:2;29478:9;29474:18;29465:6;29413:80;:::i;:::-;29540:9;29534:4;29530:20;29525:2;29514:9;29510:18;29503:48;29568:108;29671:4;29662:6;29568:108;:::i;:::-;29560:116;;29686:72;29754:2;29743:9;29739:18;29730:6;29686:72;:::i;:::-;29768:73;29836:3;29825:9;29821:19;29812:6;29768:73;:::i;:::-;29017:831;;;;;;;;:::o
Swarm Source
ipfs://6e607a693ea63875ace814bd9ac66fcdcc6bb8a27f8d5fbeb5a6516b6f5a9ebb
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.