More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 57 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Currenc... | 18590833 | 243 days ago | IN | 0 ETH | 0.00076303 | ||||
Buy Token | 18518534 | 253 days ago | IN | 2.6452188 ETH | 0.0042805 | ||||
Buy Token | 18518221 | 253 days ago | IN | 2.65555086 ETH | 0.00552008 | ||||
Buy Token | 18254694 | 290 days ago | IN | 0.03 ETH | 0.00191064 | ||||
Withdraw Currenc... | 17987261 | 327 days ago | IN | 0 ETH | 0.00051306 | ||||
Withdraw All | 17987257 | 327 days ago | IN | 0 ETH | 0.00119923 | ||||
Withdraw All | 17987254 | 327 days ago | IN | 0 ETH | 0.0008499 | ||||
Buy Token | 17986098 | 327 days ago | IN | 1.03 ETH | 0.00606231 | ||||
Buy Token | 17985750 | 327 days ago | IN | 0 ETH | 0.00699637 | ||||
Buy Token | 17985385 | 327 days ago | IN | 4.24731509 ETH | 0.00794096 | ||||
Buy Token | 17985104 | 327 days ago | IN | 0.085 ETH | 0.00474298 | ||||
Buy Token | 17985007 | 327 days ago | IN | 0 ETH | 0.00688472 | ||||
Buy Token | 17982942 | 328 days ago | IN | 0.1 ETH | 0.00258816 | ||||
Buy Token | 17976634 | 329 days ago | IN | 0.1 ETH | 0.00313042 | ||||
Buy Token | 17970542 | 329 days ago | IN | 0.25 ETH | 0.00561065 | ||||
Buy Token | 17969817 | 330 days ago | IN | 0.03002335 ETH | 0.00417332 | ||||
Buy Token | 17948399 | 333 days ago | IN | 0.125 ETH | 0.00200712 | ||||
Withdraw All | 17941924 | 334 days ago | IN | 0 ETH | 0.00153968 | ||||
Withdraw Currenc... | 17941919 | 334 days ago | IN | 0 ETH | 0.00092892 | ||||
Buy Token | 17900627 | 339 days ago | IN | 0.0270491 ETH | 0.00330321 | ||||
Buy Token | 17847190 | 347 days ago | IN | 0.135 ETH | 0.0036685 | ||||
Buy Token | 17842609 | 347 days ago | IN | 0.02707576 ETH | 0.00537491 | ||||
Buy Token | 17842547 | 347 days ago | IN | 0 ETH | 0.00605629 | ||||
Buy Token | 17829543 | 349 days ago | IN | 0.1 ETH | 0.00564294 | ||||
Withdraw Currenc... | 17812457 | 352 days ago | IN | 0 ETH | 0.00046782 |
Latest 10 internal transactions
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
18590833 | 243 days ago | 5.33076967 ETH | ||||
17987261 | 327 days ago | 5.96733844 ETH | ||||
17941919 | 334 days ago | 0.28912486 ETH | ||||
17812457 | 352 days ago | 2.66462087 ETH | ||||
17778035 | 356 days ago | 0.93760449 ETH | ||||
17651350 | 374 days ago | 2 ETH | ||||
17563621 | 387 days ago | 0.15745421 ETH | ||||
17271244 | 428 days ago | 0.00005486 ETH | ||||
17268492 | 428 days ago | Contract Creation | 0 ETH | |||
17268492 | 428 days ago | Contract Creation | 0 ETH |
Loading...
Loading
Contract Name:
PresaleLunchpad
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-05-15 */ // SPDX-License-Identifier: MIT // File: @chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol pragma solidity 0.8.19; interface AggregatorV3Interface { function decimals() external view returns (uint8); function description() external view returns (string memory); function version() external view returns (uint256); function getRoundData(uint80 _roundId) external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); } // File: PresaleLaunchpad.sol // File @openzeppelin/contracts/token/ERC20/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol) pragma solidity 0.8.19; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); function getAllTokenOwners() external view returns (address[] memory); function getAllTokenOwnerAmounts() external view returns (uint256[] memory); /** * @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); } // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity 0.8.19; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity 0.8.19; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File contracts/OwnerWithdrawable.sol pragma solidity 0.8.19; contract OwnerWithdrawable is Ownable { using SafeERC20 for IERC20; using SafeERC20 for IERC20Metadata; receive() external payable {} fallback() external payable {} function withdraw(address token, uint256 amt) public onlyOwner { IERC20(token).safeTransfer(msg.sender, amt); } function withdrawAll(address token) public onlyOwner { uint256 amt = IERC20(token).balanceOf(address(this)); withdraw(token, amt); } function withdrawCurrency(uint256 amt) public onlyOwner { payable(msg.sender).transfer(amt); } // function deposit(address token, uint256 amt) public onlyOwner { // uint256 allowance = IERC20(token).allowance(msg.sender, address(this)); // require(allowance >= amt, "Check the token allowance"); // IERC20(token).transferFrom(owner(), address(this), amt); // } } // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity 0.8.19; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 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://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(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) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(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) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason 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 { // 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 assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/token/ERC20/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol) pragma solidity 0.8.19; /** * @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)); } } /** * @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"); } } } // File @openzeppelin/contracts/token/ERC20/extensions/[email protected] // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) pragma solidity 0.8.19; /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } pragma solidity 0.8.19; contract CurrentValueManager { uint256 public tokenPriceInUSD = 10000000000000000; // Token price in micro-USD per token address[] whiteListedTokens; address internal ethereumPriceFeed= 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419; AggregatorV3Interface priceFeed; constructor() { priceFeed = AggregatorV3Interface(ethereumPriceFeed); whiteListedTokens.push(0xdAC17F958D2ee523a2206206994597C13D831ec7);//eth usdt whiteListedTokens.push(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);// eth USDC whiteListedTokens.push(0x6B175474E89094C44Da98b954EedeAC495271d0F);// eth dai // add whitelisted tokens here } function getConversionRate(address tokenAddress) public view returns (uint256){// returns the number of tokens bought with 1 usd if(tokenAddress== address(0)){ (, int256 price, , , ) = priceFeed.latestRoundData(); //uint256 decimals = uint256(priceFeed.decimals()); require(price > 0, "Error getting the price feed from AggregatorV3Interface"); uint256 tokensBoughtWith1Eth= (uint256(price)*10*(10**9))/ tokenPriceInUSD; uint256 weiPriceOfToken= 1 ether/tokensBoughtWith1Eth; return weiPriceOfToken; } bool isTokenWhitelisted=false; for(uint256 i=0; i< whiteListedTokens.length; ++i){ if(whiteListedTokens[i]== tokenAddress){ isTokenWhitelisted=true; break; } } require(isTokenWhitelisted, "Sent token is not whitelisted"); return tokenPriceInUSD; } function getNumberOfTokens(uint256 buyingTokenAmount, address buyingTokenAddress) public view returns (uint256) { uint256 price= getConversionRate(buyingTokenAddress);// price is the value of 1 token in buyingTokenAddress's value if(whiteListedTokens[0]==buyingTokenAddress || whiteListedTokens[1]== buyingTokenAddress){ buyingTokenAmount= buyingTokenAmount*(10**12); } return buyingTokenAmount*(10**18)/price; } function updatePriceFeed(address priceFeedAddress) external { ethereumPriceFeed= priceFeedAddress; } } contract ReferralManagement{ ReferralAddress[] referralsList; uint256 referalBonus=5; struct ReferralAddress{ address _address; address[] referred; uint256 refTokens; } function getReferralReward(uint256 _amount) public view returns (uint256){ return (referalBonus*_amount)/100; } function isReferredBy(address referred) public view returns(address) { for(uint256 i=0; i<referralsList.length; ++i){ for(uint j=0; j<referralsList[i].referred.length; j++){ if(referralsList[i].referred[j]==referred){ return referralsList[i]._address; } } } return address(0); } function manageReferral(address referral, address referred, uint256 _amount) public { for(uint256 i=0; i<referralsList.length; ++i){ if(referralsList[i]._address==referral){ for(uint256 j=0; j<referralsList[i].referred.length; j++){ if(referralsList[i].referred[j]==referred){ //referral entry already registred, just add the token bonus referralsList[i].refTokens+=_amount; return; } } //user altready refered other addresses but not this one, push it to the list; referralsList[i].referred.push(referred); referralsList[i].refTokens+=_amount; return; } } //user's first referral, push a new entry into list ReferralAddress memory newRef= ReferralAddress(referral, new address[](1), _amount); newRef.referred[0]= referred; referralsList.push(newRef); } function getReferralData() public view returns(ReferralAddress[] memory) { return referralsList; } constructor() {} } // File contracts/PreSale.sol pragma solidity 0.8.19; contract PresaleLunchpad is OwnerWithdrawable { using SafeERC20 for IERC20; using SafeERC20 for IERC20Metadata; // Token for which presale is being done address public saleToken; uint256 public saleTokenDec; //Total tokens to be sold in the presale uint256 public totalTokensforSale; CurrentValueManager currentValueManager= new CurrentValueManager(); uint256 referalBonus=5; uint256 firstBonusTreshold=100000; uint256 secondBonusThershold=500000; uint256 firstBonusPercentage=5; uint256 secondBonusPercentage=10; uint256 public totalTokensSold; address[] tokenBuyers; struct PresaleBuyer{ address _address; uint256 tokens; } bool isLotteryActive=false; ReferralManagement internal referralManager= new ReferralManagement(); constructor() { } function updatePriceFeed(address newPriceFeed) external onlyOwner { currentValueManager.updatePriceFeed( newPriceFeed); } function setLotteryStatus(bool status) external onlyOwner { isLotteryActive= status; } // Public Function to buy tokens. APPROVAL needs to be done first for non native tokens function buyToken(address _token, uint256 _amount, address referralWallet) external payable{ uint256 saleTokenAmount= currentValueManager.getNumberOfTokens(_amount, _token); require(_amount > 0, "Presale: Cannot buy with zero amount"); uint256 bonusTokens= getBonusTokens(saleTokenAmount); require((totalTokensSold + saleTokenAmount + bonusTokens) < totalTokensforSale, "PreSale: Total Token Sale Reached!"); if(_token !=address(0)){ IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount); } uint256 userTokenAmount= saleTokenAmount+ bonusTokens; uint256 lotteryReward=0; uint256 r= 0; if(isLotteryActive){ r= generateRandomNumber(); lotteryReward= getLotteryReward(userTokenAmount, r); emit LotteryPlayEvent(msg.sender, lotteryReward, r, block.timestamp); } IERC20(saleToken).safeTransfer(msg.sender, userTokenAmount+ lotteryReward); manageBuyer(msg.sender); uint256 referralCurrentBonus=0; address refRegistry= referralManager.isReferredBy(msg.sender); if(refRegistry!= address(0)){ referralWallet= refRegistry;// override the ref passed with the first entry from chain } if(referralWallet!=address(0) && msg.sender != referralWallet){ referralCurrentBonus=referralManager.getReferralReward(userTokenAmount); referralManager.manageReferral(referralWallet, msg.sender, referralCurrentBonus); IERC20(saleToken).safeTransfer(referralWallet, referralCurrentBonus); } totalTokensSold += saleTokenAmount + bonusTokens + referralCurrentBonus; emit TokenBuyEvent(msg.sender, userTokenAmount, referralWallet, referralCurrentBonus, block.timestamp); } function getLotteryReward(uint256 _amount, uint256 r) public pure returns (uint256){ uint256 lotteryReward=0; if(r==100){ lotteryReward= _amount/100*25; } else if(r>=97){ lotteryReward= _amount/100*15; } else if(r>=92){ lotteryReward= _amount/100*10; } else if(r>=77){ lotteryReward= 1000*(10**18); } else if(r>=52){ lotteryReward= 100*(10**18); } else{ lotteryReward=10*(10**18); } return lotteryReward; } function manageBuyer(address buyer) internal{ uint256 totalBuyers= tokenBuyers.length; for(uint256 i=0; i<totalBuyers; ++i){ if(tokenBuyers[i]== buyer){ return; } } tokenBuyers.push(buyer); } function getReferralReward(uint256 _amount) public pure returns (uint256){ return (5*_amount)/100; } function getBonusTokens(uint256 _amount) public view returns (uint256){ // Gas optimization: return the value as fast as possible if(_amount>=secondBonusThershold*(10**saleTokenDec)){ return (secondBonusPercentage*_amount)/100; } else if(_amount>=firstBonusTreshold*(10**saleTokenDec)) { return (firstBonusPercentage*_amount)/100; } else{ return 0; } } function initPresalePhase(address tokenAddress) public{ saleToken = tokenAddress; saleTokenDec = IERC20Metadata(saleToken).decimals(); totalTokensforSale = 1300000000*(10**saleTokenDec); IERC20(saleToken).safeTransferFrom(msg.sender, address(this), totalTokensforSale); } function getNumberOfTokensFromPriceFeed(uint256 value, address tokenAddress) public view returns (uint256) { return currentValueManager.getNumberOfTokens(value, tokenAddress); } function getConversionRate(address tokenAddress) public view returns(uint256){ return currentValueManager.getConversionRate(tokenAddress); // when deployed on testnet use this } function getReferralData() public view returns(ReferralManagement.ReferralAddress[] memory) { return referralManager.getReferralData(); } function getBuyersData() public view returns(PresaleBuyer[] memory) { PresaleBuyer[] memory result = new PresaleBuyer[](tokenBuyers.length); for(uint256 i=0; i<tokenBuyers.length; ++i){ result[i] = PresaleBuyer(tokenBuyers[i], IERC20(saleToken).balanceOf(tokenBuyers[i])); } return result; } function generateRandomNumber() public view returns (uint256) { uint256 random = uint256(keccak256(abi.encodePacked(block.timestamp))); return random % 101; } event TokenBuyEvent(address indexed spender, uint256 value, address indexed referral, uint256 referralBonus, uint256 timeStamp); event LotteryPlayEvent(address indexed spender, uint256 winningAmount, uint256 winningNumber, uint256 timeStamp); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"winningAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"winningNumber","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timeStamp","type":"uint256"}],"name":"LotteryPlayEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":true,"internalType":"address","name":"referral","type":"address"},{"indexed":false,"internalType":"uint256","name":"referralBonus","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timeStamp","type":"uint256"}],"name":"TokenBuyEvent","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"referralWallet","type":"address"}],"name":"buyToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"generateRandomNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"getBonusTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBuyersData","outputs":[{"components":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"internalType":"struct PresaleLunchpad.PresaleBuyer[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getConversionRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"r","type":"uint256"}],"name":"getLotteryReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"getNumberOfTokensFromPriceFeed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReferralData","outputs":[{"components":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"address[]","name":"referred","type":"address[]"},{"internalType":"uint256","name":"refTokens","type":"uint256"}],"internalType":"struct ReferralManagement.ReferralAddress[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"getReferralReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"initPresalePhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleTokenDec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setLotteryStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalTokensSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTokensforSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPriceFeed","type":"address"}],"name":"updatePriceFeed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdrawCurrency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052604051620000129062000213565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b50600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060058055620186a06006556207a1206007556005600855600a6009556000600c60006101000a81548160ff021916908315150217905550604051620000b59062000221565b604051809103906000f080158015620000d2573d6000803e3d6000fd5b50600c60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200012057600080fd5b5062000141620001356200014760201b60201c565b6200014f60201b60201c565b6200022f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b610bbc80620032df83390190565b610df28062003e9b83390190565b6130a0806200023f6000396000f3fe6080604052600436106101395760003560e01c806395877f78116100ab578063d31200601161006f578063d31200601461040f578063e985e3671461044c578063f2fde38b14610477578063f3fef3a3146104a0578063f8b78ee2146104c9578063fa09e630146104f457610140565b806395877f7814610318578063a341c7f214610341578063ace1741c1461036a578063bc5f95b814610395578063c2930998146103d257610140565b8063692bf4a8116100fd578063692bf4a8146102275780636bcedf9c14610243578063715018a61461026e578063773a1154146102855780637976eaa2146102b05780638da5cb5b146102ed57610140565b80633c00a36c146101425780633c2f4b2f1461016b578063409fdcd7146101965780634b0cbcc6146101bf57806363b20117146101fc57610140565b3661014057005b005b34801561014e57600080fd5b5061016960048036038101906101649190611dd4565b61051d565b005b34801561017757600080fd5b506101806105e3565b60405161018d9190611f2f565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b89190611f7d565b6107cb565b005b3480156101cb57600080fd5b506101e660048036038101906101e19190611dd4565b61091e565b6040516101f39190611fb9565b60405180910390f35b34801561020857600080fd5b50610211610940565b60405161021e9190611fb9565b60405180910390f35b610241600480360381019061023c9190611fd4565b610946565b005b34801561024f57600080fd5b50610258610f50565b6040516102659190611fb9565b60405180910390f35b34801561027a57600080fd5b50610283610f56565b005b34801561029157600080fd5b5061029a610fde565b6040516102a79190611fb9565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d29190611dd4565b611020565b6040516102e49190611fb9565b60405180910390f35b3480156102f957600080fd5b506103026110b2565b60405161030f9190612036565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190611f7d565b6110db565b005b34801561034d57600080fd5b5061036860048036038101906103639190612089565b6111e7565b005b34801561037657600080fd5b5061037f611280565b60405161038c9190611fb9565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b791906120b6565b611286565b6040516103c99190611fb9565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f491906120f6565b611351565b6040516104069190611fb9565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190611f7d565b6113f9565b6040516104439190611fb9565b60405180910390f35b34801561045857600080fd5b5061046161149e565b60405161046e9190612036565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190611f7d565b6114c4565b005b3480156104ac57600080fd5b506104c760048036038101906104c29190612136565b6115bb565b005b3480156104d557600080fd5b506104de611666565b6040516104eb9190612337565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190611f7d565b611703565b005b61052561180b565b73ffffffffffffffffffffffffffffffffffffffff166105436110b2565b73ffffffffffffffffffffffffffffffffffffffff1614610599576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610590906123b6565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156105df573d6000803e3d6000fd5b5050565b60606000600b8054905067ffffffffffffffff811115610606576106056123d6565b5b60405190808252806020026020018201604052801561063f57816020015b61062c611d5a565b8152602001906001900390816106245790505b50905060005b600b805490508110156107c3576040518060400160405280600b838154811061067157610670612405565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600b858154811061070957610708612405565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016107509190612036565b602060405180830381865afa15801561076d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107919190612449565b8152508282815181106107a7576107a6612405565b5b6020026020010181905250806107bc906124a5565b9050610645565b508091505090565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089d9190612526565b60ff16600281905550600254600a6108b59190612686565b634d7c6d006108c491906126d1565b60038190555061091b3330600354600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611813909392919063ffffffff16565b50565b6000606482600561092f91906126d1565b6109399190612742565b9050919050565b600a5481565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395fd46f084866040518363ffffffff1660e01b81526004016109a5929190612773565b602060405180830381865afa1580156109c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e69190612449565b905060008311610a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a229061280e565b60405180910390fd5b6000610a3682611020565b90506003548183600a54610a4a919061282e565b610a54919061282e565b10610a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8b906128d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610af657610af53330868873ffffffffffffffffffffffffffffffffffffffff16611813909392919063ffffffff16565b5b60008183610b04919061282e565b9050600080600c60009054906101000a900460ff1615610b8757610b26610fde565b9050610b328382611286565b91503373ffffffffffffffffffffffffffffffffffffffff167fba24a3a3cf60135223c348d50d009e34e8ba029ec45e2bb644684a0ff0406978838342604051610b7e939291906128f4565b60405180910390a25b610bdf338385610b97919061282e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661189c9092919063ffffffff16565b610be833611922565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663439e076d336040518263ffffffff1660e01b8152600401610c469190612036565b602060405180830381865afa158015610c63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c879190612940565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cc1578097505b600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015610d2a57508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610eac57600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634b0cbcc6866040518263ffffffff1660e01b8152600401610d8a9190611fb9565b602060405180830381865afa158015610da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcb9190612449565b9150600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c21ddbb8933856040518463ffffffff1660e01b8152600401610e2c9392919061296d565b600060405180830381600087803b158015610e4657600080fd5b505af1158015610e5a573d6000803e3d6000fd5b50505050610eab8883600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661189c9092919063ffffffff16565b5b818688610eb9919061282e565b610ec3919061282e565b600a6000828254610ed4919061282e565b925050819055508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f48e3899b23a73e79218ca38cf3b134875a41f62ed95130e3c7489d0512336491878542604051610f3c939291906128f4565b60405180910390a350505050505050505050565b60035481565b610f5e61180b565b73ffffffffffffffffffffffffffffffffffffffff16610f7c6110b2565b73ffffffffffffffffffffffffffffffffffffffff1614610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc9906123b6565b60405180910390fd5b610fdc6000611a29565b565b60008042604051602001610ff291906129c5565b6040516020818303038152906040528051906020012060001c905060658161101a91906129e0565b91505090565b6000600254600a6110319190612686565b60075461103e91906126d1565b82106110655760648260095461105491906126d1565b61105e9190612742565b90506110ad565b600254600a6110749190612686565b60065461108191906126d1565b82106110a85760648260085461109791906126d1565b6110a19190612742565b90506110ad565b600090505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110e361180b565b73ffffffffffffffffffffffffffffffffffffffff166111016110b2565b73ffffffffffffffffffffffffffffffffffffffff1614611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e906123b6565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395877f78826040518263ffffffff1660e01b81526004016111b29190612036565b600060405180830381600087803b1580156111cc57600080fd5b505af11580156111e0573d6000803e3d6000fd5b5050505050565b6111ef61180b565b73ffffffffffffffffffffffffffffffffffffffff1661120d6110b2565b73ffffffffffffffffffffffffffffffffffffffff1614611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a906123b6565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b60025481565b60008060009050606483036112b55760196064856112a49190612742565b6112ae91906126d1565b9050611347565b606183106112dd57600f6064856112cc9190612742565b6112d691906126d1565b9050611346565b605c831061130557600a6064856112f49190612742565b6112fe91906126d1565b9050611345565b604d831061131e57683635c9adc5dea000009050611344565b603483106113375768056bc75e2d631000009050611343565b678ac7230489e8000090505b5b5b5b5b8091505092915050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395fd46f084846040518363ffffffff1660e01b81526004016113b0929190612773565b602060405180830381865afa1580156113cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f19190612449565b905092915050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d3120060836040518263ffffffff1660e01b81526004016114569190612036565b602060405180830381865afa158015611473573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114979190612449565b9050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114cc61180b565b73ffffffffffffffffffffffffffffffffffffffff166114ea6110b2565b73ffffffffffffffffffffffffffffffffffffffff1614611540576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611537906123b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a690612a83565b60405180910390fd5b6115b881611a29565b50565b6115c361180b565b73ffffffffffffffffffffffffffffffffffffffff166115e16110b2565b73ffffffffffffffffffffffffffffffffffffffff1614611637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162e906123b6565b60405180910390fd5b61166233828473ffffffffffffffffffffffffffffffffffffffff1661189c9092919063ffffffff16565b5050565b6060600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8b78ee26040518163ffffffff1660e01b8152600401600060405180830381865afa1580156116d5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906116fe9190612d38565b905090565b61170b61180b565b73ffffffffffffffffffffffffffffffffffffffff166117296110b2565b73ffffffffffffffffffffffffffffffffffffffff161461177f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611776906123b6565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117ba9190612036565b602060405180830381865afa1580156117d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fb9190612449565b905061180782826115bb565b5050565b600033905090565b611896846323b872dd60e01b8585856040516024016118349392919061296d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611aed565b50505050565b61191d8363a9059cbb60e01b84846040516024016118bb929190612d81565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611aed565b505050565b6000600b80549050905060005b818110156119c0578273ffffffffffffffffffffffffffffffffffffffff16600b828154811061196257611961612405565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036119af575050611a26565b806119b9906124a5565b905061192f565b50600b829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611b4f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611bb49092919063ffffffff16565b9050600081511115611baf5780806020019051810190611b6f9190612dbf565b611bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba590612e5e565b60405180910390fd5b5b505050565b6060611bc38484600085611bcc565b90509392505050565b606082471015611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0890612ef0565b60405180910390fd5b611c1a85611ce0565b611c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5090612f5c565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611c829190612fed565b60006040518083038185875af1925050503d8060008114611cbf576040519150601f19603f3d011682016040523d82523d6000602084013e611cc4565b606091505b5091509150611cd4828286611cf3565b92505050949350505050565b600080823b905060008111915050919050565b60608315611d0357829050611d53565b600083511115611d165782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a9190613048565b60405180910390fd5b9392505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b611db181611d9e565b8114611dbc57600080fd5b50565b600081359050611dce81611da8565b92915050565b600060208284031215611dea57611de9611d94565b5b6000611df884828501611dbf565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e5882611e2d565b9050919050565b611e6881611e4d565b82525050565b611e7781611d9e565b82525050565b604082016000820151611e936000850182611e5f565b506020820151611ea66020850182611e6e565b50505050565b6000611eb88383611e7d565b60408301905092915050565b6000602082019050919050565b6000611edc82611e01565b611ee68185611e0c565b9350611ef183611e1d565b8060005b83811015611f22578151611f098882611eac565b9750611f1483611ec4565b925050600181019050611ef5565b5085935050505092915050565b60006020820190508181036000830152611f498184611ed1565b905092915050565b611f5a81611e4d565b8114611f6557600080fd5b50565b600081359050611f7781611f51565b92915050565b600060208284031215611f9357611f92611d94565b5b6000611fa184828501611f68565b91505092915050565b611fb381611d9e565b82525050565b6000602082019050611fce6000830184611faa565b92915050565b600080600060608486031215611fed57611fec611d94565b5b6000611ffb86828701611f68565b935050602061200c86828701611dbf565b925050604061201d86828701611f68565b9150509250925092565b61203081611e4d565b82525050565b600060208201905061204b6000830184612027565b92915050565b60008115159050919050565b61206681612051565b811461207157600080fd5b50565b6000813590506120838161205d565b92915050565b60006020828403121561209f5761209e611d94565b5b60006120ad84828501612074565b91505092915050565b600080604083850312156120cd576120cc611d94565b5b60006120db85828601611dbf565b92505060206120ec85828601611dbf565b9150509250929050565b6000806040838503121561210d5761210c611d94565b5b600061211b85828601611dbf565b925050602061212c85828601611f68565b9150509250929050565b6000806040838503121561214d5761214c611d94565b5b600061215b85828601611f68565b925050602061216c85828601611dbf565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006121da8383611e5f565b60208301905092915050565b6000602082019050919050565b60006121fe826121a2565b61220881856121ad565b9350612213836121be565b8060005b8381101561224457815161222b88826121ce565b9750612236836121e6565b925050600181019050612217565b5085935050505092915050565b60006060830160008301516122696000860182611e5f565b506020830151848203602086015261228182826121f3565b91505060408301516122966040860182611e6e565b508091505092915050565b60006122ad8383612251565b905092915050565b6000602082019050919050565b60006122cd82612176565b6122d78185612181565b9350836020820285016122e985612192565b8060005b85811015612325578484038952815161230685826122a1565b9450612311836122b5565b925060208a019950506001810190506122ed565b50829750879550505050505092915050565b6000602082019050818103600083015261235181846122c2565b905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006123a0602083612359565b91506123ab8261236a565b602082019050919050565b600060208201905081810360008301526123cf81612393565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061244381611da8565b92915050565b60006020828403121561245f5761245e611d94565b5b600061246d84828501612434565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006124b082611d9e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036124e2576124e1612476565b5b600182019050919050565b600060ff82169050919050565b612503816124ed565b811461250e57600080fd5b50565b600081519050612520816124fa565b92915050565b60006020828403121561253c5761253b611d94565b5b600061254a84828501612511565b91505092915050565b60008160011c9050919050565b6000808291508390505b60018511156125aa5780860481111561258657612585612476565b5b60018516156125955780820291505b80810290506125a385612553565b945061256a565b94509492505050565b6000826125c3576001905061267f565b816125d1576000905061267f565b81600181146125e757600281146125f157612620565b600191505061267f565b60ff84111561260357612602612476565b5b8360020a91508482111561261a57612619612476565b5b5061267f565b5060208310610133831016604e8410600b84101617156126555782820a9050838111156126505761264f612476565b5b61267f565b6126628484846001612560565b9250905081840481111561267957612678612476565b5b81810290505b9392505050565b600061269182611d9e565b915061269c83611d9e565b92506126c97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846125b3565b905092915050565b60006126dc82611d9e565b91506126e783611d9e565b92508282026126f581611d9e565b9150828204841483151761270c5761270b612476565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061274d82611d9e565b915061275883611d9e565b92508261276857612767612713565b5b828204905092915050565b60006040820190506127886000830185611faa565b6127956020830184612027565b9392505050565b7f50726573616c653a2043616e6e6f74206275792077697468207a65726f20616d60008201527f6f756e7400000000000000000000000000000000000000000000000000000000602082015250565b60006127f8602483612359565b91506128038261279c565b604082019050919050565b60006020820190508181036000830152612827816127eb565b9050919050565b600061283982611d9e565b915061284483611d9e565b925082820190508082111561285c5761285b612476565b5b92915050565b7f50726553616c653a20546f74616c20546f6b656e2053616c652052656163686560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b60006128be602283612359565b91506128c982612862565b604082019050919050565b600060208201905081810360008301526128ed816128b1565b9050919050565b60006060820190506129096000830186611faa565b6129166020830185611faa565b6129236040830184611faa565b949350505050565b60008151905061293a81611f51565b92915050565b60006020828403121561295657612955611d94565b5b60006129648482850161292b565b91505092915050565b60006060820190506129826000830186612027565b61298f6020830185612027565b61299c6040830184611faa565b949350505050565b6000819050919050565b6129bf6129ba82611d9e565b6129a4565b82525050565b60006129d182846129ae565b60208201915081905092915050565b60006129eb82611d9e565b91506129f683611d9e565b925082612a0657612a05612713565b5b828206905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612a6d602683612359565b9150612a7882612a11565b604082019050919050565b60006020820190508181036000830152612a9c81612a60565b9050919050565b600080fd5b6000601f19601f8301169050919050565b612ac282612aa8565b810181811067ffffffffffffffff82111715612ae157612ae06123d6565b5b80604052505050565b6000612af4611d8a565b9050612b008282612ab9565b919050565b600067ffffffffffffffff821115612b2057612b1f6123d6565b5b602082029050602081019050919050565b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff821115612b5b57612b5a6123d6565b5b602082029050602081019050919050565b6000612b7f612b7a84612b40565b612aea565b90508083825260208201905060208402830185811115612ba257612ba1612b31565b5b835b81811015612bcb5780612bb7888261292b565b845260208401935050602081019050612ba4565b5050509392505050565b600082601f830112612bea57612be9612aa3565b5b8151612bfa848260208601612b6c565b91505092915050565b600060608284031215612c1957612c18612b36565b5b612c236060612aea565b90506000612c338482850161292b565b600083015250602082015167ffffffffffffffff811115612c5757612c56612b3b565b5b612c6384828501612bd5565b6020830152506040612c7784828501612434565b60408301525092915050565b6000612c96612c9184612b05565b612aea565b90508083825260208201905060208402830185811115612cb957612cb8612b31565b5b835b81811015612d0057805167ffffffffffffffff811115612cde57612cdd612aa3565b5b808601612ceb8982612c03565b85526020850194505050602081019050612cbb565b5050509392505050565b600082601f830112612d1f57612d1e612aa3565b5b8151612d2f848260208601612c83565b91505092915050565b600060208284031215612d4e57612d4d611d94565b5b600082015167ffffffffffffffff811115612d6c57612d6b611d99565b5b612d7884828501612d0a565b91505092915050565b6000604082019050612d966000830185612027565b612da36020830184611faa565b9392505050565b600081519050612db98161205d565b92915050565b600060208284031215612dd557612dd4611d94565b5b6000612de384828501612daa565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612e48602a83612359565b9150612e5382612dec565b604082019050919050565b60006020820190508181036000830152612e7781612e3b565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000612eda602683612359565b9150612ee582612e7e565b604082019050919050565b60006020820190508181036000830152612f0981612ecd565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612f46601d83612359565b9150612f5182612f10565b602082019050919050565b60006020820190508181036000830152612f7581612f39565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015612fb0578082015181840152602081019050612f95565b60008484015250505050565b6000612fc782612f7c565b612fd18185612f87565b9350612fe1818560208601612f92565b80840191505092915050565b6000612ff98284612fbc565b915081905092915050565b600081519050919050565b600061301a82613004565b6130248185612359565b9350613034818560208601612f92565b61303d81612aa8565b840191505092915050565b60006020820190508181036000830152613062818461300f565b90509291505056fea2646970667358221220620f317de1685de43bfd7b54cebf714122b9d4dea7c83035ad375dd67da813bf64736f6c634300081300336080604052662386f26fc10000600055735f4ec3df9cbd43714fe2740f5e3616155c5b8419600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561007057600080fd5b50600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600173dac17f958d2ee523a2206206994597c13d831ec79080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600173a0b86991c6218b36c1d19d4a2e9eb0ce3606eb489080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001736b175474e89094c44da98b954eedeac495271d0f9080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610974806102486000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806395877f781461005157806395fd46f01461006d578063d31200601461009d578063f076e0f1146100cd575b600080fd5b61006b60048036038101906100669190610512565b6100eb565b005b61008760048036038101906100829190610575565b61012f565b60405161009491906105c4565b60405180910390f35b6100b760048036038101906100b29190610512565b610260565b6040516100c491906105c4565b60405180910390f35b6100d56104a9565b6040516100e291906105c4565b60405180910390f35b80600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008061013b83610260565b90508273ffffffffffffffffffffffffffffffffffffffff166001600081548110610169576101686105df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148061021f57508273ffffffffffffffffffffffffffffffffffffffff16600180815481106101dc576101db6105df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b156102385764e8d4a5100084610235919061063d565b93505b80670de0b6b3a76400008561024d919061063d565b61025791906106ae565b91505092915050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036103c0576000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610304573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610328919061076c565b50505091505060008113610371576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103689061086a565b60405180910390fd5b60008054633b9aca00600a84610387919061063d565b610391919061063d565b61039b91906106ae565b9050600081670de0b6b3a76400006103b391906106ae565b90508093505050506104a4565b6000805b60018054905081101561045c578373ffffffffffffffffffffffffffffffffffffffff16600182815481106103fc576103fb6105df565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361044b576001915061045c565b806104559061088a565b90506103c4565b508061049d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104949061091e565b60405180910390fd5b6000549150505b919050565b60005481565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006104df826104b4565b9050919050565b6104ef816104d4565b81146104fa57600080fd5b50565b60008135905061050c816104e6565b92915050565b600060208284031215610528576105276104af565b5b6000610536848285016104fd565b91505092915050565b6000819050919050565b6105528161053f565b811461055d57600080fd5b50565b60008135905061056f81610549565b92915050565b6000806040838503121561058c5761058b6104af565b5b600061059a85828601610560565b92505060206105ab858286016104fd565b9150509250929050565b6105be8161053f565b82525050565b60006020820190506105d960008301846105b5565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006106488261053f565b91506106538361053f565b92508282026106618161053f565b915082820484148315176106785761067761060e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006106b98261053f565b91506106c48361053f565b9250826106d4576106d361067f565b5b828204905092915050565b600069ffffffffffffffffffff82169050919050565b6106fe816106df565b811461070957600080fd5b50565b60008151905061071b816106f5565b92915050565b6000819050919050565b61073481610721565b811461073f57600080fd5b50565b6000815190506107518161072b565b92915050565b60008151905061076681610549565b92915050565b600080600080600060a08688031215610788576107876104af565b5b60006107968882890161070c565b95505060206107a788828901610742565b94505060406107b888828901610757565b93505060606107c988828901610757565b92505060806107da8882890161070c565b9150509295509295909350565b600082825260208201905092915050565b7f4572726f722067657474696e672074686520707269636520666565642066726f60008201527f6d2041676772656761746f725633496e74657266616365000000000000000000602082015250565b60006108546037836107e7565b915061085f826107f8565b604082019050919050565b6000602082019050818103600083015261088381610847565b9050919050565b60006108958261053f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036108c7576108c661060e565b5b600182019050919050565b7f53656e7420746f6b656e206973206e6f742077686974656c6973746564000000600082015250565b6000610908601d836107e7565b9150610913826108d2565b602082019050919050565b60006020820190508181036000830152610937816108fb565b905091905056fea26469706673582212200a6a4849244fd6d0150189bef9fd18b48762e107a32a6c16a3a3992082dfd56c64736f6c634300081300336080604052600560015534801561001557600080fd5b50610dcd806100256000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063439e076d146100515780634b0cbcc6146100815780636c21ddbb146100b1578063f8b78ee2146100cd575b600080fd5b61006b600480360381019061006691906108b4565b6100eb565b60405161007891906108f0565b60405180910390f35b61009b60048036038101906100969190610941565b610246565b6040516100a8919061097d565b60405180910390f35b6100cb60048036038101906100c69190610998565b610269565b005b6100d561065d565b6040516100e29190610bca565b60405180910390f35b600080600090505b60008054905081101561023b5760005b6000828154811061011757610116610bec565b5b906000526020600020906003020160010180549050811015610229578373ffffffffffffffffffffffffffffffffffffffff166000838154811061015e5761015d610bec565b5b9060005260206000209060030201600101828154811061018157610180610bec565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361021657600082815481106101db576101da610bec565b5b906000526020600020906003020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1692505050610241565b808061022190610c4a565b915050610103565b508061023490610c4a565b90506100f3565b50600090505b919050565b60006064826001546102589190610c92565b6102629190610d03565b9050919050565b60005b6000805490508110156104e8578373ffffffffffffffffffffffffffffffffffffffff16600082815481106102a4576102a3610bec565b5b906000526020600020906003020160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036104d75760005b6000828154811061030857610307610bec565b5b90600052602060002090600302016001018054905081101561040e578373ffffffffffffffffffffffffffffffffffffffff166000838154811061034f5761034e610bec565b5b9060005260206000209060030201600101828154811061037257610371610bec565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036103fb5782600083815481106103cd576103cc610bec565b5b906000526020600020906003020160020160008282546103ed9190610d34565b925050819055505050610658565b808061040690610c4a565b9150506102f4565b506000818154811061042357610422610bec565b5b9060005260206000209060030201600101839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600082815481106104aa576104a9610bec565b5b906000526020600020906003020160020160008282546104ca9190610d34565b9250508190555050610658565b806104e190610c4a565b905061026c565b50600060405180606001604052808573ffffffffffffffffffffffffffffffffffffffff168152602001600167ffffffffffffffff81111561052d5761052c610d68565b5b60405190808252806020026020018201604052801561055b5781602001602082028036833780820191505090505b5081526020018381525090508281602001516000815181106105805761057f610bec565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600081908060018154018082558091505060019003906000526020600020906003020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010190805190602001906106499291906107aa565b50604082015181600201555050505b505050565b60606000805480602002602001604051908101604052809291908181526020016000905b828210156107a157838290600052602060002090600302016040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820180548060200260200160405190810160405280929190818152602001828054801561077f57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610735575b5050505050815260200160028201548152505081526020019060010190610681565b50505050905090565b828054828255906000526020600020908101928215610823579160200282015b828111156108225782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906107ca565b5b5090506108309190610834565b5090565b5b8082111561084d576000816000905550600101610835565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061088182610856565b9050919050565b61089181610876565b811461089c57600080fd5b50565b6000813590506108ae81610888565b92915050565b6000602082840312156108ca576108c9610851565b5b60006108d88482850161089f565b91505092915050565b6108ea81610876565b82525050565b600060208201905061090560008301846108e1565b92915050565b6000819050919050565b61091e8161090b565b811461092957600080fd5b50565b60008135905061093b81610915565b92915050565b60006020828403121561095757610956610851565b5b60006109658482850161092c565b91505092915050565b6109778161090b565b82525050565b6000602082019050610992600083018461096e565b92915050565b6000806000606084860312156109b1576109b0610851565b5b60006109bf8682870161089f565b93505060206109d08682870161089f565b92505060406109e18682870161092c565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b610a2081610876565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6000610a5e8383610a17565b60208301905092915050565b6000602082019050919050565b6000610a8282610a26565b610a8c8185610a31565b9350610a9783610a42565b8060005b83811015610ac8578151610aaf8882610a52565b9750610aba83610a6a565b925050600181019050610a9b565b5085935050505092915050565b610ade8161090b565b82525050565b6000606083016000830151610afc6000860182610a17565b5060208301518482036020860152610b148282610a77565b9150506040830151610b296040860182610ad5565b508091505092915050565b6000610b408383610ae4565b905092915050565b6000602082019050919050565b6000610b60826109eb565b610b6a81856109f6565b935083602082028501610b7c85610a07565b8060005b85811015610bb85784840389528151610b998582610b34565b9450610ba483610b48565b925060208a01995050600181019050610b80565b50829750879550505050505092915050565b60006020820190508181036000830152610be48184610b55565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610c558261090b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203610c8757610c86610c1b565b5b600182019050919050565b6000610c9d8261090b565b9150610ca88361090b565b9250828202610cb68161090b565b91508282048414831517610ccd57610ccc610c1b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000610d0e8261090b565b9150610d198361090b565b925082610d2957610d28610cd4565b5b828204905092915050565b6000610d3f8261090b565b9150610d4a8361090b565b9250828201905080821115610d6257610d61610c1b565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea26469706673582212207927302d42abe1be881f160f9d341fa556d4d54485355bfb7dae8136068047c564736f6c63430008130033
Deployed Bytecode
0x6080604052600436106101395760003560e01c806395877f78116100ab578063d31200601161006f578063d31200601461040f578063e985e3671461044c578063f2fde38b14610477578063f3fef3a3146104a0578063f8b78ee2146104c9578063fa09e630146104f457610140565b806395877f7814610318578063a341c7f214610341578063ace1741c1461036a578063bc5f95b814610395578063c2930998146103d257610140565b8063692bf4a8116100fd578063692bf4a8146102275780636bcedf9c14610243578063715018a61461026e578063773a1154146102855780637976eaa2146102b05780638da5cb5b146102ed57610140565b80633c00a36c146101425780633c2f4b2f1461016b578063409fdcd7146101965780634b0cbcc6146101bf57806363b20117146101fc57610140565b3661014057005b005b34801561014e57600080fd5b5061016960048036038101906101649190611dd4565b61051d565b005b34801561017757600080fd5b506101806105e3565b60405161018d9190611f2f565b60405180910390f35b3480156101a257600080fd5b506101bd60048036038101906101b89190611f7d565b6107cb565b005b3480156101cb57600080fd5b506101e660048036038101906101e19190611dd4565b61091e565b6040516101f39190611fb9565b60405180910390f35b34801561020857600080fd5b50610211610940565b60405161021e9190611fb9565b60405180910390f35b610241600480360381019061023c9190611fd4565b610946565b005b34801561024f57600080fd5b50610258610f50565b6040516102659190611fb9565b60405180910390f35b34801561027a57600080fd5b50610283610f56565b005b34801561029157600080fd5b5061029a610fde565b6040516102a79190611fb9565b60405180910390f35b3480156102bc57600080fd5b506102d760048036038101906102d29190611dd4565b611020565b6040516102e49190611fb9565b60405180910390f35b3480156102f957600080fd5b506103026110b2565b60405161030f9190612036565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a9190611f7d565b6110db565b005b34801561034d57600080fd5b5061036860048036038101906103639190612089565b6111e7565b005b34801561037657600080fd5b5061037f611280565b60405161038c9190611fb9565b60405180910390f35b3480156103a157600080fd5b506103bc60048036038101906103b791906120b6565b611286565b6040516103c99190611fb9565b60405180910390f35b3480156103de57600080fd5b506103f960048036038101906103f491906120f6565b611351565b6040516104069190611fb9565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190611f7d565b6113f9565b6040516104439190611fb9565b60405180910390f35b34801561045857600080fd5b5061046161149e565b60405161046e9190612036565b60405180910390f35b34801561048357600080fd5b5061049e60048036038101906104999190611f7d565b6114c4565b005b3480156104ac57600080fd5b506104c760048036038101906104c29190612136565b6115bb565b005b3480156104d557600080fd5b506104de611666565b6040516104eb9190612337565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190611f7d565b611703565b005b61052561180b565b73ffffffffffffffffffffffffffffffffffffffff166105436110b2565b73ffffffffffffffffffffffffffffffffffffffff1614610599576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610590906123b6565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156105df573d6000803e3d6000fd5b5050565b60606000600b8054905067ffffffffffffffff811115610606576106056123d6565b5b60405190808252806020026020018201604052801561063f57816020015b61062c611d5a565b8152602001906001900390816106245790505b50905060005b600b805490508110156107c3576040518060400160405280600b838154811061067157610670612405565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231600b858154811061070957610708612405565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016107509190612036565b602060405180830381865afa15801561076d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107919190612449565b8152508282815181106107a7576107a6612405565b5b6020026020010181905250806107bc906124a5565b9050610645565b508091505090565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610879573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089d9190612526565b60ff16600281905550600254600a6108b59190612686565b634d7c6d006108c491906126d1565b60038190555061091b3330600354600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611813909392919063ffffffff16565b50565b6000606482600561092f91906126d1565b6109399190612742565b9050919050565b600a5481565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395fd46f084866040518363ffffffff1660e01b81526004016109a5929190612773565b602060405180830381865afa1580156109c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e69190612449565b905060008311610a2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a229061280e565b60405180910390fd5b6000610a3682611020565b90506003548183600a54610a4a919061282e565b610a54919061282e565b10610a94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8b906128d4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614610af657610af53330868873ffffffffffffffffffffffffffffffffffffffff16611813909392919063ffffffff16565b5b60008183610b04919061282e565b9050600080600c60009054906101000a900460ff1615610b8757610b26610fde565b9050610b328382611286565b91503373ffffffffffffffffffffffffffffffffffffffff167fba24a3a3cf60135223c348d50d009e34e8ba029ec45e2bb644684a0ff0406978838342604051610b7e939291906128f4565b60405180910390a25b610bdf338385610b97919061282e565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661189c9092919063ffffffff16565b610be833611922565b600080600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663439e076d336040518263ffffffff1660e01b8152600401610c469190612036565b602060405180830381865afa158015610c63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c879190612940565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cc1578097505b600073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015610d2a57508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b15610eac57600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634b0cbcc6866040518263ffffffff1660e01b8152600401610d8a9190611fb9565b602060405180830381865afa158015610da7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dcb9190612449565b9150600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636c21ddbb8933856040518463ffffffff1660e01b8152600401610e2c9392919061296d565b600060405180830381600087803b158015610e4657600080fd5b505af1158015610e5a573d6000803e3d6000fd5b50505050610eab8883600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661189c9092919063ffffffff16565b5b818688610eb9919061282e565b610ec3919061282e565b600a6000828254610ed4919061282e565b925050819055508773ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f48e3899b23a73e79218ca38cf3b134875a41f62ed95130e3c7489d0512336491878542604051610f3c939291906128f4565b60405180910390a350505050505050505050565b60035481565b610f5e61180b565b73ffffffffffffffffffffffffffffffffffffffff16610f7c6110b2565b73ffffffffffffffffffffffffffffffffffffffff1614610fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc9906123b6565b60405180910390fd5b610fdc6000611a29565b565b60008042604051602001610ff291906129c5565b6040516020818303038152906040528051906020012060001c905060658161101a91906129e0565b91505090565b6000600254600a6110319190612686565b60075461103e91906126d1565b82106110655760648260095461105491906126d1565b61105e9190612742565b90506110ad565b600254600a6110749190612686565b60065461108191906126d1565b82106110a85760648260085461109791906126d1565b6110a19190612742565b90506110ad565b600090505b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6110e361180b565b73ffffffffffffffffffffffffffffffffffffffff166111016110b2565b73ffffffffffffffffffffffffffffffffffffffff1614611157576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114e906123b6565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395877f78826040518263ffffffff1660e01b81526004016111b29190612036565b600060405180830381600087803b1580156111cc57600080fd5b505af11580156111e0573d6000803e3d6000fd5b5050505050565b6111ef61180b565b73ffffffffffffffffffffffffffffffffffffffff1661120d6110b2565b73ffffffffffffffffffffffffffffffffffffffff1614611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a906123b6565b60405180910390fd5b80600c60006101000a81548160ff02191690831515021790555050565b60025481565b60008060009050606483036112b55760196064856112a49190612742565b6112ae91906126d1565b9050611347565b606183106112dd57600f6064856112cc9190612742565b6112d691906126d1565b9050611346565b605c831061130557600a6064856112f49190612742565b6112fe91906126d1565b9050611345565b604d831061131e57683635c9adc5dea000009050611344565b603483106113375768056bc75e2d631000009050611343565b678ac7230489e8000090505b5b5b5b5b8091505092915050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166395fd46f084846040518363ffffffff1660e01b81526004016113b0929190612773565b602060405180830381865afa1580156113cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113f19190612449565b905092915050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d3120060836040518263ffffffff1660e01b81526004016114569190612036565b602060405180830381865afa158015611473573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114979190612449565b9050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114cc61180b565b73ffffffffffffffffffffffffffffffffffffffff166114ea6110b2565b73ffffffffffffffffffffffffffffffffffffffff1614611540576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611537906123b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a690612a83565b60405180910390fd5b6115b881611a29565b50565b6115c361180b565b73ffffffffffffffffffffffffffffffffffffffff166115e16110b2565b73ffffffffffffffffffffffffffffffffffffffff1614611637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162e906123b6565b60405180910390fd5b61166233828473ffffffffffffffffffffffffffffffffffffffff1661189c9092919063ffffffff16565b5050565b6060600c60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f8b78ee26040518163ffffffff1660e01b8152600401600060405180830381865afa1580156116d5573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906116fe9190612d38565b905090565b61170b61180b565b73ffffffffffffffffffffffffffffffffffffffff166117296110b2565b73ffffffffffffffffffffffffffffffffffffffff161461177f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611776906123b6565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117ba9190612036565b602060405180830381865afa1580156117d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fb9190612449565b905061180782826115bb565b5050565b600033905090565b611896846323b872dd60e01b8585856040516024016118349392919061296d565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611aed565b50505050565b61191d8363a9059cbb60e01b84846040516024016118bb929190612d81565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611aed565b505050565b6000600b80549050905060005b818110156119c0578273ffffffffffffffffffffffffffffffffffffffff16600b828154811061196257611961612405565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036119af575050611a26565b806119b9906124a5565b905061192f565b50600b829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611b4f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611bb49092919063ffffffff16565b9050600081511115611baf5780806020019051810190611b6f9190612dbf565b611bae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba590612e5e565b60405180910390fd5b5b505050565b6060611bc38484600085611bcc565b90509392505050565b606082471015611c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0890612ef0565b60405180910390fd5b611c1a85611ce0565b611c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5090612f5c565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff168587604051611c829190612fed565b60006040518083038185875af1925050503d8060008114611cbf576040519150601f19603f3d011682016040523d82523d6000602084013e611cc4565b606091505b5091509150611cd4828286611cf3565b92505050949350505050565b600080823b905060008111915050919050565b60608315611d0357829050611d53565b600083511115611d165782518084602001fd5b816040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a9190613048565b60405180910390fd5b9392505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600081525090565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b611db181611d9e565b8114611dbc57600080fd5b50565b600081359050611dce81611da8565b92915050565b600060208284031215611dea57611de9611d94565b5b6000611df884828501611dbf565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e5882611e2d565b9050919050565b611e6881611e4d565b82525050565b611e7781611d9e565b82525050565b604082016000820151611e936000850182611e5f565b506020820151611ea66020850182611e6e565b50505050565b6000611eb88383611e7d565b60408301905092915050565b6000602082019050919050565b6000611edc82611e01565b611ee68185611e0c565b9350611ef183611e1d565b8060005b83811015611f22578151611f098882611eac565b9750611f1483611ec4565b925050600181019050611ef5565b5085935050505092915050565b60006020820190508181036000830152611f498184611ed1565b905092915050565b611f5a81611e4d565b8114611f6557600080fd5b50565b600081359050611f7781611f51565b92915050565b600060208284031215611f9357611f92611d94565b5b6000611fa184828501611f68565b91505092915050565b611fb381611d9e565b82525050565b6000602082019050611fce6000830184611faa565b92915050565b600080600060608486031215611fed57611fec611d94565b5b6000611ffb86828701611f68565b935050602061200c86828701611dbf565b925050604061201d86828701611f68565b9150509250925092565b61203081611e4d565b82525050565b600060208201905061204b6000830184612027565b92915050565b60008115159050919050565b61206681612051565b811461207157600080fd5b50565b6000813590506120838161205d565b92915050565b60006020828403121561209f5761209e611d94565b5b60006120ad84828501612074565b91505092915050565b600080604083850312156120cd576120cc611d94565b5b60006120db85828601611dbf565b92505060206120ec85828601611dbf565b9150509250929050565b6000806040838503121561210d5761210c611d94565b5b600061211b85828601611dbf565b925050602061212c85828601611f68565b9150509250929050565b6000806040838503121561214d5761214c611d94565b5b600061215b85828601611f68565b925050602061216c85828601611dbf565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006121da8383611e5f565b60208301905092915050565b6000602082019050919050565b60006121fe826121a2565b61220881856121ad565b9350612213836121be565b8060005b8381101561224457815161222b88826121ce565b9750612236836121e6565b925050600181019050612217565b5085935050505092915050565b60006060830160008301516122696000860182611e5f565b506020830151848203602086015261228182826121f3565b91505060408301516122966040860182611e6e565b508091505092915050565b60006122ad8383612251565b905092915050565b6000602082019050919050565b60006122cd82612176565b6122d78185612181565b9350836020820285016122e985612192565b8060005b85811015612325578484038952815161230685826122a1565b9450612311836122b5565b925060208a019950506001810190506122ed565b50829750879550505050505092915050565b6000602082019050818103600083015261235181846122c2565b905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006123a0602083612359565b91506123ab8261236a565b602082019050919050565b600060208201905081810360008301526123cf81612393565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061244381611da8565b92915050565b60006020828403121561245f5761245e611d94565b5b600061246d84828501612434565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006124b082611d9e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036124e2576124e1612476565b5b600182019050919050565b600060ff82169050919050565b612503816124ed565b811461250e57600080fd5b50565b600081519050612520816124fa565b92915050565b60006020828403121561253c5761253b611d94565b5b600061254a84828501612511565b91505092915050565b60008160011c9050919050565b6000808291508390505b60018511156125aa5780860481111561258657612585612476565b5b60018516156125955780820291505b80810290506125a385612553565b945061256a565b94509492505050565b6000826125c3576001905061267f565b816125d1576000905061267f565b81600181146125e757600281146125f157612620565b600191505061267f565b60ff84111561260357612602612476565b5b8360020a91508482111561261a57612619612476565b5b5061267f565b5060208310610133831016604e8410600b84101617156126555782820a9050838111156126505761264f612476565b5b61267f565b6126628484846001612560565b9250905081840481111561267957612678612476565b5b81810290505b9392505050565b600061269182611d9e565b915061269c83611d9e565b92506126c97fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846125b3565b905092915050565b60006126dc82611d9e565b91506126e783611d9e565b92508282026126f581611d9e565b9150828204841483151761270c5761270b612476565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061274d82611d9e565b915061275883611d9e565b92508261276857612767612713565b5b828204905092915050565b60006040820190506127886000830185611faa565b6127956020830184612027565b9392505050565b7f50726573616c653a2043616e6e6f74206275792077697468207a65726f20616d60008201527f6f756e7400000000000000000000000000000000000000000000000000000000602082015250565b60006127f8602483612359565b91506128038261279c565b604082019050919050565b60006020820190508181036000830152612827816127eb565b9050919050565b600061283982611d9e565b915061284483611d9e565b925082820190508082111561285c5761285b612476565b5b92915050565b7f50726553616c653a20546f74616c20546f6b656e2053616c652052656163686560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b60006128be602283612359565b91506128c982612862565b604082019050919050565b600060208201905081810360008301526128ed816128b1565b9050919050565b60006060820190506129096000830186611faa565b6129166020830185611faa565b6129236040830184611faa565b949350505050565b60008151905061293a81611f51565b92915050565b60006020828403121561295657612955611d94565b5b60006129648482850161292b565b91505092915050565b60006060820190506129826000830186612027565b61298f6020830185612027565b61299c6040830184611faa565b949350505050565b6000819050919050565b6129bf6129ba82611d9e565b6129a4565b82525050565b60006129d182846129ae565b60208201915081905092915050565b60006129eb82611d9e565b91506129f683611d9e565b925082612a0657612a05612713565b5b828206905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612a6d602683612359565b9150612a7882612a11565b604082019050919050565b60006020820190508181036000830152612a9c81612a60565b9050919050565b600080fd5b6000601f19601f8301169050919050565b612ac282612aa8565b810181811067ffffffffffffffff82111715612ae157612ae06123d6565b5b80604052505050565b6000612af4611d8a565b9050612b008282612ab9565b919050565b600067ffffffffffffffff821115612b2057612b1f6123d6565b5b602082029050602081019050919050565b600080fd5b600080fd5b600080fd5b600067ffffffffffffffff821115612b5b57612b5a6123d6565b5b602082029050602081019050919050565b6000612b7f612b7a84612b40565b612aea565b90508083825260208201905060208402830185811115612ba257612ba1612b31565b5b835b81811015612bcb5780612bb7888261292b565b845260208401935050602081019050612ba4565b5050509392505050565b600082601f830112612bea57612be9612aa3565b5b8151612bfa848260208601612b6c565b91505092915050565b600060608284031215612c1957612c18612b36565b5b612c236060612aea565b90506000612c338482850161292b565b600083015250602082015167ffffffffffffffff811115612c5757612c56612b3b565b5b612c6384828501612bd5565b6020830152506040612c7784828501612434565b60408301525092915050565b6000612c96612c9184612b05565b612aea565b90508083825260208201905060208402830185811115612cb957612cb8612b31565b5b835b81811015612d0057805167ffffffffffffffff811115612cde57612cdd612aa3565b5b808601612ceb8982612c03565b85526020850194505050602081019050612cbb565b5050509392505050565b600082601f830112612d1f57612d1e612aa3565b5b8151612d2f848260208601612c83565b91505092915050565b600060208284031215612d4e57612d4d611d94565b5b600082015167ffffffffffffffff811115612d6c57612d6b611d99565b5b612d7884828501612d0a565b91505092915050565b6000604082019050612d966000830185612027565b612da36020830184611faa565b9392505050565b600081519050612db98161205d565b92915050565b600060208284031215612dd557612dd4611d94565b5b6000612de384828501612daa565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000612e48602a83612359565b9150612e5382612dec565b604082019050919050565b60006020820190508181036000830152612e7781612e3b565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000612eda602683612359565b9150612ee582612e7e565b604082019050919050565b60006020820190508181036000830152612f0981612ecd565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000612f46601d83612359565b9150612f5182612f10565b602082019050919050565b60006020820190508181036000830152612f7581612f39565b9050919050565b600081519050919050565b600081905092915050565b60005b83811015612fb0578082015181840152602081019050612f95565b60008484015250505050565b6000612fc782612f7c565b612fd18185612f87565b9350612fe1818560208601612f92565b80840191505092915050565b6000612ff98284612fbc565b915081905092915050565b600081519050919050565b600061301a82613004565b6130248185612359565b9350613034818560208601612f92565b61303d81612aa8565b840191505092915050565b60006020820190508181036000830152613062818461300f565b90509291505056fea2646970667358221220620f317de1685de43bfd7b54cebf714122b9d4dea7c83035ad375dd67da813bf64736f6c63430008130033
Deployed Bytecode Sourcemap
25976:6387:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8071:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31568:345;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30691:312;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30102:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26588:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27241:1871;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26271:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6653:105;;;;;;;;;;;;;:::i;:::-;;31923:181;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30224:459;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5985:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26884:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27033:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26187:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29120:689;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31011:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26155:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6918:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7768:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31409:151;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7904:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8071:110;6223:12;:10;:12::i;:::-;6212:23;;:7;:5;:7::i;:::-;:23;;;6204:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8147:10:::1;8139:28;;:33;8168:3;8139:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;8071:110:::0;:::o;31568:345::-;31613:21;31647:28;31697:11;:18;;;;31678:38;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;31647:69;;31731:9;31727:155;31746:11;:18;;;;31744:1;:20;31727:155;;;31797:73;;;;;;;;31810:11;31822:1;31810:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31797:73;;;;;;31833:9;;;;;;;;;;;31826:27;;;31854:11;31866:1;31854:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31826:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31797:73;;;31785:6;31792:1;31785:9;;;;;;;;:::i;:::-;;;;;;;:85;;;;31766:3;;;;:::i;:::-;;;31727:155;;;;31899:6;31892:13;;;31568:345;:::o;30691:312::-;30768:12;30756:9;;:24;;;;;;;;;;;;;;;;;;30821:9;;;;;;;;;;;30806:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30791:51;;:12;:51;;;;30890:12;;30886:2;:16;;;;:::i;:::-;30874:10;:29;;;;:::i;:::-;30853:18;:50;;;;30914:81;30949:10;30969:4;30976:18;;30921:9;;;;;;;;;;;30914:34;;;;:81;;;;;;:::i;:::-;30691:312;:::o;30102:114::-;30167:7;30205:3;30196:7;30194:1;:9;;;;:::i;:::-;30193:15;;;;:::i;:::-;30186:22;;30102:114;;;:::o;26588:30::-;;;;:::o;27241:1871::-;27345:23;27370:19;;;;;;;;;;;:37;;;27408:7;27417:6;27370:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27345:79;;27453:1;27443:7;:11;27435:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;27506:19;27527:31;27542:15;27527:14;:31::i;:::-;27506:52;;27629:18;;27614:11;27596:15;27578;;:33;;;;:::i;:::-;:47;;;;:::i;:::-;27577:70;27569:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27717:1;27700:19;;:6;:19;;;27697:117;;27735:67;27767:10;27787:4;27794:7;27742:6;27735:31;;;;:67;;;;;;:::i;:::-;27697:117;27824:23;27866:11;27849:15;:28;;;;:::i;:::-;27824:53;;27890:21;27924:9;27950:15;;;;;;;;;;;27947:221;;;27984:22;:20;:22::i;:::-;27981:25;;28036:36;28053:15;28070:1;28036:16;:36::i;:::-;28021:51;;28109:10;28092:64;;;28121:13;28137:1;28140:15;28092:64;;;;;;;;:::i;:::-;;;;;;;;27947:221;28180:74;28211:10;28240:13;28223:15;:30;;;;:::i;:::-;28187:9;;;;;;;;;;;28180:30;;;;:74;;;;;:::i;:::-;28265:23;28277:10;28265:11;:23::i;:::-;28301:28;28342:19;28363:15;;;;;;;;;;;:28;;;28392:10;28363:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28342:61;;28441:1;28419:24;;:11;:24;;;28416:140;;28475:11;28459:27;;28416:140;28593:1;28569:26;;:14;:26;;;;:58;;;;;28613:14;28599:28;;:10;:28;;;;28569:58;28566:338;;;28664:15;;;;;;;;;;;:33;;;28698:15;28664:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28643:71;;28729:15;;;;;;;;;;;:30;;;28760:14;28776:10;28788:20;28729:80;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28824:68;28855:14;28871:20;28831:9;;;;;;;;;;;28824:30;;;;:68;;;;;:::i;:::-;28566:338;28966:20;28952:11;28934:15;:29;;;;:::i;:::-;:52;;;;:::i;:::-;28915:15;;:71;;;;;;;:::i;:::-;;;;;;;;29049:14;29005:98;;29019:10;29005:98;;;29031:15;29065:20;29087:15;29005:98;;;;;;;;:::i;:::-;;;;;;;;27332:1780;;;;;;;27241:1871;;;:::o;26271:33::-;;;;:::o;6653:105::-;6223:12;:10;:12::i;:::-;6212:23;;:7;:5;:7::i;:::-;:23;;;6204:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6719:30:::1;6746:1;6719:18;:30::i;:::-;6653:105::o:0;31923:181::-;31976:7;31996:14;32048:15;32031:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;32021:44;;;;;;32013:53;;31996:70;;32093:3;32084:6;:12;;;;:::i;:::-;32077:19;;;31923:181;:::o;30224:459::-;30286:7;30409:12;;30405:2;:16;;;;:::i;:::-;30383:20;;:39;;;;:::i;:::-;30374:7;:48;30371:305;;30476:3;30467:7;30445:21;;:29;;;;:::i;:::-;30444:35;;;;:::i;:::-;30437:42;;;;30371:305;30540:12;;30536:2;:16;;;;:::i;:::-;30516:18;;:37;;;;:::i;:::-;30507:7;:46;30504:172;;30616:3;30607:7;30586:20;;:28;;;;:::i;:::-;30585:34;;;;:::i;:::-;30578:41;;;;30504:172;30664:1;30657:8;;30224:459;;;;:::o;5985:89::-;6031:7;6059:6;;;;;;;;;;;6052:13;;5985:89;:::o;26884:141::-;6223:12;:10;:12::i;:::-;6212:23;;:7;:5;:7::i;:::-;:23;;;6204:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26967:19:::1;;;;;;;;;;;:35;;;27004:12;26967:50;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26884:141:::0;:::o;27033:105::-;6223:12;:10;:12::i;:::-;6212:23;;:7;:5;:7::i;:::-;:23;;;6204:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27124:6:::1;27107:15;;:23;;;;;;;;;;;;;;;;;;27033:105:::0;:::o;26187:27::-;;;;:::o;29120:689::-;29195:7;29214:21;29236:1;29214:23;;29258:3;29255:1;:6;29252:517;;29308:2;29304:3;29296:7;:11;;;;:::i;:::-;:14;;;;:::i;:::-;29281:29;;29252:517;;;29351:2;29348:1;:5;29345:424;;29400:2;29396:3;29388:7;:11;;;;:::i;:::-;:14;;;;:::i;:::-;29373:29;;29345:424;;;29443:2;29440:1;:5;29437:332;;29492:2;29488:3;29480:7;:11;;;;:::i;:::-;:14;;;;:::i;:::-;29465:29;;29437:332;;;29535:2;29532:1;:5;29529:240;;29572:13;29557:28;;29529:240;;;29626:2;29623:1;:5;29620:149;;29663:12;29648:27;;29620:149;;;29742:11;29728:25;;29620:149;29529:240;29437:332;29345:424;29252:517;29788:13;29781:20;;;29120:689;;;;:::o;31011:191::-;31109:7;31136:19;;;;;;;;;;;:37;;;31174:5;31181:12;31136:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31129:65;;31011:191;;;;:::o;31210:::-;31279:7;31305:19;;;;;;;;;;;:37;;;31343:12;31305:51;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31298:58;;31210:191;;;:::o;26155:24::-;;;;;;;;;;;;;:::o;6918:204::-;6223:12;:10;:12::i;:::-;6212:23;;:7;:5;:7::i;:::-;:23;;;6204:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7028:1:::1;7008:22;;:8;:22;;::::0;7000:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7085:28;7104:8;7085:18;:28::i;:::-;6918:204:::0;:::o;7768:127::-;6223:12;:10;:12::i;:::-;6212:23;;:7;:5;:7::i;:::-;:23;;;6204:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7843:43:::1;7870:10;7882:3;7850:5;7843:26;;;;:43;;;;;:::i;:::-;7768:127:::0;;:::o;31409:151::-;31456:43;31519:15;;;;;;;;;;;:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31512:40;;31409:151;:::o;7904:158::-;6223:12;:10;:12::i;:::-;6212:23;;:7;:5;:7::i;:::-;:23;;;6204:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7969:11:::1;7990:5;7983:23;;;8015:4;7983:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7969:52;;8033:20;8042:5;8049:3;8033:8;:20::i;:::-;7957:105;7904:158:::0;:::o;4671:100::-;4724:7;4752:10;4745:17;;4671:100;:::o;17736:255::-;17886:96;17906:5;17936:27;;;17965:4;17971:2;17975:5;17913:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17886:19;:96::i;:::-;17736:255;;;;:::o;17510:217::-;17632:86;17652:5;17682:23;;;17707:2;17711:5;17659:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17632:19;:86::i;:::-;17510:217;;;:::o;29818:276::-;29873:19;29894:11;:18;;;;29873:39;;29927:9;29923:129;29942:11;29940:1;:13;29923:129;;;29994:5;29977:22;;:11;29989:1;29977:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:22;;;29974:67;;30019:7;;;;29974:67;29955:3;;;;:::i;:::-;;;29923:129;;;;30062:11;30079:5;30062:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29862:232;29818:276;;:::o;7287:195::-;7362:16;7381:6;;;;;;;;;;;7362:25;;7408:8;7399:6;;:17;;;;;;;;;;;;;;;;;;7464:8;7433:40;;7454:8;7433:40;;;;;;;;;;;;7350:132;7287:195;:::o;20145:725::-;20573:23;20599:69;20627:4;20599:69;;;;;;;;;;;;;;;;;20607:5;20599:27;;;;:69;;;;;:::i;:::-;20573:95;;20704:1;20684:10;:17;:21;20680:182;;;20783:10;20772:30;;;;;;;;;;;;:::i;:::-;20764:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;20680:182;20215:655;20145:725;;:::o;12153:235::-;12294:12;12327:52;12349:6;12357:4;12363:1;12366:12;12327:21;:52::i;:::-;12320:59;;12153:235;;;;;:::o;13304:520::-;13479:12;13538:5;13513:21;:30;;13505:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;13606:18;13617:6;13606:10;:18::i;:::-;13598:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;13673:12;13687:23;13714:6;:11;;13733:5;13740:4;13714:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13672:73;;;;13764:51;13781:7;13790:10;13802:12;13764:16;:51::i;:::-;13757:58;;;;13304:520;;;;;;:::o;9289:396::-;9349:4;9561:12;9630:7;9618:20;9610:28;;9675:1;9668:4;:8;9661:15;;;9289:396;;;:::o;16055:731::-;16209:12;16239:7;16235:543;;;16271:10;16264:17;;;;16235:543;16408:1;16388:10;:17;:21;16384:382;;;16589:10;16583:17;16651:15;16638:10;16634:2;16630:19;16623:44;16384:382;16736:12;16729:20;;;;;;;;;;;:::i;:::-;;;;;;;;16055:731;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:144::-;1122:6;1156:5;1150:12;1140:22;;1025:144;;;:::o;1175:214::-;1304:11;1338:6;1333:3;1326:19;1378:4;1373:3;1369:14;1354:29;;1175:214;;;;:::o;1395:162::-;1492:4;1515:3;1507:11;;1545:4;1540:3;1536:14;1528:22;;1395:162;;;:::o;1563:126::-;1600:7;1640:42;1633:5;1629:54;1618:65;;1563:126;;;:::o;1695:96::-;1732:7;1761:24;1779:5;1761:24;:::i;:::-;1750:35;;1695:96;;;:::o;1797:108::-;1874:24;1892:5;1874:24;:::i;:::-;1869:3;1862:37;1797:108;;:::o;1911:::-;1988:24;2006:5;1988:24;:::i;:::-;1983:3;1976:37;1911:108;;:::o;2107:513::-;2254:4;2249:3;2245:14;2345:4;2338:5;2334:16;2328:23;2364:63;2421:4;2416:3;2412:14;2398:12;2364:63;:::i;:::-;2269:168;2521:4;2514:5;2510:16;2504:23;2540:63;2597:4;2592:3;2588:14;2574:12;2540:63;:::i;:::-;2447:166;2223:397;2107:513;;:::o;2626:299::-;2755:10;2776:106;2878:3;2870:6;2776:106;:::i;:::-;2914:4;2909:3;2905:14;2891:28;;2626:299;;;;:::o;2931:143::-;3031:4;3063;3058:3;3054:14;3046:22;;2931:143;;;:::o;3166:972::-;3345:3;3374:84;3452:5;3374:84;:::i;:::-;3474:116;3583:6;3578:3;3474:116;:::i;:::-;3467:123;;3614:86;3694:5;3614:86;:::i;:::-;3723:7;3754:1;3739:374;3764:6;3761:1;3758:13;3739:374;;;3840:6;3834:13;3867:123;3986:3;3971:13;3867:123;:::i;:::-;3860:130;;4013:90;4096:6;4013:90;:::i;:::-;4003:100;;3799:314;3786:1;3783;3779:9;3774:14;;3739:374;;;3743:14;4129:3;4122:10;;3350:788;;;3166:972;;;;:::o;4144:493::-;4347:4;4385:2;4374:9;4370:18;4362:26;;4434:9;4428:4;4424:20;4420:1;4409:9;4405:17;4398:47;4462:168;4625:4;4616:6;4462:168;:::i;:::-;4454:176;;4144:493;;;;:::o;4643:122::-;4716:24;4734:5;4716:24;:::i;:::-;4709:5;4706:35;4696:63;;4755:1;4752;4745:12;4696:63;4643:122;:::o;4771:139::-;4817:5;4855:6;4842:20;4833:29;;4871:33;4898:5;4871:33;:::i;:::-;4771:139;;;;:::o;4916:329::-;4975:6;5024:2;5012:9;5003:7;4999:23;4995:32;4992:119;;;5030:79;;:::i;:::-;4992:119;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;4916:329;;;;:::o;5251:118::-;5338:24;5356:5;5338:24;:::i;:::-;5333:3;5326:37;5251:118;;:::o;5375:222::-;5468:4;5506:2;5495:9;5491:18;5483:26;;5519:71;5587:1;5576:9;5572:17;5563:6;5519:71;:::i;:::-;5375:222;;;;:::o;5603:619::-;5680:6;5688;5696;5745:2;5733:9;5724:7;5720:23;5716:32;5713:119;;;5751:79;;:::i;:::-;5713:119;5871:1;5896:53;5941:7;5932:6;5921:9;5917:22;5896:53;:::i;:::-;5886:63;;5842:117;5998:2;6024:53;6069:7;6060:6;6049:9;6045:22;6024:53;:::i;:::-;6014:63;;5969:118;6126:2;6152:53;6197:7;6188:6;6177:9;6173:22;6152:53;:::i;:::-;6142:63;;6097:118;5603:619;;;;;:::o;6228:118::-;6315:24;6333:5;6315:24;:::i;:::-;6310:3;6303:37;6228:118;;:::o;6352:222::-;6445:4;6483:2;6472:9;6468:18;6460:26;;6496:71;6564:1;6553:9;6549:17;6540:6;6496:71;:::i;:::-;6352:222;;;;:::o;6580:90::-;6614:7;6657:5;6650:13;6643:21;6632:32;;6580:90;;;:::o;6676:116::-;6746:21;6761:5;6746:21;:::i;:::-;6739:5;6736:32;6726:60;;6782:1;6779;6772:12;6726:60;6676:116;:::o;6798:133::-;6841:5;6879:6;6866:20;6857:29;;6895:30;6919:5;6895:30;:::i;:::-;6798:133;;;;:::o;6937:323::-;6993:6;7042:2;7030:9;7021:7;7017:23;7013:32;7010:119;;;7048:79;;:::i;:::-;7010:119;7168:1;7193:50;7235:7;7226:6;7215:9;7211:22;7193:50;:::i;:::-;7183:60;;7139:114;6937:323;;;;:::o;7266:474::-;7334:6;7342;7391:2;7379:9;7370:7;7366:23;7362:32;7359:119;;;7397:79;;:::i;:::-;7359:119;7517:1;7542:53;7587:7;7578:6;7567:9;7563:22;7542:53;:::i;:::-;7532:63;;7488:117;7644:2;7670:53;7715:7;7706:6;7695:9;7691:22;7670:53;:::i;:::-;7660:63;;7615:118;7266:474;;;;;:::o;7746:::-;7814:6;7822;7871:2;7859:9;7850:7;7846:23;7842:32;7839:119;;;7877:79;;:::i;:::-;7839:119;7997:1;8022:53;8067:7;8058:6;8047:9;8043:22;8022:53;:::i;:::-;8012:63;;7968:117;8124:2;8150:53;8195:7;8186:6;8175:9;8171:22;8150:53;:::i;:::-;8140:63;;8095:118;7746:474;;;;;:::o;8226:::-;8294:6;8302;8351:2;8339:9;8330:7;8326:23;8322:32;8319:119;;;8357:79;;:::i;:::-;8319:119;8477:1;8502:53;8547:7;8538:6;8527:9;8523:22;8502:53;:::i;:::-;8492:63;;8448:117;8604:2;8630:53;8675:7;8666:6;8655:9;8651:22;8630:53;:::i;:::-;8620:63;;8575:118;8226:474;;;;;:::o;8706:147::-;8806:6;8840:5;8834:12;8824:22;;8706:147;;;:::o;8859:217::-;8991:11;9025:6;9020:3;9013:19;9065:4;9060:3;9056:14;9041:29;;8859:217;;;;:::o;9082:165::-;9182:4;9205:3;9197:11;;9235:4;9230:3;9226:14;9218:22;;9082:165;;;:::o;9253:114::-;9320:6;9354:5;9348:12;9338:22;;9253:114;;;:::o;9373:174::-;9462:11;9496:6;9491:3;9484:19;9536:4;9531:3;9527:14;9512:29;;9373:174;;;;:::o;9553:132::-;9620:4;9643:3;9635:11;;9673:4;9668:3;9664:14;9656:22;;9553:132;;;:::o;9691:179::-;9760:10;9781:46;9823:3;9815:6;9781:46;:::i;:::-;9859:4;9854:3;9850:14;9836:28;;9691:179;;;;:::o;9876:113::-;9946:4;9978;9973:3;9969:14;9961:22;;9876:113;;;:::o;10025:712::-;10134:3;10163:54;10211:5;10163:54;:::i;:::-;10233:76;10302:6;10297:3;10233:76;:::i;:::-;10226:83;;10333:56;10383:5;10333:56;:::i;:::-;10412:7;10443:1;10428:284;10453:6;10450:1;10447:13;10428:284;;;10529:6;10523:13;10556:63;10615:3;10600:13;10556:63;:::i;:::-;10549:70;;10642:60;10695:6;10642:60;:::i;:::-;10632:70;;10488:224;10475:1;10472;10468:9;10463:14;;10428:284;;;10432:14;10728:3;10721:10;;10139:598;;;10025:712;;;;:::o;10837:829::-;10962:3;10998:4;10993:3;10989:14;11089:4;11082:5;11078:16;11072:23;11108:63;11165:4;11160:3;11156:14;11142:12;11108:63;:::i;:::-;11013:168;11267:4;11260:5;11256:16;11250:23;11320:3;11314:4;11310:14;11303:4;11298:3;11294:14;11287:38;11346:103;11444:4;11430:12;11346:103;:::i;:::-;11338:111;;11191:269;11547:4;11540:5;11536:16;11530:23;11566:63;11623:4;11618:3;11614:14;11600:12;11566:63;:::i;:::-;11470:169;11656:4;11649:11;;10967:699;10837:829;;;;:::o;11672:288::-;11807:10;11842:112;11950:3;11942:6;11842:112;:::i;:::-;11828:126;;11672:288;;;;:::o;11966:146::-;12069:4;12101;12096:3;12092:14;12084:22;;11966:146;;;:::o;12216:1175::-;12401:3;12430:87;12511:5;12430:87;:::i;:::-;12533:119;12645:6;12640:3;12533:119;:::i;:::-;12526:126;;12678:3;12723:4;12715:6;12711:17;12706:3;12702:27;12753:89;12836:5;12753:89;:::i;:::-;12865:7;12896:1;12881:465;12906:6;12903:1;12900:13;12881:465;;;12977:9;12971:4;12967:20;12962:3;12955:33;13028:6;13022:13;13056:130;13181:4;13166:13;13056:130;:::i;:::-;13048:138;;13209:93;13295:6;13209:93;:::i;:::-;13199:103;;13331:4;13326:3;13322:14;13315:21;;12941:405;12928:1;12925;12921:9;12916:14;;12881:465;;;12885:14;13362:4;13355:11;;13382:3;13375:10;;12406:985;;;;;12216:1175;;;;:::o;13397:505::-;13606:4;13644:2;13633:9;13629:18;13621:26;;13693:9;13687:4;13683:20;13679:1;13668:9;13664:17;13657:47;13721:174;13890:4;13881:6;13721:174;:::i;:::-;13713:182;;13397:505;;;;:::o;13908:169::-;13992:11;14026:6;14021:3;14014:19;14066:4;14061:3;14057:14;14042:29;;13908:169;;;;:::o;14083:182::-;14223:34;14219:1;14211:6;14207:14;14200:58;14083:182;:::o;14271:366::-;14413:3;14434:67;14498:2;14493:3;14434:67;:::i;:::-;14427:74;;14510:93;14599:3;14510:93;:::i;:::-;14628:2;14623:3;14619:12;14612:19;;14271:366;;;:::o;14643:419::-;14809:4;14847:2;14836:9;14832:18;14824:26;;14896:9;14890:4;14886:20;14882:1;14871:9;14867:17;14860:47;14924:131;15050:4;14924:131;:::i;:::-;14916:139;;14643:419;;;:::o;15068:180::-;15116:77;15113:1;15106:88;15213:4;15210:1;15203:15;15237:4;15234:1;15227:15;15254:180;15302:77;15299:1;15292:88;15399:4;15396:1;15389:15;15423:4;15420:1;15413:15;15440:143;15497:5;15528:6;15522:13;15513:22;;15544:33;15571:5;15544:33;:::i;:::-;15440:143;;;;:::o;15589:351::-;15659:6;15708:2;15696:9;15687:7;15683:23;15679:32;15676:119;;;15714:79;;:::i;:::-;15676:119;15834:1;15859:64;15915:7;15906:6;15895:9;15891:22;15859:64;:::i;:::-;15849:74;;15805:128;15589:351;;;;:::o;15946:180::-;15994:77;15991:1;15984:88;16091:4;16088:1;16081:15;16115:4;16112:1;16105:15;16132:233;16171:3;16194:24;16212:5;16194:24;:::i;:::-;16185:33;;16240:66;16233:5;16230:77;16227:103;;16310:18;;:::i;:::-;16227:103;16357:1;16350:5;16346:13;16339:20;;16132:233;;;:::o;16371:86::-;16406:7;16446:4;16439:5;16435:16;16424:27;;16371:86;;;:::o;16463:118::-;16534:22;16550:5;16534:22;:::i;:::-;16527:5;16524:33;16514:61;;16571:1;16568;16561:12;16514:61;16463:118;:::o;16587:139::-;16642:5;16673:6;16667:13;16658:22;;16689:31;16714:5;16689:31;:::i;:::-;16587:139;;;;:::o;16732:347::-;16800:6;16849:2;16837:9;16828:7;16824:23;16820:32;16817:119;;;16855:79;;:::i;:::-;16817:119;16975:1;17000:62;17054:7;17045:6;17034:9;17030:22;17000:62;:::i;:::-;16990:72;;16946:126;16732:347;;;;:::o;17085:102::-;17127:8;17174:5;17171:1;17167:13;17146:34;;17085:102;;;:::o;17193:848::-;17254:5;17261:4;17285:6;17276:15;;17309:5;17300:14;;17323:712;17344:1;17334:8;17331:15;17323:712;;;17439:4;17434:3;17430:14;17424:4;17421:24;17418:50;;;17448:18;;:::i;:::-;17418:50;17498:1;17488:8;17484:16;17481:451;;;17913:4;17906:5;17902:16;17893:25;;17481:451;17963:4;17957;17953:15;17945:23;;17993:32;18016:8;17993:32;:::i;:::-;17981:44;;17323:712;;;17193:848;;;;;;;:::o;18047:1073::-;18101:5;18292:8;18282:40;;18313:1;18304:10;;18315:5;;18282:40;18341:4;18331:36;;18358:1;18349:10;;18360:5;;18331:36;18427:4;18475:1;18470:27;;;;18511:1;18506:191;;;;18420:277;;18470:27;18488:1;18479:10;;18490:5;;;18506:191;18551:3;18541:8;18538:17;18535:43;;;18558:18;;:::i;:::-;18535:43;18607:8;18604:1;18600:16;18591:25;;18642:3;18635:5;18632:14;18629:40;;;18649:18;;:::i;:::-;18629:40;18682:5;;;18420:277;;18806:2;18796:8;18793:16;18787:3;18781:4;18778:13;18774:36;18756:2;18746:8;18743:16;18738:2;18732:4;18729:12;18725:35;18709:111;18706:246;;;18862:8;18856:4;18852:19;18843:28;;18897:3;18890:5;18887:14;18884:40;;;18904:18;;:::i;:::-;18884:40;18937:5;;18706:246;18977:42;19015:3;19005:8;18999:4;18996:1;18977:42;:::i;:::-;18962:57;;;;19051:4;19046:3;19042:14;19035:5;19032:25;19029:51;;;19060:18;;:::i;:::-;19029:51;19109:4;19102:5;19098:16;19089:25;;18047:1073;;;;;;:::o;19126:285::-;19186:5;19210:23;19228:4;19210:23;:::i;:::-;19202:31;;19254:27;19272:8;19254:27;:::i;:::-;19242:39;;19300:104;19337:66;19327:8;19321:4;19300:104;:::i;:::-;19291:113;;19126:285;;;;:::o;19417:410::-;19457:7;19480:20;19498:1;19480:20;:::i;:::-;19475:25;;19514:20;19532:1;19514:20;:::i;:::-;19509:25;;19569:1;19566;19562:9;19591:30;19609:11;19591:30;:::i;:::-;19580:41;;19770:1;19761:7;19757:15;19754:1;19751:22;19731:1;19724:9;19704:83;19681:139;;19800:18;;:::i;:::-;19681:139;19465:362;19417:410;;;;:::o;19833:180::-;19881:77;19878:1;19871:88;19978:4;19975:1;19968:15;20002:4;19999:1;19992:15;20019:185;20059:1;20076:20;20094:1;20076:20;:::i;:::-;20071:25;;20110:20;20128:1;20110:20;:::i;:::-;20105:25;;20149:1;20139:35;;20154:18;;:::i;:::-;20139:35;20196:1;20193;20189:9;20184:14;;20019:185;;;;:::o;20210:332::-;20331:4;20369:2;20358:9;20354:18;20346:26;;20382:71;20450:1;20439:9;20435:17;20426:6;20382:71;:::i;:::-;20463:72;20531:2;20520:9;20516:18;20507:6;20463:72;:::i;:::-;20210:332;;;;;:::o;20548:223::-;20688:34;20684:1;20676:6;20672:14;20665:58;20757:6;20752:2;20744:6;20740:15;20733:31;20548:223;:::o;20777:366::-;20919:3;20940:67;21004:2;20999:3;20940:67;:::i;:::-;20933:74;;21016:93;21105:3;21016:93;:::i;:::-;21134:2;21129:3;21125:12;21118:19;;20777:366;;;:::o;21149:419::-;21315:4;21353:2;21342:9;21338:18;21330:26;;21402:9;21396:4;21392:20;21388:1;21377:9;21373:17;21366:47;21430:131;21556:4;21430:131;:::i;:::-;21422:139;;21149:419;;;:::o;21574:191::-;21614:3;21633:20;21651:1;21633:20;:::i;:::-;21628:25;;21667:20;21685:1;21667:20;:::i;:::-;21662:25;;21710:1;21707;21703:9;21696:16;;21731:3;21728:1;21725:10;21722:36;;;21738:18;;:::i;:::-;21722:36;21574:191;;;;:::o;21771:221::-;21911:34;21907:1;21899:6;21895:14;21888:58;21980:4;21975:2;21967:6;21963:15;21956:29;21771:221;:::o;21998:366::-;22140:3;22161:67;22225:2;22220:3;22161:67;:::i;:::-;22154:74;;22237:93;22326:3;22237:93;:::i;:::-;22355:2;22350:3;22346:12;22339:19;;21998:366;;;:::o;22370:419::-;22536:4;22574:2;22563:9;22559:18;22551:26;;22623:9;22617:4;22613:20;22609:1;22598:9;22594:17;22587:47;22651:131;22777:4;22651:131;:::i;:::-;22643:139;;22370:419;;;:::o;22795:442::-;22944:4;22982:2;22971:9;22967:18;22959:26;;22995:71;23063:1;23052:9;23048:17;23039:6;22995:71;:::i;:::-;23076:72;23144:2;23133:9;23129:18;23120:6;23076:72;:::i;:::-;23158;23226:2;23215:9;23211:18;23202:6;23158:72;:::i;:::-;22795:442;;;;;;:::o;23243:143::-;23300:5;23331:6;23325:13;23316:22;;23347:33;23374:5;23347:33;:::i;:::-;23243:143;;;;:::o;23392:351::-;23462:6;23511:2;23499:9;23490:7;23486:23;23482:32;23479:119;;;23517:79;;:::i;:::-;23479:119;23637:1;23662:64;23718:7;23709:6;23698:9;23694:22;23662:64;:::i;:::-;23652:74;;23608:128;23392:351;;;;:::o;23749:442::-;23898:4;23936:2;23925:9;23921:18;23913:26;;23949:71;24017:1;24006:9;24002:17;23993:6;23949:71;:::i;:::-;24030:72;24098:2;24087:9;24083:18;24074:6;24030:72;:::i;:::-;24112;24180:2;24169:9;24165:18;24156:6;24112:72;:::i;:::-;23749:442;;;;;;:::o;24197:79::-;24236:7;24265:5;24254:16;;24197:79;;;:::o;24282:157::-;24387:45;24407:24;24425:5;24407:24;:::i;:::-;24387:45;:::i;:::-;24382:3;24375:58;24282:157;;:::o;24445:256::-;24557:3;24572:75;24643:3;24634:6;24572:75;:::i;:::-;24672:2;24667:3;24663:12;24656:19;;24692:3;24685:10;;24445:256;;;;:::o;24707:176::-;24739:1;24756:20;24774:1;24756:20;:::i;:::-;24751:25;;24790:20;24808:1;24790:20;:::i;:::-;24785:25;;24829:1;24819:35;;24834:18;;:::i;:::-;24819:35;24875:1;24872;24868:9;24863:14;;24707:176;;;;:::o;24889:225::-;25029:34;25025:1;25017:6;25013:14;25006:58;25098:8;25093:2;25085:6;25081:15;25074:33;24889:225;:::o;25120:366::-;25262:3;25283:67;25347:2;25342:3;25283:67;:::i;:::-;25276:74;;25359:93;25448:3;25359:93;:::i;:::-;25477:2;25472:3;25468:12;25461:19;;25120:366;;;:::o;25492:419::-;25658:4;25696:2;25685:9;25681:18;25673:26;;25745:9;25739:4;25735:20;25731:1;25720:9;25716:17;25709:47;25773:131;25899:4;25773:131;:::i;:::-;25765:139;;25492:419;;;:::o;25917:117::-;26026:1;26023;26016:12;26040:102;26081:6;26132:2;26128:7;26123:2;26116:5;26112:14;26108:28;26098:38;;26040:102;;;:::o;26148:281::-;26231:27;26253:4;26231:27;:::i;:::-;26223:6;26219:40;26361:6;26349:10;26346:22;26325:18;26313:10;26310:34;26307:62;26304:88;;;26372:18;;:::i;:::-;26304:88;26412:10;26408:2;26401:22;26191:238;26148:281;;:::o;26435:129::-;26469:6;26496:20;;:::i;:::-;26486:30;;26525:33;26553:4;26545:6;26525:33;:::i;:::-;26435:129;;;:::o;26570:344::-;26680:4;26770:18;26762:6;26759:30;26756:56;;;26792:18;;:::i;:::-;26756:56;26842:4;26834:6;26830:17;26822:25;;26902:4;26896;26892:15;26884:23;;26570:344;;;:::o;26920:117::-;27029:1;27026;27019:12;27043:117;27152:1;27149;27142:12;27166:117;27275:1;27272;27265:12;27289:311;27366:4;27456:18;27448:6;27445:30;27442:56;;;27478:18;;:::i;:::-;27442:56;27528:4;27520:6;27516:17;27508:25;;27588:4;27582;27578:15;27570:23;;27289:311;;;:::o;27623:732::-;27730:5;27755:81;27771:64;27828:6;27771:64;:::i;:::-;27755:81;:::i;:::-;27746:90;;27856:5;27885:6;27878:5;27871:21;27919:4;27912:5;27908:16;27901:23;;27972:4;27964:6;27960:17;27952:6;27948:30;28001:3;27993:6;27990:15;27987:122;;;28020:79;;:::i;:::-;27987:122;28135:6;28118:231;28152:6;28147:3;28144:15;28118:231;;;28227:3;28256:48;28300:3;28288:10;28256:48;:::i;:::-;28251:3;28244:61;28334:4;28329:3;28325:14;28318:21;;28194:155;28178:4;28173:3;28169:14;28162:21;;28118:231;;;28122:21;27736:619;;27623:732;;;;;:::o;28378:385::-;28460:5;28509:3;28502:4;28494:6;28490:17;28486:27;28476:122;;28517:79;;:::i;:::-;28476:122;28627:6;28621:13;28652:105;28753:3;28745:6;28738:4;28730:6;28726:17;28652:105;:::i;:::-;28643:114;;28466:297;28378:385;;;;:::o;28818:978::-;28911:5;28955:4;28943:9;28938:3;28934:19;28930:30;28927:117;;;28963:79;;:::i;:::-;28927:117;29062:21;29078:4;29062:21;:::i;:::-;29053:30;;29146:1;29186:60;29242:3;29233:6;29222:9;29218:22;29186:60;:::i;:::-;29179:4;29172:5;29168:16;29161:86;29093:165;29342:2;29331:9;29327:18;29321:25;29373:18;29365:6;29362:30;29359:117;;;29395:79;;:::i;:::-;29359:117;29515:85;29596:3;29587:6;29576:9;29572:22;29515:85;:::i;:::-;29508:4;29501:5;29497:16;29490:111;29268:344;29676:2;29717:60;29773:3;29764:6;29753:9;29749:22;29717:60;:::i;:::-;29710:4;29703:5;29699:16;29692:86;29622:167;28818:978;;;;:::o;29853:1029::-;29993:5;30018:114;30034:97;30124:6;30034:97;:::i;:::-;30018:114;:::i;:::-;30009:123;;30152:5;30181:6;30174:5;30167:21;30215:4;30208:5;30204:16;30197:23;;30268:4;30260:6;30256:17;30248:6;30244:30;30297:3;30289:6;30286:15;30283:122;;;30316:79;;:::i;:::-;30283:122;30431:6;30414:462;30448:6;30443:3;30440:15;30414:462;;;30530:3;30524:10;30566:18;30553:11;30550:35;30547:122;;;30588:79;;:::i;:::-;30547:122;30712:11;30704:6;30700:24;30750:81;30827:3;30815:10;30750:81;:::i;:::-;30745:3;30738:94;30861:4;30856:3;30852:14;30845:21;;30490:386;;30474:4;30469:3;30465:14;30458:21;;30414:462;;;30418:21;29999:883;;29853:1029;;;;;:::o;30939:451::-;31054:5;31103:3;31096:4;31088:6;31084:17;31080:27;31070:122;;31111:79;;:::i;:::-;31070:122;31221:6;31215:13;31246:138;31380:3;31372:6;31365:4;31357:6;31353:17;31246:138;:::i;:::-;31237:147;;31060:330;30939:451;;;;:::o;31396:620::-;31524:6;31573:2;31561:9;31552:7;31548:23;31544:32;31541:119;;;31579:79;;:::i;:::-;31541:119;31720:1;31709:9;31705:17;31699:24;31750:18;31742:6;31739:30;31736:117;;;31772:79;;:::i;:::-;31736:117;31877:122;31991:7;31982:6;31971:9;31967:22;31877:122;:::i;:::-;31867:132;;31670:339;31396:620;;;;:::o;32022:332::-;32143:4;32181:2;32170:9;32166:18;32158:26;;32194:71;32262:1;32251:9;32247:17;32238:6;32194:71;:::i;:::-;32275:72;32343:2;32332:9;32328:18;32319:6;32275:72;:::i;:::-;32022:332;;;;;:::o;32360:137::-;32414:5;32445:6;32439:13;32430:22;;32461:30;32485:5;32461:30;:::i;:::-;32360:137;;;;:::o;32503:345::-;32570:6;32619:2;32607:9;32598:7;32594:23;32590:32;32587:119;;;32625:79;;:::i;:::-;32587:119;32745:1;32770:61;32823:7;32814:6;32803:9;32799:22;32770:61;:::i;:::-;32760:71;;32716:125;32503:345;;;;:::o;32854:229::-;32994:34;32990:1;32982:6;32978:14;32971:58;33063:12;33058:2;33050:6;33046:15;33039:37;32854:229;:::o;33089:366::-;33231:3;33252:67;33316:2;33311:3;33252:67;:::i;:::-;33245:74;;33328:93;33417:3;33328:93;:::i;:::-;33446:2;33441:3;33437:12;33430:19;;33089:366;;;:::o;33461:419::-;33627:4;33665:2;33654:9;33650:18;33642:26;;33714:9;33708:4;33704:20;33700:1;33689:9;33685:17;33678:47;33742:131;33868:4;33742:131;:::i;:::-;33734:139;;33461:419;;;:::o;33886:225::-;34026:34;34022:1;34014:6;34010:14;34003:58;34095:8;34090:2;34082:6;34078:15;34071:33;33886:225;:::o;34117:366::-;34259:3;34280:67;34344:2;34339:3;34280:67;:::i;:::-;34273:74;;34356:93;34445:3;34356:93;:::i;:::-;34474:2;34469:3;34465:12;34458:19;;34117:366;;;:::o;34489:419::-;34655:4;34693:2;34682:9;34678:18;34670:26;;34742:9;34736:4;34732:20;34728:1;34717:9;34713:17;34706:47;34770:131;34896:4;34770:131;:::i;:::-;34762:139;;34489:419;;;:::o;34914:179::-;35054:31;35050:1;35042:6;35038:14;35031:55;34914:179;:::o;35099:366::-;35241:3;35262:67;35326:2;35321:3;35262:67;:::i;:::-;35255:74;;35338:93;35427:3;35338:93;:::i;:::-;35456:2;35451:3;35447:12;35440:19;;35099:366;;;:::o;35471:419::-;35637:4;35675:2;35664:9;35660:18;35652:26;;35724:9;35718:4;35714:20;35710:1;35699:9;35695:17;35688:47;35752:131;35878:4;35752:131;:::i;:::-;35744:139;;35471:419;;;:::o;35896:98::-;35947:6;35981:5;35975:12;35965:22;;35896:98;;;:::o;36000:147::-;36101:11;36138:3;36123:18;;36000:147;;;;:::o;36153:246::-;36234:1;36244:113;36258:6;36255:1;36252:13;36244:113;;;36343:1;36338:3;36334:11;36328:18;36324:1;36319:3;36315:11;36308:39;36280:2;36277:1;36273:10;36268:15;;36244:113;;;36391:1;36382:6;36377:3;36373:16;36366:27;36215:184;36153:246;;;:::o;36405:386::-;36509:3;36537:38;36569:5;36537:38;:::i;:::-;36591:88;36672:6;36667:3;36591:88;:::i;:::-;36584:95;;36688:65;36746:6;36741:3;36734:4;36727:5;36723:16;36688:65;:::i;:::-;36778:6;36773:3;36769:16;36762:23;;36513:278;36405:386;;;;:::o;36797:271::-;36927:3;36949:93;37038:3;37029:6;36949:93;:::i;:::-;36942:100;;37059:3;37052:10;;36797:271;;;;:::o;37074:99::-;37126:6;37160:5;37154:12;37144:22;;37074:99;;;:::o;37179:377::-;37267:3;37295:39;37328:5;37295:39;:::i;:::-;37350:71;37414:6;37409:3;37350:71;:::i;:::-;37343:78;;37430:65;37488:6;37483:3;37476:4;37469:5;37465:16;37430:65;:::i;:::-;37520:29;37542:6;37520:29;:::i;:::-;37515:3;37511:39;37504:46;;37271:285;37179:377;;;;:::o;37562:313::-;37675:4;37713:2;37702:9;37698:18;37690:26;;37762:9;37756:4;37752:20;37748:1;37737:9;37733:17;37726:47;37790:78;37863:4;37854:6;37790:78;:::i;:::-;37782:86;;37562:313;;;;:::o
Swarm Source
ipfs://7927302d42abe1be881f160f9d341fa556d4d54485355bfb7dae8136068047c5
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.