Feature Tip: Add private address tag to any address under My Name Tag !
Token migration announcement. SAITAMA token contract has migrated and rebranded to SaitaChain new address.
ERC-20
Currency
Overview
Max Total Supply
99,299,944,501.540163485 SAITAMA
Holders
142,905 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
0.531462601 SAITAMAValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SAITAMA
Compiler Version
v0.8.14+commit.80d49f37
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion, Unlicense license, Audited
Contract Source Code (Solidity)Audit Report
/** *Submitted for verification at Etherscan.io on 2022-05-30 */ /** SAITAMA V2 */ pragma solidity ^0.8.14; // SPDX-License-Identifier: Unlicensed interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ 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 payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ 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); } } } } /** * @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. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // SAITAMA V2 contract SAITAMA is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; struct RValuesStruct { uint256 rAmount; uint256 rTransferAmount; uint256 rReflectionFee; uint256 rBurnFee; uint256 rmarketingTokenFee; uint256 rMarketingETHFee; } struct TValuesStruct { uint256 tTransferAmount; uint256 tReflectionFee; uint256 tBurnFee; uint256 tmarketingTokenFee; uint256 tMarketingETHFee; } struct ValuesStruct { uint256 rAmount; uint256 rTransferAmount; uint256 rReflectionFee; uint256 rBurnFee; uint256 rmarketingTokenFee; uint256 rMarketingETHFee; uint256 tTransferAmount; uint256 tReflectionFee; uint256 tBurnFee; uint256 tmarketingTokenFee; uint256 tMarketingETHFee; } 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; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 100 * 10**9 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tReflectionFeeTotal; uint256 private _tBurnFeeTotal; string private _name = "SAITAMA"; string private _symbol = "SAITAMA"; uint8 private _decimals = 9; uint256 public _reflectionFee = 1; uint256 public _burnFee = 1; uint256 public _marketingTokenFee = 1; uint256 public _marketingETHFee = 1; address public marketingTokenFeeWallet = 0xb3a50a36f988a1D44c248a042A068F822A5FaA29; address public marketingETHFeeWallet = 0xb3a50a36f988a1D44c248a042A068F822A5FaA29; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inMarketingEthSwap = false; bool public _marketingConverttoETH = true; bool public _tradingEnabled = false; uint256 public _maxTxAmount = 100 * 10**6 * 10**9; uint256 private _numTokensSwapToETHForMarketing = 40 * 10**6 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); modifier lockTheSwap { inMarketingEthSwap = true; _; inMarketingEthSwap = false; } constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Uniswap V2 // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view 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) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public 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) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalReflectionFees() public view returns (uint256) { return _tReflectionFeeTotal; } function totalBurnFees() public view returns (uint256) { return _tBurnFeeTotal; } /** * @dev Returns the Number of tokens in contract that are needed to be reached before swapping to ETH and sending to Marketing Wallet. . */ function numTokensSwapToETHForMarketing() public view returns (uint256) { return _numTokensSwapToETHForMarketing; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { uint256 rAmount = _getValues(tAmount).rAmount; return rAmount; } else { uint256 rTransferAmount = _getValues(tAmount).rTransferAmount; 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 excludeFromReward(address account) public onlyOwner() { require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account already excluded"); require(_excluded.length < 100, "Excluded list is too long"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _distributeFee(uint256 rReflectionFee, uint256 rBurnFee, uint256 rmarketingTokenFee, uint256 tReflectionFee, uint256 tBurnFee, uint256 tmarketingTokenFee) private { _rTotal = _rTotal.sub(rReflectionFee).sub(rBurnFee); _tReflectionFeeTotal = _tReflectionFeeTotal.add(tReflectionFee); _tTotal = _tTotal.sub(tBurnFee); _tBurnFeeTotal = _tBurnFeeTotal.add(tBurnFee); _rOwned[marketingTokenFeeWallet] = _rOwned[marketingTokenFeeWallet].add(rmarketingTokenFee); if (_isExcluded[marketingTokenFeeWallet]) { _tOwned[marketingTokenFeeWallet] = _tOwned[marketingTokenFeeWallet].add(tmarketingTokenFee); } } function _getValues(uint256 tAmount) private view returns (ValuesStruct memory) { TValuesStruct memory tvs = _getTValues(tAmount); RValuesStruct memory rvs = _getRValues(tAmount, tvs.tReflectionFee, tvs.tBurnFee, tvs.tmarketingTokenFee, tvs.tMarketingETHFee, _getRate()); return ValuesStruct( rvs.rAmount, rvs.rTransferAmount, rvs.rReflectionFee, rvs.rBurnFee, rvs.rmarketingTokenFee, rvs.rMarketingETHFee, tvs.tTransferAmount, tvs.tReflectionFee, tvs.tBurnFee, tvs.tmarketingTokenFee, tvs.tMarketingETHFee ); } function _getTValues(uint256 tAmount) private view returns (TValuesStruct memory) { uint256 tReflectionFee = calculateReflectionFee(tAmount); uint256 tBurnFee = calculateBurnFee(tAmount); uint256 tmarketingTokenFee = calculatemarketingTokenFee(tAmount); uint256 tMarketingETHFee = calculateMarketingETHFee(tAmount); uint256 tTransferAmount = tAmount.sub(tReflectionFee).sub(tBurnFee).sub(tmarketingTokenFee).sub(tMarketingETHFee); return TValuesStruct(tTransferAmount, tReflectionFee, tBurnFee, tmarketingTokenFee, tMarketingETHFee); } function _getRValues(uint256 tAmount, uint256 tReflectionFee, uint256 tBurnFee, uint256 tmarketingTokenFee, uint256 tMarketingETHFee, uint256 currentRate) private pure returns (RValuesStruct memory) { uint256 rAmount = tAmount.mul(currentRate); uint256 rReflectionFee = tReflectionFee.mul(currentRate); uint256 rBurnFee = tBurnFee.mul(currentRate); uint256 rmarketingTokenFee = tmarketingTokenFee.mul(currentRate); uint256 rMarketingETHFee = tMarketingETHFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rReflectionFee).sub(rMarketingETHFee).sub(rBurnFee).sub(rmarketingTokenFee); return RValuesStruct(rAmount, rTransferAmount, rReflectionFee, rBurnFee, rmarketingTokenFee, rMarketingETHFee); } 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 _takeMarketingETHFee(uint256 rMarketingETHFee, uint256 tMarketingETHFee) private { _rOwned[address(this)] = _rOwned[address(this)].add(rMarketingETHFee); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tMarketingETHFee); } function calculateReflectionFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_reflectionFee).div( 10**2 ); } function calculateBurnFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_burnFee).div( 10**2 ); } function calculatemarketingTokenFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingTokenFee).div( 10**2 ); } function calculateMarketingETHFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingETHFee).div( 10**2 ); } function removeAllFee() private { _reflectionFee = 0; _marketingETHFee = 0; _burnFee = 0; _marketingTokenFee = 0; } function restoreAllFee() private { _reflectionFee = 1; _marketingETHFee = 1; _marketingTokenFee = 1; _burnFee = 1; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[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 from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); // block trading until owner has added liquidity and enabled trading if(!_tradingEnabled && from != owner()) { revert("Trading not yet enabled!"); } // is the token balance of this contract address over the min number of // tokens that we need to initiate a swaptoEth lock? // also, don't get caught in a circular liquidity event. // also, don't SwapMarketingAndSendETH if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= _numTokensSwapToETHForMarketing; if ( overMinTokenBalance && !inMarketingEthSwap && from != uniswapV2Pair && _marketingConverttoETH ) { contractTokenBalance = _numTokensSwapToETHForMarketing; //Perform a Swap of Token for ETH Portion of Marketing Fees swapMarketingAndSendEth(contractTokenBalance); } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount); } function swapMarketingAndSendEth(uint256 tokenAmount) private lockTheSwap { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, marketingETHFeeWallet, block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount) private { if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){ removeAllFee(); } else{ require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } ValuesStruct memory vs = _getValues(amount); _takeMarketingETHFee(vs.rMarketingETHFee, vs.tMarketingETHFee); _distributeFee(vs.rReflectionFee, vs.rBurnFee, vs.rmarketingTokenFee, vs.tReflectionFee, vs.tBurnFee, vs.tmarketingTokenFee); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount, vs); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, vs); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, vs); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount, vs); } if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) restoreAllFee(); } function _transferStandard(address sender, address recipient, ValuesStruct memory vs) private { _rOwned[sender] = _rOwned[sender].sub(vs.rAmount); _rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount); emit Transfer(sender, recipient, vs.tTransferAmount); } function _transferToExcluded(address sender, address recipient, ValuesStruct memory vs) private { _rOwned[sender] = _rOwned[sender].sub(vs.rAmount); _tOwned[recipient] = _tOwned[recipient].add(vs.tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount); emit Transfer(sender, recipient, vs.tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount, ValuesStruct memory vs) private { _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(vs.rAmount); _rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount); emit Transfer(sender, recipient, vs.tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount, ValuesStruct memory vs) private { _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(vs.rAmount); _tOwned[recipient] = _tOwned[recipient].add(vs.tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount); emit Transfer(sender, recipient, vs.tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function enableAllFees() external onlyOwner() { _reflectionFee = 1; _burnFee = 1; _marketingTokenFee = 1; _marketingETHFee = 1; _marketingConverttoETH = true; } function disableAllFees() external onlyOwner() { _reflectionFee = 0; _burnFee = 0; _marketingTokenFee = 0; _marketingETHFee = 0; _marketingConverttoETH = false; } function setMarketingETHWallet(address newWallet) external onlyOwner() { marketingETHFeeWallet = newWallet; } function setMarketingTokenWallet(address newWallet) external onlyOwner() { marketingTokenFeeWallet = newWallet; } function setMaxTxAmount(uint256 maxAmountInTokensWithDecimals) external onlyOwner() { require(maxAmountInTokensWithDecimals > 100 * 10**6 * 10**9, "Cannot set transaction amount less than 0.1 percent of initial Total Supply!"); _maxTxAmount = maxAmountInTokensWithDecimals; } function enableTrading() public onlyOwner { require(!_tradingEnabled, "Trading already enabled!"); _tradingEnabled = true; } function setmarketingConverttoETH(bool _enabled) public onlyOwner { _marketingConverttoETH = _enabled; } // Number of Tokens to Accrue before Selling To Add to Marketing function setnumTokensSwapToETHForMarketing(uint256 tokenAmount) external onlyOwner() { _numTokensSwapToETHForMarketing = tokenAmount; } /** * @dev Function to recover any ETH sent to Contract by Mistake. */ function recoverETHFromContract(uint256 weiAmount) external onlyOwner{ require(address(this).balance >= weiAmount, "insufficient ETH balance"); payable(owner()).transfer(weiAmount); } /** * @dev Function to recover any ERC20 Tokens sent to Contract by Mistake. */ function recoverAnyERC20TokensFromContract(address _tokenAddr, address _to, uint _amount) public onlyOwner { IERC20(_tokenAddr).transfer(_to, _amount); } }
Contract Security Audit
- Certik - May 26th, 2022 - Security Audit Report
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingConverttoETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingETHFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTokenFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingETHFeeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokenFeeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSwapToETHForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverAnyERC20TokensFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"recoverETHFromContract","outputs":[],"stateMutability":"nonpayable","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":"newWallet","type":"address"}],"name":"setMarketingETHWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingTokenWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxAmountInTokensWithDecimals","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setmarketingConverttoETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"setnumTokensSwapToETHForMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurnFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c060405268056bc75e2d6310000060095560095460001962000023919062000763565b600019620000329190620007ca565b600a556040518060400160405280600781526020017f53414954414d4100000000000000000000000000000000000000000000000000815250600d9080519060200190620000829291906200067a565b506040518060400160405280600781526020017f53414954414d4100000000000000000000000000000000000000000000000000815250600e9080519060200190620000d09291906200067a565b506009600f60006101000a81548160ff021916908360ff160217905550600160105560016011556001601255600160135573b3a50a36f988a1d44c248a042a068f822a5faa29601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b3a50a36f988a1d44c248a042a068f822a5faa29601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601560146101000a81548160ff02191690831515021790555060016015806101000a81548160ff0219169083151502179055506000601560166101000a81548160ff02191690831515021790555067016345785d8a0000601655668e1bc9bf0400006017553480156200021f57600080fd5b506000620002326200064960201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a5460036000620002e76200064960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200038a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b091906200086f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000418573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043e91906200086f565b6040518363ffffffff1660e01b81526004016200045d929190620008b2565b6020604051808303816000875af11580156200047d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a391906200086f565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160066000620005206200065160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005d96200064960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200063a9190620008f0565b60405180910390a35062000971565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000688906200093c565b90600052602060002090601f016020900481019282620006ac5760008555620006f8565b82601f10620006c757805160ff1916838001178555620006f8565b82800160010185558215620006f8579182015b82811115620006f7578251825591602001919060010190620006da565b5b5090506200070791906200070b565b5090565b5b80821115620007265760008160009055506001016200070c565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000770826200072a565b91506200077d836200072a565b92508262000790576200078f62000734565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007d7826200072a565b9150620007e4836200072a565b925082821015620007fa57620007f96200079b565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000837826200080a565b9050919050565b62000849816200082a565b81146200085557600080fd5b50565b60008151905062000869816200083e565b92915050565b60006020828403121562000888576200088762000805565b5b6000620008988482850162000858565b91505092915050565b620008ac816200082a565b82525050565b6000604082019050620008c96000830185620008a1565b620008d86020830184620008a1565b9392505050565b620008ea816200072a565b82525050565b6000602082019050620009076000830184620008df565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200095557607f821691505b6020821081036200096b576200096a6200090d565b5b50919050565b60805160a0516158ef620009b3600039600081816110130152612775015260008181610b6f01528181612ab001528181612b910152612bb801526158ef6000f3fe6080604052600436106102765760003560e01c8063741af87f1161014f578063adbede72116100c1578063ea2f0b371161007a578063ea2f0b371461098b578063ec0c9d4d146109b4578063ec28438a146109dd578063f2fde38b14610a06578063f709594514610a2f578063ffc7863514610a5a5761027d565b8063adbede721461087b578063b8d36b50146108a6578063c0b0fda2146108cf578063c5254f40146108fa578063c730b8a414610923578063dd62ed3e1461094e5761027d565b80638c8f8c04116101135780638c8f8c04146107595780638da5cb5b146107825780638ff67c36146107ad57806395d89b41146107d6578063a457c2d714610801578063a9059cbb1461083e5761027d565b8063741af87f1461069857806376b851ca146106af5780637d1db4a5146106da57806388f82020146107055780638a8c523c146107425761027d565b806338780fe6116101e857806349bd5a5e116101ac57806349bd5a5e1461058857806352390c02146105b35780635342acb4146105dc57806370a082311461061957806370c668c814610656578063715018a6146106815761027d565b806338780fe61461049157806338e2f22f146104ba57806339509351146104e5578063437823ec146105225780634549b0391461054b5761027d565b806318160ddd1161023a57806318160ddd1461036b57806323b872dd146103965780632d838119146103d3578063313ce56714610410578063317653e01461043b5780633206b4aa146104665761027d565b806301ba031f1461028257806306486014146102ad57806306fdde03146102d8578063095ea7b3146103035780631694505e146103405761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a71565b6040516102a49190614613565b60405180910390f35b3480156102b957600080fd5b506102c2610a97565b6040516102cf9190614613565b60405180910390f35b3480156102e457600080fd5b506102ed610abd565b6040516102fa91906146c7565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190614750565b610b4f565b60405161033791906147ab565b60405180910390f35b34801561034c57600080fd5b50610355610b6d565b6040516103629190614825565b60405180910390f35b34801561037757600080fd5b50610380610b91565b60405161038d919061484f565b60405180910390f35b3480156103a257600080fd5b506103bd60048036038101906103b8919061486a565b610b9b565b6040516103ca91906147ab565b60405180910390f35b3480156103df57600080fd5b506103fa60048036038101906103f591906148bd565b610c74565b604051610407919061484f565b60405180910390f35b34801561041c57600080fd5b50610425610ce2565b6040516104329190614906565b60405180910390f35b34801561044757600080fd5b50610450610cf9565b60405161045d919061484f565b60405180910390f35b34801561047257600080fd5b5061047b610d03565b604051610488919061484f565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190614921565b610d09565b005b3480156104c657600080fd5b506104cf610de2565b6040516104dc919061484f565b60405180910390f35b3480156104f157600080fd5b5061050c60048036038101906105079190614750565b610dec565b60405161051991906147ab565b60405180910390f35b34801561052e57600080fd5b5061054960048036038101906105449190614921565b610e9f565b005b34801561055757600080fd5b50610572600480360381019061056d919061497a565b610f8f565b60405161057f919061484f565b60405180910390f35b34801561059457600080fd5b5061059d611011565b6040516105aa9190614613565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d59190614921565b611035565b005b3480156105e857600080fd5b5061060360048036038101906105fe9190614921565b6113b3565b60405161061091906147ab565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190614921565b611409565b60405161064d919061484f565b60405180910390f35b34801561066257600080fd5b5061066b6114f4565b604051610678919061484f565b60405180910390f35b34801561068d57600080fd5b506106966114fa565b005b3480156106a457600080fd5b506106ad61164d565b005b3480156106bb57600080fd5b506106c461171e565b6040516106d191906147ab565b60405180910390f35b3480156106e657600080fd5b506106ef61172f565b6040516106fc919061484f565b60405180910390f35b34801561071157600080fd5b5061072c60048036038101906107279190614921565b611735565b60405161073991906147ab565b60405180910390f35b34801561074e57600080fd5b5061075761178b565b005b34801561076557600080fd5b50610780600480360381019061077b919061486a565b61188d565b005b34801561078e57600080fd5b506107976119a6565b6040516107a49190614613565b60405180910390f35b3480156107b957600080fd5b506107d460048036038101906107cf91906149ba565b6119cf565b005b3480156107e257600080fd5b506107eb611a80565b6040516107f891906146c7565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190614750565b611b12565b60405161083591906147ab565b60405180910390f35b34801561084a57600080fd5b5061086560048036038101906108609190614750565b611bdf565b60405161087291906147ab565b60405180910390f35b34801561088757600080fd5b50610890611bfd565b60405161089d919061484f565b60405180910390f35b3480156108b257600080fd5b506108cd60048036038101906108c891906148bd565b611c07565b005b3480156108db57600080fd5b506108e4611d30565b6040516108f1919061484f565b60405180910390f35b34801561090657600080fd5b50610921600480360381019061091c9190614921565b611d36565b005b34801561092f57600080fd5b50610938611e0f565b604051610945919061484f565b60405180910390f35b34801561095a57600080fd5b50610975600480360381019061097091906149e7565b611e15565b604051610982919061484f565b60405180910390f35b34801561099757600080fd5b506109b260048036038101906109ad9190614921565b611e9c565b005b3480156109c057600080fd5b506109db60048036038101906109d691906148bd565b611f8c565b005b3480156109e957600080fd5b50610a0460048036038101906109ff91906148bd565b61202b565b005b348015610a1257600080fd5b50610a2d6004803603810190610a289190614921565b612114565b005b348015610a3b57600080fd5b50610a446122d5565b604051610a5191906147ab565b60405180910390f35b348015610a6657600080fd5b50610a6f6122e8565b005b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600d8054610acc90614a56565b80601f0160208091040260200160405190810160405280929190818152602001828054610af890614a56565b8015610b455780601f10610b1a57610100808354040283529160200191610b45565b820191906000526020600020905b815481529060010190602001808311610b2857829003601f168201915b5050505050905090565b6000610b63610b5c6123b9565b84846123c1565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954905090565b6000610ba884848461258a565b610c6984610bb46123b9565b610c648560405180606001604052806028815260200161586d60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c1a6123b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128009092919063ffffffff16565b6123c1565b600190509392505050565b6000600a54821115610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290614af9565b60405180910390fd5b6000610cc5612864565b9050610cda818461288f90919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b6000600c54905090565b60105481565b610d116123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590614b65565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601754905090565b6000610e95610df96123b9565b84610e908560056000610e0a6123b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b6123c1565b6001905092915050565b610ea76123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b90614b65565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600954831115610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd90614bd1565b60405180910390fd5b81610ff5576000610fe684612937565b6000015190508091505061100b565b600061100084612937565b602001519050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61103d6123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c190614b65565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361114c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114390614c63565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d090614ccf565b60405180910390fd5b606460088054905010611221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121890614d3b565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156112f5576112b1600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c74565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114a457600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506114ef565b6114ec600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c74565b90505b919050565b60125481565b6115026123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158690614b65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6116556123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990614b65565b60405180910390fd5b600060108190555060006011819055506000601281905550600060138190555060006015806101000a81548160ff021916908315150217905550565b60158054906101000a900460ff1681565b60165481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6117936123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790614b65565b60405180910390fd5b601560169054906101000a900460ff1615611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790614da7565b60405180910390fd5b6001601560166101000a81548160ff021916908315150217905550565b6118956123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191990614b65565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161195d929190614dc7565b6020604051808303816000875af115801561197c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a09190614e05565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119d76123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b90614b65565b60405180910390fd5b806015806101000a81548160ff02191690831515021790555050565b6060600e8054611a8f90614a56565b80601f0160208091040260200160405190810160405280929190818152602001828054611abb90614a56565b8015611b085780601f10611add57610100808354040283529160200191611b08565b820191906000526020600020905b815481529060010190602001808311611aeb57829003601f168201915b5050505050905090565b6000611bd5611b1f6123b9565b84611bd0856040518060600160405280602581526020016158956025913960056000611b496123b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128009092919063ffffffff16565b6123c1565b6001905092915050565b6000611bf3611bec6123b9565b848461258a565b6001905092915050565b6000600b54905090565b611c0f6123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390614b65565b60405180910390fd5b80471015611cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd690614e7e565b60405180910390fd5b611ce76119a6565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611d2c573d6000803e3d6000fd5b5050565b60115481565b611d3e6123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc290614b65565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ea46123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2890614b65565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611f946123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201890614b65565b60405180910390fd5b8060178190555050565b6120336123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b790614b65565b60405180910390fd5b67016345785d8a0000811161210a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210190614f36565b60405180910390fd5b8060168190555050565b61211c6123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a090614b65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90614fc8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601560169054906101000a900460ff1681565b6122f06123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461237d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237490614b65565b60405180910390fd5b600160108190555060016011819055506001601281905550600160138190555060016015806101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612430576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124279061505a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361249f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612496906150ec565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161257d919061484f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f09061517e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f90615210565b60405180910390fd5b600081116126ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a2906152a2565b60405180910390fd5b601560169054906101000a900460ff161580156126fb57506126cb6119a6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561273b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127329061530e565b60405180910390fd5b600061274630611409565b90506000601754821015905080801561276c5750601560149054906101000a900460ff16155b80156127c457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156127da575060158054906101000a900460ff165b156127ee5760175491506127ed826129f6565b5b6127f9858585612c8b565b5050505050565b6000838311158290612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283f91906146c7565b60405180910390fd5b5060008385612857919061535d565b9050809150509392505050565b6000806000612871613162565b91509150612888818361288f90919063ffffffff16565b9250505090565b60006128d183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613415565b905092915050565b60008082846128e89190615391565b90508381101561292d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292490615433565b60405180910390fd5b8091505092915050565b61293f614513565b600061294a83613478565b9050600061297384836020015184604001518560600151866080015161296e612864565b613534565b905060405180610160016040528082600001518152602001826020015181526020018260400151815260200182606001518152602001826080015181526020018260a00151815260200183600001518152602001836020015181526020018360400151815260200183606001518152602001836080015181525092505050919050565b6001601560146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612a2e57612a2d615453565b5b604051908082528060200260200182016040528015612a5c5781602001602082028036833780820191505090505b5090503081600081518110612a7457612a73615482565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3d91906154c6565b81600181518110612b5157612b50615482565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612bb6307f0000000000000000000000000000000000000000000000000000000000000000846123c1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612c3a9594939291906155ec565b600060405180830381600087803b158015612c5457600080fd5b505af1158015612c68573d6000803e3d6000fd5b50505050506000601560146101000a81548160ff02191690831515021790555050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d2c5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d3e57612d3961363b565b612d84565b601654811115612d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7a906156b8565b60405180910390fd5b5b6000612d8f82612937565b9050612da48160a0015182610140015161365d565b612dcc8160400151826060015183608001518460e001518561010001518661012001516137de565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e6f5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e8557612e8084848484613a8b565b6130ad565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f285750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f3d57612f38848483613cc1565b6130ac565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612fe15750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ff657612ff1848483613efa565b6130ab565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130985750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130aa576130a98484848461409a565b5b5b5b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061314e5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561315c5761315b614369565b5b50505050565b6000806000600a5490506000600954905060005b6008805490508110156133d85782600360006008848154811061319c5761319b615482565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061328a575081600460006008848154811061322257613221615482565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156132a157600a5460095494509450505050613411565b61333160036000600884815481106132bc576132bb615482565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461438b90919063ffffffff16565b92506133c3600460006008848154811061334e5761334d615482565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361438b90919063ffffffff16565b915080806133d0906156d8565b915050613176565b506133f0600954600a5461288f90919063ffffffff16565b82101561340857600a54600954935093505050613411565b81819350935050505b9091565b6000808311829061345c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345391906146c7565b60405180910390fd5b506000838561346b919061574f565b9050809150509392505050565b61348061456d565b600061348b836143d5565b9050600061349884614406565b905060006134a585614437565b905060006134b286614468565b905060006134ff826134f1856134e3886134d58b8e61438b90919063ffffffff16565b61438b90919063ffffffff16565b61438b90919063ffffffff16565b61438b90919063ffffffff16565b90506040518060a001604052808281526020018681526020018581526020018481526020018381525095505050505050919050565b61353c61459c565b6000613551838961449990919063ffffffff16565b90506000613568848961449990919063ffffffff16565b9050600061357f858961449990919063ffffffff16565b90506000613596868961449990919063ffffffff16565b905060006135ad878961449990919063ffffffff16565b905060006135fa836135ec866135de866135d08b8d61438b90919063ffffffff16565b61438b90919063ffffffff16565b61438b90919063ffffffff16565b61438b90919063ffffffff16565b90506040518060c001604052808781526020018281526020018681526020018581526020018481526020018381525096505050505050509695505050505050565b6000601081905550600060138190555060006011819055506000601281905550565b6136af82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156137da5761379681600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b613805856137f788600a5461438b90919063ffffffff16565b61438b90919063ffffffff16565b600a8190555061382083600b546128d990919063ffffffff16565b600b8190555061383b8260095461438b90919063ffffffff16565b60098190555061385682600c546128d990919063ffffffff16565b600c819055506138d08460036000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b60036000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060076000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a8357613a1d8160046000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b60046000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050505050565b613add82600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b768160000151600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c0f8160200151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051613cb3919061484f565b60405180910390a350505050565b613d178160000151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613db08160c00151600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e498160200151600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051613eed919061484f565b60405180910390a3505050565b613f508160000151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fe98160200151600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161408d919061484f565b60405180910390a3505050565b6140ec82600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141858160000151600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061421e8160c00151600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142b78160200151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161435b919061484f565b60405180910390a350505050565b6001601081905550600160138190555060016012819055506001601181905550565b60006143cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612800565b905092915050565b60006143ff60646143f16010548561449990919063ffffffff16565b61288f90919063ffffffff16565b9050919050565b600061443060646144226011548561449990919063ffffffff16565b61288f90919063ffffffff16565b9050919050565b600061446160646144536012548561449990919063ffffffff16565b61288f90919063ffffffff16565b9050919050565b600061449260646144846013548561449990919063ffffffff16565b61288f90919063ffffffff16565b9050919050565b60008083036144ab576000905061450d565b600082846144b99190615780565b90508284826144c8919061574f565b14614508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144ff9061584c565b60405180910390fd5b809150505b92915050565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006145fd826145d2565b9050919050565b61460d816145f2565b82525050565b60006020820190506146286000830184614604565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561466857808201518184015260208101905061464d565b83811115614677576000848401525b50505050565b6000601f19601f8301169050919050565b60006146998261462e565b6146a38185614639565b93506146b381856020860161464a565b6146bc8161467d565b840191505092915050565b600060208201905081810360008301526146e1818461468e565b905092915050565b600080fd5b6146f7816145f2565b811461470257600080fd5b50565b600081359050614714816146ee565b92915050565b6000819050919050565b61472d8161471a565b811461473857600080fd5b50565b60008135905061474a81614724565b92915050565b60008060408385031215614767576147666146e9565b5b600061477585828601614705565b92505060206147868582860161473b565b9150509250929050565b60008115159050919050565b6147a581614790565b82525050565b60006020820190506147c0600083018461479c565b92915050565b6000819050919050565b60006147eb6147e66147e1846145d2565b6147c6565b6145d2565b9050919050565b60006147fd826147d0565b9050919050565b600061480f826147f2565b9050919050565b61481f81614804565b82525050565b600060208201905061483a6000830184614816565b92915050565b6148498161471a565b82525050565b60006020820190506148646000830184614840565b92915050565b600080600060608486031215614883576148826146e9565b5b600061489186828701614705565b93505060206148a286828701614705565b92505060406148b38682870161473b565b9150509250925092565b6000602082840312156148d3576148d26146e9565b5b60006148e18482850161473b565b91505092915050565b600060ff82169050919050565b614900816148ea565b82525050565b600060208201905061491b60008301846148f7565b92915050565b600060208284031215614937576149366146e9565b5b600061494584828501614705565b91505092915050565b61495781614790565b811461496257600080fd5b50565b6000813590506149748161494e565b92915050565b60008060408385031215614991576149906146e9565b5b600061499f8582860161473b565b92505060206149b085828601614965565b9150509250929050565b6000602082840312156149d0576149cf6146e9565b5b60006149de84828501614965565b91505092915050565b600080604083850312156149fe576149fd6146e9565b5b6000614a0c85828601614705565b9250506020614a1d85828601614705565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a6e57607f821691505b602082108103614a8157614a80614a27565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614ae3602a83614639565b9150614aee82614a87565b604082019050919050565b60006020820190508181036000830152614b1281614ad6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b4f602083614639565b9150614b5a82614b19565b602082019050919050565b60006020820190508181036000830152614b7e81614b42565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000614bbb601f83614639565b9150614bc682614b85565b602082019050919050565b60006020820190508181036000830152614bea81614bae565b9050919050565b7f57652063616e206e6f74206578636c75646520556e697377617020726f75746560008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c4d602283614639565b9150614c5882614bf1565b604082019050919050565b60006020820190508181036000830152614c7c81614c40565b9050919050565b7f4163636f756e7420616c7265616479206578636c756465640000000000000000600082015250565b6000614cb9601883614639565b9150614cc482614c83565b602082019050919050565b60006020820190508181036000830152614ce881614cac565b9050919050565b7f4578636c75646564206c69737420697320746f6f206c6f6e6700000000000000600082015250565b6000614d25601983614639565b9150614d3082614cef565b602082019050919050565b60006020820190508181036000830152614d5481614d18565b9050919050565b7f54726164696e6720616c726561647920656e61626c6564210000000000000000600082015250565b6000614d91601883614639565b9150614d9c82614d5b565b602082019050919050565b60006020820190508181036000830152614dc081614d84565b9050919050565b6000604082019050614ddc6000830185614604565b614de96020830184614840565b9392505050565b600081519050614dff8161494e565b92915050565b600060208284031215614e1b57614e1a6146e9565b5b6000614e2984828501614df0565b91505092915050565b7f696e73756666696369656e74204554482062616c616e63650000000000000000600082015250565b6000614e68601883614639565b9150614e7382614e32565b602082019050919050565b60006020820190508181036000830152614e9781614e5b565b9050919050565b7f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c6560008201527f7373207468616e20302e312070657263656e74206f6620696e697469616c205460208201527f6f74616c20537570706c79210000000000000000000000000000000000000000604082015250565b6000614f20604c83614639565b9150614f2b82614e9e565b606082019050919050565b60006020820190508181036000830152614f4f81614f13565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614fb2602683614639565b9150614fbd82614f56565b604082019050919050565b60006020820190508181036000830152614fe181614fa5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615044602483614639565b915061504f82614fe8565b604082019050919050565b6000602082019050818103600083015261507381615037565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006150d6602283614639565b91506150e18261507a565b604082019050919050565b60006020820190508181036000830152615105816150c9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615168602583614639565b91506151738261510c565b604082019050919050565b600060208201905081810360008301526151978161515b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006151fa602383614639565b91506152058261519e565b604082019050919050565b60006020820190508181036000830152615229816151ed565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061528c602983614639565b915061529782615230565b604082019050919050565b600060208201905081810360008301526152bb8161527f565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b60006152f8601883614639565b9150615303826152c2565b602082019050919050565b60006020820190508181036000830152615327816152eb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006153688261471a565b91506153738361471a565b9250828210156153865761538561532e565b5b828203905092915050565b600061539c8261471a565b91506153a78361471a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153dc576153db61532e565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061541d601b83614639565b9150615428826153e7565b602082019050919050565b6000602082019050818103600083015261544c81615410565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506154c0816146ee565b92915050565b6000602082840312156154dc576154db6146e9565b5b60006154ea848285016154b1565b91505092915050565b6000819050919050565b600061551861551361550e846154f3565b6147c6565b61471a565b9050919050565b615528816154fd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615563816145f2565b82525050565b6000615575838361555a565b60208301905092915050565b6000602082019050919050565b60006155998261552e565b6155a38185615539565b93506155ae8361554a565b8060005b838110156155df5781516155c68882615569565b97506155d183615581565b9250506001810190506155b2565b5085935050505092915050565b600060a0820190506156016000830188614840565b61560e602083018761551f565b8181036040830152615620818661558e565b905061562f6060830185614604565b61563c6080830184614840565b9695505050505050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006156a2602883614639565b91506156ad82615646565b604082019050919050565b600060208201905081810360008301526156d181615695565b9050919050565b60006156e38261471a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157155761571461532e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061575a8261471a565b91506157658361471a565b92508261577557615774615720565b5b828204905092915050565b600061578b8261471a565b91506157968361471a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156157cf576157ce61532e565b5b828202905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615836602183614639565b9150615841826157da565b604082019050919050565b6000602082019050818103600083015261586581615829565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220eb2c40d4718a7e292ed952f54e03eb6e3edf6c8f34aa1d86e3a7f0b59b67c63b64736f6c634300080e0033
Deployed Bytecode
0x6080604052600436106102765760003560e01c8063741af87f1161014f578063adbede72116100c1578063ea2f0b371161007a578063ea2f0b371461098b578063ec0c9d4d146109b4578063ec28438a146109dd578063f2fde38b14610a06578063f709594514610a2f578063ffc7863514610a5a5761027d565b8063adbede721461087b578063b8d36b50146108a6578063c0b0fda2146108cf578063c5254f40146108fa578063c730b8a414610923578063dd62ed3e1461094e5761027d565b80638c8f8c04116101135780638c8f8c04146107595780638da5cb5b146107825780638ff67c36146107ad57806395d89b41146107d6578063a457c2d714610801578063a9059cbb1461083e5761027d565b8063741af87f1461069857806376b851ca146106af5780637d1db4a5146106da57806388f82020146107055780638a8c523c146107425761027d565b806338780fe6116101e857806349bd5a5e116101ac57806349bd5a5e1461058857806352390c02146105b35780635342acb4146105dc57806370a082311461061957806370c668c814610656578063715018a6146106815761027d565b806338780fe61461049157806338e2f22f146104ba57806339509351146104e5578063437823ec146105225780634549b0391461054b5761027d565b806318160ddd1161023a57806318160ddd1461036b57806323b872dd146103965780632d838119146103d3578063313ce56714610410578063317653e01461043b5780633206b4aa146104665761027d565b806301ba031f1461028257806306486014146102ad57806306fdde03146102d8578063095ea7b3146103035780631694505e146103405761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a71565b6040516102a49190614613565b60405180910390f35b3480156102b957600080fd5b506102c2610a97565b6040516102cf9190614613565b60405180910390f35b3480156102e457600080fd5b506102ed610abd565b6040516102fa91906146c7565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190614750565b610b4f565b60405161033791906147ab565b60405180910390f35b34801561034c57600080fd5b50610355610b6d565b6040516103629190614825565b60405180910390f35b34801561037757600080fd5b50610380610b91565b60405161038d919061484f565b60405180910390f35b3480156103a257600080fd5b506103bd60048036038101906103b8919061486a565b610b9b565b6040516103ca91906147ab565b60405180910390f35b3480156103df57600080fd5b506103fa60048036038101906103f591906148bd565b610c74565b604051610407919061484f565b60405180910390f35b34801561041c57600080fd5b50610425610ce2565b6040516104329190614906565b60405180910390f35b34801561044757600080fd5b50610450610cf9565b60405161045d919061484f565b60405180910390f35b34801561047257600080fd5b5061047b610d03565b604051610488919061484f565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190614921565b610d09565b005b3480156104c657600080fd5b506104cf610de2565b6040516104dc919061484f565b60405180910390f35b3480156104f157600080fd5b5061050c60048036038101906105079190614750565b610dec565b60405161051991906147ab565b60405180910390f35b34801561052e57600080fd5b5061054960048036038101906105449190614921565b610e9f565b005b34801561055757600080fd5b50610572600480360381019061056d919061497a565b610f8f565b60405161057f919061484f565b60405180910390f35b34801561059457600080fd5b5061059d611011565b6040516105aa9190614613565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d59190614921565b611035565b005b3480156105e857600080fd5b5061060360048036038101906105fe9190614921565b6113b3565b60405161061091906147ab565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190614921565b611409565b60405161064d919061484f565b60405180910390f35b34801561066257600080fd5b5061066b6114f4565b604051610678919061484f565b60405180910390f35b34801561068d57600080fd5b506106966114fa565b005b3480156106a457600080fd5b506106ad61164d565b005b3480156106bb57600080fd5b506106c461171e565b6040516106d191906147ab565b60405180910390f35b3480156106e657600080fd5b506106ef61172f565b6040516106fc919061484f565b60405180910390f35b34801561071157600080fd5b5061072c60048036038101906107279190614921565b611735565b60405161073991906147ab565b60405180910390f35b34801561074e57600080fd5b5061075761178b565b005b34801561076557600080fd5b50610780600480360381019061077b919061486a565b61188d565b005b34801561078e57600080fd5b506107976119a6565b6040516107a49190614613565b60405180910390f35b3480156107b957600080fd5b506107d460048036038101906107cf91906149ba565b6119cf565b005b3480156107e257600080fd5b506107eb611a80565b6040516107f891906146c7565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190614750565b611b12565b60405161083591906147ab565b60405180910390f35b34801561084a57600080fd5b5061086560048036038101906108609190614750565b611bdf565b60405161087291906147ab565b60405180910390f35b34801561088757600080fd5b50610890611bfd565b60405161089d919061484f565b60405180910390f35b3480156108b257600080fd5b506108cd60048036038101906108c891906148bd565b611c07565b005b3480156108db57600080fd5b506108e4611d30565b6040516108f1919061484f565b60405180910390f35b34801561090657600080fd5b50610921600480360381019061091c9190614921565b611d36565b005b34801561092f57600080fd5b50610938611e0f565b604051610945919061484f565b60405180910390f35b34801561095a57600080fd5b50610975600480360381019061097091906149e7565b611e15565b604051610982919061484f565b60405180910390f35b34801561099757600080fd5b506109b260048036038101906109ad9190614921565b611e9c565b005b3480156109c057600080fd5b506109db60048036038101906109d691906148bd565b611f8c565b005b3480156109e957600080fd5b50610a0460048036038101906109ff91906148bd565b61202b565b005b348015610a1257600080fd5b50610a2d6004803603810190610a289190614921565b612114565b005b348015610a3b57600080fd5b50610a446122d5565b604051610a5191906147ab565b60405180910390f35b348015610a6657600080fd5b50610a6f6122e8565b005b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600d8054610acc90614a56565b80601f0160208091040260200160405190810160405280929190818152602001828054610af890614a56565b8015610b455780601f10610b1a57610100808354040283529160200191610b45565b820191906000526020600020905b815481529060010190602001808311610b2857829003601f168201915b5050505050905090565b6000610b63610b5c6123b9565b84846123c1565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600954905090565b6000610ba884848461258a565b610c6984610bb46123b9565b610c648560405180606001604052806028815260200161586d60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c1a6123b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128009092919063ffffffff16565b6123c1565b600190509392505050565b6000600a54821115610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290614af9565b60405180910390fd5b6000610cc5612864565b9050610cda818461288f90919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b6000600c54905090565b60105481565b610d116123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590614b65565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601754905090565b6000610e95610df96123b9565b84610e908560056000610e0a6123b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b6123c1565b6001905092915050565b610ea76123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b90614b65565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600954831115610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd90614bd1565b60405180910390fd5b81610ff5576000610fe684612937565b6000015190508091505061100b565b600061100084612937565b602001519050809150505b92915050565b7f000000000000000000000000e3d3551bb608e7665472180a20280630d9e938aa81565b61103d6123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c190614b65565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361114c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114390614c63565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d090614ccf565b60405180910390fd5b606460088054905010611221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121890614d3b565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156112f5576112b1600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c74565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114a457600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506114ef565b6114ec600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c74565b90505b919050565b60125481565b6115026123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158690614b65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6116556123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990614b65565b60405180910390fd5b600060108190555060006011819055506000601281905550600060138190555060006015806101000a81548160ff021916908315150217905550565b60158054906101000a900460ff1681565b60165481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6117936123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790614b65565b60405180910390fd5b601560169054906101000a900460ff1615611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790614da7565b60405180910390fd5b6001601560166101000a81548160ff021916908315150217905550565b6118956123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191990614b65565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161195d929190614dc7565b6020604051808303816000875af115801561197c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a09190614e05565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119d76123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b90614b65565b60405180910390fd5b806015806101000a81548160ff02191690831515021790555050565b6060600e8054611a8f90614a56565b80601f0160208091040260200160405190810160405280929190818152602001828054611abb90614a56565b8015611b085780601f10611add57610100808354040283529160200191611b08565b820191906000526020600020905b815481529060010190602001808311611aeb57829003601f168201915b5050505050905090565b6000611bd5611b1f6123b9565b84611bd0856040518060600160405280602581526020016158956025913960056000611b496123b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128009092919063ffffffff16565b6123c1565b6001905092915050565b6000611bf3611bec6123b9565b848461258a565b6001905092915050565b6000600b54905090565b611c0f6123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390614b65565b60405180910390fd5b80471015611cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd690614e7e565b60405180910390fd5b611ce76119a6565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611d2c573d6000803e3d6000fd5b5050565b60115481565b611d3e6123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc290614b65565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ea46123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2890614b65565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611f946123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201890614b65565b60405180910390fd5b8060178190555050565b6120336123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b790614b65565b60405180910390fd5b67016345785d8a0000811161210a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210190614f36565b60405180910390fd5b8060168190555050565b61211c6123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a090614b65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90614fc8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601560169054906101000a900460ff1681565b6122f06123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461237d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237490614b65565b60405180910390fd5b600160108190555060016011819055506001601281905550600160138190555060016015806101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612430576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124279061505a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361249f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612496906150ec565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161257d919061484f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f09061517e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f90615210565b60405180910390fd5b600081116126ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a2906152a2565b60405180910390fd5b601560169054906101000a900460ff161580156126fb57506126cb6119a6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561273b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127329061530e565b60405180910390fd5b600061274630611409565b90506000601754821015905080801561276c5750601560149054906101000a900460ff16155b80156127c457507f000000000000000000000000e3d3551bb608e7665472180a20280630d9e938aa73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156127da575060158054906101000a900460ff165b156127ee5760175491506127ed826129f6565b5b6127f9858585612c8b565b5050505050565b6000838311158290612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283f91906146c7565b60405180910390fd5b5060008385612857919061535d565b9050809150509392505050565b6000806000612871613162565b91509150612888818361288f90919063ffffffff16565b9250505090565b60006128d183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613415565b905092915050565b60008082846128e89190615391565b90508381101561292d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292490615433565b60405180910390fd5b8091505092915050565b61293f614513565b600061294a83613478565b9050600061297384836020015184604001518560600151866080015161296e612864565b613534565b905060405180610160016040528082600001518152602001826020015181526020018260400151815260200182606001518152602001826080015181526020018260a00151815260200183600001518152602001836020015181526020018360400151815260200183606001518152602001836080015181525092505050919050565b6001601560146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612a2e57612a2d615453565b5b604051908082528060200260200182016040528015612a5c5781602001602082028036833780820191505090505b5090503081600081518110612a7457612a73615482565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3d91906154c6565b81600181518110612b5157612b50615482565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612bb6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123c1565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612c3a9594939291906155ec565b600060405180830381600087803b158015612c5457600080fd5b505af1158015612c68573d6000803e3d6000fd5b50505050506000601560146101000a81548160ff02191690831515021790555050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d2c5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d3e57612d3961363b565b612d84565b601654811115612d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7a906156b8565b60405180910390fd5b5b6000612d8f82612937565b9050612da48160a0015182610140015161365d565b612dcc8160400151826060015183608001518460e001518561010001518661012001516137de565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e6f5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e8557612e8084848484613a8b565b6130ad565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f285750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f3d57612f38848483613cc1565b6130ac565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612fe15750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ff657612ff1848483613efa565b6130ab565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130985750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130aa576130a98484848461409a565b5b5b5b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061314e5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561315c5761315b614369565b5b50505050565b6000806000600a5490506000600954905060005b6008805490508110156133d85782600360006008848154811061319c5761319b615482565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061328a575081600460006008848154811061322257613221615482565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156132a157600a5460095494509450505050613411565b61333160036000600884815481106132bc576132bb615482565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461438b90919063ffffffff16565b92506133c3600460006008848154811061334e5761334d615482565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361438b90919063ffffffff16565b915080806133d0906156d8565b915050613176565b506133f0600954600a5461288f90919063ffffffff16565b82101561340857600a54600954935093505050613411565b81819350935050505b9091565b6000808311829061345c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345391906146c7565b60405180910390fd5b506000838561346b919061574f565b9050809150509392505050565b61348061456d565b600061348b836143d5565b9050600061349884614406565b905060006134a585614437565b905060006134b286614468565b905060006134ff826134f1856134e3886134d58b8e61438b90919063ffffffff16565b61438b90919063ffffffff16565b61438b90919063ffffffff16565b61438b90919063ffffffff16565b90506040518060a001604052808281526020018681526020018581526020018481526020018381525095505050505050919050565b61353c61459c565b6000613551838961449990919063ffffffff16565b90506000613568848961449990919063ffffffff16565b9050600061357f858961449990919063ffffffff16565b90506000613596868961449990919063ffffffff16565b905060006135ad878961449990919063ffffffff16565b905060006135fa836135ec866135de866135d08b8d61438b90919063ffffffff16565b61438b90919063ffffffff16565b61438b90919063ffffffff16565b61438b90919063ffffffff16565b90506040518060c001604052808781526020018281526020018681526020018581526020018481526020018381525096505050505050509695505050505050565b6000601081905550600060138190555060006011819055506000601281905550565b6136af82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156137da5761379681600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b613805856137f788600a5461438b90919063ffffffff16565b61438b90919063ffffffff16565b600a8190555061382083600b546128d990919063ffffffff16565b600b8190555061383b8260095461438b90919063ffffffff16565b60098190555061385682600c546128d990919063ffffffff16565b600c819055506138d08460036000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b60036000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060076000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a8357613a1d8160046000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b60046000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050505050565b613add82600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b768160000151600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c0f8160200151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051613cb3919061484f565b60405180910390a350505050565b613d178160000151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613db08160c00151600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e498160200151600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051613eed919061484f565b60405180910390a3505050565b613f508160000151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fe98160200151600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161408d919061484f565b60405180910390a3505050565b6140ec82600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141858160000151600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061421e8160c00151600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142b78160200151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161435b919061484f565b60405180910390a350505050565b6001601081905550600160138190555060016012819055506001601181905550565b60006143cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612800565b905092915050565b60006143ff60646143f16010548561449990919063ffffffff16565b61288f90919063ffffffff16565b9050919050565b600061443060646144226011548561449990919063ffffffff16565b61288f90919063ffffffff16565b9050919050565b600061446160646144536012548561449990919063ffffffff16565b61288f90919063ffffffff16565b9050919050565b600061449260646144846013548561449990919063ffffffff16565b61288f90919063ffffffff16565b9050919050565b60008083036144ab576000905061450d565b600082846144b99190615780565b90508284826144c8919061574f565b14614508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144ff9061584c565b60405180910390fd5b809150505b92915050565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006145fd826145d2565b9050919050565b61460d816145f2565b82525050565b60006020820190506146286000830184614604565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561466857808201518184015260208101905061464d565b83811115614677576000848401525b50505050565b6000601f19601f8301169050919050565b60006146998261462e565b6146a38185614639565b93506146b381856020860161464a565b6146bc8161467d565b840191505092915050565b600060208201905081810360008301526146e1818461468e565b905092915050565b600080fd5b6146f7816145f2565b811461470257600080fd5b50565b600081359050614714816146ee565b92915050565b6000819050919050565b61472d8161471a565b811461473857600080fd5b50565b60008135905061474a81614724565b92915050565b60008060408385031215614767576147666146e9565b5b600061477585828601614705565b92505060206147868582860161473b565b9150509250929050565b60008115159050919050565b6147a581614790565b82525050565b60006020820190506147c0600083018461479c565b92915050565b6000819050919050565b60006147eb6147e66147e1846145d2565b6147c6565b6145d2565b9050919050565b60006147fd826147d0565b9050919050565b600061480f826147f2565b9050919050565b61481f81614804565b82525050565b600060208201905061483a6000830184614816565b92915050565b6148498161471a565b82525050565b60006020820190506148646000830184614840565b92915050565b600080600060608486031215614883576148826146e9565b5b600061489186828701614705565b93505060206148a286828701614705565b92505060406148b38682870161473b565b9150509250925092565b6000602082840312156148d3576148d26146e9565b5b60006148e18482850161473b565b91505092915050565b600060ff82169050919050565b614900816148ea565b82525050565b600060208201905061491b60008301846148f7565b92915050565b600060208284031215614937576149366146e9565b5b600061494584828501614705565b91505092915050565b61495781614790565b811461496257600080fd5b50565b6000813590506149748161494e565b92915050565b60008060408385031215614991576149906146e9565b5b600061499f8582860161473b565b92505060206149b085828601614965565b9150509250929050565b6000602082840312156149d0576149cf6146e9565b5b60006149de84828501614965565b91505092915050565b600080604083850312156149fe576149fd6146e9565b5b6000614a0c85828601614705565b9250506020614a1d85828601614705565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a6e57607f821691505b602082108103614a8157614a80614a27565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614ae3602a83614639565b9150614aee82614a87565b604082019050919050565b60006020820190508181036000830152614b1281614ad6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b4f602083614639565b9150614b5a82614b19565b602082019050919050565b60006020820190508181036000830152614b7e81614b42565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000614bbb601f83614639565b9150614bc682614b85565b602082019050919050565b60006020820190508181036000830152614bea81614bae565b9050919050565b7f57652063616e206e6f74206578636c75646520556e697377617020726f75746560008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c4d602283614639565b9150614c5882614bf1565b604082019050919050565b60006020820190508181036000830152614c7c81614c40565b9050919050565b7f4163636f756e7420616c7265616479206578636c756465640000000000000000600082015250565b6000614cb9601883614639565b9150614cc482614c83565b602082019050919050565b60006020820190508181036000830152614ce881614cac565b9050919050565b7f4578636c75646564206c69737420697320746f6f206c6f6e6700000000000000600082015250565b6000614d25601983614639565b9150614d3082614cef565b602082019050919050565b60006020820190508181036000830152614d5481614d18565b9050919050565b7f54726164696e6720616c726561647920656e61626c6564210000000000000000600082015250565b6000614d91601883614639565b9150614d9c82614d5b565b602082019050919050565b60006020820190508181036000830152614dc081614d84565b9050919050565b6000604082019050614ddc6000830185614604565b614de96020830184614840565b9392505050565b600081519050614dff8161494e565b92915050565b600060208284031215614e1b57614e1a6146e9565b5b6000614e2984828501614df0565b91505092915050565b7f696e73756666696369656e74204554482062616c616e63650000000000000000600082015250565b6000614e68601883614639565b9150614e7382614e32565b602082019050919050565b60006020820190508181036000830152614e9781614e5b565b9050919050565b7f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c6560008201527f7373207468616e20302e312070657263656e74206f6620696e697469616c205460208201527f6f74616c20537570706c79210000000000000000000000000000000000000000604082015250565b6000614f20604c83614639565b9150614f2b82614e9e565b606082019050919050565b60006020820190508181036000830152614f4f81614f13565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614fb2602683614639565b9150614fbd82614f56565b604082019050919050565b60006020820190508181036000830152614fe181614fa5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615044602483614639565b915061504f82614fe8565b604082019050919050565b6000602082019050818103600083015261507381615037565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006150d6602283614639565b91506150e18261507a565b604082019050919050565b60006020820190508181036000830152615105816150c9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615168602583614639565b91506151738261510c565b604082019050919050565b600060208201905081810360008301526151978161515b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006151fa602383614639565b91506152058261519e565b604082019050919050565b60006020820190508181036000830152615229816151ed565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061528c602983614639565b915061529782615230565b604082019050919050565b600060208201905081810360008301526152bb8161527f565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b60006152f8601883614639565b9150615303826152c2565b602082019050919050565b60006020820190508181036000830152615327816152eb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006153688261471a565b91506153738361471a565b9250828210156153865761538561532e565b5b828203905092915050565b600061539c8261471a565b91506153a78361471a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153dc576153db61532e565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061541d601b83614639565b9150615428826153e7565b602082019050919050565b6000602082019050818103600083015261544c81615410565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506154c0816146ee565b92915050565b6000602082840312156154dc576154db6146e9565b5b60006154ea848285016154b1565b91505092915050565b6000819050919050565b600061551861551361550e846154f3565b6147c6565b61471a565b9050919050565b615528816154fd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615563816145f2565b82525050565b6000615575838361555a565b60208301905092915050565b6000602082019050919050565b60006155998261552e565b6155a38185615539565b93506155ae8361554a565b8060005b838110156155df5781516155c68882615569565b97506155d183615581565b9250506001810190506155b2565b5085935050505092915050565b600060a0820190506156016000830188614840565b61560e602083018761551f565b8181036040830152615620818661558e565b905061562f6060830185614604565b61563c6080830184614840565b9695505050505050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006156a2602883614639565b91506156ad82615646565b604082019050919050565b600060208201905081810360008301526156d181615695565b9050919050565b60006156e38261471a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157155761571461532e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061575a8261471a565b91506157658361471a565b92508261577557615774615720565b5b828204905092915050565b600061578b8261471a565b91506157968361471a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156157cf576157ce61532e565b5b828202905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615836602183614639565b9150615841826157da565b604082019050919050565b6000602082019050818103600083015261586581615829565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220eb2c40d4718a7e292ed952f54e03eb6e3edf6c8f34aa1d86e3a7f0b59b67c63b64736f6c634300080e0033
Deployed Bytecode Sourcemap
24858:19730:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26657:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26747:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28099:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29011:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26837:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28376:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29180:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31101:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28285:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30247:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26489:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42935:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30510:129;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29501:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42260:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30647:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26895:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31362:512;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36833:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28479:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26567:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16233:148;;;;;;;;;;;;;:::i;:::-;;42715:212;;;;;;;;;;;;;:::i;:::-;;26980:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27076:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30004:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43507:147;;;;;;;;;;;;;:::i;:::-;;44416:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15597:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43662:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28190:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29727:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28685:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30132:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44099:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26531:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43066:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26613:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28860:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42379:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43855:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43201:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16536:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27028:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42497:210;;;;;;;;;;;;;:::i;:::-;;26657:83;;;;;;;;;;;;;:::o;26747:81::-;;;;;;;;;;;;;:::o;28099:83::-;28136:13;28169:5;28162:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28099:83;:::o;29011:161::-;29086:4;29103:39;29112:12;:10;:12::i;:::-;29126:7;29135:6;29103:8;:39::i;:::-;29160:4;29153:11;;29011:161;;;;:::o;26837:51::-;;;:::o;28376:95::-;28429:7;28456;;28449:14;;28376:95;:::o;29180:313::-;29278:4;29295:36;29305:6;29313:9;29324:6;29295:9;:36::i;:::-;29342:121;29351:6;29359:12;:10;:12::i;:::-;29373:89;29411:6;29373:89;;;;;;;;;;;;;;;;;:11;:19;29385:6;29373:19;;;;;;;;;;;;;;;:33;29393:12;:10;:12::i;:::-;29373:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29342:8;:121::i;:::-;29481:4;29474:11;;29180:313;;;;;:::o;31101:253::-;31167:7;31206;;31195;:18;;31187:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31271:19;31294:10;:8;:10::i;:::-;31271:33;;31322:24;31334:11;31322:7;:11;;:24;;;;:::i;:::-;31315:31;;;31101:253;;;:::o;28285:83::-;28326:5;28351:9;;;;;;;;;;;28344:16;;28285:83;:::o;30247:95::-;30293:7;30320:14;;30313:21;;30247:95;:::o;26489:33::-;;;;:::o;42935:123::-;15819:12;:10;:12::i;:::-;15809:22;;:6;;;;;;;;;;:22;;;15801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43041:9:::1;43017:21;;:33;;;;;;;;;;;;;;;;;;42935:123:::0;:::o;30510:129::-;30573:7;30600:31;;30593:38;;30510:129;:::o;29501:218::-;29589:4;29606:83;29615:12;:10;:12::i;:::-;29629:7;29638:50;29677:10;29638:11;:25;29650:12;:10;:12::i;:::-;29638:25;;;;;;;;;;;;;;;:34;29664:7;29638:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29606:8;:83::i;:::-;29707:4;29700:11;;29501:218;;;;:::o;42260:111::-;15819:12;:10;:12::i;:::-;15809:22;;:6;;;;;;;;;;:22;;;15801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42359:4:::1;42329:18;:27;42348:7;42329:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;42260:111:::0;:::o;30647:446::-;30737:7;30776;;30765;:18;;30757:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30835:17;30830:256;;30869:15;30887:19;30898:7;30887:10;:19::i;:::-;:27;;;30869:45;;30936:7;30929:14;;;;;30830:256;30976:23;31002:19;31013:7;31002:10;:19::i;:::-;:35;;;30976:61;;31059:15;31052:22;;;30647:446;;;;;:::o;26895:38::-;;;:::o;31362:512::-;15819:12;:10;:12::i;:::-;15809:22;;:6;;;;;;;;;;:22;;;15801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31455:42:::1;31444:53;;:7;:53;;::::0;31436:100:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31556:11;:20;31568:7;31556:20;;;;;;;;;;;;;;;;;;;;;;;;;31555:21;31547:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31643:3;31624:9;:16;;;;:22;31616:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;31709:1;31690:7;:16;31698:7;31690:16;;;;;;;;;;;;;;;;:20;31687:108;;;31746:37;31766:7;:16;31774:7;31766:16;;;;;;;;;;;;;;;;31746:19;:37::i;:::-;31727:7;:16;31735:7;31727:16;;;;;;;;;;;;;;;:56;;;;31687:108;31828:4;31805:11;:20;31817:7;31805:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31843:9;31858:7;31843:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31362:512:::0;:::o;36833:123::-;36897:4;36921:18;:27;36940:7;36921:27;;;;;;;;;;;;;;;;;;;;;;;;;36914:34;;36833:123;;;:::o;28479:198::-;28545:7;28569:11;:20;28581:7;28569:20;;;;;;;;;;;;;;;;;;;;;;;;;28565:49;;;28598:7;:16;28606:7;28598:16;;;;;;;;;;;;;;;;28591:23;;;;28565:49;28632:37;28652:7;:16;28660:7;28652:16;;;;;;;;;;;;;;;;28632:19;:37::i;:::-;28625:44;;28479:198;;;;:::o;26567:37::-;;;;:::o;16233:148::-;15819:12;:10;:12::i;:::-;15809:22;;:6;;;;;;;;;;:22;;;15801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16340:1:::1;16303:40;;16324:6;::::0;::::1;;;;;;;;16303:40;;;;;;;;;;;;16371:1;16354:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16233:148::o:0;42715:212::-;15819:12;:10;:12::i;:::-;15809:22;;:6;;;;;;;;;;:22;;;15801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42790:1:::1;42773:14;:18;;;;42813:1;42802:8;:12;;;;42846:1;42825:18;:22;;;;42877:1;42858:16;:20;;;;42914:5;42889:22;::::0;:30:::1;;;;;;;;;;;;;;;;;;42715:212::o:0;26980:41::-;;;;;;;;;;;;:::o;27076:49::-;;;;:::o;30004:120::-;30072:4;30096:11;:20;30108:7;30096:20;;;;;;;;;;;;;;;;;;;;;;;;;30089:27;;30004:120;;;:::o;43507:147::-;15819:12;:10;:12::i;:::-;15809:22;;:6;;;;;;;;;;:22;;;15801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43569:15:::1;;;;;;;;;;;43568:16;43560:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;43642:4;43624:15;;:22;;;;;;;;;;;;;;;;;;43507:147::o:0;44416:167::-;15819:12;:10;:12::i;:::-;15809:22;;:6;;;;;;;;;;:22;;;15801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44541:10:::1;44534:27;;;44562:3;44567:7;44534:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44416:167:::0;;;:::o;15597:79::-;15635:7;15662:6;;;;;;;;;;;15655:13;;15597:79;:::o;43662:118::-;15819:12;:10;:12::i;:::-;15809:22;;:6;;;;;;;;;;:22;;;15801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43764:8:::1;43739:22;::::0;:33:::1;;;;;;;;;;;;;;;;;;43662:118:::0;:::o;28190:87::-;28229:13;28262:7;28255:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28190:87;:::o;29727:269::-;29820:4;29837:129;29846:12;:10;:12::i;:::-;29860:7;29869:96;29908:15;29869:96;;;;;;;;;;;;;;;;;:11;:25;29881:12;:10;:12::i;:::-;29869:25;;;;;;;;;;;;;;;:34;29895:7;29869:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29837:8;:129::i;:::-;29984:4;29977:11;;29727:269;;;;:::o;28685:167::-;28763:4;28780:42;28790:12;:10;:12::i;:::-;28804:9;28815:6;28780:9;:42::i;:::-;28840:4;28833:11;;28685:167;;;;:::o;30132:107::-;30184:7;30211:20;;30204:27;;30132:107;:::o;44099:206::-;15819:12;:10;:12::i;:::-;15809:22;;:6;;;;;;;;;;:22;;;15801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44212:9:::1;44187:21;:34;;44179:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;44269:7;:5;:7::i;:::-;44261:25;;:36;44287:9;44261:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;44099:206:::0;:::o;26531:27::-;;;;:::o;43066:127::-;15819:12;:10;:12::i;:::-;15809:22;;:6;;;;;;;;;;:22;;;15801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43176:9:::1;43150:23;;:35;;;;;;;;;;;;;;;;;;43066:127:::0;:::o;26613:35::-;;;;:::o;28860:143::-;28941:7;28968:11;:18;28980:5;28968:18;;;;;;;;;;;;;;;:27;28987:7;28968:27;;;;;;;;;;;;;;;;28961:34;;28860:143;;;;:::o;42379:110::-;15819:12;:10;:12::i;:::-;15809:22;;:6;;;;;;;;;;:22;;;15801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42476:5:::1;42446:18;:27;42465:7;42446:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;42379:110:::0;:::o;43855:148::-;15819:12;:10;:12::i;:::-;15809:22;;:6;;;;;;;;;;:22;;;15801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43984:11:::1;43950:31;:45;;;;43855:148:::0;:::o;43201:298::-;15819:12;:10;:12::i;:::-;15809:22;;:6;;;;;;;;;;:22;;;15801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43336:19:::1;43304:29;:51;43296:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;43462:29;43447:12;:44;;;;43201:298:::0;:::o;16536:244::-;15819:12;:10;:12::i;:::-;15809:22;;:6;;;;;;;;;;:22;;;15801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16645:1:::1;16625:22;;:8;:22;;::::0;16617:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;16735:8;16706:38;;16727:6;::::0;::::1;;;;;;;;16706:38;;;;;;;;;;;;16764:8;16755:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16536:244:::0;:::o;27028:35::-;;;;;;;;;;;;;:::o;42497:210::-;15819:12;:10;:12::i;:::-;15809:22;;:6;;;;;;;;;;:22;;;15801:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42571:1:::1;42554:14;:18;;;;42594:1;42583:8;:12;;;;42627:1;42606:18;:22;;;;42658:1;42639:16;:20;;;;42695:4;42670:22;::::0;:29:::1;;;;;;;;;;;;;;;;;;42497:210::o:0;8003:115::-;8056:15;8099:10;8084:26;;8003:115;:::o;36964:329::-;37074:1;37057:19;;:5;:19;;;37049:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37155:1;37136:21;;:7;:21;;;37128:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37231:6;37201:11;:18;37213:5;37201:18;;;;;;;;;;;;;;;:27;37220:7;37201:27;;;;;;;;;;;;;;;:36;;;;37269:7;37253:32;;37262:5;37253:32;;;37278:6;37253:32;;;;;;:::i;:::-;;;;;;;;36964:329;;;:::o;37301:1489::-;37439:1;37423:18;;:4;:18;;;37415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37516:1;37502:16;;:2;:16;;;37494:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37586:1;37577:6;:10;37569:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37736:15;;;;;;;;;;;37735:16;:35;;;;;37763:7;:5;:7::i;:::-;37755:15;;:4;:15;;;;37735:35;37732:101;;;37787:34;;;;;;;;;;:::i;:::-;;;;;;;;37732:101;38137:28;38168:24;38186:4;38168:9;:24::i;:::-;38137:55;;38203:24;38254:31;;38230:20;:55;;38203:82;;38314:19;:55;;;;;38351:18;;;;;;;;;;;38350:19;38314:55;:93;;;;;38394:13;38386:21;;:4;:21;;;;38314:93;:132;;;;;38424:22;;;;;;;;;;38314:132;38296:376;;;38496:31;;38473:54;;38615:45;38639:20;38615:23;:45::i;:::-;38296:376;38750:30;38765:4;38770:2;38773:6;38750:14;:30::i;:::-;37404:1386;;37301:1489;;;:::o;4413:192::-;4499:7;4532:1;4527;:6;;4535:12;4519:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4559:9;4575:1;4571;:5;;;;:::i;:::-;4559:17;;4596:1;4589:8;;;4413:192;;;;;:::o;34759:163::-;34800:7;34821:15;34838;34857:19;:17;:19::i;:::-;34820:56;;;;34894:20;34906:7;34894;:11;;:20;;;;:::i;:::-;34887:27;;;;34759:163;:::o;5811:132::-;5869:7;5896:39;5900:1;5903;5896:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5889:46;;5811:132;;;;:::o;3510:181::-;3568:7;3588:9;3604:1;3600;:5;;;;:::i;:::-;3588:17;;3629:1;3624;:6;;3616:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;3682:1;3675:8;;;3510:181;;;;:::o;32671:697::-;32730:19;;:::i;:::-;32762:24;32789:20;32801:7;32789:11;:20::i;:::-;32762:47;;32820:24;32847:112;32859:7;32868:3;:18;;;32888:3;:12;;;32902:3;:22;;;32926:3;:20;;;32948:10;:8;:10::i;:::-;32847:11;:112::i;:::-;32820:139;;32979:381;;;;;;;;33006:3;:11;;;32979:381;;;;33032:3;:19;;;32979:381;;;;33066:3;:18;;;32979:381;;;;33099:3;:12;;;32979:381;;;;33126:3;:22;;;32979:381;;;;33163:3;:20;;;32979:381;;;;33198:3;:19;;;32979:381;;;;33232:3;:18;;;32979:381;;;;33265:3;:12;;;32979:381;;;;33292:3;:22;;;32979:381;;;;33329:3;:20;;;32979:381;;;32972:388;;;;32671:697;;;:::o;38799:616::-;27333:4;27312:18;;:25;;;;;;;;;;;;;;;;;;38944:21:::1;38982:1;38968:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38944:40;;39013:4;38995;39000:1;38995:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;39039:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39029:4;39034:1;39029:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;39074:62;39091:4;39106:15;39124:11;39074:8;:62::i;:::-;39175:15;:66;;;39256:11;39282:1;39326:4;39345:21;;;;;;;;;;;39381:15;39175:232;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38873:542;27381:5:::0;27360:18;;:26;;;;;;;;;;;;;;;;;;38799:616;:::o;39496:1222::-;39593:18;:26;39612:6;39593:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;39623:18;:29;39642:9;39623:29;;;;;;;;;;;;;;;;;;;;;;;;;39593:59;39590:220;;;39668:14;:12;:14::i;:::-;39590:220;;;39741:12;;39731:6;:22;;39723:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39590:220;39822:22;39847:18;39858:6;39847:10;:18::i;:::-;39822:43;;39876:62;39897:2;:19;;;39918:2;:19;;;39876:20;:62::i;:::-;39949:124;39964:2;:17;;;39983:2;:11;;;39996:2;:21;;;40019:2;:17;;;40038:2;:11;;;40051:2;:21;;;39949:14;:124::i;:::-;40090:11;:19;40102:6;40090:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;40114:11;:22;40126:9;40114:22;;;;;;;;;;;;;;;;;;;;;;;;;40113:23;40090:46;40086:520;;;40153:52;40175:6;40183:9;40194:6;40202:2;40153:21;:52::i;:::-;40086:520;;;40228:11;:19;40240:6;40228:19;;;;;;;;;;;;;;;;;;;;;;;;;40227:20;:46;;;;;40251:11;:22;40263:9;40251:22;;;;;;;;;;;;;;;;;;;;;;;;;40227:46;40223:383;;;40290:42;40310:6;40318:9;40329:2;40290:19;:42::i;:::-;40223:383;;;40355:11;:19;40367:6;40355:19;;;;;;;;;;;;;;;;;;;;;;;;;40354:20;:47;;;;;40379:11;:22;40391:9;40379:22;;;;;;;;;;;;;;;;;;;;;;;;;40378:23;40354:47;40350:256;;;40418:40;40436:6;40444:9;40455:2;40418:17;:40::i;:::-;40350:256;;;40480:11;:19;40492:6;40480:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;40503:11;:22;40515:9;40503:22;;;;;;;;;;;;;;;;;;;;;;;;;40480:45;40476:130;;;40542:52;40564:6;40572:9;40583:6;40591:2;40542:21;:52::i;:::-;40476:130;40350:256;40223:383;40086:520;40621:18;:26;40640:6;40621:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;40651:18;:29;40670:9;40651:29;;;;;;;;;;;;;;;;;;;;;;;;;40621:59;40618:92;;;40695:15;:13;:15::i;:::-;40618:92;39579:1139;39496:1222;;;:::o;34930:555::-;34980:7;34989;35009:15;35027:7;;35009:25;;35045:15;35063:7;;35045:25;;35086:9;35081:289;35105:9;:16;;;;35101:1;:20;35081:289;;;35171:7;35147;:21;35155:9;35165:1;35155:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35147:21;;;;;;;;;;;;;;;;:31;:66;;;;35206:7;35182;:21;35190:9;35200:1;35190:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35182:21;;;;;;;;;;;;;;;;:31;35147:66;35143:97;;;35223:7;;35232;;35215:25;;;;;;;;;35143:97;35265:34;35277:7;:21;35285:9;35295:1;35285:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35277:21;;;;;;;;;;;;;;;;35265:7;:11;;:34;;;;:::i;:::-;35255:44;;35324:34;35336:7;:21;35344:9;35354:1;35344:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35336:21;;;;;;;;;;;;;;;;35324:7;:11;;:34;;;;:::i;:::-;35314:44;;35123:3;;;;;:::i;:::-;;;;35081:289;;;;35394:20;35406:7;;35394;;:11;;:20;;;;:::i;:::-;35384:7;:30;35380:61;;;35424:7;;35433;;35416:25;;;;;;;;35380:61;35460:7;35469;35452:25;;;;;;34930:555;;;:::o;6439:278::-;6525:7;6557:1;6553;:5;6560:12;6545:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6584:9;6600:1;6596;:5;;;;:::i;:::-;6584:17;;6708:1;6701:8;;;6439:278;;;;;:::o;33376:594::-;33436:20;;:::i;:::-;33469:22;33494:31;33517:7;33494:22;:31::i;:::-;33469:56;;33536:16;33555:25;33572:7;33555:16;:25::i;:::-;33536:44;;33591:26;33620:35;33647:7;33620:26;:35::i;:::-;33591:64;;33666:24;33693:33;33718:7;33693:24;:33::i;:::-;33666:60;;33737:23;33763:87;33833:16;33763:65;33809:18;33763:41;33795:8;33763:27;33775:14;33763:7;:11;;:27;;;;:::i;:::-;:31;;:41;;;;:::i;:::-;:45;;:65;;;;:::i;:::-;:69;;:87;;;;:::i;:::-;33737:113;;33868:94;;;;;;;;33882:15;33868:94;;;;33899:14;33868:94;;;;33915:8;33868:94;;;;33925:18;33868:94;;;;33945:16;33868:94;;;33861:101;;;;;;;33376:594;;;:::o;33978:773::-;34155:20;;:::i;:::-;34188:15;34206:24;34218:11;34206:7;:11;;:24;;;;:::i;:::-;34188:42;;34241:22;34266:31;34285:11;34266:14;:18;;:31;;;;:::i;:::-;34241:56;;34308:16;34327:25;34340:11;34327:8;:12;;:25;;;;:::i;:::-;34308:44;;34363:26;34392:35;34415:11;34392:18;:22;;:35;;;;:::i;:::-;34363:64;;34438:24;34465:33;34486:11;34465:16;:20;;:33;;;;:::i;:::-;34438:60;;34509:23;34535:87;34603:18;34535:63;34589:8;34535:49;34567:16;34535:27;34547:14;34535:7;:11;;:27;;;;:::i;:::-;:31;;:49;;;;:::i;:::-;:53;;:63;;;;:::i;:::-;:67;;:87;;;;:::i;:::-;34509:113;;34640:103;;;;;;;;34654:7;34640:103;;;;34663:15;34640:103;;;;34680:14;34640:103;;;;34696:8;34640:103;;;;34706:18;34640:103;;;;34726:16;34640:103;;;34633:110;;;;;;;;33978:773;;;;;;;;:::o;36507:156::-;36567:1;36550:14;:18;;;;36598:1;36579:16;:20;;;;36621:1;36610:8;:12;;;;36654:1;36633:18;:22;;;;36507:156::o;35493:302::-;35619:44;35646:16;35619:7;:22;35635:4;35619:22;;;;;;;;;;;;;;;;:26;;:44;;;;:::i;:::-;35594:7;:22;35610:4;35594:22;;;;;;;;;;;;;;;:69;;;;35677:11;:26;35697:4;35677:26;;;;;;;;;;;;;;;;;;;;;;;;;35674:113;;;35743:44;35770:16;35743:7;:22;35759:4;35743:22;;;;;;;;;;;;;;;;:26;;:44;;;;:::i;:::-;35718:7;:22;35734:4;35718:22;;;;;;;;;;;;;;;:69;;;;35674:113;35493:302;;:::o;31975:688::-;32168:41;32200:8;32168:27;32180:14;32168:7;;:11;;:27;;;;:::i;:::-;:31;;:41;;;;:::i;:::-;32158:7;:51;;;;32243:40;32268:14;32243:20;;:24;;:40;;;;:::i;:::-;32220:20;:63;;;;32304:21;32316:8;32304:7;;:11;;:21;;;;:::i;:::-;32294:7;:31;;;;32353:28;32372:8;32353:14;;:18;;:28;;;;:::i;:::-;32336:14;:45;;;;32429:56;32466:18;32429:7;:32;32437:23;;;;;;;;;;;32429:32;;;;;;;;;;;;;;;;:36;;:56;;;;:::i;:::-;32394:7;:32;32402:23;;;;;;;;;;;32394:32;;;;;;;;;;;;;;;:91;;;;32500:11;:36;32512:23;;;;;;;;;;;32500:36;;;;;;;;;;;;;;;;;;;;;;;;;32496:160;;;32588:56;32625:18;32588:7;:32;32596:23;;;;;;;;;;;32588:32;;;;;;;;;;;;;;;;:36;;:56;;;;:::i;:::-;32553:7;:32;32561:23;;;;;;;;;;;32553:32;;;;;;;;;;;;;;;:91;;;;32496:160;31975:688;;;;;;:::o;41416:377::-;41560:28;41580:7;41560;:15;41568:6;41560:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41542:7;:15;41550:6;41542:15;;;;;;;;;;;;;;;:46;;;;41617:31;41637:2;:10;;;41617:7;:15;41625:6;41617:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;41599:7;:15;41607:6;41599:15;;;;;;;;;;;;;;;:49;;;;41680:42;41703:2;:18;;;41680:7;:18;41688:9;41680:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;41659:7;:18;41667:9;41659:18;;;;;;;;;;;;;;;:63;;;;41755:9;41738:47;;41747:6;41738:47;;;41766:2;:18;;;41738:47;;;;;;:::i;:::-;;;;;;;;41416:377;;;;:::o;41033:375::-;41158:31;41178:2;:10;;;41158:7;:15;41166:6;41158:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;41140:7;:15;41148:6;41140:15;;;;;;;;;;;;;;;:49;;;;41221:42;41244:2;:18;;;41221:7;:18;41229:9;41221:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;41200:7;:18;41208:9;41200:18;;;;;;;;;;;;;;;:63;;;;41295:42;41318:2;:18;;;41295:7;:18;41303:9;41295:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;41274:7;:18;41282:9;41274:18;;;;;;;;;;;;;;;:63;;;;41370:9;41353:47;;41362:6;41353:47;;;41381:2;:18;;;41353:47;;;;;;:::i;:::-;;;;;;;;41033:375;;;:::o;40726:299::-;40849:31;40869:2;:10;;;40849:7;:15;40857:6;40849:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;40831:7;:15;40839:6;40831:15;;;;;;;;;;;;;;;:49;;;;40912:42;40935:2;:18;;;40912:7;:18;40920:9;40912:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;40891:7;:18;40899:9;40891:18;;;;;;;;;;;;;;;:63;;;;40987:9;40970:47;;40979:6;40970:47;;;40998:2;:18;;;40970:47;;;;;;:::i;:::-;;;;;;;;40726:299;;;:::o;41801:451::-;41945:28;41965:7;41945;:15;41953:6;41945:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41927:7;:15;41935:6;41927:15;;;;;;;;;;;;;;;:46;;;;42002:31;42022:2;:10;;;42002:7;:15;42010:6;42002:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;41984:7;:15;41992:6;41984:15;;;;;;;;;;;;;;;:49;;;;42065:42;42088:2;:18;;;42065:7;:18;42073:9;42065:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;42044:7;:18;42052:9;42044:18;;;;;;;;;;;;;;;:63;;;;42139:42;42162:2;:18;;;42139:7;:18;42147:9;42139:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;42118:7;:18;42126:9;42118:18;;;;;;;;;;;;;;;:63;;;;42214:9;42197:47;;42206:6;42197:47;;;42225:2;:18;;;42197:47;;;;;;:::i;:::-;;;;;;;;41801:451;;;;:::o;36671:154::-;36732:1;36715:14;:18;;;;36763:1;36744:16;:20;;;;36796:1;36775:18;:22;;;;36819:1;36808:8;:12;;;;36671:154::o;3974:136::-;4032:7;4059:43;4063:1;4066;4059:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4052:50;;3974:136;;;;:::o;35803:168::-;35874:7;35901:62;35947:5;35901:27;35913:14;;35901:7;:11;;:27;;;;:::i;:::-;:31;;:62;;;;:::i;:::-;35894:69;;35803:168;;;:::o;35979:156::-;36044:7;36071:56;36111:5;36071:21;36083:8;;36071:7;:11;;:21;;;;:::i;:::-;:25;;:56;;;;:::i;:::-;36064:63;;35979:156;;;:::o;36143:176::-;36218:7;36245:66;36295:5;36245:31;36257:18;;36245:7;:11;;:31;;;;:::i;:::-;:35;;:66;;;;:::i;:::-;36238:73;;36143:176;;;:::o;36327:172::-;36400:7;36427:64;36475:5;36427:29;36439:16;;36427:7;:11;;:29;;;;:::i;:::-;:33;;:64;;;;:::i;:::-;36420:71;;36327:172;;;:::o;4864:471::-;4922:7;5172:1;5167;:6;5163:47;;5197:1;5190:8;;;;5163:47;5222:9;5238:1;5234;:5;;;;:::i;:::-;5222:17;;5267:1;5262;5258;:5;;;;:::i;:::-;:10;5250:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5326:1;5319:8;;;4864:471;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:307::-;941:1;951:113;965:6;962:1;959:13;951:113;;;1050:1;1045:3;1041:11;1035:18;1031:1;1026:3;1022:11;1015:39;987:2;984:1;980:10;975:15;;951:113;;;1082:6;1079:1;1076:13;1073:101;;;1162:1;1153:6;1148:3;1144:16;1137:27;1073:101;922:258;873:307;;;:::o;1186:102::-;1227:6;1278:2;1274:7;1269:2;1262:5;1258:14;1254:28;1244:38;;1186:102;;;:::o;1294:364::-;1382:3;1410:39;1443:5;1410:39;:::i;:::-;1465:71;1529:6;1524:3;1465:71;:::i;:::-;1458:78;;1545:52;1590:6;1585:3;1578:4;1571:5;1567:16;1545:52;:::i;:::-;1622:29;1644:6;1622:29;:::i;:::-;1617:3;1613:39;1606:46;;1386:272;1294:364;;;;:::o;1664:313::-;1777:4;1815:2;1804:9;1800:18;1792:26;;1864:9;1858:4;1854:20;1850:1;1839:9;1835:17;1828:47;1892:78;1965:4;1956:6;1892:78;:::i;:::-;1884:86;;1664:313;;;;:::o;2064:117::-;2173:1;2170;2163:12;2310:122;2383:24;2401:5;2383:24;:::i;:::-;2376:5;2373:35;2363:63;;2422:1;2419;2412:12;2363:63;2310:122;:::o;2438:139::-;2484:5;2522:6;2509:20;2500:29;;2538:33;2565:5;2538:33;:::i;:::-;2438:139;;;;:::o;2583:77::-;2620:7;2649:5;2638:16;;2583:77;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:60::-;3874:3;3895:5;3888:12;;3846:60;;;:::o;3912:142::-;3962:9;3995:53;4013:34;4022:24;4040:5;4022:24;:::i;:::-;4013:34;:::i;:::-;3995:53;:::i;:::-;3982:66;;3912:142;;;:::o;4060:126::-;4110:9;4143:37;4174:5;4143:37;:::i;:::-;4130:50;;4060:126;;;:::o;4192:153::-;4269:9;4302:37;4333:5;4302:37;:::i;:::-;4289:50;;4192:153;;;:::o;4351:185::-;4465:64;4523:5;4465:64;:::i;:::-;4460:3;4453:77;4351:185;;:::o;4542:276::-;4662:4;4700:2;4689:9;4685:18;4677:26;;4713:98;4808:1;4797:9;4793:17;4784:6;4713:98;:::i;:::-;4542:276;;;;:::o;4824:118::-;4911:24;4929:5;4911:24;:::i;:::-;4906:3;4899:37;4824:118;;:::o;4948:222::-;5041:4;5079:2;5068:9;5064:18;5056:26;;5092:71;5160:1;5149:9;5145:17;5136:6;5092:71;:::i;:::-;4948:222;;;;:::o;5176:619::-;5253:6;5261;5269;5318:2;5306:9;5297:7;5293:23;5289:32;5286:119;;;5324:79;;:::i;:::-;5286:119;5444:1;5469:53;5514:7;5505:6;5494:9;5490:22;5469:53;:::i;:::-;5459:63;;5415:117;5571:2;5597:53;5642:7;5633:6;5622:9;5618:22;5597:53;:::i;:::-;5587:63;;5542:118;5699:2;5725:53;5770:7;5761:6;5750:9;5746:22;5725:53;:::i;:::-;5715:63;;5670:118;5176:619;;;;;:::o;5801:329::-;5860:6;5909:2;5897:9;5888:7;5884:23;5880:32;5877:119;;;5915:79;;:::i;:::-;5877:119;6035:1;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6006:117;5801:329;;;;:::o;6136:86::-;6171:7;6211:4;6204:5;6200:16;6189:27;;6136:86;;;:::o;6228:112::-;6311:22;6327:5;6311:22;:::i;:::-;6306:3;6299:35;6228:112;;:::o;6346:214::-;6435:4;6473:2;6462:9;6458:18;6450:26;;6486:67;6550:1;6539:9;6535:17;6526:6;6486:67;:::i;:::-;6346:214;;;;:::o;6566:329::-;6625:6;6674:2;6662:9;6653:7;6649:23;6645:32;6642:119;;;6680:79;;:::i;:::-;6642:119;6800:1;6825:53;6870:7;6861:6;6850:9;6846:22;6825:53;:::i;:::-;6815:63;;6771:117;6566:329;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:323::-;7692:6;7741:2;7729:9;7720:7;7716:23;7712:32;7709:119;;;7747:79;;:::i;:::-;7709:119;7867:1;7892:50;7934:7;7925:6;7914:9;7910:22;7892:50;:::i;:::-;7882:60;;7838:114;7636:323;;;;:::o;7965:474::-;8033:6;8041;8090:2;8078:9;8069:7;8065:23;8061:32;8058:119;;;8096:79;;:::i;:::-;8058:119;8216:1;8241:53;8286:7;8277:6;8266:9;8262:22;8241:53;:::i;:::-;8231:63;;8187:117;8343:2;8369:53;8414:7;8405:6;8394:9;8390:22;8369:53;:::i;:::-;8359:63;;8314:118;7965:474;;;;;:::o;8445:180::-;8493:77;8490:1;8483:88;8590:4;8587:1;8580:15;8614:4;8611:1;8604:15;8631:320;8675:6;8712:1;8706:4;8702:12;8692:22;;8759:1;8753:4;8749:12;8780:18;8770:81;;8836:4;8828:6;8824:17;8814:27;;8770:81;8898:2;8890:6;8887:14;8867:18;8864:38;8861:84;;8917:18;;:::i;:::-;8861:84;8682:269;8631:320;;;:::o;8957:229::-;9097:34;9093:1;9085:6;9081:14;9074:58;9166:12;9161:2;9153:6;9149:15;9142:37;8957:229;:::o;9192:366::-;9334:3;9355:67;9419:2;9414:3;9355:67;:::i;:::-;9348:74;;9431:93;9520:3;9431:93;:::i;:::-;9549:2;9544:3;9540:12;9533:19;;9192:366;;;:::o;9564:419::-;9730:4;9768:2;9757:9;9753:18;9745:26;;9817:9;9811:4;9807:20;9803:1;9792:9;9788:17;9781:47;9845:131;9971:4;9845:131;:::i;:::-;9837:139;;9564:419;;;:::o;9989:182::-;10129:34;10125:1;10117:6;10113:14;10106:58;9989:182;:::o;10177:366::-;10319:3;10340:67;10404:2;10399:3;10340:67;:::i;:::-;10333:74;;10416:93;10505:3;10416:93;:::i;:::-;10534:2;10529:3;10525:12;10518:19;;10177:366;;;:::o;10549:419::-;10715:4;10753:2;10742:9;10738:18;10730:26;;10802:9;10796:4;10792:20;10788:1;10777:9;10773:17;10766:47;10830:131;10956:4;10830:131;:::i;:::-;10822:139;;10549:419;;;:::o;10974:181::-;11114:33;11110:1;11102:6;11098:14;11091:57;10974:181;:::o;11161:366::-;11303:3;11324:67;11388:2;11383:3;11324:67;:::i;:::-;11317:74;;11400:93;11489:3;11400:93;:::i;:::-;11518:2;11513:3;11509:12;11502:19;;11161:366;;;:::o;11533:419::-;11699:4;11737:2;11726:9;11722:18;11714:26;;11786:9;11780:4;11776:20;11772:1;11761:9;11757:17;11750:47;11814:131;11940:4;11814:131;:::i;:::-;11806:139;;11533:419;;;:::o;11958:221::-;12098:34;12094:1;12086:6;12082:14;12075:58;12167:4;12162:2;12154:6;12150:15;12143:29;11958:221;:::o;12185:366::-;12327:3;12348:67;12412:2;12407:3;12348:67;:::i;:::-;12341:74;;12424:93;12513:3;12424:93;:::i;:::-;12542:2;12537:3;12533:12;12526:19;;12185:366;;;:::o;12557:419::-;12723:4;12761:2;12750:9;12746:18;12738:26;;12810:9;12804:4;12800:20;12796:1;12785:9;12781:17;12774:47;12838:131;12964:4;12838:131;:::i;:::-;12830:139;;12557:419;;;:::o;12982:174::-;13122:26;13118:1;13110:6;13106:14;13099:50;12982:174;:::o;13162:366::-;13304:3;13325:67;13389:2;13384:3;13325:67;:::i;:::-;13318:74;;13401:93;13490:3;13401:93;:::i;:::-;13519:2;13514:3;13510:12;13503:19;;13162:366;;;:::o;13534:419::-;13700:4;13738:2;13727:9;13723:18;13715:26;;13787:9;13781:4;13777:20;13773:1;13762:9;13758:17;13751:47;13815:131;13941:4;13815:131;:::i;:::-;13807:139;;13534:419;;;:::o;13959:175::-;14099:27;14095:1;14087:6;14083:14;14076:51;13959:175;:::o;14140:366::-;14282:3;14303:67;14367:2;14362:3;14303:67;:::i;:::-;14296:74;;14379:93;14468:3;14379:93;:::i;:::-;14497:2;14492:3;14488:12;14481:19;;14140:366;;;:::o;14512:419::-;14678:4;14716:2;14705:9;14701:18;14693:26;;14765:9;14759:4;14755:20;14751:1;14740:9;14736:17;14729:47;14793:131;14919:4;14793:131;:::i;:::-;14785:139;;14512:419;;;:::o;14937:174::-;15077:26;15073:1;15065:6;15061:14;15054:50;14937:174;:::o;15117:366::-;15259:3;15280:67;15344:2;15339:3;15280:67;:::i;:::-;15273:74;;15356:93;15445:3;15356:93;:::i;:::-;15474:2;15469:3;15465:12;15458:19;;15117:366;;;:::o;15489:419::-;15655:4;15693:2;15682:9;15678:18;15670:26;;15742:9;15736:4;15732:20;15728:1;15717:9;15713:17;15706:47;15770:131;15896:4;15770:131;:::i;:::-;15762:139;;15489:419;;;:::o;15914:332::-;16035:4;16073:2;16062:9;16058:18;16050:26;;16086:71;16154:1;16143:9;16139:17;16130:6;16086:71;:::i;:::-;16167:72;16235:2;16224:9;16220:18;16211:6;16167:72;:::i;:::-;15914:332;;;;;:::o;16252:137::-;16306:5;16337:6;16331:13;16322:22;;16353:30;16377:5;16353:30;:::i;:::-;16252:137;;;;:::o;16395:345::-;16462:6;16511:2;16499:9;16490:7;16486:23;16482:32;16479:119;;;16517:79;;:::i;:::-;16479:119;16637:1;16662:61;16715:7;16706:6;16695:9;16691:22;16662:61;:::i;:::-;16652:71;;16608:125;16395:345;;;;:::o;16746:174::-;16886:26;16882:1;16874:6;16870:14;16863:50;16746:174;:::o;16926:366::-;17068:3;17089:67;17153:2;17148:3;17089:67;:::i;:::-;17082:74;;17165:93;17254:3;17165:93;:::i;:::-;17283:2;17278:3;17274:12;17267:19;;16926:366;;;:::o;17298:419::-;17464:4;17502:2;17491:9;17487:18;17479:26;;17551:9;17545:4;17541:20;17537:1;17526:9;17522:17;17515:47;17579:131;17705:4;17579:131;:::i;:::-;17571:139;;17298:419;;;:::o;17723:300::-;17863:34;17859:1;17851:6;17847:14;17840:58;17932:34;17927:2;17919:6;17915:15;17908:59;18001:14;17996:2;17988:6;17984:15;17977:39;17723:300;:::o;18029:366::-;18171:3;18192:67;18256:2;18251:3;18192:67;:::i;:::-;18185:74;;18268:93;18357:3;18268:93;:::i;:::-;18386:2;18381:3;18377:12;18370:19;;18029:366;;;:::o;18401:419::-;18567:4;18605:2;18594:9;18590:18;18582:26;;18654:9;18648:4;18644:20;18640:1;18629:9;18625:17;18618:47;18682:131;18808:4;18682:131;:::i;:::-;18674:139;;18401:419;;;:::o;18826:225::-;18966:34;18962:1;18954:6;18950:14;18943:58;19035:8;19030:2;19022:6;19018:15;19011:33;18826:225;:::o;19057:366::-;19199:3;19220:67;19284:2;19279:3;19220:67;:::i;:::-;19213:74;;19296:93;19385:3;19296:93;:::i;:::-;19414:2;19409:3;19405:12;19398:19;;19057:366;;;:::o;19429:419::-;19595:4;19633:2;19622:9;19618:18;19610:26;;19682:9;19676:4;19672:20;19668:1;19657:9;19653:17;19646:47;19710:131;19836:4;19710:131;:::i;:::-;19702:139;;19429:419;;;:::o;19854:223::-;19994:34;19990:1;19982:6;19978:14;19971:58;20063:6;20058:2;20050:6;20046:15;20039:31;19854:223;:::o;20083:366::-;20225:3;20246:67;20310:2;20305:3;20246:67;:::i;:::-;20239:74;;20322:93;20411:3;20322:93;:::i;:::-;20440:2;20435:3;20431:12;20424:19;;20083:366;;;:::o;20455:419::-;20621:4;20659:2;20648:9;20644:18;20636:26;;20708:9;20702:4;20698:20;20694:1;20683:9;20679:17;20672:47;20736:131;20862:4;20736:131;:::i;:::-;20728:139;;20455:419;;;:::o;20880:221::-;21020:34;21016:1;21008:6;21004:14;20997:58;21089:4;21084:2;21076:6;21072:15;21065:29;20880:221;:::o;21107:366::-;21249:3;21270:67;21334:2;21329:3;21270:67;:::i;:::-;21263:74;;21346:93;21435:3;21346:93;:::i;:::-;21464:2;21459:3;21455:12;21448:19;;21107:366;;;:::o;21479:419::-;21645:4;21683:2;21672:9;21668:18;21660:26;;21732:9;21726:4;21722:20;21718:1;21707:9;21703:17;21696:47;21760:131;21886:4;21760:131;:::i;:::-;21752:139;;21479:419;;;:::o;21904:224::-;22044:34;22040:1;22032:6;22028:14;22021:58;22113:7;22108:2;22100:6;22096:15;22089:32;21904:224;:::o;22134:366::-;22276:3;22297:67;22361:2;22356:3;22297:67;:::i;:::-;22290:74;;22373:93;22462:3;22373:93;:::i;:::-;22491:2;22486:3;22482:12;22475:19;;22134:366;;;:::o;22506:419::-;22672:4;22710:2;22699:9;22695:18;22687:26;;22759:9;22753:4;22749:20;22745:1;22734:9;22730:17;22723:47;22787:131;22913:4;22787:131;:::i;:::-;22779:139;;22506:419;;;:::o;22931:222::-;23071:34;23067:1;23059:6;23055:14;23048:58;23140:5;23135:2;23127:6;23123:15;23116:30;22931:222;:::o;23159:366::-;23301:3;23322:67;23386:2;23381:3;23322:67;:::i;:::-;23315:74;;23398:93;23487:3;23398:93;:::i;:::-;23516:2;23511:3;23507:12;23500:19;;23159:366;;;:::o;23531:419::-;23697:4;23735:2;23724:9;23720:18;23712:26;;23784:9;23778:4;23774:20;23770:1;23759:9;23755:17;23748:47;23812:131;23938:4;23812:131;:::i;:::-;23804:139;;23531:419;;;:::o;23956:228::-;24096:34;24092:1;24084:6;24080:14;24073:58;24165:11;24160:2;24152:6;24148:15;24141:36;23956:228;:::o;24190:366::-;24332:3;24353:67;24417:2;24412:3;24353:67;:::i;:::-;24346:74;;24429:93;24518:3;24429:93;:::i;:::-;24547:2;24542:3;24538:12;24531:19;;24190:366;;;:::o;24562:419::-;24728:4;24766:2;24755:9;24751:18;24743:26;;24815:9;24809:4;24805:20;24801:1;24790:9;24786:17;24779:47;24843:131;24969:4;24843:131;:::i;:::-;24835:139;;24562:419;;;:::o;24987:174::-;25127:26;25123:1;25115:6;25111:14;25104:50;24987:174;:::o;25167:366::-;25309:3;25330:67;25394:2;25389:3;25330:67;:::i;:::-;25323:74;;25406:93;25495:3;25406:93;:::i;:::-;25524:2;25519:3;25515:12;25508:19;;25167:366;;;:::o;25539:419::-;25705:4;25743:2;25732:9;25728:18;25720:26;;25792:9;25786:4;25782:20;25778:1;25767:9;25763:17;25756:47;25820:131;25946:4;25820:131;:::i;:::-;25812:139;;25539:419;;;:::o;25964:180::-;26012:77;26009:1;26002:88;26109:4;26106:1;26099:15;26133:4;26130:1;26123:15;26150:191;26190:4;26210:20;26228:1;26210:20;:::i;:::-;26205:25;;26244:20;26262:1;26244:20;:::i;:::-;26239:25;;26283:1;26280;26277:8;26274:34;;;26288:18;;:::i;:::-;26274:34;26333:1;26330;26326:9;26318:17;;26150:191;;;;:::o;26347:305::-;26387:3;26406:20;26424:1;26406:20;:::i;:::-;26401:25;;26440:20;26458:1;26440:20;:::i;:::-;26435:25;;26594:1;26526:66;26522:74;26519:1;26516:81;26513:107;;;26600:18;;:::i;:::-;26513:107;26644:1;26641;26637:9;26630:16;;26347:305;;;;:::o;26658:177::-;26798:29;26794:1;26786:6;26782:14;26775:53;26658:177;:::o;26841:366::-;26983:3;27004:67;27068:2;27063:3;27004:67;:::i;:::-;26997:74;;27080:93;27169:3;27080:93;:::i;:::-;27198:2;27193:3;27189:12;27182:19;;26841:366;;;:::o;27213:419::-;27379:4;27417:2;27406:9;27402:18;27394:26;;27466:9;27460:4;27456:20;27452:1;27441:9;27437:17;27430:47;27494:131;27620:4;27494:131;:::i;:::-;27486:139;;27213:419;;;:::o;27638:180::-;27686:77;27683:1;27676:88;27783:4;27780:1;27773:15;27807:4;27804:1;27797:15;27824:180;27872:77;27869:1;27862:88;27969:4;27966:1;27959:15;27993:4;27990:1;27983:15;28010:143;28067:5;28098:6;28092:13;28083:22;;28114:33;28141:5;28114:33;:::i;:::-;28010:143;;;;:::o;28159:351::-;28229:6;28278:2;28266:9;28257:7;28253:23;28249:32;28246:119;;;28284:79;;:::i;:::-;28246:119;28404:1;28429:64;28485:7;28476:6;28465:9;28461:22;28429:64;:::i;:::-;28419:74;;28375:128;28159:351;;;;:::o;28516:85::-;28561:7;28590:5;28579:16;;28516:85;;;:::o;28607:158::-;28665:9;28698:61;28716:42;28725:32;28751:5;28725:32;:::i;:::-;28716:42;:::i;:::-;28698:61;:::i;:::-;28685:74;;28607:158;;;:::o;28771:147::-;28866:45;28905:5;28866:45;:::i;:::-;28861:3;28854:58;28771:147;;:::o;28924:114::-;28991:6;29025:5;29019:12;29009:22;;28924:114;;;:::o;29044:184::-;29143:11;29177:6;29172:3;29165:19;29217:4;29212:3;29208:14;29193:29;;29044:184;;;;:::o;29234:132::-;29301:4;29324:3;29316:11;;29354:4;29349:3;29345:14;29337:22;;29234:132;;;:::o;29372:108::-;29449:24;29467:5;29449:24;:::i;:::-;29444:3;29437:37;29372:108;;:::o;29486:179::-;29555:10;29576:46;29618:3;29610:6;29576:46;:::i;:::-;29654:4;29649:3;29645:14;29631:28;;29486:179;;;;:::o;29671:113::-;29741:4;29773;29768:3;29764:14;29756:22;;29671:113;;;:::o;29820:732::-;29939:3;29968:54;30016:5;29968:54;:::i;:::-;30038:86;30117:6;30112:3;30038:86;:::i;:::-;30031:93;;30148:56;30198:5;30148:56;:::i;:::-;30227:7;30258:1;30243:284;30268:6;30265:1;30262:13;30243:284;;;30344:6;30338:13;30371:63;30430:3;30415:13;30371:63;:::i;:::-;30364:70;;30457:60;30510:6;30457:60;:::i;:::-;30447:70;;30303:224;30290:1;30287;30283:9;30278:14;;30243:284;;;30247:14;30543:3;30536:10;;29944:608;;;29820:732;;;;:::o;30558:831::-;30821:4;30859:3;30848:9;30844:19;30836:27;;30873:71;30941:1;30930:9;30926:17;30917:6;30873:71;:::i;:::-;30954:80;31030:2;31019:9;31015:18;31006:6;30954:80;:::i;:::-;31081:9;31075:4;31071:20;31066:2;31055:9;31051:18;31044:48;31109:108;31212:4;31203:6;31109:108;:::i;:::-;31101:116;;31227:72;31295:2;31284:9;31280:18;31271:6;31227:72;:::i;:::-;31309:73;31377:3;31366:9;31362:19;31353:6;31309:73;:::i;:::-;30558:831;;;;;;;;:::o;31395:227::-;31535:34;31531:1;31523:6;31519:14;31512:58;31604:10;31599:2;31591:6;31587:15;31580:35;31395:227;:::o;31628:366::-;31770:3;31791:67;31855:2;31850:3;31791:67;:::i;:::-;31784:74;;31867:93;31956:3;31867:93;:::i;:::-;31985:2;31980:3;31976:12;31969:19;;31628:366;;;:::o;32000:419::-;32166:4;32204:2;32193:9;32189:18;32181:26;;32253:9;32247:4;32243:20;32239:1;32228:9;32224:17;32217:47;32281:131;32407:4;32281:131;:::i;:::-;32273:139;;32000:419;;;:::o;32425:233::-;32464:3;32487:24;32505:5;32487:24;:::i;:::-;32478:33;;32533:66;32526:5;32523:77;32520:103;;32603:18;;:::i;:::-;32520:103;32650:1;32643:5;32639:13;32632:20;;32425:233;;;:::o;32664:180::-;32712:77;32709:1;32702:88;32809:4;32806:1;32799:15;32833:4;32830:1;32823:15;32850:185;32890:1;32907:20;32925:1;32907:20;:::i;:::-;32902:25;;32941:20;32959:1;32941:20;:::i;:::-;32936:25;;32980:1;32970:35;;32985:18;;:::i;:::-;32970:35;33027:1;33024;33020:9;33015:14;;32850:185;;;;:::o;33041:348::-;33081:7;33104:20;33122:1;33104:20;:::i;:::-;33099:25;;33138:20;33156:1;33138:20;:::i;:::-;33133:25;;33326:1;33258:66;33254:74;33251:1;33248:81;33243:1;33236:9;33229:17;33225:105;33222:131;;;33333:18;;:::i;:::-;33222:131;33381:1;33378;33374:9;33363:20;;33041:348;;;;:::o;33395:220::-;33535:34;33531:1;33523:6;33519:14;33512:58;33604:3;33599:2;33591:6;33587:15;33580:28;33395:220;:::o;33621:366::-;33763:3;33784:67;33848:2;33843:3;33784:67;:::i;:::-;33777:74;;33860:93;33949:3;33860:93;:::i;:::-;33978:2;33973:3;33969:12;33962:19;;33621:366;;;:::o;33993:419::-;34159:4;34197:2;34186:9;34182:18;34174:26;;34246:9;34240:4;34236:20;34232:1;34221:9;34217:17;34210:47;34274:131;34400:4;34274:131;:::i;:::-;34266:139;;33993:419;;;:::o
Swarm Source
ipfs://eb2c40d4718a7e292ed952f54e03eb6e3edf6c8f34aa1d86e3a7f0b59b67c63b
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.