ERC-20
Overview
Max Total Supply
1,000,000,000,000 V
Holders
63
Market
Price
$0.00 @ 0.000000 MATIC
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
200 VValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
CoinFinancial
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2023-01-14 */ // OverJar V earn USDC on Polygon Blockchain 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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @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://consensys.net/diligence/blog/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"); (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 functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } //SPDX-License-Identifier: BSD-3-Clause library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } interface ERC20 { function totalSupply() external view returns (uint256); function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function getOwner() external view returns (address); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address _owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } abstract contract Auth { address internal owner; mapping (address => bool) internal authorizations; constructor(address _owner) { owner = _owner; authorizations[_owner] = true; } modifier onlyOwner() { require(isOwner(msg.sender), "!OWNER"); _; } modifier authorized() { require(isAuthorized(msg.sender), "!AUTHORIZED"); _; } function authorize(address adr) public onlyOwner { authorizations[adr] = true; } function unauthorize(address adr) public onlyOwner { authorizations[adr] = false; } function isOwner(address account) public view returns (bool) { return account == owner; } function isAuthorized(address adr) public view returns (bool) { return authorizations[adr]; } function transferOwnership(address payable adr) public onlyOwner { owner = adr; authorizations[adr] = true; emit OwnershipTransferred(adr); } event OwnershipTransferred(address owner); } interface IDEXFactory { function createPair(address tokenA, address tokenB) external returns (address pair); } interface IDEXRouter { 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 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; } interface IDividendDistributor { function setDistribution(uint256 _minPeriod, uint256 _minDistribution) external; function setShare(address shareholder, uint256 amount) external; function deposit() external payable; function process(uint256 gas) external; } contract DividendDistributor is IDividendDistributor { using SafeMath for uint256; address _earn; struct Share { uint256 amount; uint256 totalExcluded; uint256 totalRealised; } ERC20 USDC = ERC20(0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174); address wMatic = 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270; IDEXRouter router; address[] shareholders; mapping (address => uint256) shareholderIndexes; mapping (address => uint256) shareholderClaims; mapping (address => Share) public shares; uint256 public totalShares; uint256 public totalDividends; uint256 public totalDistributed; uint256 public dividendsPerShare; uint256 public dividendsPerShareAccuracyFactor = 10 ** 36; uint256 public minPeriod = 1 hours; uint256 public minDistribution = 1 * (10 ** 18); uint256 currentIndex; bool initialized; modifier initialization() { require(!initialized); _; initialized = true; } modifier onlyEarn() { require(msg.sender == _earn); _; } constructor (address _router) { router = _router != address(0) ? IDEXRouter(_router) : IDEXRouter(0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff); _earn = msg.sender; } function setDistribution(uint256 _minPeriod, uint256 _minDistribution) external override onlyEarn { minPeriod = _minPeriod; minDistribution = _minDistribution; } function setShare(address shareholder, uint256 amount) external override onlyEarn { if(shares[shareholder].amount > 0){ distributeDividend(shareholder); } if(amount > 0 && shares[shareholder].amount == 0){ addShareholder(shareholder); }else if(amount == 0 && shares[shareholder].amount > 0){ removeShareholder(shareholder); } totalShares = totalShares.sub(shares[shareholder].amount).add(amount); shares[shareholder].amount = amount; shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } function deposit() external payable override onlyEarn { uint256 balanceBefore = USDC.balanceOf(address(this)); address[] memory path = new address[](2); path[0] = wMatic; path[1] = address(USDC); router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}( 0, path, address(this), block.timestamp ); uint256 amount = USDC.balanceOf(address(this)).sub(balanceBefore); totalDividends = totalDividends.add(amount); dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares)); } function process(uint256 gas) external override onlyEarn { uint256 shareholderCount = shareholders.length; if(shareholderCount == 0) { return; } uint256 gasUsed = 0; uint256 gasLeft = gasleft(); uint256 iterations = 0; while(gasUsed < gas && iterations < shareholderCount) { if(currentIndex >= shareholderCount){ currentIndex = 0; } if(shouldDistribute(shareholders[currentIndex])){ distributeDividend(shareholders[currentIndex]); } gasUsed = gasUsed.add(gasLeft.sub(gasleft())); gasLeft = gasleft(); currentIndex++; iterations++; } } function shouldDistribute(address shareholder) internal view returns (bool) { return shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution; } function distributeDividend(address shareholder) internal { if(shares[shareholder].amount == 0){ return; } uint256 amount = getUnpaidEarnings(shareholder); if(amount > 0){ totalDistributed = totalDistributed.add(amount); USDC.transfer(shareholder, amount); shareholderClaims[shareholder] = block.timestamp; shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount); shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount); } } function claimDividend() external { distributeDividend(msg.sender); } function getUnpaidEarnings(address shareholder) public view returns (uint256) { if(shares[shareholder].amount == 0){ return 0; } uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount); uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded; if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; } return shareholderTotalDividends.sub(shareholderTotalExcluded); } function getCumulativeDividends(uint256 share) internal view returns (uint256) { return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor); } function addShareholder(address shareholder) internal { shareholderIndexes[shareholder] = shareholders.length; shareholders.push(shareholder); } function removeShareholder(address shareholder) internal { shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1]; shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder]; shareholders.pop(); } } pragma solidity ^0.8.8; contract CoinFinancial is ERC20, Auth { using SafeMath for uint256; using SafeERC20 for IERC20; address USDC = 0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174; address public wMatic = 0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270; address DEAD = 0x000000000000000000000000000000000000dEaD; address ZERO = 0x0000000000000000000000000000000000000000; address DEAD_NON_CHECKSUM = 0x000000000000000000000000000000000000dEaD; string constant _name = "OverJar"; string constant _symbol = "V"; uint8 constant _decimals = 9; uint256 public constant MASK = type(uint128).max; uint256 _totalSupply = 1_000_000_000_000 * (10 ** _decimals); uint256 public _maxTxAmount = _totalSupply.div(400); mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _allowances; mapping (address => bool) isFeeExempt; mapping (address => bool) isTxLimitExempt; mapping (address => bool) isDividendExempt; uint256 liquidityFee = 300; uint256 buybackFee = 100; uint256 rewardUSDCFee = 200; uint256 marketingFee = 200; uint256 totalFee = 800; uint256 feeDenominator = 10000; address public decentralizedLiquidity; address public decentralizedDevelopment; uint256 targetLiquidity = 25; uint256 targetLiquidityDenominator = 100; IDEXRouter public router; address public pair; uint256 public launchedAt; uint256 public launchedAtTimestamp; uint256 buybackMultiplierNumerator = 200; uint256 buybackMultiplierDenominator = 100; uint256 buybackMultiplierTriggeredAt; uint256 buybackMultiplierLength = 30 minutes; bool public autoBuybackEnabled = false; mapping (address => bool) buyBacker; uint256 autoBuybackCap; uint256 autoBuybackAccumulator; uint256 autoBuybackAmount; uint256 autoBuybackBlockPeriod; uint256 autoBuybackBlockLast; DividendDistributor distributor; address public distributorAddress; uint256 distributorGas = 500000; bool public swapEnabled = true; uint256 public swapThreshold = _totalSupply / 2000; bool inSwap; modifier swapping() { inSwap = true; _; inSwap = false; } constructor ( address _dexRouter ) Auth(msg.sender) { router = IDEXRouter(_dexRouter); pair = IDEXFactory(router.factory()).createPair(wMatic, address(this)); _allowances[address(this)][address(router)] = _totalSupply; wMatic = router.WETH(); distributor = new DividendDistributor(_dexRouter); distributorAddress = address(distributor); isFeeExempt[msg.sender] = true; isTxLimitExempt[msg.sender] = true; isDividendExempt[pair] = true; isDividendExempt[address(this)] = true; isDividendExempt[DEAD] = true; buyBacker[msg.sender] = true; decentralizedLiquidity = msg.sender; decentralizedDevelopment = msg.sender; approve(_dexRouter, _totalSupply); approve(address(pair), _totalSupply); _balances[msg.sender] = _totalSupply; emit Transfer(address(0), msg.sender, _totalSupply); } receive() external payable { } function totalSupply() external view override returns (uint256) { return _totalSupply; } function decimals() external pure override returns (uint8) { return _decimals; } function symbol() external pure override returns (string memory) { return _symbol; } function name() external pure override returns (string memory) { return _name; } function getOwner() external view override returns (address) { return owner; } modifier onlyBuybacker() { require(buyBacker[msg.sender] == true, ""); _; } function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _allowances[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function approveMax(address spender) external returns (bool) { return approve(spender, _totalSupply); } function transfer(address recipient, uint256 amount) external override returns (bool) { return _transferFrom(msg.sender, recipient, amount); } function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) { if(_allowances[sender][msg.sender] != _totalSupply){ _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance"); } return _transferFrom(sender, recipient, amount); } function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) { if(inSwap){ return _basicTransfer(sender, recipient, amount); } checkTxLimit(sender, amount); if(shouldSwapBack()){ swapBack(); } if(shouldAutoBuyback()){ triggerAutoBuyback(); } _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, recipient, amount) : amount; _balances[recipient] = _balances[recipient].add(amountReceived); if(!isDividendExempt[sender]){ try distributor.setShare(sender, _balances[sender]) {} catch {} } if(!isDividendExempt[recipient]){ try distributor.setShare(recipient, _balances[recipient]) {} catch {} } try distributor.process(distributorGas) {} catch {} emit Transfer(sender, recipient, amountReceived); return true; } function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) { _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance"); _balances[recipient] = _balances[recipient].add(amount); return true; } function checkTxLimit(address sender, uint256 amount) internal view { require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded"); } function shouldTakeFee(address sender) internal view returns (bool) { return !isFeeExempt[sender]; } function getTotalFee(bool selling) public view returns (uint256) { if(launchedAt + 1 >= block.number){ return feeDenominator.sub(1); } if(selling){ return getMultipliedFee(); } return totalFee; } function getMultipliedFee() public view returns (uint256) { if (launchedAtTimestamp + 1 days > block.timestamp) { return totalFee.mul(18000).div(feeDenominator); } else if (buybackMultiplierTriggeredAt.add(buybackMultiplierLength) > block.timestamp) { uint256 remainingTime = buybackMultiplierTriggeredAt.add(buybackMultiplierLength).sub(block.timestamp); uint256 feeIncrease = totalFee.mul(buybackMultiplierNumerator).div(buybackMultiplierDenominator).sub(totalFee); return totalFee.add(feeIncrease.mul(remainingTime).div(buybackMultiplierLength)); } return totalFee; } function takeFee(address sender, address receiver, uint256 amount) internal returns (uint256) { uint256 feeAmount = amount.mul(getTotalFee(receiver == pair)).div(feeDenominator); _balances[address(this)] = _balances[address(this)].add(feeAmount); emit Transfer(sender, address(this), feeAmount); return amount.sub(feeAmount); } function shouldSwapBack() internal view returns (bool) { return msg.sender != pair && !inSwap && swapEnabled && _balances[address(this)] >= swapThreshold; } function swapBack() internal swapping { uint256 decentralizedLiquidityFee = isOverLP(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee; uint256 amountToLiquify = swapThreshold.mul(decentralizedLiquidityFee).div(totalFee).div(2); uint256 amountToSwap = swapThreshold.sub(amountToLiquify); address[] memory path = new address[](2); path[0] = address(this); path[1] = wMatic; uint256 balanceBefore = address(this).balance; router.swapExactTokensForETHSupportingFeeOnTransferTokens( amountToSwap, 0, path, address(this), block.timestamp ); uint256 amountwMatic = address(this).balance.sub(balanceBefore); uint256 totalwMaticFee = totalFee.sub(decentralizedLiquidityFee.div(2)); uint256 amountwMaticLiquidity = amountwMatic.mul(decentralizedLiquidityFee).div(totalwMaticFee).div(2); uint256 amountwMaticReflection = amountwMatic.mul(rewardUSDCFee).div(totalwMaticFee); uint256 amountwMaticMarketing = amountwMatic.mul(marketingFee).div(totalwMaticFee); try distributor.deposit{value: amountwMaticReflection}() {} catch {} payable(decentralizedDevelopment).transfer(amountwMaticMarketing); if(amountToLiquify > 0){ router.addLiquidityETH{value: amountwMaticLiquidity}( address(this), amountToLiquify, 0, 0, decentralizedLiquidity, block.timestamp ); emit AutoLiquify(amountwMaticLiquidity, amountToLiquify); } } function shouldAutoBuyback() internal view returns (bool) { return msg.sender != pair && !inSwap && autoBuybackEnabled && autoBuybackBlockLast + autoBuybackBlockPeriod <= block.number && address(this).balance >= autoBuybackAmount; } function triggerBuyNBurn(uint256 amount, bool triggerBuybackMultiplier) external authorized { buyTokens(amount, DEAD); if(triggerBuybackMultiplier){ buybackMultiplierTriggeredAt = block.timestamp; emit BuybackMA(buybackMultiplierLength); } } function clearBuybackMultiplier() external authorized { buybackMultiplierTriggeredAt = 0; } function triggerAutoBuyback() internal { buyTokens(autoBuybackAmount, DEAD); autoBuybackBlockLast = block.number; autoBuybackAccumulator = autoBuybackAccumulator.add(autoBuybackAmount); if(autoBuybackAccumulator > autoBuybackCap){ autoBuybackEnabled = false; } } function buyTokens(uint256 amount, address to) internal swapping { address[] memory path = new address[](2); path[0] = wMatic; path[1] = address(this); router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}( 0, path, to, block.timestamp ); } function updateBuyback(bool _enabled, uint256 _cap, uint256 _amount, uint256 _period) external authorized { autoBuybackEnabled = _enabled; autoBuybackCap = _cap; autoBuybackAccumulator = 0; autoBuybackAmount = _amount; autoBuybackBlockPeriod = _period; autoBuybackBlockLast = block.number; } function updateBuybackMultipliers(uint256 numerator, uint256 denominator, uint256 length) external authorized { require(numerator / denominator <= 2 && numerator > denominator); buybackMultiplierNumerator = numerator; buybackMultiplierDenominator = denominator; buybackMultiplierLength = length; } function launched() internal view returns (bool) { return launchedAt != 0; } function launch() public authorized { require(launchedAt == 0, "Launched"); launchedAt = block.number; launchedAtTimestamp = block.timestamp; } function setTxLimit(uint256 amount) external authorized { require(amount >= _totalSupply / 1000); _maxTxAmount = amount; } function setIsDividendExempt(address holder, bool exempt) external authorized { require(holder != address(this) && holder != pair); isDividendExempt[holder] = exempt; if(exempt){ distributor.setShare(holder, 0); }else{ distributor.setShare(holder, _balances[holder]); } } function setIsFeeExempt(address holder, bool exempt) external authorized { isFeeExempt[holder] = exempt; } function setIsTxLimitExempt(address holder, bool exempt) external authorized { isTxLimitExempt[holder] = exempt; } function centralFees(uint256 _liquidityFee, uint256 _buybackFee, uint256 _rewardUSDCFee, uint256 _marketingFee, uint256 _feeDenominator) external authorized { liquidityFee = _liquidityFee; buybackFee = _buybackFee; rewardUSDCFee = _rewardUSDCFee; marketingFee = _marketingFee; totalFee = _liquidityFee.add(_buybackFee).add(_rewardUSDCFee).add(_marketingFee); feeDenominator = _feeDenominator; require(totalFee < feeDenominator/4); } function withdrawMatic(uint256 amount) external authorized() { if(amount == 0) payable(decentralizedDevelopment).transfer(address(this).balance); else payable(decentralizedDevelopment).transfer(amount); } function withdrawStuckERC20(address _token) external authorized() { uint amount = IERC20(_token).balanceOf(address(this)); IERC20(_token).safeTransfer(decentralizedDevelopment, amount); } function withdrawStuckERC20V2(address _tokenContract, uint256 _amount) external authorized { IERC20 tokenContract = IERC20(_tokenContract); tokenContract.approve(address(this), _amount); tokenContract.transferFrom(address(this), decentralizedDevelopment, _amount); } function setDecentralizedLP(address _decentralizedLiquidity, address _decentralizedDevelopment) external authorized { decentralizedLiquidity = _decentralizedLiquidity; decentralizedDevelopment = _decentralizedDevelopment; } function setSwapBack(bool _enabled, uint256 _amount) external authorized { swapEnabled = _enabled; swapThreshold = _amount; } function setTargetLP(uint256 _target, uint256 _denominator) external authorized { targetLiquidity = _target; targetLiquidityDenominator = _denominator; } function setDistribution(uint256 _minPeriod, uint256 _minDistribution) external authorized { distributor.setDistribution(_minPeriod, _minDistribution); } function setDistributorGas(uint256 gas) external authorized { require(gas < 750000); distributorGas = gas; } function getCirculatingSupply() public view returns (uint256) { return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO)); } function getLiquidity(uint256 accuracy) public view returns (uint256) { return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply()); } function isOverLP(uint256 target, uint256 accuracy) public view returns (bool) { return getLiquidity(accuracy) > target; } event AutoLiquify(uint256 amountwMatic, uint256 amountBOG); event BuybackMA(uint256 duration); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_dexRouter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountwMatic","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"duration","type":"uint256"}],"name":"BuybackMA","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","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":"MASK","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBuybackEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_buybackFee","type":"uint256"},{"internalType":"uint256","name":"_rewardUSDCFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"centralFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearBuybackMultiplier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decentralizedDevelopment","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decentralizedLiquidity","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMultipliedFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"selling","type":"bool"}],"name":"getTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAtTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_decentralizedLiquidity","type":"address"},{"internalType":"address","name":"_decentralizedDevelopment","type":"address"}],"name":"setDecentralizedLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"triggerBuybackMultiplier","type":"bool"}],"name":"triggerBuyNBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_cap","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"updateBuyback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"},{"internalType":"uint256","name":"length","type":"uint256"}],"name":"updateBuybackMultipliers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wMatic","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawMatic","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"withdrawStuckERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawStuckERC20V2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052732791bca1f2de4661ed88a30c99a7a9449aa84174600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730d500b1d8e8ef31e21c99d1db9a6444d3adf1270600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a62000186919062000db0565b64e8d4a5100062000198919062000e01565b600755620001b961019060075462000afc60201b620025f61790919060201c565b60085561012c600e556064600f5560c860105560c86011556103206012556127106013556019601655606460175560c8601c556064601d55610708601f556000602060006101000a81548160ff0219169083151502179055506207a1206029556001602a60006101000a81548160ff0219169083151502179055506107d060075462000246919062000e7b565b602b553480156200025657600080fd5b50604051620077ff380380620077ff83398181016040528101906200027c919062000f1d565b33806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003c4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ea919062000f1d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200044892919062000f60565b6020604051808303816000875af115801562000468573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200048e919062000f1d565b601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600754600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000607919062000f1d565b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080604051620006569062000c08565b62000662919062000f8d565b604051809103906000f0801580156200067f573d6000803e3d6000fd5b50602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001602160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000a0d8160075462000b1460201b60201c565b5062000a44601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660075462000b1460201b60201c565b50600754600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60075460405162000aed919062000fbb565b60405180910390a35062000fd8565b6000818362000b0c919062000e7b565b905092915050565b600081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162000bf6919062000fbb565b60405180910390a36001905092915050565b611c598062005ba683390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000ca45780860481111562000c7c5762000c7b62000c16565b5b600185161562000c8c5780820291505b808102905062000c9c8562000c45565b945062000c5c565b94509492505050565b60008262000cbf576001905062000d92565b8162000ccf576000905062000d92565b816001811462000ce8576002811462000cf35762000d29565b600191505062000d92565b60ff84111562000d085762000d0762000c16565b5b8360020a91508482111562000d225762000d2162000c16565b5b5062000d92565b5060208310610133831016604e8410600b841016171562000d635782820a90508381111562000d5d5762000d5c62000c16565b5b62000d92565b62000d72848484600162000c52565b9250905081840481111562000d8c5762000d8b62000c16565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000dbd8262000d99565b915062000dca8362000da3565b925062000df97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000cad565b905092915050565b600062000e0e8262000d99565b915062000e1b8362000d99565b925082820262000e2b8162000d99565b9150828204841483151762000e455762000e4462000c16565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000e888262000d99565b915062000e958362000d99565b92508262000ea85762000ea762000e4c565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ee58262000eb8565b9050919050565b62000ef78162000ed8565b811462000f0357600080fd5b50565b60008151905062000f178162000eec565b92915050565b60006020828403121562000f365762000f3562000eb3565b5b600062000f468482850162000f06565b91505092915050565b62000f5a8162000ed8565b82525050565b600060408201905062000f77600083018562000f4f565b62000f86602083018462000f4f565b9392505050565b600060208201905062000fa4600083018462000f4f565b92915050565b62000fb58162000d99565b82525050565b600060208201905062000fd2600083018462000faa565b92915050565b614bbe8062000fe86000396000f3fe6080604052600436106103035760003560e01c8063a5791c2211610190578063e1801618116100dc578063f1f3bca311610095578063f708a64f1161006f578063f708a64f14610b89578063f84ba65d14610bb2578063f887ea4014610bdb578063fe9fbb8014610c065761030a565b8063f1f3bca314610afa578063f2fde38b14610b37578063f6612af214610b605761030a565b8063e1801618146109ee578063e8a379b214610a17578063e91f214e14610a40578063ec4cfa6c14610a6b578063f0b37c0414610aa8578063f18dba2614610ad15761030a565b8063b6a5d7de11610149578063c0548b7d11610123578063c0548b7d14610930578063c6d2577d1461095b578063d806d12f14610986578063dd62ed3e146109b15761030a565b8063b6a5d7de146108b3578063ba22415b146108dc578063bf56b371146109055761030a565b8063a5791c22146107b7578063a7734e0e146107e2578063a8aa1b311461080b578063a9059cbb14610836578063ae34859114610873578063b210b06d1461089c5761030a565b80633c81fdb41161024f5780637d1db4a511610208578063951583c3116101e2578063951583c3146106fb57806395d89b411461073857806397613b2814610763578063a51af4c51461078c5761030a565b80637d1db4a51461067c578063893d20e8146106a75780638cbeab0d146106d25761030a565b80633c81fdb41461055a578063571ac8b0146105855780635c85974f146105c2578063658d4b7f146105eb5780636ddd17131461061457806370a082311461063f5761030a565b806323b872dd116102bc5780632f54bf6e116102965780632f54bf6e1461049e578063313ce567146104db5780633963510b146105065780633bb8a8d41461052f5761030a565b806323b872dd1461040d578063244ce7db1461044a5780632b112e49146104735761030a565b806301339c211461030f5780630445b6671461032657806306fdde03146103515780630826d44d1461037c578063095ea7b3146103a557806318160ddd146103e25761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c43565b005b34801561033257600080fd5b5061033b610ce0565b6040516103489190613bfb565b60405180910390f35b34801561035d57600080fd5b50610366610ce6565b6040516103739190613ca6565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190613cf9565b610d23565b005b3480156103b157600080fd5b506103cc60048036038101906103c79190613dd2565b610dee565b6040516103d99190613e2d565b60405180910390f35b3480156103ee57600080fd5b506103f7610ee0565b6040516104049190613bfb565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613e48565b610eea565b6040516104419190613e2d565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c9190613e9b565b6110cc565b005b34801561047f57600080fd5b5061048861112d565b6040516104959190613bfb565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190613ec8565b6111af565b6040516104d29190613e2d565b60405180910390f35b3480156104e757600080fd5b506104f0611208565b6040516104fd9190613f11565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190613ec8565b611211565b005b34801561053b57600080fd5b50610544611328565b6040516105519190613e2d565b60405180910390f35b34801561056657600080fd5b5061056f61133b565b60405161057c9190613f3b565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613ec8565b611361565b6040516105b99190613e2d565b60405180910390f35b3480156105ce57600080fd5b506105e960048036038101906105e49190613e9b565b611376565b005b3480156105f757600080fd5b50610612600480360381019061060d9190613f82565b6113e4565b005b34801561062057600080fd5b50610629611487565b6040516106369190613e2d565b60405180910390f35b34801561064b57600080fd5b5061066660048036038101906106619190613ec8565b61149a565b6040516106739190613bfb565b60405180910390f35b34801561068857600080fd5b506106916114e3565b60405161069e9190613bfb565b60405180910390f35b3480156106b357600080fd5b506106bc6114e9565b6040516106c99190613f3b565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f49190613dd2565b611512565b005b34801561070757600080fd5b50610722600480360381019061071d9190613e9b565b611686565b60405161072f9190613bfb565b60405180910390f35b34801561074457600080fd5b5061074d6116f8565b60405161075a9190613ca6565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190613fc2565b611735565b005b34801561079857600080fd5b506107a16117a2565b6040516107ae9190613f3b565b60405180910390f35b3480156107c357600080fd5b506107cc6117c8565b6040516107d99190613f3b565b60405180910390f35b3480156107ee57600080fd5b5061080960048036038101906108049190614002565b6117ee565b005b34801561081757600080fd5b5061082061187a565b60405161082d9190613f3b565b60405180910390f35b34801561084257600080fd5b5061085d60048036038101906108589190613dd2565b6118a0565b60405161086a9190613e2d565b60405180910390f35b34801561087f57600080fd5b5061089a60048036038101906108959190614069565b6118b5565b005b3480156108a857600080fd5b506108b1611983565b005b3480156108bf57600080fd5b506108da60048036038101906108d59190613ec8565b6119d5565b005b3480156108e857600080fd5b5061090360048036038101906108fe91906140a9565b611a77565b005b34801561091157600080fd5b5061091a611afd565b6040516109279190613bfb565b60405180910390f35b34801561093c57600080fd5b50610945611b03565b6040516109529190613f3b565b60405180910390f35b34801561096757600080fd5b50610970611b29565b60405161097d9190613bfb565b60405180910390f35b34801561099257600080fd5b5061099b611b2f565b6040516109a89190613bfb565b60405180910390f35b3480156109bd57600080fd5b506109d860048036038101906109d39190614069565b611c56565b6040516109e59190613bfb565b60405180910390f35b3480156109fa57600080fd5b50610a156004803603810190610a1091906140fc565b611cdd565b005b348015610a2357600080fd5b50610a3e6004803603810190610a399190613e9b565b611d9c565b005b348015610a4c57600080fd5b50610a55611ec7565b604051610a629190613bfb565b60405180910390f35b348015610a7757600080fd5b50610a926004803603810190610a8d919061413c565b611edd565b604051610a9f9190613e2d565b60405180910390f35b348015610ab457600080fd5b50610acf6004803603810190610aca9190613ec8565b611ef2565b005b348015610add57600080fd5b50610af86004803603810190610af3919061413c565b611f95565b005b348015610b0657600080fd5b50610b216004803603810190610b1c919061417c565b612070565b604051610b2e9190613bfb565b60405180910390f35b348015610b4357600080fd5b50610b5e6004803603810190610b5991906141e7565b6120c4565b005b348015610b6c57600080fd5b50610b876004803603810190610b82919061413c565b6121dd565b005b348015610b9557600080fd5b50610bb06004803603810190610bab9190613f82565b612237565b005b348015610bbe57600080fd5b50610bd96004803603810190610bd49190613f82565b6124d7565b005b348015610be757600080fd5b50610bf061257a565b604051610bfd9190614273565b60405180910390f35b348015610c1257600080fd5b50610c2d6004803603810190610c289190613ec8565b6125a0565b604051610c3a9190613e2d565b60405180910390f35b610c4c336125a0565b610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c82906142da565b60405180910390fd5b6000601a5414610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc790614346565b60405180910390fd5b43601a8190555042601b81905550565b602b5481565b60606040518060400160405280600781526020017f4f7665724a617200000000000000000000000000000000000000000000000000815250905090565b610d2c336125a0565b610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d62906142da565b60405180910390fd5b84600e8190555083600f819055508260108190555081601181905550610dbe82610db085610da2888a61260c90919063ffffffff16565b61260c90919063ffffffff16565b61260c90919063ffffffff16565b601281905550806013819055506004601354610dda91906143c4565b60125410610de757600080fd5b5050505050565b600081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ece9190613bfb565b60405180910390a36001905092915050565b6000600754905090565b6000600754600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146110b857611037826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126229092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6110c3848484612677565b90509392505050565b6110d5336125a0565b611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110b906142da565b60405180910390fd5b620b71b0811061112357600080fd5b8060298190555050565b60006111aa61115d600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661149a565b61119c61118b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661149a565b600754612b8990919063ffffffff16565b612b8990919063ffffffff16565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b61121a336125a0565b611259576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611250906142da565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112949190613f3b565b602060405180830381865afa1580156112b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d5919061440a565b9050611324601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff16612b9f9092919063ffffffff16565b5050565b602060009054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061136f82600754610dee565b9050919050565b61137f336125a0565b6113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b5906142da565b60405180910390fd5b6103e86007546113ce91906143c4565b8110156113da57600080fd5b8060088190555050565b6113ed336125a0565b61142c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611423906142da565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602a60009054906101000a900460ff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61151b336125a0565b61155a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611551906142da565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b330846040518363ffffffff1660e01b815260040161159a929190614437565b6020604051808303816000875af11580156115b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dd9190614475565b508073ffffffffffffffffffffffffffffffffffffffff166323b872dd30601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b815260040161163d939291906144a2565b6020604051808303816000875af115801561165c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116809190614475565b50505050565b60006116f161169361112d565b6116e36116d460026116c6601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661149a565b612c2590919063ffffffff16565b85612c2590919063ffffffff16565b6125f690919063ffffffff16565b9050919050565b60606040518060400160405280600181526020017f5600000000000000000000000000000000000000000000000000000000000000815250905090565b61173e336125a0565b61177d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611774906142da565b60405180910390fd5b81602a60006101000a81548160ff02191690831515021790555080602b819055505050565b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117f7336125a0565b611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d906142da565b60405180910390fd5b83602060006101000a81548160ff02191690831515021790555082602281905550600060238190555081602481905550806025819055504360268190555050505050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006118ad338484612677565b905092915050565b6118be336125a0565b6118fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f4906142da565b60405180910390fd5b81601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61198c336125a0565b6119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c2906142da565b60405180910390fd5b6000601e81905550565b6119de336111af565b611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1490614525565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611a80336125a0565b611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab6906142da565b60405180910390fd5b60028284611acd91906143c4565b11158015611ada57508183115b611ae357600080fd5b82601c8190555081601d8190555080601f81905550505050565b601a5481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b60004262015180601b54611b439190614545565b1115611b7b57611b74601354611b66614650601254612c2590919063ffffffff16565b6125f690919063ffffffff16565b9050611c53565b42611b93601f54601e5461260c90919063ffffffff16565b1115611c4d576000611bc442611bb6601f54601e5461260c90919063ffffffff16565b612b8990919063ffffffff16565b90506000611c07601254611bf9601d54611beb601c54601254612c2590919063ffffffff16565b6125f690919063ffffffff16565b612b8990919063ffffffff16565b9050611c44611c33601f54611c258585612c2590919063ffffffff16565b6125f690919063ffffffff16565b60125461260c90919063ffffffff16565b92505050611c53565b60125490505b90565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ce6336125a0565b611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c906142da565b60405180910390fd5b611d5182600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612c3b565b8015611d985742601e819055507fda1b5a4c951afa54d241d42ad0439a14050dc3711406fd2ddc2d4c4b10939150601f54604051611d8f9190613bfb565b60405180910390a15b5050565b611da5336125a0565b611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb906142da565b60405180910390fd5b60008103611e5a57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611e54573d6000803e3d6000fd5b50611ec4565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ec2573d6000803e3d6000fd5b505b50565b6fffffffffffffffffffffffffffffffff801681565b600082611ee983611686565b11905092915050565b611efb336111af565b611f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3190614525565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611f9e336125a0565b611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd4906142da565b60405180910390fd5b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f18dba2683836040518363ffffffff1660e01b815260040161203a929190614579565b600060405180830381600087803b15801561205457600080fd5b505af1158015612068573d6000803e3d6000fd5b505050505050565b6000436001601a546120829190614545565b106120a45761209d6001601354612b8990919063ffffffff16565b90506120bf565b81156120b9576120b2611b2f565b90506120bf565b60125490505b919050565b6120cd336111af565b61210c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210390614525565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516121d291906145c3565b60405180910390a150565b6121e6336125a0565b612225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221c906142da565b60405180910390fd5b81601681905550806017819055505050565b612240336125a0565b61227f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612276906142da565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156123095750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61231257600080fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561240457602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016123cd929190614619565b600060405180830381600087803b1580156123e757600080fd5b505af11580156123fb573d6000803e3d6000fd5b505050506124d3565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016124a0929190614437565b600060405180830381600087803b1580156124ba57600080fd5b505af11580156124ce573d6000803e3d6000fd5b505050505b5050565b6124e0336125a0565b61251f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612516906142da565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000818361260491906143c4565b905092915050565b6000818361261a9190614545565b905092915050565b600083831115829061266a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126619190613ca6565b60405180910390fd5b5082840390509392505050565b6000602c60009054906101000a900460ff16156126a057612699848484612e19565b9050612b82565b6126aa8483612f87565b6126b2613024565b156126c0576126bf6130fb565b5b6126c861362d565b156126d6576126d56136e0565b5b61275f826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126229092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006127ad8561375c565b6127b757826127c3565b6127c28585856137b3565b5b905061281781600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260c90919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661297457602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612947929190614437565b600060405180830381600087803b15801561296157600080fd5b505af1925050508015612972575060015b505b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a8e57602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612a61929190614437565b600060405180830381600087803b158015612a7b57600080fd5b505af1925050508015612a8c575060015b505b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796029546040518263ffffffff1660e01b8152600401612aeb9190613bfb565b600060405180830381600087803b158015612b0557600080fd5b505af1925050508015612b16575060015b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b749190613bfb565b60405180910390a360019150505b9392505050565b60008183612b979190614642565b905092915050565b612c208363a9059cbb60e01b8484604051602401612bbe929190614437565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061394e565b505050565b60008183612c339190614676565b905092915050565b6001602c60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612c7357612c726146b8565b5b604051908082528060200260200182016040528015612ca15781602001602082028036833780820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110612cdb57612cda6146e7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612d2a57612d296146e7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b8152600401612dc794939291906147d4565b6000604051808303818588803b158015612de057600080fd5b505af1158015612df4573d6000803e3d6000fd5b5050505050506000602c60006101000a81548160ff0219169083151502179055505050565b6000612ea4826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126229092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f3982600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260c90919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b60085481111580612fe15750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613020576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130179061486c565b60405180910390fd5b5050565b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156130915750602c60009054906101000a900460ff16155b80156130a95750602a60009054906101000a900460ff165b80156130f65750602b54600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602c60006101000a81548160ff0219169083151502179055506000613126601654601754611edd565b61313257600e54613135565b60005b90506000613175600261316760125461315986602b54612c2590919063ffffffff16565b6125f690919063ffffffff16565b6125f690919063ffffffff16565b9050600061318e82602b54612b8990919063ffffffff16565b90506000600267ffffffffffffffff8111156131ad576131ac6146b8565b5b6040519080825280602002602001820160405280156131db5781602001602082028036833780820191505090505b50905030816000815181106131f3576131f26146e7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613264576132636146e7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b815260040161330795949392919061488c565b600060405180830381600087803b15801561332157600080fd5b505af1158015613335573d6000803e3d6000fd5b50505050600061334e8247612b8990919063ffffffff16565b9050600061337a6133696002896125f690919063ffffffff16565b601254612b8990919063ffffffff16565b905060006133b660026133a88461339a8c88612c2590919063ffffffff16565b6125f690919063ffffffff16565b6125f690919063ffffffff16565b905060006133e1836133d360105487612c2590919063ffffffff16565b6125f690919063ffffffff16565b9050600061340c846133fe60115488612c2590919063ffffffff16565b6125f690919063ffffffff16565b9050602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561347857600080fd5b505af19350505050801561348a575060015b50601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156134f3573d6000803e3d6000fd5b50600089111561360657601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308c600080601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613586969594939291906148e6565b60606040518083038185885af11580156135a4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135c99190614947565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506838a6040516135fd929190614579565b60405180910390a15b505050505050505050506000602c60006101000a81548160ff021916908315150217905550565b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561369a5750602c60009054906101000a900460ff16155b80156136b25750602060009054906101000a900460ff165b80156136cd5750436025546026546136ca9190614545565b11155b80156136db57506024544710155b905090565b61370e602454600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612c3b565b4360268190555061372c60245460235461260c90919063ffffffff16565b602381905550602254602354111561375a576000602060006101000a81548160ff0219169083151502179055505b565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080613835601354613827613818601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614612070565b86612c2590919063ffffffff16565b6125f690919063ffffffff16565b905061388981600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260c90919063ffffffff16565b600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139299190613bfb565b60405180910390a36139448184612b8990919063ffffffff16565b9150509392505050565b60006139b0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613a159092919063ffffffff16565b9050600081511115613a1057808060200190518101906139d09190614475565b613a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a0690614a0c565b60405180910390fd5b5b505050565b6060613a248484600085613a2d565b90509392505050565b606082471015613a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a6990614a9e565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613a9b9190614b05565b60006040518083038185875af1925050503d8060008114613ad8576040519150601f19603f3d011682016040523d82523d6000602084013e613add565b606091505b5091509150613aee87838387613afa565b92505050949350505050565b60608315613b5c576000835103613b5457613b1485613b6f565b613b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4a90614b68565b60405180910390fd5b5b829050613b67565b613b668383613b92565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082511115613ba55781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd99190613ca6565b60405180910390fd5b6000819050919050565b613bf581613be2565b82525050565b6000602082019050613c106000830184613bec565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c50578082015181840152602081019050613c35565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c7882613c16565b613c828185613c21565b9350613c92818560208601613c32565b613c9b81613c5c565b840191505092915050565b60006020820190508181036000830152613cc08184613c6d565b905092915050565b600080fd5b613cd681613be2565b8114613ce157600080fd5b50565b600081359050613cf381613ccd565b92915050565b600080600080600060a08688031215613d1557613d14613cc8565b5b6000613d2388828901613ce4565b9550506020613d3488828901613ce4565b9450506040613d4588828901613ce4565b9350506060613d5688828901613ce4565b9250506080613d6788828901613ce4565b9150509295509295909350565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d9f82613d74565b9050919050565b613daf81613d94565b8114613dba57600080fd5b50565b600081359050613dcc81613da6565b92915050565b60008060408385031215613de957613de8613cc8565b5b6000613df785828601613dbd565b9250506020613e0885828601613ce4565b9150509250929050565b60008115159050919050565b613e2781613e12565b82525050565b6000602082019050613e426000830184613e1e565b92915050565b600080600060608486031215613e6157613e60613cc8565b5b6000613e6f86828701613dbd565b9350506020613e8086828701613dbd565b9250506040613e9186828701613ce4565b9150509250925092565b600060208284031215613eb157613eb0613cc8565b5b6000613ebf84828501613ce4565b91505092915050565b600060208284031215613ede57613edd613cc8565b5b6000613eec84828501613dbd565b91505092915050565b600060ff82169050919050565b613f0b81613ef5565b82525050565b6000602082019050613f266000830184613f02565b92915050565b613f3581613d94565b82525050565b6000602082019050613f506000830184613f2c565b92915050565b613f5f81613e12565b8114613f6a57600080fd5b50565b600081359050613f7c81613f56565b92915050565b60008060408385031215613f9957613f98613cc8565b5b6000613fa785828601613dbd565b9250506020613fb885828601613f6d565b9150509250929050565b60008060408385031215613fd957613fd8613cc8565b5b6000613fe785828601613f6d565b9250506020613ff885828601613ce4565b9150509250929050565b6000806000806080858703121561401c5761401b613cc8565b5b600061402a87828801613f6d565b945050602061403b87828801613ce4565b935050604061404c87828801613ce4565b925050606061405d87828801613ce4565b91505092959194509250565b600080604083850312156140805761407f613cc8565b5b600061408e85828601613dbd565b925050602061409f85828601613dbd565b9150509250929050565b6000806000606084860312156140c2576140c1613cc8565b5b60006140d086828701613ce4565b93505060206140e186828701613ce4565b92505060406140f286828701613ce4565b9150509250925092565b6000806040838503121561411357614112613cc8565b5b600061412185828601613ce4565b925050602061413285828601613f6d565b9150509250929050565b6000806040838503121561415357614152613cc8565b5b600061416185828601613ce4565b925050602061417285828601613ce4565b9150509250929050565b60006020828403121561419257614191613cc8565b5b60006141a084828501613f6d565b91505092915050565b60006141b482613d74565b9050919050565b6141c4816141a9565b81146141cf57600080fd5b50565b6000813590506141e1816141bb565b92915050565b6000602082840312156141fd576141fc613cc8565b5b600061420b848285016141d2565b91505092915050565b6000819050919050565b600061423961423461422f84613d74565b614214565b613d74565b9050919050565b600061424b8261421e565b9050919050565b600061425d82614240565b9050919050565b61426d81614252565b82525050565b60006020820190506142886000830184614264565b92915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b60006142c4600b83613c21565b91506142cf8261428e565b602082019050919050565b600060208201905081810360008301526142f3816142b7565b9050919050565b7f4c61756e63686564000000000000000000000000000000000000000000000000600082015250565b6000614330600883613c21565b915061433b826142fa565b602082019050919050565b6000602082019050818103600083015261435f81614323565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143cf82613be2565b91506143da83613be2565b9250826143ea576143e9614366565b5b828204905092915050565b60008151905061440481613ccd565b92915050565b6000602082840312156144205761441f613cc8565b5b600061442e848285016143f5565b91505092915050565b600060408201905061444c6000830185613f2c565b6144596020830184613bec565b9392505050565b60008151905061446f81613f56565b92915050565b60006020828403121561448b5761448a613cc8565b5b600061449984828501614460565b91505092915050565b60006060820190506144b76000830186613f2c565b6144c46020830185613f2c565b6144d16040830184613bec565b949350505050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b600061450f600683613c21565b915061451a826144d9565b602082019050919050565b6000602082019050818103600083015261453e81614502565b9050919050565b600061455082613be2565b915061455b83613be2565b925082820190508082111561457357614572614395565b5b92915050565b600060408201905061458e6000830185613bec565b61459b6020830184613bec565b9392505050565b60006145ad82614240565b9050919050565b6145bd816145a2565b82525050565b60006020820190506145d860008301846145b4565b92915050565b6000819050919050565b60006146036145fe6145f9846145de565b614214565b613be2565b9050919050565b614613816145e8565b82525050565b600060408201905061462e6000830185613f2c565b61463b602083018461460a565b9392505050565b600061464d82613be2565b915061465883613be2565b92508282039050818111156146705761466f614395565b5b92915050565b600061468182613be2565b915061468c83613be2565b925082820261469a81613be2565b915082820484148315176146b1576146b0614395565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61474b81613d94565b82525050565b600061475d8383614742565b60208301905092915050565b6000602082019050919050565b600061478182614716565b61478b8185614721565b935061479683614732565b8060005b838110156147c75781516147ae8882614751565b97506147b983614769565b92505060018101905061479a565b5085935050505092915050565b60006080820190506147e9600083018761460a565b81810360208301526147fb8186614776565b905061480a6040830185613f2c565b6148176060830184613bec565b95945050505050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614856601183613c21565b915061486182614820565b602082019050919050565b6000602082019050818103600083015261488581614849565b9050919050565b600060a0820190506148a16000830188613bec565b6148ae602083018761460a565b81810360408301526148c08186614776565b90506148cf6060830185613f2c565b6148dc6080830184613bec565b9695505050505050565b600060c0820190506148fb6000830189613f2c565b6149086020830188613bec565b614915604083018761460a565b614922606083018661460a565b61492f6080830185613f2c565b61493c60a0830184613bec565b979650505050505050565b6000806000606084860312156149605761495f613cc8565b5b600061496e868287016143f5565b935050602061497f868287016143f5565b9250506040614990868287016143f5565b9150509250925092565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006149f6602a83613c21565b9150614a018261499a565b604082019050919050565b60006020820190508181036000830152614a25816149e9565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614a88602683613c21565b9150614a9382614a2c565b604082019050919050565b60006020820190508181036000830152614ab781614a7b565b9050919050565b600081519050919050565b600081905092915050565b6000614adf82614abe565b614ae98185614ac9565b9350614af9818560208601613c32565b80840191505092915050565b6000614b118284614ad4565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614b52601d83613c21565b9150614b5d82614b1c565b602082019050919050565b60006020820190508181036000830152614b8181614b45565b905091905056fea264697066735822122095579b81c1d2c1843f1d9bd73437d8e4e6240ec01376c5d6fc20b8be97654f1b64736f6c634300081100336080604052732791bca1f2de4661ed88a30c99a7a9449aa84174600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550730d500b1d8e8ef31e21c99d1db9a6444d3adf1270600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55610e10600d55670de0b6b3a7640000600e55348015620000e057600080fd5b5060405162001c5938038062001c59833981810160405281019062000106919062000249565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001565773a5e0829caced8ffdd4de3c43696c57f7d7a678ff62000158565b805b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200027b565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200021182620001e4565b9050919050565b620002238162000204565b81146200022f57600080fd5b50565b600081519050620002438162000218565b92915050565b600060208284031215620002625762000261620001df565b5b6000620002728482850162000232565b91505092915050565b6119ce806200028b6000396000f3fe6080604052600436106100dd5760003560e01c8063d0e30db01161007f578063f0fc6bca11610059578063f0fc6bca14610293578063f18dba26146102aa578063ffb2c479146102d3578063ffd49c84146102fc576100dd565b8063d0e30db014610233578063e2d2e2191461023d578063efca2eed14610268576100dd565b80633a98ef39116100bb5780633a98ef39146101735780634fab0ae81461019e578063997664d7146101c9578063ce7c2ac2146101f4576100dd565b806311ce023d146100e257806314b6ca961461010d57806328fd319814610136575b600080fd5b3480156100ee57600080fd5b506100f7610327565b6040516101049190611386565b60405180910390f35b34801561011957600080fd5b50610134600480360381019061012f9190611430565b61032d565b005b34801561014257600080fd5b5061015d60048036038101906101589190611470565b6105ec565b60405161016a9190611386565b60405180910390f35b34801561017f57600080fd5b50610188610705565b6040516101959190611386565b60405180910390f35b3480156101aa57600080fd5b506101b361070b565b6040516101c09190611386565b60405180910390f35b3480156101d557600080fd5b506101de610711565b6040516101eb9190611386565b60405180910390f35b34801561020057600080fd5b5061021b60048036038101906102169190611470565b610717565b60405161022a9392919061149d565b60405180910390f35b61023b610741565b005b34801561024957600080fd5b50610252610b13565b60405161025f9190611386565b60405180910390f35b34801561027457600080fd5b5061027d610b19565b60405161028a9190611386565b60405180910390f35b34801561029f57600080fd5b506102a8610b1f565b005b3480156102b657600080fd5b506102d160048036038101906102cc91906114d4565b610b2a565b005b3480156102df57600080fd5b506102fa60048036038101906102f59190611514565b610b94565b005b34801561030857600080fd5b50610311610d27565b60405161031e9190611386565b60405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461038557600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156103da576103d982610d2d565b5b60008111801561042c57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b1561043f5761043a82610fc0565b6104a1565b60008114801561049157506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156104a05761049f8261106f565b5b5b61050a816104fc600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460085461127690919063ffffffff16565b61128c90919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506105a2600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546112a2565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154036106405760009050610700565b600061068d600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546112a2565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116106e857600092505050610700565b6106fb818361127690919063ffffffff16565b925050505b919050565b60085481565b600e5481565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461079957600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016107f69190611550565b602060405180830381865afa158015610813573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108379190611580565b90506000600267ffffffffffffffff811115610856576108556115ad565b5b6040519080825280602002602001820160405280156108845781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816000815181106108be576108bd6115dc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061092f5761092e6115dc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b81526004016109cc949392919061170e565b6000604051808303818588803b1580156109e557600080fd5b505af11580156109f9573d6000803e3d6000fd5b50505050506000610aae83600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a5f9190611550565b602060405180830381865afa158015610a7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa09190611580565b61127690919063ffffffff16565b9050610ac58160095461128c90919063ffffffff16565b600981905550610b08610af7600854610ae984600c546112d490919063ffffffff16565b6112ea90919063ffffffff16565b600b5461128c90919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b610b2833610d2d565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b8257600080fd5b81600d8190555080600e819055505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bec57600080fd5b6000600480549050905060008103610c045750610d24565b6000805a905060005b8483108015610c1b57508381105b15610d1f5783600f5410610c32576000600f819055505b610c7b6004600f5481548110610c4b57610c4a6115dc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611300565b15610cca57610cc96004600f5481548110610c9957610c986115dc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d2d565b5b610cef610ce05a8461127690919063ffffffff16565b8461128c90919063ffffffff16565b92505a9150600f6000815480929190610d0790611789565b91905055508080610d1790611789565b915050610c0d565b505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540315610fbd576000610d83826105ec565b90506000811115610fbb57610da381600a5461128c90919063ffffffff16565b600a81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610e069291906117d1565b6020604051808303816000875af1158015610e25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e499190611832565b5042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ee381600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002015461128c90919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610f74600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001546112a2565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60046001600480549050611083919061185f565b81548110611094576110936115dc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611112576111116115dc565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460056000600460016004805490506111b2919061185f565b815481106111c3576111c26115dc565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600480548061123e5761123d611893565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b60008183611284919061185f565b905092915050565b6000818361129a91906118c2565b905092915050565b60006112cd600c546112bf600b54856112d490919063ffffffff16565b6112ea90919063ffffffff16565b9050919050565b600081836112e291906118f6565b905092915050565b600081836112f89190611967565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461135091906118c2565b1080156113665750600e54611364836105ec565b115b9050919050565b6000819050919050565b6113808161136d565b82525050565b600060208201905061139b6000830184611377565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006113d1826113a6565b9050919050565b6113e1816113c6565b81146113ec57600080fd5b50565b6000813590506113fe816113d8565b92915050565b61140d8161136d565b811461141857600080fd5b50565b60008135905061142a81611404565b92915050565b60008060408385031215611447576114466113a1565b5b6000611455858286016113ef565b92505060206114668582860161141b565b9150509250929050565b600060208284031215611486576114856113a1565b5b6000611494848285016113ef565b91505092915050565b60006060820190506114b26000830186611377565b6114bf6020830185611377565b6114cc6040830184611377565b949350505050565b600080604083850312156114eb576114ea6113a1565b5b60006114f98582860161141b565b925050602061150a8582860161141b565b9150509250929050565b60006020828403121561152a576115296113a1565b5b60006115388482850161141b565b91505092915050565b61154a816113c6565b82525050565b60006020820190506115656000830184611541565b92915050565b60008151905061157a81611404565b92915050565b600060208284031215611596576115956113a1565b5b60006115a48482850161156b565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b600061163a6116356116308461160b565b611615565b61136d565b9050919050565b61164a8161161f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611685816113c6565b82525050565b6000611697838361167c565b60208301905092915050565b6000602082019050919050565b60006116bb82611650565b6116c5818561165b565b93506116d08361166c565b8060005b838110156117015781516116e8888261168b565b97506116f3836116a3565b9250506001810190506116d4565b5085935050505092915050565b60006080820190506117236000830187611641565b818103602083015261173581866116b0565b90506117446040830185611541565b6117516060830184611377565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006117948261136d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036117c6576117c561175a565b5b600182019050919050565b60006040820190506117e66000830185611541565b6117f36020830184611377565b9392505050565b60008115159050919050565b61180f816117fa565b811461181a57600080fd5b50565b60008151905061182c81611806565b92915050565b600060208284031215611848576118476113a1565b5b60006118568482850161181d565b91505092915050565b600061186a8261136d565b91506118758361136d565b925082820390508181111561188d5761188c61175a565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006118cd8261136d565b91506118d88361136d565b92508282019050808211156118f0576118ef61175a565b5b92915050565b60006119018261136d565b915061190c8361136d565b925082820261191a8161136d565b915082820484148315176119315761193061175a565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006119728261136d565b915061197d8361136d565b92508261198d5761198c611938565b5b82820490509291505056fea26469706673582212201f63d909531ca1b78c27c2435f33aa6b6a42f0a0ecd4194c3d46f7fcc9aa932b64736f6c63430008110033000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff
Deployed Bytecode
0x6080604052600436106103035760003560e01c8063a5791c2211610190578063e1801618116100dc578063f1f3bca311610095578063f708a64f1161006f578063f708a64f14610b89578063f84ba65d14610bb2578063f887ea4014610bdb578063fe9fbb8014610c065761030a565b8063f1f3bca314610afa578063f2fde38b14610b37578063f6612af214610b605761030a565b8063e1801618146109ee578063e8a379b214610a17578063e91f214e14610a40578063ec4cfa6c14610a6b578063f0b37c0414610aa8578063f18dba2614610ad15761030a565b8063b6a5d7de11610149578063c0548b7d11610123578063c0548b7d14610930578063c6d2577d1461095b578063d806d12f14610986578063dd62ed3e146109b15761030a565b8063b6a5d7de146108b3578063ba22415b146108dc578063bf56b371146109055761030a565b8063a5791c22146107b7578063a7734e0e146107e2578063a8aa1b311461080b578063a9059cbb14610836578063ae34859114610873578063b210b06d1461089c5761030a565b80633c81fdb41161024f5780637d1db4a511610208578063951583c3116101e2578063951583c3146106fb57806395d89b411461073857806397613b2814610763578063a51af4c51461078c5761030a565b80637d1db4a51461067c578063893d20e8146106a75780638cbeab0d146106d25761030a565b80633c81fdb41461055a578063571ac8b0146105855780635c85974f146105c2578063658d4b7f146105eb5780636ddd17131461061457806370a082311461063f5761030a565b806323b872dd116102bc5780632f54bf6e116102965780632f54bf6e1461049e578063313ce567146104db5780633963510b146105065780633bb8a8d41461052f5761030a565b806323b872dd1461040d578063244ce7db1461044a5780632b112e49146104735761030a565b806301339c211461030f5780630445b6671461032657806306fdde03146103515780630826d44d1461037c578063095ea7b3146103a557806318160ddd146103e25761030a565b3661030a57005b600080fd5b34801561031b57600080fd5b50610324610c43565b005b34801561033257600080fd5b5061033b610ce0565b6040516103489190613bfb565b60405180910390f35b34801561035d57600080fd5b50610366610ce6565b6040516103739190613ca6565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190613cf9565b610d23565b005b3480156103b157600080fd5b506103cc60048036038101906103c79190613dd2565b610dee565b6040516103d99190613e2d565b60405180910390f35b3480156103ee57600080fd5b506103f7610ee0565b6040516104049190613bfb565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613e48565b610eea565b6040516104419190613e2d565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c9190613e9b565b6110cc565b005b34801561047f57600080fd5b5061048861112d565b6040516104959190613bfb565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190613ec8565b6111af565b6040516104d29190613e2d565b60405180910390f35b3480156104e757600080fd5b506104f0611208565b6040516104fd9190613f11565b60405180910390f35b34801561051257600080fd5b5061052d60048036038101906105289190613ec8565b611211565b005b34801561053b57600080fd5b50610544611328565b6040516105519190613e2d565b60405180910390f35b34801561056657600080fd5b5061056f61133b565b60405161057c9190613f3b565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613ec8565b611361565b6040516105b99190613e2d565b60405180910390f35b3480156105ce57600080fd5b506105e960048036038101906105e49190613e9b565b611376565b005b3480156105f757600080fd5b50610612600480360381019061060d9190613f82565b6113e4565b005b34801561062057600080fd5b50610629611487565b6040516106369190613e2d565b60405180910390f35b34801561064b57600080fd5b5061066660048036038101906106619190613ec8565b61149a565b6040516106739190613bfb565b60405180910390f35b34801561068857600080fd5b506106916114e3565b60405161069e9190613bfb565b60405180910390f35b3480156106b357600080fd5b506106bc6114e9565b6040516106c99190613f3b565b60405180910390f35b3480156106de57600080fd5b506106f960048036038101906106f49190613dd2565b611512565b005b34801561070757600080fd5b50610722600480360381019061071d9190613e9b565b611686565b60405161072f9190613bfb565b60405180910390f35b34801561074457600080fd5b5061074d6116f8565b60405161075a9190613ca6565b60405180910390f35b34801561076f57600080fd5b5061078a60048036038101906107859190613fc2565b611735565b005b34801561079857600080fd5b506107a16117a2565b6040516107ae9190613f3b565b60405180910390f35b3480156107c357600080fd5b506107cc6117c8565b6040516107d99190613f3b565b60405180910390f35b3480156107ee57600080fd5b5061080960048036038101906108049190614002565b6117ee565b005b34801561081757600080fd5b5061082061187a565b60405161082d9190613f3b565b60405180910390f35b34801561084257600080fd5b5061085d60048036038101906108589190613dd2565b6118a0565b60405161086a9190613e2d565b60405180910390f35b34801561087f57600080fd5b5061089a60048036038101906108959190614069565b6118b5565b005b3480156108a857600080fd5b506108b1611983565b005b3480156108bf57600080fd5b506108da60048036038101906108d59190613ec8565b6119d5565b005b3480156108e857600080fd5b5061090360048036038101906108fe91906140a9565b611a77565b005b34801561091157600080fd5b5061091a611afd565b6040516109279190613bfb565b60405180910390f35b34801561093c57600080fd5b50610945611b03565b6040516109529190613f3b565b60405180910390f35b34801561096757600080fd5b50610970611b29565b60405161097d9190613bfb565b60405180910390f35b34801561099257600080fd5b5061099b611b2f565b6040516109a89190613bfb565b60405180910390f35b3480156109bd57600080fd5b506109d860048036038101906109d39190614069565b611c56565b6040516109e59190613bfb565b60405180910390f35b3480156109fa57600080fd5b50610a156004803603810190610a1091906140fc565b611cdd565b005b348015610a2357600080fd5b50610a3e6004803603810190610a399190613e9b565b611d9c565b005b348015610a4c57600080fd5b50610a55611ec7565b604051610a629190613bfb565b60405180910390f35b348015610a7757600080fd5b50610a926004803603810190610a8d919061413c565b611edd565b604051610a9f9190613e2d565b60405180910390f35b348015610ab457600080fd5b50610acf6004803603810190610aca9190613ec8565b611ef2565b005b348015610add57600080fd5b50610af86004803603810190610af3919061413c565b611f95565b005b348015610b0657600080fd5b50610b216004803603810190610b1c919061417c565b612070565b604051610b2e9190613bfb565b60405180910390f35b348015610b4357600080fd5b50610b5e6004803603810190610b5991906141e7565b6120c4565b005b348015610b6c57600080fd5b50610b876004803603810190610b82919061413c565b6121dd565b005b348015610b9557600080fd5b50610bb06004803603810190610bab9190613f82565b612237565b005b348015610bbe57600080fd5b50610bd96004803603810190610bd49190613f82565b6124d7565b005b348015610be757600080fd5b50610bf061257a565b604051610bfd9190614273565b60405180910390f35b348015610c1257600080fd5b50610c2d6004803603810190610c289190613ec8565b6125a0565b604051610c3a9190613e2d565b60405180910390f35b610c4c336125a0565b610c8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c82906142da565b60405180910390fd5b6000601a5414610cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc790614346565b60405180910390fd5b43601a8190555042601b81905550565b602b5481565b60606040518060400160405280600781526020017f4f7665724a617200000000000000000000000000000000000000000000000000815250905090565b610d2c336125a0565b610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d62906142da565b60405180910390fd5b84600e8190555083600f819055508260108190555081601181905550610dbe82610db085610da2888a61260c90919063ffffffff16565b61260c90919063ffffffff16565b61260c90919063ffffffff16565b601281905550806013819055506004601354610dda91906143c4565b60125410610de757600080fd5b5050505050565b600081600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610ece9190613bfb565b60405180910390a36001905092915050565b6000600754905090565b6000600754600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146110b857611037826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600a60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126229092919063ffffffff16565b600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6110c3848484612677565b90509392505050565b6110d5336125a0565b611114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110b906142da565b60405180910390fd5b620b71b0811061112357600080fd5b8060298190555050565b60006111aa61115d600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661149a565b61119c61118b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661149a565b600754612b8990919063ffffffff16565b612b8990919063ffffffff16565b905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b61121a336125a0565b611259576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611250906142da565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016112949190613f3b565b602060405180830381865afa1580156112b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d5919061440a565b9050611324601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff16612b9f9092919063ffffffff16565b5050565b602060009054906101000a900460ff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061136f82600754610dee565b9050919050565b61137f336125a0565b6113be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b5906142da565b60405180910390fd5b6103e86007546113ce91906143c4565b8110156113da57600080fd5b8060088190555050565b6113ed336125a0565b61142c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611423906142da565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b602a60009054906101000a900460ff1681565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60085481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61151b336125a0565b61155a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611551906142da565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663095ea7b330846040518363ffffffff1660e01b815260040161159a929190614437565b6020604051808303816000875af11580156115b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115dd9190614475565b508073ffffffffffffffffffffffffffffffffffffffff166323b872dd30601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b815260040161163d939291906144a2565b6020604051808303816000875af115801561165c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116809190614475565b50505050565b60006116f161169361112d565b6116e36116d460026116c6601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661149a565b612c2590919063ffffffff16565b85612c2590919063ffffffff16565b6125f690919063ffffffff16565b9050919050565b60606040518060400160405280600181526020017f5600000000000000000000000000000000000000000000000000000000000000815250905090565b61173e336125a0565b61177d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611774906142da565b60405180910390fd5b81602a60006101000a81548160ff02191690831515021790555080602b819055505050565b602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117f7336125a0565b611836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182d906142da565b60405180910390fd5b83602060006101000a81548160ff02191690831515021790555082602281905550600060238190555081602481905550806025819055504360268190555050505050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006118ad338484612677565b905092915050565b6118be336125a0565b6118fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f4906142da565b60405180910390fd5b81601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61198c336125a0565b6119cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c2906142da565b60405180910390fd5b6000601e81905550565b6119de336111af565b611a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1490614525565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611a80336125a0565b611abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab6906142da565b60405180910390fd5b60028284611acd91906143c4565b11158015611ada57508183115b611ae357600080fd5b82601c8190555081601d8190555080601f81905550505050565b601a5481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b60004262015180601b54611b439190614545565b1115611b7b57611b74601354611b66614650601254612c2590919063ffffffff16565b6125f690919063ffffffff16565b9050611c53565b42611b93601f54601e5461260c90919063ffffffff16565b1115611c4d576000611bc442611bb6601f54601e5461260c90919063ffffffff16565b612b8990919063ffffffff16565b90506000611c07601254611bf9601d54611beb601c54601254612c2590919063ffffffff16565b6125f690919063ffffffff16565b612b8990919063ffffffff16565b9050611c44611c33601f54611c258585612c2590919063ffffffff16565b6125f690919063ffffffff16565b60125461260c90919063ffffffff16565b92505050611c53565b60125490505b90565b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ce6336125a0565b611d25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1c906142da565b60405180910390fd5b611d5182600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612c3b565b8015611d985742601e819055507fda1b5a4c951afa54d241d42ad0439a14050dc3711406fd2ddc2d4c4b10939150601f54604051611d8f9190613bfb565b60405180910390a15b5050565b611da5336125a0565b611de4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ddb906142da565b60405180910390fd5b60008103611e5a57601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611e54573d6000803e3d6000fd5b50611ec4565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ec2573d6000803e3d6000fd5b505b50565b6fffffffffffffffffffffffffffffffff801681565b600082611ee983611686565b11905092915050565b611efb336111af565b611f3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3190614525565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611f9e336125a0565b611fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd4906142da565b60405180910390fd5b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f18dba2683836040518363ffffffff1660e01b815260040161203a929190614579565b600060405180830381600087803b15801561205457600080fd5b505af1158015612068573d6000803e3d6000fd5b505050505050565b6000436001601a546120829190614545565b106120a45761209d6001601354612b8990919063ffffffff16565b90506120bf565b81156120b9576120b2611b2f565b90506120bf565b60125490505b919050565b6120cd336111af565b61210c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210390614525565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516121d291906145c3565b60405180910390a150565b6121e6336125a0565b612225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221c906142da565b60405180910390fd5b81601681905550806017819055505050565b612240336125a0565b61227f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612276906142da565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156123095750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b61231257600080fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561240457602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b81526004016123cd929190614619565b600060405180830381600087803b1580156123e757600080fd5b505af11580156123fb573d6000803e3d6000fd5b505050506124d3565b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b81526004016124a0929190614437565b600060405180830381600087803b1580156124ba57600080fd5b505af11580156124ce573d6000803e3d6000fd5b505050505b5050565b6124e0336125a0565b61251f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612516906142da565b60405180910390fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000818361260491906143c4565b905092915050565b6000818361261a9190614545565b905092915050565b600083831115829061266a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126619190613ca6565b60405180910390fd5b5082840390509392505050565b6000602c60009054906101000a900460ff16156126a057612699848484612e19565b9050612b82565b6126aa8483612f87565b6126b2613024565b156126c0576126bf6130fb565b5b6126c861362d565b156126d6576126d56136e0565b5b61275f826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126229092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006127ad8561375c565b6127b757826127c3565b6127c28585856137b3565b5b905061281781600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260c90919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661297457602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9686600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612947929190614437565b600060405180830381600087803b15801561296157600080fd5b505af1925050508015612972575060015b505b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a8e57602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9685600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612a61929190614437565b600060405180830381600087803b158015612a7b57600080fd5b505af1925050508015612a8c575060015b505b602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796029546040518263ffffffff1660e01b8152600401612aeb9190613bfb565b600060405180830381600087803b158015612b0557600080fd5b505af1925050508015612b16575060015b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612b749190613bfb565b60405180910390a360019150505b9392505050565b60008183612b979190614642565b905092915050565b612c208363a9059cbb60e01b8484604051602401612bbe929190614437565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061394e565b505050565b60008183612c339190614676565b905092915050565b6001602c60006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612c7357612c726146b8565b5b604051908082528060200260200182016040528015612ca15781602001602082028036833780820191505090505b509050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110612cdb57612cda6146e7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110612d2a57612d296146e7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008486426040518663ffffffff1660e01b8152600401612dc794939291906147d4565b6000604051808303818588803b158015612de057600080fd5b505af1158015612df4573d6000803e3d6000fd5b5050505050506000602c60006101000a81548160ff0219169083151502179055505050565b6000612ea4826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600960008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126229092919063ffffffff16565b600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612f3982600960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260c90919063ffffffff16565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600190509392505050565b60085481111580612fe15750600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b613020576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130179061486c565b60405180910390fd5b5050565b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156130915750602c60009054906101000a900460ff16155b80156130a95750602a60009054906101000a900460ff165b80156130f65750602b54600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001602c60006101000a81548160ff0219169083151502179055506000613126601654601754611edd565b61313257600e54613135565b60005b90506000613175600261316760125461315986602b54612c2590919063ffffffff16565b6125f690919063ffffffff16565b6125f690919063ffffffff16565b9050600061318e82602b54612b8990919063ffffffff16565b90506000600267ffffffffffffffff8111156131ad576131ac6146b8565b5b6040519080825280602002602001820160405280156131db5781602001602082028036833780820191505090505b50905030816000815181106131f3576131f26146e7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613264576132636146e7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b815260040161330795949392919061488c565b600060405180830381600087803b15801561332157600080fd5b505af1158015613335573d6000803e3d6000fd5b50505050600061334e8247612b8990919063ffffffff16565b9050600061337a6133696002896125f690919063ffffffff16565b601254612b8990919063ffffffff16565b905060006133b660026133a88461339a8c88612c2590919063ffffffff16565b6125f690919063ffffffff16565b6125f690919063ffffffff16565b905060006133e1836133d360105487612c2590919063ffffffff16565b6125f690919063ffffffff16565b9050600061340c846133fe60115488612c2590919063ffffffff16565b6125f690919063ffffffff16565b9050602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b15801561347857600080fd5b505af19350505050801561348a575060015b50601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156134f3573d6000803e3d6000fd5b50600089111561360657601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71984308c600080601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613586969594939291906148e6565b60606040518083038185885af11580156135a4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906135c99190614947565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506838a6040516135fd929190614579565b60405180910390a15b505050505050505050506000602c60006101000a81548160ff021916908315150217905550565b6000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415801561369a5750602c60009054906101000a900460ff16155b80156136b25750602060009054906101000a900460ff165b80156136cd5750436025546026546136ca9190614545565b11155b80156136db57506024544710155b905090565b61370e602454600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612c3b565b4360268190555061372c60245460235461260c90919063ffffffff16565b602381905550602254602354111561375a576000602060006101000a81548160ff0219169083151502179055505b565b6000600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080613835601354613827613818601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614612070565b86612c2590919063ffffffff16565b6125f690919063ffffffff16565b905061388981600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461260c90919063ffffffff16565b600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516139299190613bfb565b60405180910390a36139448184612b8990919063ffffffff16565b9150509392505050565b60006139b0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16613a159092919063ffffffff16565b9050600081511115613a1057808060200190518101906139d09190614475565b613a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a0690614a0c565b60405180910390fd5b5b505050565b6060613a248484600085613a2d565b90509392505050565b606082471015613a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a6990614a9e565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051613a9b9190614b05565b60006040518083038185875af1925050503d8060008114613ad8576040519150601f19603f3d011682016040523d82523d6000602084013e613add565b606091505b5091509150613aee87838387613afa565b92505050949350505050565b60608315613b5c576000835103613b5457613b1485613b6f565b613b53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b4a90614b68565b60405180910390fd5b5b829050613b67565b613b668383613b92565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082511115613ba55781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd99190613ca6565b60405180910390fd5b6000819050919050565b613bf581613be2565b82525050565b6000602082019050613c106000830184613bec565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613c50578082015181840152602081019050613c35565b60008484015250505050565b6000601f19601f8301169050919050565b6000613c7882613c16565b613c828185613c21565b9350613c92818560208601613c32565b613c9b81613c5c565b840191505092915050565b60006020820190508181036000830152613cc08184613c6d565b905092915050565b600080fd5b613cd681613be2565b8114613ce157600080fd5b50565b600081359050613cf381613ccd565b92915050565b600080600080600060a08688031215613d1557613d14613cc8565b5b6000613d2388828901613ce4565b9550506020613d3488828901613ce4565b9450506040613d4588828901613ce4565b9350506060613d5688828901613ce4565b9250506080613d6788828901613ce4565b9150509295509295909350565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d9f82613d74565b9050919050565b613daf81613d94565b8114613dba57600080fd5b50565b600081359050613dcc81613da6565b92915050565b60008060408385031215613de957613de8613cc8565b5b6000613df785828601613dbd565b9250506020613e0885828601613ce4565b9150509250929050565b60008115159050919050565b613e2781613e12565b82525050565b6000602082019050613e426000830184613e1e565b92915050565b600080600060608486031215613e6157613e60613cc8565b5b6000613e6f86828701613dbd565b9350506020613e8086828701613dbd565b9250506040613e9186828701613ce4565b9150509250925092565b600060208284031215613eb157613eb0613cc8565b5b6000613ebf84828501613ce4565b91505092915050565b600060208284031215613ede57613edd613cc8565b5b6000613eec84828501613dbd565b91505092915050565b600060ff82169050919050565b613f0b81613ef5565b82525050565b6000602082019050613f266000830184613f02565b92915050565b613f3581613d94565b82525050565b6000602082019050613f506000830184613f2c565b92915050565b613f5f81613e12565b8114613f6a57600080fd5b50565b600081359050613f7c81613f56565b92915050565b60008060408385031215613f9957613f98613cc8565b5b6000613fa785828601613dbd565b9250506020613fb885828601613f6d565b9150509250929050565b60008060408385031215613fd957613fd8613cc8565b5b6000613fe785828601613f6d565b9250506020613ff885828601613ce4565b9150509250929050565b6000806000806080858703121561401c5761401b613cc8565b5b600061402a87828801613f6d565b945050602061403b87828801613ce4565b935050604061404c87828801613ce4565b925050606061405d87828801613ce4565b91505092959194509250565b600080604083850312156140805761407f613cc8565b5b600061408e85828601613dbd565b925050602061409f85828601613dbd565b9150509250929050565b6000806000606084860312156140c2576140c1613cc8565b5b60006140d086828701613ce4565b93505060206140e186828701613ce4565b92505060406140f286828701613ce4565b9150509250925092565b6000806040838503121561411357614112613cc8565b5b600061412185828601613ce4565b925050602061413285828601613f6d565b9150509250929050565b6000806040838503121561415357614152613cc8565b5b600061416185828601613ce4565b925050602061417285828601613ce4565b9150509250929050565b60006020828403121561419257614191613cc8565b5b60006141a084828501613f6d565b91505092915050565b60006141b482613d74565b9050919050565b6141c4816141a9565b81146141cf57600080fd5b50565b6000813590506141e1816141bb565b92915050565b6000602082840312156141fd576141fc613cc8565b5b600061420b848285016141d2565b91505092915050565b6000819050919050565b600061423961423461422f84613d74565b614214565b613d74565b9050919050565b600061424b8261421e565b9050919050565b600061425d82614240565b9050919050565b61426d81614252565b82525050565b60006020820190506142886000830184614264565b92915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b60006142c4600b83613c21565b91506142cf8261428e565b602082019050919050565b600060208201905081810360008301526142f3816142b7565b9050919050565b7f4c61756e63686564000000000000000000000000000000000000000000000000600082015250565b6000614330600883613c21565b915061433b826142fa565b602082019050919050565b6000602082019050818103600083015261435f81614323565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006143cf82613be2565b91506143da83613be2565b9250826143ea576143e9614366565b5b828204905092915050565b60008151905061440481613ccd565b92915050565b6000602082840312156144205761441f613cc8565b5b600061442e848285016143f5565b91505092915050565b600060408201905061444c6000830185613f2c565b6144596020830184613bec565b9392505050565b60008151905061446f81613f56565b92915050565b60006020828403121561448b5761448a613cc8565b5b600061449984828501614460565b91505092915050565b60006060820190506144b76000830186613f2c565b6144c46020830185613f2c565b6144d16040830184613bec565b949350505050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b600061450f600683613c21565b915061451a826144d9565b602082019050919050565b6000602082019050818103600083015261453e81614502565b9050919050565b600061455082613be2565b915061455b83613be2565b925082820190508082111561457357614572614395565b5b92915050565b600060408201905061458e6000830185613bec565b61459b6020830184613bec565b9392505050565b60006145ad82614240565b9050919050565b6145bd816145a2565b82525050565b60006020820190506145d860008301846145b4565b92915050565b6000819050919050565b60006146036145fe6145f9846145de565b614214565b613be2565b9050919050565b614613816145e8565b82525050565b600060408201905061462e6000830185613f2c565b61463b602083018461460a565b9392505050565b600061464d82613be2565b915061465883613be2565b92508282039050818111156146705761466f614395565b5b92915050565b600061468182613be2565b915061468c83613be2565b925082820261469a81613be2565b915082820484148315176146b1576146b0614395565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61474b81613d94565b82525050565b600061475d8383614742565b60208301905092915050565b6000602082019050919050565b600061478182614716565b61478b8185614721565b935061479683614732565b8060005b838110156147c75781516147ae8882614751565b97506147b983614769565b92505060018101905061479a565b5085935050505092915050565b60006080820190506147e9600083018761460a565b81810360208301526147fb8186614776565b905061480a6040830185613f2c565b6148176060830184613bec565b95945050505050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b6000614856601183613c21565b915061486182614820565b602082019050919050565b6000602082019050818103600083015261488581614849565b9050919050565b600060a0820190506148a16000830188613bec565b6148ae602083018761460a565b81810360408301526148c08186614776565b90506148cf6060830185613f2c565b6148dc6080830184613bec565b9695505050505050565b600060c0820190506148fb6000830189613f2c565b6149086020830188613bec565b614915604083018761460a565b614922606083018661460a565b61492f6080830185613f2c565b61493c60a0830184613bec565b979650505050505050565b6000806000606084860312156149605761495f613cc8565b5b600061496e868287016143f5565b935050602061497f868287016143f5565b9250506040614990868287016143f5565b9150509250925092565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006149f6602a83613c21565b9150614a018261499a565b604082019050919050565b60006020820190508181036000830152614a25816149e9565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614a88602683613c21565b9150614a9382614a2c565b604082019050919050565b60006020820190508181036000830152614ab781614a7b565b9050919050565b600081519050919050565b600081905092915050565b6000614adf82614abe565b614ae98185614ac9565b9350614af9818560208601613c32565b80840191505092915050565b6000614b118284614ad4565b915081905092915050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614b52601d83613c21565b9150614b5d82614b1c565b602082019050919050565b60006020820190508181036000830152614b8181614b45565b905091905056fea264697066735822122095579b81c1d2c1843f1d9bd73437d8e4e6240ec01376c5d6fc20b8be97654f1b64736f6c63430008110033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff
-----Decoded View---------------
Arg [0] : _dexRouter (address): 0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5e0829caced8ffdd4de3c43696c57f7d7a678ff
Deployed Bytecode Sourcemap
30205:15556:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42102:175;;;;;;;;;;;;;:::i;:::-;;32427:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33837:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43047:500;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34338:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33567:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34845:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45061:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45198:142;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22374:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33661:80;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43790:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32017:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30380:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34560:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42283:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42787:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32390:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34088:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30891:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33923:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44008:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45346:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33747:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44552:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32312:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31535:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41306:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31728:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34683:156;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44300:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40519:105;;;;;;;;;;;;;:::i;:::-;;22171:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41662:338;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31754:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31493:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31786:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36975:663;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34199:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40214:299;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43553:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30769:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45512:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22271:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44888:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36742:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22596:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44706:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42434:347;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42913:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31697:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22483:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42102:175;22114:24;22127:10;22114:12;:24::i;:::-;22106:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;42171:1:::1;42157:10;;:15;42149:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;42209:12;42196:10;:25;;;;42254:15;42232:19;:37;;;;42102:175::o:0;32427:50::-;;;;:::o;33837:80::-;33885:13;33909:5;;;;;;;;;;;;;;;;;33902:12;;33837:80;:::o;43047:500::-;22114:24;22127:10;22114:12;:24::i;:::-;22106:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;43230:13:::1;43215:12;:28;;;;43267:11;43254:10;:24;;;;43305:14;43289:13;:30;;;;43345:13;43330:12;:28;;;;43380:69;43435:13;43380:50;43415:14;43380:30;43398:11;43380:13;:17;;:30;;;;:::i;:::-;:34;;:50;;;;:::i;:::-;:54;;:69;;;;:::i;:::-;43369:8;:80;;;;43477:15;43460:14;:32;;;;43537:1;43522:14;;:16;;;;:::i;:::-;43511:8;;:27;43503:36;;;::::0;::::1;;43047:500:::0;;;;;:::o;34338:216::-;34413:4;34465:6;34430:11;:23;34442:10;34430:23;;;;;;;;;;;;;;;:32;34454:7;34430:32;;;;;;;;;;;;;;;:41;;;;34508:7;34487:37;;34496:10;34487:37;;;34517:6;34487:37;;;;;;:::i;:::-;;;;;;;;34542:4;34535:11;;34338:216;;;;:::o;33567:88::-;33622:7;33640:12;;33633:19;;33567:88;:::o;34845:363::-;34945:4;35000:12;;34965:11;:19;34977:6;34965:19;;;;;;;;;;;;;;;:31;34985:10;34965:31;;;;;;;;;;;;;;;;:47;34962:181;;35062:69;35098:6;35062:69;;;;;;;;;;;;;;;;;:11;:19;35074:6;35062:19;;;;;;;;;;;;;;;:31;35082:10;35062:31;;;;;;;;;;;;;;;;:35;;:69;;;;;:::i;:::-;35028:11;:19;35040:6;35028:19;;;;;;;;;;;;;;;:31;35048:10;35028:31;;;;;;;;;;;;;;;:103;;;;34962:181;35160:40;35174:6;35182:9;35193:6;35160:13;:40::i;:::-;35153:47;;34845:363;;;;;:::o;45061:131::-;22114:24;22127:10;22114:12;:24::i;:::-;22106:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;45146:6:::1;45140:3;:12;45132:21;;;::::0;::::1;;45181:3;45164:14;:20;;;;45061:131:::0;:::o;45198:142::-;45251:7;45278:54;45316:15;45326:4;;;;;;;;;;;45316:9;:15::i;:::-;45278:33;45295:15;45305:4;;;;;;;;;;;45295:9;:15::i;:::-;45278:12;;:16;;:33;;;;:::i;:::-;:37;;:54;;;;:::i;:::-;45271:61;;45198:142;:::o;22374:103::-;22429:4;22464:5;;;;;;;;;;;22453:16;;:7;:16;;;22446:23;;22374:103;;;:::o;33661:80::-;33713:5;30761:1;33722:16;;33661:80;:::o;43790:212::-;22114:24;22127:10;22114:12;:24::i;:::-;22106:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;43867:11:::1;43888:6;43881:24;;;43914:4;43881:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43867:53;;43933:61;43961:24;;;;;;;;;;;43987:6;43940;43933:27;;;;:61;;;;;:::i;:::-;43856:146;43790:212:::0;:::o;32017:38::-;;;;;;;;;;;;;:::o;30380:66::-;;;;;;;;;;;;;:::o;34560:117::-;34615:4;34639:30;34647:7;34656:12;;34639:7;:30::i;:::-;34632:37;;34560:117;;;:::o;42283:145::-;22114:24;22127:10;22114:12;:24::i;:::-;22106:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;42383:4:::1;42368:12;;:19;;;;:::i;:::-;42358:6;:29;;42350:38;;;::::0;::::1;;42414:6;42399:12;:21;;;;42283:145:::0;:::o;42787:120::-;22114:24;22127:10;22114:12;:24::i;:::-;22106:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;42893:6:::1;42871:11;:19;42883:6;42871:19;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;42787:120:::0;;:::o;32390:30::-;;;;;;;;;;;;;:::o;34088:105::-;34154:7;34172:9;:18;34182:7;34172:18;;;;;;;;;;;;;;;;34165:25;;34088:105;;;:::o;30891:51::-;;;;:::o;33923:78::-;33975:7;33993:5;;;;;;;;;;;33986:12;;33923:78;:::o;44008:286::-;22114:24;22127:10;22114:12;:24::i;:::-;22106:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;44106:20:::1;44136:14;44106:45;;44158:13;:21;;;44188:4;44195:7;44158:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44210:13;:26;;;44245:4;44252:24;;;;;;;;;;;44278:7;44210:76;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44099:195;44008:286:::0;;:::o;45346:160::-;45407:7;45434:64;45475:22;:20;:22::i;:::-;45434:36;45447:22;45467:1;45447:15;45457:4;;;;;;;;;;;45447:9;:15::i;:::-;:19;;:22;;;;:::i;:::-;45434:8;:12;;:36;;;;:::i;:::-;:40;;:64;;;;:::i;:::-;45427:71;;45346:160;;;:::o;33747:84::-;33797:13;33821:7;;;;;;;;;;;;;;;;;33814:14;;33747:84;:::o;44552:148::-;22114:24;22127:10;22114:12;:24::i;:::-;22106:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;44650:8:::1;44636:11;;:22;;;;;;;;;;;;;;;;;;44685:7;44669:13;:23;;;;44552:148:::0;;:::o;32312:33::-;;;;;;;;;;;;;:::o;31535:39::-;;;;;;;;;;;;;:::o;41306:350::-;22114:24;22127:10;22114:12;:24::i;:::-;22106:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41444:8:::1;41423:18;;:29;;;;;;;;;;;;;;;;;;41480:4;41463:14;:21;;;;41520:1;41495:22;:26;;;;41552:7;41532:17;:27;;;;41595:7;41570:22;:32;;;;41636:12;41613:20;:35;;;;41306:350:::0;;;;:::o;31728:19::-;;;;;;;;;;;;;:::o;34683:156::-;34763:4;34787:44;34801:10;34813:9;34824:6;34787:13;:44::i;:::-;34780:51;;34683:156;;;;:::o;44300:246::-;22114:24;22127:10;22114:12;:24::i;:::-;22106:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;44452:23:::1;44427:22;;:48;;;;;;;;;;;;;;;;;;44513:25;44486:24;;:52;;;;;;;;;;;;;;;;;;44300:246:::0;;:::o;40519:105::-;22114:24;22127:10;22114:12;:24::i;:::-;22106:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;40615:1:::1;40584:28;:32;;;;40519:105::o:0;22171:94::-;22026:19;22034:10;22026:7;:19::i;:::-;22018:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;22253:4:::1;22231:14:::0;:19:::1;22246:3;22231:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;22171:94:::0;:::o;41662:338::-;22114:24;22127:10;22114:12;:24::i;:::-;22106:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;41818:1:::1;41803:11;41791:9;:23;;;;:::i;:::-;:28;;:55;;;;;41835:11;41823:9;:23;41791:55;41783:64;;;::::0;::::1;;41887:9;41858:26;:38;;;;41938:11;41907:28;:42;;;;41986:6;41960:23;:32;;;;41662:338:::0;;;:::o;31754:25::-;;;;:::o;31493:37::-;;;;;;;;;;;;;:::o;31786:34::-;;;;:::o;36975:663::-;37024:7;37079:15;37070:6;37048:19;;:28;;;;:::i;:::-;:46;37044:561;;;37118:39;37142:14;;37118:19;37131:5;37118:8;;:12;;:19;;;;:::i;:::-;:23;;:39;;;;:::i;:::-;37111:46;;;;37044:561;37239:15;37179:57;37212:23;;37179:28;;:32;;:57;;;;:::i;:::-;:75;37175:430;;;37271:21;37295:78;37357:15;37295:57;37328:23;;37295:28;;:32;;:57;;;;:::i;:::-;:61;;:78;;;;:::i;:::-;37271:102;;37388:19;37410:88;37489:8;;37410:74;37455:28;;37410:40;37423:26;;37410:8;;:12;;:40;;;;:::i;:::-;:44;;:74;;;;:::i;:::-;:78;;:88;;;;:::i;:::-;37388:110;;37520:73;37533:59;37568:23;;37533:30;37549:13;37533:11;:15;;:30;;;;:::i;:::-;:34;;:59;;;;:::i;:::-;37520:8;;:12;;:73;;;;:::i;:::-;37513:80;;;;;;37175:430;37622:8;;37615:15;;36975:663;;:::o;34199:133::-;34283:7;34301:11;:19;34313:6;34301:19;;;;;;;;;;;;;;;:28;34321:7;34301:28;;;;;;;;;;;;;;;;34294:35;;34199:133;;;;:::o;40214:299::-;22114:24;22127:10;22114:12;:24::i;:::-;22106:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;40317:23:::1;40327:6;40335:4;;;;;;;;;;;40317:9;:23::i;:::-;40354:24;40351:155;;;40425:15;40394:28;:46;;;;40460:34;40470:23;;40460:34;;;;;;:::i;:::-;;;;;;;;40351:155;40214:299:::0;;:::o;43553:227::-;22114:24;22127:10;22114:12;:24::i;:::-;22106:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;43638:1:::1;43628:6;:11:::0;43625:147:::1;;43649:24;;;;;;;;;;;43641:42;;:65;43684:21;43641:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43625:147;;;43730:24;;;;;;;;;;;43722:42;;:50;43765:6;43722:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43625:147;43553:227:::0;:::o;30769:48::-;30800:17;30769:48;;;:::o;45512:136::-;45585:4;45634:6;45609:22;45622:8;45609:12;:22::i;:::-;:31;45602:38;;45512:136;;;;:::o;22271:97::-;22026:19;22034:10;22026:7;:19::i;:::-;22018:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;22355:5:::1;22333:14;:19;22348:3;22333:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;22271:97:::0;:::o;44888:167::-;22114:24;22127:10;22114:12;:24::i;:::-;22106:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;44990:11:::1;;;;;;;;;;;:27;;;45018:10;45030:16;44990:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;44888:167:::0;;:::o;36742:227::-;36798:7;36839:12;36834:1;36821:10;;:14;;;;:::i;:::-;:30;36818:67;;36861:21;36880:1;36861:14;;:18;;:21;;;;:::i;:::-;36854:28;;;;36818:67;36898:7;36895:41;;;36915:18;:16;:18::i;:::-;36908:25;;;;36895:41;36953:8;;36946:15;;36742:227;;;;:::o;22596:173::-;22026:19;22034:10;22026:7;:19::i;:::-;22018:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;22680:3:::1;22672:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;22716:4;22694:14:::0;:19:::1;22709:3;22694:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;22736:25;22757:3;22736:25;;;;;;:::i;:::-;;;;;;;;22596:173:::0;:::o;44706:176::-;22114:24;22127:10;22114:12;:24::i;:::-;22106:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;44815:7:::1;44797:15;:25;;;;44862:12;44833:26;:41;;;;44706:176:::0;;:::o;42434:347::-;22114:24;22127:10;22114:12;:24::i;:::-;22106:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;42549:4:::1;42531:23;;:6;:23;;;;:41;;;;;42568:4;;;;;;;;;;;42558:14;;:6;:14;;;;42531:41;42523:50;;;::::0;::::1;;42611:6;42584:16;:24;42601:6;42584:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;42631:6;42628:146;;;42653:11;;;;;;;;;;;:20;;;42674:6;42682:1;42653:31;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;42628:146;;;42715:11;;;;;;;;;;;:20;;;42736:6;42744:9;:17;42754:6;42744:17;;;;;;;;;;;;;;;;42715:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;42628:146;42434:347:::0;;:::o;42913:128::-;22114:24;22127:10;22114:12;:24::i;:::-;22106:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;43027:6:::1;43001:15;:23;43017:6;43001:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;42913:128:::0;;:::o;31697:24::-;;;;;;;;;;;;;:::o;22483:107::-;22539:4;22563:14;:19;22578:3;22563:19;;;;;;;;;;;;;;;;;;;;;;;;;22556:26;;22483:107;;;:::o;20012:98::-;20070:7;20101:1;20097;:5;;;;:::i;:::-;20090:12;;20012:98;;;;:::o;19700:::-;19758:7;19789:1;19785;:5;;;;:::i;:::-;19778:12;;19700:98;;;;:::o;20220:206::-;20306:7;20364:1;20359;:6;;20367:12;20351:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20406:1;20402;:5;20395:12;;20220:206;;;;;:::o;35214:945::-;35306:4;35326:6;;;;;;;;;;;35323:63;;;35342:41;35357:6;35365:9;35376:6;35342:14;:41::i;:::-;35335:48;;;;35323:63;35396:28;35409:6;35417;35396:12;:28::i;:::-;35438:16;:14;:16::i;:::-;35435:35;;;35457:10;:8;:10::i;:::-;35435:35;35483:19;:17;:19::i;:::-;35480:48;;;35505:20;:18;:20::i;:::-;35480:48;35558:53;35580:6;35558:53;;;;;;;;;;;;;;;;;:9;:17;35568:6;35558:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;35538:9;:17;35548:6;35538:17;;;;;;;;;;;;;;;:73;;;;35622:22;35647:21;35661:6;35647:13;:21::i;:::-;:67;;35708:6;35647:67;;;35671:34;35679:6;35687:9;35698:6;35671:7;:34::i;:::-;35647:67;35622:92;;35748:40;35773:14;35748:9;:20;35758:9;35748:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;35725:9;:20;35735:9;35725:20;;;;;;;;;;;;;;;:63;;;;35803:16;:24;35820:6;35803:24;;;;;;;;;;;;;;;;;;;;;;;;;35799:96;;35834:11;;;;;;;;;;;:20;;;35855:6;35863:9;:17;35873:6;35863:17;;;;;;;;;;;;;;;;35834:47;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35830:63;35799:96;35909:16;:27;35926:9;35909:27;;;;;;;;;;;;;;;;;;;;;;;;;35905:105;;35943:11;;;;;;;;;;;:20;;;35964:9;35975;:20;35985:9;35975:20;;;;;;;;;;;;;;;;35943:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35939:69;35905:105;36024:11;;;;;;;;;;;:19;;;36044:14;;36024:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36020:51;36103:9;36086:43;;36095:6;36086:43;;;36114:14;36086:43;;;;;;:::i;:::-;;;;;;;;36147:4;36140:11;;;35214:945;;;;;;:::o;19804:98::-;19862:7;19893:1;19889;:5;;;;:::i;:::-;19882:12;;19804:98;;;;:::o;14737:211::-;14854:86;14874:5;14904:23;;;14929:2;14933:5;14881:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14854:19;:86::i;:::-;14737:211;;;:::o;19908:98::-;19966:7;19997:1;19993;:5;;;;:::i;:::-;19986:12;;19908:98;;;;:::o;40939:361::-;32534:4;32525:6;;:13;;;;;;;;;;;;;;;;;;41015:21:::1;41053:1;41039:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41015:40;;41076:6;;;;;;;;;;;41066:4;41071:1;41066:7;;;;;;;;:::i;:::-;;;;;;;:16;;;;;;;;;::::0;::::1;41111:4;41093;41098:1;41093:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;41127:6;;;;;;;;;;;:57;;;41192:6;41214:1;41230:4;41249:2;41266:15;41127:165;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;41004:296;32552:5:::0;32543:6;;:14;;;;;;;;;;;;;;;;;;40939:361;;:::o;36165:279::-;36258:4;36295:53;36317:6;36295:53;;;;;;;;;;;;;;;;;:9;:17;36305:6;36295:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;36275:9;:17;36285:6;36275:17;;;;;;;;;;;;;;;:73;;;;36382:32;36407:6;36382:9;:20;36392:9;36382:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;36359:9;:20;36369:9;36359:20;;;;;;;;;;;;;;;:55;;;;36432:4;36425:11;;36165:279;;;;;:::o;36450:166::-;36547:12;;36537:6;:22;;:49;;;;36563:15;:23;36579:6;36563:23;;;;;;;;;;;;;;;;;;;;;;;;;36537:49;36529:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;36450:166;;:::o;38018:197::-;38067:4;38105;;;;;;;;;;;38091:18;;:10;:18;;;;:38;;;;;38123:6;;;;;;;;;;;38122:7;38091:38;:62;;;;;38142:11;;;;;;;;;;;38091:62;:116;;;;;38194:13;;38166:9;:24;38184:4;38166:24;;;;;;;;;;;;;;;;:41;;38091:116;38084:123;;38018:197;:::o;38221:1699::-;32534:4;32525:6;;:13;;;;;;;;;;;;;;;;;;38270:33:::1;38306:53;38315:15;;38332:26;;38306:8;:53::i;:::-;:72;;38366:12;;38306:72;;;38362:1;38306:72;38270:108;;38389:23;38415:65;38478:1;38415:58;38464:8;;38415:44;38433:25;38415:13;;:17;;:44;;;;:::i;:::-;:48;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;38389:91;;38491:20;38514:34;38532:15;38514:13;;:17;;:34;;;;:::i;:::-;38491:57;;38559:21;38597:1;38583:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38559:40;;38628:4;38610;38615:1;38610:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;38654:6;;;;;;;;;;;38644:4;38649:1;38644:7;;;;;;;;:::i;:::-;;;;;;;:16;;;;;;;;;::::0;::::1;38671:21;38695;38671:45;;38727:6;;;;;;;;;;;:57;;;38799:12;38826:1;38842:4;38869;38889:15;38727:188;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;38926:20;38949:40;38975:13;38949:21;:25;;:40;;;;:::i;:::-;38926:63;;39000:22;39025:46;39038:32;39068:1;39038:25;:29;;:32;;;;:::i;:::-;39025:8;;:12;;:46;;;;:::i;:::-;39000:71;;39082:29;39114:70;39182:1;39114:63;39162:14;39114:43;39131:25;39114:12;:16;;:43;;;;:::i;:::-;:47;;:63;;;;:::i;:::-;:67;;:70;;;;:::i;:::-;39082:102;;39195:30;39228:51;39264:14;39228:31;39245:13;;39228:12;:16;;:31;;;;:::i;:::-;:35;;:51;;;;:::i;:::-;39195:84;;39290:29;39322:50;39357:14;39322:30;39339:12;;39322;:16;;:30;;;;:::i;:::-;:34;;:50;;;;:::i;:::-;39290:82;;39387:11;;;;;;;;;;;:19;;;39414:22;39387:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;39383:68:::0;39469:24:::1;;;;;;;;;;;39461:42;;:65;39504:21;39461:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;39565:1;39547:15;:19;39544:369;;;39582:6;;;;;;;;;;;:22;;;39612:21;39661:4;39685:15;39719:1;39739::::0;39759:22:::1;;;;;;;;;;;39800:15;39582:248;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39850:51;39862:21;39885:15;39850:51;;;;;;;:::i;:::-;;;;;;;;39544:369;38259:1661;;;;;;;;;;32552:5:::0;32543:6;;:14;;;;;;;;;;;;;;;;;;38221:1699::o;39926:282::-;39978:4;40016;;;;;;;;;;;40002:18;;:10;:18;;;;:38;;;;;40034:6;;;;;;;;;;;40033:7;40002:38;:69;;;;;40053:18;;;;;;;;;;;40002:69;:143;;;;;40133:12;40107:22;;40084:20;;:45;;;;:::i;:::-;:61;;40002:143;:198;;;;;40183:17;;40158:21;:42;;40002:198;39995:205;;39926:282;:::o;40630:303::-;40680:34;40690:17;;40709:4;;;;;;;;;;;40680:9;:34::i;:::-;40748:12;40725:20;:35;;;;40796:45;40823:17;;40796:22;;:26;;:45;;;;:::i;:::-;40771:22;:70;;;;40880:14;;40855:22;;:39;40852:74;;;40918:5;40897:18;;:26;;;;;;;;;;;;;;;;;;40852:74;40630:303::o;36622:114::-;36684:4;36709:11;:19;36721:6;36709:19;;;;;;;;;;;;;;;;;;;;;;;;;36708:20;36701:27;;36622:114;;;:::o;37644:368::-;37729:7;37749:17;37769:61;37815:14;;37769:41;37780:29;37804:4;;;;;;;;;;;37792:16;;:8;:16;;;37780:11;:29::i;:::-;37769:6;:10;;:41;;;;:::i;:::-;:45;;:61;;;;:::i;:::-;37749:81;;37868:39;37897:9;37868;:24;37886:4;37868:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;37841:9;:24;37859:4;37841:24;;;;;;;;;;;;;;;:66;;;;37948:4;37923:42;;37932:6;37923:42;;;37955:9;37923:42;;;;;;:::i;:::-;;;;;;;;37983:21;37994:9;37983:6;:10;;:21;;;;:::i;:::-;37976:28;;;37644:368;;;;;:::o;17804:716::-;18228:23;18254:69;18282:4;18254:69;;;;;;;;;;;;;;;;;18262:5;18254:27;;;;:69;;;;;:::i;:::-;18228:95;;18358:1;18338:10;:17;:21;18334:179;;;18435:10;18424:30;;;;;;;;;;;;:::i;:::-;18416:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;18334:179;17874:646;17804:716;;:::o;3811:229::-;3948:12;3980:52;4002:6;4010:4;4016:1;4019:12;3980:21;:52::i;:::-;3973:59;;3811:229;;;;;:::o;4931:455::-;5101:12;5159:5;5134:21;:30;;5126:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;5219:12;5233:23;5260:6;:11;;5279:5;5286:4;5260:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5218:73;;;;5309:69;5336:6;5344:7;5353:10;5365:12;5309:26;:69::i;:::-;5302:76;;;;4931:455;;;;;;:::o;7504:644::-;7689:12;7718:7;7714:427;;;7767:1;7746:10;:17;:22;7742:290;;7964:18;7975:6;7964:10;:18::i;:::-;7956:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;7742:290;8053:10;8046:17;;;;7714:427;8096:33;8104:10;8116:12;8096:7;:33::i;:::-;7504:644;;;;;;;:::o;1055:326::-;1115:4;1372:1;1350:7;:19;;;:23;1343:30;;1055:326;;;:::o;8690:552::-;8871:1;8851:10;:17;:21;8847:388;;;9083:10;9077:17;9140:15;9127:10;9123:2;9119:19;9112:44;8847:388;9210:12;9203:20;;;;;;;;;;;:::i;:::-;;;;;;;;7:77:1;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:122;2184:24;2202:5;2184:24;:::i;:::-;2177:5;2174:35;2164:63;;2223:1;2220;2213:12;2164:63;2111:122;:::o;2239:139::-;2285:5;2323:6;2310:20;2301:29;;2339:33;2366:5;2339:33;:::i;:::-;2239:139;;;;:::o;2384:911::-;2479:6;2487;2495;2503;2511;2560:3;2548:9;2539:7;2535:23;2531:33;2528:120;;;2567:79;;:::i;:::-;2528:120;2687:1;2712:53;2757:7;2748:6;2737:9;2733:22;2712:53;:::i;:::-;2702:63;;2658:117;2814:2;2840:53;2885:7;2876:6;2865:9;2861:22;2840:53;:::i;:::-;2830:63;;2785:118;2942:2;2968:53;3013:7;3004:6;2993:9;2989:22;2968:53;:::i;:::-;2958:63;;2913:118;3070:2;3096:53;3141:7;3132:6;3121:9;3117:22;3096:53;:::i;:::-;3086:63;;3041:118;3198:3;3225:53;3270:7;3261:6;3250:9;3246:22;3225:53;:::i;:::-;3215:63;;3169:119;2384:911;;;;;;;;:::o;3301:126::-;3338:7;3378:42;3371:5;3367:54;3356:65;;3301:126;;;:::o;3433:96::-;3470:7;3499:24;3517:5;3499:24;:::i;:::-;3488:35;;3433:96;;;:::o;3535:122::-;3608:24;3626:5;3608:24;:::i;:::-;3601:5;3598:35;3588:63;;3647:1;3644;3637:12;3588:63;3535:122;:::o;3663:139::-;3709:5;3747:6;3734:20;3725:29;;3763:33;3790:5;3763:33;:::i;:::-;3663:139;;;;:::o;3808:474::-;3876:6;3884;3933:2;3921:9;3912:7;3908:23;3904:32;3901:119;;;3939:79;;:::i;:::-;3901:119;4059:1;4084:53;4129:7;4120:6;4109:9;4105:22;4084:53;:::i;:::-;4074:63;;4030:117;4186:2;4212:53;4257:7;4248:6;4237:9;4233:22;4212:53;:::i;:::-;4202:63;;4157:118;3808:474;;;;;:::o;4288:90::-;4322:7;4365:5;4358:13;4351:21;4340:32;;4288:90;;;:::o;4384:109::-;4465:21;4480:5;4465:21;:::i;:::-;4460:3;4453:34;4384:109;;:::o;4499:210::-;4586:4;4624:2;4613:9;4609:18;4601:26;;4637:65;4699:1;4688:9;4684:17;4675:6;4637:65;:::i;:::-;4499:210;;;;:::o;4715:619::-;4792:6;4800;4808;4857:2;4845:9;4836:7;4832:23;4828:32;4825:119;;;4863:79;;:::i;:::-;4825:119;4983:1;5008:53;5053:7;5044:6;5033:9;5029:22;5008:53;:::i;:::-;4998:63;;4954:117;5110:2;5136:53;5181:7;5172:6;5161:9;5157:22;5136:53;:::i;:::-;5126:63;;5081:118;5238:2;5264:53;5309:7;5300:6;5289:9;5285:22;5264:53;:::i;:::-;5254:63;;5209:118;4715:619;;;;;:::o;5340:329::-;5399:6;5448:2;5436:9;5427:7;5423:23;5419:32;5416:119;;;5454:79;;:::i;:::-;5416:119;5574:1;5599:53;5644:7;5635:6;5624:9;5620:22;5599:53;:::i;:::-;5589:63;;5545:117;5340:329;;;;:::o;5675:::-;5734:6;5783:2;5771:9;5762:7;5758:23;5754:32;5751:119;;;5789:79;;:::i;:::-;5751:119;5909:1;5934:53;5979:7;5970:6;5959:9;5955:22;5934:53;:::i;:::-;5924:63;;5880:117;5675:329;;;;:::o;6010:86::-;6045:7;6085:4;6078:5;6074:16;6063:27;;6010:86;;;:::o;6102:112::-;6185:22;6201:5;6185:22;:::i;:::-;6180:3;6173:35;6102:112;;:::o;6220:214::-;6309:4;6347:2;6336:9;6332:18;6324:26;;6360:67;6424:1;6413:9;6409:17;6400:6;6360:67;:::i;:::-;6220:214;;;;:::o;6440:118::-;6527:24;6545:5;6527:24;:::i;:::-;6522:3;6515:37;6440:118;;:::o;6564:222::-;6657:4;6695:2;6684:9;6680:18;6672:26;;6708:71;6776:1;6765:9;6761:17;6752:6;6708:71;:::i;:::-;6564:222;;;;:::o;6792:116::-;6862:21;6877:5;6862:21;:::i;:::-;6855:5;6852:32;6842:60;;6898:1;6895;6888:12;6842:60;6792:116;:::o;6914:133::-;6957:5;6995:6;6982:20;6973:29;;7011:30;7035:5;7011:30;:::i;:::-;6914:133;;;;:::o;7053:468::-;7118:6;7126;7175:2;7163:9;7154:7;7150:23;7146:32;7143:119;;;7181:79;;:::i;:::-;7143:119;7301:1;7326:53;7371:7;7362:6;7351:9;7347:22;7326:53;:::i;:::-;7316:63;;7272:117;7428:2;7454:50;7496:7;7487:6;7476:9;7472:22;7454:50;:::i;:::-;7444:60;;7399:115;7053:468;;;;;:::o;7527:::-;7592:6;7600;7649:2;7637:9;7628:7;7624:23;7620:32;7617:119;;;7655:79;;:::i;:::-;7617:119;7775:1;7800:50;7842:7;7833:6;7822:9;7818:22;7800:50;:::i;:::-;7790:60;;7746:114;7899:2;7925:53;7970:7;7961:6;7950:9;7946:22;7925:53;:::i;:::-;7915:63;;7870:118;7527:468;;;;;:::o;8001:759::-;8084:6;8092;8100;8108;8157:3;8145:9;8136:7;8132:23;8128:33;8125:120;;;8164:79;;:::i;:::-;8125:120;8284:1;8309:50;8351:7;8342:6;8331:9;8327:22;8309:50;:::i;:::-;8299:60;;8255:114;8408:2;8434:53;8479:7;8470:6;8459:9;8455:22;8434:53;:::i;:::-;8424:63;;8379:118;8536:2;8562:53;8607:7;8598:6;8587:9;8583:22;8562:53;:::i;:::-;8552:63;;8507:118;8664:2;8690:53;8735:7;8726:6;8715:9;8711:22;8690:53;:::i;:::-;8680:63;;8635:118;8001:759;;;;;;;:::o;8766:474::-;8834:6;8842;8891:2;8879:9;8870:7;8866:23;8862:32;8859:119;;;8897:79;;:::i;:::-;8859:119;9017:1;9042:53;9087:7;9078:6;9067:9;9063:22;9042:53;:::i;:::-;9032:63;;8988:117;9144:2;9170:53;9215:7;9206:6;9195:9;9191:22;9170:53;:::i;:::-;9160:63;;9115:118;8766:474;;;;;:::o;9246:619::-;9323:6;9331;9339;9388:2;9376:9;9367:7;9363:23;9359:32;9356:119;;;9394:79;;:::i;:::-;9356:119;9514:1;9539:53;9584:7;9575:6;9564:9;9560:22;9539:53;:::i;:::-;9529:63;;9485:117;9641:2;9667:53;9712:7;9703:6;9692:9;9688:22;9667:53;:::i;:::-;9657:63;;9612:118;9769:2;9795:53;9840:7;9831:6;9820:9;9816:22;9795:53;:::i;:::-;9785:63;;9740:118;9246:619;;;;;:::o;9871:468::-;9936:6;9944;9993:2;9981:9;9972:7;9968:23;9964:32;9961:119;;;9999:79;;:::i;:::-;9961:119;10119:1;10144:53;10189:7;10180:6;10169:9;10165:22;10144:53;:::i;:::-;10134:63;;10090:117;10246:2;10272:50;10314:7;10305:6;10294:9;10290:22;10272:50;:::i;:::-;10262:60;;10217:115;9871:468;;;;;:::o;10345:474::-;10413:6;10421;10470:2;10458:9;10449:7;10445:23;10441:32;10438:119;;;10476:79;;:::i;:::-;10438:119;10596:1;10621:53;10666:7;10657:6;10646:9;10642:22;10621:53;:::i;:::-;10611:63;;10567:117;10723:2;10749:53;10794:7;10785:6;10774:9;10770:22;10749:53;:::i;:::-;10739:63;;10694:118;10345:474;;;;;:::o;10825:323::-;10881:6;10930:2;10918:9;10909:7;10905:23;10901:32;10898:119;;;10936:79;;:::i;:::-;10898:119;11056:1;11081:50;11123:7;11114:6;11103:9;11099:22;11081:50;:::i;:::-;11071:60;;11027:114;10825:323;;;;:::o;11154:104::-;11199:7;11228:24;11246:5;11228:24;:::i;:::-;11217:35;;11154:104;;;:::o;11264:138::-;11345:32;11371:5;11345:32;:::i;:::-;11338:5;11335:43;11325:71;;11392:1;11389;11382:12;11325:71;11264:138;:::o;11408:155::-;11462:5;11500:6;11487:20;11478:29;;11516:41;11551:5;11516:41;:::i;:::-;11408:155;;;;:::o;11569:345::-;11636:6;11685:2;11673:9;11664:7;11660:23;11656:32;11653:119;;;11691:79;;:::i;:::-;11653:119;11811:1;11836:61;11889:7;11880:6;11869:9;11865:22;11836:61;:::i;:::-;11826:71;;11782:125;11569:345;;;;:::o;11920:60::-;11948:3;11969:5;11962:12;;11920:60;;;:::o;11986:142::-;12036:9;12069:53;12087:34;12096:24;12114:5;12096:24;:::i;:::-;12087:34;:::i;:::-;12069:53;:::i;:::-;12056:66;;11986:142;;;:::o;12134:126::-;12184:9;12217:37;12248:5;12217:37;:::i;:::-;12204:50;;12134:126;;;:::o;12266:145::-;12335:9;12368:37;12399:5;12368:37;:::i;:::-;12355:50;;12266:145;;;:::o;12417:169::-;12523:56;12573:5;12523:56;:::i;:::-;12518:3;12511:69;12417:169;;:::o;12592:260::-;12704:4;12742:2;12731:9;12727:18;12719:26;;12755:90;12842:1;12831:9;12827:17;12818:6;12755:90;:::i;:::-;12592:260;;;;:::o;12858:161::-;12998:13;12994:1;12986:6;12982:14;12975:37;12858:161;:::o;13025:366::-;13167:3;13188:67;13252:2;13247:3;13188:67;:::i;:::-;13181:74;;13264:93;13353:3;13264:93;:::i;:::-;13382:2;13377:3;13373:12;13366:19;;13025:366;;;:::o;13397:419::-;13563:4;13601:2;13590:9;13586:18;13578:26;;13650:9;13644:4;13640:20;13636:1;13625:9;13621:17;13614:47;13678:131;13804:4;13678:131;:::i;:::-;13670:139;;13397:419;;;:::o;13822:158::-;13962:10;13958:1;13950:6;13946:14;13939:34;13822:158;:::o;13986:365::-;14128:3;14149:66;14213:1;14208:3;14149:66;:::i;:::-;14142:73;;14224:93;14313:3;14224:93;:::i;:::-;14342:2;14337:3;14333:12;14326:19;;13986:365;;;:::o;14357:419::-;14523:4;14561:2;14550:9;14546:18;14538:26;;14610:9;14604:4;14600:20;14596:1;14585:9;14581:17;14574:47;14638:131;14764:4;14638:131;:::i;:::-;14630:139;;14357:419;;;:::o;14782:180::-;14830:77;14827:1;14820:88;14927:4;14924:1;14917:15;14951:4;14948:1;14941:15;14968:180;15016:77;15013:1;15006:88;15113:4;15110:1;15103:15;15137:4;15134:1;15127:15;15154:185;15194:1;15211:20;15229:1;15211:20;:::i;:::-;15206:25;;15245:20;15263:1;15245:20;:::i;:::-;15240:25;;15284:1;15274:35;;15289:18;;:::i;:::-;15274:35;15331:1;15328;15324:9;15319:14;;15154:185;;;;:::o;15345:143::-;15402:5;15433:6;15427:13;15418:22;;15449:33;15476:5;15449:33;:::i;:::-;15345:143;;;;:::o;15494:351::-;15564:6;15613:2;15601:9;15592:7;15588:23;15584:32;15581:119;;;15619:79;;:::i;:::-;15581:119;15739:1;15764:64;15820:7;15811:6;15800:9;15796:22;15764:64;:::i;:::-;15754:74;;15710:128;15494:351;;;;:::o;15851:332::-;15972:4;16010:2;15999:9;15995:18;15987:26;;16023:71;16091:1;16080:9;16076:17;16067:6;16023:71;:::i;:::-;16104:72;16172:2;16161:9;16157:18;16148:6;16104:72;:::i;:::-;15851:332;;;;;:::o;16189:137::-;16243:5;16274:6;16268:13;16259:22;;16290:30;16314:5;16290:30;:::i;:::-;16189:137;;;;:::o;16332:345::-;16399:6;16448:2;16436:9;16427:7;16423:23;16419:32;16416:119;;;16454:79;;:::i;:::-;16416:119;16574:1;16599:61;16652:7;16643:6;16632:9;16628:22;16599:61;:::i;:::-;16589:71;;16545:125;16332:345;;;;:::o;16683:442::-;16832:4;16870:2;16859:9;16855:18;16847:26;;16883:71;16951:1;16940:9;16936:17;16927:6;16883:71;:::i;:::-;16964:72;17032:2;17021:9;17017:18;17008:6;16964:72;:::i;:::-;17046;17114:2;17103:9;17099:18;17090:6;17046:72;:::i;:::-;16683:442;;;;;;:::o;17131:156::-;17271:8;17267:1;17259:6;17255:14;17248:32;17131:156;:::o;17293:365::-;17435:3;17456:66;17520:1;17515:3;17456:66;:::i;:::-;17449:73;;17531:93;17620:3;17531:93;:::i;:::-;17649:2;17644:3;17640:12;17633:19;;17293:365;;;:::o;17664:419::-;17830:4;17868:2;17857:9;17853:18;17845:26;;17917:9;17911:4;17907:20;17903:1;17892:9;17888:17;17881:47;17945:131;18071:4;17945:131;:::i;:::-;17937:139;;17664:419;;;:::o;18089:191::-;18129:3;18148:20;18166:1;18148:20;:::i;:::-;18143:25;;18182:20;18200:1;18182:20;:::i;:::-;18177:25;;18225:1;18222;18218:9;18211:16;;18246:3;18243:1;18240:10;18237:36;;;18253:18;;:::i;:::-;18237:36;18089:191;;;;:::o;18286:332::-;18407:4;18445:2;18434:9;18430:18;18422:26;;18458:71;18526:1;18515:9;18511:17;18502:6;18458:71;:::i;:::-;18539:72;18607:2;18596:9;18592:18;18583:6;18539:72;:::i;:::-;18286:332;;;;;:::o;18624:134::-;18682:9;18715:37;18746:5;18715:37;:::i;:::-;18702:50;;18624:134;;;:::o;18764:147::-;18859:45;18898:5;18859:45;:::i;:::-;18854:3;18847:58;18764:147;;:::o;18917:238::-;19018:4;19056:2;19045:9;19041:18;19033:26;;19069:79;19145:1;19134:9;19130:17;19121:6;19069:79;:::i;:::-;18917:238;;;;:::o;19161:85::-;19206:7;19235:5;19224:16;;19161:85;;;:::o;19252:158::-;19310:9;19343:61;19361:42;19370:32;19396:5;19370:32;:::i;:::-;19361:42;:::i;:::-;19343:61;:::i;:::-;19330:74;;19252:158;;;:::o;19416:147::-;19511:45;19550:5;19511:45;:::i;:::-;19506:3;19499:58;19416:147;;:::o;19569:348::-;19698:4;19736:2;19725:9;19721:18;19713:26;;19749:71;19817:1;19806:9;19802:17;19793:6;19749:71;:::i;:::-;19830:80;19906:2;19895:9;19891:18;19882:6;19830:80;:::i;:::-;19569:348;;;;;:::o;19923:194::-;19963:4;19983:20;20001:1;19983:20;:::i;:::-;19978:25;;20017:20;20035:1;20017:20;:::i;:::-;20012:25;;20061:1;20058;20054:9;20046:17;;20085:1;20079:4;20076:11;20073:37;;;20090:18;;:::i;:::-;20073:37;19923:194;;;;:::o;20123:410::-;20163:7;20186:20;20204:1;20186:20;:::i;:::-;20181:25;;20220:20;20238:1;20220:20;:::i;:::-;20215:25;;20275:1;20272;20268:9;20297:30;20315:11;20297:30;:::i;:::-;20286:41;;20476:1;20467:7;20463:15;20460:1;20457:22;20437:1;20430:9;20410:83;20387:139;;20506:18;;:::i;:::-;20387:139;20171:362;20123:410;;;;:::o;20539:180::-;20587:77;20584:1;20577:88;20684:4;20681:1;20674:15;20708:4;20705:1;20698:15;20725:180;20773:77;20770:1;20763:88;20870:4;20867:1;20860:15;20894:4;20891:1;20884:15;20911:114;20978:6;21012:5;21006:12;20996:22;;20911:114;;;:::o;21031:184::-;21130:11;21164:6;21159:3;21152:19;21204:4;21199:3;21195:14;21180:29;;21031:184;;;;:::o;21221:132::-;21288:4;21311:3;21303:11;;21341:4;21336:3;21332:14;21324:22;;21221:132;;;:::o;21359:108::-;21436:24;21454:5;21436:24;:::i;:::-;21431:3;21424:37;21359:108;;:::o;21473:179::-;21542:10;21563:46;21605:3;21597:6;21563:46;:::i;:::-;21641:4;21636:3;21632:14;21618:28;;21473:179;;;;:::o;21658:113::-;21728:4;21760;21755:3;21751:14;21743:22;;21658:113;;;:::o;21807:732::-;21926:3;21955:54;22003:5;21955:54;:::i;:::-;22025:86;22104:6;22099:3;22025:86;:::i;:::-;22018:93;;22135:56;22185:5;22135:56;:::i;:::-;22214:7;22245:1;22230:284;22255:6;22252:1;22249:13;22230:284;;;22331:6;22325:13;22358:63;22417:3;22402:13;22358:63;:::i;:::-;22351:70;;22444:60;22497:6;22444:60;:::i;:::-;22434:70;;22290:224;22277:1;22274;22270:9;22265:14;;22230:284;;;22234:14;22530:3;22523:10;;21931:608;;;21807:732;;;;:::o;22545:720::-;22780:4;22818:3;22807:9;22803:19;22795:27;;22832:79;22908:1;22897:9;22893:17;22884:6;22832:79;:::i;:::-;22958:9;22952:4;22948:20;22943:2;22932:9;22928:18;22921:48;22986:108;23089:4;23080:6;22986:108;:::i;:::-;22978:116;;23104:72;23172:2;23161:9;23157:18;23148:6;23104:72;:::i;:::-;23186;23254:2;23243:9;23239:18;23230:6;23186:72;:::i;:::-;22545:720;;;;;;;:::o;23271:167::-;23411:19;23407:1;23399:6;23395:14;23388:43;23271:167;:::o;23444:366::-;23586:3;23607:67;23671:2;23666:3;23607:67;:::i;:::-;23600:74;;23683:93;23772:3;23683:93;:::i;:::-;23801:2;23796:3;23792:12;23785:19;;23444:366;;;:::o;23816:419::-;23982:4;24020:2;24009:9;24005:18;23997:26;;24069:9;24063:4;24059:20;24055:1;24044:9;24040:17;24033:47;24097:131;24223:4;24097:131;:::i;:::-;24089:139;;23816:419;;;:::o;24241:831::-;24504:4;24542:3;24531:9;24527:19;24519:27;;24556:71;24624:1;24613:9;24609:17;24600:6;24556:71;:::i;:::-;24637:80;24713:2;24702:9;24698:18;24689:6;24637:80;:::i;:::-;24764:9;24758:4;24754:20;24749:2;24738:9;24734:18;24727:48;24792:108;24895:4;24886:6;24792:108;:::i;:::-;24784:116;;24910:72;24978:2;24967:9;24963:18;24954:6;24910:72;:::i;:::-;24992:73;25060:3;25049:9;25045:19;25036:6;24992:73;:::i;:::-;24241:831;;;;;;;;:::o;25078:807::-;25327:4;25365:3;25354:9;25350:19;25342:27;;25379:71;25447:1;25436:9;25432:17;25423:6;25379:71;:::i;:::-;25460:72;25528:2;25517:9;25513:18;25504:6;25460:72;:::i;:::-;25542:80;25618:2;25607:9;25603:18;25594:6;25542:80;:::i;:::-;25632;25708:2;25697:9;25693:18;25684:6;25632:80;:::i;:::-;25722:73;25790:3;25779:9;25775:19;25766:6;25722:73;:::i;:::-;25805;25873:3;25862:9;25858:19;25849:6;25805:73;:::i;:::-;25078:807;;;;;;;;;:::o;25891:663::-;25979:6;25987;25995;26044:2;26032:9;26023:7;26019:23;26015:32;26012:119;;;26050:79;;:::i;:::-;26012:119;26170:1;26195:64;26251:7;26242:6;26231:9;26227:22;26195:64;:::i;:::-;26185:74;;26141:128;26308:2;26334:64;26390:7;26381:6;26370:9;26366:22;26334:64;:::i;:::-;26324:74;;26279:129;26447:2;26473:64;26529:7;26520:6;26509:9;26505:22;26473:64;:::i;:::-;26463:74;;26418:129;25891:663;;;;;:::o;26560:229::-;26700:34;26696:1;26688:6;26684:14;26677:58;26769:12;26764:2;26756:6;26752:15;26745:37;26560:229;:::o;26795:366::-;26937:3;26958:67;27022:2;27017:3;26958:67;:::i;:::-;26951:74;;27034:93;27123:3;27034:93;:::i;:::-;27152:2;27147:3;27143:12;27136:19;;26795:366;;;:::o;27167:419::-;27333:4;27371:2;27360:9;27356:18;27348:26;;27420:9;27414:4;27410:20;27406:1;27395:9;27391:17;27384:47;27448:131;27574:4;27448:131;:::i;:::-;27440:139;;27167:419;;;:::o;27592:225::-;27732:34;27728:1;27720:6;27716:14;27709:58;27801:8;27796:2;27788:6;27784:15;27777:33;27592:225;:::o;27823:366::-;27965:3;27986:67;28050:2;28045:3;27986:67;:::i;:::-;27979:74;;28062:93;28151:3;28062:93;:::i;:::-;28180:2;28175:3;28171:12;28164:19;;27823:366;;;:::o;28195:419::-;28361:4;28399:2;28388:9;28384:18;28376:26;;28448:9;28442:4;28438:20;28434:1;28423:9;28419:17;28412:47;28476:131;28602:4;28476:131;:::i;:::-;28468:139;;28195:419;;;:::o;28620:98::-;28671:6;28705:5;28699:12;28689:22;;28620:98;;;:::o;28724:147::-;28825:11;28862:3;28847:18;;28724:147;;;;:::o;28877:386::-;28981:3;29009:38;29041:5;29009:38;:::i;:::-;29063:88;29144:6;29139:3;29063:88;:::i;:::-;29056:95;;29160:65;29218:6;29213:3;29206:4;29199:5;29195:16;29160:65;:::i;:::-;29250:6;29245:3;29241:16;29234:23;;28985:278;28877:386;;;;:::o;29269:271::-;29399:3;29421:93;29510:3;29501:6;29421:93;:::i;:::-;29414:100;;29531:3;29524:10;;29269:271;;;;:::o;29546:179::-;29686:31;29682:1;29674:6;29670:14;29663:55;29546:179;:::o;29731:366::-;29873:3;29894:67;29958:2;29953:3;29894:67;:::i;:::-;29887:74;;29970:93;30059:3;29970:93;:::i;:::-;30088:2;30083:3;30079:12;30072:19;;29731:366;;;:::o;30103:419::-;30269:4;30307:2;30296:9;30292:18;30284:26;;30356:9;30350:4;30346:20;30342:1;30331:9;30327:17;30320:47;30384:131;30510:4;30384:131;:::i;:::-;30376:139;;30103:419;;;:::o
Swarm Source
ipfs://1f63d909531ca1b78c27c2435f33aa6b6a42f0a0ecd4194c3d46f7fcc9aa932b
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.