Overview
S Balance
0 S
S Value
-More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 7 from a total of 7 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 893163 | 2 days ago | IN | 0 S | 0.00005504 | ||||
Set Automated Ma... | 883524 | 2 days ago | IN | 0 S | 0.00005328 | ||||
Withdraw Stuck S... | 883063 | 2 days ago | IN | 0 S | 0.00003781 | ||||
Withdraw Stuck E... | 883043 | 2 days ago | IN | 0 S | 0.00002989 | ||||
Approve | 881906 | 2 days ago | IN | 0 S | 0.00005767 | ||||
Approve | 881904 | 2 days ago | IN | 0 S | 0.00005767 | ||||
Approve | 881851 | 2 days ago | IN | 0 S | 0.00005247 |
Loading...
Loading
Contract Name:
SuperSonic2
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2024-12-20 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.18; pragma experimental ABIEncoderV2; 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); } } /** * @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); } /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin Contracts guidelines: functions revert * instead returning `false` on failure. This behavior is nonetheless * conventional and does not conflict with the expectations of ERC20 * applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20, IERC20Metadata { mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5.05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); unchecked { _approve(sender, _msgSender(), currentAllowance - amount); } return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(_msgSender(), spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `sender` to `recipient`. * * This internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); uint256 senderBalance = _balances[sender]; require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[sender] = senderBalance - amount; } _balances[recipient] += amount; emit Transfer(sender, recipient, amount); _afterTokenTransfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply += amount; _balances[account] += amount; emit Transfer(address(0), account, amount); _afterTokenTransfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); unchecked { _balances[account] = accountBalance - amount; } _totalSupply -= amount; emit Transfer(account, address(0), amount); _afterTokenTransfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * has been transferred to `to`. * - when `from` is zero, `amount` tokens have been minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens have been burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } /** * @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 feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } ////// src/IUniswapV2Pair.sol /* pragma solidity 0.8.10; */ /* pragma experimental ABIEncoderV2; */ contract SuperSonic2 is ERC20, Ownable { using SafeMath for uint256; address public constant deadAddress = address(0xdead); bool private swapping; address public revShareWallet; address public teamWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = true; bool public swapEnabled = true; // Anti-bot and anti-whale mappings and variables uint256 public buyTotalFees; uint256 public buyRevShareFee; uint256 public buyLiquidityFee; uint256 public buyTeamFee; uint256 public sellTotalFees; uint256 public sellRevShareFee; uint256 public sellLiquidityFee; uint256 public sellTeamFee; uint256 public tokensForRevShare; uint256 public tokensForLiquidity; uint256 public tokensForTeam; /******************/ // exclude from fees and max transaction amount mapping(address => bool) private _isExcludedFromFees; mapping(address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping(address => bool) public automatedMarketMakerPairs; bool public preMigrationPhase = true; mapping(address => bool) public preMigrationTransferrable; event UpdateUniswapV2Router( address indexed newAddress, address indexed oldAddress ); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event revShareWalletUpdated( address indexed newWallet, address indexed oldWallet ); event teamWalletUpdated( address indexed newWallet, address indexed oldWallet ); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("SuperSonic2", "SUPERSONIC2") { uint256 _buyRevShareFee = 5; uint256 _buyLiquidityFee = 5; uint256 _buyTeamFee = 5; uint256 _sellRevShareFee = 5; uint256 _sellLiquidityFee = 5; uint256 _sellTeamFee = 5; uint256 totalSupply = 1_000_000_000 * 1e18; maxTransactionAmount = 10_000_000 * 1e18; // 1% maxWallet = 10_000_000 * 1e18; // 1% swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% buyRevShareFee = _buyRevShareFee; buyLiquidityFee = _buyLiquidityFee; buyTeamFee = _buyTeamFee; buyTotalFees = buyRevShareFee + buyLiquidityFee + buyTeamFee; sellRevShareFee = _sellRevShareFee; sellLiquidityFee = _sellLiquidityFee; sellTeamFee = _sellTeamFee; sellTotalFees = sellRevShareFee + sellLiquidityFee + sellTeamFee; revShareWallet = address(0xE9D391f4BB923FABA9585E60B0d83cA1474Da5a5); // set as revShare wallet teamWallet = owner(); // set as team wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); preMigrationTransferrable[owner()] = 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 {} // 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() * 5) / 1000) / 1e18, "Cannot set maxTransactionAmount lower than 0.5%" ); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require( newNum >= ((totalSupply() * 10) / 1000) / 1e18, "Cannot set maxWallet lower than 1.0%" ); 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 _revShareFee, uint256 _liquidityFee, uint256 _teamFee ) external onlyOwner { buyRevShareFee = _revShareFee; buyLiquidityFee = _liquidityFee; buyTeamFee = _teamFee; buyTotalFees = buyRevShareFee + buyLiquidityFee + buyTeamFee; require(buyTotalFees <= 15, "Buy fees must be <= 15."); } function updateSellFees( uint256 _revShareFee, uint256 _liquidityFee, uint256 _teamFee ) external onlyOwner { sellRevShareFee = _revShareFee; sellLiquidityFee = _liquidityFee; sellTeamFee = _teamFee; sellTotalFees = sellRevShareFee + sellLiquidityFee + sellTeamFee; require(sellTotalFees <= 15, "Sell fees must be <= 15."); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateRevShareWallet(address newRevShareWallet) external onlyOwner { emit revShareWalletUpdated(newRevShareWallet, revShareWallet); revShareWallet = newRevShareWallet; } function updateTeamWallet(address newWallet) external onlyOwner { emit teamWalletUpdated(newWallet, teamWallet); teamWallet = newWallet; } function isExcludedFromFees(address account) public view returns (bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if (amount == 0) { super._transfer(from, to, 0); return; } if (limitsInEffect) { if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ) { if (!tradingActive) { require( _isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active." ); } //when buy if ( automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to] ) { require( amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount." ); require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } //when sell else if ( automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from] ) { require( amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount." ); } else if (!_isExcludedMaxTransactionAmount[to]) { require( amount + balanceOf(to) <= maxWallet, "Max wallet exceeded" ); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if ( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if (takeFee) { // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0) { fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees; tokensForTeam += (fees * sellTeamFee) / sellTotalFees; tokensForRevShare += (fees * sellRevShareFee) / sellTotalFees; } // on buy else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees; tokensForTeam += (fees * buyTeamFee) / buyTotalFees; tokensForRevShare += (fees * buyRevShareFee) / buyTotalFees; } if (fees > 0) { super._transfer(from, revShareWallet, fees); } amount -= fees; } super._transfer(from, to, amount); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForRevShare + tokensForTeam; bool success; if (contractBalance == 0 || totalTokensToSwap == 0) { return; } if (contractBalance > swapTokensAtAmount * 20) { contractBalance = swapTokensAtAmount * 20; } uint256 initialETHBalance = address(this).balance; uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForTeam = ethBalance.mul(tokensForTeam).div(totalTokensToSwap - (tokensForLiquidity / 2)); tokensForLiquidity = 0; tokensForRevShare = 0; tokensForTeam = 0; (success, ) = address(teamWallet).call{value: ethForTeam}(""); (success, ) = address(revShareWallet).call{value: address(this).balance}(""); } function withdrawStuckSS() external onlyOwner { uint256 balance = IERC20(address(this)).balanceOf(address(this)); IERC20(address(this)).transfer(msg.sender, balance); payable(msg.sender).transfer(address(this).balance); } function withdrawStuckToken(address _token, address _to) external onlyOwner { require(_token != address(0), "_token address cannot be 0"); uint256 _contractBalance = IERC20(_token).balanceOf(address(this)); IERC20(_token).transfer(_to, _contractBalance); } function withdrawStuckEth(address toAddr) external onlyOwner { (bool success, ) = toAddr.call{ value: address(this).balance } (""); require(success); } }
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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"revShareWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"teamWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRevShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"preMigrationPhase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"preMigrationTransferrable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"revShareWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRevShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForRevShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTeam","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[{"internalType":"uint256","name":"_revShareFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"updateBuyFees","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":"address","name":"newRevShareWallet","type":"address"}],"name":"updateRevShareWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_revShareFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","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"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toAddr","type":"address"}],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckSS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055506001601a60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600b81526020017f5375706572536f6e6963320000000000000000000000000000000000000000008152506040518060400160405280600b81526020017f5355504552534f4e4943320000000000000000000000000000000000000000008152508160039081620000fb919062000afc565b5080600490816200010d919062000afc565b5050506200013062000124620003e460201b60201c565b620003ec60201b60201c565b60006005905060006005905060006005905060006005905060006005905060006005905060006b033b2e3c9fd0803ce800000090506a084595161401484a0000006008819055506a084595161401484a000000600a819055506127106005826200019b919062000c12565b620001a7919062000c8c565b60098190555086600d8190555085600e8190555084600f81905550600f54600e54600d54620001d7919062000cc4565b620001e3919062000cc4565b600c8190555083601181905550826012819055508160138190555060135460125460115462000213919062000cc4565b6200021f919062000cc4565b60108190555073e9d391f4bb923faba9585e60b0d83ca1474da5a5600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200028a620004b260201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002ec620002de620004b260201b60201c565b6001620004dc60201b60201c565b620002ff306001620004dc60201b60201c565b6200031461dead6001620004dc60201b60201c565b6200033662000328620004b260201b60201c565b60016200061660201b60201c565b620003493060016200061660201b60201c565b6200035e61dead60016200061660201b60201c565b6001601b600062000374620004b260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003d733826200070060201b60201c565b5050505050505062000e5c565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620004ec620003e460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000512620004b260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200056b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005629062000d60565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200060a919062000d9f565b60405180910390a25050565b62000626620003e460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200064c620004b260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006a5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200069c9062000d60565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000772576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007699062000e0c565b60405180910390fd5b62000786600083836200087860201b60201c565b80600260008282546200079a919062000cc4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620007f1919062000cc4565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000858919062000e3f565b60405180910390a362000874600083836200087d60201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200090457607f821691505b6020821081036200091a5762000919620008bc565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000945565b62000990868362000945565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009dd620009d7620009d184620009a8565b620009b2565b620009a8565b9050919050565b6000819050919050565b620009f983620009bc565b62000a1162000a0882620009e4565b84845462000952565b825550505050565b600090565b62000a2862000a19565b62000a35818484620009ee565b505050565b5b8181101562000a5d5762000a5160008262000a1e565b60018101905062000a3b565b5050565b601f82111562000aac5762000a768162000920565b62000a818462000935565b8101602085101562000a91578190505b62000aa962000aa08562000935565b83018262000a3a565b50505b505050565b600082821c905092915050565b600062000ad16000198460080262000ab1565b1980831691505092915050565b600062000aec838362000abe565b9150826002028217905092915050565b62000b078262000882565b67ffffffffffffffff81111562000b235762000b226200088d565b5b62000b2f8254620008eb565b62000b3c82828562000a61565b600060209050601f83116001811462000b74576000841562000b5f578287015190505b62000b6b858262000ade565b86555062000bdb565b601f19841662000b848662000920565b60005b8281101562000bae5784890151825560018201915060208501945060208101905062000b87565b8683101562000bce578489015162000bca601f89168262000abe565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c1f82620009a8565b915062000c2c83620009a8565b925082820262000c3c81620009a8565b9150828204841483151762000c565762000c5562000be3565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c9982620009a8565b915062000ca683620009a8565b92508262000cb95762000cb862000c5d565b5b828204905092915050565b600062000cd182620009a8565b915062000cde83620009a8565b925082820190508082111562000cf95762000cf862000be3565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000d4860208362000cff565b915062000d558262000d10565b602082019050919050565b6000602082019050818103600083015262000d7b8162000d39565b9050919050565b60008115159050919050565b62000d998162000d82565b82525050565b600060208201905062000db6600083018462000d8e565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000df4601f8362000cff565b915062000e018262000dbc565b602082019050919050565b6000602082019050818103600083015262000e278162000de5565b9050919050565b62000e3981620009a8565b82525050565b600060208201905062000e56600083018462000e2e565b92915050565b6149cc8062000e6c6000396000f3fe6080604052600436106103395760003560e01c80637cb332bb116101ab578063c0246668116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610c43578063f637434214610c6c578063f8b45b0514610c97578063fde83a3414610cc257610340565b8063dd62ed3e14610bb0578063e2f4560514610bed578063f11a24d314610c1857610340565b8063c8c8ebe4116100d1578063c8c8ebe414610af2578063d257b34f14610b1d578063d729715f14610b5a578063d85ba06314610b8557610340565b8063c024666814610a77578063c17b5b8c14610aa0578063c18bc19514610ac957610340565b80639c2e4ac611610164578063adee28ff1161013e578063adee28ff146109bd578063b62496f5146109e6578063bbc0c74214610a23578063bc205ad314610a4e57610340565b80639c2e4ac614610918578063a457c2d714610943578063a9059cbb1461098057610340565b80637cb332bb1461081e5780638095d564146108475780638da5cb5b14610870578063924de9b71461089b57806395d89b41146108c45780639a7a23d6146108ef57610340565b8063395093511161028557806370a08231116102235780637571336a116101fd5780637571336a1461078a57806377980cbd146107b3578063782c4e99146107ca5780637ca8448a146107f557610340565b806370a082311461070b578063715018a614610748578063751039fc1461075f57610340565b80634fbee1931161025f5780634fbee1931461064d578063599270441461068a5780636a486a8e146106b55780636ddd1713146106e057610340565b806339509351146105a85780634a62bb65146105e55780634e29e5231461061057610340565b806319eab042116102f257806323b872dd116102cc57806323b872dd146104ea57806324b9f3c11461052757806327c8f83514610552578063313ce5671461057d57610340565b806319eab0421461046b5780631a8145bb14610496578063203e727e146104c157610340565b806306fdde0314610345578063095ea7b3146103705780630e922ca7146103ad57806310d5de53146103d8578063156c2f351461041557806318160ddd1461044057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610ced565b60405161036791906138f1565b60405180910390f35b34801561037c57600080fd5b50610397600480360381019061039291906139ac565b610d7f565b6040516103a49190613a07565b60405180910390f35b3480156103b957600080fd5b506103c2610d9d565b6040516103cf9190613a07565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190613a22565b610db0565b60405161040c9190613a07565b60405180910390f35b34801561042157600080fd5b5061042a610dd0565b6040516104379190613a5e565b60405180910390f35b34801561044c57600080fd5b50610455610dd6565b6040516104629190613a5e565b60405180910390f35b34801561047757600080fd5b50610480610de0565b60405161048d9190613a5e565b60405180910390f35b3480156104a257600080fd5b506104ab610de6565b6040516104b89190613a5e565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e39190613a79565b610dec565b005b3480156104f657600080fd5b50610511600480360381019061050c9190613aa6565b610efb565b60405161051e9190613a07565b60405180910390f35b34801561053357600080fd5b5061053c610ff3565b6040516105499190613a5e565b60405180910390f35b34801561055e57600080fd5b50610567610ff9565b6040516105749190613b08565b60405180910390f35b34801561058957600080fd5b50610592610fff565b60405161059f9190613b3f565b60405180910390f35b3480156105b457600080fd5b506105cf60048036038101906105ca91906139ac565b611008565b6040516105dc9190613a07565b60405180910390f35b3480156105f157600080fd5b506105fa6110b4565b6040516106079190613a07565b60405180910390f35b34801561061c57600080fd5b5061063760048036038101906106329190613a22565b6110c7565b6040516106449190613a07565b60405180910390f35b34801561065957600080fd5b50610674600480360381019061066f9190613a22565b6110e7565b6040516106819190613a07565b60405180910390f35b34801561069657600080fd5b5061069f61113d565b6040516106ac9190613b08565b60405180910390f35b3480156106c157600080fd5b506106ca611163565b6040516106d79190613a5e565b60405180910390f35b3480156106ec57600080fd5b506106f5611169565b6040516107029190613a07565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d9190613a22565b61117c565b60405161073f9190613a5e565b60405180910390f35b34801561075457600080fd5b5061075d6111c4565b005b34801561076b57600080fd5b5061077461124c565b6040516107819190613a07565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac9190613b86565b6112ec565b005b3480156107bf57600080fd5b506107c86113c3565b005b3480156107d657600080fd5b506107df611586565b6040516107ec9190613b08565b60405180910390f35b34801561080157600080fd5b5061081c60048036038101906108179190613a22565b6115ac565b005b34801561082a57600080fd5b5061084560048036038101906108409190613a22565b6116a2565b005b34801561085357600080fd5b5061086e60048036038101906108699190613bc6565b6117de565b005b34801561087c57600080fd5b506108856118dd565b6040516108929190613b08565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd9190613c19565b611907565b005b3480156108d057600080fd5b506108d96119a0565b6040516108e691906138f1565b60405180910390f35b3480156108fb57600080fd5b5061091660048036038101906109119190613b86565b611a32565b005b34801561092457600080fd5b5061092d611abc565b60405161093a9190613a5e565b60405180910390f35b34801561094f57600080fd5b5061096a600480360381019061096591906139ac565b611ac2565b6040516109779190613a07565b60405180910390f35b34801561098c57600080fd5b506109a760048036038101906109a291906139ac565b611bad565b6040516109b49190613a07565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190613a22565b611bcb565b005b3480156109f257600080fd5b50610a0d6004803603810190610a089190613a22565b611d07565b604051610a1a9190613a07565b60405180910390f35b348015610a2f57600080fd5b50610a38611d27565b604051610a459190613a07565b60405180910390f35b348015610a5a57600080fd5b50610a756004803603810190610a709190613c46565b611d3a565b005b348015610a8357600080fd5b50610a9e6004803603810190610a999190613b86565b611f27565b005b348015610aac57600080fd5b50610ac76004803603810190610ac29190613bc6565b61204c565b005b348015610ad557600080fd5b50610af06004803603810190610aeb9190613a79565b61214b565b005b348015610afe57600080fd5b50610b0761225a565b604051610b149190613a5e565b60405180910390f35b348015610b2957600080fd5b50610b446004803603810190610b3f9190613a79565b612260565b604051610b519190613a07565b60405180910390f35b348015610b6657600080fd5b50610b6f6123b5565b604051610b7c9190613a5e565b60405180910390f35b348015610b9157600080fd5b50610b9a6123bb565b604051610ba79190613a5e565b60405180910390f35b348015610bbc57600080fd5b50610bd76004803603810190610bd29190613c46565b6123c1565b604051610be49190613a5e565b60405180910390f35b348015610bf957600080fd5b50610c02612448565b604051610c0f9190613a5e565b60405180910390f35b348015610c2457600080fd5b50610c2d61244e565b604051610c3a9190613a5e565b60405180910390f35b348015610c4f57600080fd5b50610c6a6004803603810190610c659190613a22565b612454565b005b348015610c7857600080fd5b50610c8161254b565b604051610c8e9190613a5e565b60405180910390f35b348015610ca357600080fd5b50610cac612551565b604051610cb99190613a5e565b60405180910390f35b348015610cce57600080fd5b50610cd7612557565b604051610ce49190613a5e565b60405180910390f35b606060038054610cfc90613cb5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2890613cb5565b8015610d755780601f10610d4a57610100808354040283529160200191610d75565b820191906000526020600020905b815481529060010190602001808311610d5857829003601f168201915b5050505050905090565b6000610d93610d8c61255d565b8484612565565b6001905092915050565b601a60009054906101000a900460ff1681565b60186020528060005260406000206000915054906101000a900460ff1681565b600d5481565b6000600254905090565b60115481565b60155481565b610df461255d565b73ffffffffffffffffffffffffffffffffffffffff16610e126118dd565b73ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f90613d32565b60405180910390fd5b670de0b6b3a76400006103e86005610e7e610dd6565b610e889190613d81565b610e929190613df2565b610e9c9190613df2565b811015610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed590613e95565b60405180910390fd5b670de0b6b3a764000081610ef29190613d81565b60088190555050565b6000610f0884848461272e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f5361255d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90613f27565b60405180910390fd5b610fe785610fdf61255d565b858403612565565b60019150509392505050565b60145481565b61dead81565b60006012905090565b60006110aa61101561255d565b84846001600061102361255d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110a59190613f47565b612565565b6001905092915050565b600b60009054906101000a900460ff1681565b601b6020528060005260406000206000915054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111cc61255d565b73ffffffffffffffffffffffffffffffffffffffff166111ea6118dd565b73ffffffffffffffffffffffffffffffffffffffff1614611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790613d32565b60405180910390fd5b61124a600061321f565b565b600061125661255d565b73ffffffffffffffffffffffffffffffffffffffff166112746118dd565b73ffffffffffffffffffffffffffffffffffffffff16146112ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c190613d32565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6112f461255d565b73ffffffffffffffffffffffffffffffffffffffff166113126118dd565b73ffffffffffffffffffffffffffffffffffffffff1614611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f90613d32565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113cb61255d565b73ffffffffffffffffffffffffffffffffffffffff166113e96118dd565b73ffffffffffffffffffffffffffffffffffffffff161461143f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143690613d32565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161147a9190613b08565b602060405180830381865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190613f90565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016114f8929190613fbd565b6020604051808303816000875af1158015611517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153b9190613ffb565b503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611582573d6000803e3d6000fd5b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115b461255d565b73ffffffffffffffffffffffffffffffffffffffff166115d26118dd565b73ffffffffffffffffffffffffffffffffffffffff1614611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90613d32565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff164760405161164e90614059565b60006040518083038185875af1925050503d806000811461168b576040519150601f19603f3d011682016040523d82523d6000602084013e611690565b606091505b505090508061169e57600080fd5b5050565b6116aa61255d565b73ffffffffffffffffffffffffffffffffffffffff166116c86118dd565b73ffffffffffffffffffffffffffffffffffffffff161461171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171590613d32565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8aa0f85050aca99be43beb823e0457e77966b3baf697a289b03681978f96166860405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117e661255d565b73ffffffffffffffffffffffffffffffffffffffff166118046118dd565b73ffffffffffffffffffffffffffffffffffffffff161461185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185190613d32565b60405180910390fd5b82600d8190555081600e8190555080600f81905550600f54600e54600d546118829190613f47565b61188c9190613f47565b600c81905550600f600c5411156118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf906140ba565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61190f61255d565b73ffffffffffffffffffffffffffffffffffffffff1661192d6118dd565b73ffffffffffffffffffffffffffffffffffffffff1614611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a90613d32565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546119af90613cb5565b80601f01602080910402602001604051908101604052809291908181526020018280546119db90613cb5565b8015611a285780601f106119fd57610100808354040283529160200191611a28565b820191906000526020600020905b815481529060010190602001808311611a0b57829003601f168201915b5050505050905090565b611a3a61255d565b73ffffffffffffffffffffffffffffffffffffffff16611a586118dd565b73ffffffffffffffffffffffffffffffffffffffff1614611aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa590613d32565b60405180910390fd5b611ab882826132e5565b5050565b600f5481565b60008060016000611ad161255d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b859061414c565b60405180910390fd5b611ba2611b9961255d565b85858403612565565b600191505092915050565b6000611bc1611bba61255d565b848461272e565b6001905092915050565b611bd361255d565b73ffffffffffffffffffffffffffffffffffffffff16611bf16118dd565b73ffffffffffffffffffffffffffffffffffffffff1614611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e90613d32565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc9f2d63eee8632b33d7a7db5252eb29036e81ee4fbe29260febe0c49ffb8a7bb60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611d4261255d565b73ffffffffffffffffffffffffffffffffffffffff16611d606118dd565b73ffffffffffffffffffffffffffffffffffffffff1614611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad90613d32565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c906141b8565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e609190613b08565b602060405180830381865afa158015611e7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea19190613f90565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611ede929190613fbd565b6020604051808303816000875af1158015611efd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f219190613ffb565b50505050565b611f2f61255d565b73ffffffffffffffffffffffffffffffffffffffff16611f4d6118dd565b73ffffffffffffffffffffffffffffffffffffffff1614611fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9a90613d32565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120409190613a07565b60405180910390a25050565b61205461255d565b73ffffffffffffffffffffffffffffffffffffffff166120726118dd565b73ffffffffffffffffffffffffffffffffffffffff16146120c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bf90613d32565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546120f09190613f47565b6120fa9190613f47565b601081905550600f6010541115612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d90614224565b60405180910390fd5b505050565b61215361255d565b73ffffffffffffffffffffffffffffffffffffffff166121716118dd565b73ffffffffffffffffffffffffffffffffffffffff16146121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be90613d32565b60405180910390fd5b670de0b6b3a76400006103e8600a6121dd610dd6565b6121e79190613d81565b6121f19190613df2565b6121fb9190613df2565b81101561223d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612234906142b6565b60405180910390fd5b670de0b6b3a7640000816122519190613d81565b600a8190555050565b60085481565b600061226a61255d565b73ffffffffffffffffffffffffffffffffffffffff166122886118dd565b73ffffffffffffffffffffffffffffffffffffffff16146122de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d590613d32565b60405180910390fd5b620186a060016122ec610dd6565b6122f69190613d81565b6123009190613df2565b821015612342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233990614348565b60405180910390fd5b6103e8600561234f610dd6565b6123599190613d81565b6123639190613df2565b8211156123a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239c906143da565b60405180910390fd5b8160098190555060019050919050565b60135481565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b61245c61255d565b73ffffffffffffffffffffffffffffffffffffffff1661247a6118dd565b73ffffffffffffffffffffffffffffffffffffffff16146124d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c790613d32565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361253f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125369061446c565b60405180910390fd5b6125488161321f565b50565b60125481565b600a5481565b60165481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb906144fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263a90614590565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127219190613a5e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361279d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279490614622565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361280c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612803906146b4565b60405180910390fd5b600081036128255761282083836000613386565b61321a565b600b60009054906101000a900460ff1615612d20576128426118dd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128b057506128806118dd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128e95750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612923575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561293c5750600560149054906101000a900460ff16155b15612d1f57600b60019054906101000a900460ff16612a3657601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129f65750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2c90614720565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ad95750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b8057600854811115612b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1a906147b2565b60405180910390fd5b600a54612b2f8361117c565b82612b3a9190613f47565b1115612b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b729061481e565b60405180910390fd5b612d1e565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c235750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c7257600854811115612c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c64906148b0565b60405180910390fd5b612d1d565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d1c57600a54612ccf8361117c565b82612cda9190613f47565b1115612d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d129061481e565b60405180910390fd5b5b5b5b5b5b6000612d2b3061117c565b905060006009548210159050808015612d505750600b60029054906101000a900460ff165b8015612d695750600560149054906101000a900460ff16155b8015612dbf5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e155750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e6b5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612eaf576001600560146101000a81548160ff021916908315150217905550612e93613605565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f655750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f6f57600090505b6000811561320a57601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fd257506000601054115b1561309f57612fff6064612ff16010548861381590919063ffffffff16565b61382b90919063ffffffff16565b9050601054601254826130129190613d81565b61301c9190613df2565b6015600082825461302d9190613f47565b92505081905550601054601354826130459190613d81565b61304f9190613df2565b601660008282546130609190613f47565b92505081905550601054601154826130789190613d81565b6130829190613df2565b601460008282546130939190613f47565b925050819055506131c4565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130fa57506000600c54115b156131c3576131276064613119600c548861381590919063ffffffff16565b61382b90919063ffffffff16565b9050600c54600e548261313a9190613d81565b6131449190613df2565b601560008282546131559190613f47565b92505081905550600c54600f548261316d9190613d81565b6131779190613df2565b601660008282546131889190613f47565b92505081905550600c54600d54826131a09190613d81565b6131aa9190613df2565b601460008282546131bb9190613f47565b925050819055505b5b60008111156131fb576131fa87600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613386565b5b808561320791906148d0565b94505b613215878787613386565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ec90614622565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345b906146b4565b60405180910390fd5b61346f838383613841565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156134f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ec90614976565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135889190613f47565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135ec9190613a5e565b60405180910390a36135ff848484613846565b50505050565b60006136103061117c565b905060006016546014546015546136279190613f47565b6136319190613f47565b90506000808314806136435750600082145b1561365057505050613813565b601460095461365f9190613d81565b8311156136785760146009546136759190613d81565b92505b60004790506000613692824761384b90919063ffffffff16565b905060006136d660026015546136a89190613df2565b866136b391906148d0565b6136c86016548561381590919063ffffffff16565b61382b90919063ffffffff16565b9050600060158190555060006014819055506000601681905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161373690614059565b60006040518083038185875af1925050503d8060008114613773576040519150601f19603f3d011682016040523d82523d6000602084013e613778565b606091505b505080945050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516137c490614059565b60006040518083038185875af1925050503d8060008114613801576040519150601f19603f3d011682016040523d82523d6000602084013e613806565b606091505b5050809450505050505050505b565b600081836138239190613d81565b905092915050565b600081836138399190613df2565b905092915050565b505050565b505050565b6000818361385991906148d0565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561389b578082015181840152602081019050613880565b60008484015250505050565b6000601f19601f8301169050919050565b60006138c382613861565b6138cd818561386c565b93506138dd81856020860161387d565b6138e6816138a7565b840191505092915050565b6000602082019050818103600083015261390b81846138b8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061394382613918565b9050919050565b61395381613938565b811461395e57600080fd5b50565b6000813590506139708161394a565b92915050565b6000819050919050565b61398981613976565b811461399457600080fd5b50565b6000813590506139a681613980565b92915050565b600080604083850312156139c3576139c2613913565b5b60006139d185828601613961565b92505060206139e285828601613997565b9150509250929050565b60008115159050919050565b613a01816139ec565b82525050565b6000602082019050613a1c60008301846139f8565b92915050565b600060208284031215613a3857613a37613913565b5b6000613a4684828501613961565b91505092915050565b613a5881613976565b82525050565b6000602082019050613a736000830184613a4f565b92915050565b600060208284031215613a8f57613a8e613913565b5b6000613a9d84828501613997565b91505092915050565b600080600060608486031215613abf57613abe613913565b5b6000613acd86828701613961565b9350506020613ade86828701613961565b9250506040613aef86828701613997565b9150509250925092565b613b0281613938565b82525050565b6000602082019050613b1d6000830184613af9565b92915050565b600060ff82169050919050565b613b3981613b23565b82525050565b6000602082019050613b546000830184613b30565b92915050565b613b63816139ec565b8114613b6e57600080fd5b50565b600081359050613b8081613b5a565b92915050565b60008060408385031215613b9d57613b9c613913565b5b6000613bab85828601613961565b9250506020613bbc85828601613b71565b9150509250929050565b600080600060608486031215613bdf57613bde613913565b5b6000613bed86828701613997565b9350506020613bfe86828701613997565b9250506040613c0f86828701613997565b9150509250925092565b600060208284031215613c2f57613c2e613913565b5b6000613c3d84828501613b71565b91505092915050565b60008060408385031215613c5d57613c5c613913565b5b6000613c6b85828601613961565b9250506020613c7c85828601613961565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ccd57607f821691505b602082108103613ce057613cdf613c86565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d1c60208361386c565b9150613d2782613ce6565b602082019050919050565b60006020820190508181036000830152613d4b81613d0f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d8c82613976565b9150613d9783613976565b9250828202613da581613976565b91508282048414831517613dbc57613dbb613d52565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613dfd82613976565b9150613e0883613976565b925082613e1857613e17613dc3565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000613e7f602f8361386c565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613f1160288361386c565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b6000613f5282613976565b9150613f5d83613976565b9250828201905080821115613f7557613f74613d52565b5b92915050565b600081519050613f8a81613980565b92915050565b600060208284031215613fa657613fa5613913565b5b6000613fb484828501613f7b565b91505092915050565b6000604082019050613fd26000830185613af9565b613fdf6020830184613a4f565b9392505050565b600081519050613ff581613b5a565b92915050565b60006020828403121561401157614010613913565b5b600061401f84828501613fe6565b91505092915050565b600081905092915050565b50565b6000614043600083614028565b915061404e82614033565b600082019050919050565b600061406482614036565b9150819050919050565b7f4275792066656573206d757374206265203c3d2031352e000000000000000000600082015250565b60006140a460178361386c565b91506140af8261406e565b602082019050919050565b600060208201905081810360008301526140d381614097565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061413660258361386c565b9150614141826140da565b604082019050919050565b6000602082019050818103600083015261416581614129565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b60006141a2601a8361386c565b91506141ad8261416c565b602082019050919050565b600060208201905081810360008301526141d181614195565b9050919050565b7f53656c6c2066656573206d757374206265203c3d2031352e0000000000000000600082015250565b600061420e60188361386c565b9150614219826141d8565b602082019050919050565b6000602082019050818103600083015261423d81614201565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f312e302500000000000000000000000000000000000000000000000000000000602082015250565b60006142a060248361386c565b91506142ab82614244565b604082019050919050565b600060208201905081810360008301526142cf81614293565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061433260358361386c565b915061433d826142d6565b604082019050919050565b6000602082019050818103600083015261436181614325565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006143c460348361386c565b91506143cf82614368565b604082019050919050565b600060208201905081810360008301526143f3816143b7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061445660268361386c565b9150614461826143fa565b604082019050919050565b6000602082019050818103600083015261448581614449565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006144e860248361386c565b91506144f38261448c565b604082019050919050565b60006020820190508181036000830152614517816144db565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061457a60228361386c565b91506145858261451e565b604082019050919050565b600060208201905081810360008301526145a98161456d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061460c60258361386c565b9150614617826145b0565b604082019050919050565b6000602082019050818103600083015261463b816145ff565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061469e60238361386c565b91506146a982614642565b604082019050919050565b600060208201905081810360008301526146cd81614691565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061470a60168361386c565b9150614715826146d4565b602082019050919050565b60006020820190508181036000830152614739816146fd565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061479c60358361386c565b91506147a782614740565b604082019050919050565b600060208201905081810360008301526147cb8161478f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061480860138361386c565b9150614813826147d2565b602082019050919050565b60006020820190508181036000830152614837816147fb565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061489a60368361386c565b91506148a58261483e565b604082019050919050565b600060208201905081810360008301526148c98161488d565b9050919050565b60006148db82613976565b91506148e683613976565b92508282039050818111156148fe576148fd613d52565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061496060268361386c565b915061496b82614904565b604082019050919050565b6000602082019050818103600083015261498f81614953565b905091905056fea2646970667358221220340af71920c0a2794df73814167066f0f0b09c1d284751bd8202af4f85562af264736f6c63430008120033
Deployed Bytecode
0x6080604052600436106103395760003560e01c80637cb332bb116101ab578063c0246668116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610c43578063f637434214610c6c578063f8b45b0514610c97578063fde83a3414610cc257610340565b8063dd62ed3e14610bb0578063e2f4560514610bed578063f11a24d314610c1857610340565b8063c8c8ebe4116100d1578063c8c8ebe414610af2578063d257b34f14610b1d578063d729715f14610b5a578063d85ba06314610b8557610340565b8063c024666814610a77578063c17b5b8c14610aa0578063c18bc19514610ac957610340565b80639c2e4ac611610164578063adee28ff1161013e578063adee28ff146109bd578063b62496f5146109e6578063bbc0c74214610a23578063bc205ad314610a4e57610340565b80639c2e4ac614610918578063a457c2d714610943578063a9059cbb1461098057610340565b80637cb332bb1461081e5780638095d564146108475780638da5cb5b14610870578063924de9b71461089b57806395d89b41146108c45780639a7a23d6146108ef57610340565b8063395093511161028557806370a08231116102235780637571336a116101fd5780637571336a1461078a57806377980cbd146107b3578063782c4e99146107ca5780637ca8448a146107f557610340565b806370a082311461070b578063715018a614610748578063751039fc1461075f57610340565b80634fbee1931161025f5780634fbee1931461064d578063599270441461068a5780636a486a8e146106b55780636ddd1713146106e057610340565b806339509351146105a85780634a62bb65146105e55780634e29e5231461061057610340565b806319eab042116102f257806323b872dd116102cc57806323b872dd146104ea57806324b9f3c11461052757806327c8f83514610552578063313ce5671461057d57610340565b806319eab0421461046b5780631a8145bb14610496578063203e727e146104c157610340565b806306fdde0314610345578063095ea7b3146103705780630e922ca7146103ad57806310d5de53146103d8578063156c2f351461041557806318160ddd1461044057610340565b3661034057005b600080fd5b34801561035157600080fd5b5061035a610ced565b60405161036791906138f1565b60405180910390f35b34801561037c57600080fd5b50610397600480360381019061039291906139ac565b610d7f565b6040516103a49190613a07565b60405180910390f35b3480156103b957600080fd5b506103c2610d9d565b6040516103cf9190613a07565b60405180910390f35b3480156103e457600080fd5b506103ff60048036038101906103fa9190613a22565b610db0565b60405161040c9190613a07565b60405180910390f35b34801561042157600080fd5b5061042a610dd0565b6040516104379190613a5e565b60405180910390f35b34801561044c57600080fd5b50610455610dd6565b6040516104629190613a5e565b60405180910390f35b34801561047757600080fd5b50610480610de0565b60405161048d9190613a5e565b60405180910390f35b3480156104a257600080fd5b506104ab610de6565b6040516104b89190613a5e565b60405180910390f35b3480156104cd57600080fd5b506104e860048036038101906104e39190613a79565b610dec565b005b3480156104f657600080fd5b50610511600480360381019061050c9190613aa6565b610efb565b60405161051e9190613a07565b60405180910390f35b34801561053357600080fd5b5061053c610ff3565b6040516105499190613a5e565b60405180910390f35b34801561055e57600080fd5b50610567610ff9565b6040516105749190613b08565b60405180910390f35b34801561058957600080fd5b50610592610fff565b60405161059f9190613b3f565b60405180910390f35b3480156105b457600080fd5b506105cf60048036038101906105ca91906139ac565b611008565b6040516105dc9190613a07565b60405180910390f35b3480156105f157600080fd5b506105fa6110b4565b6040516106079190613a07565b60405180910390f35b34801561061c57600080fd5b5061063760048036038101906106329190613a22565b6110c7565b6040516106449190613a07565b60405180910390f35b34801561065957600080fd5b50610674600480360381019061066f9190613a22565b6110e7565b6040516106819190613a07565b60405180910390f35b34801561069657600080fd5b5061069f61113d565b6040516106ac9190613b08565b60405180910390f35b3480156106c157600080fd5b506106ca611163565b6040516106d79190613a5e565b60405180910390f35b3480156106ec57600080fd5b506106f5611169565b6040516107029190613a07565b60405180910390f35b34801561071757600080fd5b50610732600480360381019061072d9190613a22565b61117c565b60405161073f9190613a5e565b60405180910390f35b34801561075457600080fd5b5061075d6111c4565b005b34801561076b57600080fd5b5061077461124c565b6040516107819190613a07565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac9190613b86565b6112ec565b005b3480156107bf57600080fd5b506107c86113c3565b005b3480156107d657600080fd5b506107df611586565b6040516107ec9190613b08565b60405180910390f35b34801561080157600080fd5b5061081c60048036038101906108179190613a22565b6115ac565b005b34801561082a57600080fd5b5061084560048036038101906108409190613a22565b6116a2565b005b34801561085357600080fd5b5061086e60048036038101906108699190613bc6565b6117de565b005b34801561087c57600080fd5b506108856118dd565b6040516108929190613b08565b60405180910390f35b3480156108a757600080fd5b506108c260048036038101906108bd9190613c19565b611907565b005b3480156108d057600080fd5b506108d96119a0565b6040516108e691906138f1565b60405180910390f35b3480156108fb57600080fd5b5061091660048036038101906109119190613b86565b611a32565b005b34801561092457600080fd5b5061092d611abc565b60405161093a9190613a5e565b60405180910390f35b34801561094f57600080fd5b5061096a600480360381019061096591906139ac565b611ac2565b6040516109779190613a07565b60405180910390f35b34801561098c57600080fd5b506109a760048036038101906109a291906139ac565b611bad565b6040516109b49190613a07565b60405180910390f35b3480156109c957600080fd5b506109e460048036038101906109df9190613a22565b611bcb565b005b3480156109f257600080fd5b50610a0d6004803603810190610a089190613a22565b611d07565b604051610a1a9190613a07565b60405180910390f35b348015610a2f57600080fd5b50610a38611d27565b604051610a459190613a07565b60405180910390f35b348015610a5a57600080fd5b50610a756004803603810190610a709190613c46565b611d3a565b005b348015610a8357600080fd5b50610a9e6004803603810190610a999190613b86565b611f27565b005b348015610aac57600080fd5b50610ac76004803603810190610ac29190613bc6565b61204c565b005b348015610ad557600080fd5b50610af06004803603810190610aeb9190613a79565b61214b565b005b348015610afe57600080fd5b50610b0761225a565b604051610b149190613a5e565b60405180910390f35b348015610b2957600080fd5b50610b446004803603810190610b3f9190613a79565b612260565b604051610b519190613a07565b60405180910390f35b348015610b6657600080fd5b50610b6f6123b5565b604051610b7c9190613a5e565b60405180910390f35b348015610b9157600080fd5b50610b9a6123bb565b604051610ba79190613a5e565b60405180910390f35b348015610bbc57600080fd5b50610bd76004803603810190610bd29190613c46565b6123c1565b604051610be49190613a5e565b60405180910390f35b348015610bf957600080fd5b50610c02612448565b604051610c0f9190613a5e565b60405180910390f35b348015610c2457600080fd5b50610c2d61244e565b604051610c3a9190613a5e565b60405180910390f35b348015610c4f57600080fd5b50610c6a6004803603810190610c659190613a22565b612454565b005b348015610c7857600080fd5b50610c8161254b565b604051610c8e9190613a5e565b60405180910390f35b348015610ca357600080fd5b50610cac612551565b604051610cb99190613a5e565b60405180910390f35b348015610cce57600080fd5b50610cd7612557565b604051610ce49190613a5e565b60405180910390f35b606060038054610cfc90613cb5565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2890613cb5565b8015610d755780601f10610d4a57610100808354040283529160200191610d75565b820191906000526020600020905b815481529060010190602001808311610d5857829003601f168201915b5050505050905090565b6000610d93610d8c61255d565b8484612565565b6001905092915050565b601a60009054906101000a900460ff1681565b60186020528060005260406000206000915054906101000a900460ff1681565b600d5481565b6000600254905090565b60115481565b60155481565b610df461255d565b73ffffffffffffffffffffffffffffffffffffffff16610e126118dd565b73ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f90613d32565b60405180910390fd5b670de0b6b3a76400006103e86005610e7e610dd6565b610e889190613d81565b610e929190613df2565b610e9c9190613df2565b811015610ede576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed590613e95565b60405180910390fd5b670de0b6b3a764000081610ef29190613d81565b60088190555050565b6000610f0884848461272e565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f5361255d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90613f27565b60405180910390fd5b610fe785610fdf61255d565b858403612565565b60019150509392505050565b60145481565b61dead81565b60006012905090565b60006110aa61101561255d565b84846001600061102361255d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546110a59190613f47565b612565565b6001905092915050565b600b60009054906101000a900460ff1681565b601b6020528060005260406000206000915054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111cc61255d565b73ffffffffffffffffffffffffffffffffffffffff166111ea6118dd565b73ffffffffffffffffffffffffffffffffffffffff1614611240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123790613d32565b60405180910390fd5b61124a600061321f565b565b600061125661255d565b73ffffffffffffffffffffffffffffffffffffffff166112746118dd565b73ffffffffffffffffffffffffffffffffffffffff16146112ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c190613d32565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6112f461255d565b73ffffffffffffffffffffffffffffffffffffffff166113126118dd565b73ffffffffffffffffffffffffffffffffffffffff1614611368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135f90613d32565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6113cb61255d565b73ffffffffffffffffffffffffffffffffffffffff166113e96118dd565b73ffffffffffffffffffffffffffffffffffffffff161461143f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143690613d32565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161147a9190613b08565b602060405180830381865afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb9190613f90565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016114f8929190613fbd565b6020604051808303816000875af1158015611517573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153b9190613ffb565b503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611582573d6000803e3d6000fd5b5050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6115b461255d565b73ffffffffffffffffffffffffffffffffffffffff166115d26118dd565b73ffffffffffffffffffffffffffffffffffffffff1614611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90613d32565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff164760405161164e90614059565b60006040518083038185875af1925050503d806000811461168b576040519150601f19603f3d011682016040523d82523d6000602084013e611690565b606091505b505090508061169e57600080fd5b5050565b6116aa61255d565b73ffffffffffffffffffffffffffffffffffffffff166116c86118dd565b73ffffffffffffffffffffffffffffffffffffffff161461171e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171590613d32565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8aa0f85050aca99be43beb823e0457e77966b3baf697a289b03681978f96166860405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117e661255d565b73ffffffffffffffffffffffffffffffffffffffff166118046118dd565b73ffffffffffffffffffffffffffffffffffffffff161461185a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185190613d32565b60405180910390fd5b82600d8190555081600e8190555080600f81905550600f54600e54600d546118829190613f47565b61188c9190613f47565b600c81905550600f600c5411156118d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cf906140ba565b60405180910390fd5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61190f61255d565b73ffffffffffffffffffffffffffffffffffffffff1661192d6118dd565b73ffffffffffffffffffffffffffffffffffffffff1614611983576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197a90613d32565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546119af90613cb5565b80601f01602080910402602001604051908101604052809291908181526020018280546119db90613cb5565b8015611a285780601f106119fd57610100808354040283529160200191611a28565b820191906000526020600020905b815481529060010190602001808311611a0b57829003601f168201915b5050505050905090565b611a3a61255d565b73ffffffffffffffffffffffffffffffffffffffff16611a586118dd565b73ffffffffffffffffffffffffffffffffffffffff1614611aae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa590613d32565b60405180910390fd5b611ab882826132e5565b5050565b600f5481565b60008060016000611ad161255d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611b8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b859061414c565b60405180910390fd5b611ba2611b9961255d565b85858403612565565b600191505092915050565b6000611bc1611bba61255d565b848461272e565b6001905092915050565b611bd361255d565b73ffffffffffffffffffffffffffffffffffffffff16611bf16118dd565b73ffffffffffffffffffffffffffffffffffffffff1614611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e90613d32565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc9f2d63eee8632b33d7a7db5252eb29036e81ee4fbe29260febe0c49ffb8a7bb60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60196020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611d4261255d565b73ffffffffffffffffffffffffffffffffffffffff16611d606118dd565b73ffffffffffffffffffffffffffffffffffffffff1614611db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dad90613d32565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1c906141b8565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611e609190613b08565b602060405180830381865afa158015611e7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea19190613f90565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611ede929190613fbd565b6020604051808303816000875af1158015611efd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f219190613ffb565b50505050565b611f2f61255d565b73ffffffffffffffffffffffffffffffffffffffff16611f4d6118dd565b73ffffffffffffffffffffffffffffffffffffffff1614611fa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9a90613d32565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516120409190613a07565b60405180910390a25050565b61205461255d565b73ffffffffffffffffffffffffffffffffffffffff166120726118dd565b73ffffffffffffffffffffffffffffffffffffffff16146120c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bf90613d32565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546120f09190613f47565b6120fa9190613f47565b601081905550600f6010541115612146576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213d90614224565b60405180910390fd5b505050565b61215361255d565b73ffffffffffffffffffffffffffffffffffffffff166121716118dd565b73ffffffffffffffffffffffffffffffffffffffff16146121c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121be90613d32565b60405180910390fd5b670de0b6b3a76400006103e8600a6121dd610dd6565b6121e79190613d81565b6121f19190613df2565b6121fb9190613df2565b81101561223d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612234906142b6565b60405180910390fd5b670de0b6b3a7640000816122519190613d81565b600a8190555050565b60085481565b600061226a61255d565b73ffffffffffffffffffffffffffffffffffffffff166122886118dd565b73ffffffffffffffffffffffffffffffffffffffff16146122de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d590613d32565b60405180910390fd5b620186a060016122ec610dd6565b6122f69190613d81565b6123009190613df2565b821015612342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161233990614348565b60405180910390fd5b6103e8600561234f610dd6565b6123599190613d81565b6123639190613df2565b8211156123a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239c906143da565b60405180910390fd5b8160098190555060019050919050565b60135481565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b600e5481565b61245c61255d565b73ffffffffffffffffffffffffffffffffffffffff1661247a6118dd565b73ffffffffffffffffffffffffffffffffffffffff16146124d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c790613d32565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361253f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125369061446c565b60405180910390fd5b6125488161321f565b50565b60125481565b600a5481565b60165481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125cb906144fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263a90614590565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516127219190613a5e565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361279d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161279490614622565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361280c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612803906146b4565b60405180910390fd5b600081036128255761282083836000613386565b61321a565b600b60009054906101000a900460ff1615612d20576128426118dd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156128b057506128806118dd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128e95750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612923575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561293c5750600560149054906101000a900460ff16155b15612d1f57600b60019054906101000a900460ff16612a3657601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806129f65750601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612a35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2c90614720565b60405180910390fd5b5b601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ad95750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b8057600854811115612b23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b1a906147b2565b60405180910390fd5b600a54612b2f8361117c565b82612b3a9190613f47565b1115612b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b729061481e565b60405180910390fd5b612d1e565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612c235750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c7257600854811115612c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c64906148b0565b60405180910390fd5b612d1d565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612d1c57600a54612ccf8361117c565b82612cda9190613f47565b1115612d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d129061481e565b60405180910390fd5b5b5b5b5b5b6000612d2b3061117c565b905060006009548210159050808015612d505750600b60029054906101000a900460ff165b8015612d695750600560149054906101000a900460ff16155b8015612dbf5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e155750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612e6b5750601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612eaf576001600560146101000a81548160ff021916908315150217905550612e93613605565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f655750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f6f57600090505b6000811561320a57601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612fd257506000601054115b1561309f57612fff6064612ff16010548861381590919063ffffffff16565b61382b90919063ffffffff16565b9050601054601254826130129190613d81565b61301c9190613df2565b6015600082825461302d9190613f47565b92505081905550601054601354826130459190613d81565b61304f9190613df2565b601660008282546130609190613f47565b92505081905550601054601154826130789190613d81565b6130829190613df2565b601460008282546130939190613f47565b925050819055506131c4565b601960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130fa57506000600c54115b156131c3576131276064613119600c548861381590919063ffffffff16565b61382b90919063ffffffff16565b9050600c54600e548261313a9190613d81565b6131449190613df2565b601560008282546131559190613f47565b92505081905550600c54600f548261316d9190613d81565b6131779190613df2565b601660008282546131889190613f47565b92505081905550600c54600d54826131a09190613d81565b6131aa9190613df2565b601460008282546131bb9190613f47565b925050819055505b5b60008111156131fb576131fa87600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613386565b5b808561320791906148d0565b94505b613215878787613386565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036133f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ec90614622565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345b906146b4565b60405180910390fd5b61346f838383613841565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156134f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ec90614976565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546135889190613f47565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516135ec9190613a5e565b60405180910390a36135ff848484613846565b50505050565b60006136103061117c565b905060006016546014546015546136279190613f47565b6136319190613f47565b90506000808314806136435750600082145b1561365057505050613813565b601460095461365f9190613d81565b8311156136785760146009546136759190613d81565b92505b60004790506000613692824761384b90919063ffffffff16565b905060006136d660026015546136a89190613df2565b866136b391906148d0565b6136c86016548561381590919063ffffffff16565b61382b90919063ffffffff16565b9050600060158190555060006014819055506000601681905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161373690614059565b60006040518083038185875af1925050503d8060008114613773576040519150601f19603f3d011682016040523d82523d6000602084013e613778565b606091505b505080945050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16476040516137c490614059565b60006040518083038185875af1925050503d8060008114613801576040519150601f19603f3d011682016040523d82523d6000602084013e613806565b606091505b5050809450505050505050505b565b600081836138239190613d81565b905092915050565b600081836138399190613df2565b905092915050565b505050565b505050565b6000818361385991906148d0565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561389b578082015181840152602081019050613880565b60008484015250505050565b6000601f19601f8301169050919050565b60006138c382613861565b6138cd818561386c565b93506138dd81856020860161387d565b6138e6816138a7565b840191505092915050565b6000602082019050818103600083015261390b81846138b8565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061394382613918565b9050919050565b61395381613938565b811461395e57600080fd5b50565b6000813590506139708161394a565b92915050565b6000819050919050565b61398981613976565b811461399457600080fd5b50565b6000813590506139a681613980565b92915050565b600080604083850312156139c3576139c2613913565b5b60006139d185828601613961565b92505060206139e285828601613997565b9150509250929050565b60008115159050919050565b613a01816139ec565b82525050565b6000602082019050613a1c60008301846139f8565b92915050565b600060208284031215613a3857613a37613913565b5b6000613a4684828501613961565b91505092915050565b613a5881613976565b82525050565b6000602082019050613a736000830184613a4f565b92915050565b600060208284031215613a8f57613a8e613913565b5b6000613a9d84828501613997565b91505092915050565b600080600060608486031215613abf57613abe613913565b5b6000613acd86828701613961565b9350506020613ade86828701613961565b9250506040613aef86828701613997565b9150509250925092565b613b0281613938565b82525050565b6000602082019050613b1d6000830184613af9565b92915050565b600060ff82169050919050565b613b3981613b23565b82525050565b6000602082019050613b546000830184613b30565b92915050565b613b63816139ec565b8114613b6e57600080fd5b50565b600081359050613b8081613b5a565b92915050565b60008060408385031215613b9d57613b9c613913565b5b6000613bab85828601613961565b9250506020613bbc85828601613b71565b9150509250929050565b600080600060608486031215613bdf57613bde613913565b5b6000613bed86828701613997565b9350506020613bfe86828701613997565b9250506040613c0f86828701613997565b9150509250925092565b600060208284031215613c2f57613c2e613913565b5b6000613c3d84828501613b71565b91505092915050565b60008060408385031215613c5d57613c5c613913565b5b6000613c6b85828601613961565b9250506020613c7c85828601613961565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ccd57607f821691505b602082108103613ce057613cdf613c86565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613d1c60208361386c565b9150613d2782613ce6565b602082019050919050565b60006020820190508181036000830152613d4b81613d0f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d8c82613976565b9150613d9783613976565b9250828202613da581613976565b91508282048414831517613dbc57613dbb613d52565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613dfd82613976565b9150613e0883613976565b925082613e1857613e17613dc3565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000613e7f602f8361386c565b9150613e8a82613e23565b604082019050919050565b60006020820190508181036000830152613eae81613e72565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000613f1160288361386c565b9150613f1c82613eb5565b604082019050919050565b60006020820190508181036000830152613f4081613f04565b9050919050565b6000613f5282613976565b9150613f5d83613976565b9250828201905080821115613f7557613f74613d52565b5b92915050565b600081519050613f8a81613980565b92915050565b600060208284031215613fa657613fa5613913565b5b6000613fb484828501613f7b565b91505092915050565b6000604082019050613fd26000830185613af9565b613fdf6020830184613a4f565b9392505050565b600081519050613ff581613b5a565b92915050565b60006020828403121561401157614010613913565b5b600061401f84828501613fe6565b91505092915050565b600081905092915050565b50565b6000614043600083614028565b915061404e82614033565b600082019050919050565b600061406482614036565b9150819050919050565b7f4275792066656573206d757374206265203c3d2031352e000000000000000000600082015250565b60006140a460178361386c565b91506140af8261406e565b602082019050919050565b600060208201905081810360008301526140d381614097565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061413660258361386c565b9150614141826140da565b604082019050919050565b6000602082019050818103600083015261416581614129565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f742062652030000000000000600082015250565b60006141a2601a8361386c565b91506141ad8261416c565b602082019050919050565b600060208201905081810360008301526141d181614195565b9050919050565b7f53656c6c2066656573206d757374206265203c3d2031352e0000000000000000600082015250565b600061420e60188361386c565b9150614219826141d8565b602082019050919050565b6000602082019050818103600083015261423d81614201565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f312e302500000000000000000000000000000000000000000000000000000000602082015250565b60006142a060248361386c565b91506142ab82614244565b604082019050919050565b600060208201905081810360008301526142cf81614293565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061433260358361386c565b915061433d826142d6565b604082019050919050565b6000602082019050818103600083015261436181614325565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006143c460348361386c565b91506143cf82614368565b604082019050919050565b600060208201905081810360008301526143f3816143b7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061445660268361386c565b9150614461826143fa565b604082019050919050565b6000602082019050818103600083015261448581614449565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006144e860248361386c565b91506144f38261448c565b604082019050919050565b60006020820190508181036000830152614517816144db565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061457a60228361386c565b91506145858261451e565b604082019050919050565b600060208201905081810360008301526145a98161456d565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061460c60258361386c565b9150614617826145b0565b604082019050919050565b6000602082019050818103600083015261463b816145ff565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061469e60238361386c565b91506146a982614642565b604082019050919050565b600060208201905081810360008301526146cd81614691565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b600061470a60168361386c565b9150614715826146d4565b602082019050919050565b60006020820190508181036000830152614739816146fd565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061479c60358361386c565b91506147a782614740565b604082019050919050565b600060208201905081810360008301526147cb8161478f565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061480860138361386c565b9150614813826147d2565b602082019050919050565b60006020820190508181036000830152614837816147fb565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061489a60368361386c565b91506148a58261483e565b604082019050919050565b600060208201905081810360008301526148c98161488d565b9050919050565b60006148db82613976565b91506148e683613976565b92508282039050818111156148fe576148fd613d52565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061496060268361386c565b915061496b82614904565b604082019050919050565b6000602082019050818103600083015261498f81614953565b905091905056fea2646970667358221220340af71920c0a2794df73814167066f0f0b09c1d284751bd8202af4f85562af264736f6c63430008120033
Deployed Bytecode Sourcemap
25272:13153:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7726:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9893:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26639:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26352:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25844:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8846:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25986:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26135:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29876:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10544:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26096:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25355:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8688:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11445:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25632:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26682:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32561:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25483:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25951:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25711:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9017:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1405:103;;;;;;;;;;;;;:::i;:::-;;29180:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30424:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37667:253;;;;;;;;;;;;;:::i;:::-;;25447:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38224:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32392:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30795:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;754:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30687:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7945:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31805:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25917:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12163:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9357:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32183:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26573:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25672:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37928:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31615:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31200:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30159:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25517:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29371:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26061:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25810:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9595:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25559:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25880:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1663:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26023:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25599:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26175:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7726:100;7780:13;7813:5;7806:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7726:100;:::o;9893:169::-;9976:4;9993:39;10002:12;:10;:12::i;:::-;10016:7;10025:6;9993:8;:39::i;:::-;10050:4;10043:11;;9893:169;;;;:::o;26639:36::-;;;;;;;;;;;;;:::o;26352:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;25844:29::-;;;;:::o;8846:108::-;8907:7;8934:12;;8927:19;;8846:108;:::o;25986:30::-;;;;:::o;26135:33::-;;;;:::o;29876:275::-;985:12;:10;:12::i;:::-;974:23;;:7;:5;:7::i;:::-;:23;;;966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30013:4:::1;30005;30000:1;29984:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29983:26;;;;:::i;:::-;29982:35;;;;:::i;:::-;29972:6;:45;;29950:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;30136:6;30126;:17;;;;:::i;:::-;30103:20;:40;;;;29876:275:::0;:::o;10544:492::-;10684:4;10701:36;10711:6;10719:9;10730:6;10701:9;:36::i;:::-;10750:24;10777:11;:19;10789:6;10777:19;;;;;;;;;;;;;;;:33;10797:12;:10;:12::i;:::-;10777:33;;;;;;;;;;;;;;;;10750:60;;10849:6;10829:16;:26;;10821:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;10936:57;10945:6;10953:12;:10;:12::i;:::-;10986:6;10967:16;:25;10936:8;:57::i;:::-;11024:4;11017:11;;;10544:492;;;;;:::o;26096:32::-;;;;:::o;25355:53::-;25401:6;25355:53;:::o;8688:93::-;8746:5;8771:2;8764:9;;8688:93;:::o;11445:215::-;11533:4;11550:80;11559:12;:10;:12::i;:::-;11573:7;11619:10;11582:11;:25;11594:12;:10;:12::i;:::-;11582:25;;;;;;;;;;;;;;;:34;11608:7;11582:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;11550:8;:80::i;:::-;11648:4;11641:11;;11445:215;;;;:::o;25632:33::-;;;;;;;;;;;;;:::o;26682:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;32561:126::-;32627:4;32651:19;:28;32671:7;32651:28;;;;;;;;;;;;;;;;;;;;;;;;;32644:35;;32561:126;;;:::o;25483:25::-;;;;;;;;;;;;;:::o;25951:28::-;;;;:::o;25711:30::-;;;;;;;;;;;;;:::o;9017:127::-;9091:7;9118:9;:18;9128:7;9118:18;;;;;;;;;;;;;;;;9111:25;;9017:127;;;:::o;1405:103::-;985:12;:10;:12::i;:::-;974:23;;:7;:5;:7::i;:::-;:23;;;966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1470:30:::1;1497:1;1470:18;:30::i;:::-;1405:103::o:0;29180:121::-;29232:4;985:12;:10;:12::i;:::-;974:23;;:7;:5;:7::i;:::-;:23;;;966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29266:5:::1;29249:14;;:22;;;;;;;;;;;;;;;;;;29289:4;29282:11;;29180:121:::0;:::o;30424:167::-;985:12;:10;:12::i;:::-;974:23;;:7;:5;:7::i;:::-;:23;;;966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30579:4:::1;30537:31;:39;30569:6;30537:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30424:167:::0;;:::o;37667:253::-;985:12;:10;:12::i;:::-;974:23;;:7;:5;:7::i;:::-;:23;;;966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37724:15:::1;37757:4;37742:31;;;37782:4;37742:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37724:64;;37814:4;37799:30;;;37830:10;37842:7;37799:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37869:10;37861:28;;:51;37890:21;37861:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37713:207;37667:253::o:0;25447:29::-;;;;;;;;;;;;;:::o;38224:196::-;985:12;:10;:12::i;:::-;974:23;;:7;:5;:7::i;:::-;:23;;;966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38297:12:::1;38315:6;:11;;38348:21;38315:70;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38296:89;;;38404:7;38396:16;;;::::0;::::1;;38285:135;38224:196:::0;:::o;32392:161::-;985:12;:10;:12::i;:::-;974:23;;:7;:5;:7::i;:::-;:23;;;966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32501:10:::1;;;;;;;;;;;32472:40;;32490:9;32472:40;;;;;;;;;;;;32536:9;32523:10;;:22;;;;;;;;;;;;;;;;;;32392:161:::0;:::o;30795:397::-;985:12;:10;:12::i;:::-;974:23;;:7;:5;:7::i;:::-;:23;;;966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30962:12:::1;30945:14;:29;;;;31003:13;30985:15;:31;;;;31040:8;31027:10;:21;;;;31109:10;;31091:15;;31074:14;;:32;;;;:::i;:::-;:45;;;;:::i;:::-;31059:12;:60;;;;31154:2;31138:12;;:18;;31130:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;30795:397:::0;;;:::o;754:87::-;800:7;827:6;;;;;;;;;;;820:13;;754:87;:::o;30687:100::-;985:12;:10;:12::i;:::-;974:23;;:7;:5;:7::i;:::-;:23;;;966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30772:7:::1;30758:11;;:21;;;;;;;;;;;;;;;;;;30687:100:::0;:::o;7945:104::-;8001:13;8034:7;8027:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7945:104;:::o;31805:174::-;985:12;:10;:12::i;:::-;974:23;;:7;:5;:7::i;:::-;:23;;;966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31930:41:::1;31959:4;31965:5;31930:28;:41::i;:::-;31805:174:::0;;:::o;25917:25::-;;;;:::o;12163:413::-;12256:4;12273:24;12300:11;:25;12312:12;:10;:12::i;:::-;12300:25;;;;;;;;;;;;;;;:34;12326:7;12300:34;;;;;;;;;;;;;;;;12273:61;;12373:15;12353:16;:35;;12345:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;12466:67;12475:12;:10;:12::i;:::-;12489:7;12517:15;12498:16;:34;12466:8;:67::i;:::-;12564:4;12557:11;;;12163:413;;;;:::o;9357:175::-;9443:4;9460:42;9470:12;:10;:12::i;:::-;9484:9;9495:6;9460:9;:42::i;:::-;9520:4;9513:11;;9357:175;;;;:::o;32183:201::-;985:12;:10;:12::i;:::-;974:23;;:7;:5;:7::i;:::-;:23;;;966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32316:14:::1;;;;;;;;;;;32275:56;;32297:17;32275:56;;;;;;;;;;;;32359:17;32342:14;;:34;;;;;;;;;;;;;;;;;;32183:201:::0;:::o;26573:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;25672:32::-;;;;;;;;;;;;;:::o;37928:288::-;985:12;:10;:12::i;:::-;974:23;;:7;:5;:7::i;:::-;:23;;;966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38041:1:::1;38023:20;;:6;:20;;::::0;38015:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38085:24;38119:6;38112:24;;;38145:4;38112:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38085:66;;38169:6;38162:23;;;38186:3;38191:16;38162:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;38004:212;37928:288:::0;;:::o;31615:182::-;985:12;:10;:12::i;:::-;974:23;;:7;:5;:7::i;:::-;:23;;;966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31731:8:::1;31700:19;:28;31720:7;31700:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31771:7;31755:34;;;31780:8;31755:34;;;;;;:::i;:::-;;;;;;;;31615:182:::0;;:::o;31200:407::-;985:12;:10;:12::i;:::-;974:23;;:7;:5;:7::i;:::-;:23;;;966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31369:12:::1;31351:15;:30;;;;31411:13;31392:16;:32;;;;31449:8;31435:11;:22;;;;31521:11;;31502:16;;31484:15;;:34;;;;:::i;:::-;:48;;;;:::i;:::-;31468:13;:64;;;;31568:2;31551:13;;:19;;31543:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;31200:407:::0;;;:::o;30159:257::-;985:12;:10;:12::i;:::-;974:23;;:7;:5;:7::i;:::-;:23;;;966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30300:4:::1;30292;30286:2;30270:13;:11;:13::i;:::-;:18;;;;:::i;:::-;30269:27;;;;:::i;:::-;30268:36;;;;:::i;:::-;30258:6;:46;;30236:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;30401:6;30391;:17;;;;:::i;:::-;30379:9;:29;;;;30159:257:::0;:::o;25517:35::-;;;;:::o;29371:497::-;29479:4;985:12;:10;:12::i;:::-;974:23;;:7;:5;:7::i;:::-;:23;;;966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29558:6:::1;29553:1;29537:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29536:28;;;;:::i;:::-;29523:9;:41;;29501:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;29713:4;29708:1;29692:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29691:26;;;;:::i;:::-;29678:9;:39;;29656:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;29829:9;29808:18;:30;;;;29856:4;29849:11;;29371:497:::0;;;:::o;26061:26::-;;;;:::o;25810:27::-;;;;:::o;9595:151::-;9684:7;9711:11;:18;9723:5;9711:18;;;;;;;;;;;;;;;:27;9730:7;9711:27;;;;;;;;;;;;;;;;9704:34;;9595:151;;;;:::o;25559:33::-;;;;:::o;25880:30::-;;;;:::o;1663:201::-;985:12;:10;:12::i;:::-;974:23;;:7;:5;:7::i;:::-;:23;;;966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1772:1:::1;1752:22;;:8;:22;;::::0;1744:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1828:28;1847:8;1828:18;:28::i;:::-;1663:201:::0;:::o;26023:31::-;;;;:::o;25599:24::-;;;;:::o;26175:28::-;;;;:::o;128:98::-;181:7;208:10;201:17;;128:98;:::o;15847:380::-;16000:1;15983:19;;:5;:19;;;15975:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16081:1;16062:21;;:7;:21;;;16054:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16165:6;16135:11;:18;16147:5;16135:18;;;;;;;;;;;;;;;:27;16154:7;16135:27;;;;;;;;;;;;;;;:36;;;;16203:7;16187:32;;16196:5;16187:32;;;16212:6;16187:32;;;;;;:::i;:::-;;;;;;;;15847:380;;;:::o;32699:3936::-;32847:1;32831:18;;:4;:18;;;32823:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32924:1;32910:16;;:2;:16;;;32902:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33004:1;32994:6;:11;32990:93;;33022:28;33038:4;33044:2;33048:1;33022:15;:28::i;:::-;33065:7;;32990:93;33099:14;;;;;;;;;;;33095:1694;;;33160:7;:5;:7::i;:::-;33152:15;;:4;:15;;;;:49;;;;;33194:7;:5;:7::i;:::-;33188:13;;:2;:13;;;;33152:49;:86;;;;;33236:1;33222:16;;:2;:16;;;;33152:86;:128;;;;;33273:6;33259:21;;:2;:21;;;;33152:128;:158;;;;;33302:8;;;;;;;;;;;33301:9;33152:158;33130:1648;;;33350:13;;;;;;;;;;;33345:223;;33422:19;:25;33442:4;33422:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33451:19;:23;33471:2;33451:23;;;;;;;;;;;;;;;;;;;;;;;;;33422:52;33388:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;33345:223;33642:25;:31;33668:4;33642:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;33699:31;:35;33731:2;33699:35;;;;;;;;;;;;;;;;;;;;;;;;;33698:36;33642:92;33616:1147;;;33821:20;;33811:6;:30;;33777:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;34029:9;;34012:13;34022:2;34012:9;:13::i;:::-;34003:6;:22;;;;:::i;:::-;:35;;33969:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33616:1147;;;34207:25;:29;34233:2;34207:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;34262:31;:37;34294:4;34262:37;;;;;;;;;;;;;;;;;;;;;;;;;34261:38;34207:92;34181:582;;;34386:20;;34376:6;:30;;34342:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;34181:582;;;34543:31;:35;34575:2;34543:35;;;;;;;;;;;;;;;;;;;;;;;;;34538:225;;34663:9;;34646:13;34656:2;34646:9;:13::i;:::-;34637:6;:22;;;;:::i;:::-;:35;;34603:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;34538:225;34181:582;33616:1147;33130:1648;33095:1694;34801:28;34832:24;34850:4;34832:9;:24::i;:::-;34801:55;;34869:12;34908:18;;34884:20;:42;;34869:57;;34957:7;:35;;;;;34981:11;;;;;;;;;;;34957:35;:61;;;;;35010:8;;;;;;;;;;;35009:9;34957:61;:110;;;;;35036:25;:31;35062:4;35036:31;;;;;;;;;;;;;;;;;;;;;;;;;35035:32;34957:110;:153;;;;;35085:19;:25;35105:4;35085:25;;;;;;;;;;;;;;;;;;;;;;;;;35084:26;34957:153;:194;;;;;35128:19;:23;35148:2;35128:23;;;;;;;;;;;;;;;;;;;;;;;;;35127:24;34957:194;34939:326;;;35189:4;35178:8;;:15;;;;;;;;;;;;;;;;;;35210:10;:8;:10::i;:::-;35248:5;35237:8;;:16;;;;;;;;;;;;;;;;;;34939:326;35277:12;35293:8;;;;;;;;;;;35292:9;35277:24;;35403:19;:25;35423:4;35403:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35432:19;:23;35452:2;35432:23;;;;;;;;;;;;;;;;;;;;;;;;;35403:52;35399:100;;;35482:5;35472:15;;35399:100;35511:12;35616:7;35612:970;;;35668:25;:29;35694:2;35668:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;35717:1;35701:13;;:17;35668:50;35664:768;;;35746:34;35776:3;35746:25;35757:13;;35746:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;35739:41;;35849:13;;35829:16;;35822:4;:23;;;;:::i;:::-;35821:41;;;;:::i;:::-;35799:18;;:63;;;;;;;:::i;:::-;;;;;;;;35921:13;;35906:11;;35899:4;:18;;;;:::i;:::-;35898:36;;;;:::i;:::-;35881:13;;:53;;;;;;;:::i;:::-;;;;;;;;36001:13;;35982:15;;35975:4;:22;;;;:::i;:::-;35974:40;;;;:::i;:::-;35953:17;;:61;;;;;;;:::i;:::-;;;;;;;;35664:768;;;36076:25;:31;36102:4;36076:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;36126:1;36111:12;;:16;36076:51;36072:360;;;36155:33;36184:3;36155:24;36166:12;;36155:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;36148:40;;36256:12;;36237:15;;36230:4;:22;;;;:::i;:::-;36229:39;;;;:::i;:::-;36207:18;;:61;;;;;;;:::i;:::-;;;;;;;;36326:12;;36312:10;;36305:4;:17;;;;:::i;:::-;36304:34;;;;:::i;:::-;36287:13;;:51;;;;;;;:::i;:::-;;;;;;;;36404:12;;36386:14;;36379:4;:21;;;;:::i;:::-;36378:38;;;;:::i;:::-;36357:17;;:59;;;;;;;:::i;:::-;;;;;;;;36072:360;35664:768;36459:1;36452:4;:8;36448:92;;;36481:43;36497:4;36503:14;;;;;;;;;;;36519:4;36481:15;:43::i;:::-;36448:92;36566:4;36556:14;;;;;:::i;:::-;;;35612:970;36594:33;36610:4;36616:2;36620:6;36594:15;:33::i;:::-;32812:3823;;;;32699:3936;;;;:::o;2024:191::-;2098:16;2117:6;;;;;;;;;;;2098:25;;2143:8;2134:6;;:17;;;;;;;;;;;;;;;;;;2198:8;2167:40;;2188:8;2167:40;;;;;;;;;;;;2087:128;2024:191;:::o;31987:188::-;32104:5;32070:25;:31;32096:4;32070:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32161:5;32127:40;;32155:4;32127:40;;;;;;;;;;;;31987:188;;:::o;13066:733::-;13224:1;13206:20;;:6;:20;;;13198:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13308:1;13287:23;;:9;:23;;;13279:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13363:47;13384:6;13392:9;13403:6;13363:20;:47::i;:::-;13423:21;13447:9;:17;13457:6;13447:17;;;;;;;;;;;;;;;;13423:41;;13500:6;13483:13;:23;;13475:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;13621:6;13605:13;:22;13585:9;:17;13595:6;13585:17;;;;;;;;;;;;;;;:42;;;;13673:6;13649:9;:20;13659:9;13649:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;13714:9;13697:35;;13706:6;13697:35;;;13725:6;13697:35;;;;;;:::i;:::-;;;;;;;;13745:46;13765:6;13773:9;13784:6;13745:19;:46::i;:::-;13187:612;13066:733;;;:::o;36651:1008::-;36690:23;36716:24;36734:4;36716:9;:24::i;:::-;36690:50;;36751:25;36846:13;;36813:17;;36779:18;;:51;;;;:::i;:::-;:80;;;;:::i;:::-;36751:108;;36870:12;36918:1;36899:15;:20;:46;;;;36944:1;36923:17;:22;36899:46;36895:85;;;36962:7;;;;;36895:85;37035:2;37014:18;;:23;;;;:::i;:::-;36996:15;:41;36992:115;;;37093:2;37072:18;;:23;;;;:::i;:::-;37054:41;;36992:115;37121:25;37149:21;37121:49;;37192:18;37213:44;37239:17;37213:21;:25;;:44;;;;:::i;:::-;37192:65;;37279:18;37300:79;37376:1;37355:18;;:22;;;;:::i;:::-;37334:17;:44;;;;:::i;:::-;37300:29;37315:13;;37300:10;:14;;:29;;;;:::i;:::-;:33;;:79;;;;:::i;:::-;37279:100;;37423:1;37402:18;:22;;;;37455:1;37435:17;:21;;;;37483:1;37467:13;:17;;;;37519:10;;;;;;;;;;;37511:24;;37543:10;37511:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37497:61;;;;;37597:14;;;;;;;;;;;37589:28;;37625:21;37589:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37575:76;;;;;36679:980;;;;;;36651:1008;:::o;20979:98::-;21037:7;21068:1;21064;:5;;;;:::i;:::-;21057:12;;20979:98;;;;:::o;21378:::-;21436:7;21467:1;21463;:5;;;;:::i;:::-;21456:12;;21378:98;;;;:::o;16827:125::-;;;;:::o;17556:124::-;;;;:::o;20622:98::-;20680:7;20711:1;20707;:5;;;;:::i;:::-;20700:12;;20622:98;;;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:329::-;4192:6;4241:2;4229:9;4220:7;4216:23;4212:32;4209:119;;;4247:79;;:::i;:::-;4209:119;4367:1;4392:53;4437:7;4428:6;4417:9;4413:22;4392:53;:::i;:::-;4382:63;;4338:117;4133:329;;;;:::o;4468:619::-;4545:6;4553;4561;4610:2;4598:9;4589:7;4585:23;4581:32;4578:119;;;4616:79;;:::i;:::-;4578:119;4736:1;4761:53;4806:7;4797:6;4786:9;4782:22;4761:53;:::i;:::-;4751:63;;4707:117;4863:2;4889:53;4934:7;4925:6;4914:9;4910:22;4889:53;:::i;:::-;4879:63;;4834:118;4991:2;5017:53;5062:7;5053:6;5042:9;5038:22;5017:53;:::i;:::-;5007:63;;4962:118;4468:619;;;;;:::o;5093:118::-;5180:24;5198:5;5180:24;:::i;:::-;5175:3;5168:37;5093:118;;:::o;5217:222::-;5310:4;5348:2;5337:9;5333:18;5325:26;;5361:71;5429:1;5418:9;5414:17;5405:6;5361:71;:::i;:::-;5217:222;;;;:::o;5445:86::-;5480:7;5520:4;5513:5;5509:16;5498:27;;5445:86;;;:::o;5537:112::-;5620:22;5636:5;5620:22;:::i;:::-;5615:3;5608:35;5537:112;;:::o;5655:214::-;5744:4;5782:2;5771:9;5767:18;5759:26;;5795:67;5859:1;5848:9;5844:17;5835:6;5795:67;:::i;:::-;5655:214;;;;:::o;5875:116::-;5945:21;5960:5;5945:21;:::i;:::-;5938:5;5935:32;5925:60;;5981:1;5978;5971:12;5925:60;5875:116;:::o;5997:133::-;6040:5;6078:6;6065:20;6056:29;;6094:30;6118:5;6094:30;:::i;:::-;5997:133;;;;:::o;6136:468::-;6201:6;6209;6258:2;6246:9;6237:7;6233:23;6229:32;6226:119;;;6264:79;;:::i;:::-;6226:119;6384:1;6409:53;6454:7;6445:6;6434:9;6430:22;6409:53;:::i;:::-;6399:63;;6355:117;6511:2;6537:50;6579:7;6570:6;6559:9;6555:22;6537:50;:::i;:::-;6527:60;;6482:115;6136:468;;;;;:::o;6610:619::-;6687:6;6695;6703;6752:2;6740:9;6731:7;6727:23;6723:32;6720:119;;;6758:79;;:::i;:::-;6720:119;6878:1;6903:53;6948:7;6939:6;6928:9;6924:22;6903:53;:::i;:::-;6893:63;;6849:117;7005:2;7031:53;7076:7;7067:6;7056:9;7052:22;7031:53;:::i;:::-;7021:63;;6976:118;7133:2;7159:53;7204:7;7195:6;7184:9;7180:22;7159:53;:::i;:::-;7149:63;;7104:118;6610:619;;;;;:::o;7235:323::-;7291:6;7340:2;7328:9;7319:7;7315:23;7311:32;7308:119;;;7346:79;;:::i;:::-;7308:119;7466:1;7491:50;7533:7;7524:6;7513:9;7509:22;7491:50;:::i;:::-;7481:60;;7437:114;7235:323;;;;:::o;7564:474::-;7632:6;7640;7689:2;7677:9;7668:7;7664:23;7660:32;7657:119;;;7695:79;;:::i;:::-;7657:119;7815:1;7840:53;7885:7;7876:6;7865:9;7861:22;7840:53;:::i;:::-;7830:63;;7786:117;7942:2;7968:53;8013:7;8004:6;7993:9;7989:22;7968:53;:::i;:::-;7958:63;;7913:118;7564:474;;;;;:::o;8044:180::-;8092:77;8089:1;8082:88;8189:4;8186:1;8179:15;8213:4;8210:1;8203:15;8230:320;8274:6;8311:1;8305:4;8301:12;8291:22;;8358:1;8352:4;8348:12;8379:18;8369:81;;8435:4;8427:6;8423:17;8413:27;;8369:81;8497:2;8489:6;8486:14;8466:18;8463:38;8460:84;;8516:18;;:::i;:::-;8460:84;8281:269;8230:320;;;:::o;8556:182::-;8696:34;8692:1;8684:6;8680:14;8673:58;8556:182;:::o;8744:366::-;8886:3;8907:67;8971:2;8966:3;8907:67;:::i;:::-;8900:74;;8983:93;9072:3;8983:93;:::i;:::-;9101:2;9096:3;9092:12;9085:19;;8744:366;;;:::o;9116:419::-;9282:4;9320:2;9309:9;9305:18;9297:26;;9369:9;9363:4;9359:20;9355:1;9344:9;9340:17;9333:47;9397:131;9523:4;9397:131;:::i;:::-;9389:139;;9116:419;;;:::o;9541:180::-;9589:77;9586:1;9579:88;9686:4;9683:1;9676:15;9710:4;9707:1;9700:15;9727:410;9767:7;9790:20;9808:1;9790:20;:::i;:::-;9785:25;;9824:20;9842:1;9824:20;:::i;:::-;9819:25;;9879:1;9876;9872:9;9901:30;9919:11;9901:30;:::i;:::-;9890:41;;10080:1;10071:7;10067:15;10064:1;10061:22;10041:1;10034:9;10014:83;9991:139;;10110:18;;:::i;:::-;9991:139;9775:362;9727:410;;;;:::o;10143:180::-;10191:77;10188:1;10181:88;10288:4;10285:1;10278:15;10312:4;10309:1;10302:15;10329:185;10369:1;10386:20;10404:1;10386:20;:::i;:::-;10381:25;;10420:20;10438:1;10420:20;:::i;:::-;10415:25;;10459:1;10449:35;;10464:18;;:::i;:::-;10449:35;10506:1;10503;10499:9;10494:14;;10329:185;;;;:::o;10520:234::-;10660:34;10656:1;10648:6;10644:14;10637:58;10729:17;10724:2;10716:6;10712:15;10705:42;10520:234;:::o;10760:366::-;10902:3;10923:67;10987:2;10982:3;10923:67;:::i;:::-;10916:74;;10999:93;11088:3;10999:93;:::i;:::-;11117:2;11112:3;11108:12;11101:19;;10760:366;;;:::o;11132:419::-;11298:4;11336:2;11325:9;11321:18;11313:26;;11385:9;11379:4;11375:20;11371:1;11360:9;11356:17;11349:47;11413:131;11539:4;11413:131;:::i;:::-;11405:139;;11132:419;;;:::o;11557:227::-;11697:34;11693:1;11685:6;11681:14;11674:58;11766:10;11761:2;11753:6;11749:15;11742:35;11557:227;:::o;11790:366::-;11932:3;11953:67;12017:2;12012:3;11953:67;:::i;:::-;11946:74;;12029:93;12118:3;12029:93;:::i;:::-;12147:2;12142:3;12138:12;12131:19;;11790:366;;;:::o;12162:419::-;12328:4;12366:2;12355:9;12351:18;12343:26;;12415:9;12409:4;12405:20;12401:1;12390:9;12386:17;12379:47;12443:131;12569:4;12443:131;:::i;:::-;12435:139;;12162:419;;;:::o;12587:191::-;12627:3;12646:20;12664:1;12646:20;:::i;:::-;12641:25;;12680:20;12698:1;12680:20;:::i;:::-;12675:25;;12723:1;12720;12716:9;12709:16;;12744:3;12741:1;12738:10;12735:36;;;12751:18;;:::i;:::-;12735:36;12587:191;;;;:::o;12784:143::-;12841:5;12872:6;12866:13;12857:22;;12888:33;12915:5;12888:33;:::i;:::-;12784:143;;;;:::o;12933:351::-;13003:6;13052:2;13040:9;13031:7;13027:23;13023:32;13020:119;;;13058:79;;:::i;:::-;13020:119;13178:1;13203:64;13259:7;13250:6;13239:9;13235:22;13203:64;:::i;:::-;13193:74;;13149:128;12933:351;;;;:::o;13290:332::-;13411:4;13449:2;13438:9;13434:18;13426:26;;13462:71;13530:1;13519:9;13515:17;13506:6;13462:71;:::i;:::-;13543:72;13611:2;13600:9;13596:18;13587:6;13543:72;:::i;:::-;13290:332;;;;;:::o;13628:137::-;13682:5;13713:6;13707:13;13698:22;;13729:30;13753:5;13729:30;:::i;:::-;13628:137;;;;:::o;13771:345::-;13838:6;13887:2;13875:9;13866:7;13862:23;13858:32;13855:119;;;13893:79;;:::i;:::-;13855:119;14013:1;14038:61;14091:7;14082:6;14071:9;14067:22;14038:61;:::i;:::-;14028:71;;13984:125;13771:345;;;;:::o;14122:147::-;14223:11;14260:3;14245:18;;14122:147;;;;:::o;14275:114::-;;:::o;14395:398::-;14554:3;14575:83;14656:1;14651:3;14575:83;:::i;:::-;14568:90;;14667:93;14756:3;14667:93;:::i;:::-;14785:1;14780:3;14776:11;14769:18;;14395:398;;;:::o;14799:379::-;14983:3;15005:147;15148:3;15005:147;:::i;:::-;14998:154;;15169:3;15162:10;;14799:379;;;:::o;15184:173::-;15324:25;15320:1;15312:6;15308:14;15301:49;15184:173;:::o;15363:366::-;15505:3;15526:67;15590:2;15585:3;15526:67;:::i;:::-;15519:74;;15602:93;15691:3;15602:93;:::i;:::-;15720:2;15715:3;15711:12;15704:19;;15363:366;;;:::o;15735:419::-;15901:4;15939:2;15928:9;15924:18;15916:26;;15988:9;15982:4;15978:20;15974:1;15963:9;15959:17;15952:47;16016:131;16142:4;16016:131;:::i;:::-;16008:139;;15735:419;;;:::o;16160:224::-;16300:34;16296:1;16288:6;16284:14;16277:58;16369:7;16364:2;16356:6;16352:15;16345:32;16160:224;:::o;16390:366::-;16532:3;16553:67;16617:2;16612:3;16553:67;:::i;:::-;16546:74;;16629:93;16718:3;16629:93;:::i;:::-;16747:2;16742:3;16738:12;16731:19;;16390:366;;;:::o;16762:419::-;16928:4;16966:2;16955:9;16951:18;16943:26;;17015:9;17009:4;17005:20;17001:1;16990:9;16986:17;16979:47;17043:131;17169:4;17043:131;:::i;:::-;17035:139;;16762:419;;;:::o;17187:176::-;17327:28;17323:1;17315:6;17311:14;17304:52;17187:176;:::o;17369:366::-;17511:3;17532:67;17596:2;17591:3;17532:67;:::i;:::-;17525:74;;17608:93;17697:3;17608:93;:::i;:::-;17726:2;17721:3;17717:12;17710:19;;17369:366;;;:::o;17741:419::-;17907:4;17945:2;17934:9;17930:18;17922:26;;17994:9;17988:4;17984:20;17980:1;17969:9;17965:17;17958:47;18022:131;18148:4;18022:131;:::i;:::-;18014:139;;17741:419;;;:::o;18166:174::-;18306:26;18302:1;18294:6;18290:14;18283:50;18166:174;:::o;18346:366::-;18488:3;18509:67;18573:2;18568:3;18509:67;:::i;:::-;18502:74;;18585:93;18674:3;18585:93;:::i;:::-;18703:2;18698:3;18694:12;18687:19;;18346:366;;;:::o;18718:419::-;18884:4;18922:2;18911:9;18907:18;18899:26;;18971:9;18965:4;18961:20;18957:1;18946:9;18942:17;18935:47;18999:131;19125:4;18999:131;:::i;:::-;18991:139;;18718:419;;;:::o;19143:223::-;19283:34;19279:1;19271:6;19267:14;19260:58;19352:6;19347:2;19339:6;19335:15;19328:31;19143:223;:::o;19372:366::-;19514:3;19535:67;19599:2;19594:3;19535:67;:::i;:::-;19528:74;;19611:93;19700:3;19611:93;:::i;:::-;19729:2;19724:3;19720:12;19713:19;;19372:366;;;:::o;19744:419::-;19910:4;19948:2;19937:9;19933:18;19925:26;;19997:9;19991:4;19987:20;19983:1;19972:9;19968:17;19961:47;20025:131;20151:4;20025:131;:::i;:::-;20017:139;;19744:419;;;:::o;20169:240::-;20309:34;20305:1;20297:6;20293:14;20286:58;20378:23;20373:2;20365:6;20361:15;20354:48;20169:240;:::o;20415:366::-;20557:3;20578:67;20642:2;20637:3;20578:67;:::i;:::-;20571:74;;20654:93;20743:3;20654:93;:::i;:::-;20772:2;20767:3;20763:12;20756:19;;20415:366;;;:::o;20787:419::-;20953:4;20991:2;20980:9;20976:18;20968:26;;21040:9;21034:4;21030:20;21026:1;21015:9;21011:17;21004:47;21068:131;21194:4;21068:131;:::i;:::-;21060:139;;20787:419;;;:::o;21212:239::-;21352:34;21348:1;21340:6;21336:14;21329:58;21421:22;21416:2;21408:6;21404:15;21397:47;21212:239;:::o;21457:366::-;21599:3;21620:67;21684:2;21679:3;21620:67;:::i;:::-;21613:74;;21696:93;21785:3;21696:93;:::i;:::-;21814:2;21809:3;21805:12;21798:19;;21457:366;;;:::o;21829:419::-;21995:4;22033:2;22022:9;22018:18;22010:26;;22082:9;22076:4;22072:20;22068:1;22057:9;22053:17;22046:47;22110:131;22236:4;22110:131;:::i;:::-;22102:139;;21829:419;;;:::o;22254:225::-;22394:34;22390:1;22382:6;22378:14;22371:58;22463:8;22458:2;22450:6;22446:15;22439:33;22254:225;:::o;22485:366::-;22627:3;22648:67;22712:2;22707:3;22648:67;:::i;:::-;22641:74;;22724:93;22813:3;22724:93;:::i;:::-;22842:2;22837:3;22833:12;22826:19;;22485:366;;;:::o;22857:419::-;23023:4;23061:2;23050:9;23046:18;23038:26;;23110:9;23104:4;23100:20;23096:1;23085:9;23081:17;23074:47;23138:131;23264:4;23138:131;:::i;:::-;23130:139;;22857:419;;;:::o;23282:223::-;23422:34;23418:1;23410:6;23406:14;23399:58;23491:6;23486:2;23478:6;23474:15;23467:31;23282:223;:::o;23511:366::-;23653:3;23674:67;23738:2;23733:3;23674:67;:::i;:::-;23667:74;;23750:93;23839:3;23750:93;:::i;:::-;23868:2;23863:3;23859:12;23852:19;;23511:366;;;:::o;23883:419::-;24049:4;24087:2;24076:9;24072:18;24064:26;;24136:9;24130:4;24126:20;24122:1;24111:9;24107:17;24100:47;24164:131;24290:4;24164:131;:::i;:::-;24156:139;;23883:419;;;:::o;24308:221::-;24448:34;24444:1;24436:6;24432:14;24425:58;24517:4;24512:2;24504:6;24500:15;24493:29;24308:221;:::o;24535:366::-;24677:3;24698:67;24762:2;24757:3;24698:67;:::i;:::-;24691:74;;24774:93;24863:3;24774:93;:::i;:::-;24892:2;24887:3;24883:12;24876:19;;24535:366;;;:::o;24907:419::-;25073:4;25111:2;25100:9;25096:18;25088:26;;25160:9;25154:4;25150:20;25146:1;25135:9;25131:17;25124:47;25188:131;25314:4;25188:131;:::i;:::-;25180:139;;24907:419;;;:::o;25332:224::-;25472:34;25468:1;25460:6;25456:14;25449:58;25541:7;25536:2;25528:6;25524:15;25517:32;25332:224;:::o;25562:366::-;25704:3;25725:67;25789:2;25784:3;25725:67;:::i;:::-;25718:74;;25801:93;25890:3;25801:93;:::i;:::-;25919:2;25914:3;25910:12;25903:19;;25562:366;;;:::o;25934:419::-;26100:4;26138:2;26127:9;26123:18;26115:26;;26187:9;26181:4;26177:20;26173:1;26162:9;26158:17;26151:47;26215:131;26341:4;26215:131;:::i;:::-;26207:139;;25934:419;;;:::o;26359:222::-;26499:34;26495:1;26487:6;26483:14;26476:58;26568:5;26563:2;26555:6;26551:15;26544:30;26359:222;:::o;26587:366::-;26729:3;26750:67;26814:2;26809:3;26750:67;:::i;:::-;26743:74;;26826:93;26915:3;26826:93;:::i;:::-;26944:2;26939:3;26935:12;26928:19;;26587:366;;;:::o;26959:419::-;27125:4;27163:2;27152:9;27148:18;27140:26;;27212:9;27206:4;27202:20;27198:1;27187:9;27183:17;27176:47;27240:131;27366:4;27240:131;:::i;:::-;27232:139;;26959:419;;;:::o;27384:172::-;27524:24;27520:1;27512:6;27508:14;27501:48;27384:172;:::o;27562:366::-;27704:3;27725:67;27789:2;27784:3;27725:67;:::i;:::-;27718:74;;27801:93;27890:3;27801:93;:::i;:::-;27919:2;27914:3;27910:12;27903:19;;27562:366;;;:::o;27934:419::-;28100:4;28138:2;28127:9;28123:18;28115:26;;28187:9;28181:4;28177:20;28173:1;28162:9;28158:17;28151:47;28215:131;28341:4;28215:131;:::i;:::-;28207:139;;27934:419;;;:::o;28359:240::-;28499:34;28495:1;28487:6;28483:14;28476:58;28568:23;28563:2;28555:6;28551:15;28544:48;28359:240;:::o;28605:366::-;28747:3;28768:67;28832:2;28827:3;28768:67;:::i;:::-;28761:74;;28844:93;28933:3;28844:93;:::i;:::-;28962:2;28957:3;28953:12;28946:19;;28605:366;;;:::o;28977:419::-;29143:4;29181:2;29170:9;29166:18;29158:26;;29230:9;29224:4;29220:20;29216:1;29205:9;29201:17;29194:47;29258:131;29384:4;29258:131;:::i;:::-;29250:139;;28977:419;;;:::o;29402:169::-;29542:21;29538:1;29530:6;29526:14;29519:45;29402:169;:::o;29577:366::-;29719:3;29740:67;29804:2;29799:3;29740:67;:::i;:::-;29733:74;;29816:93;29905:3;29816:93;:::i;:::-;29934:2;29929:3;29925:12;29918:19;;29577:366;;;:::o;29949:419::-;30115:4;30153:2;30142:9;30138:18;30130:26;;30202:9;30196:4;30192:20;30188:1;30177:9;30173:17;30166:47;30230:131;30356:4;30230:131;:::i;:::-;30222:139;;29949:419;;;:::o;30374:241::-;30514:34;30510:1;30502:6;30498:14;30491:58;30583:24;30578:2;30570:6;30566:15;30559:49;30374:241;:::o;30621:366::-;30763:3;30784:67;30848:2;30843:3;30784:67;:::i;:::-;30777:74;;30860:93;30949:3;30860:93;:::i;:::-;30978:2;30973:3;30969:12;30962:19;;30621:366;;;:::o;30993:419::-;31159:4;31197:2;31186:9;31182:18;31174:26;;31246:9;31240:4;31236:20;31232:1;31221:9;31217:17;31210:47;31274:131;31400:4;31274:131;:::i;:::-;31266:139;;30993:419;;;:::o;31418:194::-;31458:4;31478:20;31496:1;31478:20;:::i;:::-;31473:25;;31512:20;31530:1;31512:20;:::i;:::-;31507:25;;31556:1;31553;31549:9;31541:17;;31580:1;31574:4;31571:11;31568:37;;;31585:18;;:::i;:::-;31568:37;31418:194;;;;:::o;31618:225::-;31758:34;31754:1;31746:6;31742:14;31735:58;31827:8;31822:2;31814:6;31810:15;31803:33;31618:225;:::o;31849:366::-;31991:3;32012:67;32076:2;32071:3;32012:67;:::i;:::-;32005:74;;32088:93;32177:3;32088:93;:::i;:::-;32206:2;32201:3;32197:12;32190:19;;31849:366;;;:::o;32221:419::-;32387:4;32425:2;32414:9;32410:18;32402:26;;32474:9;32468:4;32464:20;32460:1;32449:9;32445:17;32438:47;32502:131;32628:4;32502:131;:::i;:::-;32494:139;;32221:419;;;:::o
Swarm Source
ipfs://340af71920c0a2794df73814167066f0f0b09c1d284751bd8202af4f85562af2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ 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.