ERC-20
Overview
Max Total Supply
10,000,000 DIAMONDS
Holders
6
Market
Price
$0.00 @ 0.000000 S
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
8,704,046.078846349 DIAMONDSValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
DIAMONDS
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at SonicScan.org on 2025-02-04 */ // SPDX-License-Identifier: Unlicensed // Inspired by https://reflect.finance/ pragma solidity 0.8.0; library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}( data ); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval( address indexed owner, address indexed spender, uint256 value ); } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract DIAMONDS is Context, IERC20, Ownable, ReentrancyGuard { using SafeMath for uint256; using Address for address; struct Fees { uint256 reflectFee; uint256 rebalanceFee; uint256 burnFee; } address private DiamondsAddress; address private immutable LCX; IUniswapV2Router02 public immutable UniswapV2Router; // IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); mapping(address => uint256) private _rOwned; mapping(address => uint256) private _tOwned; mapping(address => mapping(address => uint256)) private _allowances; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcluded; address[] private _excluded; address private constant deadWallet = 0x000000000000000000000000000000000000dEaD; uint256 private constant MAX = ~uint256(0); uint256 private constant _tTotal = 1e16; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private constant _name = "Equalizer Diamonds"; string private constant _symbol = "DIAMONDS"; uint8 private constant _decimals = 9; uint256 private _reflectionFee = 70; uint256 private _rebalancingFee = 0; uint256 private _burningFee = 60; event RebalanceAndBurn(uint256, uint256, uint256); event SetDiamondsAddress(address); event ApproveDiamondsAddress(address, address, uint256); event ExcludeAccount(address); event IncludeAccount(address); event ChangeReflectionFee(uint256); event ChangeReBalancingFee(uint256); event ChangeBurnFee(uint256); event ExcludeFromFee(address); event IncludeInFee(address); constructor(address _lcxAddress, address _uniswapV2Address) { require(_lcxAddress != address(0), "Address should not be zero address"); require(_uniswapV2Address != address(0), "Address should not be zero address"); LCX = _lcxAddress; UniswapV2Router = IUniswapV2Router02(_uniswapV2Address); _rOwned[owner()] = _rTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[_uniswapV2Address] = true; emit Transfer(address(0), owner(), _tTotal); } function name() external pure returns (string memory) { return _name; } function symbol() external pure returns (string memory) { return _symbol; } function decimals() external pure returns (uint8) { return _decimals; } function totalSupply() external pure override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) external override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) external view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) external override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function setDiamondsAddress(address _diamonds) external onlyOwner { require(_diamonds != address(0), "Address should not be zero address"); DiamondsAddress = address(_diamonds); emit SetDiamondsAddress(_diamonds); } function approveDiamondSC() external onlyOwner returns (bool) { _approve(msg.sender, DiamondsAddress, _tTotal); emit ApproveDiamondsAddress(msg.sender, DiamondsAddress, _tTotal); return true; } function transferFrom( address sender, address recipient, uint256 amount ) external override returns (bool) { _transfer(sender, recipient, amount); _approve( sender, _msgSender(), _allowances[sender][_msgSender()].sub( amount, "ERC20: transfer amount exceeds allowance" ) ); return true; } function increaseAllowance(address spender, uint256 addedValue) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue) ); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) external virtual returns (bool) { _approve( _msgSender(), spender, _allowances[_msgSender()][spender].sub( subtractedValue, "ERC20: decreased allowance below zero" ) ); return true; } function isExcluded(address account) external view returns (bool) { return _isExcluded[account]; } function totalFees() external view returns (uint256) { return _tFeeTotal; } function reflect(uint256 tAmount) external { address sender = _msgSender(); require( !_isExcluded[sender], "Excluded addresses cannot call this function" ); (uint256 rAmount, , , , ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) external view returns (uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount, , , , ) = _getValues(tAmount); return rAmount; } else { (, uint256 rTransferAmount, , , ) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns (uint256) { require( rAmount <= _rTotal, "Amount must be less than total reflections" ); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeAccount(address account) external onlyOwner { require(!_isExcluded[account], "Account is already excluded"); if (_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); emit ExcludeAccount(account); } function includeAccount(address account) external onlyOwner { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } emit IncludeAccount(account); } function _approve( address owner, address spender, uint256 amount ) private { 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); } function _transfer( address sender, address recipient, uint256 amount ) private { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); uint256 currentReflectionFee = _reflectionFee; uint256 currentRebalancingFee = _rebalancingFee; uint256 currentBurningFee = _burningFee; if (_isExcludedFromFee[sender]) { _reflectionFee = 0; _rebalancingFee = 0; _burningFee = 0; } if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { _reflectionFee = currentReflectionFee; _rebalancingFee = currentRebalancingFee; _burningFee = currentBurningFee; } } function _transferStandard( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, Fees memory rFees, uint256 tTransferAmount, Fees memory tFees ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _reflectFee(rFees.reflectFee, tFees.reflectFee); _reBalanceFee(rFees.rebalanceFee, tFees.rebalanceFee); _burnFee(rFees.burnFee, tFees.burnFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, Fees memory rFees, uint256 tTransferAmount, Fees memory tFees ) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _reflectFee(rFees.reflectFee, tFees.reflectFee); _reBalanceFee(rFees.rebalanceFee, tFees.rebalanceFee); _burnFee(rFees.burnFee, tFees.burnFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, Fees memory rFees, uint256 tTransferAmount, Fees memory tFees ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _reflectFee(rFees.reflectFee, tFees.reflectFee); _reBalanceFee(rFees.rebalanceFee, tFees.rebalanceFee); _burnFee(rFees.burnFee, tFees.burnFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded( address sender, address recipient, uint256 tAmount ) private { ( uint256 rAmount, uint256 rTransferAmount, Fees memory rFees, uint256 tTransferAmount, Fees memory tFees ) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _reflectFee(rFees.reflectFee, tFees.reflectFee); _reBalanceFee(rFees.rebalanceFee, tFees.rebalanceFee); _burnFee(rFees.burnFee, tFees.burnFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rReflectFee, uint256 tReflectFee) private { _rTotal = _rTotal.sub(rReflectFee); _tFeeTotal = _tFeeTotal.add(tReflectFee); } function _reBalanceFee(uint256 rRebalanceFee, uint256 tRebalanceFee) private { _rOwned[address(this)] = _rOwned[address(this)].add(rRebalanceFee); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tRebalanceFee); } function _burnFee(uint256 rBurnFee, uint256 tBurnFee) private { _rOwned[address(this)] = _rOwned[address(this)].add(rBurnFee); if (_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tBurnFee); } function _getValues(uint256 tAmount) private view returns ( uint256, uint256, Fees memory, uint256, Fees memory ) { (uint256 tTransferAmount, Fees memory tFees) = _getTValues(tAmount); uint256 currentRate = _getRate(); ( uint256 rAmount, uint256 rTransferAmount, Fees memory rFees ) = _getRValues(tAmount, tFees, currentRate); return (rAmount, rTransferAmount, rFees, tTransferAmount, tFees); } function _getTValues(uint256 tAmount) private view returns (uint256, Fees memory) { Fees memory tFees; tFees.reflectFee = tAmount.mul(_reflectionFee).div(1000); tFees.rebalanceFee = tAmount.mul(_rebalancingFee).div(1000); tFees.burnFee = tAmount.mul(_burningFee).div(1000); uint256 tTransferAmount = tAmount .sub(tFees.reflectFee) .sub(tFees.rebalanceFee) .sub(tFees.burnFee); return (tTransferAmount, tFees); } function _getRValues( uint256 tAmount, Fees memory tFees, uint256 currentRate ) private pure returns ( uint256, uint256, Fees memory ) { Fees memory rFees; uint256 rAmount = tAmount.mul(currentRate); rFees.reflectFee = tFees.reflectFee.mul(currentRate); rFees.rebalanceFee = tFees.rebalanceFee.mul(currentRate); rFees.burnFee = tFees.burnFee.mul(currentRate); uint256 rTransferAmount = rAmount .sub(rFees.reflectFee) .sub(rFees.rebalanceFee) .sub(rFees.burnFee); return (rAmount, rTransferAmount, rFees); } function _getRate() private view returns (uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns (uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if ( _rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply ) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function reflectionFee() external view returns (uint256) { return _reflectionFee; } function changeReflectionFee(uint256 _newFee) external onlyOwner returns (bool) { _reflectionFee = _newFee; emit ChangeReflectionFee(_newFee); return true; } function rebalancingFee() external view returns (uint256) { return _rebalancingFee; } function changeReBalancingFee(uint256 _newFee) external onlyOwner returns (bool) { _rebalancingFee = _newFee; emit ChangeReBalancingFee(_newFee); return true; } function burningFee() external view returns (uint256) { return _burningFee; } function changeBurnFee(uint256 _newFee) external onlyOwner returns (bool) { _burningFee = _newFee; emit ChangeBurnFee(_newFee); return true; } function excludeFromFee(address account) external onlyOwner returns (bool) { require(account != address(0), "ERC20: account is the zero address"); _isExcludedFromFee[account] = true; emit ExcludeFromFee(account); return true; } function includeInFee(address account) external onlyOwner returns (bool) { require(account != address(0), "ERC20: account is the zero address"); _isExcludedFromFee[account] = false; emit IncludeInFee(account); return true; } function rebalanceAndBurn() external nonReentrant returns (bool) { uint256 balanceInContract = balanceOf(address(this)); uint256 rebalanceAmount = balanceInContract.mul(_rebalancingFee).div(_rebalancingFee.add(_burningFee)); uint256 burnAmount = balanceInContract.mul(_burningFee).div(_rebalancingFee.add(_burningFee)); emit RebalanceAndBurn(balanceInContract, rebalanceAmount, burnAmount); if (rebalanceAmount > 0) { _swap(rebalanceAmount); // Only call _swap if rebalanceAmount is greater than zero } _burn(burnAmount); // Burn tokens normally return true; } function _swap(uint256 rebalanceAmount) internal { address[] memory path = new address[](2); path[0] = address(this); path[1] = LCX; _approve(address(this), address(UniswapV2Router), rebalanceAmount); UniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens( rebalanceAmount, 0, // Accept any amount path, owner(), block.timestamp ); } function _burn(uint256 burnAmount) internal { _transfer(address(this), deadWallet, burnAmount); emit Transfer(address(this), deadWallet, burnAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_lcxAddress","type":"address"},{"internalType":"address","name":"_uniswapV2Address","type":"address"}],"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":"","type":"address"},{"indexed":false,"internalType":"address","name":"","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ApproveDiamondsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ChangeBurnFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ChangeReBalancingFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"ChangeReflectionFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"ExcludeAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"ExcludeFromFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"IncludeAccount","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"IncludeInFee","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"RebalanceAndBurn","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"SetDiamondsAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"UniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"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":[],"name":"approveDiamondSC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burningFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"changeBurnFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"changeReBalancingFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"changeReflectionFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebalanceAndBurn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebalancingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_diamonds","type":"address"}],"name":"setDiamondsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c0604052662386f26fc100006000196200001b91906200066b565b6000196200002a9190620005f2565b6009556046600b556000600c55603c600d553480156200004957600080fd5b506040516200568a3803806200568a83398181016040528101906200006f9190620004e8565b6200008f62000083620003dc60201b60201c565b620003e460201b60201c565b60018081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000109576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200010090620005a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156200017c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200017390620005a2565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1660601b815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1660601b815250506009546003600062000201620004a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060016006600062000255620004a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000366620004a860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef662386f26fc10000604051620003cc9190620005c4565b60405180910390a350506200071b565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050620004e28162000701565b92915050565b60008060408385031215620004fc57600080fd5b60006200050c85828601620004d1565b92505060206200051f85828601620004d1565b9150509250929050565b600062000538602283620005e1565b91507f416464726573732073686f756c64206e6f74206265207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6200059c8162000661565b82525050565b60006020820190508181036000830152620005bd8162000529565b9050919050565b6000602082019050620005db600083018462000591565b92915050565b600082825260208201905092915050565b6000620005ff8262000661565b91506200060c8362000661565b925082821015620006225762000621620006a3565b5b828203905092915050565b60006200063a8262000641565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620006788262000661565b9150620006858362000661565b925082620006985762000697620006d2565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6200070c816200062d565b81146200071857600080fd5b50565b60805160601c60a05160601c614f35620007556000396000818161084a01528181612b360152612b5d01526000612a9d0152614f356000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063a9059cbb116100ad578063f2cc0c181161007c578063f2cc0c181461062c578063f2fde38b14610648578063f84354f114610664578063f9cab16a14610680578063fc5af7341461069e576101fb565b8063a9059cbb1461056c578063cba0e9961461059c578063dd62ed3e146105cc578063ea2f0b37146105fc576101fb565b80638da5cb5b116100e95780638da5cb5b146104e257806390f712cc1461050057806395d89b411461051e578063a457c2d71461053c576101fb565b8063715018a61461047e5780637f6adbfe14610488578063812d816a146104a657806383ad7994146104c4576101fb565b80632ac85c2f116101925780633a94a68a116101615780633a94a68a146103be578063437823ec146103ee5780634549b0391461041e57806370a082311461044e576101fb565b80632ac85c2f146103245780632d83811914610340578063313ce56714610370578063395093511461038e576101fb565b806313114a9d116101ce57806313114a9d1461028857806318160ddd146102a657806323b872dd146102c457806329805558146102f4576101fb565b8063053ab18214610200578063055add0d1461021c57806306fdde031461023a578063095ea7b314610258575b600080fd5b61021a6004803603810190610215919061409d565b6106ce565b005b610224610848565b6040516102319190614869565b60405180910390f35b61024261086c565b60405161024f9190614884565b60405180910390f35b610272600480360381019061026d9190614061565b6108a9565b60405161027f919061484e565b60405180910390f35b6102906108c7565b60405161029d9190614ac6565b60405180910390f35b6102ae6108d1565b6040516102bb9190614ac6565b60405180910390f35b6102de60048036038101906102d99190614012565b6108e0565b6040516102eb919061484e565b60405180910390f35b61030e6004803603810190610309919061409d565b6109b9565b60405161031b919061484e565b60405180910390f35b61033e60048036038101906103399190613fad565b610a7e565b005b61035a6004803603810190610355919061409d565b610be5565b6040516103679190614ac6565b60405180910390f35b610378610c53565b6040516103859190614b72565b60405180910390f35b6103a860048036038101906103a39190614061565b610c5c565b6040516103b5919061484e565b60405180910390f35b6103d860048036038101906103d3919061409d565b610d0f565b6040516103e5919061484e565b60405180910390f35b61040860048036038101906104039190613fad565b610dd4565b604051610415919061484e565b60405180910390f35b610438600480360381019061043391906140c6565b610f5a565b6040516104459190614ac6565b60405180910390f35b61046860048036038101906104639190613fad565b610fe1565b6040516104759190614ac6565b60405180910390f35b6104866110cc565b005b610490611154565b60405161049d919061484e565b60405180910390f35b6104ae61129b565b6040516104bb919061484e565b60405180910390f35b6104cc6113b8565b6040516104d99190614ac6565b60405180910390f35b6104ea6113c2565b6040516104f791906147fc565b60405180910390f35b6105086113eb565b6040516105159190614ac6565b60405180910390f35b6105266113f5565b6040516105339190614884565b60405180910390f35b61055660048036038101906105519190614061565b611432565b604051610563919061484e565b60405180910390f35b61058660048036038101906105819190614061565b6114ff565b604051610593919061484e565b60405180910390f35b6105b660048036038101906105b19190613fad565b61151d565b6040516105c3919061484e565b60405180910390f35b6105e660048036038101906105e19190613fd6565b611573565b6040516105f39190614ac6565b60405180910390f35b61061660048036038101906106119190613fad565b6115fa565b604051610623919061484e565b60405180910390f35b61064660048036038101906106419190613fad565b611780565b005b610662600480360381019061065d9190613fad565b611a52565b005b61067e60048036038101906106799190613fad565b611b4a565b005b610688611f4f565b6040516106959190614ac6565b60405180910390f35b6106b860048036038101906106b3919061409d565b611f59565b6040516106c5919061484e565b60405180910390f35b60006106d861201e565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90614aa6565b60405180910390fd5b600061077283612026565b5050505090506107ca81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506108228160095461208b90919063ffffffff16565b60098190555061083d83600a546120d590919063ffffffff16565b600a81905550505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606040518060400160405280601281526020017f457175616c697a6572204469616d6f6e64730000000000000000000000000000815250905090565b60006108bd6108b661201e565b8484612133565b6001905092915050565b6000600a54905090565b6000662386f26fc10000905090565b60006108ed8484846122fe565b6109ae846108f961201e565b6109a985604051806060016040528060288152602001614eb360289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061095f61201e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279a9092919063ffffffff16565b612133565b600190509392505050565b60006109c361201e565b73ffffffffffffffffffffffffffffffffffffffff166109e16113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90614a06565b60405180910390fd5b81600b819055507f3e3662e2d77f9217bacb0048a15abfbd225eca20f4de9ded1f6fa7c217c46f6882604051610a6d9190614ac6565b60405180910390a160019050919050565b610a8661201e565b73ffffffffffffffffffffffffffffffffffffffff16610aa46113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6190614926565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f56bc1dda8eeacde06dd297b22314b1abbc0af4d041104fce3efe01d6e60e800181604051610bda91906147fc565b60405180910390a150565b6000600954821115610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c23906148c6565b60405180910390fd5b6000610c366127fe565b9050610c4b818461282990919063ffffffff16565b915050919050565b60006009905090565b6000610d05610c6961201e565b84610d008560056000610c7a61201e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b612133565b6001905092915050565b6000610d1961201e565b73ffffffffffffffffffffffffffffffffffffffff16610d376113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490614a06565b60405180910390fd5b81600c819055507fb16defe3ee4b5dd7e988b2ff671956dd9006d6714e9098563ff36c754659c30782604051610dc39190614ac6565b60405180910390a160019050919050565b6000610dde61201e565b73ffffffffffffffffffffffffffffffffffffffff16610dfc6113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb9906149c6565b60405180910390fd5b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6282604051610f4991906147fc565b60405180910390a160019050919050565b6000662386f26fc10000831115610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d906149a6565b60405180910390fd5b81610fc5576000610fb684612026565b50505050905080915050610fdb565b6000610fd084612026565b505050915050809150505b92915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561107c57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506110c7565b6110c4600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be5565b90505b919050565b6110d461201e565b73ffffffffffffffffffffffffffffffffffffffff166110f26113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113f90614a06565b60405180910390fd5b6111526000612873565b565b60006002600154141561119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390614a86565b60405180910390fd5b600260018190555060006111af30610fe1565b905060006111f06111cd600d54600c546120d590919063ffffffff16565b6111e2600c548561293790919063ffffffff16565b61282990919063ffffffff16565b9050600061123161120e600d54600c546120d590919063ffffffff16565b611223600d548661293790919063ffffffff16565b61282990919063ffffffff16565b90507f58c92a623fdbe931ce898cf0716225d92cfca3f80e6b863c73087c287231514083838360405161126693929190614b3b565b60405180910390a1600082111561128157611280826129b2565b5b61128a81612bfa565b600193505050506001808190555090565b60006112a561201e565b73ffffffffffffffffffffffffffffffffffffffff166112c36113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090614a06565b60405180910390fd5b61134d33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16662386f26fc10000612133565b7fdb4638121081b3fa543d5c1ec192cb635effb2dca1cca97abdc34832a126bc2233600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16662386f26fc100006040516113a993929190614817565b60405180910390a16001905090565b6000600b54905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d54905090565b60606040518060400160405280600881526020017f4449414d4f4e4453000000000000000000000000000000000000000000000000815250905090565b60006114f561143f61201e565b846114f085604051806060016040528060258152602001614edb602591396005600061146961201e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279a9092919063ffffffff16565b612133565b6001905092915050565b600061151361150c61201e565b84846122fe565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061160461201e565b73ffffffffffffffffffffffffffffffffffffffff166116226113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f90614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df906149c6565b60405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e8260405161176f91906147fc565b60405180910390a160019050919050565b61178861201e565b73ffffffffffffffffffffffffffffffffffffffff166117a66113c2565b73ffffffffffffffffffffffffffffffffffffffff16146117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390614a06565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090614966565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561195d57611919600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be5565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f99e6fac281d5d0ec44b5e6ff60bbc23b07cb5920750f363b81089c7c1075d3d581604051611a4791906147fc565b60405180910390a150565b611a5a61201e565b73ffffffffffffffffffffffffffffffffffffffff16611a786113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b35906148e6565b60405180910390fd5b611b4781612873565b50565b611b5261201e565b73ffffffffffffffffffffffffffffffffffffffff16611b706113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbd90614a06565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4990614986565b60405180910390fd5b60005b600880549050811015611f14578173ffffffffffffffffffffffffffffffffffffffff1660088281548110611cb3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f015760086001600880549050611d0e9190614cc3565b81548110611d45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110611daa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480611ec7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611f14565b8080611f0c90614db5565b915050611c55565b507f8baac89f9e61e8420de0c15242e2d05f468d54f40a1fc8bfba0d0512146f841c81604051611f4491906147fc565b60405180910390a150565b6000600c54905090565b6000611f6361201e565b73ffffffffffffffffffffffffffffffffffffffff16611f816113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fce90614a06565b60405180910390fd5b81600d819055507f2815ddb4370b8496d1ad46637931046119fca9d345fe16ea4df52b9c2a148f4f8260405161200d9190614ac6565b60405180910390a160019050919050565b600033905090565b600080612031613f4d565b600061203b613f4d565b60008061204788612c71565b9150915060006120556127fe565b905060008060006120678c8686612d6d565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b60006120cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061279a565b905092915050565b60008082846120e49190614be2565b905083811015612129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212090614946565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a90614a66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a90614906565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122f19190614ac6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561236e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236590614a46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d5906148a6565b60405180910390fd5b60008111612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890614a26565b60405180910390fd5b6000600b5490506000600c5490506000600d549050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124a1576000600b819055506000600c819055506000600d819055505b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125445750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561255957612554868686612e53565b6126d6565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125fc5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126115761260c8686866130d2565b6126d5565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126b35750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126c8576126c3868686613351565b6126d4565b6126d3868686613665565b5b5b5b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127775750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127925782600b8190555081600c8190555080600d819055505b505050505050565b60008383111582906127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d99190614884565b60405180910390fd5b50600083856127f19190614cc3565b9050809150509392505050565b600080600061280b61384f565b91509150612822818361282990919063ffffffff16565b9250505090565b600061286b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613bae565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008083141561294a57600090506129ac565b600082846129589190614c69565b90508284826129679190614c38565b146129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e906149e6565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156129f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612a235781602001602082028036833780820191505090505b5090503081600081518110612a61577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000081600181518110612af6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612b5b307f000000000000000000000000000000000000000000000000000000000000000084612133565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084612ba36113c2565b426040518663ffffffff1660e01b8152600401612bc4959493929190614ae1565b600060405180830381600087803b158015612bde57600080fd5b505af1158015612bf2573d6000803e3d6000fd5b505050505050565b612c073061dead836122fe565b61dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c669190614ac6565b60405180910390a350565b6000612c7b613f4d565b612c83613f4d565b612cac6103e8612c9e600b548761293790919063ffffffff16565b61282990919063ffffffff16565b816000018181525050612cde6103e8612cd0600c548761293790919063ffffffff16565b61282990919063ffffffff16565b816020018181525050612d106103e8612d02600d548761293790919063ffffffff16565b61282990919063ffffffff16565b8160400181815250506000612d5e8260400151612d508460200151612d4286600001518a61208b90919063ffffffff16565b61208b90919063ffffffff16565b61208b90919063ffffffff16565b90508082935093505050915091565b600080612d78613f4d565b612d80613f4d565b6000612d95868961293790919063ffffffff16565b9050612dae86886000015161293790919063ffffffff16565b826000018181525050612dce86886020015161293790919063ffffffff16565b826020018181525050612dee86886040015161293790919063ffffffff16565b8260400181815250506000612e3c8360400151612e2e8560200151612e2087600001518761208b90919063ffffffff16565b61208b90919063ffffffff16565b61208b90919063ffffffff16565b905081818495509550955050505093509350939050565b6000806000806000612e6486612026565b94509450945094509450612ec086600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f5585600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fea84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061303f83600001518260000151613c11565b61305183602001518260200151613c4b565b61306383604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130c09190614ac6565b60405180910390a35050505050505050565b60008060008060006130e386612026565b9450945094509450945061313f85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131d482600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061326984600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132be83600001518260000151613c11565b6132d083602001518260200151613c4b565b6132e283604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161333f9190614ac6565b60405180910390a35050505050505050565b600080600080600061336286612026565b945094509450945094506133be86600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061345385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134e882600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357d84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135d283600001518260000151613c11565b6135e483602001518260200151613c4b565b6135f683604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136539190614ac6565b60405180910390a35050505050505050565b600080600080600061367686612026565b945094509450945094506136d285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061376784600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137bc83600001518260000151613c11565b6137ce83602001518260200151613c4b565b6137e083604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161383d9190614ac6565b60405180910390a35050505050505050565b600080600060095490506000662386f26fc10000905060005b600880549050811015613b67578260036000600884815481106138b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806139c85750816004600060088481548110613960577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156139e457600954662386f26fc1000094509450505050613baa565b613a9a6003600060088481548110613a25577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461208b90919063ffffffff16565b9250613b526004600060088481548110613add577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361208b90919063ffffffff16565b91508080613b5f90614db5565b915050613868565b50613b84662386f26fc1000060095461282990919063ffffffff16565b821015613ba157600954662386f26fc10000935093505050613baa565b81819350935050505b9091565b60008083118290613bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bec9190614884565b60405180910390fd5b5060008385613c049190614c38565b9050809150509392505050565b613c268260095461208b90919063ffffffff16565b600981905550613c4181600a546120d590919063ffffffff16565b600a819055505050565b613c9d82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613dc857613d8481600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b613e1e82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613f4957613f0581600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b60405180606001604052806000815260200160008152602001600081525090565b600081359050613f7d81614e6d565b92915050565b600081359050613f9281614e84565b92915050565b600081359050613fa781614e9b565b92915050565b600060208284031215613fbf57600080fd5b6000613fcd84828501613f6e565b91505092915050565b60008060408385031215613fe957600080fd5b6000613ff785828601613f6e565b925050602061400885828601613f6e565b9150509250929050565b60008060006060848603121561402757600080fd5b600061403586828701613f6e565b935050602061404686828701613f6e565b925050604061405786828701613f98565b9150509250925092565b6000806040838503121561407457600080fd5b600061408285828601613f6e565b925050602061409385828601613f98565b9150509250929050565b6000602082840312156140af57600080fd5b60006140bd84828501613f98565b91505092915050565b600080604083850312156140d957600080fd5b60006140e785828601613f98565b92505060206140f885828601613f83565b9150509250929050565b600061410e838361411a565b60208301905092915050565b61412381614cf7565b82525050565b61413281614cf7565b82525050565b600061414382614b9d565b61414d8185614bc0565b935061415883614b8d565b8060005b838110156141895781516141708882614102565b975061417b83614bb3565b92505060018101905061415c565b5085935050505092915050565b61419f81614d09565b82525050565b6141ae81614d4c565b82525050565b6141bd81614d70565b82525050565b60006141ce82614ba8565b6141d88185614bd1565b93506141e8818560208601614d82565b6141f181614e5c565b840191505092915050565b6000614209602383614bd1565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061426f602a83614bd1565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006142d5602683614bd1565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061433b602283614bd1565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143a1602283614bd1565b91507f416464726573732073686f756c64206e6f74206265207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614407601b83614bd1565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614447601b83614bd1565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b6000614487601783614bd1565b91507f4163636f756e74206973206e6f74206578636c756465640000000000000000006000830152602082019050919050565b60006144c7601f83614bd1565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b6000614507602283614bd1565b91507f45524332303a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061456d602183614bd1565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145d3602083614bd1565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614613602983614bd1565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614679602583614bd1565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146df602483614bd1565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614745601f83614bd1565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000614785602c83614bd1565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b6147e781614d35565b82525050565b6147f681614d3f565b82525050565b60006020820190506148116000830184614129565b92915050565b600060608201905061482c6000830186614129565b6148396020830185614129565b61484660408301846147de565b949350505050565b60006020820190506148636000830184614196565b92915050565b600060208201905061487e60008301846141a5565b92915050565b6000602082019050818103600083015261489e81846141c3565b905092915050565b600060208201905081810360008301526148bf816141fc565b9050919050565b600060208201905081810360008301526148df81614262565b9050919050565b600060208201905081810360008301526148ff816142c8565b9050919050565b6000602082019050818103600083015261491f8161432e565b9050919050565b6000602082019050818103600083015261493f81614394565b9050919050565b6000602082019050818103600083015261495f816143fa565b9050919050565b6000602082019050818103600083015261497f8161443a565b9050919050565b6000602082019050818103600083015261499f8161447a565b9050919050565b600060208201905081810360008301526149bf816144ba565b9050919050565b600060208201905081810360008301526149df816144fa565b9050919050565b600060208201905081810360008301526149ff81614560565b9050919050565b60006020820190508181036000830152614a1f816145c6565b9050919050565b60006020820190508181036000830152614a3f81614606565b9050919050565b60006020820190508181036000830152614a5f8161466c565b9050919050565b60006020820190508181036000830152614a7f816146d2565b9050919050565b60006020820190508181036000830152614a9f81614738565b9050919050565b60006020820190508181036000830152614abf81614778565b9050919050565b6000602082019050614adb60008301846147de565b92915050565b600060a082019050614af660008301886147de565b614b0360208301876141b4565b8181036040830152614b158186614138565b9050614b246060830185614129565b614b3160808301846147de565b9695505050505050565b6000606082019050614b5060008301866147de565b614b5d60208301856147de565b614b6a60408301846147de565b949350505050565b6000602082019050614b8760008301846147ed565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614bed82614d35565b9150614bf883614d35565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c2d57614c2c614dfe565b5b828201905092915050565b6000614c4382614d35565b9150614c4e83614d35565b925082614c5e57614c5d614e2d565b5b828204905092915050565b6000614c7482614d35565b9150614c7f83614d35565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cb857614cb7614dfe565b5b828202905092915050565b6000614cce82614d35565b9150614cd983614d35565b925082821015614cec57614ceb614dfe565b5b828203905092915050565b6000614d0282614d15565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614d5782614d5e565b9050919050565b6000614d6982614d15565b9050919050565b6000614d7b82614d35565b9050919050565b60005b83811015614da0578082015181840152602081019050614d85565b83811115614daf576000848401525b50505050565b6000614dc082614d35565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614df357614df2614dfe565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b614e7681614cf7565b8114614e8157600080fd5b50565b614e8d81614d09565b8114614e9857600080fd5b50565b614ea481614d35565b8114614eaf57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220167e20b066800d236872f488a75d824a741128a991353d7a7990266637b1d3b764736f6c6343000800003300000000000000000000000019891bd8654814f070fb8ee7ff901ab260a9b9d6000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063715018a61161011a578063a9059cbb116100ad578063f2cc0c181161007c578063f2cc0c181461062c578063f2fde38b14610648578063f84354f114610664578063f9cab16a14610680578063fc5af7341461069e576101fb565b8063a9059cbb1461056c578063cba0e9961461059c578063dd62ed3e146105cc578063ea2f0b37146105fc576101fb565b80638da5cb5b116100e95780638da5cb5b146104e257806390f712cc1461050057806395d89b411461051e578063a457c2d71461053c576101fb565b8063715018a61461047e5780637f6adbfe14610488578063812d816a146104a657806383ad7994146104c4576101fb565b80632ac85c2f116101925780633a94a68a116101615780633a94a68a146103be578063437823ec146103ee5780634549b0391461041e57806370a082311461044e576101fb565b80632ac85c2f146103245780632d83811914610340578063313ce56714610370578063395093511461038e576101fb565b806313114a9d116101ce57806313114a9d1461028857806318160ddd146102a657806323b872dd146102c457806329805558146102f4576101fb565b8063053ab18214610200578063055add0d1461021c57806306fdde031461023a578063095ea7b314610258575b600080fd5b61021a6004803603810190610215919061409d565b6106ce565b005b610224610848565b6040516102319190614869565b60405180910390f35b61024261086c565b60405161024f9190614884565b60405180910390f35b610272600480360381019061026d9190614061565b6108a9565b60405161027f919061484e565b60405180910390f35b6102906108c7565b60405161029d9190614ac6565b60405180910390f35b6102ae6108d1565b6040516102bb9190614ac6565b60405180910390f35b6102de60048036038101906102d99190614012565b6108e0565b6040516102eb919061484e565b60405180910390f35b61030e6004803603810190610309919061409d565b6109b9565b60405161031b919061484e565b60405180910390f35b61033e60048036038101906103399190613fad565b610a7e565b005b61035a6004803603810190610355919061409d565b610be5565b6040516103679190614ac6565b60405180910390f35b610378610c53565b6040516103859190614b72565b60405180910390f35b6103a860048036038101906103a39190614061565b610c5c565b6040516103b5919061484e565b60405180910390f35b6103d860048036038101906103d3919061409d565b610d0f565b6040516103e5919061484e565b60405180910390f35b61040860048036038101906104039190613fad565b610dd4565b604051610415919061484e565b60405180910390f35b610438600480360381019061043391906140c6565b610f5a565b6040516104459190614ac6565b60405180910390f35b61046860048036038101906104639190613fad565b610fe1565b6040516104759190614ac6565b60405180910390f35b6104866110cc565b005b610490611154565b60405161049d919061484e565b60405180910390f35b6104ae61129b565b6040516104bb919061484e565b60405180910390f35b6104cc6113b8565b6040516104d99190614ac6565b60405180910390f35b6104ea6113c2565b6040516104f791906147fc565b60405180910390f35b6105086113eb565b6040516105159190614ac6565b60405180910390f35b6105266113f5565b6040516105339190614884565b60405180910390f35b61055660048036038101906105519190614061565b611432565b604051610563919061484e565b60405180910390f35b61058660048036038101906105819190614061565b6114ff565b604051610593919061484e565b60405180910390f35b6105b660048036038101906105b19190613fad565b61151d565b6040516105c3919061484e565b60405180910390f35b6105e660048036038101906105e19190613fd6565b611573565b6040516105f39190614ac6565b60405180910390f35b61061660048036038101906106119190613fad565b6115fa565b604051610623919061484e565b60405180910390f35b61064660048036038101906106419190613fad565b611780565b005b610662600480360381019061065d9190613fad565b611a52565b005b61067e60048036038101906106799190613fad565b611b4a565b005b610688611f4f565b6040516106959190614ac6565b60405180910390f35b6106b860048036038101906106b3919061409d565b611f59565b6040516106c5919061484e565b60405180910390f35b60006106d861201e565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610767576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075e90614aa6565b60405180910390fd5b600061077283612026565b5050505090506107ca81600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506108228160095461208b90919063ffffffff16565b60098190555061083d83600a546120d590919063ffffffff16565b600a81905550505050565b7f000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad81565b60606040518060400160405280601281526020017f457175616c697a6572204469616d6f6e64730000000000000000000000000000815250905090565b60006108bd6108b661201e565b8484612133565b6001905092915050565b6000600a54905090565b6000662386f26fc10000905090565b60006108ed8484846122fe565b6109ae846108f961201e565b6109a985604051806060016040528060288152602001614eb360289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061095f61201e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279a9092919063ffffffff16565b612133565b600190509392505050565b60006109c361201e565b73ffffffffffffffffffffffffffffffffffffffff166109e16113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2e90614a06565b60405180910390fd5b81600b819055507f3e3662e2d77f9217bacb0048a15abfbd225eca20f4de9ded1f6fa7c217c46f6882604051610a6d9190614ac6565b60405180910390a160019050919050565b610a8661201e565b73ffffffffffffffffffffffffffffffffffffffff16610aa46113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610afa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af190614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610b6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6190614926565b60405180910390fd5b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f56bc1dda8eeacde06dd297b22314b1abbc0af4d041104fce3efe01d6e60e800181604051610bda91906147fc565b60405180910390a150565b6000600954821115610c2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c23906148c6565b60405180910390fd5b6000610c366127fe565b9050610c4b818461282990919063ffffffff16565b915050919050565b60006009905090565b6000610d05610c6961201e565b84610d008560056000610c7a61201e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b612133565b6001905092915050565b6000610d1961201e565b73ffffffffffffffffffffffffffffffffffffffff16610d376113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490614a06565b60405180910390fd5b81600c819055507fb16defe3ee4b5dd7e988b2ff671956dd9006d6714e9098563ff36c754659c30782604051610dc39190614ac6565b60405180910390a160019050919050565b6000610dde61201e565b73ffffffffffffffffffffffffffffffffffffffff16610dfc6113c2565b73ffffffffffffffffffffffffffffffffffffffff1614610e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4990614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb9906149c6565b60405180910390fd5b6001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f58c3e0504c69d3a92726966f152a771e0f8f6ad4daca1ae9055a38aba1fd2b6282604051610f4991906147fc565b60405180910390a160019050919050565b6000662386f26fc10000831115610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d906149a6565b60405180910390fd5b81610fc5576000610fb684612026565b50505050905080915050610fdb565b6000610fd084612026565b505050915050809150505b92915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561107c57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506110c7565b6110c4600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be5565b90505b919050565b6110d461201e565b73ffffffffffffffffffffffffffffffffffffffff166110f26113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113f90614a06565b60405180910390fd5b6111526000612873565b565b60006002600154141561119c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119390614a86565b60405180910390fd5b600260018190555060006111af30610fe1565b905060006111f06111cd600d54600c546120d590919063ffffffff16565b6111e2600c548561293790919063ffffffff16565b61282990919063ffffffff16565b9050600061123161120e600d54600c546120d590919063ffffffff16565b611223600d548661293790919063ffffffff16565b61282990919063ffffffff16565b90507f58c92a623fdbe931ce898cf0716225d92cfca3f80e6b863c73087c287231514083838360405161126693929190614b3b565b60405180910390a1600082111561128157611280826129b2565b5b61128a81612bfa565b600193505050506001808190555090565b60006112a561201e565b73ffffffffffffffffffffffffffffffffffffffff166112c36113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090614a06565b60405180910390fd5b61134d33600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16662386f26fc10000612133565b7fdb4638121081b3fa543d5c1ec192cb635effb2dca1cca97abdc34832a126bc2233600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16662386f26fc100006040516113a993929190614817565b60405180910390a16001905090565b6000600b54905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d54905090565b60606040518060400160405280600881526020017f4449414d4f4e4453000000000000000000000000000000000000000000000000815250905090565b60006114f561143f61201e565b846114f085604051806060016040528060258152602001614edb602591396005600061146961201e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461279a9092919063ffffffff16565b612133565b6001905092915050565b600061151361150c61201e565b84846122fe565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061160461201e565b73ffffffffffffffffffffffffffffffffffffffff166116226113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611678576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166f90614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df906149c6565b60405180910390fd5b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4f6a6b6efe34ec6478021aa9fb7f6980e78ea3a10c74074a8ce49d5d3ebf1f7e8260405161176f91906147fc565b60405180910390a160019050919050565b61178861201e565b73ffffffffffffffffffffffffffffffffffffffff166117a66113c2565b73ffffffffffffffffffffffffffffffffffffffff16146117fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f390614a06565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611889576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188090614966565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561195d57611919600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610be5565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f99e6fac281d5d0ec44b5e6ff60bbc23b07cb5920750f363b81089c7c1075d3d581604051611a4791906147fc565b60405180910390a150565b611a5a61201e565b73ffffffffffffffffffffffffffffffffffffffff16611a786113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac590614a06565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b35906148e6565b60405180910390fd5b611b4781612873565b50565b611b5261201e565b73ffffffffffffffffffffffffffffffffffffffff16611b706113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611bc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbd90614a06565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611c52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4990614986565b60405180910390fd5b60005b600880549050811015611f14578173ffffffffffffffffffffffffffffffffffffffff1660088281548110611cb3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611f015760086001600880549050611d0e9190614cc3565b81548110611d45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110611daa577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480611ec7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611f14565b8080611f0c90614db5565b915050611c55565b507f8baac89f9e61e8420de0c15242e2d05f468d54f40a1fc8bfba0d0512146f841c81604051611f4491906147fc565b60405180910390a150565b6000600c54905090565b6000611f6361201e565b73ffffffffffffffffffffffffffffffffffffffff16611f816113c2565b73ffffffffffffffffffffffffffffffffffffffff1614611fd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fce90614a06565b60405180910390fd5b81600d819055507f2815ddb4370b8496d1ad46637931046119fca9d345fe16ea4df52b9c2a148f4f8260405161200d9190614ac6565b60405180910390a160019050919050565b600033905090565b600080612031613f4d565b600061203b613f4d565b60008061204788612c71565b9150915060006120556127fe565b905060008060006120678c8686612d6d565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b60006120cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061279a565b905092915050565b60008082846120e49190614be2565b905083811015612129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212090614946565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219a90614a66565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a90614906565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122f19190614ac6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561236e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236590614a46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123d5906148a6565b60405180910390fd5b60008111612421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241890614a26565b60405180910390fd5b6000600b5490506000600c5490506000600d549050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156124a1576000600b819055506000600c819055506000600d819055505b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125445750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561255957612554868686612e53565b6126d6565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156125fc5750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126115761260c8686866130d2565b6126d5565b600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156126b35750600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156126c8576126c3868686613351565b6126d4565b6126d3868686613665565b5b5b5b600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127775750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156127925782600b8190555081600c8190555080600d819055505b505050505050565b60008383111582906127e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d99190614884565b60405180910390fd5b50600083856127f19190614cc3565b9050809150509392505050565b600080600061280b61384f565b91509150612822818361282990919063ffffffff16565b9250505090565b600061286b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613bae565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008083141561294a57600090506129ac565b600082846129589190614c69565b90508284826129679190614c38565b146129a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299e906149e6565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156129f5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612a235781602001602082028036833780820191505090505b5090503081600081518110612a61577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f00000000000000000000000019891bd8654814f070fb8ee7ff901ab260a9b9d681600181518110612af6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612b5b307f000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad84612133565b7f000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084612ba36113c2565b426040518663ffffffff1660e01b8152600401612bc4959493929190614ae1565b600060405180830381600087803b158015612bde57600080fd5b505af1158015612bf2573d6000803e3d6000fd5b505050505050565b612c073061dead836122fe565b61dead73ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612c669190614ac6565b60405180910390a350565b6000612c7b613f4d565b612c83613f4d565b612cac6103e8612c9e600b548761293790919063ffffffff16565b61282990919063ffffffff16565b816000018181525050612cde6103e8612cd0600c548761293790919063ffffffff16565b61282990919063ffffffff16565b816020018181525050612d106103e8612d02600d548761293790919063ffffffff16565b61282990919063ffffffff16565b8160400181815250506000612d5e8260400151612d508460200151612d4286600001518a61208b90919063ffffffff16565b61208b90919063ffffffff16565b61208b90919063ffffffff16565b90508082935093505050915091565b600080612d78613f4d565b612d80613f4d565b6000612d95868961293790919063ffffffff16565b9050612dae86886000015161293790919063ffffffff16565b826000018181525050612dce86886020015161293790919063ffffffff16565b826020018181525050612dee86886040015161293790919063ffffffff16565b8260400181815250506000612e3c8360400151612e2e8560200151612e2087600001518761208b90919063ffffffff16565b61208b90919063ffffffff16565b61208b90919063ffffffff16565b905081818495509550955050505093509350939050565b6000806000806000612e6486612026565b94509450945094509450612ec086600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f5585600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fea84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061303f83600001518260000151613c11565b61305183602001518260200151613c4b565b61306383604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130c09190614ac6565b60405180910390a35050505050505050565b60008060008060006130e386612026565b9450945094509450945061313f85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131d482600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061326984600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132be83600001518260000151613c11565b6132d083602001518260200151613c4b565b6132e283604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161333f9190614ac6565b60405180910390a35050505050505050565b600080600080600061336286612026565b945094509450945094506133be86600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061345385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134e882600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061357d84600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135d283600001518260000151613c11565b6135e483602001518260200151613c4b565b6135f683604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516136539190614ac6565b60405180910390a35050505050505050565b600080600080600061367686612026565b945094509450945094506136d285600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461208b90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061376784600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137bc83600001518260000151613c11565b6137ce83602001518260200151613c4b565b6137e083604001518260400151613dcc565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161383d9190614ac6565b60405180910390a35050505050505050565b600080600060095490506000662386f26fc10000905060005b600880549050811015613b67578260036000600884815481106138b4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806139c85750816004600060088481548110613960577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156139e457600954662386f26fc1000094509450505050613baa565b613a9a6003600060088481548110613a25577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461208b90919063ffffffff16565b9250613b526004600060088481548110613add577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361208b90919063ffffffff16565b91508080613b5f90614db5565b915050613868565b50613b84662386f26fc1000060095461282990919063ffffffff16565b821015613ba157600954662386f26fc10000935093505050613baa565b81819350935050505b9091565b60008083118290613bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bec9190614884565b60405180910390fd5b5060008385613c049190614c38565b9050809150509392505050565b613c268260095461208b90919063ffffffff16565b600981905550613c4181600a546120d590919063ffffffff16565b600a819055505050565b613c9d82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613dc857613d8481600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b613e1e82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613f4957613f0581600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546120d590919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b60405180606001604052806000815260200160008152602001600081525090565b600081359050613f7d81614e6d565b92915050565b600081359050613f9281614e84565b92915050565b600081359050613fa781614e9b565b92915050565b600060208284031215613fbf57600080fd5b6000613fcd84828501613f6e565b91505092915050565b60008060408385031215613fe957600080fd5b6000613ff785828601613f6e565b925050602061400885828601613f6e565b9150509250929050565b60008060006060848603121561402757600080fd5b600061403586828701613f6e565b935050602061404686828701613f6e565b925050604061405786828701613f98565b9150509250925092565b6000806040838503121561407457600080fd5b600061408285828601613f6e565b925050602061409385828601613f98565b9150509250929050565b6000602082840312156140af57600080fd5b60006140bd84828501613f98565b91505092915050565b600080604083850312156140d957600080fd5b60006140e785828601613f98565b92505060206140f885828601613f83565b9150509250929050565b600061410e838361411a565b60208301905092915050565b61412381614cf7565b82525050565b61413281614cf7565b82525050565b600061414382614b9d565b61414d8185614bc0565b935061415883614b8d565b8060005b838110156141895781516141708882614102565b975061417b83614bb3565b92505060018101905061415c565b5085935050505092915050565b61419f81614d09565b82525050565b6141ae81614d4c565b82525050565b6141bd81614d70565b82525050565b60006141ce82614ba8565b6141d88185614bd1565b93506141e8818560208601614d82565b6141f181614e5c565b840191505092915050565b6000614209602383614bd1565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061426f602a83614bd1565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006142d5602683614bd1565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061433b602283614bd1565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006143a1602283614bd1565b91507f416464726573732073686f756c64206e6f74206265207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614407601b83614bd1565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b6000614447601b83614bd1565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b6000614487601783614bd1565b91507f4163636f756e74206973206e6f74206578636c756465640000000000000000006000830152602082019050919050565b60006144c7601f83614bd1565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b6000614507602283614bd1565b91507f45524332303a206163636f756e7420697320746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061456d602183614bd1565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006145d3602083614bd1565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614613602983614bd1565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614679602583614bd1565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146df602483614bd1565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614745601f83614bd1565b91507f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006000830152602082019050919050565b6000614785602c83614bd1565b91507f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008301527f6869732066756e6374696f6e00000000000000000000000000000000000000006020830152604082019050919050565b6147e781614d35565b82525050565b6147f681614d3f565b82525050565b60006020820190506148116000830184614129565b92915050565b600060608201905061482c6000830186614129565b6148396020830185614129565b61484660408301846147de565b949350505050565b60006020820190506148636000830184614196565b92915050565b600060208201905061487e60008301846141a5565b92915050565b6000602082019050818103600083015261489e81846141c3565b905092915050565b600060208201905081810360008301526148bf816141fc565b9050919050565b600060208201905081810360008301526148df81614262565b9050919050565b600060208201905081810360008301526148ff816142c8565b9050919050565b6000602082019050818103600083015261491f8161432e565b9050919050565b6000602082019050818103600083015261493f81614394565b9050919050565b6000602082019050818103600083015261495f816143fa565b9050919050565b6000602082019050818103600083015261497f8161443a565b9050919050565b6000602082019050818103600083015261499f8161447a565b9050919050565b600060208201905081810360008301526149bf816144ba565b9050919050565b600060208201905081810360008301526149df816144fa565b9050919050565b600060208201905081810360008301526149ff81614560565b9050919050565b60006020820190508181036000830152614a1f816145c6565b9050919050565b60006020820190508181036000830152614a3f81614606565b9050919050565b60006020820190508181036000830152614a5f8161466c565b9050919050565b60006020820190508181036000830152614a7f816146d2565b9050919050565b60006020820190508181036000830152614a9f81614738565b9050919050565b60006020820190508181036000830152614abf81614778565b9050919050565b6000602082019050614adb60008301846147de565b92915050565b600060a082019050614af660008301886147de565b614b0360208301876141b4565b8181036040830152614b158186614138565b9050614b246060830185614129565b614b3160808301846147de565b9695505050505050565b6000606082019050614b5060008301866147de565b614b5d60208301856147de565b614b6a60408301846147de565b949350505050565b6000602082019050614b8760008301846147ed565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614bed82614d35565b9150614bf883614d35565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c2d57614c2c614dfe565b5b828201905092915050565b6000614c4382614d35565b9150614c4e83614d35565b925082614c5e57614c5d614e2d565b5b828204905092915050565b6000614c7482614d35565b9150614c7f83614d35565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cb857614cb7614dfe565b5b828202905092915050565b6000614cce82614d35565b9150614cd983614d35565b925082821015614cec57614ceb614dfe565b5b828203905092915050565b6000614d0282614d15565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000614d5782614d5e565b9050919050565b6000614d6982614d15565b9050919050565b6000614d7b82614d35565b9050919050565b60005b83811015614da0578082015181840152602081019050614d85565b83811115614daf576000848401525b50505050565b6000614dc082614d35565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614df357614df2614dfe565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b614e7681614cf7565b8114614e8157600080fd5b50565b614e8d81614d09565b8114614e9857600080fd5b50565b614ea481614d35565b8114614eaf57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220167e20b066800d236872f488a75d824a741128a991353d7a7990266637b1d3b764736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000019891bd8654814f070fb8ee7ff901ab260a9b9d6000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad
-----Decoded View---------------
Arg [0] : _lcxAddress (address): 0x19891Bd8654814f070Fb8ee7FF901aB260A9b9D6
Arg [1] : _uniswapV2Address (address): 0xcC6169aA1E879d3a4227536671F85afdb2d23fAD
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000019891bd8654814f070fb8ee7ff901ab260a9b9d6
Arg [1] : 000000000000000000000000cc6169aa1e879d3a4227536671f85afdb2d23fad
Deployed Bytecode Sourcemap
23152:18656:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28574:419;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23480:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25490:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26490:195;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28477:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25773:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27181:448;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39124:221;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26693:247;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29486:322;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25680:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27637:302;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39460:224;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39973:268;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29001:477;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25878:198;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14071:103;;;:::i;:::-;;40522:621;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26948:225;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39019:97;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13420:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39692:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25583:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27947:402;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26084:204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28357:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26296:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40249:265;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29816:370;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14329:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30194:511;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39353:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39791:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28574:419;28628:14;28645:12;:10;:12::i;:::-;28628:29;;28691:11;:19;28703:6;28691:19;;;;;;;;;;;;;;;;;;;;;;;;;28690:20;28668:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;28794:15;28821:19;28832:7;28821:10;:19::i;:::-;28793:47;;;;;;28869:28;28889:7;28869;:15;28877:6;28869:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28851:7;:15;28859:6;28851:15;;;;;;;;;;;;;;;:46;;;;28918:20;28930:7;28918;;:11;;:20;;;;:::i;:::-;28908:7;:30;;;;28962:23;28977:7;28962:10;;:14;;:23;;;;:::i;:::-;28949:10;:36;;;;28574:419;;;:::o;23480:51::-;;;:::o;25490:85::-;25529:13;25562:5;;;;;;;;;;;;;;;;;25555:12;;25490:85;:::o;26490:195::-;26594:4;26616:39;26625:12;:10;:12::i;:::-;26639:7;26648:6;26616:8;:39::i;:::-;26673:4;26666:11;;26490:195;;;;:::o;28477:89::-;28521:7;28548:10;;28541:17;;28477:89;:::o;25773:97::-;25828:7;24104:4;25848:14;;25773:97;:::o;27181:448::-;27315:4;27332:36;27342:6;27350:9;27361:6;27332:9;:36::i;:::-;27379:220;27402:6;27423:12;:10;:12::i;:::-;27450:138;27506:6;27450:138;;;;;;;;;;;;;;;;;:11;:19;27462:6;27450:19;;;;;;;;;;;;;;;:33;27470:12;:10;:12::i;:::-;27450:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;27379:8;:220::i;:::-;27617:4;27610:11;;27181:448;;;;;:::o;39124:221::-;39225:4;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39264:7:::1;39247:14;:24;;;;39287:28;39307:7;39287:28;;;;;;:::i;:::-;;;;;;;;39333:4;39326:11;;39124:221:::0;;;:::o;26693:247::-;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26799:1:::1;26778:23;;:9;:23;;;;26770:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26877:9;26851:15;;:36;;;;;;;;;;;;;;;;;;26903:29;26922:9;26903:29;;;;;;:::i;:::-;;;;;;;;26693:247:::0;:::o;29486:322::-;29580:7;29638;;29627;:18;;29605:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;29726:19;29748:10;:8;:10::i;:::-;29726:32;;29776:24;29788:11;29776:7;:11;;:24;;;;:::i;:::-;29769:31;;;29486:322;;;:::o;25680:85::-;25723:5;24351:1;25741:16;;25680:85;:::o;27637:302::-;27754:4;27776:133;27799:12;:10;:12::i;:::-;27826:7;27848:50;27887:10;27848:11;:25;27860:12;:10;:12::i;:::-;27848:25;;;;;;;;;;;;;;;:34;27874:7;27848:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;27776:8;:133::i;:::-;27927:4;27920:11;;27637:302;;;;:::o;39460:224::-;39562:4;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39602:7:::1;39584:15;:25;;;;39625:29;39646:7;39625:29;;;;;;:::i;:::-;;;;;;;;39672:4;39665:11;;39460:224:::0;;;:::o;39973:268::-;40042:4;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40086:1:::1;40067:21;;:7;:21;;;;40059:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40168:4;40138:18;:27;40157:7;40138:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;40188:23;40203:7;40188:23;;;;;;:::i;:::-;;;;;;;;40229:4;40222:11;;39973:268:::0;;;:::o;29001:477::-;29121:7;24104:4;29154:7;:18;;29146:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29224:17;29219:252;;29259:15;29286:19;29297:7;29286:10;:19::i;:::-;29258:47;;;;;;29327:7;29320:14;;;;;29219:252;29370:23;29403:19;29414:7;29403:10;:19::i;:::-;29367:55;;;;;;29444:15;29437:22;;;29001:477;;;;;:::o;25878:198::-;25944:7;25968:11;:20;25980:7;25968:20;;;;;;;;;;;;;;;;;;;;;;;;;25964:49;;;25997:7;:16;26005:7;25997:16;;;;;;;;;;;;;;;;25990:23;;;;25964:49;26031:37;26051:7;:16;26059:7;26051:16;;;;;;;;;;;;;;;;26031:19;:37::i;:::-;26024:44;;25878:198;;;;:::o;14071:103::-;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14136:30:::1;14163:1;14136:18;:30::i;:::-;14071:103::o:0;40522:621::-;40581:4;16539:1;17137:7;;:19;;17129:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;16539:1;17270:7;:18;;;;40594:25:::1;40622:24;40640:4;40622:9;:24::i;:::-;40594:52;;40653:23;40679:76;40722:32;40742:11;;40722:15;;:19;;:32;;;;:::i;:::-;40679:38;40701:15;;40679:17;:21;;:38;;;;:::i;:::-;:42;;:76;;;;:::i;:::-;40653:102;;40762:18;40783:72;40822:32;40842:11;;40822:15;;:19;;:32;;;;:::i;:::-;40783:34;40805:11;;40783:17;:21;;:34;;;;:::i;:::-;:38;;:72;;;;:::i;:::-;40762:93;;40869:64;40886:17;40905:15;40922:10;40869:64;;;;;;;;:::i;:::-;;;;;;;;40964:1;40946:15;:19;40942:126;;;40978:22;40984:15;40978:5;:22::i;:::-;40942:126;41074:17;41080:10;41074:5;:17::i;:::-;41131:4;41124:11;;;;;16495:1:::0;17449:7;:22;;;;40522:621;:::o;26948:225::-;27004:4;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27021:46:::1;27030:10;27042:15;;;;;;;;;;;24104:4;27021:8;:46::i;:::-;27083:60;27106:10;27118:15;;;;;;;;;;;24104:4;27083:60;;;;;;;;:::i;:::-;;;;;;;;27161:4;27154:11;;26948:225:::0;:::o;39019:97::-;39067:7;39094:14;;39087:21;;39019:97;:::o;13420:87::-;13466:7;13493:6;;;;;;;;;;;13486:13;;13420:87;:::o;39692:91::-;39737:7;39764:11;;39757:18;;39692:91;:::o;25583:89::-;25624:13;25657:7;;;;;;;;;;;;;;;;;25650:14;;25583:89;:::o;27947:402::-;28069:4;28091:228;28114:12;:10;:12::i;:::-;28141:7;28163:145;28220:15;28163:145;;;;;;;;;;;;;;;;;:11;:25;28175:12;:10;:12::i;:::-;28163:25;;;;;;;;;;;;;;;:34;28189:7;28163:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;28091:8;:228::i;:::-;28337:4;28330:11;;27947:402;;;;:::o;26084:204::-;26191:4;26216:42;26226:12;:10;:12::i;:::-;26240:9;26251:6;26216:9;:42::i;:::-;26276:4;26269:11;;26084:204;;;;:::o;28357:112::-;28417:4;28441:11;:20;28453:7;28441:20;;;;;;;;;;;;;;;;;;;;;;;;;28434:27;;28357:112;;;:::o;26296:186::-;26415:7;26447:11;:18;26459:5;26447:18;;;;;;;;;;;;;;;:27;26466:7;26447:27;;;;;;;;;;;;;;;;26440:34;;26296:186;;;;:::o;40249:265::-;40316:4;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40360:1:::1;40341:21;;:7;:21;;;;40333:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40442:5;40412:18;:27;40431:7;40412:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;40463:21;40476:7;40463:21;;;;;;:::i;:::-;;;;;;;;40502:4;40495:11;;40249:265:::0;;;:::o;29816:370::-;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29896:11:::1;:20;29908:7;29896:20;;;;;;;;;;;;;;;;;;;;;;;;;29895:21;29887:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29982:1;29963:7;:16;29971:7;29963:16;;;;;;;;;;;;;;;;:20;29959:109;;;30019:37;30039:7;:16;30047:7;30039:16;;;;;;;;;;;;;;;;30019:19;:37::i;:::-;30000:7;:16;30008:7;30000:16;;;;;;;;;;;;;;;:56;;;;29959:109;30101:4;30078:11;:20;30090:7;30078:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;30116:9;30131:7;30116:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30155;30170:7;30155:23;;;;;;:::i;:::-;;;;;;;;29816:370:::0;:::o;14329:201::-;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14438:1:::1;14418:22;;:8;:22;;;;14410:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14494:28;14513:8;14494:18;:28::i;:::-;14329:201:::0;:::o;30194:511::-;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30273:11:::1;:20;30285:7;30273:20;;;;;;;;;;;;;;;;;;;;;;;;;30265:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;30337:9;30332:327;30356:9;:16;;;;30352:1;:20;30332:327;;;30414:7;30398:23;;:9;30408:1;30398:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;30394:254;;;30457:9;30486:1;30467:9;:16;;;;:20;;;;:::i;:::-;30457:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30442:9;30452:1;30442:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30526:1;30507:7;:16;30515:7;30507:16;;;;;;;;;;;;;;;:20;;;;30569:5;30546:11;:20;30558:7;30546:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;30593:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30627:5;;30394:254;30374:3;;;;;:::i;:::-;;;;30332:327;;;;30674:23;30689:7;30674:23;;;;;;:::i;:::-;;;;;;;;30194:511:::0;:::o;39353:99::-;39402:7;39429:15;;39422:22;;39353:99;:::o;39791:174::-;39859:4;13651:12;:10;:12::i;:::-;13640:23;;:7;:5;:7::i;:::-;:23;;;13632:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39890:7:::1;39876:11;:21;;;;39913:22;39927:7;39913:22;;;;;;:::i;:::-;;;;;;;;39953:4;39946:11;;39791:174:::0;;;:::o;4969:98::-;5022:7;5049:10;5042:17;;4969:98;:::o;36355:589::-;36455:7;36477;36499:11;;:::i;:::-;36525:7;36547:11;;:::i;:::-;36587:23;36612:17;36633:20;36645:7;36633:11;:20::i;:::-;36586:67;;;;36664:19;36686:10;:8;:10::i;:::-;36664:32;;36722:15;36752:23;36790:17;36821:40;36833:7;36842:5;36849:11;36821;:40::i;:::-;36707:154;;;;;;36880:7;36889:15;36906:5;36913:15;36930:5;36872:64;;;;;;;;;;;;;;;;36355:589;;;;;;;:::o;838:136::-;896:7;923:43;927:1;930;923:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;916:50;;838:136;;;;:::o;374:181::-;432:7;452:9;468:1;464;:5;;;;:::i;:::-;452:17;;493:1;488;:6;;480:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;546:1;539:8;;;374:181;;;;:::o;30713:371::-;30857:1;30840:19;;:5;:19;;;;30832:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30938:1;30919:21;;:7;:21;;;;30911:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31022:6;30992:11;:18;31004:5;30992:18;;;;;;;;;;;;;;;:27;31011:7;30992:27;;;;;;;;;;;;;;;:36;;;;31060:7;31044:32;;31053:5;31044:32;;;31069:6;31044:32;;;;;;:::i;:::-;;;;;;;;30713:371;;;:::o;31092:1393::-;31241:1;31223:20;;:6;:20;;;;31215:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;31325:1;31304:23;;:9;:23;;;;31296:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31395:1;31386:6;:10;31378:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31453:28;31484:14;;31453:45;;31509:29;31541:15;;31509:47;;31567:25;31595:11;;31567:39;;31621:18;:26;31640:6;31621:26;;;;;;;;;;;;;;;;;;;;;;;;;31617:141;;;31681:1;31664:14;:18;;;;31715:1;31697:15;:19;;;;31745:1;31731:11;:15;;;;31617:141;31774:11;:19;31786:6;31774:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;31798:11;:22;31810:9;31798:22;;;;;;;;;;;;;;;;;;;;;;;;;31797:23;31774:46;31770:467;;;31837:48;31859:6;31867:9;31878:6;31837:21;:48::i;:::-;31770:467;;;31908:11;:19;31920:6;31908:19;;;;;;;;;;;;;;;;;;;;;;;;;31907:20;:46;;;;;31931:11;:22;31943:9;31931:22;;;;;;;;;;;;;;;;;;;;;;;;;31907:46;31903:334;;;31970:46;31990:6;31998:9;32009:6;31970:19;:46::i;:::-;31903:334;;;32038:11;:19;32050:6;32038:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;32061:11;:22;32073:9;32061:22;;;;;;;;;;;;;;;;;;;;;;;;;32038:45;32034:203;;;32100:48;32122:6;32130:9;32141:6;32100:21;:48::i;:::-;32034:203;;;32181:44;32199:6;32207:9;32218:6;32181:17;:44::i;:::-;32034:203;31903:334;31770:467;32253:18;:26;32272:6;32253:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;32283:18;:29;32302:9;32283:29;;;;;;;;;;;;;;;;;;;;;;;;;32253:59;32249:229;;;32346:20;32329:14;:37;;;;32399:21;32381:15;:39;;;;32449:17;32435:11;:31;;;;32249:229;31092:1393;;;;;;:::o;1277:226::-;1397:7;1430:1;1425;:6;;1433:12;1417:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1457:9;1473:1;1469;:5;;;;:::i;:::-;1457:17;;1494:1;1487:8;;;1277:226;;;;;:::o;38234:164::-;38276:7;38297:15;38314;38333:19;:17;:19::i;:::-;38296:56;;;;38370:20;38382:7;38370;:11;;:20;;;;:::i;:::-;38363:27;;;;38234:164;:::o;2709:132::-;2767:7;2794:39;2798:1;2801;2794:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2787:46;;2709:132;;;;:::o;14690:191::-;14764:16;14783:6;;;;;;;;;;;14764:25;;14809:8;14800:6;;:17;;;;;;;;;;;;;;;;;;14864:8;14833:40;;14854:8;14833:40;;;;;;;;;;;;14690:191;;:::o;1762:471::-;1820:7;2070:1;2065;:6;2061:47;;;2095:1;2088:8;;;;2061:47;2120:9;2136:1;2132;:5;;;;:::i;:::-;2120:17;;2165:1;2160;2156;:5;;;;:::i;:::-;:10;2148:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2224:1;2217:8;;;1762:471;;;;;:::o;41151:472::-;41211:21;41249:1;41235:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41211:40;;41280:4;41262;41267:1;41262:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;41306:3;41296:4;41301:1;41296:7;;;;;;;;;;;;;;;;;;;;;:13;;;;;;;;;;;41320:66;41337:4;41352:15;41370;41320:8;:66::i;:::-;41397:15;:69;;;41481:15;41511:1;41548:4;41567:7;:5;:7::i;:::-;41589:15;41397:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41151:472;;:::o;41631:174::-;41686:48;41704:4;23969:42;41723:10;41686:9;:48::i;:::-;23969:42;41750:47;;41767:4;41750:47;;;41786:10;41750:47;;;;;;:::i;:::-;;;;;;;;41631:174;:::o;36952:541::-;37039:7;37048:11;;:::i;:::-;37077:17;;:::i;:::-;37124:37;37156:4;37124:27;37136:14;;37124:7;:11;;:27;;;;:::i;:::-;:31;;:37;;;;:::i;:::-;37105:5;:16;;:56;;;;;37193:38;37226:4;37193:28;37205:15;;37193:7;:11;;:28;;;;:::i;:::-;:32;;:38;;;;:::i;:::-;37172:5;:18;;:59;;;;;37258:34;37287:4;37258:24;37270:11;;37258:7;:11;;:24;;;;:::i;:::-;:28;;:34;;;;:::i;:::-;37242:5;:13;;:50;;;;;37303:23;37329:114;37429:5;:13;;;37329:81;37391:5;:18;;;37329:43;37355:5;:16;;;37329:7;:25;;:43;;;;:::i;:::-;:61;;:81;;;;:::i;:::-;:99;;:114;;;;:::i;:::-;37303:140;;37462:15;37479:5;37454:31;;;;;;36952:541;;;:::o;37501:725::-;37676:7;37698;37720:11;;:::i;:::-;37759:17;;:::i;:::-;37787:15;37805:24;37817:11;37805:7;:11;;:24;;;;:::i;:::-;37787:42;;37859:33;37880:11;37859:5;:16;;;:20;;:33;;;;:::i;:::-;37840:5;:16;;:52;;;;;37924:35;37947:11;37924:5;:18;;;:22;;:35;;;;:::i;:::-;37903:5;:18;;:56;;;;;37986:30;38004:11;37986:5;:13;;;:17;;:30;;;;:::i;:::-;37970:5;:13;;:46;;;;;38027:23;38053:114;38153:5;:13;;;38053:81;38115:5;:18;;;38053:43;38079:5;:16;;;38053:7;:25;;:43;;;;:::i;:::-;:61;;:81;;;;:::i;:::-;:99;;:114;;;;:::i;:::-;38027:140;;38186:7;38195:15;38212:5;38178:40;;;;;;;;;37501:725;;;;;;;:::o;33986:763::-;34137:15;34167:23;34205:17;34237:23;34275:17;34306:19;34317:7;34306:10;:19::i;:::-;34122:203;;;;;;;;;;34354:28;34374:7;34354;:15;34362:6;34354:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34336:7;:15;34344:6;34336:15;;;;;;;;;;;;;;;:46;;;;34411:28;34431:7;34411;:15;34419:6;34411:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34393:7;:15;34401:6;34393:15;;;;;;;;;;;;;;;:46;;;;34471:39;34494:15;34471:7;:18;34479:9;34471:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;34450:7;:18;34458:9;34450:18;;;;;;;;;;;;;;;:60;;;;34521:47;34533:5;:16;;;34551:5;:16;;;34521:11;:47::i;:::-;34579:53;34593:5;:18;;;34613:5;:18;;;34579:13;:53::i;:::-;34643:38;34652:5;:13;;;34667:5;:13;;;34643:8;:38::i;:::-;34714:9;34697:44;;34706:6;34697:44;;;34725:15;34697:44;;;;;;:::i;:::-;;;;;;;;33986:763;;;;;;;;:::o;33203:775::-;33352:15;33382:23;33420:17;33452:23;33490:17;33521:19;33532:7;33521:10;:19::i;:::-;33337:203;;;;;;;;;;33569:28;33589:7;33569;:15;33577:6;33569:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33551:7;:15;33559:6;33551:15;;;;;;;;;;;;;;;:46;;;;33629:39;33652:15;33629:7;:18;33637:9;33629:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33608:7;:18;33616:9;33608:18;;;;;;;;;;;;;;;:60;;;;33700:39;33723:15;33700:7;:18;33708:9;33700:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33679:7;:18;33687:9;33679:18;;;;;;;;;;;;;;;:60;;;;33750:47;33762:5;:16;;;33780:5;:16;;;33750:11;:47::i;:::-;33808:53;33822:5;:18;;;33842:5;:18;;;33808:13;:53::i;:::-;33872:38;33881:5;:13;;;33896:5;:13;;;33872:8;:38::i;:::-;33943:9;33926:44;;33935:6;33926:44;;;33954:15;33926:44;;;;;;:::i;:::-;;;;;;;;33203:775;;;;;;;;:::o;34757:834::-;34908:15;34938:23;34976:17;35008:23;35046:17;35077:19;35088:7;35077:10;:19::i;:::-;34893:203;;;;;;;;;;35125:28;35145:7;35125;:15;35133:6;35125:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35107:7;:15;35115:6;35107:15;;;;;;;;;;;;;;;:46;;;;35182:28;35202:7;35182;:15;35190:6;35182:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;35164:7;:15;35172:6;35164:15;;;;;;;;;;;;;;;:46;;;;35242:39;35265:15;35242:7;:18;35250:9;35242:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35221:7;:18;35229:9;35221:18;;;;;;;;;;;;;;;:60;;;;35313:39;35336:15;35313:7;:18;35321:9;35313:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;35292:7;:18;35300:9;35292:18;;;;;;;;;;;;;;;:60;;;;35363:47;35375:5;:16;;;35393:5;:16;;;35363:11;:47::i;:::-;35421:53;35435:5;:18;;;35455:5;:18;;;35421:13;:53::i;:::-;35485:38;35494:5;:13;;;35509:5;:13;;;35485:8;:38::i;:::-;35556:9;35539:44;;35548:6;35539:44;;;35567:15;35539:44;;;;;;:::i;:::-;;;;;;;;34757:834;;;;;;;;:::o;32493:702::-;32640:15;32670:23;32708:17;32740:23;32778:17;32809:19;32820:7;32809:10;:19::i;:::-;32625:203;;;;;;;;;;32857:28;32877:7;32857;:15;32865:6;32857:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32839:7;:15;32847:6;32839:15;;;;;;;;;;;;;;;:46;;;;32917:39;32940:15;32917:7;:18;32925:9;32917:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32896:7;:18;32904:9;32896:18;;;;;;;;;;;;;;;:60;;;;32967:47;32979:5;:16;;;32997:5;:16;;;32967:11;:47::i;:::-;33025:53;33039:5;:18;;;33059:5;:18;;;33025:13;:53::i;:::-;33089:38;33098:5;:13;;;33113:5;:13;;;33089:8;:38::i;:::-;33160:9;33143:44;;33152:6;33143:44;;;33171:15;33143:44;;;;;;:::i;:::-;;;;;;;;32493:702;;;;;;;;:::o;38406:605::-;38457:7;38466;38486:15;38504:7;;38486:25;;38522:15;24104:4;38522:25;;38563:9;38558:338;38582:9;:16;;;;38578:1;:20;38558:338;;;38666:7;38642;:21;38650:9;38660:1;38650:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38642:21;;;;;;;;;;;;;;;;:31;:83;;;;38718:7;38694;:21;38702:9;38712:1;38702:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38694:21;;;;;;;;;;;;;;;;:31;38642:83;38620:146;;;38749:7;;24104:4;38741:25;;;;;;;;;38620:146;38791:34;38803:7;:21;38811:9;38821:1;38811:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38803:21;;;;;;;;;;;;;;;;38791:7;:11;;:34;;;;:::i;:::-;38781:44;;38850:34;38862:7;:21;38870:9;38880:1;38870:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38862:21;;;;;;;;;;;;;;;;38850:7;:11;;:34;;;;:::i;:::-;38840:44;;38600:3;;;;;:::i;:::-;;;;38558:338;;;;38920:20;24104:4;38920:7;;:11;;:20;;;;:::i;:::-;38910:7;:30;38906:61;;;38950:7;;24104:4;38942:25;;;;;;;;38906:61;38986:7;38995;38978:25;;;;;;38406:605;;;:::o;3337:312::-;3457:7;3489:1;3485;:5;3492:12;3477:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;3516:9;3532:1;3528;:5;;;;:::i;:::-;3516:17;;3640:1;3633:8;;;3337:312;;;;;:::o;35599:175::-;35691:24;35703:11;35691:7;;:11;;:24;;;;:::i;:::-;35681:7;:34;;;;35739:27;35754:11;35739:10;;:14;;:27;;;;:::i;:::-;35726:10;:40;;;;35599:175;;:::o;35782:298::-;35909:41;35936:13;35909:7;:22;35925:4;35909:22;;;;;;;;;;;;;;;;:26;;:41;;;;:::i;:::-;35884:7;:22;35900:4;35884:22;;;;;;;;;;;;;;;:66;;;;35965:11;:26;35985:4;35965:26;;;;;;;;;;;;;;;;;;;;;;;;;35961:111;;;36031:41;36058:13;36031:7;:22;36047:4;36031:22;;;;;;;;;;;;;;;;:26;;:41;;;;:::i;:::-;36006:7;:22;36022:4;36006:22;;;;;;;;;;;;;;;:66;;;;35961:111;35782:298;;:::o;36088:259::-;36186:36;36213:8;36186:7;:22;36202:4;36186:22;;;;;;;;;;;;;;;;:26;;:36;;;;:::i;:::-;36161:7;:22;36177:4;36161:22;;;;;;;;;;;;;;;:61;;;;36237:11;:26;36257:4;36237:26;;;;;;;;;;;;;;;;;;;;;;;;;36233:106;;;36303:36;36330:8;36303:7;:22;36319:4;36303:22;;;;;;;;;;;;;;;;:26;;:36;;;;:::i;:::-;36278:7;:22;36294:4;36278:22;;;;;;;;;;;;;;;:61;;;;36233:106;36088:259;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:262::-;;544:2;532:9;523:7;519:23;515:32;512:2;;;560:1;557;550:12;512:2;603:1;628:53;673:7;664:6;653:9;649:22;628:53;:::i;:::-;618:63;;574:117;502:196;;;;:::o;704:407::-;;;829:2;817:9;808:7;804:23;800:32;797:2;;;845:1;842;835:12;797:2;888:1;913:53;958:7;949:6;938:9;934:22;913:53;:::i;:::-;903:63;;859:117;1015:2;1041:53;1086:7;1077:6;1066:9;1062:22;1041:53;:::i;:::-;1031:63;;986:118;787:324;;;;;:::o;1117:552::-;;;;1259:2;1247:9;1238:7;1234:23;1230:32;1227:2;;;1275:1;1272;1265:12;1227:2;1318:1;1343:53;1388:7;1379:6;1368:9;1364:22;1343:53;:::i;:::-;1333:63;;1289:117;1445:2;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1416:118;1573:2;1599:53;1644:7;1635:6;1624:9;1620:22;1599:53;:::i;:::-;1589:63;;1544:118;1217:452;;;;;:::o;1675:407::-;;;1800:2;1788:9;1779:7;1775:23;1771:32;1768:2;;;1816:1;1813;1806:12;1768:2;1859:1;1884:53;1929:7;1920:6;1909:9;1905:22;1884:53;:::i;:::-;1874:63;;1830:117;1986:2;2012:53;2057:7;2048:6;2037:9;2033:22;2012:53;:::i;:::-;2002:63;;1957:118;1758:324;;;;;:::o;2088:262::-;;2196:2;2184:9;2175:7;2171:23;2167:32;2164:2;;;2212:1;2209;2202:12;2164:2;2255:1;2280:53;2325:7;2316:6;2305:9;2301:22;2280:53;:::i;:::-;2270:63;;2226:117;2154:196;;;;:::o;2356:401::-;;;2478:2;2466:9;2457:7;2453:23;2449:32;2446:2;;;2494:1;2491;2484:12;2446:2;2537:1;2562:53;2607:7;2598:6;2587:9;2583:22;2562:53;:::i;:::-;2552:63;;2508:117;2664:2;2690:50;2732:7;2723:6;2712:9;2708:22;2690:50;:::i;:::-;2680:60;;2635:115;2436:321;;;;;:::o;2763:179::-;;2853:46;2895:3;2887:6;2853:46;:::i;:::-;2931:4;2926:3;2922:14;2908:28;;2843:99;;;;:::o;2948:108::-;3025:24;3043:5;3025:24;:::i;:::-;3020:3;3013:37;3003:53;;:::o;3062:118::-;3149:24;3167:5;3149:24;:::i;:::-;3144:3;3137:37;3127:53;;:::o;3216:732::-;;3364:54;3412:5;3364:54;:::i;:::-;3434:86;3513:6;3508:3;3434:86;:::i;:::-;3427:93;;3544:56;3594:5;3544:56;:::i;:::-;3623:7;3654:1;3639:284;3664:6;3661:1;3658:13;3639:284;;;3740:6;3734:13;3767:63;3826:3;3811:13;3767:63;:::i;:::-;3760:70;;3853:60;3906:6;3853:60;:::i;:::-;3843:70;;3699:224;3686:1;3683;3679:9;3674:14;;3639:284;;;3643:14;3939:3;3932:10;;3340:608;;;;;;;:::o;3954:109::-;4035:21;4050:5;4035:21;:::i;:::-;4030:3;4023:34;4013:50;;:::o;4069:185::-;4183:64;4241:5;4183:64;:::i;:::-;4178:3;4171:77;4161:93;;:::o;4260:147::-;4355:45;4394:5;4355:45;:::i;:::-;4350:3;4343:58;4333:74;;:::o;4413:364::-;;4529:39;4562:5;4529:39;:::i;:::-;4584:71;4648:6;4643:3;4584:71;:::i;:::-;4577:78;;4664:52;4709:6;4704:3;4697:4;4690:5;4686:16;4664:52;:::i;:::-;4741:29;4763:6;4741:29;:::i;:::-;4736:3;4732:39;4725:46;;4505:272;;;;;:::o;4783:367::-;;4946:67;5010:2;5005:3;4946:67;:::i;:::-;4939:74;;5043:34;5039:1;5034:3;5030:11;5023:55;5109:5;5104:2;5099:3;5095:12;5088:27;5141:2;5136:3;5132:12;5125:19;;4929:221;;;:::o;5156:374::-;;5319:67;5383:2;5378:3;5319:67;:::i;:::-;5312:74;;5416:34;5412:1;5407:3;5403:11;5396:55;5482:12;5477:2;5472:3;5468:12;5461:34;5521:2;5516:3;5512:12;5505:19;;5302:228;;;:::o;5536:370::-;;5699:67;5763:2;5758:3;5699:67;:::i;:::-;5692:74;;5796:34;5792:1;5787:3;5783:11;5776:55;5862:8;5857:2;5852:3;5848:12;5841:30;5897:2;5892:3;5888:12;5881:19;;5682:224;;;:::o;5912:366::-;;6075:67;6139:2;6134:3;6075:67;:::i;:::-;6068:74;;6172:34;6168:1;6163:3;6159:11;6152:55;6238:4;6233:2;6228:3;6224:12;6217:26;6269:2;6264:3;6260:12;6253:19;;6058:220;;;:::o;6284:366::-;;6447:67;6511:2;6506:3;6447:67;:::i;:::-;6440:74;;6544:34;6540:1;6535:3;6531:11;6524:55;6610:4;6605:2;6600:3;6596:12;6589:26;6641:2;6636:3;6632:12;6625:19;;6430:220;;;:::o;6656:325::-;;6819:67;6883:2;6878:3;6819:67;:::i;:::-;6812:74;;6916:29;6912:1;6907:3;6903:11;6896:50;6972:2;6967:3;6963:12;6956:19;;6802:179;;;:::o;6987:325::-;;7150:67;7214:2;7209:3;7150:67;:::i;:::-;7143:74;;7247:29;7243:1;7238:3;7234:11;7227:50;7303:2;7298:3;7294:12;7287:19;;7133:179;;;:::o;7318:321::-;;7481:67;7545:2;7540:3;7481:67;:::i;:::-;7474:74;;7578:25;7574:1;7569:3;7565:11;7558:46;7630:2;7625:3;7621:12;7614:19;;7464:175;;;:::o;7645:329::-;;7808:67;7872:2;7867:3;7808:67;:::i;:::-;7801:74;;7905:33;7901:1;7896:3;7892:11;7885:54;7965:2;7960:3;7956:12;7949:19;;7791:183;;;:::o;7980:366::-;;8143:67;8207:2;8202:3;8143:67;:::i;:::-;8136:74;;8240:34;8236:1;8231:3;8227:11;8220:55;8306:4;8301:2;8296:3;8292:12;8285:26;8337:2;8332:3;8328:12;8321:19;;8126:220;;;:::o;8352:365::-;;8515:67;8579:2;8574:3;8515:67;:::i;:::-;8508:74;;8612:34;8608:1;8603:3;8599:11;8592:55;8678:3;8673:2;8668:3;8664:12;8657:25;8708:2;8703:3;8699:12;8692:19;;8498:219;;;:::o;8723:330::-;;8886:67;8950:2;8945:3;8886:67;:::i;:::-;8879:74;;8983:34;8979:1;8974:3;8970:11;8963:55;9044:2;9039:3;9035:12;9028:19;;8869:184;;;:::o;9059:373::-;;9222:67;9286:2;9281:3;9222:67;:::i;:::-;9215:74;;9319:34;9315:1;9310:3;9306:11;9299:55;9385:11;9380:2;9375:3;9371:12;9364:33;9423:2;9418:3;9414:12;9407:19;;9205:227;;;:::o;9438:369::-;;9601:67;9665:2;9660:3;9601:67;:::i;:::-;9594:74;;9698:34;9694:1;9689:3;9685:11;9678:55;9764:7;9759:2;9754:3;9750:12;9743:29;9798:2;9793:3;9789:12;9782:19;;9584:223;;;:::o;9813:368::-;;9976:67;10040:2;10035:3;9976:67;:::i;:::-;9969:74;;10073:34;10069:1;10064:3;10060:11;10053:55;10139:6;10134:2;10129:3;10125:12;10118:28;10172:2;10167:3;10163:12;10156:19;;9959:222;;;:::o;10187:329::-;;10350:67;10414:2;10409:3;10350:67;:::i;:::-;10343:74;;10447:33;10443:1;10438:3;10434:11;10427:54;10507:2;10502:3;10498:12;10491:19;;10333:183;;;:::o;10522:376::-;;10685:67;10749:2;10744:3;10685:67;:::i;:::-;10678:74;;10782:34;10778:1;10773:3;10769:11;10762:55;10848:14;10843:2;10838:3;10834:12;10827:36;10889:2;10884:3;10880:12;10873:19;;10668:230;;;:::o;10904:118::-;10991:24;11009:5;10991:24;:::i;:::-;10986:3;10979:37;10969:53;;:::o;11028:112::-;11111:22;11127:5;11111:22;:::i;:::-;11106:3;11099:35;11089:51;;:::o;11146:222::-;;11277:2;11266:9;11262:18;11254:26;;11290:71;11358:1;11347:9;11343:17;11334:6;11290:71;:::i;:::-;11244:124;;;;:::o;11374:442::-;;11561:2;11550:9;11546:18;11538:26;;11574:71;11642:1;11631:9;11627:17;11618:6;11574:71;:::i;:::-;11655:72;11723:2;11712:9;11708:18;11699:6;11655:72;:::i;:::-;11737;11805:2;11794:9;11790:18;11781:6;11737:72;:::i;:::-;11528:288;;;;;;:::o;11822:210::-;;11947:2;11936:9;11932:18;11924:26;;11960:65;12022:1;12011:9;12007:17;11998:6;11960:65;:::i;:::-;11914:118;;;;:::o;12038:276::-;;12196:2;12185:9;12181:18;12173:26;;12209:98;12304:1;12293:9;12289:17;12280:6;12209:98;:::i;:::-;12163:151;;;;:::o;12320:313::-;;12471:2;12460:9;12456:18;12448:26;;12520:9;12514:4;12510:20;12506:1;12495:9;12491:17;12484:47;12548:78;12621:4;12612:6;12548:78;:::i;:::-;12540:86;;12438:195;;;;:::o;12639:419::-;;12843:2;12832:9;12828:18;12820:26;;12892:9;12886:4;12882:20;12878:1;12867:9;12863:17;12856:47;12920:131;13046:4;12920:131;:::i;:::-;12912:139;;12810:248;;;:::o;13064:419::-;;13268:2;13257:9;13253:18;13245:26;;13317:9;13311:4;13307:20;13303:1;13292:9;13288:17;13281:47;13345:131;13471:4;13345:131;:::i;:::-;13337:139;;13235:248;;;:::o;13489:419::-;;13693:2;13682:9;13678:18;13670:26;;13742:9;13736:4;13732:20;13728:1;13717:9;13713:17;13706:47;13770:131;13896:4;13770:131;:::i;:::-;13762:139;;13660:248;;;:::o;13914:419::-;;14118:2;14107:9;14103:18;14095:26;;14167:9;14161:4;14157:20;14153:1;14142:9;14138:17;14131:47;14195:131;14321:4;14195:131;:::i;:::-;14187:139;;14085:248;;;:::o;14339:419::-;;14543:2;14532:9;14528:18;14520:26;;14592:9;14586:4;14582:20;14578:1;14567:9;14563:17;14556:47;14620:131;14746:4;14620:131;:::i;:::-;14612:139;;14510:248;;;:::o;14764:419::-;;14968:2;14957:9;14953:18;14945:26;;15017:9;15011:4;15007:20;15003:1;14992:9;14988:17;14981:47;15045:131;15171:4;15045:131;:::i;:::-;15037:139;;14935:248;;;:::o;15189:419::-;;15393:2;15382:9;15378:18;15370:26;;15442:9;15436:4;15432:20;15428:1;15417:9;15413:17;15406:47;15470:131;15596:4;15470:131;:::i;:::-;15462:139;;15360:248;;;:::o;15614:419::-;;15818:2;15807:9;15803:18;15795:26;;15867:9;15861:4;15857:20;15853:1;15842:9;15838:17;15831:47;15895:131;16021:4;15895:131;:::i;:::-;15887:139;;15785:248;;;:::o;16039:419::-;;16243:2;16232:9;16228:18;16220:26;;16292:9;16286:4;16282:20;16278:1;16267:9;16263:17;16256:47;16320:131;16446:4;16320:131;:::i;:::-;16312:139;;16210:248;;;:::o;16464:419::-;;16668:2;16657:9;16653:18;16645:26;;16717:9;16711:4;16707:20;16703:1;16692:9;16688:17;16681:47;16745:131;16871:4;16745:131;:::i;:::-;16737:139;;16635:248;;;:::o;16889:419::-;;17093:2;17082:9;17078:18;17070:26;;17142:9;17136:4;17132:20;17128:1;17117:9;17113:17;17106:47;17170:131;17296:4;17170:131;:::i;:::-;17162:139;;17060:248;;;:::o;17314:419::-;;17518:2;17507:9;17503:18;17495:26;;17567:9;17561:4;17557:20;17553:1;17542:9;17538:17;17531:47;17595:131;17721:4;17595:131;:::i;:::-;17587:139;;17485:248;;;:::o;17739:419::-;;17943:2;17932:9;17928:18;17920:26;;17992:9;17986:4;17982:20;17978:1;17967:9;17963:17;17956:47;18020:131;18146:4;18020:131;:::i;:::-;18012:139;;17910:248;;;:::o;18164:419::-;;18368:2;18357:9;18353:18;18345:26;;18417:9;18411:4;18407:20;18403:1;18392:9;18388:17;18381:47;18445:131;18571:4;18445:131;:::i;:::-;18437:139;;18335:248;;;:::o;18589:419::-;;18793:2;18782:9;18778:18;18770:26;;18842:9;18836:4;18832:20;18828:1;18817:9;18813:17;18806:47;18870:131;18996:4;18870:131;:::i;:::-;18862:139;;18760:248;;;:::o;19014:419::-;;19218:2;19207:9;19203:18;19195:26;;19267:9;19261:4;19257:20;19253:1;19242:9;19238:17;19231:47;19295:131;19421:4;19295:131;:::i;:::-;19287:139;;19185:248;;;:::o;19439:419::-;;19643:2;19632:9;19628:18;19620:26;;19692:9;19686:4;19682:20;19678:1;19667:9;19663:17;19656:47;19720:131;19846:4;19720:131;:::i;:::-;19712:139;;19610:248;;;:::o;19864:222::-;;19995:2;19984:9;19980:18;19972:26;;20008:71;20076:1;20065:9;20061:17;20052:6;20008:71;:::i;:::-;19962:124;;;;:::o;20092:831::-;;20393:3;20382:9;20378:19;20370:27;;20407:71;20475:1;20464:9;20460:17;20451:6;20407:71;:::i;:::-;20488:80;20564:2;20553:9;20549:18;20540:6;20488:80;:::i;:::-;20615:9;20609:4;20605:20;20600:2;20589:9;20585:18;20578:48;20643:108;20746:4;20737:6;20643:108;:::i;:::-;20635:116;;20761:72;20829:2;20818:9;20814:18;20805:6;20761:72;:::i;:::-;20843:73;20911:3;20900:9;20896:19;20887:6;20843:73;:::i;:::-;20360:563;;;;;;;;:::o;20929:442::-;;21116:2;21105:9;21101:18;21093:26;;21129:71;21197:1;21186:9;21182:17;21173:6;21129:71;:::i;:::-;21210:72;21278:2;21267:9;21263:18;21254:6;21210:72;:::i;:::-;21292;21360:2;21349:9;21345:18;21336:6;21292:72;:::i;:::-;21083:288;;;;;;:::o;21377:214::-;;21504:2;21493:9;21489:18;21481:26;;21517:67;21581:1;21570:9;21566:17;21557:6;21517:67;:::i;:::-;21471:120;;;;:::o;21597:132::-;;21687:3;21679:11;;21717:4;21712:3;21708:14;21700:22;;21669:60;;;:::o;21735:114::-;;21836:5;21830:12;21820:22;;21809:40;;;:::o;21855:99::-;;21941:5;21935:12;21925:22;;21914:40;;;:::o;21960:113::-;;22062:4;22057:3;22053:14;22045:22;;22035:38;;;:::o;22079:184::-;;22212:6;22207:3;22200:19;22252:4;22247:3;22243:14;22228:29;;22190:73;;;;:::o;22269:169::-;;22387:6;22382:3;22375:19;22427:4;22422:3;22418:14;22403:29;;22365:73;;;;:::o;22444:305::-;;22503:20;22521:1;22503:20;:::i;:::-;22498:25;;22537:20;22555:1;22537:20;:::i;:::-;22532:25;;22691:1;22623:66;22619:74;22616:1;22613:81;22610:2;;;22697:18;;:::i;:::-;22610:2;22741:1;22738;22734:9;22727:16;;22488:261;;;;:::o;22755:185::-;;22812:20;22830:1;22812:20;:::i;:::-;22807:25;;22846:20;22864:1;22846:20;:::i;:::-;22841:25;;22885:1;22875:2;;22890:18;;:::i;:::-;22875:2;22932:1;22929;22925:9;22920:14;;22797:143;;;;:::o;22946:348::-;;23009:20;23027:1;23009:20;:::i;:::-;23004:25;;23043:20;23061:1;23043:20;:::i;:::-;23038:25;;23231:1;23163:66;23159:74;23156:1;23153:81;23148:1;23141:9;23134:17;23130:105;23127:2;;;23238:18;;:::i;:::-;23127:2;23286:1;23283;23279:9;23268:20;;22994:300;;;;:::o;23300:191::-;;23360:20;23378:1;23360:20;:::i;:::-;23355:25;;23394:20;23412:1;23394:20;:::i;:::-;23389:25;;23433:1;23430;23427:8;23424:2;;;23438:18;;:::i;:::-;23424:2;23483:1;23480;23476:9;23468:17;;23345:146;;;;:::o;23497:96::-;;23563:24;23581:5;23563:24;:::i;:::-;23552:35;;23542:51;;;:::o;23599:90::-;;23676:5;23669:13;23662:21;23651:32;;23641:48;;;:::o;23695:126::-;;23772:42;23765:5;23761:54;23750:65;;23740:81;;;:::o;23827:77::-;;23893:5;23882:16;;23872:32;;;:::o;23910:86::-;;23985:4;23978:5;23974:16;23963:27;;23953:43;;;:::o;24002:180::-;;24112:64;24170:5;24112:64;:::i;:::-;24099:77;;24089:93;;;:::o;24188:140::-;;24298:24;24316:5;24298:24;:::i;:::-;24285:37;;24275:53;;;:::o;24334:121::-;;24425:24;24443:5;24425:24;:::i;:::-;24412:37;;24402:53;;;:::o;24461:307::-;24529:1;24539:113;24553:6;24550:1;24547:13;24539:113;;;24638:1;24633:3;24629:11;24623:18;24619:1;24614:3;24610:11;24603:39;24575:2;24572:1;24568:10;24563:15;;24539:113;;;24670:6;24667:1;24664:13;24661:2;;;24750:1;24741:6;24736:3;24732:16;24725:27;24661:2;24510:258;;;;:::o;24774:233::-;;24836:24;24854:5;24836:24;:::i;:::-;24827:33;;24882:66;24875:5;24872:77;24869:2;;;24952:18;;:::i;:::-;24869:2;24999:1;24992:5;24988:13;24981:20;;24817:190;;;:::o;25013:180::-;25061:77;25058:1;25051:88;25158:4;25155:1;25148:15;25182:4;25179:1;25172:15;25199:180;25247:77;25244:1;25237:88;25344:4;25341:1;25334:15;25368:4;25365:1;25358:15;25385:102;;25477:2;25473:7;25468:2;25461:5;25457:14;25453:28;25443:38;;25433:54;;;:::o;25493:122::-;25566:24;25584:5;25566:24;:::i;:::-;25559:5;25556:35;25546:2;;25605:1;25602;25595:12;25546:2;25536:79;:::o;25621:116::-;25691:21;25706:5;25691:21;:::i;:::-;25684:5;25681:32;25671:2;;25727:1;25724;25717:12;25671:2;25661:76;:::o;25743:122::-;25816:24;25834:5;25816:24;:::i;:::-;25809:5;25806:35;25796:2;;25855:1;25852;25845:12;25796:2;25786:79;:::o
Swarm Source
ipfs://167e20b066800d236872f488a75d824a741128a991353d7a7990266637b1d3b7
[ 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.