Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
1,000,000,000 BETS
Holders
7
Total Transfers
-
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Betted
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-08-12 */ // Sources flattened with hardhat v2.12.7 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { 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); } } // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev 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 `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, 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 `from` to `to` 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 from, address to, uint256 amount ) external returns (bool); } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity ^0.8.0; /** * @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); } // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol) pragma solidity ^0.8.0; /** * @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.openzeppelin.com/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: * * - `to` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address to, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _transfer(owner, to, 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}. * * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on * `transferFrom`. This is semantically equivalent to an infinite approval. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { address owner = _msgSender(); _approve(owner, 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}. * * NOTE: Does not update the allowance if the current allowance * is the maximum `uint256`. * * Requirements: * * - `from` and `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. * - the caller must have allowance for ``from``'s tokens of at least * `amount`. */ function transferFrom( address from, address to, uint256 amount ) public virtual override returns (bool) { address spender = _msgSender(); _spendAllowance(from, spender, amount); _transfer(from, to, 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) { address owner = _msgSender(); _approve(owner, spender, allowance(owner, 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) { address owner = _msgSender(); uint256 currentAllowance = allowance(owner, spender); require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); unchecked { _approve(owner, spender, currentAllowance - subtractedValue); } return true; } /** * @dev Moves `amount` of tokens from `from` to `to`. * * 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: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `from` must have a balance of at least `amount`. */ function _transfer( address from, address to, uint256 amount ) internal virtual { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(from, to, amount); uint256 fromBalance = _balances[from]; require(fromBalance >= amount, "ERC20: transfer amount exceeds balance"); unchecked { _balances[from] = fromBalance - amount; // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by // decrementing then incrementing. _balances[to] += amount; } emit Transfer(from, to, amount); _afterTokenTransfer(from, to, 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; unchecked { // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above. _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; // Overflow not possible: amount <= accountBalance <= totalSupply. _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 Updates `owner` s allowance for `spender` based on spent `amount`. * * Does not update the allowance amount in case of infinite allowance. * Revert if not enough allowance is available. * * Might emit an {Approval} event. */ function _spendAllowance( address owner, address spender, uint256 amount ) internal virtual { uint256 currentAllowance = allowance(owner, spender); if (currentAllowance != type(uint256).max) { require(currentAllowance >= amount, "ERC20: insufficient allowance"); unchecked { _approve(owner, spender, currentAllowance - 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 {} } // File @uniswap/v2-periphery/contracts/interfaces/[email protected] pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File @uniswap/v2-periphery/contracts/interfaces/[email protected] pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File @uniswap/v2-core/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // File @uniswap/v2-core/contracts/interfaces/[email protected] pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // File contracts/TaxableToken.sol pragma solidity ^0.8.9; abstract contract TaxableToken is Ownable { event TaxEnabled(); event TaxDisabled(); event TaxRateUpdated(uint newMarketingTaxRate, uint newDevTaxRate); event MarketingAddressChanged(address marketingAddress); event DevAddressChanged(address devAddress); event ExcludedFromTaxStatusUpdated(address target, bool newStatus); event TradingPairStatusUpdated(address pair, bool newStatus); bool internal _isTaxEnabled; uint32 internal _balanceToSwapAt; uint8 internal _marketingTaxRate; uint8 internal _devTaxRate; uint8 internal _initialMarketingTaxRate; uint8 internal _initialDevTaxRate; address payable internal _marketingAddress; address payable internal _devAddress; mapping(address => bool) public _excludedFromTax; address internal _baseTradingPair; mapping(address => bool) public automatedMarketMakerPairs; constructor(bool isTaxEnabled_, uint8 marketingTaxRate_, uint8 devTaxRate_, address marketingAddress_, address devAddress_) { _isTaxEnabled = isTaxEnabled_; _balanceToSwapAt = 0; _marketingTaxRate = marketingTaxRate_; _initialMarketingTaxRate = _marketingTaxRate; _devTaxRate = devTaxRate_; _initialDevTaxRate = _devTaxRate; _marketingAddress = payable(marketingAddress_); _devAddress = payable(devAddress_); _excludedFromTax[_msgSender()] = true; _excludedFromTax[_marketingAddress] = true; _excludedFromTax[_devAddress] = true; _excludedFromTax[address(0)] = true; _excludedFromTax[address(this)] = true; } modifier whenTaxDisabled() { _requireTaxDisabled(); _; } modifier whenTaxEnabled() { _requireTaxEnabled(); _; } function enableTax() public onlyOwner whenTaxDisabled { _enableTax(); } function disableTax() public onlyOwner whenTaxEnabled { _disableTax(); } function isTaxEnabled() public view returns (bool) { return _isTaxEnabled; } function getTotalTaxRate() public view returns (uint) { return _marketingTaxRate + _devTaxRate; } function updateTaxRate(uint8 newMarketingTaxRate, uint8 newDevTaxRate) public onlyOwner { require(newMarketingTaxRate <= _initialMarketingTaxRate, "TaxableToken: Cannot increase marketing tax rate above initial rate."); require(newDevTaxRate <= _initialDevTaxRate, "TaxableToken: Cannot increase dev tax rate above initial rate."); require((newMarketingTaxRate + newDevTaxRate) > 0, "TaxableToken: Cannot reduce taxes to/below 0. Disable taxes instead."); _updateTaxRate(newMarketingTaxRate, newDevTaxRate); } function getMarketingAddress() public view returns (address) { return _marketingAddress; } function getDevAddress() public view returns (address) { return _devAddress; } function updateMarketingAddress(address newMarketingAddress) public onlyOwner { require(newMarketingAddress != address(0), "TaxableToken: Cannot set marketing address to 0"); require(newMarketingAddress != address(0xdead), "TaxableToken: Cannot set marketing address to dead address"); require(newMarketingAddress != _devAddress, "TaxableToken: Marketing and dev address cannot be the same"); _updateMarketingAddress(newMarketingAddress); } function updateDevAddress(address newDevAddress) public onlyOwner { require(newDevAddress != address(0), "TaxableToken: Cannot set dev address to 0"); require(newDevAddress != address(0xdead), "TaxableToken: Cannot set dev address to dead address"); require(newDevAddress != _marketingAddress, "TaxableToken: Marketing and dev address cannot be the same"); _updateDevAddress(newDevAddress); } function updateTradingPairStatus(address pair, bool status) public onlyOwner { require(pair != _baseTradingPair, "TaxableToken: Cannot change status of base trading pair"); _updateTradingPairStatus(pair, status); } function updateExcludedFromTax(address target, bool status) public onlyOwner { require(!automatedMarketMakerPairs[target], "TaxableToken: Cannot change excludedFromTax status of base trading pair"); _updateExcludedFromTaxStatus(target, status); } function isExcludedFromTax(address target) public view returns (bool) { return _excludedFromTax[target]; } function _requireTaxDisabled() internal view { require(!isTaxEnabled(), "TaxableToken: Tax must be disabled"); } function _requireTaxEnabled() internal view { require(isTaxEnabled(), "TaxableToken: Tax must be enabled"); } function _enableTax() internal whenTaxDisabled { _isTaxEnabled = true; emit TaxEnabled(); } function _disableTax() internal whenTaxEnabled { _isTaxEnabled = false; emit TaxDisabled(); } function _setSwapAtBalance(uint32 balanceToSwapAt) internal { require(balanceToSwapAt > 0, "TaxableToken: Balance to swap at must be more than zero"); _balanceToSwapAt = balanceToSwapAt; } function _isBalanceEnoughToSwap(uint contractBalance) internal view returns (bool) { return contractBalance > _balanceToSwapAt; } function _updateTaxRate(uint8 newMarketingTaxRate, uint8 newDevTaxRate) internal { _marketingTaxRate = newMarketingTaxRate; _devTaxRate = newDevTaxRate; emit TaxRateUpdated(_marketingTaxRate, _devTaxRate); } function _updateMarketingTaxRate(uint8 newMarketingTaxRate) internal { _marketingTaxRate = newMarketingTaxRate; emit TaxRateUpdated(_marketingTaxRate, _devTaxRate); } function _updateDevTaxRate(uint8 newDevTaxRate) internal { _devTaxRate = newDevTaxRate; emit TaxRateUpdated(_marketingTaxRate, _devTaxRate); } function _updateMarketingAddress(address newMarketingAddress) internal { _marketingAddress = payable(newMarketingAddress); emit MarketingAddressChanged(newMarketingAddress); } function _updateDevAddress(address newDevAddress) internal { _devAddress = payable(newDevAddress); emit DevAddressChanged(_devAddress); } function _updateExcludedFromTaxStatus(address target, bool newStatus) internal { _excludedFromTax[target] = newStatus; emit ExcludedFromTaxStatusUpdated(target, newStatus); } function _updateTradingPairStatus(address pair, bool newStatus) internal { automatedMarketMakerPairs[pair] = newStatus; emit TradingPairStatusUpdated(pair, newStatus); } function _getMarketingTaxFee(uint amount) internal view returns (uint) { if (isTaxEnabled()) { return (amount * _marketingTaxRate) / 1000; } return 0; } function _getDevTaxFee(uint amount) internal view returns (uint) { if (isTaxEnabled()) { return (amount * _devTaxRate) / 1000; } return 0; } function _getMarketingTaxSplit(uint tokensToSplit) internal view returns (uint) { uint taxSplitParts = getTotalTaxRate(); return (tokensToSplit * _marketingTaxRate) / taxSplitParts; } function _getDevTaxSplit(uint tokensToSplit) internal view returns (uint) { uint taxSplitParts = getTotalTaxRate(); return (tokensToSplit * _devTaxRate) / taxSplitParts; } function _sendEthToTaxRecipients() internal { uint contractBalance = address(this).balance; bool success; if (contractBalance > 0) { uint ethForMarketing = _getMarketingTaxSplit(contractBalance); uint ethForDev = contractBalance - ethForMarketing; _marketingAddress.transfer(ethForMarketing); _devAddress.transfer(ethForDev); (success, ) = address(_marketingAddress).call{value: ethForMarketing}(""); (success, ) = address(_devAddress).call{value: ethForDev}(""); } } } // File contracts/Betted.sol pragma solidity ^0.8.9; contract Betted is ERC20, TaxableToken { IUniswapV2Router02 private _uniswapV2Router; IUniswapV2Factory private _uniswapV2Factory; IUniswapV2Pair private immutable _uniswapV2WethPair; mapping(address => uint) private _lastTransactionBlockNumber; mapping(address => bool) private _blacklistedAddresses; mapping(address => bool) private _excludedFromBlacklisting; bool private _isTransferringTax; constructor() ERC20("Betted", "BETS") TaxableToken(true, 45, 5, 0x61E87D52d5a358eE83043a6d918A2E867e44bD2f, 0x5d7379995772b2eb7f617A524C49D170De4632DB) { _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); _uniswapV2Factory = IUniswapV2Factory(_uniswapV2Router.factory()); _uniswapV2WethPair = IUniswapV2Pair(_uniswapV2Factory.createPair(address(this), _uniswapV2Router.WETH())); _baseTradingPair = address(_uniswapV2WethPair); automatedMarketMakerPairs[_baseTradingPair] = true; _excludedFromBlacklisting[_msgSender()] = true; _excludedFromBlacklisting[_baseTradingPair] = true; _excludedFromBlacklisting[_marketingAddress] = true; _excludedFromBlacklisting[_devAddress] = true; _excludedFromBlacklisting[address(0)] = true; _excludedFromBlacklisting[address(this)] = true; _mint(_msgSender(), 1_000_000_000 * (10 ** decimals())); _setSwapAtBalance(uint32(500_000 * (10 ** decimals()))); } function isAddressBlacklistedFromBuying(address target) public view returns (bool) { return _blacklistedAddresses[target]; } function removeAddressFromBlacklist(address target) public onlyOwner { _removeAddressFromBlacklist(target); } function isAddressExcludedFromBlacklisting(address target) public view returns (bool) { return _excludedFromBlacklisting[target]; } function getLastTransactionBlockNumber(address target) public view returns (uint) { return _lastTransactionBlockNumber[target]; } function claimTaxes() public onlyOwner { _isTransferringTax = true; _swapAndClaimTaxes(); _isTransferringTax = false; } function _removeAddressFromBlacklist(address target) private onlyOwner { _blacklistedAddresses[target] = false; } function _transfer(address from, address to, uint256 amount) internal override { require(from != address(0), "ERC20: Cannot transfer from the zero address"); require(amount > 0, "ERC20: Must transfer more than zero"); if (!_isTransferringTax && _isBalanceEnoughToSwap(balanceOf(address(this))) && automatedMarketMakerPairs[to]) { _isTransferringTax = true; _swapAndClaimTaxes(); _isTransferringTax = false; } uint amountToTransfer = amount; if (!_isTransferringTax) { if (automatedMarketMakerPairs[from]) { require(!_blacklistedAddresses[to], "BETS: This address is blacklisted from buying. You can always sell any tokens you own."); if (!_excludedFromBlacklisting[to]) { if (_lastTransactionBlockNumber[to] == block.number) { _blacklistedAddresses[to] = true; } } _lastTransactionBlockNumber[to] = block.number; } if (automatedMarketMakerPairs[to]) { if (!_excludedFromBlacklisting[from]) { if (_lastTransactionBlockNumber[from] == block.number) { _blacklistedAddresses[from] = true; } } _lastTransactionBlockNumber[from] = block.number; } if (automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to]) { if (isTaxEnabled() && !_excludedFromTax[from] && !_excludedFromTax[to]) { uint marketingTaxFee = _getMarketingTaxFee(amountToTransfer); uint devTaxFee = _getDevTaxFee(amountToTransfer); amountToTransfer = amount - marketingTaxFee - devTaxFee; if ((marketingTaxFee + devTaxFee) > 0) { super._transfer(from, address(this), marketingTaxFee + devTaxFee); } } } } super._transfer(from, to, amountToTransfer); } function _swapAndClaimTaxes() private { uint tokensToSwap = balanceOf(address(this)); uint maxTokensToSwap = uint(_balanceToSwapAt) * 5; if (tokensToSwap > maxTokensToSwap) { tokensToSwap = maxTokensToSwap; } _swapTokensForEth(tokensToSwap); _sendEthToTaxRecipients(); } function _swapTokensForEth(uint256 amount) private { address[] memory path = new address[](2); path[0] = address(this); path[1] = _uniswapV2Router.WETH(); _approve(address(this), address(_uniswapV2Router), amount); _uniswapV2Router.swapExactTokensForETH(amount, 0, path, address(this), block.timestamp); } receive() external payable {} fallback() external payable {} }
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":false,"internalType":"address","name":"devAddress","type":"address"}],"name":"DevAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"target","type":"address"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"}],"name":"ExcludedFromTaxStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingAddress","type":"address"}],"name":"MarketingAddressChanged","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":[],"name":"TaxDisabled","type":"event"},{"anonymous":false,"inputs":[],"name":"TaxEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMarketingTaxRate","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDevTaxRate","type":"uint256"}],"name":"TaxRateUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"bool","name":"newStatus","type":"bool"}],"name":"TradingPairStatusUpdated","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_excludedFromTax","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":"claimTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getDevAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"getLastTransactionBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalTaxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"target","type":"address"}],"name":"isAddressBlacklistedFromBuying","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"isAddressExcludedFromBlacklisting","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"isExcludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTaxEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"target","type":"address"}],"name":"removeAddressFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"address","name":"newDevAddress","type":"address"}],"name":"updateDevAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updateExcludedFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingAddress","type":"address"}],"name":"updateMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"newMarketingTaxRate","type":"uint8"},{"internalType":"uint8","name":"newDevTaxRate","type":"uint8"}],"name":"updateTaxRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"updateTradingPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60a06040523480156200001157600080fd5b506001602d60057361e87d52d5a358ee83043a6d918a2e867e44bd2f735d7379995772b2eb7f617a524c49d170de4632db6040518060400160405280600681526020017f42657474656400000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f42455453000000000000000000000000000000000000000000000000000000008152508160039081620000bf919062000fed565b508060049081620000d1919062000fed565b505050620000f4620000e862000ab560201b60201c565b62000abd60201b60201c565b84600560146101000a81548160ff0219169083151502179055506000600560156101000a81548163ffffffff021916908363ffffffff16021790555083600560196101000a81548160ff021916908360ff160217905550600560199054906101000a900460ff166005601b6101000a81548160ff021916908360ff160217905550826005601a6101000a81548160ff021916908360ff1602179055506005601a9054906101000a900460ff166005601c6101000a81548160ff021916908360ff16021790555081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600860006200025262000ab560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050505050737a250d5630b4cf539739df2c5dacb4c659f2488d600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200050f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200053591906200113e565b600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000622573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200064891906200113e565b6040518363ffffffff1660e01b81526004016200066792919062001181565b6020604051808303816000875af115801562000687573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006ad91906200113e565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050608051600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600a6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000620007b362000ab560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000a7162000a3662000ab560201b60201c565b62000a4662000b8360201b60201c565b600a62000a5491906200133e565b633b9aca0062000a6591906200138f565b62000b8c60201b60201c565b62000aaf62000a8562000b8360201b60201c565b600a62000a9391906200133e565b6207a12062000aa391906200138f565b62000cf960201b60201c565b6200155e565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006012905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000bfe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bf5906200143b565b60405180910390fd5b62000c126000838362000d6960201b60201c565b806002600082825462000c2691906200145d565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000cd99190620014a9565b60405180910390a362000cf56000838362000d6e60201b60201c565b5050565b60008163ffffffff161162000d45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d3c906200153c565b60405180910390fd5b80600560156101000a81548163ffffffff021916908363ffffffff16021790555050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000df557607f821691505b60208210810362000e0b5762000e0a62000dad565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e757fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e36565b62000e81868362000e36565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ece62000ec862000ec28462000e99565b62000ea3565b62000e99565b9050919050565b6000819050919050565b62000eea8362000ead565b62000f0262000ef98262000ed5565b84845462000e43565b825550505050565b600090565b62000f1962000f0a565b62000f2681848462000edf565b505050565b5b8181101562000f4e5762000f4260008262000f0f565b60018101905062000f2c565b5050565b601f82111562000f9d5762000f678162000e11565b62000f728462000e26565b8101602085101562000f82578190505b62000f9a62000f918562000e26565b83018262000f2b565b50505b505050565b600082821c905092915050565b600062000fc26000198460080262000fa2565b1980831691505092915050565b600062000fdd838362000faf565b9150826002028217905092915050565b62000ff88262000d73565b67ffffffffffffffff81111562001014576200101362000d7e565b5b62001020825462000ddc565b6200102d82828562000f52565b600060209050601f83116001811462001065576000841562001050578287015190505b6200105c858262000fcf565b865550620010cc565b601f198416620010758662000e11565b60005b828110156200109f5784890151825560018201915060208501945060208101905062001078565b86831015620010bf5784890151620010bb601f89168262000faf565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200110682620010d9565b9050919050565b6200111881620010f9565b81146200112457600080fd5b50565b60008151905062001138816200110d565b92915050565b600060208284031215620011575762001156620010d4565b5b6000620011678482850162001127565b91505092915050565b6200117b81620010f9565b82525050565b600060408201905062001198600083018562001170565b620011a7602083018462001170565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200123c57808604811115620012145762001213620011ae565b5b6001851615620012245780820291505b80810290506200123485620011dd565b9450620011f4565b94509492505050565b6000826200125757600190506200132a565b816200126757600090506200132a565b81600181146200128057600281146200128b57620012c1565b60019150506200132a565b60ff841115620012a0576200129f620011ae565b5b8360020a915084821115620012ba57620012b9620011ae565b5b506200132a565b5060208310610133831016604e8410600b8410161715620012fb5782820a905083811115620012f557620012f4620011ae565b5b6200132a565b6200130a8484846001620011ea565b92509050818404811115620013245762001323620011ae565b5b81810290505b9392505050565b600060ff82169050919050565b60006200134b8262000e99565b9150620013588362001331565b9250620013877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001245565b905092915050565b60006200139c8262000e99565b9150620013a98362000e99565b9250828202620013b98162000e99565b91508282048414831517620013d357620013d2620011ae565b5b5092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001423601f83620013da565b91506200143082620013eb565b602082019050919050565b60006020820190508181036000830152620014568162001414565b9050919050565b60006200146a8262000e99565b9150620014778362000e99565b9250828201905080821115620014925762001491620011ae565b5b92915050565b620014a38162000e99565b82525050565b6000602082019050620014c0600083018462001498565b92915050565b7f54617861626c65546f6b656e3a2042616c616e636520746f207377617020617460008201527f206d757374206265206d6f7265207468616e207a65726f000000000000000000602082015250565b600062001524603783620013da565b91506200153182620014c6565b604082019050919050565b60006020820190508181036000830152620015578162001515565b9050919050565b60805161440d620015776000396000505061440d6000f3fe6080604052600436106101f25760003560e01c8063850337621161010d578063b374df5c116100a0578063dd62ed3e1161006f578063dd62ed3e1461072d578063e34d99bf1461076a578063e6c1909b14610795578063e7b25bf2146107c0578063f2fde38b146107e9576101f9565b8063b374df5c14610685578063b62496f51461069c578063cb4ca631146106d9578063ced695a414610716576101f9565b806395d89b41116100dc57806395d89b41146105b5578063a457c2d7146105e0578063a9059cbb1461061d578063ae6753fd1461065a576101f9565b806385033762146104f95780638da5cb5b146105225780639183faaa1461054d5780639332028c14610578576101f9565b806339509351116101855780635c896210116101545780635c8962101461043f57806370a082311461047c578063715018a6146104b95780637b9bae54146104d0576101f9565b806339509351146103855780634082671d146103c257806353eb3bcf146103eb5780635460d68414610402576101f9565b806323b872dd116101c157806323b872dd146102b757806329693fd8146102f4578063313ce5671461033157806335e82f3a1461035c576101f9565b806306fdde03146101fb578063095ea7b31461022657806318160ddd146102635780632369bf831461028e576101f9565b366101f957005b005b34801561020757600080fd5b50610210610812565b60405161021d9190612bfd565b60405180910390f35b34801561023257600080fd5b5061024d60048036038101906102489190612cc7565b6108a4565b60405161025a9190612d22565b60405180910390f35b34801561026f57600080fd5b506102786108c7565b6040516102859190612d4c565b60405180910390f35b34801561029a57600080fd5b506102b560048036038101906102b09190612d67565b6108d1565b005b3480156102c357600080fd5b506102de60048036038101906102d99190612d94565b610a54565b6040516102eb9190612d22565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190612d67565b610a83565b6040516103289190612d22565b60405180910390f35b34801561033d57600080fd5b50610346610ad9565b6040516103539190612e03565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190612d67565b610ae2565b005b34801561039157600080fd5b506103ac60048036038101906103a79190612cc7565b610af6565b6040516103b99190612d22565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e49190612e4a565b610b2d565b005b3480156103f757600080fd5b50610400610c44565b005b34801561040e57600080fd5b5061042960048036038101906104249190612d67565b610c5e565b6040516104369190612d22565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190612d67565b610c7e565b6040516104739190612d4c565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e9190612d67565b610cc7565b6040516104b09190612d4c565b60405180910390f35b3480156104c557600080fd5b506104ce610d0f565b005b3480156104dc57600080fd5b506104f760048036038101906104f29190612eb6565b610d23565b005b34801561050557600080fd5b50610520600480360381019061051b9190612d67565b610dc9565b005b34801561052e57600080fd5b50610537610f4c565b6040516105449190612f05565b60405180910390f35b34801561055957600080fd5b50610562610f76565b60405161056f9190612f05565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a9190612d67565b610fa0565b6040516105ac9190612d22565b60405180910390f35b3480156105c157600080fd5b506105ca610ff6565b6040516105d79190612bfd565b60405180910390f35b3480156105ec57600080fd5b5061060760048036038101906106029190612cc7565b611088565b6040516106149190612d22565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190612cc7565b6110ff565b6040516106519190612d22565b60405180910390f35b34801561066657600080fd5b5061066f611122565b60405161067c9190612d4c565b60405180910390f35b34801561069157600080fd5b5061069a611156565b005b3480156106a857600080fd5b506106c360048036038101906106be9190612d67565b61119e565b6040516106d09190612d22565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb9190612d67565b6111be565b60405161070d9190612d22565b60405180910390f35b34801561072257600080fd5b5061072b611214565b005b34801561073957600080fd5b50610754600480360381019061074f9190612f20565b61122e565b6040516107619190612d4c565b60405180910390f35b34801561077657600080fd5b5061077f6112b5565b60405161078c9190612f05565b60405180910390f35b3480156107a157600080fd5b506107aa6112df565b6040516107b79190612d22565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190612eb6565b6112f6565b005b3480156107f557600080fd5b50610810600480360381019061080b9190612d67565b611399565b005b60606003805461082190612f8f565b80601f016020809104026020016040519081016040528092919081815260200182805461084d90612f8f565b801561089a5780601f1061086f5761010080835404028352916020019161089a565b820191906000526020600020905b81548152906001019060200180831161087d57829003601f168201915b5050505050905090565b6000806108af61141c565b90506108bc818585611424565b600191505092915050565b6000600254905090565b6108d96115ed565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093f90613032565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af906130c4565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3f90613156565b60405180910390fd5b610a518161166b565b50565b600080610a5f61141c565b9050610a6c8582856116e6565b610a77858585611772565b60019150509392505050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006012905090565b610aea6115ed565b610af381611e70565b50565b600080610b0161141c565b9050610b22818585610b13858961122e565b610b1d91906131a5565b611424565b600191505092915050565b610b356115ed565b6005601b9054906101000a900460ff1660ff168260ff161115610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8490613271565b60405180910390fd5b6005601c9054906101000a900460ff1660ff168160ff161115610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc90613303565b60405180910390fd5b60008183610bf39190613323565b60ff1611610c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2d906133f0565b60405180910390fd5b610c408282611ed3565b5050565b610c4c6115ed565b610c54611f64565b610c5c611fae565b565b60086020528060005260406000206000915054906101000a900460ff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d176115ed565b610d216000611fff565b565b610d2b6115ed565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db290613482565b60405180910390fd5b610dc582826120c5565b5050565b610dd16115ed565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790613514565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea7906135a6565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3790613156565b60405180910390fd5b610f4981612159565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60606004805461100590612f8f565b80601f016020809104026020016040519081016040528092919081815260200182805461103190612f8f565b801561107e5780601f106110535761010080835404028352916020019161107e565b820191906000526020600020905b81548152906001019060200180831161106157829003601f168201915b5050505050905090565b60008061109361141c565b905060006110a1828661122e565b9050838110156110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90613638565b60405180910390fd5b6110f38286868403611424565b60019250505092915050565b60008061110a61141c565b9050611117818585611772565b600191505092915050565b60006005601a9054906101000a900460ff16600560199054906101000a900460ff1661114e9190613323565b60ff16905090565b61115e6115ed565b6001601060006101000a81548160ff0219169083151502179055506111816121f6565b6000601060006101000a81548160ff021916908315150217905550565b600a6020528060005260406000206000915054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61121c6115ed565b61122461224c565b61122c612295565b565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560149054906101000a900460ff16905090565b6112fe6115ed565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561138b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611382906136f0565b60405180910390fd5b61139582826122e6565b5050565b6113a16115ed565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140790613782565b60405180910390fd5b61141981611fff565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90613814565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f9906138a6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115e09190612d4c565b60405180910390a3505050565b6115f561141c565b73ffffffffffffffffffffffffffffffffffffffff16611613610f4c565b73ffffffffffffffffffffffffffffffffffffffff1614611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613912565b60405180910390fd5b565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f70f1e4f570b51e464910762fee3d96ad08b99a90ce9c27a6036b0f4627aeda2d816040516116db9190612f05565b60405180910390a150565b60006116f2848461122e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461176c578181101561175e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117559061397e565b60405180910390fd5b61176b8484848403611424565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890613a10565b60405180910390fd5b60008111611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b90613aa2565b60405180910390fd5b601060009054906101000a900460ff1615801561184e575061184d61184830610cc7565b61237a565b5b80156118a35750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156118e7576001601060006101000a81548160ff0219169083151502179055506118cb6121f6565b6000601060006101000a81548160ff0219169083151502179055505b6000819050601060009054906101000a900460ff16611e5f57600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b1557600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d690613b5a565b60405180910390fd5b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ad05743600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403611acf576001600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b43600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c9d57600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c585743600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403611c57576001600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b43600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d3e5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611e5e57611d4b6112df565b8015611da15750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611df75750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e5d576000611e078261239e565b90506000611e14836123e9565b9050808285611e239190613b7a565b611e2d9190613b7a565b925060008183611e3d91906131a5565b1115611e5a57611e5986308385611e5491906131a5565b612434565b5b50505b5b5b611e6a848483612434565b50505050565b611e786115ed565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b81600560196101000a81548160ff021916908360ff160217905550806005601a6101000a81548160ff021916908360ff1602179055507fa8ee157eb2a9aa895d74df4d2d3bc0ad165ff3162f8ec46a4ecf602dd5c48fda600560199054906101000a900460ff166005601a9054906101000a900460ff16604051611f58929190613be9565b60405180910390a15050565b611f6c6112df565b15611fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa390613c84565b60405180910390fd5b565b611fb6611f64565b6001600560146101000a81548160ff0219169083151502179055507fd2e80fb3f28dfb650beb9c059dadd2a8936a8bdc1abd1563608cd49227a0902160405160405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2df49817e5aafe4d3dd7d0c8192865b7034d8870ed49ac24a9520f3057bb5f24828260405161214d929190613ca4565b60405180910390a15050565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f292c0d8d8c63a0a0a42cc1103baf921b3f13ea455e3298dbcf67e3edba8a6a38600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516121eb9190613d22565b60405180910390a150565b600061220130610cc7565b9050600060058060159054906101000a900463ffffffff1663ffffffff166122299190613d3d565b905080821115612237578091505b612240826126aa565b612248612904565b5050565b6122546112df565b612293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228a90613df1565b60405180910390fd5b565b61229d61224c565b6000600560146101000a81548160ff0219169083151502179055507f7a14a3188411c2f406ce4721233750b4b11e612569f9fa80a35b1cb91bb2e49e60405160405180910390a1565b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff14bd650485d6a031eba0f22da79fbebf9dc98a771adcbde6b4abe2ba590afdb828260405161236e929190613ca4565b60405180910390a15050565b6000600560159054906101000a900463ffffffff1663ffffffff1682119050919050565b60006123a86112df565b156123df576103e8600560199054906101000a900460ff1660ff16836123ce9190613d3d565b6123d89190613e40565b90506123e4565b600090505b919050565b60006123f36112df565b1561242a576103e86005601a9054906101000a900460ff1660ff16836124199190613d3d565b6124239190613e40565b905061242f565b600090505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249a90613ee3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250990613f75565b60405180910390fd5b61251d838383612b25565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a90614007565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126919190612d4c565b60405180910390a36126a4848484612b2a565b50505050565b6000600267ffffffffffffffff8111156126c7576126c6614027565b5b6040519080825280602002602001820160405280156126f55781602001602082028036833780820191505090505b509050308160008151811061270d5761270c614056565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d8919061409a565b816001815181106127ec576127eb614056565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061285330600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611424565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe58360008430426040518663ffffffff1660e01b81526004016128b79594939291906141c0565b6000604051808303816000875af11580156128d6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906128ff9190614348565b505050565b6000479050600080821115612b2157600061291e83612b2f565b90506000818461292e9190613b7a565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612998573d6000803e3d6000fd5b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612a01573d6000803e3d6000fd5b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612a48906143c2565b60006040518083038185875af1925050503d8060008114612a85576040519150601f19603f3d011682016040523d82523d6000602084013e612a8a565b606091505b505080935050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612ad6906143c2565b60006040518083038185875af1925050503d8060008114612b13576040519150601f19603f3d011682016040523d82523d6000602084013e612b18565b606091505b50508093505050505b5050565b505050565b505050565b600080612b3a611122565b905080600560199054906101000a900460ff1660ff1684612b5b9190613d3d565b612b659190613e40565b915050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ba7578082015181840152602081019050612b8c565b60008484015250505050565b6000601f19601f8301169050919050565b6000612bcf82612b6d565b612bd98185612b78565b9350612be9818560208601612b89565b612bf281612bb3565b840191505092915050565b60006020820190508181036000830152612c178184612bc4565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c5e82612c33565b9050919050565b612c6e81612c53565b8114612c7957600080fd5b50565b600081359050612c8b81612c65565b92915050565b6000819050919050565b612ca481612c91565b8114612caf57600080fd5b50565b600081359050612cc181612c9b565b92915050565b60008060408385031215612cde57612cdd612c29565b5b6000612cec85828601612c7c565b9250506020612cfd85828601612cb2565b9150509250929050565b60008115159050919050565b612d1c81612d07565b82525050565b6000602082019050612d376000830184612d13565b92915050565b612d4681612c91565b82525050565b6000602082019050612d616000830184612d3d565b92915050565b600060208284031215612d7d57612d7c612c29565b5b6000612d8b84828501612c7c565b91505092915050565b600080600060608486031215612dad57612dac612c29565b5b6000612dbb86828701612c7c565b9350506020612dcc86828701612c7c565b9250506040612ddd86828701612cb2565b9150509250925092565b600060ff82169050919050565b612dfd81612de7565b82525050565b6000602082019050612e186000830184612df4565b92915050565b612e2781612de7565b8114612e3257600080fd5b50565b600081359050612e4481612e1e565b92915050565b60008060408385031215612e6157612e60612c29565b5b6000612e6f85828601612e35565b9250506020612e8085828601612e35565b9150509250929050565b612e9381612d07565b8114612e9e57600080fd5b50565b600081359050612eb081612e8a565b92915050565b60008060408385031215612ecd57612ecc612c29565b5b6000612edb85828601612c7c565b9250506020612eec85828601612ea1565b9150509250929050565b612eff81612c53565b82525050565b6000602082019050612f1a6000830184612ef6565b92915050565b60008060408385031215612f3757612f36612c29565b5b6000612f4585828601612c7c565b9250506020612f5685828601612c7c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fa757607f821691505b602082108103612fba57612fb9612f60565b5b50919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420736574206d61726b65746960008201527f6e67206164647265737320746f20300000000000000000000000000000000000602082015250565b600061301c602f83612b78565b915061302782612fc0565b604082019050919050565b6000602082019050818103600083015261304b8161300f565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420736574206d61726b65746960008201527f6e67206164647265737320746f20646561642061646472657373000000000000602082015250565b60006130ae603a83612b78565b91506130b982613052565b604082019050919050565b600060208201905081810360008301526130dd816130a1565b9050919050565b7f54617861626c65546f6b656e3a204d61726b6574696e6720616e64206465762060008201527f616464726573732063616e6e6f74206265207468652073616d65000000000000602082015250565b6000613140603a83612b78565b915061314b826130e4565b604082019050919050565b6000602082019050818103600083015261316f81613133565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131b082612c91565b91506131bb83612c91565b92508282019050808211156131d3576131d2613176565b5b92915050565b7f54617861626c65546f6b656e3a2043616e6e6f7420696e637265617365206d6160008201527f726b6574696e672074617820726174652061626f766520696e697469616c207260208201527f6174652e00000000000000000000000000000000000000000000000000000000604082015250565b600061325b604483612b78565b9150613266826131d9565b606082019050919050565b6000602082019050818103600083015261328a8161324e565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420696e63726561736520646560008201527f762074617820726174652061626f766520696e697469616c20726174652e0000602082015250565b60006132ed603e83612b78565b91506132f882613291565b604082019050919050565b6000602082019050818103600083015261331c816132e0565b9050919050565b600061332e82612de7565b915061333983612de7565b9250828201905060ff81111561335257613351613176565b5b92915050565b7f54617861626c65546f6b656e3a2043616e6e6f7420726564756365207461786560008201527f7320746f2f62656c6f7720302e2044697361626c6520746178657320696e737460208201527f6561642e00000000000000000000000000000000000000000000000000000000604082015250565b60006133da604483612b78565b91506133e582613358565b606082019050919050565b60006020820190508181036000830152613409816133cd565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f74206368616e6765207374617460008201527f7573206f6620626173652074726164696e672070616972000000000000000000602082015250565b600061346c603783612b78565b915061347782613410565b604082019050919050565b6000602082019050818103600083015261349b8161345f565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420736574206465762061646460008201527f7265737320746f20300000000000000000000000000000000000000000000000602082015250565b60006134fe602983612b78565b9150613509826134a2565b604082019050919050565b6000602082019050818103600083015261352d816134f1565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420736574206465762061646460008201527f7265737320746f20646561642061646472657373000000000000000000000000602082015250565b6000613590603483612b78565b915061359b82613534565b604082019050919050565b600060208201905081810360008301526135bf81613583565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613622602583612b78565b915061362d826135c6565b604082019050919050565b6000602082019050818103600083015261365181613615565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f74206368616e6765206578636c60008201527f7564656446726f6d54617820737461747573206f66206261736520747261646960208201527f6e67207061697200000000000000000000000000000000000000000000000000604082015250565b60006136da604783612b78565b91506136e582613658565b606082019050919050565b60006020820190508181036000830152613709816136cd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061376c602683612b78565b915061377782613710565b604082019050919050565b6000602082019050818103600083015261379b8161375f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006137fe602483612b78565b9150613809826137a2565b604082019050919050565b6000602082019050818103600083015261382d816137f1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613890602283612b78565b915061389b82613834565b604082019050919050565b600060208201905081810360008301526138bf81613883565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138fc602083612b78565b9150613907826138c6565b602082019050919050565b6000602082019050818103600083015261392b816138ef565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613968601d83612b78565b915061397382613932565b602082019050919050565b600060208201905081810360008301526139978161395b565b9050919050565b7f45524332303a2043616e6e6f74207472616e736665722066726f6d207468652060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b60006139fa602c83612b78565b9150613a058261399e565b604082019050919050565b60006020820190508181036000830152613a29816139ed565b9050919050565b7f45524332303a204d757374207472616e73666572206d6f7265207468616e207a60008201527f65726f0000000000000000000000000000000000000000000000000000000000602082015250565b6000613a8c602383612b78565b9150613a9782613a30565b604082019050919050565b60006020820190508181036000830152613abb81613a7f565b9050919050565b7f424554533a2054686973206164647265737320697320626c61636b6c6973746560008201527f642066726f6d20627579696e672e20596f752063616e20616c7761797320736560208201527f6c6c20616e7920746f6b656e7320796f75206f776e2e00000000000000000000604082015250565b6000613b44605683612b78565b9150613b4f82613ac2565b606082019050919050565b60006020820190508181036000830152613b7381613b37565b9050919050565b6000613b8582612c91565b9150613b9083612c91565b9250828203905081811115613ba857613ba7613176565b5b92915050565b6000819050919050565b6000613bd3613bce613bc984612de7565b613bae565b612c91565b9050919050565b613be381613bb8565b82525050565b6000604082019050613bfe6000830185613bda565b613c0b6020830184613bda565b9392505050565b7f54617861626c65546f6b656e3a20546178206d7573742062652064697361626c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c6e602283612b78565b9150613c7982613c12565b604082019050919050565b60006020820190508181036000830152613c9d81613c61565b9050919050565b6000604082019050613cb96000830185612ef6565b613cc66020830184612d13565b9392505050565b6000613ce8613ce3613cde84612c33565b613bae565b612c33565b9050919050565b6000613cfa82613ccd565b9050919050565b6000613d0c82613cef565b9050919050565b613d1c81613d01565b82525050565b6000602082019050613d376000830184613d13565b92915050565b6000613d4882612c91565b9150613d5383612c91565b9250828202613d6181612c91565b91508282048414831517613d7857613d77613176565b5b5092915050565b7f54617861626c65546f6b656e3a20546178206d75737420626520656e61626c6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ddb602183612b78565b9150613de682613d7f565b604082019050919050565b60006020820190508181036000830152613e0a81613dce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e4b82612c91565b9150613e5683612c91565b925082613e6657613e65613e11565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ecd602583612b78565b9150613ed882613e71565b604082019050919050565b60006020820190508181036000830152613efc81613ec0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f5f602383612b78565b9150613f6a82613f03565b604082019050919050565b60006020820190508181036000830152613f8e81613f52565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613ff1602683612b78565b9150613ffc82613f95565b604082019050919050565b6000602082019050818103600083015261402081613fe4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061409481612c65565b92915050565b6000602082840312156140b0576140af612c29565b5b60006140be84828501614085565b91505092915050565b6000819050919050565b60006140ec6140e76140e2846140c7565b613bae565b612c91565b9050919050565b6140fc816140d1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61413781612c53565b82525050565b6000614149838361412e565b60208301905092915050565b6000602082019050919050565b600061416d82614102565b614177818561410d565b93506141828361411e565b8060005b838110156141b357815161419a888261413d565b97506141a583614155565b925050600181019050614186565b5085935050505092915050565b600060a0820190506141d56000830188612d3d565b6141e260208301876140f3565b81810360408301526141f48186614162565b90506142036060830185612ef6565b6142106080830184612d3d565b9695505050505050565b600080fd5b61422882612bb3565b810181811067ffffffffffffffff8211171561424757614246614027565b5b80604052505050565b600061425a612c1f565b9050614266828261421f565b919050565b600067ffffffffffffffff82111561428657614285614027565b5b602082029050602081019050919050565b600080fd5b6000815190506142ab81612c9b565b92915050565b60006142c46142bf8461426b565b614250565b905080838252602082019050602084028301858111156142e7576142e6614297565b5b835b8181101561431057806142fc888261429c565b8452602084019350506020810190506142e9565b5050509392505050565b600082601f83011261432f5761432e61421a565b5b815161433f8482602086016142b1565b91505092915050565b60006020828403121561435e5761435d612c29565b5b600082015167ffffffffffffffff81111561437c5761437b612c2e565b5b6143888482850161431a565b91505092915050565b600081905092915050565b50565b60006143ac600083614391565b91506143b78261439c565b600082019050919050565b60006143cd8261439f565b915081905091905056fea26469706673582212202a1f71857e67541ec3dc6b7c34de39e81d1bcfa96d51985f9b3ea6b5f13dd75664736f6c63430008120033
Deployed Bytecode
0x6080604052600436106101f25760003560e01c8063850337621161010d578063b374df5c116100a0578063dd62ed3e1161006f578063dd62ed3e1461072d578063e34d99bf1461076a578063e6c1909b14610795578063e7b25bf2146107c0578063f2fde38b146107e9576101f9565b8063b374df5c14610685578063b62496f51461069c578063cb4ca631146106d9578063ced695a414610716576101f9565b806395d89b41116100dc57806395d89b41146105b5578063a457c2d7146105e0578063a9059cbb1461061d578063ae6753fd1461065a576101f9565b806385033762146104f95780638da5cb5b146105225780639183faaa1461054d5780639332028c14610578576101f9565b806339509351116101855780635c896210116101545780635c8962101461043f57806370a082311461047c578063715018a6146104b95780637b9bae54146104d0576101f9565b806339509351146103855780634082671d146103c257806353eb3bcf146103eb5780635460d68414610402576101f9565b806323b872dd116101c157806323b872dd146102b757806329693fd8146102f4578063313ce5671461033157806335e82f3a1461035c576101f9565b806306fdde03146101fb578063095ea7b31461022657806318160ddd146102635780632369bf831461028e576101f9565b366101f957005b005b34801561020757600080fd5b50610210610812565b60405161021d9190612bfd565b60405180910390f35b34801561023257600080fd5b5061024d60048036038101906102489190612cc7565b6108a4565b60405161025a9190612d22565b60405180910390f35b34801561026f57600080fd5b506102786108c7565b6040516102859190612d4c565b60405180910390f35b34801561029a57600080fd5b506102b560048036038101906102b09190612d67565b6108d1565b005b3480156102c357600080fd5b506102de60048036038101906102d99190612d94565b610a54565b6040516102eb9190612d22565b60405180910390f35b34801561030057600080fd5b5061031b60048036038101906103169190612d67565b610a83565b6040516103289190612d22565b60405180910390f35b34801561033d57600080fd5b50610346610ad9565b6040516103539190612e03565b60405180910390f35b34801561036857600080fd5b50610383600480360381019061037e9190612d67565b610ae2565b005b34801561039157600080fd5b506103ac60048036038101906103a79190612cc7565b610af6565b6040516103b99190612d22565b60405180910390f35b3480156103ce57600080fd5b506103e960048036038101906103e49190612e4a565b610b2d565b005b3480156103f757600080fd5b50610400610c44565b005b34801561040e57600080fd5b5061042960048036038101906104249190612d67565b610c5e565b6040516104369190612d22565b60405180910390f35b34801561044b57600080fd5b5061046660048036038101906104619190612d67565b610c7e565b6040516104739190612d4c565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e9190612d67565b610cc7565b6040516104b09190612d4c565b60405180910390f35b3480156104c557600080fd5b506104ce610d0f565b005b3480156104dc57600080fd5b506104f760048036038101906104f29190612eb6565b610d23565b005b34801561050557600080fd5b50610520600480360381019061051b9190612d67565b610dc9565b005b34801561052e57600080fd5b50610537610f4c565b6040516105449190612f05565b60405180910390f35b34801561055957600080fd5b50610562610f76565b60405161056f9190612f05565b60405180910390f35b34801561058457600080fd5b5061059f600480360381019061059a9190612d67565b610fa0565b6040516105ac9190612d22565b60405180910390f35b3480156105c157600080fd5b506105ca610ff6565b6040516105d79190612bfd565b60405180910390f35b3480156105ec57600080fd5b5061060760048036038101906106029190612cc7565b611088565b6040516106149190612d22565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f9190612cc7565b6110ff565b6040516106519190612d22565b60405180910390f35b34801561066657600080fd5b5061066f611122565b60405161067c9190612d4c565b60405180910390f35b34801561069157600080fd5b5061069a611156565b005b3480156106a857600080fd5b506106c360048036038101906106be9190612d67565b61119e565b6040516106d09190612d22565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb9190612d67565b6111be565b60405161070d9190612d22565b60405180910390f35b34801561072257600080fd5b5061072b611214565b005b34801561073957600080fd5b50610754600480360381019061074f9190612f20565b61122e565b6040516107619190612d4c565b60405180910390f35b34801561077657600080fd5b5061077f6112b5565b60405161078c9190612f05565b60405180910390f35b3480156107a157600080fd5b506107aa6112df565b6040516107b79190612d22565b60405180910390f35b3480156107cc57600080fd5b506107e760048036038101906107e29190612eb6565b6112f6565b005b3480156107f557600080fd5b50610810600480360381019061080b9190612d67565b611399565b005b60606003805461082190612f8f565b80601f016020809104026020016040519081016040528092919081815260200182805461084d90612f8f565b801561089a5780601f1061086f5761010080835404028352916020019161089a565b820191906000526020600020905b81548152906001019060200180831161087d57829003601f168201915b5050505050905090565b6000806108af61141c565b90506108bc818585611424565b600191505092915050565b6000600254905090565b6108d96115ed565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093f90613032565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af906130c4565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3f90613156565b60405180910390fd5b610a518161166b565b50565b600080610a5f61141c565b9050610a6c8582856116e6565b610a77858585611772565b60019150509392505050565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60006012905090565b610aea6115ed565b610af381611e70565b50565b600080610b0161141c565b9050610b22818585610b13858961122e565b610b1d91906131a5565b611424565b600191505092915050565b610b356115ed565b6005601b9054906101000a900460ff1660ff168260ff161115610b8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8490613271565b60405180910390fd5b6005601c9054906101000a900460ff1660ff168160ff161115610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc90613303565b60405180910390fd5b60008183610bf39190613323565b60ff1611610c36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2d906133f0565b60405180910390fd5b610c408282611ed3565b5050565b610c4c6115ed565b610c54611f64565b610c5c611fae565b565b60086020528060005260406000206000915054906101000a900460ff1681565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d176115ed565b610d216000611fff565b565b610d2b6115ed565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db290613482565b60405180910390fd5b610dc582826120c5565b5050565b610dd16115ed565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790613514565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea7906135a6565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610f40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3790613156565b60405180910390fd5b610f4981612159565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60606004805461100590612f8f565b80601f016020809104026020016040519081016040528092919081815260200182805461103190612f8f565b801561107e5780601f106110535761010080835404028352916020019161107e565b820191906000526020600020905b81548152906001019060200180831161106157829003601f168201915b5050505050905090565b60008061109361141c565b905060006110a1828661122e565b9050838110156110e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dd90613638565b60405180910390fd5b6110f38286868403611424565b60019250505092915050565b60008061110a61141c565b9050611117818585611772565b600191505092915050565b60006005601a9054906101000a900460ff16600560199054906101000a900460ff1661114e9190613323565b60ff16905090565b61115e6115ed565b6001601060006101000a81548160ff0219169083151502179055506111816121f6565b6000601060006101000a81548160ff021916908315150217905550565b600a6020528060005260406000206000915054906101000a900460ff1681565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61121c6115ed565b61122461224c565b61122c612295565b565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600560149054906101000a900460ff16905090565b6112fe6115ed565b600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561138b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611382906136f0565b60405180910390fd5b61139582826122e6565b5050565b6113a16115ed565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611410576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140790613782565b60405180910390fd5b61141981611fff565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611493576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148a90613814565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f9906138a6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516115e09190612d4c565b60405180910390a3505050565b6115f561141c565b73ffffffffffffffffffffffffffffffffffffffff16611613610f4c565b73ffffffffffffffffffffffffffffffffffffffff1614611669576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166090613912565b60405180910390fd5b565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f70f1e4f570b51e464910762fee3d96ad08b99a90ce9c27a6036b0f4627aeda2d816040516116db9190612f05565b60405180910390a150565b60006116f2848461122e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461176c578181101561175e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117559061397e565b60405180910390fd5b61176b8484848403611424565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890613a10565b60405180910390fd5b60008111611824576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181b90613aa2565b60405180910390fd5b601060009054906101000a900460ff1615801561184e575061184d61184830610cc7565b61237a565b5b80156118a35750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156118e7576001601060006101000a81548160ff0219169083151502179055506118cb6121f6565b6000601060006101000a81548160ff0219169083151502179055505b6000819050601060009054906101000a900460ff16611e5f57600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b1557600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d690613b5a565b60405180910390fd5b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ad05743600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403611acf576001600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b43600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611c9d57600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c585743600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205403611c57576001600e60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b43600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611d3e5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611e5e57611d4b6112df565b8015611da15750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611df75750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611e5d576000611e078261239e565b90506000611e14836123e9565b9050808285611e239190613b7a565b611e2d9190613b7a565b925060008183611e3d91906131a5565b1115611e5a57611e5986308385611e5491906131a5565b612434565b5b50505b5b5b611e6a848483612434565b50505050565b611e786115ed565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b81600560196101000a81548160ff021916908360ff160217905550806005601a6101000a81548160ff021916908360ff1602179055507fa8ee157eb2a9aa895d74df4d2d3bc0ad165ff3162f8ec46a4ecf602dd5c48fda600560199054906101000a900460ff166005601a9054906101000a900460ff16604051611f58929190613be9565b60405180910390a15050565b611f6c6112df565b15611fac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa390613c84565b60405180910390fd5b565b611fb6611f64565b6001600560146101000a81548160ff0219169083151502179055507fd2e80fb3f28dfb650beb9c059dadd2a8936a8bdc1abd1563608cd49227a0902160405160405180910390a1565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2df49817e5aafe4d3dd7d0c8192865b7034d8870ed49ac24a9520f3057bb5f24828260405161214d929190613ca4565b60405180910390a15050565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f292c0d8d8c63a0a0a42cc1103baf921b3f13ea455e3298dbcf67e3edba8a6a38600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516121eb9190613d22565b60405180910390a150565b600061220130610cc7565b9050600060058060159054906101000a900463ffffffff1663ffffffff166122299190613d3d565b905080821115612237578091505b612240826126aa565b612248612904565b5050565b6122546112df565b612293576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228a90613df1565b60405180910390fd5b565b61229d61224c565b6000600560146101000a81548160ff0219169083151502179055507f7a14a3188411c2f406ce4721233750b4b11e612569f9fa80a35b1cb91bb2e49e60405160405180910390a1565b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507ff14bd650485d6a031eba0f22da79fbebf9dc98a771adcbde6b4abe2ba590afdb828260405161236e929190613ca4565b60405180910390a15050565b6000600560159054906101000a900463ffffffff1663ffffffff1682119050919050565b60006123a86112df565b156123df576103e8600560199054906101000a900460ff1660ff16836123ce9190613d3d565b6123d89190613e40565b90506123e4565b600090505b919050565b60006123f36112df565b1561242a576103e86005601a9054906101000a900460ff1660ff16836124199190613d3d565b6124239190613e40565b905061242f565b600090505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249a90613ee3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612512576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250990613f75565b60405180910390fd5b61251d838383612b25565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a90614007565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126919190612d4c565b60405180910390a36126a4848484612b2a565b50505050565b6000600267ffffffffffffffff8111156126c7576126c6614027565b5b6040519080825280602002602001820160405280156126f55781602001602082028036833780820191505090505b509050308160008151811061270d5761270c614056565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d8919061409a565b816001815181106127ec576127eb614056565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061285330600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611424565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318cbafe58360008430426040518663ffffffff1660e01b81526004016128b79594939291906141c0565b6000604051808303816000875af11580156128d6573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906128ff9190614348565b505050565b6000479050600080821115612b2157600061291e83612b2f565b90506000818461292e9190613b7a565b9050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612998573d6000803e3d6000fd5b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612a01573d6000803e3d6000fd5b50600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051612a48906143c2565b60006040518083038185875af1925050503d8060008114612a85576040519150601f19603f3d011682016040523d82523d6000602084013e612a8a565b606091505b505080935050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681604051612ad6906143c2565b60006040518083038185875af1925050503d8060008114612b13576040519150601f19603f3d011682016040523d82523d6000602084013e612b18565b606091505b50508093505050505b5050565b505050565b505050565b600080612b3a611122565b905080600560199054906101000a900460ff1660ff1684612b5b9190613d3d565b612b659190613e40565b915050919050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ba7578082015181840152602081019050612b8c565b60008484015250505050565b6000601f19601f8301169050919050565b6000612bcf82612b6d565b612bd98185612b78565b9350612be9818560208601612b89565b612bf281612bb3565b840191505092915050565b60006020820190508181036000830152612c178184612bc4565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c5e82612c33565b9050919050565b612c6e81612c53565b8114612c7957600080fd5b50565b600081359050612c8b81612c65565b92915050565b6000819050919050565b612ca481612c91565b8114612caf57600080fd5b50565b600081359050612cc181612c9b565b92915050565b60008060408385031215612cde57612cdd612c29565b5b6000612cec85828601612c7c565b9250506020612cfd85828601612cb2565b9150509250929050565b60008115159050919050565b612d1c81612d07565b82525050565b6000602082019050612d376000830184612d13565b92915050565b612d4681612c91565b82525050565b6000602082019050612d616000830184612d3d565b92915050565b600060208284031215612d7d57612d7c612c29565b5b6000612d8b84828501612c7c565b91505092915050565b600080600060608486031215612dad57612dac612c29565b5b6000612dbb86828701612c7c565b9350506020612dcc86828701612c7c565b9250506040612ddd86828701612cb2565b9150509250925092565b600060ff82169050919050565b612dfd81612de7565b82525050565b6000602082019050612e186000830184612df4565b92915050565b612e2781612de7565b8114612e3257600080fd5b50565b600081359050612e4481612e1e565b92915050565b60008060408385031215612e6157612e60612c29565b5b6000612e6f85828601612e35565b9250506020612e8085828601612e35565b9150509250929050565b612e9381612d07565b8114612e9e57600080fd5b50565b600081359050612eb081612e8a565b92915050565b60008060408385031215612ecd57612ecc612c29565b5b6000612edb85828601612c7c565b9250506020612eec85828601612ea1565b9150509250929050565b612eff81612c53565b82525050565b6000602082019050612f1a6000830184612ef6565b92915050565b60008060408385031215612f3757612f36612c29565b5b6000612f4585828601612c7c565b9250506020612f5685828601612c7c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fa757607f821691505b602082108103612fba57612fb9612f60565b5b50919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420736574206d61726b65746960008201527f6e67206164647265737320746f20300000000000000000000000000000000000602082015250565b600061301c602f83612b78565b915061302782612fc0565b604082019050919050565b6000602082019050818103600083015261304b8161300f565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420736574206d61726b65746960008201527f6e67206164647265737320746f20646561642061646472657373000000000000602082015250565b60006130ae603a83612b78565b91506130b982613052565b604082019050919050565b600060208201905081810360008301526130dd816130a1565b9050919050565b7f54617861626c65546f6b656e3a204d61726b6574696e6720616e64206465762060008201527f616464726573732063616e6e6f74206265207468652073616d65000000000000602082015250565b6000613140603a83612b78565b915061314b826130e4565b604082019050919050565b6000602082019050818103600083015261316f81613133565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006131b082612c91565b91506131bb83612c91565b92508282019050808211156131d3576131d2613176565b5b92915050565b7f54617861626c65546f6b656e3a2043616e6e6f7420696e637265617365206d6160008201527f726b6574696e672074617820726174652061626f766520696e697469616c207260208201527f6174652e00000000000000000000000000000000000000000000000000000000604082015250565b600061325b604483612b78565b9150613266826131d9565b606082019050919050565b6000602082019050818103600083015261328a8161324e565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420696e63726561736520646560008201527f762074617820726174652061626f766520696e697469616c20726174652e0000602082015250565b60006132ed603e83612b78565b91506132f882613291565b604082019050919050565b6000602082019050818103600083015261331c816132e0565b9050919050565b600061332e82612de7565b915061333983612de7565b9250828201905060ff81111561335257613351613176565b5b92915050565b7f54617861626c65546f6b656e3a2043616e6e6f7420726564756365207461786560008201527f7320746f2f62656c6f7720302e2044697361626c6520746178657320696e737460208201527f6561642e00000000000000000000000000000000000000000000000000000000604082015250565b60006133da604483612b78565b91506133e582613358565b606082019050919050565b60006020820190508181036000830152613409816133cd565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f74206368616e6765207374617460008201527f7573206f6620626173652074726164696e672070616972000000000000000000602082015250565b600061346c603783612b78565b915061347782613410565b604082019050919050565b6000602082019050818103600083015261349b8161345f565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420736574206465762061646460008201527f7265737320746f20300000000000000000000000000000000000000000000000602082015250565b60006134fe602983612b78565b9150613509826134a2565b604082019050919050565b6000602082019050818103600083015261352d816134f1565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f7420736574206465762061646460008201527f7265737320746f20646561642061646472657373000000000000000000000000602082015250565b6000613590603483612b78565b915061359b82613534565b604082019050919050565b600060208201905081810360008301526135bf81613583565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000613622602583612b78565b915061362d826135c6565b604082019050919050565b6000602082019050818103600083015261365181613615565b9050919050565b7f54617861626c65546f6b656e3a2043616e6e6f74206368616e6765206578636c60008201527f7564656446726f6d54617820737461747573206f66206261736520747261646960208201527f6e67207061697200000000000000000000000000000000000000000000000000604082015250565b60006136da604783612b78565b91506136e582613658565b606082019050919050565b60006020820190508181036000830152613709816136cd565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061376c602683612b78565b915061377782613710565b604082019050919050565b6000602082019050818103600083015261379b8161375f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006137fe602483612b78565b9150613809826137a2565b604082019050919050565b6000602082019050818103600083015261382d816137f1565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613890602283612b78565b915061389b82613834565b604082019050919050565b600060208201905081810360008301526138bf81613883565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006138fc602083612b78565b9150613907826138c6565b602082019050919050565b6000602082019050818103600083015261392b816138ef565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613968601d83612b78565b915061397382613932565b602082019050919050565b600060208201905081810360008301526139978161395b565b9050919050565b7f45524332303a2043616e6e6f74207472616e736665722066726f6d207468652060008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b60006139fa602c83612b78565b9150613a058261399e565b604082019050919050565b60006020820190508181036000830152613a29816139ed565b9050919050565b7f45524332303a204d757374207472616e73666572206d6f7265207468616e207a60008201527f65726f0000000000000000000000000000000000000000000000000000000000602082015250565b6000613a8c602383612b78565b9150613a9782613a30565b604082019050919050565b60006020820190508181036000830152613abb81613a7f565b9050919050565b7f424554533a2054686973206164647265737320697320626c61636b6c6973746560008201527f642066726f6d20627579696e672e20596f752063616e20616c7761797320736560208201527f6c6c20616e7920746f6b656e7320796f75206f776e2e00000000000000000000604082015250565b6000613b44605683612b78565b9150613b4f82613ac2565b606082019050919050565b60006020820190508181036000830152613b7381613b37565b9050919050565b6000613b8582612c91565b9150613b9083612c91565b9250828203905081811115613ba857613ba7613176565b5b92915050565b6000819050919050565b6000613bd3613bce613bc984612de7565b613bae565b612c91565b9050919050565b613be381613bb8565b82525050565b6000604082019050613bfe6000830185613bda565b613c0b6020830184613bda565b9392505050565b7f54617861626c65546f6b656e3a20546178206d7573742062652064697361626c60008201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c6e602283612b78565b9150613c7982613c12565b604082019050919050565b60006020820190508181036000830152613c9d81613c61565b9050919050565b6000604082019050613cb96000830185612ef6565b613cc66020830184612d13565b9392505050565b6000613ce8613ce3613cde84612c33565b613bae565b612c33565b9050919050565b6000613cfa82613ccd565b9050919050565b6000613d0c82613cef565b9050919050565b613d1c81613d01565b82525050565b6000602082019050613d376000830184613d13565b92915050565b6000613d4882612c91565b9150613d5383612c91565b9250828202613d6181612c91565b91508282048414831517613d7857613d77613176565b5b5092915050565b7f54617861626c65546f6b656e3a20546178206d75737420626520656e61626c6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ddb602183612b78565b9150613de682613d7f565b604082019050919050565b60006020820190508181036000830152613e0a81613dce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613e4b82612c91565b9150613e5683612c91565b925082613e6657613e65613e11565b5b828204905092915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613ecd602583612b78565b9150613ed882613e71565b604082019050919050565b60006020820190508181036000830152613efc81613ec0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f5f602383612b78565b9150613f6a82613f03565b604082019050919050565b60006020820190508181036000830152613f8e81613f52565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613ff1602683612b78565b9150613ffc82613f95565b604082019050919050565b6000602082019050818103600083015261402081613fe4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061409481612c65565b92915050565b6000602082840312156140b0576140af612c29565b5b60006140be84828501614085565b91505092915050565b6000819050919050565b60006140ec6140e76140e2846140c7565b613bae565b612c91565b9050919050565b6140fc816140d1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61413781612c53565b82525050565b6000614149838361412e565b60208301905092915050565b6000602082019050919050565b600061416d82614102565b614177818561410d565b93506141828361411e565b8060005b838110156141b357815161419a888261413d565b97506141a583614155565b925050600181019050614186565b5085935050505092915050565b600060a0820190506141d56000830188612d3d565b6141e260208301876140f3565b81810360408301526141f48186614162565b90506142036060830185612ef6565b6142106080830184612d3d565b9695505050505050565b600080fd5b61422882612bb3565b810181811067ffffffffffffffff8211171561424757614246614027565b5b80604052505050565b600061425a612c1f565b9050614266828261421f565b919050565b600067ffffffffffffffff82111561428657614285614027565b5b602082029050602081019050919050565b600080fd5b6000815190506142ab81612c9b565b92915050565b60006142c46142bf8461426b565b614250565b905080838252602082019050602084028301858111156142e7576142e6614297565b5b835b8181101561431057806142fc888261429c565b8452602084019350506020810190506142e9565b5050509392505050565b600082601f83011261432f5761432e61421a565b5b815161433f8482602086016142b1565b91505092915050565b60006020828403121561435e5761435d612c29565b5b600082015167ffffffffffffffff81111561437c5761437b612c2e565b5b6143888482850161431a565b91505092915050565b600081905092915050565b50565b60006143ac600083614391565b91506143b78261439c565b600082019050919050565b60006143cd8261439f565b915081905091905056fea26469706673582212202a1f71857e67541ec3dc6b7c34de39e81d1bcfa96d51985f9b3ea6b5f13dd75664736f6c63430008120033
Deployed Bytecode Sourcemap
37462:5339:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9471:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11822:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10591:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32133:483;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12603:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38984:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10433:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39130:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13307:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31361:552;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30960:85;;;;;;;;;;;;;:::i;:::-;;29888:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39414:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10762:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2882:103;;;;;;;;;;;;;:::i;:::-;;33067:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32624:435;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2234:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31921:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39261:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9690:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14048:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11095:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31242:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39565:151;;;;;;;;;;;;;:::i;:::-;;29985:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33593:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31053:86;;;;;;;;;;;;;:::i;:::-;;11351:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32033:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31144:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33314:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3140:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9471:100;9525:13;9558:5;9551:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9471:100;:::o;11822:201::-;11905:4;11922:13;11938:12;:10;:12::i;:::-;11922:28;;11961:32;11970:5;11977:7;11986:6;11961:8;:32::i;:::-;12011:4;12004:11;;;11822:201;;;;:::o;10591:108::-;10652:7;10679:12;;10672:19;;10591:108;:::o;32133:483::-;2120:13;:11;:13::i;:::-;32261:1:::1;32230:33;;:19;:33;;::::0;32222:93:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32365:6;32334:38;;:19;:38;;::::0;32326:109:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32477:11;;;;;;;;;;;32454:34;;:19;:34;;::::0;32446:105:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32564:44;32588:19;32564:23;:44::i;:::-;32133:483:::0;:::o;12603:295::-;12734:4;12751:15;12769:12;:10;:12::i;:::-;12751:30;;12792:38;12808:4;12814:7;12823:6;12792:15;:38::i;:::-;12841:27;12851:4;12857:2;12861:6;12841:9;:27::i;:::-;12886:4;12879:11;;;12603:295;;;;;:::o;38984:138::-;39061:4;39085:21;:29;39107:6;39085:29;;;;;;;;;;;;;;;;;;;;;;;;;39078:36;;38984:138;;;:::o;10433:93::-;10491:5;10516:2;10509:9;;10433:93;:::o;39130:123::-;2120:13;:11;:13::i;:::-;39210:35:::1;39238:6;39210:27;:35::i;:::-;39130:123:::0;:::o;13307:238::-;13395:4;13412:13;13428:12;:10;:12::i;:::-;13412:28;;13451:64;13460:5;13467:7;13504:10;13476:25;13486:5;13493:7;13476:9;:25::i;:::-;:38;;;;:::i;:::-;13451:8;:64::i;:::-;13533:4;13526:11;;;13307:238;;;;:::o;31361:552::-;2120:13;:11;:13::i;:::-;31491:24:::1;;;;;;;;;;;31468:47;;:19;:47;;;;31460:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;31624:18;;;;;;;;;;;31607:35;;:13;:35;;;;31599:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;31768:1;31751:13;31729:19;:35;;;;:::i;:::-;31728:41;;;31720:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;31855:50;31870:19;31891:13;31855:14;:50::i;:::-;31361:552:::0;;:::o;30960:85::-;2120:13;:11;:13::i;:::-;30829:21:::1;:19;:21::i;:::-;31025:12:::2;:10;:12::i;:::-;30960:85::o:0;29888:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;39414:143::-;39490:4;39514:27;:35;39542:6;39514:35;;;;;;;;;;;;;;;;39507:42;;39414:143;;;:::o;10762:127::-;10836:7;10863:9;:18;10873:7;10863:18;;;;;;;;;;;;;;;;10856:25;;10762:127;;;:::o;2882:103::-;2120:13;:11;:13::i;:::-;2947:30:::1;2974:1;2947:18;:30::i;:::-;2882:103::o:0;33067:239::-;2120:13;:11;:13::i;:::-;33171:16:::1;;;;;;;;;;;33163:24;;:4;:24;;::::0;33155:92:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33260:38;33285:4;33291:6;33260:24;:38::i;:::-;33067:239:::0;;:::o;32624:435::-;2120:13;:11;:13::i;:::-;32734:1:::1;32709:27;;:13;:27;;::::0;32701:81:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32826:6;32801:32;;:13;:32;;::::0;32793:97:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32926:17;;;;;;;;;;;32909:34;;:13;:34;;::::0;32901:105:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33019:32;33037:13;33019:17;:32::i;:::-;32624:435:::0;:::o;2234:87::-;2280:7;2307:6;;;;;;;;;;;2300:13;;2234:87;:::o;31921:104::-;31973:7;32000:17;;;;;;;;;;;31993:24;;31921:104;:::o;39261:145::-;39341:4;39365:25;:33;39391:6;39365:33;;;;;;;;;;;;;;;;;;;;;;;;;39358:40;;39261:145;;;:::o;9690:104::-;9746:13;9779:7;9772:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9690:104;:::o;14048:436::-;14141:4;14158:13;14174:12;:10;:12::i;:::-;14158:28;;14197:24;14224:25;14234:5;14241:7;14224:9;:25::i;:::-;14197:52;;14288:15;14268:16;:35;;14260:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14381:60;14390:5;14397:7;14425:15;14406:16;:34;14381:8;:60::i;:::-;14472:4;14465:11;;;;14048:436;;;;:::o;11095:193::-;11174:4;11191:13;11207:12;:10;:12::i;:::-;11191:28;;11230;11240:5;11247:2;11251:6;11230:9;:28::i;:::-;11276:4;11269:11;;;11095:193;;;;:::o;31242:111::-;31290:4;31334:11;;;;;;;;;;;31314:17;;;;;;;;;;;:31;;;;:::i;:::-;31307:38;;;;31242:111;:::o;39565:151::-;2120:13;:11;:13::i;:::-;39636:4:::1;39615:18;;:25;;;;;;;;;;;;;;;;;;39651:20;:18;:20::i;:::-;39703:5;39682:18;;:26;;;;;;;;;;;;;;;;;;39565:151::o:0;29985:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;33593:120::-;33657:4;33681:16;:24;33698:6;33681:24;;;;;;;;;;;;;;;;;;;;;;;;;33674:31;;33593:120;;;:::o;31053:86::-;2120:13;:11;:13::i;:::-;30912:20:::1;:18;:20::i;:::-;31118:13:::2;:11;:13::i;:::-;31053:86::o:0;11351:151::-;11440:7;11467:11;:18;11479:5;11467:18;;;;;;;;;;;;;;;:27;11486:7;11467:27;;;;;;;;;;;;;;;;11460:34;;11351:151;;;;:::o;32033:92::-;32079:7;32106:11;;;;;;;;;;;32099:18;;32033:92;:::o;31144:90::-;31189:4;31213:13;;;;;;;;;;;31206:20;;31144:90;:::o;33314:271::-;2120:13;:11;:13::i;:::-;33411:25:::1;:33;33437:6;33411:33;;;;;;;;;;;;;;;;;;;;;;;;;33410:34;33402:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;33533:44;33562:6;33570;33533:28;:44::i;:::-;33314:271:::0;;:::o;3140:201::-;2120:13;:11;:13::i;:::-;3249:1:::1;3229:22;;:8;:22;;::::0;3221:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3305:28;3324:8;3305:18;:28::i;:::-;3140:201:::0;:::o;781:98::-;834:7;861:10;854:17;;781:98;:::o;18075:380::-;18228:1;18211:19;;:5;:19;;;18203:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18309:1;18290:21;;:7;:21;;;18282:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18393:6;18363:11;:18;18375:5;18363:18;;;;;;;;;;;;;;;:27;18382:7;18363:27;;;;;;;;;;;;;;;:36;;;;18431:7;18415:32;;18424:5;18415:32;;;18440:6;18415:32;;;;;;:::i;:::-;;;;;;;;18075:380;;;:::o;2399:132::-;2474:12;:10;:12::i;:::-;2463:23;;:7;:5;:7::i;:::-;:23;;;2455:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2399:132::o;35209:198::-;35319:19;35291:17;;:48;;;;;;;;;;;;;;;;;;35355:44;35379:19;35355:44;;;;;;:::i;:::-;;;;;;;;35209:198;:::o;18746:453::-;18881:24;18908:25;18918:5;18925:7;18908:9;:25::i;:::-;18881:52;;18968:17;18948:16;:37;18944:248;;19030:6;19010:16;:26;;19002:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19114:51;19123:5;19130:7;19158:6;19139:16;:25;19114:8;:51::i;:::-;18944:248;18870:329;18746:453;;;:::o;39859:2149::-;39973:1;39957:18;;:4;:18;;;39949:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;40052:1;40043:6;:10;40035:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40111:18;;;;;;;;;;;40110:19;:71;;;;;40133:48;40156:24;40174:4;40156:9;:24::i;:::-;40133:22;:48::i;:::-;40110:71;:104;;;;;40185:25;:29;40211:2;40185:29;;;;;;;;;;;;;;;;;;;;;;;;;40110:104;40106:238;;;40252:4;40231:18;;:25;;;;;;;;;;;;;;;;;;40271:20;:18;:20::i;:::-;40327:5;40306:18;;:26;;;;;;;;;;;;;;;;;;40106:238;40356:21;40380:6;40356:30;;40404:18;;;;;;;;;;;40399:1546;;40443:25;:31;40469:4;40443:31;;;;;;;;;;;;;;;;;;;;;;;;;40439:498;;;40504:21;:25;40526:2;40504:25;;;;;;;;;;;;;;;;;;;;;;;;;40503:26;40495:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;40646:25;:29;40672:2;40646:29;;;;;;;;;;;;;;;;;;;;;;;;;40641:214;;40739:12;40704:27;:31;40732:2;40704:31;;;;;;;;;;;;;;;;:47;40700:136;;40808:4;40780:21;:25;40802:2;40780:25;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;40700:136;40641:214;40909:12;40875:27;:31;40903:2;40875:31;;;;;;;;;;;;;;;:46;;;;40439:498;40957:25;:29;40983:2;40957:29;;;;;;;;;;;;;;;;;;;;;;;;;40953:358;;;41012:25;:31;41038:4;41012:31;;;;;;;;;;;;;;;;;;;;;;;;;41007:220;;41109:12;41072:27;:33;41100:4;41072:33;;;;;;;;;;;;;;;;:49;41068:140;;41180:4;41150:21;:27;41172:4;41150:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;41068:140;41007:220;41283:12;41247:27;:33;41275:4;41247:33;;;;;;;;;;;;;;;:48;;;;40953:358;41331:25;:31;41357:4;41331:31;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;41366:25;:29;41392:2;41366:29;;;;;;;;;;;;;;;;;;;;;;;;;41331:64;41327:607;;;41420:14;:12;:14::i;:::-;:41;;;;;41439:16;:22;41456:4;41439:22;;;;;;;;;;;;;;;;;;;;;;;;;41438:23;41420:41;:66;;;;;41466:16;:20;41483:2;41466:20;;;;;;;;;;;;;;;;;;;;;;;;;41465:21;41420:66;41416:503;;;41511:20;41534:37;41554:16;41534:19;:37::i;:::-;41511:60;;41594:14;41611:31;41625:16;41611:13;:31::i;:::-;41594:48;;41711:9;41693:15;41684:6;:24;;;;:::i;:::-;:36;;;;:::i;:::-;41665:55;;41781:1;41768:9;41750:15;:27;;;;:::i;:::-;41749:33;41745:155;;;41811:65;41827:4;41841;41866:9;41848:15;:27;;;;:::i;:::-;41811:15;:65::i;:::-;41745:155;41488:431;;41416:503;41327:607;40399:1546;41957:43;41973:4;41979:2;41983:16;41957:15;:43::i;:::-;39938:2070;39859:2149;;;:::o;39724:127::-;2120:13;:11;:13::i;:::-;39838:5:::1;39806:21;:29;39828:6;39806:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;39724:127:::0;:::o;34590:241::-;34702:19;34682:17;;:39;;;;;;;;;;;;;;;;;;34746:13;34732:11;;:27;;;;;;;;;;;;;;;;;;34777:46;34792:17;;;;;;;;;;;34811:11;;;;;;;;;;;34777:46;;;;;;;:::i;:::-;;;;;;;;34590:241;;:::o;33718:126::-;33783:14;:12;:14::i;:::-;33782:15;33774:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33718:126::o;33977:114::-;30829:21;:19;:21::i;:::-;34051:4:::1;34035:13;;:20;;;;;;;;;;;;;;;;;;34071:12;;;;;;;;;;33977:114::o:0;3501:191::-;3575:16;3594:6;;;;;;;;;;;3575:25;;3620:8;3611:6;;:17;;;;;;;;;;;;;;;;;;3675:8;3644:40;;3665:8;3644:40;;;;;;;;;;;;3564:128;3501:191;:::o;35788:192::-;35906:9;35872:25;:31;35898:4;35872:31;;;;;;;;;;;;;;;;:43;;;;;;;;;;;;;;;;;;35931:41;35956:4;35962:9;35931:41;;;;;;;:::i;:::-;;;;;;;;35788:192;;:::o;35415:160::-;35507:13;35485:11;;:36;;;;;;;;;;;;;;;;;;35537:30;35555:11;;;;;;;;;;;35537:30;;;;;;:::i;:::-;;;;;;;;35415:160;:::o;42016:344::-;42065:17;42085:24;42103:4;42085:9;:24::i;:::-;42065:44;;42120:20;42168:1;42148:16;;;;;;;;;;;42143:22;;:26;;;;:::i;:::-;42120:49;;42199:15;42184:12;:30;42180:93;;;42246:15;42231:30;;42180:93;42285:31;42303:12;42285:17;:31::i;:::-;42327:25;:23;:25::i;:::-;42054:306;;42016:344::o;33849:123::-;33912:14;:12;:14::i;:::-;33904:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;33849:123::o;34096:116::-;30912:20;:18;:20::i;:::-;34170:5:::1;34154:13;;:21;;;;;;;;;;;;;;;;;;34191:13;;;;;;;;;;34096:116::o:0;35583:197::-;35700:9;35673:16;:24;35690:6;35673:24;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;35725:47;35754:6;35762:9;35725:47;;;;;;;:::i;:::-;;;;;;;;35583:197;;:::o;34439:143::-;34516:4;34558:16;;;;;;;;;;;34540:34;;:15;:34;34533:41;;34439:143;;;:::o;35988:199::-;36053:4;36074:14;:12;:14::i;:::-;36070:89;;;36143:4;36122:17;;;;;;;;;;;36113:26;;:6;:26;;;;:::i;:::-;36112:35;;;;:::i;:::-;36105:42;;;;36070:89;36178:1;36171:8;;35988:199;;;;:::o;36195:187::-;36254:4;36275:14;:12;:14::i;:::-;36271:83;;;36338:4;36323:11;;;;;;;;;;;36314:20;;:6;:20;;;;:::i;:::-;36313:29;;;;:::i;:::-;36306:36;;;;36271:83;36373:1;36366:8;;36195:187;;;;:::o;14954:840::-;15101:1;15085:18;;:4;:18;;;15077:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15178:1;15164:16;;:2;:16;;;15156:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15233:38;15254:4;15260:2;15264:6;15233:20;:38::i;:::-;15284:19;15306:9;:15;15316:4;15306:15;;;;;;;;;;;;;;;;15284:37;;15355:6;15340:11;:21;;15332:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15472:6;15458:11;:20;15440:9;:15;15450:4;15440:15;;;;;;;;;;;;;;;:38;;;;15675:6;15658:9;:13;15668:2;15658:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15725:2;15710:26;;15719:4;15710:26;;;15729:6;15710:26;;;;;;:::i;:::-;;;;;;;;15749:37;15769:4;15775:2;15779:6;15749:19;:37::i;:::-;15066:728;14954:840;;;:::o;42368:357::-;42430:21;42468:1;42454:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42430:40;;42499:4;42481;42486:1;42481:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;42525:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42515:4;42520:1;42515:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;42561:58;42578:4;42593:16;;;;;;;;;;;42612:6;42561:8;:58::i;:::-;42630:16;;;;;;;;;;;:38;;;42669:6;42677:1;42680:4;42694;42701:15;42630:87;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42419:306;42368:357;:::o;36806:590::-;36861:20;36884:21;36861:44;;36916:12;36963:1;36945:15;:19;36941:448;;;36981:20;37004:38;37026:15;37004:21;:38::i;:::-;36981:61;;37057:14;37092:15;37074;:33;;;;:::i;:::-;37057:50;;37124:17;;;;;;;;;;;:26;;:43;37151:15;37124:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37182:11;;;;;;;;;;;:20;;:31;37203:9;37182:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37250:17;;;;;;;;;;;37242:31;;37281:15;37242:59;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37228:73;;;;;37338:11;;;;;;;;;;;37330:25;;37363:9;37330:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37316:61;;;;;36966:423;;36941:448;36850:546;;36806:590::o;19799:125::-;;;;:::o;20528:124::-;;;;:::o;36390:206::-;36464:4;36481:18;36502:17;:15;:17::i;:::-;36481:38;;36575:13;36554:17;;;;;;;;;;;36538:33;;:13;:33;;;;:::i;:::-;36537:51;;;;:::i;:::-;36530:58;;;36390:206;;;:::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;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::o;1430:117::-;1539:1;1536;1529:12;1553:117;1662:1;1659;1652: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:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:329::-;3857:6;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;3798:329;;;;:::o;4133:619::-;4210:6;4218;4226;4275:2;4263:9;4254:7;4250:23;4246:32;4243:119;;;4281:79;;:::i;:::-;4243:119;4401:1;4426:53;4471:7;4462:6;4451:9;4447:22;4426:53;:::i;:::-;4416:63;;4372:117;4528:2;4554:53;4599:7;4590:6;4579:9;4575:22;4554:53;:::i;:::-;4544:63;;4499:118;4656:2;4682:53;4727:7;4718:6;4707:9;4703:22;4682:53;:::i;:::-;4672:63;;4627:118;4133:619;;;;;:::o;4758:86::-;4793:7;4833:4;4826:5;4822:16;4811:27;;4758:86;;;:::o;4850:112::-;4933:22;4949:5;4933:22;:::i;:::-;4928:3;4921:35;4850:112;;:::o;4968:214::-;5057:4;5095:2;5084:9;5080:18;5072:26;;5108:67;5172:1;5161:9;5157:17;5148:6;5108:67;:::i;:::-;4968:214;;;;:::o;5188:118::-;5259:22;5275:5;5259:22;:::i;:::-;5252:5;5249:33;5239:61;;5296:1;5293;5286:12;5239:61;5188:118;:::o;5312:135::-;5356:5;5394:6;5381:20;5372:29;;5410:31;5435:5;5410:31;:::i;:::-;5312:135;;;;:::o;5453:466::-;5517:6;5525;5574:2;5562:9;5553:7;5549:23;5545:32;5542:119;;;5580:79;;:::i;:::-;5542:119;5700:1;5725:51;5768:7;5759:6;5748:9;5744:22;5725:51;:::i;:::-;5715:61;;5671:115;5825:2;5851:51;5894:7;5885:6;5874:9;5870:22;5851:51;:::i;:::-;5841:61;;5796:116;5453:466;;;;;:::o;5925:116::-;5995:21;6010:5;5995:21;:::i;:::-;5988:5;5985:32;5975:60;;6031:1;6028;6021:12;5975:60;5925:116;:::o;6047:133::-;6090:5;6128:6;6115:20;6106:29;;6144:30;6168:5;6144:30;:::i;:::-;6047:133;;;;:::o;6186:468::-;6251:6;6259;6308:2;6296:9;6287:7;6283:23;6279:32;6276:119;;;6314:79;;:::i;:::-;6276:119;6434:1;6459:53;6504:7;6495:6;6484:9;6480:22;6459:53;:::i;:::-;6449:63;;6405:117;6561:2;6587:50;6629:7;6620:6;6609:9;6605:22;6587:50;:::i;:::-;6577:60;;6532:115;6186:468;;;;;:::o;6660:118::-;6747:24;6765:5;6747:24;:::i;:::-;6742:3;6735:37;6660:118;;:::o;6784:222::-;6877:4;6915:2;6904:9;6900:18;6892:26;;6928:71;6996:1;6985:9;6981:17;6972:6;6928:71;:::i;:::-;6784:222;;;;:::o;7012:474::-;7080:6;7088;7137:2;7125:9;7116:7;7112:23;7108:32;7105:119;;;7143:79;;:::i;:::-;7105:119;7263:1;7288:53;7333:7;7324:6;7313:9;7309:22;7288:53;:::i;:::-;7278:63;;7234:117;7390:2;7416:53;7461:7;7452:6;7441:9;7437:22;7416:53;:::i;:::-;7406:63;;7361:118;7012:474;;;;;:::o;7492:180::-;7540:77;7537:1;7530:88;7637:4;7634:1;7627:15;7661:4;7658:1;7651:15;7678:320;7722:6;7759:1;7753:4;7749:12;7739:22;;7806:1;7800:4;7796:12;7827:18;7817:81;;7883:4;7875:6;7871:17;7861:27;;7817:81;7945:2;7937:6;7934:14;7914:18;7911:38;7908:84;;7964:18;;:::i;:::-;7908:84;7729:269;7678:320;;;:::o;8004:234::-;8144:34;8140:1;8132:6;8128:14;8121:58;8213:17;8208:2;8200:6;8196:15;8189:42;8004:234;:::o;8244:366::-;8386:3;8407:67;8471:2;8466:3;8407:67;:::i;:::-;8400:74;;8483:93;8572:3;8483:93;:::i;:::-;8601:2;8596:3;8592:12;8585:19;;8244:366;;;:::o;8616:419::-;8782:4;8820:2;8809:9;8805:18;8797:26;;8869:9;8863:4;8859:20;8855:1;8844:9;8840:17;8833:47;8897:131;9023:4;8897:131;:::i;:::-;8889:139;;8616:419;;;:::o;9041:245::-;9181:34;9177:1;9169:6;9165:14;9158:58;9250:28;9245:2;9237:6;9233:15;9226:53;9041:245;:::o;9292:366::-;9434:3;9455:67;9519:2;9514:3;9455:67;:::i;:::-;9448:74;;9531:93;9620:3;9531:93;:::i;:::-;9649:2;9644:3;9640:12;9633:19;;9292:366;;;:::o;9664:419::-;9830:4;9868:2;9857:9;9853:18;9845:26;;9917:9;9911:4;9907:20;9903:1;9892:9;9888:17;9881:47;9945:131;10071:4;9945:131;:::i;:::-;9937:139;;9664:419;;;:::o;10089:245::-;10229:34;10225:1;10217:6;10213:14;10206:58;10298:28;10293:2;10285:6;10281:15;10274:53;10089:245;:::o;10340:366::-;10482:3;10503:67;10567:2;10562:3;10503:67;:::i;:::-;10496:74;;10579:93;10668:3;10579:93;:::i;:::-;10697:2;10692:3;10688:12;10681:19;;10340:366;;;:::o;10712:419::-;10878:4;10916:2;10905:9;10901:18;10893:26;;10965:9;10959:4;10955:20;10951:1;10940:9;10936:17;10929:47;10993:131;11119:4;10993:131;:::i;:::-;10985:139;;10712:419;;;:::o;11137:180::-;11185:77;11182:1;11175:88;11282:4;11279:1;11272:15;11306:4;11303:1;11296:15;11323:191;11363:3;11382:20;11400:1;11382:20;:::i;:::-;11377:25;;11416:20;11434:1;11416:20;:::i;:::-;11411:25;;11459:1;11456;11452:9;11445:16;;11480:3;11477:1;11474:10;11471:36;;;11487:18;;:::i;:::-;11471:36;11323:191;;;;:::o;11520:292::-;11660:34;11656:1;11648:6;11644:14;11637:58;11729:34;11724:2;11716:6;11712:15;11705:59;11798:6;11793:2;11785:6;11781:15;11774:31;11520:292;:::o;11818:366::-;11960:3;11981:67;12045:2;12040:3;11981:67;:::i;:::-;11974:74;;12057:93;12146:3;12057:93;:::i;:::-;12175:2;12170:3;12166:12;12159:19;;11818:366;;;:::o;12190:419::-;12356:4;12394:2;12383:9;12379:18;12371:26;;12443:9;12437:4;12433:20;12429:1;12418:9;12414:17;12407:47;12471:131;12597:4;12471:131;:::i;:::-;12463:139;;12190:419;;;:::o;12615:249::-;12755:34;12751:1;12743:6;12739:14;12732:58;12824:32;12819:2;12811:6;12807:15;12800:57;12615:249;:::o;12870:366::-;13012:3;13033:67;13097:2;13092:3;13033:67;:::i;:::-;13026:74;;13109:93;13198:3;13109:93;:::i;:::-;13227:2;13222:3;13218:12;13211:19;;12870:366;;;:::o;13242:419::-;13408:4;13446:2;13435:9;13431:18;13423:26;;13495:9;13489:4;13485:20;13481:1;13470:9;13466:17;13459:47;13523:131;13649:4;13523:131;:::i;:::-;13515:139;;13242:419;;;:::o;13667:188::-;13705:3;13724:18;13740:1;13724:18;:::i;:::-;13719:23;;13756:18;13772:1;13756:18;:::i;:::-;13751:23;;13797:1;13794;13790:9;13783:16;;13820:4;13815:3;13812:13;13809:39;;;13828:18;;:::i;:::-;13809:39;13667:188;;;;:::o;13861:292::-;14001:34;13997:1;13989:6;13985:14;13978:58;14070:34;14065:2;14057:6;14053:15;14046:59;14139:6;14134:2;14126:6;14122:15;14115:31;13861:292;:::o;14159:366::-;14301:3;14322:67;14386:2;14381:3;14322:67;:::i;:::-;14315:74;;14398:93;14487:3;14398:93;:::i;:::-;14516:2;14511:3;14507:12;14500:19;;14159:366;;;:::o;14531:419::-;14697:4;14735:2;14724:9;14720:18;14712:26;;14784:9;14778:4;14774:20;14770:1;14759:9;14755:17;14748:47;14812:131;14938:4;14812:131;:::i;:::-;14804:139;;14531:419;;;:::o;14956:242::-;15096:34;15092:1;15084:6;15080:14;15073:58;15165:25;15160:2;15152:6;15148:15;15141:50;14956:242;:::o;15204:366::-;15346:3;15367:67;15431:2;15426:3;15367:67;:::i;:::-;15360:74;;15443:93;15532:3;15443:93;:::i;:::-;15561:2;15556:3;15552:12;15545:19;;15204:366;;;:::o;15576:419::-;15742:4;15780:2;15769:9;15765:18;15757:26;;15829:9;15823:4;15819:20;15815:1;15804:9;15800:17;15793:47;15857:131;15983:4;15857:131;:::i;:::-;15849:139;;15576:419;;;:::o;16001:228::-;16141:34;16137:1;16129:6;16125:14;16118:58;16210:11;16205:2;16197:6;16193:15;16186:36;16001:228;:::o;16235:366::-;16377:3;16398:67;16462:2;16457:3;16398:67;:::i;:::-;16391:74;;16474:93;16563:3;16474:93;:::i;:::-;16592:2;16587:3;16583:12;16576:19;;16235:366;;;:::o;16607:419::-;16773:4;16811:2;16800:9;16796:18;16788:26;;16860:9;16854:4;16850:20;16846:1;16835:9;16831:17;16824:47;16888:131;17014:4;16888:131;:::i;:::-;16880:139;;16607:419;;;:::o;17032:239::-;17172:34;17168:1;17160:6;17156:14;17149:58;17241:22;17236:2;17228:6;17224:15;17217:47;17032:239;:::o;17277:366::-;17419:3;17440:67;17504:2;17499:3;17440:67;:::i;:::-;17433:74;;17516:93;17605:3;17516:93;:::i;:::-;17634:2;17629:3;17625:12;17618:19;;17277:366;;;:::o;17649:419::-;17815:4;17853:2;17842:9;17838:18;17830:26;;17902:9;17896:4;17892:20;17888:1;17877:9;17873:17;17866:47;17930:131;18056:4;17930:131;:::i;:::-;17922:139;;17649:419;;;:::o;18074:224::-;18214:34;18210:1;18202:6;18198:14;18191:58;18283:7;18278:2;18270:6;18266:15;18259:32;18074:224;:::o;18304:366::-;18446:3;18467:67;18531:2;18526:3;18467:67;:::i;:::-;18460:74;;18543:93;18632:3;18543:93;:::i;:::-;18661:2;18656:3;18652:12;18645:19;;18304:366;;;:::o;18676:419::-;18842:4;18880:2;18869:9;18865:18;18857:26;;18929:9;18923:4;18919:20;18915:1;18904:9;18900:17;18893:47;18957:131;19083:4;18957:131;:::i;:::-;18949:139;;18676:419;;;:::o;19101:295::-;19241:34;19237:1;19229:6;19225:14;19218:58;19310:34;19305:2;19297:6;19293:15;19286:59;19379:9;19374:2;19366:6;19362:15;19355:34;19101:295;:::o;19402:366::-;19544:3;19565:67;19629:2;19624:3;19565:67;:::i;:::-;19558:74;;19641:93;19730:3;19641:93;:::i;:::-;19759:2;19754:3;19750:12;19743:19;;19402:366;;;:::o;19774:419::-;19940:4;19978:2;19967:9;19963:18;19955:26;;20027:9;20021:4;20017:20;20013:1;20002:9;19998:17;19991:47;20055:131;20181:4;20055:131;:::i;:::-;20047:139;;19774:419;;;:::o;20199:225::-;20339:34;20335:1;20327:6;20323:14;20316:58;20408:8;20403:2;20395:6;20391:15;20384:33;20199:225;:::o;20430:366::-;20572:3;20593:67;20657:2;20652:3;20593:67;:::i;:::-;20586:74;;20669:93;20758:3;20669:93;:::i;:::-;20787:2;20782:3;20778:12;20771:19;;20430:366;;;:::o;20802:419::-;20968:4;21006:2;20995:9;20991:18;20983:26;;21055:9;21049:4;21045:20;21041:1;21030:9;21026:17;21019:47;21083:131;21209:4;21083:131;:::i;:::-;21075:139;;20802:419;;;:::o;21227:223::-;21367:34;21363:1;21355:6;21351:14;21344:58;21436:6;21431:2;21423:6;21419:15;21412:31;21227:223;:::o;21456:366::-;21598:3;21619:67;21683:2;21678:3;21619:67;:::i;:::-;21612:74;;21695:93;21784:3;21695:93;:::i;:::-;21813:2;21808:3;21804:12;21797:19;;21456:366;;;:::o;21828:419::-;21994:4;22032:2;22021:9;22017:18;22009:26;;22081:9;22075:4;22071:20;22067:1;22056:9;22052:17;22045:47;22109:131;22235:4;22109:131;:::i;:::-;22101:139;;21828:419;;;:::o;22253:221::-;22393:34;22389:1;22381:6;22377:14;22370:58;22462:4;22457:2;22449:6;22445:15;22438:29;22253:221;:::o;22480:366::-;22622:3;22643:67;22707:2;22702:3;22643:67;:::i;:::-;22636:74;;22719:93;22808:3;22719:93;:::i;:::-;22837:2;22832:3;22828:12;22821:19;;22480:366;;;:::o;22852:419::-;23018:4;23056:2;23045:9;23041:18;23033:26;;23105:9;23099:4;23095:20;23091:1;23080:9;23076:17;23069:47;23133:131;23259:4;23133:131;:::i;:::-;23125:139;;22852:419;;;:::o;23277:182::-;23417:34;23413:1;23405:6;23401:14;23394:58;23277:182;:::o;23465:366::-;23607:3;23628:67;23692:2;23687:3;23628:67;:::i;:::-;23621:74;;23704:93;23793:3;23704:93;:::i;:::-;23822:2;23817:3;23813:12;23806:19;;23465:366;;;:::o;23837:419::-;24003:4;24041:2;24030:9;24026:18;24018:26;;24090:9;24084:4;24080:20;24076:1;24065:9;24061:17;24054:47;24118:131;24244:4;24118:131;:::i;:::-;24110:139;;23837:419;;;:::o;24262:179::-;24402:31;24398:1;24390:6;24386:14;24379:55;24262:179;:::o;24447:366::-;24589:3;24610:67;24674:2;24669:3;24610:67;:::i;:::-;24603:74;;24686:93;24775:3;24686:93;:::i;:::-;24804:2;24799:3;24795:12;24788:19;;24447:366;;;:::o;24819:419::-;24985:4;25023:2;25012:9;25008:18;25000:26;;25072:9;25066:4;25062:20;25058:1;25047:9;25043:17;25036:47;25100:131;25226:4;25100:131;:::i;:::-;25092:139;;24819:419;;;:::o;25244:231::-;25384:34;25380:1;25372:6;25368:14;25361:58;25453:14;25448:2;25440:6;25436:15;25429:39;25244:231;:::o;25481:366::-;25623:3;25644:67;25708:2;25703:3;25644:67;:::i;:::-;25637:74;;25720:93;25809:3;25720:93;:::i;:::-;25838:2;25833:3;25829:12;25822:19;;25481:366;;;:::o;25853:419::-;26019:4;26057:2;26046:9;26042:18;26034:26;;26106:9;26100:4;26096:20;26092:1;26081:9;26077:17;26070:47;26134:131;26260:4;26134:131;:::i;:::-;26126:139;;25853:419;;;:::o;26278:222::-;26418:34;26414:1;26406:6;26402:14;26395:58;26487:5;26482:2;26474:6;26470:15;26463:30;26278:222;:::o;26506:366::-;26648:3;26669:67;26733:2;26728:3;26669:67;:::i;:::-;26662:74;;26745:93;26834:3;26745:93;:::i;:::-;26863:2;26858:3;26854:12;26847:19;;26506:366;;;:::o;26878:419::-;27044:4;27082:2;27071:9;27067:18;27059:26;;27131:9;27125:4;27121:20;27117:1;27106:9;27102:17;27095:47;27159:131;27285:4;27159:131;:::i;:::-;27151:139;;26878:419;;;:::o;27303:310::-;27443:34;27439:1;27431:6;27427:14;27420:58;27512:34;27507:2;27499:6;27495:15;27488:59;27581:24;27576:2;27568:6;27564:15;27557:49;27303:310;:::o;27619:366::-;27761:3;27782:67;27846:2;27841:3;27782:67;:::i;:::-;27775:74;;27858:93;27947:3;27858:93;:::i;:::-;27976:2;27971:3;27967:12;27960:19;;27619:366;;;:::o;27991:419::-;28157:4;28195:2;28184:9;28180:18;28172:26;;28244:9;28238:4;28234:20;28230:1;28219:9;28215:17;28208:47;28272:131;28398:4;28272:131;:::i;:::-;28264:139;;27991:419;;;:::o;28416:194::-;28456:4;28476:20;28494:1;28476:20;:::i;:::-;28471:25;;28510:20;28528:1;28510:20;:::i;:::-;28505:25;;28554:1;28551;28547:9;28539:17;;28578:1;28572:4;28569:11;28566:37;;;28583:18;;:::i;:::-;28566:37;28416:194;;;;:::o;28616:60::-;28644:3;28665:5;28658:12;;28616:60;;;:::o;28682:138::-;28730:9;28763:51;28781:32;28790:22;28806:5;28790:22;:::i;:::-;28781:32;:::i;:::-;28763:51;:::i;:::-;28750:64;;28682:138;;;:::o;28826:127::-;28911:35;28940:5;28911:35;:::i;:::-;28906:3;28899:48;28826:127;;:::o;28959:324::-;29076:4;29114:2;29103:9;29099:18;29091:26;;29127:69;29193:1;29182:9;29178:17;29169:6;29127:69;:::i;:::-;29206:70;29272:2;29261:9;29257:18;29248:6;29206:70;:::i;:::-;28959:324;;;;;:::o;29289:221::-;29429:34;29425:1;29417:6;29413:14;29406:58;29498:4;29493:2;29485:6;29481:15;29474:29;29289:221;:::o;29516:366::-;29658:3;29679:67;29743:2;29738:3;29679:67;:::i;:::-;29672:74;;29755:93;29844:3;29755:93;:::i;:::-;29873:2;29868:3;29864:12;29857:19;;29516:366;;;:::o;29888:419::-;30054:4;30092:2;30081:9;30077:18;30069:26;;30141:9;30135:4;30131:20;30127:1;30116:9;30112:17;30105:47;30169:131;30295:4;30169:131;:::i;:::-;30161:139;;29888:419;;;:::o;30313:320::-;30428:4;30466:2;30455:9;30451:18;30443:26;;30479:71;30547:1;30536:9;30532:17;30523:6;30479:71;:::i;:::-;30560:66;30622:2;30611:9;30607:18;30598:6;30560:66;:::i;:::-;30313:320;;;;;:::o;30639:142::-;30689:9;30722:53;30740:34;30749:24;30767:5;30749:24;:::i;:::-;30740:34;:::i;:::-;30722:53;:::i;:::-;30709:66;;30639:142;;;:::o;30787:126::-;30837:9;30870:37;30901:5;30870:37;:::i;:::-;30857:50;;30787:126;;;:::o;30919:134::-;30977:9;31010:37;31041:5;31010:37;:::i;:::-;30997:50;;30919:134;;;:::o;31059:147::-;31154:45;31193:5;31154:45;:::i;:::-;31149:3;31142:58;31059:147;;:::o;31212:238::-;31313:4;31351:2;31340:9;31336:18;31328:26;;31364:79;31440:1;31429:9;31425:17;31416:6;31364:79;:::i;:::-;31212:238;;;;:::o;31456:410::-;31496:7;31519:20;31537:1;31519:20;:::i;:::-;31514:25;;31553:20;31571:1;31553:20;:::i;:::-;31548:25;;31608:1;31605;31601:9;31630:30;31648:11;31630:30;:::i;:::-;31619:41;;31809:1;31800:7;31796:15;31793:1;31790:22;31770:1;31763:9;31743:83;31720:139;;31839:18;;:::i;:::-;31720:139;31504:362;31456:410;;;;:::o;31872:220::-;32012:34;32008:1;32000:6;31996:14;31989:58;32081:3;32076:2;32068:6;32064:15;32057:28;31872:220;:::o;32098:366::-;32240:3;32261:67;32325:2;32320:3;32261:67;:::i;:::-;32254:74;;32337:93;32426:3;32337:93;:::i;:::-;32455:2;32450:3;32446:12;32439:19;;32098:366;;;:::o;32470:419::-;32636:4;32674:2;32663:9;32659:18;32651:26;;32723:9;32717:4;32713:20;32709:1;32698:9;32694:17;32687:47;32751:131;32877:4;32751:131;:::i;:::-;32743:139;;32470:419;;;:::o;32895:180::-;32943:77;32940:1;32933:88;33040:4;33037:1;33030:15;33064:4;33061:1;33054:15;33081:185;33121:1;33138:20;33156:1;33138:20;:::i;:::-;33133:25;;33172:20;33190:1;33172:20;:::i;:::-;33167:25;;33211:1;33201:35;;33216:18;;:::i;:::-;33201:35;33258:1;33255;33251:9;33246:14;;33081:185;;;;:::o;33272:224::-;33412:34;33408:1;33400:6;33396:14;33389:58;33481:7;33476:2;33468:6;33464:15;33457:32;33272:224;:::o;33502:366::-;33644:3;33665:67;33729:2;33724:3;33665:67;:::i;:::-;33658:74;;33741:93;33830:3;33741:93;:::i;:::-;33859:2;33854:3;33850:12;33843:19;;33502:366;;;:::o;33874:419::-;34040:4;34078:2;34067:9;34063:18;34055:26;;34127:9;34121:4;34117:20;34113:1;34102:9;34098:17;34091:47;34155:131;34281:4;34155:131;:::i;:::-;34147:139;;33874:419;;;:::o;34299:222::-;34439:34;34435:1;34427:6;34423:14;34416:58;34508:5;34503:2;34495:6;34491:15;34484:30;34299:222;:::o;34527:366::-;34669:3;34690:67;34754:2;34749:3;34690:67;:::i;:::-;34683:74;;34766:93;34855:3;34766:93;:::i;:::-;34884:2;34879:3;34875:12;34868:19;;34527:366;;;:::o;34899:419::-;35065:4;35103:2;35092:9;35088:18;35080:26;;35152:9;35146:4;35142:20;35138:1;35127:9;35123:17;35116:47;35180:131;35306:4;35180:131;:::i;:::-;35172:139;;34899:419;;;:::o;35324:225::-;35464:34;35460:1;35452:6;35448:14;35441:58;35533:8;35528:2;35520:6;35516:15;35509:33;35324:225;:::o;35555:366::-;35697:3;35718:67;35782:2;35777:3;35718:67;:::i;:::-;35711:74;;35794:93;35883:3;35794:93;:::i;:::-;35912:2;35907:3;35903:12;35896:19;;35555:366;;;:::o;35927:419::-;36093:4;36131:2;36120:9;36116:18;36108:26;;36180:9;36174:4;36170:20;36166:1;36155:9;36151:17;36144:47;36208:131;36334:4;36208:131;:::i;:::-;36200:139;;35927:419;;;:::o;36352:180::-;36400:77;36397:1;36390:88;36497:4;36494:1;36487:15;36521:4;36518:1;36511:15;36538:180;36586:77;36583:1;36576:88;36683:4;36680:1;36673:15;36707:4;36704:1;36697:15;36724:143;36781:5;36812:6;36806:13;36797:22;;36828:33;36855:5;36828:33;:::i;:::-;36724:143;;;;:::o;36873:351::-;36943:6;36992:2;36980:9;36971:7;36967:23;36963:32;36960:119;;;36998:79;;:::i;:::-;36960:119;37118:1;37143:64;37199:7;37190:6;37179:9;37175:22;37143:64;:::i;:::-;37133:74;;37089:128;36873:351;;;;:::o;37230:85::-;37275:7;37304:5;37293:16;;37230:85;;;:::o;37321:158::-;37379:9;37412:61;37430:42;37439:32;37465:5;37439:32;:::i;:::-;37430:42;:::i;:::-;37412:61;:::i;:::-;37399:74;;37321:158;;;:::o;37485:147::-;37580:45;37619:5;37580:45;:::i;:::-;37575:3;37568:58;37485:147;;:::o;37638:114::-;37705:6;37739:5;37733:12;37723:22;;37638:114;;;:::o;37758:184::-;37857:11;37891:6;37886:3;37879:19;37931:4;37926:3;37922:14;37907:29;;37758:184;;;;:::o;37948:132::-;38015:4;38038:3;38030:11;;38068:4;38063:3;38059:14;38051:22;;37948:132;;;:::o;38086:108::-;38163:24;38181:5;38163:24;:::i;:::-;38158:3;38151:37;38086:108;;:::o;38200:179::-;38269:10;38290:46;38332:3;38324:6;38290:46;:::i;:::-;38368:4;38363:3;38359:14;38345:28;;38200:179;;;;:::o;38385:113::-;38455:4;38487;38482:3;38478:14;38470:22;;38385:113;;;:::o;38534:732::-;38653:3;38682:54;38730:5;38682:54;:::i;:::-;38752:86;38831:6;38826:3;38752:86;:::i;:::-;38745:93;;38862:56;38912:5;38862:56;:::i;:::-;38941:7;38972:1;38957:284;38982:6;38979:1;38976:13;38957:284;;;39058:6;39052:13;39085:63;39144:3;39129:13;39085:63;:::i;:::-;39078:70;;39171:60;39224:6;39171:60;:::i;:::-;39161:70;;39017:224;39004:1;39001;38997:9;38992:14;;38957:284;;;38961:14;39257:3;39250:10;;38658:608;;;38534:732;;;;:::o;39272:831::-;39535:4;39573:3;39562:9;39558:19;39550:27;;39587:71;39655:1;39644:9;39640:17;39631:6;39587:71;:::i;:::-;39668:80;39744:2;39733:9;39729:18;39720:6;39668:80;:::i;:::-;39795:9;39789:4;39785:20;39780:2;39769:9;39765:18;39758:48;39823:108;39926:4;39917:6;39823:108;:::i;:::-;39815:116;;39941:72;40009:2;39998:9;39994:18;39985:6;39941:72;:::i;:::-;40023:73;40091:3;40080:9;40076:19;40067:6;40023:73;:::i;:::-;39272:831;;;;;;;;:::o;40109:117::-;40218:1;40215;40208:12;40232:281;40315:27;40337:4;40315:27;:::i;:::-;40307:6;40303:40;40445:6;40433:10;40430:22;40409:18;40397:10;40394:34;40391:62;40388:88;;;40456:18;;:::i;:::-;40388:88;40496:10;40492:2;40485:22;40275:238;40232:281;;:::o;40519:129::-;40553:6;40580:20;;:::i;:::-;40570:30;;40609:33;40637:4;40629:6;40609:33;:::i;:::-;40519:129;;;:::o;40654:311::-;40731:4;40821:18;40813:6;40810:30;40807:56;;;40843:18;;:::i;:::-;40807:56;40893:4;40885:6;40881:17;40873:25;;40953:4;40947;40943:15;40935:23;;40654:311;;;:::o;40971:117::-;41080:1;41077;41070:12;41094:143;41151:5;41182:6;41176:13;41167:22;;41198:33;41225:5;41198:33;:::i;:::-;41094:143;;;;:::o;41260:732::-;41367:5;41392:81;41408:64;41465:6;41408:64;:::i;:::-;41392:81;:::i;:::-;41383:90;;41493:5;41522:6;41515:5;41508:21;41556:4;41549:5;41545:16;41538:23;;41609:4;41601:6;41597:17;41589:6;41585:30;41638:3;41630:6;41627:15;41624:122;;;41657:79;;:::i;:::-;41624:122;41772:6;41755:231;41789:6;41784:3;41781:15;41755:231;;;41864:3;41893:48;41937:3;41925:10;41893:48;:::i;:::-;41888:3;41881:61;41971:4;41966:3;41962:14;41955:21;;41831:155;41815:4;41810:3;41806:14;41799:21;;41755:231;;;41759:21;41373:619;;41260:732;;;;;:::o;42015:385::-;42097:5;42146:3;42139:4;42131:6;42127:17;42123:27;42113:122;;42154:79;;:::i;:::-;42113:122;42264:6;42258:13;42289:105;42390:3;42382:6;42375:4;42367:6;42363:17;42289:105;:::i;:::-;42280:114;;42103:297;42015:385;;;;:::o;42406:554::-;42501:6;42550:2;42538:9;42529:7;42525:23;42521:32;42518:119;;;42556:79;;:::i;:::-;42518:119;42697:1;42686:9;42682:17;42676:24;42727:18;42719:6;42716:30;42713:117;;;42749:79;;:::i;:::-;42713:117;42854:89;42935:7;42926:6;42915:9;42911:22;42854:89;:::i;:::-;42844:99;;42647:306;42406:554;;;;:::o;42966:147::-;43067:11;43104:3;43089:18;;42966:147;;;;:::o;43119:114::-;;:::o;43239:398::-;43398:3;43419:83;43500:1;43495:3;43419:83;:::i;:::-;43412:90;;43511:93;43600:3;43511:93;:::i;:::-;43629:1;43624:3;43620:11;43613:18;;43239:398;;;:::o;43643:379::-;43827:3;43849:147;43992:3;43849:147;:::i;:::-;43842:154;;44013:3;44006:10;;43643:379;;;:::o
Swarm Source
ipfs://2a1f71857e67541ec3dc6b7c34de39e81d1bcfa96d51985f9b3ea6b5f13dd756
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.