More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 273 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim Amount | 21418441 | 36 days ago | IN | 0 ETH | 0.00619988 | ||||
Claim Amount | 20197802 | 207 days ago | IN | 0 ETH | 0.00144053 | ||||
Claim Amount | 19939095 | 243 days ago | IN | 0 ETH | 0.00211755 | ||||
Claim Amount | 19108353 | 359 days ago | IN | 0 ETH | 0.00026727 | ||||
Claim Amount | 19108333 | 359 days ago | IN | 0 ETH | 0.00230389 | ||||
Claim Amount | 18553790 | 437 days ago | IN | 0 ETH | 0.00442341 | ||||
Claim Amount | 18467885 | 449 days ago | IN | 0 ETH | 0.00329298 | ||||
Claim Amount | 18461088 | 450 days ago | IN | 0 ETH | 0.00267531 | ||||
Claim Amount | 18452059 | 451 days ago | IN | 0 ETH | 0.00247034 | ||||
Claim Amount | 18448796 | 452 days ago | IN | 0 ETH | 0.00491382 | ||||
Claim Amount | 18448793 | 452 days ago | IN | 0 ETH | 0.00493573 | ||||
Claim Amount | 18448789 | 452 days ago | IN | 0 ETH | 0.00448636 | ||||
Claim Amount | 18448748 | 452 days ago | IN | 0 ETH | 0.00478606 | ||||
Claim Amount | 18435766 | 454 days ago | IN | 0 ETH | 0.00684556 | ||||
Claim Amount | 18433727 | 454 days ago | IN | 0 ETH | 0.00464721 | ||||
Claim Amount | 18432242 | 454 days ago | IN | 0 ETH | 0.00260176 | ||||
Claim Amount | 18431304 | 454 days ago | IN | 0 ETH | 0.00082585 | ||||
Claim Amount | 18431276 | 454 days ago | IN | 0 ETH | 0.00072489 | ||||
Claim Amount | 18431165 | 454 days ago | IN | 0 ETH | 0.00068277 | ||||
Claim Amount | 18431057 | 454 days ago | IN | 0 ETH | 0.00066786 | ||||
Claim Amount | 18431019 | 454 days ago | IN | 0 ETH | 0.00065518 | ||||
Claim Amount | 18430550 | 454 days ago | IN | 0 ETH | 0.00523788 | ||||
Claim Amount | 18429677 | 455 days ago | IN | 0 ETH | 0.00084922 | ||||
Claim Amount | 18429677 | 455 days ago | IN | 0 ETH | 0.00724533 | ||||
Claim Amount | 18429568 | 455 days ago | IN | 0 ETH | 0.00988428 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
18193063 | 488 days ago | 0.09 ETH | ||||
18192439 | 488 days ago | 1.553908 ETH | ||||
18192424 | 488 days ago | 2.049931 ETH | ||||
18190219 | 488 days ago | 0.01645 ETH | ||||
18190191 | 488 days ago | 0.078333 ETH | ||||
18190095 | 488 days ago | 0.000475 ETH | ||||
18189123 | 488 days ago | 0.038065 ETH | ||||
18188801 | 488 days ago | 0.004887 ETH | ||||
18187622 | 488 days ago | 0.04 ETH | ||||
18185393 | 489 days ago | 0.311889 ETH | ||||
18178415 | 490 days ago | 0.049083 ETH | ||||
18178393 | 490 days ago | 0.920302 ETH | ||||
18174433 | 490 days ago | 0.001218 ETH | ||||
18172312 | 491 days ago | 0.100342 ETH | ||||
18171395 | 491 days ago | 0.070141 ETH | ||||
18167180 | 491 days ago | 0.005065 ETH | ||||
18166132 | 491 days ago | 0.000646 ETH | ||||
18165439 | 492 days ago | 0.292762 ETH | ||||
18164984 | 492 days ago | 0.374415 ETH | ||||
18164456 | 492 days ago | 0.03 ETH | ||||
18164449 | 492 days ago | 0.4 ETH | ||||
18164365 | 492 days ago | 0.335751 ETH | ||||
18164288 | 492 days ago | 0.37729 ETH | ||||
18163620 | 492 days ago | 0.093811 ETH | ||||
18161978 | 492 days ago | 0.006133 ETH |
Loading...
Loading
Contract Name:
EverETHIPO
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-09-06 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol pragma solidity ^0.8.1; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be _NOT_ENTERED require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Context.sol /** * @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/Ownable.sol /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol /** * @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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://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 functionCallWithValue(target, data, 0, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol) /** * @dev Interface for the optional metadata functions from the ERC20 standard. * * _Available since v4.1._ */ interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } // File: renqFinanceUpdate.sol //SPDX-License-Identifier: MIT interface Aggregator { function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); } contract EverETHIPO is ReentrancyGuard, Ownable { uint256 public presaleId; uint256 public ETH_MULTIPLIER; uint256 public USDT_MULTIPLIER; address public fundReceiver; struct Presale { uint256 startTime; uint256 endTime; uint256 price; uint256 nextStagePrice; uint256 Sold; uint256 tokensToSell; uint256 UsdtHardcap; uint256 amountRaised; bool Active; bool isEnableClaim; } struct buyerInfo { uint256 tier; uint256 maxBuyAmount; uint256 totalBought; } struct ClaimData { uint256 claimAt; uint256 totalAmount; uint256 claimedAmount; } Aggregator internal aggregatorInterface; // https://docs.chain.link/docs/ethereum-addresses/ => (ETH / USD) mapping(uint256 => bool) public paused; mapping(uint256 => Presale) public presale; mapping(address => mapping (uint256 => buyerInfo)) public buyerinfo; mapping(address => mapping(uint256 => ClaimData)) public userClaimData; mapping(address => bool) public isExcludeMinToken; uint256 public MinTokenTobuy = 1 * (10**18); address public SaleToken; event newWalletAdded( uint256 _tier, address wallet, uint256 _maxBuyAmount ); event PresaleCreated( uint256 indexed _id, uint256 _totalTokens, uint256 _startTime, uint256 _endTime ); event PresaleUpdated( bytes32 indexed key, uint256 prevValue, uint256 newValue, uint256 timestamp ); event TokensBought( address indexed user, uint256 indexed id, address indexed purchaseToken, uint256 tokensBought, uint256 amountPaid, uint256 timestamp ); event TokensClaimed( address indexed user, uint256 indexed id, uint256 amount, uint256 timestamp ); event PresaleTokenAddressUpdated( address indexed prevValue, address indexed newValue, uint256 timestamp ); event PresalePaused(uint256 indexed id, uint256 timestamp); event PresaleUnpaused(uint256 indexed id, uint256 timestamp); constructor() { aggregatorInterface = Aggregator(address(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419)); ETH_MULTIPLIER = (10**18); USDT_MULTIPLIER =(10**6) ; fundReceiver = msg.sender; } function ChangeTokenToSell(address _token) public onlyOwner { SaleToken = _token; } function EditMinTokenToBuy(uint256 _amount) public onlyOwner { MinTokenTobuy = _amount; } // /** // * @dev add a new whitelist wallet // * @param _tier // * @param _wallet // * @param _maxBuyAmount // */ function addNewWallet(uint256 _tier,address _wallet, uint256 _maxBuyAmount) external onlyOwner { require(_maxBuyAmount > 0, "Zero buy amount"); require(buyerinfo[_wallet][_tier].maxBuyAmount <= 0, "wallet already added."); buyerinfo[_wallet][_tier].tier = _tier; buyerinfo[_wallet][_tier].maxBuyAmount = (_maxBuyAmount * (10**18)); buyerinfo[_wallet][_tier].totalBought = 0; emit newWalletAdded(_tier, _wallet, _maxBuyAmount); } // /** // * @dev allows multiple whitelist wallets at once // * @param _tier // * @param _wallets ["address1", "address2",...] // * @param _maxBuyAmounts [100,100,...] // */ function addMultipleWallets(uint256 _tier,address[] calldata wallets, uint256[] calldata maxBuyAmounts) external onlyOwner { for(uint256 i = 0; i < wallets.length; i++) { require(buyerinfo[wallets[i]][_tier].maxBuyAmount <= 0, "wallet already added."); buyerinfo[wallets[i]][_tier].tier = _tier; buyerinfo[wallets[i]][_tier].maxBuyAmount = (maxBuyAmounts[i] * (10**18)); buyerinfo[wallets[i]][_tier].totalBought = 0; } } // /** // * @dev update whitelist wallet // * @param _wallet // * @param _maxBuyAmount // */ function updateWalletMaxBuyAmount(uint256 _tier, address _wallet, uint256 _maxBuyAmount) external onlyOwner { require(_maxBuyAmount > 0, "Zero buy amount"); buyerinfo[_wallet][_tier].maxBuyAmount = (_maxBuyAmount * (10**18)); } // /** // * @dev Creates a new presale // * @param _price Per token price multiplied by (10**18) // * @param _tokensToSell No of tokens to sell // */ function createPresale(uint256 _price,uint256 _nextStagePrice, uint256 _tokensToSell, uint256 _UsdtHardcap) external onlyOwner { require(_price > 0, "Zero price"); require(_tokensToSell > 0, "Zero tokens to sell"); require(presale[presaleId].Active == false, "Previous Sale is Active"); presaleId++; presale[presaleId] = Presale( 0, 0, _price, _nextStagePrice, 0, _tokensToSell, _UsdtHardcap, 0, false, false ); emit PresaleCreated(presaleId, _tokensToSell, 0, 0); } function startPresale() public onlyOwner { presale[presaleId].startTime = block.timestamp; presale[presaleId].Active = true; } function endPresale() public onlyOwner { require( presale[presaleId].Active = true, "This presale is already Inactive" ); presale[presaleId].endTime = block.timestamp; presale[presaleId].Active = false; } // @dev enabel Claim amount function enableClaim(uint256 _id, bool _status) public checkPresaleId(_id) onlyOwner { presale[_id].isEnableClaim = _status; } // /** // * @dev Update a new presale // * @param _price Per USD price should be multiplied with token decimals // * @param _tokensToSell No of tokens to sell without denomination. If 1 million tokens to be sold then - 1_000_000 has to be passed // */ function updatePresale( uint256 _id, uint256 _price, uint256 _nextStagePrice, uint256 _tokensToSell, uint256 _Hardcap ) external checkPresaleId(_id) onlyOwner { require(_price > 0, "Zero price"); require(_tokensToSell > 0, "Zero tokens to sell"); presale[_id].price = _price; presale[_id].nextStagePrice = _nextStagePrice; presale[_id].tokensToSell = _tokensToSell; presale[_id].UsdtHardcap =_Hardcap; } /** * @dev To update the fund receiving wallet * @param _wallet address of wallet to update */ function changeFundWallet(address _wallet) external onlyOwner { require(_wallet != address(0), "Invalid parameters"); fundReceiver = _wallet; } /** * @dev To pause the presale * @param _id Presale id to update */ function pausePresale(uint256 _id) external checkPresaleId(_id) onlyOwner { require(!paused[_id], "Already paused"); paused[_id] = true; emit PresalePaused(_id, block.timestamp); } /** * @dev To unpause the presale * @param _id Presale id to update */ function unPausePresale(uint256 _id) external checkPresaleId(_id) onlyOwner { require(paused[_id], "Not paused"); paused[_id] = false; emit PresaleUnpaused(_id, block.timestamp); } /** * @dev To get latest ethereum price in 10**18 format */ function getLatestPrice() public view returns (uint256) { (, int256 price, , , ) = aggregatorInterface.latestRoundData(); price = (price * (10**10)); return uint256(price); } modifier checkPresaleId(uint256 _id) { require(_id > 0 && _id <= presaleId, "Invalid presale id"); _; } modifier checkSaleState(uint256 _id, uint256 amount) { require( block.timestamp >= presale[_id].startTime && presale[_id].Active == true, "Invalid time for buying" ); require( amount > 0 && amount <= presale[_id].tokensToSell-presale[_id].Sold, "Invalid sale amount" ); _; } function ExcludeAccouctFromMinBuy(address _user, bool _status) external onlyOwner { isExcludeMinToken[_user] = _status; } /** * @dev To buy into a presale using ETH */ function buyWithEth() external payable checkPresaleId(presaleId) checkSaleState(presaleId, ethToTokens(presaleId, msg.value)) nonReentrant returns (bool) { uint256 usdAmount = (msg.value * getLatestPrice() * USDT_MULTIPLIER) / (ETH_MULTIPLIER * ETH_MULTIPLIER); require(presale[presaleId].amountRaised + usdAmount <= presale[presaleId].UsdtHardcap, "Amount should be less than leftHardcap"); require(!paused[presaleId], "Presale paused"); require(presale[presaleId].Active == true, "Presale is not active yet"); require(buyerinfo[msg.sender][presaleId].maxBuyAmount >= 0, "your wallet not whitelisted."); uint256 tokens = usdtToTokens(presaleId, usdAmount); require((buyerinfo[msg.sender][presaleId].totalBought + tokens) <= buyerinfo[msg.sender][presaleId].maxBuyAmount, "maximum buy amount reached."); if (isExcludeMinToken[msg.sender] == false) { require(tokens >= MinTokenTobuy, "Insufficient amount!"); } presale[presaleId].Sold += tokens; presale[presaleId].amountRaised += usdAmount; buyerinfo[msg.sender][presaleId].totalBought += tokens; if (userClaimData[_msgSender()][presaleId].totalAmount > 0) { userClaimData[_msgSender()][presaleId].totalAmount += tokens; } else { userClaimData[_msgSender()][presaleId] = ClaimData( 0, // Last claimed at tokens, // total tokens to be claimed 0 // claimed amount ); } sendValue(payable(fundReceiver), msg.value); emit TokensBought( _msgSender(), presaleId, address(0), tokens, msg.value, block.timestamp ); return true; } /** * @dev Helper funtion to get ETH price for given amount * @param _id Presale id * @param amount No of tokens to buy */ function ethBuyHelper(uint256 _id, uint256 amount) external view checkPresaleId(_id) returns (uint256 ethAmount) { uint256 usdPrice = (amount * presale[_id].price); ethAmount = (usdPrice * ETH_MULTIPLIER) / (getLatestPrice() * 10**IERC20Metadata(SaleToken).decimals()); } /** * @dev Helper funtion to get tokens for eth amount * @param _id Presale id * @param amount No of eth */ function ethToTokens(uint256 _id, uint256 amount) public view returns (uint256 _tokens) { uint256 usdAmount = amount * getLatestPrice() * USDT_MULTIPLIER / (ETH_MULTIPLIER * ETH_MULTIPLIER); _tokens = usdtToTokens(_id, usdAmount); } /** * @dev Helper funtion to get tokens for given usdt amount * @param _id Presale id * @param amount No of usdt */ function usdtToTokens(uint256 _id, uint256 amount) public view checkPresaleId(_id) returns (uint256 _tokens) { _tokens = (amount * presale[_id].price) / USDT_MULTIPLIER; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Low balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "ETH Payment failed"); } /** * @dev Helper funtion to get claimable tokens for a given presale. * @param user User address * @param _id Presale id */ function claimableAmount(address user, uint256 _id) public view checkPresaleId(_id) returns (uint256) { ClaimData memory _user = userClaimData[user][_id]; require(_user.totalAmount > 0, "Nothing to claim"); uint256 amount = _user.totalAmount - _user.claimedAmount; require(amount > 0, "Already claimed"); return amount; } /** * @dev To claim token from a presale * @param _id Presale id */ function claimAmount(uint256 _id) public checkPresaleId(_id) returns (bool) { uint256 amount = claimableAmount(msg.sender, _id); require(amount > 0, "Zero claim amount"); require( SaleToken != address(0), "Presale token address not set" ); require( amount <= IERC20(SaleToken).balanceOf(address(this)), "Not enough tokens in the contract" ); require((presale[_id].isEnableClaim == true), "Claim is not enable"); userClaimData[msg.sender][_id].claimAt = block.timestamp; userClaimData[msg.sender][_id].claimedAmount += amount; bool status = IERC20(SaleToken).transfer(msg.sender, amount); require(status, "Token transfer failed"); emit TokensClaimed(msg.sender, _id, amount, block.timestamp); return true; } /** * @dev To claim tokens from a multiple presale * @param _id Presale id */ function claimMultiple(uint256[] calldata _id) external returns (bool) { require(_id.length > 0, "Zero ID length"); for (uint256 i; i < _id.length; i++) { require(claimAmount(_id[i]), "Claim failed"); } return true; } function WithdrawTokens(address _token, uint256 amount) external onlyOwner { IERC20(_token).transfer(fundReceiver, amount); } function WithdrawContractFunds(uint256 amount) external onlyOwner { sendValue(payable(fundReceiver), amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_totalTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_endTime","type":"uint256"}],"name":"PresaleCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresalePaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"prevValue","type":"address"},{"indexed":true,"internalType":"address","name":"newValue","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresaleTokenAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresaleUnpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"key","type":"bytes32"},{"indexed":false,"internalType":"uint256","name":"prevValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresaleUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":true,"internalType":"address","name":"purchaseToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountPaid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensBought","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tier","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"_maxBuyAmount","type":"uint256"}],"name":"newWalletAdded","type":"event"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"ChangeTokenToSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ETH_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"EditMinTokenToBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludeAccouctFromMinBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MinTokenTobuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SaleToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawContractFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tier","type":"uint256"},{"internalType":"address[]","name":"wallets","type":"address[]"},{"internalType":"uint256[]","name":"maxBuyAmounts","type":"uint256[]"}],"name":"addMultipleWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tier","type":"uint256"},{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint256","name":"_maxBuyAmount","type":"uint256"}],"name":"addNewWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyWithEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyerinfo","outputs":[{"internalType":"uint256","name":"tier","type":"uint256"},{"internalType":"uint256","name":"maxBuyAmount","type":"uint256"},{"internalType":"uint256","name":"totalBought","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"changeFundWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"claimAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_id","type":"uint256[]"}],"name":"claimMultiple","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"claimableAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_nextStagePrice","type":"uint256"},{"internalType":"uint256","name":"_tokensToSell","type":"uint256"},{"internalType":"uint256","name":"_UsdtHardcap","type":"uint256"}],"name":"createPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"enableClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ethBuyHelper","outputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ethToTokens","outputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludeMinToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"pausePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"presale","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"nextStagePrice","type":"uint256"},{"internalType":"uint256","name":"Sold","type":"uint256"},{"internalType":"uint256","name":"tokensToSell","type":"uint256"},{"internalType":"uint256","name":"UsdtHardcap","type":"uint256"},{"internalType":"uint256","name":"amountRaised","type":"uint256"},{"internalType":"bool","name":"Active","type":"bool"},{"internalType":"bool","name":"isEnableClaim","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"}],"name":"unPausePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_nextStagePrice","type":"uint256"},{"internalType":"uint256","name":"_tokensToSell","type":"uint256"},{"internalType":"uint256","name":"_Hardcap","type":"uint256"}],"name":"updatePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tier","type":"uint256"},{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"uint256","name":"_maxBuyAmount","type":"uint256"}],"name":"updateWalletMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"usdtToTokens","outputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userClaimData","outputs":[{"internalType":"uint256","name":"claimAt","type":"uint256"},{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"claimedAmount","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052670de0b6b3a7640000600c553480156200001d57600080fd5b506001600081905550620000466200003a620000fb60201b60201c565b6200010360201b60201c565b735f4ec3df9cbd43714fe2740f5e3616155c5b8419600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a7640000600381905550620f424060048190555033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001c9565b600033905090565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b614aa080620001d96000396000f3fe6080604052600436106102245760003560e01c806379b8d93811610123578063b04c7346116100ab578063e18e84f91161006f578063e18e84f9146107f5578063e6ab143414610820578063f2fde38b14610866578063f309fed91461088f578063fb4aa0a1146108cc57610224565b8063b04c734614610712578063cd1704a814610751578063d01608c11461077a578063d099850a146107a3578063dd884883146107cc57610224565b80638e15f473116100f25780638e15f473146106415780639051cce91461066c5780639752f3cb146106a95780639ea7d61d146106d2578063a43be57b146106fb57610224565b806379b8d93814610583578063833cde52146105c05780638d79e66d146105eb5780638da5cb5b1461061657610224565b80633107cd62116101b1578063582b572311610175578063582b5723146104b4578063680f2e4f146104dd5780636fb4adff14610506578063715018a61461052f578063718a19621461054657610224565b80633107cd62146103cd57806339764363146103f657806348bf4fcf146104215780634a6413f71461044c578063541039cc1461047557610224565b80630fbfcf37116101f85780630fbfcf37146102cf57806311b5444f146102f85780631ed0c954146103165780632127fe041461035357806323b221a01461039057610224565b8062dde10e1461022957806303fcd9ac1461026657806304c98b2b1461028f5780630ec809a8146102a6575b600080fd5b34801561023557600080fd5b50610250600480360381019061024b9190612f86565b6108f7565b60405161025d9190612fce565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190613073565b610917565b005b34801561029b57600080fd5b506102a461097a565b005b3480156102b257600080fd5b506102cd60048036038101906102c891906130b3565b6109d2565b005b3480156102db57600080fd5b506102f660048036038101906102f191906130e0565b610a1e565b005b610300610aab565b60405161030d9190612fce565b60405180910390f35b34801561032257600080fd5b5061033d600480360381019061033891906130b3565b6112e7565b60405161034a9190612fce565b60405180910390f35b34801561035f57600080fd5b5061037a60048036038101906103759190613120565b611307565b604051610387919061316f565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b29190612f86565b611452565b6040516103c49190612fce565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef919061318a565b6118d3565b005b34801561040257600080fd5b5061040b611b11565b604051610418919061316f565b60405180910390f35b34801561042d57600080fd5b50610436611b17565b604051610443919061316f565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e9190612f86565b611b1d565b005b34801561048157600080fd5b5061049c600480360381019061049791906131dd565b611c40565b6040516104ab9392919061321d565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d69190612f86565b611c77565b005b3480156104e957600080fd5b5061050460048036038101906104ff91906131dd565b611cae565b005b34801561051257600080fd5b5061052d600480360381019061052891906130b3565b611d5b565b005b34801561053b57600080fd5b50610544611e16565b005b34801561055257600080fd5b5061056d60048036038101906105689190613120565b611e2a565b60405161057a919061316f565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a591906131dd565b611e7c565b6040516105b7919061316f565b60405180910390f35b3480156105cc57600080fd5b506105d5611ffb565b6040516105e29190613263565b60405180910390f35b3480156105f757600080fd5b50610600612021565b60405161060d919061316f565b60405180910390f35b34801561062257600080fd5b5061062b612027565b6040516106389190613263565b60405180910390f35b34801561064d57600080fd5b50610656612051565b604051610663919061316f565b60405180910390f35b34801561067857600080fd5b50610693600480360381019061068e91906132e3565b612105565b6040516106a09190612fce565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb9190613330565b6121d9565b005b3480156106de57600080fd5b506106f960048036038101906106f4919061318a565b61232d565b005b34801561070757600080fd5b506107106123e8565b005b34801561071e57600080fd5b50610739600480360381019061073491906131dd565b6124af565b6040516107489392919061321d565b60405180910390f35b34801561075d57600080fd5b5061077860048036038101906107739190612f86565b6124e6565b005b34801561078657600080fd5b506107a1600480360381019061079c9190612f86565b6124f8565b005b3480156107af57600080fd5b506107ca60048036038101906107c591906133ab565b61261a565b005b3480156107d857600080fd5b506107f360048036038101906107ee9190613468565b61286b565b005b34801561080157600080fd5b5061080a612b04565b604051610817919061316f565b60405180910390f35b34801561082c57600080fd5b5061084760048036038101906108429190612f86565b612b0a565b60405161085d9a999897969594939291906134fd565b60405180910390f35b34801561087257600080fd5b5061088d600480360381019061088891906130b3565b612b78565b005b34801561089b57600080fd5b506108b660048036038101906108b19190613120565b612bfb565b6040516108c3919061316f565b60405180910390f35b3480156108d857600080fd5b506108e1612c87565b6040516108ee9190613263565b60405180910390f35b60076020528060005260406000206000915054906101000a900460ff1681565b61091f612cad565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610982612cad565b4260086000600254815260200190815260200160002060000181905550600160086000600254815260200190815260200160002060080160006101000a81548160ff021916908315150217905550565b6109da612cad565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b81600081118015610a3157506002548111155b610a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a67906135f6565b60405180910390fd5b610a78612cad565b816008600085815260200190815260200160002060080160016101000a81548160ff021916908315150217905550505050565b6000600254600081118015610ac257506002548111155b610b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af8906135f6565b60405180910390fd5b600254610b1060025434611e2a565b60086000838152602001908152602001600020600001544210158015610b5d5750600115156008600084815260200190815260200160002060080160009054906101000a900460ff161515145b610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390613662565b60405180910390fd5b600081118015610be3575060086000838152602001908152602001600020600401546008600084815260200190815260200160002060050154610bdf91906136b1565b8111155b610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1990613731565b60405180910390fd5b610c2a612d2b565b6000600354600354610c3c9190613751565b600454610c47612051565b34610c529190613751565b610c5c9190613751565b610c6691906137c2565b9050600860006002548152602001908152602001600020600601548160086000600254815260200190815260200160002060070154610ca591906137f3565b1115610ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdd90613899565b60405180910390fd5b60076000600254815260200190815260200160002060009054906101000a900460ff1615610d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4090613905565b60405180910390fd5b6001151560086000600254815260200190815260200160002060080160009054906101000a900460ff16151514610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac90613971565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006002548152602001908152602001600020600101541015610e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e45906139dd565b60405180910390fd5b6000610e5c60025483612bfb565b9050600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060025481526020019081526020016000206001015481600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600254815260200190815260200160002060020154610f1591906137f3565b1115610f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4d90613a49565b60405180910390fd5b60001515600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610ff457600c54811015610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea90613ab5565b60405180910390fd5b5b80600860006002548152602001908152602001600020600401600082825461101c91906137f3565b9250508190555081600860006002548152602001908152602001600020600701600082825461104b91906137f3565b9250508190555080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600254815260200190815260200160002060020160008282546110b791906137f3565b925050819055506000600a60006110cc612d7a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600254815260200190815260200160002060010154111561119b5780600a6000611130612d7a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006002548152602001908152602001600020600101600082825461118f91906137f3565b92505081905550611233565b6040518060600160405280600081526020018281526020016000815250600a60006111c4612d7a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060025481526020019081526020016000206000820151816000015560208201518160010155604082015181600201559050505b61125f600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634612d82565b600073ffffffffffffffffffffffffffffffffffffffff16600254611282612d7a565b73ffffffffffffffffffffffffffffffffffffffff167f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d368434426040516112cb9392919061321d565b60405180910390a46001955050506112e1612e76565b50505090565b600b6020528060005260406000206000915054906101000a900460ff1681565b60008260008111801561131c57506002548111155b61135b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611352906135f6565b60405180910390fd5b600060086000868152602001908152602001600020600201548461137f9190613751565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114129190613b0e565b600a61141e9190613c6e565b611426612051565b6114309190613751565b6003548261143e9190613751565b61144891906137c2565b9250505092915050565b60008160008111801561146757506002548111155b6114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d906135f6565b60405180910390fd5b60006114b23385611e7c565b9050600081116114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90613d05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f90613d71565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115e39190613263565b602060405180830381865afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116249190613da6565b811115611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90613e45565b60405180910390fd5b600115156008600086815260200190815260200160002060080160019054906101000a900460ff161515146116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c790613eb1565b60405180910390fd5b42600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000018190555080600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868152602001908152602001600020600201600082825461178b91906137f3565b925050819055506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016117f1929190613ed1565b6020604051808303816000875af1158015611810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118349190613f0f565b905080611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d90613f88565b60405180910390fd5b843373ffffffffffffffffffffffffffffffffffffffff167fe49649ad7d04a14b0d2a43dae89f207c0822143ff6f88a6480e88907e4e5c54884426040516118bf929190613fa8565b60405180910390a360019350505050919050565b6118db612cad565b6000811161191e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119159061401d565b60405180910390fd5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206001015411156119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ac90614089565b60405180910390fd5b82600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060000181905550670de0b6b3a764000081611a219190613751565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020600101819055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020600201819055507fe159b20099ce79270264f6e5d73fed96b85c44a1d1ca8cf0a619cd9ece99b391838383604051611b04939291906140a9565b60405180910390a1505050565b60035481565b60045481565b80600081118015611b3057506002548111155b611b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b66906135f6565b60405180910390fd5b611b77612cad565b6007600083815260200190815260200160002060009054906101000a900460ff1615611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf9061412c565b60405180910390fd5b60016007600084815260200190815260200160002060006101000a81548160ff021916908315150217905550817f927e6cd2dce24f32508868820cdc35f09d9de0f4b44e945114110125196fba9f42604051611c34919061316f565b60405180910390a25050565b6009602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154905083565b611c7f612cad565b611cab600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612d82565b50565b611cb6612cad565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611d13929190613ed1565b6020604051808303816000875af1158015611d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d569190613f0f565b505050565b611d63612cad565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc990614198565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e1e612cad565b611e286000612e80565b565b600080600354600354611e3d9190613751565b600454611e48612051565b85611e539190613751565b611e5d9190613751565b611e6791906137c2565b9050611e738482612bfb565b91505092915050565b600081600081118015611e9157506002548111155b611ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec7906135f6565b60405180910390fd5b6000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020604051806060016040529081600082015481526020016001820154815260200160028201548152505090506000816020015111611f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8b90614204565b60405180910390fd5b600081604001518260200151611faa91906136b1565b905060008111611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe690614270565b60405180910390fd5b80935050505092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156120c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e59190614308565b5050509150506402540be400816120fc9190614383565b90508091505090565b600080838390501161214c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214390614447565b60405180910390fd5b60005b838390508110156121ce5761217c8484838181106121705761216f614467565b5b90506020020135611452565b6121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b2906144e2565b60405180910390fd5b80806121c690614502565b91505061214f565b506001905092915050565b846000811180156121ec57506002548111155b61222b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612222906135f6565b60405180910390fd5b612233612cad565b60008511612276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226d90614596565b60405180910390fd5b600083116122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b090614602565b60405180910390fd5b846008600088815260200190815260200160002060020181905550836008600088815260200190815260200160002060030181905550826008600088815260200190815260200160002060050181905550816008600088815260200190815260200160002060060181905550505050505050565b612335612cad565b60008111612378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236f9061401d565b60405180910390fd5b670de0b6b3a76400008161238c9190613751565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060010181905550505050565b6123f0612cad565b600160086000600254815260200190815260200160002060080160006101000a81548160ff021916908315150217905561245f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124569061466e565b60405180910390fd5b4260086000600254815260200190815260200160002060010181905550600060086000600254815260200190815260200160002060080160006101000a81548160ff021916908315150217905550565b600a602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154905083565b6124ee612cad565b80600c8190555050565b8060008111801561250b57506002548111155b61254a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612541906135f6565b60405180910390fd5b612552612cad565b6007600083815260200190815260200160002060009054906101000a900460ff166125b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a9906146da565b60405180910390fd5b60006007600084815260200190815260200160002060006101000a81548160ff021916908315150217905550817ff608654a6d8e1785594639dd55babb61d7ae157382015f904a24224e50333b1d4260405161260e919061316f565b60405180910390a25050565b612622612cad565b60008411612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c90614596565b60405180910390fd5b600082116126a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269f90614602565b60405180910390fd5b6000151560086000600254815260200190815260200160002060080160009054906101000a900460ff16151514612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b90614746565b60405180910390fd5b6002600081548092919061272790614502565b91905055506040518061014001604052806000815260200160008152602001858152602001848152602001600081526020018381526020018281526020016000815260200160001515815260200160001515815250600860006002548152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080160006101000a81548160ff0219169083151502179055506101208201518160080160016101000a81548160ff0219169083151502179055509050506002547f6a00651728a92841411081673eaa4eddbed06d102a590e050c22def40d4dd0b88360008060405161285d939291906147ab565b60405180910390a250505050565b612873612cad565b60005b84849050811015612afc5760006009600087878581811061289a57612899614467565b5b90506020020160208101906128af91906130b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600088815260200190815260200160002060010154111561293f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293690614089565b60405180910390fd5b856009600087878581811061295757612956614467565b5b905060200201602081019061296c91906130b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600088815260200190815260200160002060000181905550670de0b6b3a76400008383838181106129da576129d9614467565b5b905060200201356129eb9190613751565b60096000878785818110612a0257612a01614467565b5b9050602002016020810190612a1791906130b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600088815260200190815260200160002060010181905550600060096000878785818110612a8257612a81614467565b5b9050602002016020810190612a9791906130b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000888152602001908152602001600020600201819055508080612af490614502565b915050612876565b505050505050565b60025481565b60086020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080160009054906101000a900460ff16908060080160019054906101000a900460ff1690508a565b612b80612cad565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be690614854565b60405180910390fd5b612bf881612e80565b50565b600082600081118015612c1057506002548111155b612c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c46906135f6565b60405180910390fd5b600454600860008681526020019081526020016000206002015484612c749190613751565b612c7e91906137c2565b91505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612cb5612d7a565b73ffffffffffffffffffffffffffffffffffffffff16612cd3612027565b73ffffffffffffffffffffffffffffffffffffffff1614612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d20906148c0565b60405180910390fd5b565b600260005403612d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d679061492c565b60405180910390fd5b6002600081905550565b600033905090565b80471015612dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbc90614998565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612deb906149e9565b60006040518083038185875af1925050503d8060008114612e28576040519150601f19603f3d011682016040523d82523d6000602084013e612e2d565b606091505b5050905080612e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6890614a4a565b60405180910390fd5b505050565b6001600081905550565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600080fd5b6000819050919050565b612f6381612f50565b8114612f6e57600080fd5b50565b600081359050612f8081612f5a565b92915050565b600060208284031215612f9c57612f9b612f46565b5b6000612faa84828501612f71565b91505092915050565b60008115159050919050565b612fc881612fb3565b82525050565b6000602082019050612fe36000830184612fbf565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061301482612fe9565b9050919050565b61302481613009565b811461302f57600080fd5b50565b6000813590506130418161301b565b92915050565b61305081612fb3565b811461305b57600080fd5b50565b60008135905061306d81613047565b92915050565b6000806040838503121561308a57613089612f46565b5b600061309885828601613032565b92505060206130a98582860161305e565b9150509250929050565b6000602082840312156130c9576130c8612f46565b5b60006130d784828501613032565b91505092915050565b600080604083850312156130f7576130f6612f46565b5b600061310585828601612f71565b92505060206131168582860161305e565b9150509250929050565b6000806040838503121561313757613136612f46565b5b600061314585828601612f71565b925050602061315685828601612f71565b9150509250929050565b61316981612f50565b82525050565b60006020820190506131846000830184613160565b92915050565b6000806000606084860312156131a3576131a2612f46565b5b60006131b186828701612f71565b93505060206131c286828701613032565b92505060406131d386828701612f71565b9150509250925092565b600080604083850312156131f4576131f3612f46565b5b600061320285828601613032565b925050602061321385828601612f71565b9150509250929050565b60006060820190506132326000830186613160565b61323f6020830185613160565b61324c6040830184613160565b949350505050565b61325d81613009565b82525050565b60006020820190506132786000830184613254565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126132a3576132a261327e565b5b8235905067ffffffffffffffff8111156132c0576132bf613283565b5b6020830191508360208202830111156132dc576132db613288565b5b9250929050565b600080602083850312156132fa576132f9612f46565b5b600083013567ffffffffffffffff81111561331857613317612f4b565b5b6133248582860161328d565b92509250509250929050565b600080600080600060a0868803121561334c5761334b612f46565b5b600061335a88828901612f71565b955050602061336b88828901612f71565b945050604061337c88828901612f71565b935050606061338d88828901612f71565b925050608061339e88828901612f71565b9150509295509295909350565b600080600080608085870312156133c5576133c4612f46565b5b60006133d387828801612f71565b94505060206133e487828801612f71565b93505060406133f587828801612f71565b925050606061340687828801612f71565b91505092959194509250565b60008083601f8401126134285761342761327e565b5b8235905067ffffffffffffffff81111561344557613444613283565b5b60208301915083602082028301111561346157613460613288565b5b9250929050565b60008060008060006060868803121561348457613483612f46565b5b600061349288828901612f71565b955050602086013567ffffffffffffffff8111156134b3576134b2612f4b565b5b6134bf88828901613412565b9450945050604086013567ffffffffffffffff8111156134e2576134e1612f4b565b5b6134ee8882890161328d565b92509250509295509295909350565b600061014082019050613513600083018d613160565b613520602083018c613160565b61352d604083018b613160565b61353a606083018a613160565b6135476080830189613160565b61355460a0830188613160565b61356160c0830187613160565b61356e60e0830186613160565b61357c610100830185612fbf565b61358a610120830184612fbf565b9b9a5050505050505050505050565b600082825260208201905092915050565b7f496e76616c69642070726573616c652069640000000000000000000000000000600082015250565b60006135e0601283613599565b91506135eb826135aa565b602082019050919050565b6000602082019050818103600083015261360f816135d3565b9050919050565b7f496e76616c69642074696d6520666f7220627579696e67000000000000000000600082015250565b600061364c601783613599565b915061365782613616565b602082019050919050565b6000602082019050818103600083015261367b8161363f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136bc82612f50565b91506136c783612f50565b92508282039050818111156136df576136de613682565b5b92915050565b7f496e76616c69642073616c6520616d6f756e7400000000000000000000000000600082015250565b600061371b601383613599565b9150613726826136e5565b602082019050919050565b6000602082019050818103600083015261374a8161370e565b9050919050565b600061375c82612f50565b915061376783612f50565b925082820261377581612f50565b9150828204841483151761378c5761378b613682565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137cd82612f50565b91506137d883612f50565b9250826137e8576137e7613793565b5b828204905092915050565b60006137fe82612f50565b915061380983612f50565b925082820190508082111561382157613820613682565b5b92915050565b7f416d6f756e742073686f756c64206265206c657373207468616e206c6566744860008201527f6172646361700000000000000000000000000000000000000000000000000000602082015250565b6000613883602683613599565b915061388e82613827565b604082019050919050565b600060208201905081810360008301526138b281613876565b9050919050565b7f50726573616c6520706175736564000000000000000000000000000000000000600082015250565b60006138ef600e83613599565b91506138fa826138b9565b602082019050919050565b6000602082019050818103600083015261391e816138e2565b9050919050565b7f50726573616c65206973206e6f74206163746976652079657400000000000000600082015250565b600061395b601983613599565b915061396682613925565b602082019050919050565b6000602082019050818103600083015261398a8161394e565b9050919050565b7f796f75722077616c6c6574206e6f742077686974656c69737465642e00000000600082015250565b60006139c7601c83613599565b91506139d282613991565b602082019050919050565b600060208201905081810360008301526139f6816139ba565b9050919050565b7f6d6178696d756d2062757920616d6f756e7420726561636865642e0000000000600082015250565b6000613a33601b83613599565b9150613a3e826139fd565b602082019050919050565b60006020820190508181036000830152613a6281613a26565b9050919050565b7f496e73756666696369656e7420616d6f756e7421000000000000000000000000600082015250565b6000613a9f601483613599565b9150613aaa82613a69565b602082019050919050565b60006020820190508181036000830152613ace81613a92565b9050919050565b600060ff82169050919050565b613aeb81613ad5565b8114613af657600080fd5b50565b600081519050613b0881613ae2565b92915050565b600060208284031215613b2457613b23612f46565b5b6000613b3284828501613af9565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115613b9257808604811115613b6e57613b6d613682565b5b6001851615613b7d5780820291505b8081029050613b8b85613b3b565b9450613b52565b94509492505050565b600082613bab5760019050613c67565b81613bb95760009050613c67565b8160018114613bcf5760028114613bd957613c08565b6001915050613c67565b60ff841115613beb57613bea613682565b5b8360020a915084821115613c0257613c01613682565b5b50613c67565b5060208310610133831016604e8410600b8410161715613c3d5782820a905083811115613c3857613c37613682565b5b613c67565b613c4a8484846001613b48565b92509050818404811115613c6157613c60613682565b5b81810290505b9392505050565b6000613c7982612f50565b9150613c8483613ad5565b9250613cb17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b9b565b905092915050565b7f5a65726f20636c61696d20616d6f756e74000000000000000000000000000000600082015250565b6000613cef601183613599565b9150613cfa82613cb9565b602082019050919050565b60006020820190508181036000830152613d1e81613ce2565b9050919050565b7f50726573616c6520746f6b656e2061646472657373206e6f7420736574000000600082015250565b6000613d5b601d83613599565b9150613d6682613d25565b602082019050919050565b60006020820190508181036000830152613d8a81613d4e565b9050919050565b600081519050613da081612f5a565b92915050565b600060208284031215613dbc57613dbb612f46565b5b6000613dca84828501613d91565b91505092915050565b7f4e6f7420656e6f75676820746f6b656e7320696e2074686520636f6e7472616360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e2f602183613599565b9150613e3a82613dd3565b604082019050919050565b60006020820190508181036000830152613e5e81613e22565b9050919050565b7f436c61696d206973206e6f7420656e61626c6500000000000000000000000000600082015250565b6000613e9b601383613599565b9150613ea682613e65565b602082019050919050565b60006020820190508181036000830152613eca81613e8e565b9050919050565b6000604082019050613ee66000830185613254565b613ef36020830184613160565b9392505050565b600081519050613f0981613047565b92915050565b600060208284031215613f2557613f24612f46565b5b6000613f3384828501613efa565b91505092915050565b7f546f6b656e207472616e73666572206661696c65640000000000000000000000600082015250565b6000613f72601583613599565b9150613f7d82613f3c565b602082019050919050565b60006020820190508181036000830152613fa181613f65565b9050919050565b6000604082019050613fbd6000830185613160565b613fca6020830184613160565b9392505050565b7f5a65726f2062757920616d6f756e740000000000000000000000000000000000600082015250565b6000614007600f83613599565b915061401282613fd1565b602082019050919050565b6000602082019050818103600083015261403681613ffa565b9050919050565b7f77616c6c657420616c72656164792061646465642e0000000000000000000000600082015250565b6000614073601583613599565b915061407e8261403d565b602082019050919050565b600060208201905081810360008301526140a281614066565b9050919050565b60006060820190506140be6000830186613160565b6140cb6020830185613254565b6140d86040830184613160565b949350505050565b7f416c726561647920706175736564000000000000000000000000000000000000600082015250565b6000614116600e83613599565b9150614121826140e0565b602082019050919050565b6000602082019050818103600083015261414581614109565b9050919050565b7f496e76616c696420706172616d65746572730000000000000000000000000000600082015250565b6000614182601283613599565b915061418d8261414c565b602082019050919050565b600060208201905081810360008301526141b181614175565b9050919050565b7f4e6f7468696e6720746f20636c61696d00000000000000000000000000000000600082015250565b60006141ee601083613599565b91506141f9826141b8565b602082019050919050565b6000602082019050818103600083015261421d816141e1565b9050919050565b7f416c726561647920636c61696d65640000000000000000000000000000000000600082015250565b600061425a600f83613599565b915061426582614224565b602082019050919050565b600060208201905081810360008301526142898161424d565b9050919050565b600069ffffffffffffffffffff82169050919050565b6142af81614290565b81146142ba57600080fd5b50565b6000815190506142cc816142a6565b92915050565b6000819050919050565b6142e5816142d2565b81146142f057600080fd5b50565b600081519050614302816142dc565b92915050565b600080600080600060a0868803121561432457614323612f46565b5b6000614332888289016142bd565b9550506020614343888289016142f3565b945050604061435488828901613d91565b935050606061436588828901613d91565b9250506080614376888289016142bd565b9150509295509295909350565b600061438e826142d2565b9150614399836142d2565b92508282026143a7816142d2565b91507f800000000000000000000000000000000000000000000000000000000000000084146000841216156143df576143de613682565b5b82820584148315176143f4576143f3613682565b5b5092915050565b7f5a65726f204944206c656e677468000000000000000000000000000000000000600082015250565b6000614431600e83613599565b915061443c826143fb565b602082019050919050565b6000602082019050818103600083015261446081614424565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f436c61696d206661696c65640000000000000000000000000000000000000000600082015250565b60006144cc600c83613599565b91506144d782614496565b602082019050919050565b600060208201905081810360008301526144fb816144bf565b9050919050565b600061450d82612f50565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361453f5761453e613682565b5b600182019050919050565b7f5a65726f20707269636500000000000000000000000000000000000000000000600082015250565b6000614580600a83613599565b915061458b8261454a565b602082019050919050565b600060208201905081810360008301526145af81614573565b9050919050565b7f5a65726f20746f6b656e7320746f2073656c6c00000000000000000000000000600082015250565b60006145ec601383613599565b91506145f7826145b6565b602082019050919050565b6000602082019050818103600083015261461b816145df565b9050919050565b7f546869732070726573616c6520697320616c726561647920496e616374697665600082015250565b6000614658602083613599565b915061466382614622565b602082019050919050565b600060208201905081810360008301526146878161464b565b9050919050565b7f4e6f742070617573656400000000000000000000000000000000000000000000600082015250565b60006146c4600a83613599565b91506146cf8261468e565b602082019050919050565b600060208201905081810360008301526146f3816146b7565b9050919050565b7f50726576696f75732053616c6520697320416374697665000000000000000000600082015250565b6000614730601783613599565b915061473b826146fa565b602082019050919050565b6000602082019050818103600083015261475f81614723565b9050919050565b6000819050919050565b6000819050919050565b600061479561479061478b84614766565b614770565b612f50565b9050919050565b6147a58161477a565b82525050565b60006060820190506147c06000830186613160565b6147cd602083018561479c565b6147da604083018461479c565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061483e602683613599565b9150614849826147e2565b604082019050919050565b6000602082019050818103600083015261486d81614831565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148aa602083613599565b91506148b582614874565b602082019050919050565b600060208201905081810360008301526148d98161489d565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614916601f83613599565b9150614921826148e0565b602082019050919050565b6000602082019050818103600083015261494581614909565b9050919050565b7f4c6f772062616c616e6365000000000000000000000000000000000000000000600082015250565b6000614982600b83613599565b915061498d8261494c565b602082019050919050565b600060208201905081810360008301526149b181614975565b9050919050565b600081905092915050565b50565b60006149d36000836149b8565b91506149de826149c3565b600082019050919050565b60006149f4826149c6565b9150819050919050565b7f455448205061796d656e74206661696c65640000000000000000000000000000600082015250565b6000614a34601283613599565b9150614a3f826149fe565b602082019050919050565b60006020820190508181036000830152614a6381614a27565b905091905056fea26469706673582212204b1a7c47068e63a2a194d9494a735107d2f74a5b9d722c06a78bf7e9c35d4e5364736f6c63430008130033
Deployed Bytecode
0x6080604052600436106102245760003560e01c806379b8d93811610123578063b04c7346116100ab578063e18e84f91161006f578063e18e84f9146107f5578063e6ab143414610820578063f2fde38b14610866578063f309fed91461088f578063fb4aa0a1146108cc57610224565b8063b04c734614610712578063cd1704a814610751578063d01608c11461077a578063d099850a146107a3578063dd884883146107cc57610224565b80638e15f473116100f25780638e15f473146106415780639051cce91461066c5780639752f3cb146106a95780639ea7d61d146106d2578063a43be57b146106fb57610224565b806379b8d93814610583578063833cde52146105c05780638d79e66d146105eb5780638da5cb5b1461061657610224565b80633107cd62116101b1578063582b572311610175578063582b5723146104b4578063680f2e4f146104dd5780636fb4adff14610506578063715018a61461052f578063718a19621461054657610224565b80633107cd62146103cd57806339764363146103f657806348bf4fcf146104215780634a6413f71461044c578063541039cc1461047557610224565b80630fbfcf37116101f85780630fbfcf37146102cf57806311b5444f146102f85780631ed0c954146103165780632127fe041461035357806323b221a01461039057610224565b8062dde10e1461022957806303fcd9ac1461026657806304c98b2b1461028f5780630ec809a8146102a6575b600080fd5b34801561023557600080fd5b50610250600480360381019061024b9190612f86565b6108f7565b60405161025d9190612fce565b60405180910390f35b34801561027257600080fd5b5061028d60048036038101906102889190613073565b610917565b005b34801561029b57600080fd5b506102a461097a565b005b3480156102b257600080fd5b506102cd60048036038101906102c891906130b3565b6109d2565b005b3480156102db57600080fd5b506102f660048036038101906102f191906130e0565b610a1e565b005b610300610aab565b60405161030d9190612fce565b60405180910390f35b34801561032257600080fd5b5061033d600480360381019061033891906130b3565b6112e7565b60405161034a9190612fce565b60405180910390f35b34801561035f57600080fd5b5061037a60048036038101906103759190613120565b611307565b604051610387919061316f565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b29190612f86565b611452565b6040516103c49190612fce565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef919061318a565b6118d3565b005b34801561040257600080fd5b5061040b611b11565b604051610418919061316f565b60405180910390f35b34801561042d57600080fd5b50610436611b17565b604051610443919061316f565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e9190612f86565b611b1d565b005b34801561048157600080fd5b5061049c600480360381019061049791906131dd565b611c40565b6040516104ab9392919061321d565b60405180910390f35b3480156104c057600080fd5b506104db60048036038101906104d69190612f86565b611c77565b005b3480156104e957600080fd5b5061050460048036038101906104ff91906131dd565b611cae565b005b34801561051257600080fd5b5061052d600480360381019061052891906130b3565b611d5b565b005b34801561053b57600080fd5b50610544611e16565b005b34801561055257600080fd5b5061056d60048036038101906105689190613120565b611e2a565b60405161057a919061316f565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a591906131dd565b611e7c565b6040516105b7919061316f565b60405180910390f35b3480156105cc57600080fd5b506105d5611ffb565b6040516105e29190613263565b60405180910390f35b3480156105f757600080fd5b50610600612021565b60405161060d919061316f565b60405180910390f35b34801561062257600080fd5b5061062b612027565b6040516106389190613263565b60405180910390f35b34801561064d57600080fd5b50610656612051565b604051610663919061316f565b60405180910390f35b34801561067857600080fd5b50610693600480360381019061068e91906132e3565b612105565b6040516106a09190612fce565b60405180910390f35b3480156106b557600080fd5b506106d060048036038101906106cb9190613330565b6121d9565b005b3480156106de57600080fd5b506106f960048036038101906106f4919061318a565b61232d565b005b34801561070757600080fd5b506107106123e8565b005b34801561071e57600080fd5b50610739600480360381019061073491906131dd565b6124af565b6040516107489392919061321d565b60405180910390f35b34801561075d57600080fd5b5061077860048036038101906107739190612f86565b6124e6565b005b34801561078657600080fd5b506107a1600480360381019061079c9190612f86565b6124f8565b005b3480156107af57600080fd5b506107ca60048036038101906107c591906133ab565b61261a565b005b3480156107d857600080fd5b506107f360048036038101906107ee9190613468565b61286b565b005b34801561080157600080fd5b5061080a612b04565b604051610817919061316f565b60405180910390f35b34801561082c57600080fd5b5061084760048036038101906108429190612f86565b612b0a565b60405161085d9a999897969594939291906134fd565b60405180910390f35b34801561087257600080fd5b5061088d600480360381019061088891906130b3565b612b78565b005b34801561089b57600080fd5b506108b660048036038101906108b19190613120565b612bfb565b6040516108c3919061316f565b60405180910390f35b3480156108d857600080fd5b506108e1612c87565b6040516108ee9190613263565b60405180910390f35b60076020528060005260406000206000915054906101000a900460ff1681565b61091f612cad565b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b610982612cad565b4260086000600254815260200190815260200160002060000181905550600160086000600254815260200190815260200160002060080160006101000a81548160ff021916908315150217905550565b6109da612cad565b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b81600081118015610a3157506002548111155b610a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a67906135f6565b60405180910390fd5b610a78612cad565b816008600085815260200190815260200160002060080160016101000a81548160ff021916908315150217905550505050565b6000600254600081118015610ac257506002548111155b610b01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af8906135f6565b60405180910390fd5b600254610b1060025434611e2a565b60086000838152602001908152602001600020600001544210158015610b5d5750600115156008600084815260200190815260200160002060080160009054906101000a900460ff161515145b610b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9390613662565b60405180910390fd5b600081118015610be3575060086000838152602001908152602001600020600401546008600084815260200190815260200160002060050154610bdf91906136b1565b8111155b610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1990613731565b60405180910390fd5b610c2a612d2b565b6000600354600354610c3c9190613751565b600454610c47612051565b34610c529190613751565b610c5c9190613751565b610c6691906137c2565b9050600860006002548152602001908152602001600020600601548160086000600254815260200190815260200160002060070154610ca591906137f3565b1115610ce6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cdd90613899565b60405180910390fd5b60076000600254815260200190815260200160002060009054906101000a900460ff1615610d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4090613905565b60405180910390fd5b6001151560086000600254815260200190815260200160002060080160009054906101000a900460ff16151514610db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dac90613971565b60405180910390fd5b6000600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006002548152602001908152602001600020600101541015610e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e45906139dd565b60405180910390fd5b6000610e5c60025483612bfb565b9050600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060025481526020019081526020016000206001015481600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600254815260200190815260200160002060020154610f1591906137f3565b1115610f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4d90613a49565b60405180910390fd5b60001515600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151503610ff457600c54811015610ff3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fea90613ab5565b60405180910390fd5b5b80600860006002548152602001908152602001600020600401600082825461101c91906137f3565b9250508190555081600860006002548152602001908152602001600020600701600082825461104b91906137f3565b9250508190555080600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600254815260200190815260200160002060020160008282546110b791906137f3565b925050819055506000600a60006110cc612d7a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000600254815260200190815260200160002060010154111561119b5780600a6000611130612d7a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006002548152602001908152602001600020600101600082825461118f91906137f3565b92505081905550611233565b6040518060600160405280600081526020018281526020016000815250600a60006111c4612d7a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600060025481526020019081526020016000206000820151816000015560208201518160010155604082015181600201559050505b61125f600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1634612d82565b600073ffffffffffffffffffffffffffffffffffffffff16600254611282612d7a565b73ffffffffffffffffffffffffffffffffffffffff167f4d8aead3491b7eba4b5c7a65fc17e493b9e63f9e433522fc5f6a85a168fc9d368434426040516112cb9392919061321d565b60405180910390a46001955050506112e1612e76565b50505090565b600b6020528060005260406000206000915054906101000a900460ff1681565b60008260008111801561131c57506002548111155b61135b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611352906135f6565b60405180910390fd5b600060086000868152602001908152602001600020600201548461137f9190613751565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114129190613b0e565b600a61141e9190613c6e565b611426612051565b6114309190613751565b6003548261143e9190613751565b61144891906137c2565b9250505092915050565b60008160008111801561146757506002548111155b6114a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149d906135f6565b60405180910390fd5b60006114b23385611e7c565b9050600081116114f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ee90613d05565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603611588576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157f90613d71565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016115e39190613263565b602060405180830381865afa158015611600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116249190613da6565b811115611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90613e45565b60405180910390fd5b600115156008600086815260200190815260200160002060080160019054906101000a900460ff161515146116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c790613eb1565b60405180910390fd5b42600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008681526020019081526020016000206000018190555080600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000868152602001908152602001600020600201600082825461178b91906137f3565b925050819055506000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b81526004016117f1929190613ed1565b6020604051808303816000875af1158015611810573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118349190613f0f565b905080611876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186d90613f88565b60405180910390fd5b843373ffffffffffffffffffffffffffffffffffffffff167fe49649ad7d04a14b0d2a43dae89f207c0822143ff6f88a6480e88907e4e5c54884426040516118bf929190613fa8565b60405180910390a360019350505050919050565b6118db612cad565b6000811161191e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119159061401d565b60405180910390fd5b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008581526020019081526020016000206001015411156119b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ac90614089565b60405180910390fd5b82600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060000181905550670de0b6b3a764000081611a219190613751565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020600101819055506000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020600201819055507fe159b20099ce79270264f6e5d73fed96b85c44a1d1ca8cf0a619cd9ece99b391838383604051611b04939291906140a9565b60405180910390a1505050565b60035481565b60045481565b80600081118015611b3057506002548111155b611b6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b66906135f6565b60405180910390fd5b611b77612cad565b6007600083815260200190815260200160002060009054906101000a900460ff1615611bd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bcf9061412c565b60405180910390fd5b60016007600084815260200190815260200160002060006101000a81548160ff021916908315150217905550817f927e6cd2dce24f32508868820cdc35f09d9de0f4b44e945114110125196fba9f42604051611c34919061316f565b60405180910390a25050565b6009602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154905083565b611c7f612cad565b611cab600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612d82565b50565b611cb6612cad565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401611d13929190613ed1565b6020604051808303816000875af1158015611d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d569190613f0f565b505050565b611d63612cad565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc990614198565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e1e612cad565b611e286000612e80565b565b600080600354600354611e3d9190613751565b600454611e48612051565b85611e539190613751565b611e5d9190613751565b611e6791906137c2565b9050611e738482612bfb565b91505092915050565b600081600081118015611e9157506002548111155b611ed0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec7906135f6565b60405180910390fd5b6000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000858152602001908152602001600020604051806060016040529081600082015481526020016001820154815260200160028201548152505090506000816020015111611f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8b90614204565b60405180910390fd5b600081604001518260200151611faa91906136b1565b905060008111611fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe690614270565b60405180910390fd5b80935050505092915050565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156120c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120e59190614308565b5050509150506402540be400816120fc9190614383565b90508091505090565b600080838390501161214c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214390614447565b60405180910390fd5b60005b838390508110156121ce5761217c8484838181106121705761216f614467565b5b90506020020135611452565b6121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b2906144e2565b60405180910390fd5b80806121c690614502565b91505061214f565b506001905092915050565b846000811180156121ec57506002548111155b61222b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612222906135f6565b60405180910390fd5b612233612cad565b60008511612276576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226d90614596565b60405180910390fd5b600083116122b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b090614602565b60405180910390fd5b846008600088815260200190815260200160002060020181905550836008600088815260200190815260200160002060030181905550826008600088815260200190815260200160002060050181905550816008600088815260200190815260200160002060060181905550505050505050565b612335612cad565b60008111612378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236f9061401d565b60405180910390fd5b670de0b6b3a76400008161238c9190613751565b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600085815260200190815260200160002060010181905550505050565b6123f0612cad565b600160086000600254815260200190815260200160002060080160006101000a81548160ff021916908315150217905561245f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124569061466e565b60405180910390fd5b4260086000600254815260200190815260200160002060010181905550600060086000600254815260200190815260200160002060080160006101000a81548160ff021916908315150217905550565b600a602052816000526040600020602052806000526040600020600091509150508060000154908060010154908060020154905083565b6124ee612cad565b80600c8190555050565b8060008111801561250b57506002548111155b61254a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612541906135f6565b60405180910390fd5b612552612cad565b6007600083815260200190815260200160002060009054906101000a900460ff166125b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a9906146da565b60405180910390fd5b60006007600084815260200190815260200160002060006101000a81548160ff021916908315150217905550817ff608654a6d8e1785594639dd55babb61d7ae157382015f904a24224e50333b1d4260405161260e919061316f565b60405180910390a25050565b612622612cad565b60008411612665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265c90614596565b60405180910390fd5b600082116126a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269f90614602565b60405180910390fd5b6000151560086000600254815260200190815260200160002060080160009054906101000a900460ff16151514612714576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270b90614746565b60405180910390fd5b6002600081548092919061272790614502565b91905055506040518061014001604052806000815260200160008152602001858152602001848152602001600081526020018381526020018281526020016000815260200160001515815260200160001515815250600860006002548152602001908152602001600020600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701556101008201518160080160006101000a81548160ff0219169083151502179055506101208201518160080160016101000a81548160ff0219169083151502179055509050506002547f6a00651728a92841411081673eaa4eddbed06d102a590e050c22def40d4dd0b88360008060405161285d939291906147ab565b60405180910390a250505050565b612873612cad565b60005b84849050811015612afc5760006009600087878581811061289a57612899614467565b5b90506020020160208101906128af91906130b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600088815260200190815260200160002060010154111561293f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293690614089565b60405180910390fd5b856009600087878581811061295757612956614467565b5b905060200201602081019061296c91906130b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600088815260200190815260200160002060000181905550670de0b6b3a76400008383838181106129da576129d9614467565b5b905060200201356129eb9190613751565b60096000878785818110612a0257612a01614467565b5b9050602002016020810190612a1791906130b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600088815260200190815260200160002060010181905550600060096000878785818110612a8257612a81614467565b5b9050602002016020810190612a9791906130b3565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000888152602001908152602001600020600201819055508080612af490614502565b915050612876565b505050505050565b60025481565b60086020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154908060080160009054906101000a900460ff16908060080160019054906101000a900460ff1690508a565b612b80612cad565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612be690614854565b60405180910390fd5b612bf881612e80565b50565b600082600081118015612c1057506002548111155b612c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c46906135f6565b60405180910390fd5b600454600860008681526020019081526020016000206002015484612c749190613751565b612c7e91906137c2565b91505092915050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612cb5612d7a565b73ffffffffffffffffffffffffffffffffffffffff16612cd3612027565b73ffffffffffffffffffffffffffffffffffffffff1614612d29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d20906148c0565b60405180910390fd5b565b600260005403612d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d679061492c565b60405180910390fd5b6002600081905550565b600033905090565b80471015612dc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dbc90614998565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612deb906149e9565b60006040518083038185875af1925050503d8060008114612e28576040519150601f19603f3d011682016040523d82523d6000602084013e612e2d565b606091505b5050905080612e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6890614a4a565b60405180910390fd5b505050565b6001600081905550565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600080fd5b6000819050919050565b612f6381612f50565b8114612f6e57600080fd5b50565b600081359050612f8081612f5a565b92915050565b600060208284031215612f9c57612f9b612f46565b5b6000612faa84828501612f71565b91505092915050565b60008115159050919050565b612fc881612fb3565b82525050565b6000602082019050612fe36000830184612fbf565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061301482612fe9565b9050919050565b61302481613009565b811461302f57600080fd5b50565b6000813590506130418161301b565b92915050565b61305081612fb3565b811461305b57600080fd5b50565b60008135905061306d81613047565b92915050565b6000806040838503121561308a57613089612f46565b5b600061309885828601613032565b92505060206130a98582860161305e565b9150509250929050565b6000602082840312156130c9576130c8612f46565b5b60006130d784828501613032565b91505092915050565b600080604083850312156130f7576130f6612f46565b5b600061310585828601612f71565b92505060206131168582860161305e565b9150509250929050565b6000806040838503121561313757613136612f46565b5b600061314585828601612f71565b925050602061315685828601612f71565b9150509250929050565b61316981612f50565b82525050565b60006020820190506131846000830184613160565b92915050565b6000806000606084860312156131a3576131a2612f46565b5b60006131b186828701612f71565b93505060206131c286828701613032565b92505060406131d386828701612f71565b9150509250925092565b600080604083850312156131f4576131f3612f46565b5b600061320285828601613032565b925050602061321385828601612f71565b9150509250929050565b60006060820190506132326000830186613160565b61323f6020830185613160565b61324c6040830184613160565b949350505050565b61325d81613009565b82525050565b60006020820190506132786000830184613254565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126132a3576132a261327e565b5b8235905067ffffffffffffffff8111156132c0576132bf613283565b5b6020830191508360208202830111156132dc576132db613288565b5b9250929050565b600080602083850312156132fa576132f9612f46565b5b600083013567ffffffffffffffff81111561331857613317612f4b565b5b6133248582860161328d565b92509250509250929050565b600080600080600060a0868803121561334c5761334b612f46565b5b600061335a88828901612f71565b955050602061336b88828901612f71565b945050604061337c88828901612f71565b935050606061338d88828901612f71565b925050608061339e88828901612f71565b9150509295509295909350565b600080600080608085870312156133c5576133c4612f46565b5b60006133d387828801612f71565b94505060206133e487828801612f71565b93505060406133f587828801612f71565b925050606061340687828801612f71565b91505092959194509250565b60008083601f8401126134285761342761327e565b5b8235905067ffffffffffffffff81111561344557613444613283565b5b60208301915083602082028301111561346157613460613288565b5b9250929050565b60008060008060006060868803121561348457613483612f46565b5b600061349288828901612f71565b955050602086013567ffffffffffffffff8111156134b3576134b2612f4b565b5b6134bf88828901613412565b9450945050604086013567ffffffffffffffff8111156134e2576134e1612f4b565b5b6134ee8882890161328d565b92509250509295509295909350565b600061014082019050613513600083018d613160565b613520602083018c613160565b61352d604083018b613160565b61353a606083018a613160565b6135476080830189613160565b61355460a0830188613160565b61356160c0830187613160565b61356e60e0830186613160565b61357c610100830185612fbf565b61358a610120830184612fbf565b9b9a5050505050505050505050565b600082825260208201905092915050565b7f496e76616c69642070726573616c652069640000000000000000000000000000600082015250565b60006135e0601283613599565b91506135eb826135aa565b602082019050919050565b6000602082019050818103600083015261360f816135d3565b9050919050565b7f496e76616c69642074696d6520666f7220627579696e67000000000000000000600082015250565b600061364c601783613599565b915061365782613616565b602082019050919050565b6000602082019050818103600083015261367b8161363f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136bc82612f50565b91506136c783612f50565b92508282039050818111156136df576136de613682565b5b92915050565b7f496e76616c69642073616c6520616d6f756e7400000000000000000000000000600082015250565b600061371b601383613599565b9150613726826136e5565b602082019050919050565b6000602082019050818103600083015261374a8161370e565b9050919050565b600061375c82612f50565b915061376783612f50565b925082820261377581612f50565b9150828204841483151761378c5761378b613682565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006137cd82612f50565b91506137d883612f50565b9250826137e8576137e7613793565b5b828204905092915050565b60006137fe82612f50565b915061380983612f50565b925082820190508082111561382157613820613682565b5b92915050565b7f416d6f756e742073686f756c64206265206c657373207468616e206c6566744860008201527f6172646361700000000000000000000000000000000000000000000000000000602082015250565b6000613883602683613599565b915061388e82613827565b604082019050919050565b600060208201905081810360008301526138b281613876565b9050919050565b7f50726573616c6520706175736564000000000000000000000000000000000000600082015250565b60006138ef600e83613599565b91506138fa826138b9565b602082019050919050565b6000602082019050818103600083015261391e816138e2565b9050919050565b7f50726573616c65206973206e6f74206163746976652079657400000000000000600082015250565b600061395b601983613599565b915061396682613925565b602082019050919050565b6000602082019050818103600083015261398a8161394e565b9050919050565b7f796f75722077616c6c6574206e6f742077686974656c69737465642e00000000600082015250565b60006139c7601c83613599565b91506139d282613991565b602082019050919050565b600060208201905081810360008301526139f6816139ba565b9050919050565b7f6d6178696d756d2062757920616d6f756e7420726561636865642e0000000000600082015250565b6000613a33601b83613599565b9150613a3e826139fd565b602082019050919050565b60006020820190508181036000830152613a6281613a26565b9050919050565b7f496e73756666696369656e7420616d6f756e7421000000000000000000000000600082015250565b6000613a9f601483613599565b9150613aaa82613a69565b602082019050919050565b60006020820190508181036000830152613ace81613a92565b9050919050565b600060ff82169050919050565b613aeb81613ad5565b8114613af657600080fd5b50565b600081519050613b0881613ae2565b92915050565b600060208284031215613b2457613b23612f46565b5b6000613b3284828501613af9565b91505092915050565b60008160011c9050919050565b6000808291508390505b6001851115613b9257808604811115613b6e57613b6d613682565b5b6001851615613b7d5780820291505b8081029050613b8b85613b3b565b9450613b52565b94509492505050565b600082613bab5760019050613c67565b81613bb95760009050613c67565b8160018114613bcf5760028114613bd957613c08565b6001915050613c67565b60ff841115613beb57613bea613682565b5b8360020a915084821115613c0257613c01613682565b5b50613c67565b5060208310610133831016604e8410600b8410161715613c3d5782820a905083811115613c3857613c37613682565b5b613c67565b613c4a8484846001613b48565b92509050818404811115613c6157613c60613682565b5b81810290505b9392505050565b6000613c7982612f50565b9150613c8483613ad5565b9250613cb17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613b9b565b905092915050565b7f5a65726f20636c61696d20616d6f756e74000000000000000000000000000000600082015250565b6000613cef601183613599565b9150613cfa82613cb9565b602082019050919050565b60006020820190508181036000830152613d1e81613ce2565b9050919050565b7f50726573616c6520746f6b656e2061646472657373206e6f7420736574000000600082015250565b6000613d5b601d83613599565b9150613d6682613d25565b602082019050919050565b60006020820190508181036000830152613d8a81613d4e565b9050919050565b600081519050613da081612f5a565b92915050565b600060208284031215613dbc57613dbb612f46565b5b6000613dca84828501613d91565b91505092915050565b7f4e6f7420656e6f75676820746f6b656e7320696e2074686520636f6e7472616360008201527f7400000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e2f602183613599565b9150613e3a82613dd3565b604082019050919050565b60006020820190508181036000830152613e5e81613e22565b9050919050565b7f436c61696d206973206e6f7420656e61626c6500000000000000000000000000600082015250565b6000613e9b601383613599565b9150613ea682613e65565b602082019050919050565b60006020820190508181036000830152613eca81613e8e565b9050919050565b6000604082019050613ee66000830185613254565b613ef36020830184613160565b9392505050565b600081519050613f0981613047565b92915050565b600060208284031215613f2557613f24612f46565b5b6000613f3384828501613efa565b91505092915050565b7f546f6b656e207472616e73666572206661696c65640000000000000000000000600082015250565b6000613f72601583613599565b9150613f7d82613f3c565b602082019050919050565b60006020820190508181036000830152613fa181613f65565b9050919050565b6000604082019050613fbd6000830185613160565b613fca6020830184613160565b9392505050565b7f5a65726f2062757920616d6f756e740000000000000000000000000000000000600082015250565b6000614007600f83613599565b915061401282613fd1565b602082019050919050565b6000602082019050818103600083015261403681613ffa565b9050919050565b7f77616c6c657420616c72656164792061646465642e0000000000000000000000600082015250565b6000614073601583613599565b915061407e8261403d565b602082019050919050565b600060208201905081810360008301526140a281614066565b9050919050565b60006060820190506140be6000830186613160565b6140cb6020830185613254565b6140d86040830184613160565b949350505050565b7f416c726561647920706175736564000000000000000000000000000000000000600082015250565b6000614116600e83613599565b9150614121826140e0565b602082019050919050565b6000602082019050818103600083015261414581614109565b9050919050565b7f496e76616c696420706172616d65746572730000000000000000000000000000600082015250565b6000614182601283613599565b915061418d8261414c565b602082019050919050565b600060208201905081810360008301526141b181614175565b9050919050565b7f4e6f7468696e6720746f20636c61696d00000000000000000000000000000000600082015250565b60006141ee601083613599565b91506141f9826141b8565b602082019050919050565b6000602082019050818103600083015261421d816141e1565b9050919050565b7f416c726561647920636c61696d65640000000000000000000000000000000000600082015250565b600061425a600f83613599565b915061426582614224565b602082019050919050565b600060208201905081810360008301526142898161424d565b9050919050565b600069ffffffffffffffffffff82169050919050565b6142af81614290565b81146142ba57600080fd5b50565b6000815190506142cc816142a6565b92915050565b6000819050919050565b6142e5816142d2565b81146142f057600080fd5b50565b600081519050614302816142dc565b92915050565b600080600080600060a0868803121561432457614323612f46565b5b6000614332888289016142bd565b9550506020614343888289016142f3565b945050604061435488828901613d91565b935050606061436588828901613d91565b9250506080614376888289016142bd565b9150509295509295909350565b600061438e826142d2565b9150614399836142d2565b92508282026143a7816142d2565b91507f800000000000000000000000000000000000000000000000000000000000000084146000841216156143df576143de613682565b5b82820584148315176143f4576143f3613682565b5b5092915050565b7f5a65726f204944206c656e677468000000000000000000000000000000000000600082015250565b6000614431600e83613599565b915061443c826143fb565b602082019050919050565b6000602082019050818103600083015261446081614424565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f436c61696d206661696c65640000000000000000000000000000000000000000600082015250565b60006144cc600c83613599565b91506144d782614496565b602082019050919050565b600060208201905081810360008301526144fb816144bf565b9050919050565b600061450d82612f50565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361453f5761453e613682565b5b600182019050919050565b7f5a65726f20707269636500000000000000000000000000000000000000000000600082015250565b6000614580600a83613599565b915061458b8261454a565b602082019050919050565b600060208201905081810360008301526145af81614573565b9050919050565b7f5a65726f20746f6b656e7320746f2073656c6c00000000000000000000000000600082015250565b60006145ec601383613599565b91506145f7826145b6565b602082019050919050565b6000602082019050818103600083015261461b816145df565b9050919050565b7f546869732070726573616c6520697320616c726561647920496e616374697665600082015250565b6000614658602083613599565b915061466382614622565b602082019050919050565b600060208201905081810360008301526146878161464b565b9050919050565b7f4e6f742070617573656400000000000000000000000000000000000000000000600082015250565b60006146c4600a83613599565b91506146cf8261468e565b602082019050919050565b600060208201905081810360008301526146f3816146b7565b9050919050565b7f50726576696f75732053616c6520697320416374697665000000000000000000600082015250565b6000614730601783613599565b915061473b826146fa565b602082019050919050565b6000602082019050818103600083015261475f81614723565b9050919050565b6000819050919050565b6000819050919050565b600061479561479061478b84614766565b614770565b612f50565b9050919050565b6147a58161477a565b82525050565b60006060820190506147c06000830186613160565b6147cd602083018561479c565b6147da604083018461479c565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061483e602683613599565b9150614849826147e2565b604082019050919050565b6000602082019050818103600083015261486d81614831565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006148aa602083613599565b91506148b582614874565b602082019050919050565b600060208201905081810360008301526148d98161489d565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000614916601f83613599565b9150614921826148e0565b602082019050919050565b6000602082019050818103600083015261494581614909565b9050919050565b7f4c6f772062616c616e6365000000000000000000000000000000000000000000600082015250565b6000614982600b83613599565b915061498d8261494c565b602082019050919050565b600060208201905081810360008301526149b181614975565b9050919050565b600081905092915050565b50565b60006149d36000836149b8565b91506149de826149c3565b600082019050919050565b60006149f4826149c6565b9150819050919050565b7f455448205061796d656e74206661696c65640000000000000000000000000000600082015250565b6000614a34601283613599565b9150614a3f826149fe565b602082019050919050565b60006020820190508181036000830152614a6381614a27565b905091905056fea26469706673582212204b1a7c47068e63a2a194d9494a735107d2f74a5b9d722c06a78bf7e9c35d4e5364736f6c63430008130033
Deployed Bytecode Sourcemap
19344:14663:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20207:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28031:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24803:149;;;;;;;;;;;;;:::i;:::-;;21897:97;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25272:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28260:1906;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20452:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30326:335;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32412:932;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22262:518;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19430:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19466:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26639:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20301:67;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;33879:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33732:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26373:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5450:103;;;;;;;;;;;;;:::i;:::-;;30806:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31899:414;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20560:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20510:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4802:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27282:206;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33453:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25733:512;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23638:277;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24960:271;;;;;;;;;;;;;:::i;:::-;;20375:70;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;22002:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26953:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24102:693;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22997:509;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19399:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20252:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;5708:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31246:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19503:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20207:38;;;;;;;;;;;;;;;;;;;;;;:::o;28031:158::-;4688:13;:11;:13::i;:::-;28174:7:::1;28147:17;:24;28165:5;28147:24;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;28031:158:::0;;:::o;24803:149::-;4688:13;:11;:13::i;:::-;24886:15:::1;24855:7;:18;24863:9;;24855:18;;;;;;;;;;;:28;;:46;;;;24940:4;24912:7;:18;24920:9;;24912:18;;;;;;;;;;;:25;;;:32;;;;;;;;;;;;;;;;;;24803:149::o:0;21897:97::-;4688:13;:11;:13::i;:::-;21980:6:::1;21968:9;;:18;;;;;;;;;;;;;;;;;;21897:97:::0;:::o;25272:172::-;25360:3;27558:1;27552:3;:7;:27;;;;;27570:9;;27563:3;:16;;27552:27;27544:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;4688:13:::1;:11;:13::i;:::-;25429:7:::2;25400;:12;25408:3;25400:12;;;;;;;;;;;:26;;;:36;;;;;;;;;;;;;;;;;;25272:172:::0;;;:::o;28260:1906::-;28462:4;28341:9;;27558:1;27552:3;:7;:27;;;;;27570:9;;27563:3;:16;;27552:27;27544:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28376:9:::1;;28387:33;28399:9;;28410;28387:11;:33::i;:::-;27735:7;:12;27743:3;27735:12;;;;;;;;;;;:22;;;27716:15;:41;;:89;;;;;27801:4;27778:27;;:7;:12;27786:3;27778:12;;;;;;;;;;;:19;;;;;;;;;;;;:27;;;27716:89;27694:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;27898:1;27889:6;:10;:67;;;;;27939:7;:12;27947:3;27939:12;;;;;;;;;;;:17;;;27913:7;:12;27921:3;27913:12;;;;;;;;;;;:25;;;:43;;;;:::i;:::-;27903:6;:53;;27889:67;27867:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;2261:21:::2;:19;:21::i;:::-;28484:17:::3;28573:14;;28556;;:31;;;;:::i;:::-;28536:15;;28517:16;:14;:16::i;:::-;28505:9;:28;;;;:::i;:::-;:46;;;;:::i;:::-;28504:84;;;;:::i;:::-;28484:104;;28654:7;:18;28662:9;;28654:18;;;;;;;;;;;:30;;;28641:9;28607:7;:18;28615:9;;28607:18;;;;;;;;;;;:31;;;:43;;;;:::i;:::-;:77;;28599:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;28758:6;:17;28765:9;;28758:17;;;;;;;;;;;;;;;;;;;;;28757:18;28749:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;28842:4;28813:33;;:7;:18;28821:9;;28813:18;;;;;;;;;;;:25;;;;;;;;;;;;:33;;;28805:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28944:1;28895:9;:21;28905:10;28895:21;;;;;;;;;;;;;;;:32;28917:9;;28895:32;;;;;;;;;;;:45;;;:50;;28887:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;28989:14;29006:34;29019:9;;29030;29006:12;:34::i;:::-;28989:51;;29118:9;:21;29128:10;29118:21;;;;;;;;;;;;;;;:32;29140:9;;29118:32;;;;;;;;;;;:45;;;29107:6;29060:9;:21;29070:10;29060:21;;;;;;;;;;;;;;;:32;29082:9;;29060:32;;;;;;;;;;;:44;;;:53;;;;:::i;:::-;29059:104;;29051:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;29247:5;29214:38;;:17;:29;29232:10;29214:29;;;;;;;;;;;;;;;;;;;;;;;;;:38;;::::0;29210:127:::3;;29287:13;;29277:6;:23;;29269:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;29210:127;29374:6;29347:7;:18;29355:9;;29347:18;;;;;;;;;;;:23;;;:33;;;;;;;:::i;:::-;;;;;;;;29426:9;29391:7;:18;29399:9;;29391:18;;;;;;;;;;;:31;;;:44;;;;;;;:::i;:::-;;;;;;;;29494:6;29446:9;:21;29456:10;29446:21;;;;;;;;;;;;;;;:32;29468:9;;29446:32;;;;;;;;;;;:44;;;:54;;;;;;;:::i;:::-;;;;;;;;29571:1;29518:13;:27;29532:12;:10;:12::i;:::-;29518:27;;;;;;;;;;;;;;;:38;29546:9;;29518:38;;;;;;;;;;;:50;;;:54;29514:377;;;29643:6;29589:13;:27;29603:12;:10;:12::i;:::-;29589:27;;;;;;;;;;;;;;;:38;29617:9;;29589:38;;;;;;;;;;;:50;;;:60;;;;;;;:::i;:::-;;;;;;;;29514:377;;;29723:156;;;;;;;;29751:1;29723:156;;;;29790:6;29723:156;;;;29845:1;29723:156;;::::0;29682:13:::3;:27;29696:12;:10;:12::i;:::-;29682:27;;;;;;;;;;;;;;;:38;29710:9;;29682:38;;;;;;;;;;;:197;;;;;;;;;;;;;;;;;;;;;;;;;;;29514:377;29903:43;29921:12;;;;;;;;;;;29936:9;29903;:43::i;:::-;30048:1;29962:174;;30016:9;;29989:12;:10;:12::i;:::-;29962:174;;;30065:6;30086:9;30110:15;29962:174;;;;;;;;:::i;:::-;;;;;;;;30154:4;30147:11;;;;2305:20:::2;:18;:20::i;:::-;27613:1:::1;;28260:1906:::0;;:::o;20452:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;30326:335::-;30456:17;30433:3;27558:1;27552:3;:7;:27;;;;;27570:9;;27563:3;:16;;27552:27;27544:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30491:16:::1;30520:7;:12;30528:3;30520:12;;;;;;;;;;;:18;;;30511:6;:27;;;;:::i;:::-;30491:48;;30631:9;;;;;;;;;;;30616:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30612:2;:40;;;;:::i;:::-;30593:16;:14;:16::i;:::-;:59;;;;:::i;:::-;30574:14;;30563:8;:25;;;;:::i;:::-;30562:91;;;;:::i;:::-;30550:103;;30480:181;30326:335:::0;;;;;:::o;32412:932::-;32509:4;32486:3;27558:1;27552:3;:7;:27;;;;;27570:9;;27563:3;:16;;27552:27;27544:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32531:14:::1;32548:32;32564:10;32576:3;32548:15;:32::i;:::-;32531:49;;32618:1;32609:6;:10;32601:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;32695:1;32674:23;;:9;;;;;;;;;;;:23;;::::0;32652:102:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32804:9;;;;;;;;;;;32797:27;;;32833:4;32797:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32787:6;:52;;32765:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;32952:4;32922:34;;:7;:12;32930:3;32922:12;;;;;;;;;;;:26;;;;;;;;;;;;:34;;;32913:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33035:15;32994:13;:25;33008:10;32994:25;;;;;;;;;;;;;;;:30;33020:3;32994:30;;;;;;;;;;;:38;;:56;;;;33111:6;33063:13;:25;33077:10;33063:25;;;;;;;;;;;;;;;:30;33089:3;33063:30;;;;;;;;;;;:44;;;:54;;;;;;;:::i;:::-;;;;;;;;33130:11;33151:9;;;;;;;;;;;33144:26;;;33171:10;33183:6;33144:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33130:60;;33209:6;33201:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;33283:3;33271:10;33257:55;;;33288:6;33296:15;33257:55;;;;;;;:::i;:::-;;;;;;;;33332:4;33325:11;;;;32412:932:::0;;;;:::o;22262:518::-;4688:13;:11;:13::i;:::-;22417:1:::1;22401:13;:17;22393:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;22499:1;22457:9;:18;22467:7;22457:18;;;;;;;;;;;;;;;:25;22476:5;22457:25;;;;;;;;;;;:38;;;:43;;22449:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;22572:5;22539:9;:18;22549:7;22539:18;;;;;;;;;;;;;;;:25;22558:5;22539:25;;;;;;;;;;;:30;;:38;;;;22647:6;22630:13;:24;;;;:::i;:::-;22588:9;:18;22598:7;22588:18;;;;;;;;;;;;;;;:25;22607:5;22588:25;;;;;;;;;;;:38;;:67;;;;22706:1;22666:9;:18;22676:7;22666:18;;;;;;;;;;;;;;;:25;22685:5;22666:25;;;;;;;;;;;:37;;:41;;;;22725:45;22740:5;22747:7;22756:13;22725:45;;;;;;;;:::i;:::-;;;;;;;;22262:518:::0;;;:::o;19430:29::-;;;;:::o;19466:30::-;;;;:::o;26639:212::-;26698:3;27558:1;27552:3;:7;:27;;;;;27570:9;;27563:3;:16;;27552:27;27544:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;4688:13:::1;:11;:13::i;:::-;26733:6:::2;:11;26740:3;26733:11;;;;;;;;;;;;;;;;;;;;;26732:12;26724:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;26788:4;26774:6;:11;26781:3;26774:11;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;26822:3;26808:35;26827:15;26808:35;;;;;;:::i;:::-;;;;;;;;26639:212:::0;;:::o;20301:67::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33879:125::-;4688:13;:11;:13::i;:::-;33956:40:::1;33974:12;;;;;;;;;;;33989:6;33956:9;:40::i;:::-;33879:125:::0;:::o;33732:139::-;4688:13;:11;:13::i;:::-;33825:6:::1;33818:23;;;33842:12;;;;;;;;;;;33856:6;33818:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33732:139:::0;;:::o;26373:166::-;4688:13;:11;:13::i;:::-;26473:1:::1;26454:21;;:7;:21;;::::0;26446:52:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;26524:7;26509:12;;:22;;;;;;;;;;;;;;;;;;26373:166:::0;:::o;5450:103::-;4688:13;:11;:13::i;:::-;5515:30:::1;5542:1;5515:18;:30::i;:::-;5450:103::o:0;30806:287::-;30904:15;30937:17;31021:14;;31004;;:31;;;;:::i;:::-;30985:15;;30966:16;:14;:16::i;:::-;30957:6;:25;;;;:::i;:::-;:43;;;;:::i;:::-;:79;;;;:::i;:::-;30937:99;;31057:28;31070:3;31075:9;31057:12;:28::i;:::-;31047:38;;30926:167;30806:287;;;;:::o;31899:414::-;32028:7;32005:3;27558:1;27552:3;:7;:27;;;;;27570:9;;27563:3;:16;;27552:27;27544:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32053:22:::1;32078:13;:19;32092:4;32078:19;;;;;;;;;;;;;;;:24;32098:3;32078:24;;;;;;;;;;;32053:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;32143:1;32123:5;:17;;;:21;32115:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;32176:14;32213:5;:19;;;32193:5;:17;;;:39;;;;:::i;:::-;32176:56;;32260:1;32251:6;:10;32243:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;32299:6;32292:13;;;;31899:414:::0;;;;;:::o;20560:24::-;;;;;;;;;;;;;:::o;20510:43::-;;;;:::o;4802:87::-;4848:7;4875:6;;;;;;;;;;;4868:13;;4802:87;:::o;27282:206::-;27329:7;27352:12;27374:19;;;;;;;;;;;:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27349:62;;;;;;27440:6;27431:5;:16;;;;:::i;:::-;27422:26;;27474:5;27459:21;;;27282:206;:::o;33453:271::-;33518:4;33556:1;33543:3;;:10;;:14;33535:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;33592:9;33587:108;33607:3;;:10;;33603:1;:14;33587:108;;;33647:19;33659:3;;33663:1;33659:6;;;;;;;:::i;:::-;;;;;;;;33647:11;:19::i;:::-;33639:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;33619:3;;;;;:::i;:::-;;;;33587:108;;;;33712:4;33705:11;;33453:271;;;;:::o;25733:512::-;25927:3;27558:1;27552:3;:7;:27;;;;;27570:9;;27563:3;:16;;27552:27;27544:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;4688:13:::1;:11;:13::i;:::-;25970:1:::2;25961:6;:10;25953:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;26021:1;26005:13;:17;25997:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;26078:6;26057:7;:12;26065:3;26057:12;;;;;;;;;;;:18;;:27;;;;26125:15;26095:7;:12;26103:3;26095:12;;;;;;;;;;;:27;;:45;;;;26179:13;26151:7;:12;26159:3;26151:12;;;;;;;;;;;:25;;:41;;;;26229:8;26203:7;:12;26211:3;26203:12;;;;;;;;;;;:24;;:34;;;;25733:512:::0;;;;;;:::o;23638:277::-;4688:13;:11;:13::i;:::-;23806:1:::1;23790:13;:17;23782:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;23897:6;23880:13;:24;;;;:::i;:::-;23838:9;:18;23848:7;23838:18;;;;;;;;;;;;;;;:25;23857:5;23838:25;;;;;;;;;;;:38;;:67;;;;23638:277:::0;;;:::o;24960:271::-;4688:13;:11;:13::i;:::-;25060:4:::1;25032:7;:18;25040:9;;25032:18;;;;;;;;;;;:25;;;:32;;;;;;;;;;;;;;;;;25010:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;25164:15;25135:7;:18;25143:9;;25135:18;;;;;;;;;;;:26;;:44;;;;25218:5;25190:7;:18;25198:9;;25190:18;;;;;;;;;;;:25;;;:33;;;;;;;;;;;;;;;;;;24960:271::o:0;20375:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;22002:103::-;4688:13;:11;:13::i;:::-;22090:7:::1;22074:13;:23;;;;22002:103:::0;:::o;26953:244::-;27032:3;27558:1;27552:3;:7;:27;;;;;27570:9;;27563:3;:16;;27552:27;27544:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;4688:13:::1;:11;:13::i;:::-;27080:6:::2;:11;27087:3;27080:11;;;;;;;;;;;;;;;;;;;;;27072:34;;;;;;;;;;;;:::i;:::-;;;;;;;;;27131:5;27117:6;:11;27124:3;27117:11;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;27168:3;27152:37;27173:15;27152:37;;;;;;:::i;:::-;;;;;;;;26953:244:::0;;:::o;24102:693::-;4688:13;:11;:13::i;:::-;24280:1:::1;24271:6;:10;24263:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;24331:1;24315:13;:17;24307:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;24404:5;24375:34;;:7;:18;24383:9;;24375:18;;;;;;;;;;;:25;;;;;;;;;;;;:34;;;24367:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24450:9;;:11;;;;;;;;;:::i;:::-;;;;;;24495:228;;;;;;;;24517:1;24495:228;;;;24533:1;24495:228;;;;24549:6;24495:228;;;;24570:15;24495:228;;;;24600:1;24495:228;;;;24616:13;24495:228;;;;24644:12;24495:228;;;;24671:1;24495:228;;;;24687:5;24495:228;;;;;;24707:5;24495:228;;;;::::0;24474:7:::1;:18;24482:9;;24474:18;;;;;;;;;;;:249;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24756:9;;24741:46;24767:13;24782:1;24785::::0;24741:46:::1;;;;;;;;:::i;:::-;;;;;;;;24102:693:::0;;;;:::o;22997:509::-;4688:13;:11;:13::i;:::-;23135:9:::1;23131:366;23154:7;;:14;;23150:1;:18;23131:366;;;23239:1;23194:9;:21;23204:7;;23212:1;23204:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;23194:21;;;;;;;;;;;;;;;:28;23216:5;23194:28;;;;;;;;;;;:41;;;:46;;23186:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;23319:5;23283:9;:21;23293:7;;23301:1;23293:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;23283:21;;;;;;;;;;;;;;;:28;23305:5;23283:28;;;;;;;;;;;:33;;:41;;;;23404:6;23384:13;;23398:1;23384:16;;;;;;;:::i;:::-;;;;;;;;:27;;;;:::i;:::-;23339:9;:21;23349:7;;23357:1;23349:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;23339:21;;;;;;;;;;;;;;;:28;23361:5;23339:28;;;;;;;;;;;:41;;:73;;;;23470:1;23427:9;:21;23437:7;;23445:1;23437:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;23427:21;;;;;;;;;;;;;;;:28;23449:5;23427:28;;;;;;;;;;;:40;;:44;;;;23170:3;;;;;:::i;:::-;;;;23131:366;;;;22997:509:::0;;;;;:::o;19399:24::-;;;;:::o;20252:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5708:201::-;4688:13;:11;:13::i;:::-;5817:1:::1;5797:22;;:8;:22;;::::0;5789:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;5873:28;5892:8;5873:18;:28::i;:::-;5708:201:::0;:::o;31246:226::-;31374:15;31351:3;27558:1;27552:3;:7;:27;;;;;27570:9;;27563:3;:16;;27552:27;27544:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31449:15:::1;;31427:7;:12;31435:3;31427:12;;;;;;;;;;;:18;;;31418:6;:27;;;;:::i;:::-;31417:47;;;;:::i;:::-;31407:57;;31246:226:::0;;;;;:::o;19503:27::-;;;;;;;;;;;;;:::o;4967:132::-;5042:12;:10;:12::i;:::-;5031:23;;:7;:5;:7::i;:::-;:23;;;5023:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4967:132::o;2341:293::-;1743:1;2475:7;;:19;2467:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1743:1;2608:7;:18;;;;2341:293::o;3456:98::-;3509:7;3536:10;3529:17;;3456:98;:::o;31480:257::-;31595:6;31570:21;:31;;31562:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;31629:12;31647:9;:14;;31669:6;31647:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31628:52;;;31699:7;31691:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;31551:186;31480:257;;:::o;2642:213::-;1699:1;2825:7;:22;;;;2642:213::o;6069:191::-;6143:16;6162:6;;;;;;;;;;;6143:25;;6188:8;6179:6;;:17;;;;;;;;;;;;;;;;;;6243:8;6212:40;;6233:8;6212:40;;;;;;;;;;;;6132:128;6069:191;:::o;88:117:1:-;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:90::-;1059:7;1102:5;1095:13;1088:21;1077:32;;1025:90;;;:::o;1121:109::-;1202:21;1217:5;1202:21;:::i;:::-;1197:3;1190:34;1121:109;;:::o;1236:210::-;1323:4;1361:2;1350:9;1346:18;1338:26;;1374:65;1436:1;1425:9;1421:17;1412:6;1374:65;:::i;:::-;1236:210;;;;:::o;1452:126::-;1489:7;1529:42;1522:5;1518:54;1507:65;;1452:126;;;:::o;1584:96::-;1621:7;1650:24;1668:5;1650:24;:::i;:::-;1639:35;;1584:96;;;:::o;1686:122::-;1759:24;1777:5;1759:24;:::i;:::-;1752:5;1749:35;1739:63;;1798:1;1795;1788:12;1739:63;1686:122;:::o;1814:139::-;1860:5;1898:6;1885:20;1876:29;;1914:33;1941:5;1914:33;:::i;:::-;1814:139;;;;:::o;1959:116::-;2029:21;2044:5;2029:21;:::i;:::-;2022:5;2019:32;2009:60;;2065:1;2062;2055:12;2009:60;1959:116;:::o;2081:133::-;2124:5;2162:6;2149:20;2140:29;;2178:30;2202:5;2178:30;:::i;:::-;2081:133;;;;:::o;2220:468::-;2285:6;2293;2342:2;2330:9;2321:7;2317:23;2313:32;2310:119;;;2348:79;;:::i;:::-;2310:119;2468:1;2493:53;2538:7;2529:6;2518:9;2514:22;2493:53;:::i;:::-;2483:63;;2439:117;2595:2;2621:50;2663:7;2654:6;2643:9;2639:22;2621:50;:::i;:::-;2611:60;;2566:115;2220:468;;;;;:::o;2694:329::-;2753:6;2802:2;2790:9;2781:7;2777:23;2773:32;2770:119;;;2808:79;;:::i;:::-;2770:119;2928:1;2953:53;2998:7;2989:6;2978:9;2974:22;2953:53;:::i;:::-;2943:63;;2899:117;2694:329;;;;:::o;3029:468::-;3094:6;3102;3151:2;3139:9;3130:7;3126:23;3122:32;3119:119;;;3157:79;;:::i;:::-;3119:119;3277:1;3302:53;3347:7;3338:6;3327:9;3323:22;3302:53;:::i;:::-;3292:63;;3248:117;3404:2;3430:50;3472:7;3463:6;3452:9;3448:22;3430:50;:::i;:::-;3420:60;;3375:115;3029:468;;;;;:::o;3503:474::-;3571:6;3579;3628:2;3616:9;3607:7;3603:23;3599:32;3596:119;;;3634:79;;:::i;:::-;3596:119;3754:1;3779:53;3824:7;3815:6;3804:9;3800:22;3779:53;:::i;:::-;3769:63;;3725:117;3881:2;3907:53;3952:7;3943:6;3932:9;3928:22;3907:53;:::i;:::-;3897:63;;3852:118;3503:474;;;;;:::o;3983:118::-;4070:24;4088:5;4070:24;:::i;:::-;4065:3;4058:37;3983:118;;:::o;4107:222::-;4200:4;4238:2;4227:9;4223:18;4215:26;;4251:71;4319:1;4308:9;4304:17;4295:6;4251:71;:::i;:::-;4107:222;;;;:::o;4335:619::-;4412:6;4420;4428;4477:2;4465:9;4456:7;4452:23;4448:32;4445:119;;;4483:79;;:::i;:::-;4445:119;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;4335:619;;;;;:::o;4960:474::-;5028:6;5036;5085:2;5073:9;5064:7;5060:23;5056:32;5053:119;;;5091:79;;:::i;:::-;5053:119;5211:1;5236:53;5281:7;5272:6;5261:9;5257:22;5236:53;:::i;:::-;5226:63;;5182:117;5338:2;5364:53;5409:7;5400:6;5389:9;5385:22;5364:53;:::i;:::-;5354:63;;5309:118;4960:474;;;;;:::o;5440:442::-;5589:4;5627:2;5616:9;5612:18;5604:26;;5640:71;5708:1;5697:9;5693:17;5684:6;5640:71;:::i;:::-;5721:72;5789:2;5778:9;5774:18;5765:6;5721:72;:::i;:::-;5803;5871:2;5860:9;5856:18;5847:6;5803:72;:::i;:::-;5440:442;;;;;;:::o;5888:118::-;5975:24;5993:5;5975:24;:::i;:::-;5970:3;5963:37;5888:118;;:::o;6012:222::-;6105:4;6143:2;6132:9;6128:18;6120:26;;6156:71;6224:1;6213:9;6209:17;6200:6;6156:71;:::i;:::-;6012:222;;;;:::o;6240:117::-;6349:1;6346;6339:12;6363:117;6472:1;6469;6462:12;6486:117;6595:1;6592;6585:12;6626:568;6699:8;6709:6;6759:3;6752:4;6744:6;6740:17;6736:27;6726:122;;6767:79;;:::i;:::-;6726:122;6880:6;6867:20;6857:30;;6910:18;6902:6;6899:30;6896:117;;;6932:79;;:::i;:::-;6896:117;7046:4;7038:6;7034:17;7022:29;;7100:3;7092:4;7084:6;7080:17;7070:8;7066:32;7063:41;7060:128;;;7107:79;;:::i;:::-;7060:128;6626:568;;;;;:::o;7200:559::-;7286:6;7294;7343:2;7331:9;7322:7;7318:23;7314:32;7311:119;;;7349:79;;:::i;:::-;7311:119;7497:1;7486:9;7482:17;7469:31;7527:18;7519:6;7516:30;7513:117;;;7549:79;;:::i;:::-;7513:117;7662:80;7734:7;7725:6;7714:9;7710:22;7662:80;:::i;:::-;7644:98;;;;7440:312;7200:559;;;;;:::o;7765:911::-;7860:6;7868;7876;7884;7892;7941:3;7929:9;7920:7;7916:23;7912:33;7909:120;;;7948:79;;:::i;:::-;7909:120;8068:1;8093:53;8138:7;8129:6;8118:9;8114:22;8093:53;:::i;:::-;8083:63;;8039:117;8195:2;8221:53;8266:7;8257:6;8246:9;8242:22;8221:53;:::i;:::-;8211:63;;8166:118;8323:2;8349:53;8394:7;8385:6;8374:9;8370:22;8349:53;:::i;:::-;8339:63;;8294:118;8451:2;8477:53;8522:7;8513:6;8502:9;8498:22;8477:53;:::i;:::-;8467:63;;8422:118;8579:3;8606:53;8651:7;8642:6;8631:9;8627:22;8606:53;:::i;:::-;8596:63;;8550:119;7765:911;;;;;;;;:::o;8682:765::-;8768:6;8776;8784;8792;8841:3;8829:9;8820:7;8816:23;8812:33;8809:120;;;8848:79;;:::i;:::-;8809:120;8968:1;8993:53;9038:7;9029:6;9018:9;9014:22;8993:53;:::i;:::-;8983:63;;8939:117;9095:2;9121:53;9166:7;9157:6;9146:9;9142:22;9121:53;:::i;:::-;9111:63;;9066:118;9223:2;9249:53;9294:7;9285:6;9274:9;9270:22;9249:53;:::i;:::-;9239:63;;9194:118;9351:2;9377:53;9422:7;9413:6;9402:9;9398:22;9377:53;:::i;:::-;9367:63;;9322:118;8682:765;;;;;;;:::o;9470:568::-;9543:8;9553:6;9603:3;9596:4;9588:6;9584:17;9580:27;9570:122;;9611:79;;:::i;:::-;9570:122;9724:6;9711:20;9701:30;;9754:18;9746:6;9743:30;9740:117;;;9776:79;;:::i;:::-;9740:117;9890:4;9882:6;9878:17;9866:29;;9944:3;9936:4;9928:6;9924:17;9914:8;9910:32;9907:41;9904:128;;;9951:79;;:::i;:::-;9904:128;9470:568;;;;;:::o;10044:1079::-;10175:6;10183;10191;10199;10207;10256:2;10244:9;10235:7;10231:23;10227:32;10224:119;;;10262:79;;:::i;:::-;10224:119;10382:1;10407:53;10452:7;10443:6;10432:9;10428:22;10407:53;:::i;:::-;10397:63;;10353:117;10537:2;10526:9;10522:18;10509:32;10568:18;10560:6;10557:30;10554:117;;;10590:79;;:::i;:::-;10554:117;10703:80;10775:7;10766:6;10755:9;10751:22;10703:80;:::i;:::-;10685:98;;;;10480:313;10860:2;10849:9;10845:18;10832:32;10891:18;10883:6;10880:30;10877:117;;;10913:79;;:::i;:::-;10877:117;11026:80;11098:7;11089:6;11078:9;11074:22;11026:80;:::i;:::-;11008:98;;;;10803:313;10044:1079;;;;;;;;:::o;11129:1195::-;11462:4;11500:3;11489:9;11485:19;11477:27;;11514:71;11582:1;11571:9;11567:17;11558:6;11514:71;:::i;:::-;11595:72;11663:2;11652:9;11648:18;11639:6;11595:72;:::i;:::-;11677;11745:2;11734:9;11730:18;11721:6;11677:72;:::i;:::-;11759;11827:2;11816:9;11812:18;11803:6;11759:72;:::i;:::-;11841:73;11909:3;11898:9;11894:19;11885:6;11841:73;:::i;:::-;11924;11992:3;11981:9;11977:19;11968:6;11924:73;:::i;:::-;12007;12075:3;12064:9;12060:19;12051:6;12007:73;:::i;:::-;12090;12158:3;12147:9;12143:19;12134:6;12090:73;:::i;:::-;12173:67;12235:3;12224:9;12220:19;12211:6;12173:67;:::i;:::-;12250;12312:3;12301:9;12297:19;12288:6;12250:67;:::i;:::-;11129:1195;;;;;;;;;;;;;:::o;12330:169::-;12414:11;12448:6;12443:3;12436:19;12488:4;12483:3;12479:14;12464:29;;12330:169;;;;:::o;12505:168::-;12645:20;12641:1;12633:6;12629:14;12622:44;12505:168;:::o;12679:366::-;12821:3;12842:67;12906:2;12901:3;12842:67;:::i;:::-;12835:74;;12918:93;13007:3;12918:93;:::i;:::-;13036:2;13031:3;13027:12;13020:19;;12679:366;;;:::o;13051:419::-;13217:4;13255:2;13244:9;13240:18;13232:26;;13304:9;13298:4;13294:20;13290:1;13279:9;13275:17;13268:47;13332:131;13458:4;13332:131;:::i;:::-;13324:139;;13051:419;;;:::o;13476:173::-;13616:25;13612:1;13604:6;13600:14;13593:49;13476:173;:::o;13655:366::-;13797:3;13818:67;13882:2;13877:3;13818:67;:::i;:::-;13811:74;;13894:93;13983:3;13894:93;:::i;:::-;14012:2;14007:3;14003:12;13996:19;;13655:366;;;:::o;14027:419::-;14193:4;14231:2;14220:9;14216:18;14208:26;;14280:9;14274:4;14270:20;14266:1;14255:9;14251:17;14244:47;14308:131;14434:4;14308:131;:::i;:::-;14300:139;;14027:419;;;:::o;14452:180::-;14500:77;14497:1;14490:88;14597:4;14594:1;14587:15;14621:4;14618:1;14611:15;14638:194;14678:4;14698:20;14716:1;14698:20;:::i;:::-;14693:25;;14732:20;14750:1;14732:20;:::i;:::-;14727:25;;14776:1;14773;14769:9;14761:17;;14800:1;14794:4;14791:11;14788:37;;;14805:18;;:::i;:::-;14788:37;14638:194;;;;:::o;14838:169::-;14978:21;14974:1;14966:6;14962:14;14955:45;14838:169;:::o;15013:366::-;15155:3;15176:67;15240:2;15235:3;15176:67;:::i;:::-;15169:74;;15252:93;15341:3;15252:93;:::i;:::-;15370:2;15365:3;15361:12;15354:19;;15013:366;;;:::o;15385:419::-;15551:4;15589:2;15578:9;15574:18;15566:26;;15638:9;15632:4;15628:20;15624:1;15613:9;15609:17;15602:47;15666:131;15792:4;15666:131;:::i;:::-;15658:139;;15385:419;;;:::o;15810:410::-;15850:7;15873:20;15891:1;15873:20;:::i;:::-;15868:25;;15907:20;15925:1;15907:20;:::i;:::-;15902:25;;15962:1;15959;15955:9;15984:30;16002:11;15984:30;:::i;:::-;15973:41;;16163:1;16154:7;16150:15;16147:1;16144:22;16124:1;16117:9;16097:83;16074:139;;16193:18;;:::i;:::-;16074:139;15858:362;15810:410;;;;:::o;16226:180::-;16274:77;16271:1;16264:88;16371:4;16368:1;16361:15;16395:4;16392:1;16385:15;16412:185;16452:1;16469:20;16487:1;16469:20;:::i;:::-;16464:25;;16503:20;16521:1;16503:20;:::i;:::-;16498:25;;16542:1;16532:35;;16547:18;;:::i;:::-;16532:35;16589:1;16586;16582:9;16577:14;;16412:185;;;;:::o;16603:191::-;16643:3;16662:20;16680:1;16662:20;:::i;:::-;16657:25;;16696:20;16714:1;16696:20;:::i;:::-;16691:25;;16739:1;16736;16732:9;16725:16;;16760:3;16757:1;16754:10;16751:36;;;16767:18;;:::i;:::-;16751:36;16603:191;;;;:::o;16800:225::-;16940:34;16936:1;16928:6;16924:14;16917:58;17009:8;17004:2;16996:6;16992:15;16985:33;16800:225;:::o;17031:366::-;17173:3;17194:67;17258:2;17253:3;17194:67;:::i;:::-;17187:74;;17270:93;17359:3;17270:93;:::i;:::-;17388:2;17383:3;17379:12;17372:19;;17031:366;;;:::o;17403:419::-;17569:4;17607:2;17596:9;17592:18;17584:26;;17656:9;17650:4;17646:20;17642:1;17631:9;17627:17;17620:47;17684:131;17810:4;17684:131;:::i;:::-;17676:139;;17403:419;;;:::o;17828:164::-;17968:16;17964:1;17956:6;17952:14;17945:40;17828:164;:::o;17998:366::-;18140:3;18161:67;18225:2;18220:3;18161:67;:::i;:::-;18154:74;;18237:93;18326:3;18237:93;:::i;:::-;18355:2;18350:3;18346:12;18339:19;;17998:366;;;:::o;18370:419::-;18536:4;18574:2;18563:9;18559:18;18551:26;;18623:9;18617:4;18613:20;18609:1;18598:9;18594:17;18587:47;18651:131;18777:4;18651:131;:::i;:::-;18643:139;;18370:419;;;:::o;18795:175::-;18935:27;18931:1;18923:6;18919:14;18912:51;18795:175;:::o;18976:366::-;19118:3;19139:67;19203:2;19198:3;19139:67;:::i;:::-;19132:74;;19215:93;19304:3;19215:93;:::i;:::-;19333:2;19328:3;19324:12;19317:19;;18976:366;;;:::o;19348:419::-;19514:4;19552:2;19541:9;19537:18;19529:26;;19601:9;19595:4;19591:20;19587:1;19576:9;19572:17;19565:47;19629:131;19755:4;19629:131;:::i;:::-;19621:139;;19348:419;;;:::o;19773:178::-;19913:30;19909:1;19901:6;19897:14;19890:54;19773:178;:::o;19957:366::-;20099:3;20120:67;20184:2;20179:3;20120:67;:::i;:::-;20113:74;;20196:93;20285:3;20196:93;:::i;:::-;20314:2;20309:3;20305:12;20298:19;;19957:366;;;:::o;20329:419::-;20495:4;20533:2;20522:9;20518:18;20510:26;;20582:9;20576:4;20572:20;20568:1;20557:9;20553:17;20546:47;20610:131;20736:4;20610:131;:::i;:::-;20602:139;;20329:419;;;:::o;20754:177::-;20894:29;20890:1;20882:6;20878:14;20871:53;20754:177;:::o;20937:366::-;21079:3;21100:67;21164:2;21159:3;21100:67;:::i;:::-;21093:74;;21176:93;21265:3;21176:93;:::i;:::-;21294:2;21289:3;21285:12;21278:19;;20937:366;;;:::o;21309:419::-;21475:4;21513:2;21502:9;21498:18;21490:26;;21562:9;21556:4;21552:20;21548:1;21537:9;21533:17;21526:47;21590:131;21716:4;21590:131;:::i;:::-;21582:139;;21309:419;;;:::o;21734:170::-;21874:22;21870:1;21862:6;21858:14;21851:46;21734:170;:::o;21910:366::-;22052:3;22073:67;22137:2;22132:3;22073:67;:::i;:::-;22066:74;;22149:93;22238:3;22149:93;:::i;:::-;22267:2;22262:3;22258:12;22251:19;;21910:366;;;:::o;22282:419::-;22448:4;22486:2;22475:9;22471:18;22463:26;;22535:9;22529:4;22525:20;22521:1;22510:9;22506:17;22499:47;22563:131;22689:4;22563:131;:::i;:::-;22555:139;;22282:419;;;:::o;22707:86::-;22742:7;22782:4;22775:5;22771:16;22760:27;;22707:86;;;:::o;22799:118::-;22870:22;22886:5;22870:22;:::i;:::-;22863:5;22860:33;22850:61;;22907:1;22904;22897:12;22850:61;22799:118;:::o;22923:139::-;22978:5;23009:6;23003:13;22994:22;;23025:31;23050:5;23025:31;:::i;:::-;22923:139;;;;:::o;23068:347::-;23136:6;23185:2;23173:9;23164:7;23160:23;23156:32;23153:119;;;23191:79;;:::i;:::-;23153:119;23311:1;23336:62;23390:7;23381:6;23370:9;23366:22;23336:62;:::i;:::-;23326:72;;23282:126;23068:347;;;;:::o;23421:102::-;23463:8;23510:5;23507:1;23503:13;23482:34;;23421:102;;;:::o;23529:848::-;23590:5;23597:4;23621:6;23612:15;;23645:5;23636:14;;23659:712;23680:1;23670:8;23667:15;23659:712;;;23775:4;23770:3;23766:14;23760:4;23757:24;23754:50;;;23784:18;;:::i;:::-;23754:50;23834:1;23824:8;23820:16;23817:451;;;24249:4;24242:5;24238:16;24229:25;;23817:451;24299:4;24293;24289:15;24281:23;;24329:32;24352:8;24329:32;:::i;:::-;24317:44;;23659:712;;;23529:848;;;;;;;:::o;24383:1073::-;24437:5;24628:8;24618:40;;24649:1;24640:10;;24651:5;;24618:40;24677:4;24667:36;;24694:1;24685:10;;24696:5;;24667:36;24763:4;24811:1;24806:27;;;;24847:1;24842:191;;;;24756:277;;24806:27;24824:1;24815:10;;24826:5;;;24842:191;24887:3;24877:8;24874:17;24871:43;;;24894:18;;:::i;:::-;24871:43;24943:8;24940:1;24936:16;24927:25;;24978:3;24971:5;24968:14;24965:40;;;24985:18;;:::i;:::-;24965:40;25018:5;;;24756:277;;25142:2;25132:8;25129:16;25123:3;25117:4;25114:13;25110:36;25092:2;25082:8;25079:16;25074:2;25068:4;25065:12;25061:35;25045:111;25042:246;;;25198:8;25192:4;25188:19;25179:28;;25233:3;25226:5;25223:14;25220:40;;;25240:18;;:::i;:::-;25220:40;25273:5;;25042:246;25313:42;25351:3;25341:8;25335:4;25332:1;25313:42;:::i;:::-;25298:57;;;;25387:4;25382:3;25378:14;25371:5;25368:25;25365:51;;;25396:18;;:::i;:::-;25365:51;25445:4;25438:5;25434:16;25425:25;;24383:1073;;;;;;:::o;25462:281::-;25520:5;25544:23;25562:4;25544:23;:::i;:::-;25536:31;;25588:25;25604:8;25588:25;:::i;:::-;25576:37;;25632:104;25669:66;25659:8;25653:4;25632:104;:::i;:::-;25623:113;;25462:281;;;;:::o;25749:167::-;25889:19;25885:1;25877:6;25873:14;25866:43;25749:167;:::o;25922:366::-;26064:3;26085:67;26149:2;26144:3;26085:67;:::i;:::-;26078:74;;26161:93;26250:3;26161:93;:::i;:::-;26279:2;26274:3;26270:12;26263:19;;25922:366;;;:::o;26294:419::-;26460:4;26498:2;26487:9;26483:18;26475:26;;26547:9;26541:4;26537:20;26533:1;26522:9;26518:17;26511:47;26575:131;26701:4;26575:131;:::i;:::-;26567:139;;26294:419;;;:::o;26719:179::-;26859:31;26855:1;26847:6;26843:14;26836:55;26719:179;:::o;26904:366::-;27046:3;27067:67;27131:2;27126:3;27067:67;:::i;:::-;27060:74;;27143:93;27232:3;27143:93;:::i;:::-;27261:2;27256:3;27252:12;27245:19;;26904:366;;;:::o;27276:419::-;27442:4;27480:2;27469:9;27465:18;27457:26;;27529:9;27523:4;27519:20;27515:1;27504:9;27500:17;27493:47;27557:131;27683:4;27557:131;:::i;:::-;27549:139;;27276:419;;;:::o;27701:143::-;27758:5;27789:6;27783:13;27774:22;;27805:33;27832:5;27805:33;:::i;:::-;27701:143;;;;:::o;27850:351::-;27920:6;27969:2;27957:9;27948:7;27944:23;27940:32;27937:119;;;27975:79;;:::i;:::-;27937:119;28095:1;28120:64;28176:7;28167:6;28156:9;28152:22;28120:64;:::i;:::-;28110:74;;28066:128;27850:351;;;;:::o;28207:220::-;28347:34;28343:1;28335:6;28331:14;28324:58;28416:3;28411:2;28403:6;28399:15;28392:28;28207:220;:::o;28433:366::-;28575:3;28596:67;28660:2;28655:3;28596:67;:::i;:::-;28589:74;;28672:93;28761:3;28672:93;:::i;:::-;28790:2;28785:3;28781:12;28774:19;;28433:366;;;:::o;28805:419::-;28971:4;29009:2;28998:9;28994:18;28986:26;;29058:9;29052:4;29048:20;29044:1;29033:9;29029:17;29022:47;29086:131;29212:4;29086:131;:::i;:::-;29078:139;;28805:419;;;:::o;29230:169::-;29370:21;29366:1;29358:6;29354:14;29347:45;29230:169;:::o;29405:366::-;29547:3;29568:67;29632:2;29627:3;29568:67;:::i;:::-;29561:74;;29644:93;29733:3;29644:93;:::i;:::-;29762:2;29757:3;29753:12;29746:19;;29405:366;;;:::o;29777:419::-;29943:4;29981:2;29970:9;29966:18;29958:26;;30030:9;30024:4;30020:20;30016:1;30005:9;30001:17;29994:47;30058:131;30184:4;30058:131;:::i;:::-;30050:139;;29777:419;;;:::o;30202:332::-;30323:4;30361:2;30350:9;30346:18;30338:26;;30374:71;30442:1;30431:9;30427:17;30418:6;30374:71;:::i;:::-;30455:72;30523:2;30512:9;30508:18;30499:6;30455:72;:::i;:::-;30202:332;;;;;:::o;30540:137::-;30594:5;30625:6;30619:13;30610:22;;30641:30;30665:5;30641:30;:::i;:::-;30540:137;;;;:::o;30683:345::-;30750:6;30799:2;30787:9;30778:7;30774:23;30770:32;30767:119;;;30805:79;;:::i;:::-;30767:119;30925:1;30950:61;31003:7;30994:6;30983:9;30979:22;30950:61;:::i;:::-;30940:71;;30896:125;30683:345;;;;:::o;31034:171::-;31174:23;31170:1;31162:6;31158:14;31151:47;31034:171;:::o;31211:366::-;31353:3;31374:67;31438:2;31433:3;31374:67;:::i;:::-;31367:74;;31450:93;31539:3;31450:93;:::i;:::-;31568:2;31563:3;31559:12;31552:19;;31211:366;;;:::o;31583:419::-;31749:4;31787:2;31776:9;31772:18;31764:26;;31836:9;31830:4;31826:20;31822:1;31811:9;31807:17;31800:47;31864:131;31990:4;31864:131;:::i;:::-;31856:139;;31583:419;;;:::o;32008:332::-;32129:4;32167:2;32156:9;32152:18;32144:26;;32180:71;32248:1;32237:9;32233:17;32224:6;32180:71;:::i;:::-;32261:72;32329:2;32318:9;32314:18;32305:6;32261:72;:::i;:::-;32008:332;;;;;:::o;32346:165::-;32486:17;32482:1;32474:6;32470:14;32463:41;32346:165;:::o;32517:366::-;32659:3;32680:67;32744:2;32739:3;32680:67;:::i;:::-;32673:74;;32756:93;32845:3;32756:93;:::i;:::-;32874:2;32869:3;32865:12;32858:19;;32517:366;;;:::o;32889:419::-;33055:4;33093:2;33082:9;33078:18;33070:26;;33142:9;33136:4;33132:20;33128:1;33117:9;33113:17;33106:47;33170:131;33296:4;33170:131;:::i;:::-;33162:139;;32889:419;;;:::o;33314:171::-;33454:23;33450:1;33442:6;33438:14;33431:47;33314:171;:::o;33491:366::-;33633:3;33654:67;33718:2;33713:3;33654:67;:::i;:::-;33647:74;;33730:93;33819:3;33730:93;:::i;:::-;33848:2;33843:3;33839:12;33832:19;;33491:366;;;:::o;33863:419::-;34029:4;34067:2;34056:9;34052:18;34044:26;;34116:9;34110:4;34106:20;34102:1;34091:9;34087:17;34080:47;34144:131;34270:4;34144:131;:::i;:::-;34136:139;;33863:419;;;:::o;34288:442::-;34437:4;34475:2;34464:9;34460:18;34452:26;;34488:71;34556:1;34545:9;34541:17;34532:6;34488:71;:::i;:::-;34569:72;34637:2;34626:9;34622:18;34613:6;34569:72;:::i;:::-;34651;34719:2;34708:9;34704:18;34695:6;34651:72;:::i;:::-;34288:442;;;;;;:::o;34736:164::-;34876:16;34872:1;34864:6;34860:14;34853:40;34736:164;:::o;34906:366::-;35048:3;35069:67;35133:2;35128:3;35069:67;:::i;:::-;35062:74;;35145:93;35234:3;35145:93;:::i;:::-;35263:2;35258:3;35254:12;35247:19;;34906:366;;;:::o;35278:419::-;35444:4;35482:2;35471:9;35467:18;35459:26;;35531:9;35525:4;35521:20;35517:1;35506:9;35502:17;35495:47;35559:131;35685:4;35559:131;:::i;:::-;35551:139;;35278:419;;;:::o;35703:168::-;35843:20;35839:1;35831:6;35827:14;35820:44;35703:168;:::o;35877:366::-;36019:3;36040:67;36104:2;36099:3;36040:67;:::i;:::-;36033:74;;36116:93;36205:3;36116:93;:::i;:::-;36234:2;36229:3;36225:12;36218:19;;35877:366;;;:::o;36249:419::-;36415:4;36453:2;36442:9;36438:18;36430:26;;36502:9;36496:4;36492:20;36488:1;36477:9;36473:17;36466:47;36530:131;36656:4;36530:131;:::i;:::-;36522:139;;36249:419;;;:::o;36674:166::-;36814:18;36810:1;36802:6;36798:14;36791:42;36674:166;:::o;36846:366::-;36988:3;37009:67;37073:2;37068:3;37009:67;:::i;:::-;37002:74;;37085:93;37174:3;37085:93;:::i;:::-;37203:2;37198:3;37194:12;37187:19;;36846:366;;;:::o;37218:419::-;37384:4;37422:2;37411:9;37407:18;37399:26;;37471:9;37465:4;37461:20;37457:1;37446:9;37442:17;37435:47;37499:131;37625:4;37499:131;:::i;:::-;37491:139;;37218:419;;;:::o;37643:165::-;37783:17;37779:1;37771:6;37767:14;37760:41;37643:165;:::o;37814:366::-;37956:3;37977:67;38041:2;38036:3;37977:67;:::i;:::-;37970:74;;38053:93;38142:3;38053:93;:::i;:::-;38171:2;38166:3;38162:12;38155:19;;37814:366;;;:::o;38186:419::-;38352:4;38390:2;38379:9;38375:18;38367:26;;38439:9;38433:4;38429:20;38425:1;38414:9;38410:17;38403:47;38467:131;38593:4;38467:131;:::i;:::-;38459:139;;38186:419;;;:::o;38611:105::-;38647:7;38687:22;38680:5;38676:34;38665:45;;38611:105;;;:::o;38722:120::-;38794:23;38811:5;38794:23;:::i;:::-;38787:5;38784:34;38774:62;;38832:1;38829;38822:12;38774:62;38722:120;:::o;38848:141::-;38904:5;38935:6;38929:13;38920:22;;38951:32;38977:5;38951:32;:::i;:::-;38848:141;;;;:::o;38995:76::-;39031:7;39060:5;39049:16;;38995:76;;;:::o;39077:120::-;39149:23;39166:5;39149:23;:::i;:::-;39142:5;39139:34;39129:62;;39187:1;39184;39177:12;39129:62;39077:120;:::o;39203:141::-;39259:5;39290:6;39284:13;39275:22;;39306:32;39332:5;39306:32;:::i;:::-;39203:141;;;;:::o;39350:971::-;39453:6;39461;39469;39477;39485;39534:3;39522:9;39513:7;39509:23;39505:33;39502:120;;;39541:79;;:::i;:::-;39502:120;39661:1;39686:63;39741:7;39732:6;39721:9;39717:22;39686:63;:::i;:::-;39676:73;;39632:127;39798:2;39824:63;39879:7;39870:6;39859:9;39855:22;39824:63;:::i;:::-;39814:73;;39769:128;39936:2;39962:64;40018:7;40009:6;39998:9;39994:22;39962:64;:::i;:::-;39952:74;;39907:129;40075:2;40101:64;40157:7;40148:6;40137:9;40133:22;40101:64;:::i;:::-;40091:74;;40046:129;40214:3;40241:63;40296:7;40287:6;40276:9;40272:22;40241:63;:::i;:::-;40231:73;;40185:129;39350:971;;;;;;;;:::o;40327:556::-;40366:7;40389:19;40406:1;40389:19;:::i;:::-;40384:24;;40422:19;40439:1;40422:19;:::i;:::-;40417:24;;40476:1;40473;40469:9;40498:29;40515:11;40498:29;:::i;:::-;40487:40;;40585:66;40582:1;40579:73;40575:1;40572;40568:9;40564:89;40561:115;;;40656:18;;:::i;:::-;40561:115;40826:1;40817:7;40812:16;40809:1;40806:23;40786:1;40779:9;40759:84;40736:140;;40856:18;;:::i;:::-;40736:140;40374:509;40327:556;;;;:::o;40889:164::-;41029:16;41025:1;41017:6;41013:14;41006:40;40889:164;:::o;41059:366::-;41201:3;41222:67;41286:2;41281:3;41222:67;:::i;:::-;41215:74;;41298:93;41387:3;41298:93;:::i;:::-;41416:2;41411:3;41407:12;41400:19;;41059:366;;;:::o;41431:419::-;41597:4;41635:2;41624:9;41620:18;41612:26;;41684:9;41678:4;41674:20;41670:1;41659:9;41655:17;41648:47;41712:131;41838:4;41712:131;:::i;:::-;41704:139;;41431:419;;;:::o;41856:180::-;41904:77;41901:1;41894:88;42001:4;41998:1;41991:15;42025:4;42022:1;42015:15;42042:162;42182:14;42178:1;42170:6;42166:14;42159:38;42042:162;:::o;42210:366::-;42352:3;42373:67;42437:2;42432:3;42373:67;:::i;:::-;42366:74;;42449:93;42538:3;42449:93;:::i;:::-;42567:2;42562:3;42558:12;42551:19;;42210:366;;;:::o;42582:419::-;42748:4;42786:2;42775:9;42771:18;42763:26;;42835:9;42829:4;42825:20;42821:1;42810:9;42806:17;42799:47;42863:131;42989:4;42863:131;:::i;:::-;42855:139;;42582:419;;;:::o;43007:233::-;43046:3;43069:24;43087:5;43069:24;:::i;:::-;43060:33;;43115:66;43108:5;43105:77;43102:103;;43185:18;;:::i;:::-;43102:103;43232:1;43225:5;43221:13;43214:20;;43007:233;;;:::o;43246:160::-;43386:12;43382:1;43374:6;43370:14;43363:36;43246:160;:::o;43412:366::-;43554:3;43575:67;43639:2;43634:3;43575:67;:::i;:::-;43568:74;;43651:93;43740:3;43651:93;:::i;:::-;43769:2;43764:3;43760:12;43753:19;;43412:366;;;:::o;43784:419::-;43950:4;43988:2;43977:9;43973:18;43965:26;;44037:9;44031:4;44027:20;44023:1;44012:9;44008:17;44001:47;44065:131;44191:4;44065:131;:::i;:::-;44057:139;;43784:419;;;:::o;44209:169::-;44349:21;44345:1;44337:6;44333:14;44326:45;44209:169;:::o;44384:366::-;44526:3;44547:67;44611:2;44606:3;44547:67;:::i;:::-;44540:74;;44623:93;44712:3;44623:93;:::i;:::-;44741:2;44736:3;44732:12;44725:19;;44384:366;;;:::o;44756:419::-;44922:4;44960:2;44949:9;44945:18;44937:26;;45009:9;45003:4;44999:20;44995:1;44984:9;44980:17;44973:47;45037:131;45163:4;45037:131;:::i;:::-;45029:139;;44756:419;;;:::o;45181:182::-;45321:34;45317:1;45309:6;45305:14;45298:58;45181:182;:::o;45369:366::-;45511:3;45532:67;45596:2;45591:3;45532:67;:::i;:::-;45525:74;;45608:93;45697:3;45608:93;:::i;:::-;45726:2;45721:3;45717:12;45710:19;;45369:366;;;:::o;45741:419::-;45907:4;45945:2;45934:9;45930:18;45922:26;;45994:9;45988:4;45984:20;45980:1;45969:9;45965:17;45958:47;46022:131;46148:4;46022:131;:::i;:::-;46014:139;;45741:419;;;:::o;46166:160::-;46306:12;46302:1;46294:6;46290:14;46283:36;46166:160;:::o;46332:366::-;46474:3;46495:67;46559:2;46554:3;46495:67;:::i;:::-;46488:74;;46571:93;46660:3;46571:93;:::i;:::-;46689:2;46684:3;46680:12;46673:19;;46332:366;;;:::o;46704:419::-;46870:4;46908:2;46897:9;46893:18;46885:26;;46957:9;46951:4;46947:20;46943:1;46932:9;46928:17;46921:47;46985:131;47111:4;46985:131;:::i;:::-;46977:139;;46704:419;;;:::o;47129:173::-;47269:25;47265:1;47257:6;47253:14;47246:49;47129:173;:::o;47308:366::-;47450:3;47471:67;47535:2;47530:3;47471:67;:::i;:::-;47464:74;;47547:93;47636:3;47547:93;:::i;:::-;47665:2;47660:3;47656:12;47649:19;;47308:366;;;:::o;47680:419::-;47846:4;47884:2;47873:9;47869:18;47861:26;;47933:9;47927:4;47923:20;47919:1;47908:9;47904:17;47897:47;47961:131;48087:4;47961:131;:::i;:::-;47953:139;;47680:419;;;:::o;48105:85::-;48150:7;48179:5;48168:16;;48105:85;;;:::o;48196:60::-;48224:3;48245:5;48238:12;;48196:60;;;:::o;48262:158::-;48320:9;48353:61;48371:42;48380:32;48406:5;48380:32;:::i;:::-;48371:42;:::i;:::-;48353:61;:::i;:::-;48340:74;;48262:158;;;:::o;48426:147::-;48521:45;48560:5;48521:45;:::i;:::-;48516:3;48509:58;48426:147;;:::o;48579:474::-;48744:4;48782:2;48771:9;48767:18;48759:26;;48795:71;48863:1;48852:9;48848:17;48839:6;48795:71;:::i;:::-;48876:80;48952:2;48941:9;48937:18;48928:6;48876:80;:::i;:::-;48966;49042:2;49031:9;49027:18;49018:6;48966:80;:::i;:::-;48579:474;;;;;;:::o;49059:225::-;49199:34;49195:1;49187:6;49183:14;49176:58;49268:8;49263:2;49255:6;49251:15;49244:33;49059:225;:::o;49290:366::-;49432:3;49453:67;49517:2;49512:3;49453:67;:::i;:::-;49446:74;;49529:93;49618:3;49529:93;:::i;:::-;49647:2;49642:3;49638:12;49631:19;;49290:366;;;:::o;49662:419::-;49828:4;49866:2;49855:9;49851:18;49843:26;;49915:9;49909:4;49905:20;49901:1;49890:9;49886:17;49879:47;49943:131;50069:4;49943:131;:::i;:::-;49935:139;;49662:419;;;:::o;50087:182::-;50227:34;50223:1;50215:6;50211:14;50204:58;50087:182;:::o;50275:366::-;50417:3;50438:67;50502:2;50497:3;50438:67;:::i;:::-;50431:74;;50514:93;50603:3;50514:93;:::i;:::-;50632:2;50627:3;50623:12;50616:19;;50275:366;;;:::o;50647:419::-;50813:4;50851:2;50840:9;50836:18;50828:26;;50900:9;50894:4;50890:20;50886:1;50875:9;50871:17;50864:47;50928:131;51054:4;50928:131;:::i;:::-;50920:139;;50647:419;;;:::o;51072:181::-;51212:33;51208:1;51200:6;51196:14;51189:57;51072:181;:::o;51259:366::-;51401:3;51422:67;51486:2;51481:3;51422:67;:::i;:::-;51415:74;;51498:93;51587:3;51498:93;:::i;:::-;51616:2;51611:3;51607:12;51600:19;;51259:366;;;:::o;51631:419::-;51797:4;51835:2;51824:9;51820:18;51812:26;;51884:9;51878:4;51874:20;51870:1;51859:9;51855:17;51848:47;51912:131;52038:4;51912:131;:::i;:::-;51904:139;;51631:419;;;:::o;52056:161::-;52196:13;52192:1;52184:6;52180:14;52173:37;52056:161;:::o;52223:366::-;52365:3;52386:67;52450:2;52445:3;52386:67;:::i;:::-;52379:74;;52462:93;52551:3;52462:93;:::i;:::-;52580:2;52575:3;52571:12;52564:19;;52223:366;;;:::o;52595:419::-;52761:4;52799:2;52788:9;52784:18;52776:26;;52848:9;52842:4;52838:20;52834:1;52823:9;52819:17;52812:47;52876:131;53002:4;52876:131;:::i;:::-;52868:139;;52595:419;;;:::o;53020:147::-;53121:11;53158:3;53143:18;;53020:147;;;;:::o;53173:114::-;;:::o;53293:398::-;53452:3;53473:83;53554:1;53549:3;53473:83;:::i;:::-;53466:90;;53565:93;53654:3;53565:93;:::i;:::-;53683:1;53678:3;53674:11;53667:18;;53293:398;;;:::o;53697:379::-;53881:3;53903:147;54046:3;53903:147;:::i;:::-;53896:154;;54067:3;54060:10;;53697:379;;;:::o;54082:168::-;54222:20;54218:1;54210:6;54206:14;54199:44;54082:168;:::o;54256:366::-;54398:3;54419:67;54483:2;54478:3;54419:67;:::i;:::-;54412:74;;54495:93;54584:3;54495:93;:::i;:::-;54613:2;54608:3;54604:12;54597:19;;54256:366;;;:::o;54628:419::-;54794:4;54832:2;54821:9;54817:18;54809:26;;54881:9;54875:4;54871:20;54867:1;54856:9;54852:17;54845:47;54909:131;55035:4;54909:131;:::i;:::-;54901:139;;54628:419;;;:::o
Swarm Source
ipfs://4b1a7c47068e63a2a194d9494a735107d2f74a5b9d722c06a78bf7e9c35d4e53
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ 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.