Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 5 from a total of 5 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Set Sale Token P... | 17556183 | 981 days ago | IN | 0 ETH | 0.00278421 | ||||
| Stop Unlocking | 17556176 | 981 days ago | IN | 0 ETH | 0.0003293 | ||||
| Withdraw All | 17556173 | 981 days ago | IN | 0 ETH | 0.00054829 | ||||
| Start Unlocking | 17556170 | 981 days ago | IN | 0 ETH | 0.00068725 | ||||
| Set Sale Token P... | 17556151 | 981 days ago | IN | 0 ETH | 0.00862614 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
YapSwapPresale
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2023-06-25
*/
/**
*Submitted for verification at Etherscan.io on 2023-05-10
*/
/**
*Submitted for verification at BscScan.com on 2023-04-23
*/
// File contracts/presaleNew.sol
// Sources flattened with hardhat v2.8.0 https://hardhat.org
// File @openzeppelin/contracts/utils/math/SafeMath.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)
pragma solidity ^0.8.0;
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
/**
* @dev Wrappers over Solidity's arithmetic operations.
*
* NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
* now has built in overflow checking.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryAdd(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the substraction of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function trySub(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
/**
* @dev Returns the multiplication of two unsigned integers, with an overflow flag.
*
* _Available since v3.4._
*/
function tryMul(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
/**
* @dev Returns the division of two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryDiv(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
*
* _Available since v3.4._
*/
function tryMod(
uint256 a,
uint256 b
) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
return a + b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return a - b;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
return a * b;
}
/**
* @dev Returns the integer division of two unsigned integers, reverting on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator.
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return a % b;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {trySub}.
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b <= a, errorMessage);
return a - b;
}
}
/**
* @dev Returns the integer division of two unsigned integers, reverting with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a / b;
}
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* reverting with custom message when dividing by zero.
*
* CAUTION: This function is deprecated because it requires allocating memory for the error
* message unnecessarily. For custom revert reasons use {tryMod}.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
unchecked {
require(b > 0, errorMessage);
return a % b;
}
}
}
// File @openzeppelin/contracts/token/ERC20/IERC20.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(
address owner,
address spender
) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address sender,
address recipient,
uint256 amount
) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
// File @openzeppelin/contracts/utils/Context.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @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@v4.4.2
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File contracts/OwnerWithdrawable.sol
pragma solidity ^0.8.0;
contract OwnerWithdrawable is Ownable {
using SafeMath for uint256;
using SafeERC20 for IERC20;
receive() external payable {}
fallback() external payable {}
function withdraw(address token, uint256 amt) public onlyOwner {
IERC20(token).safeTransfer(msg.sender, amt);
}
function withdrawAll(address token) public onlyOwner {
uint256 amt = IERC20(token).balanceOf(address(this));
withdraw(token, amt);
}
function withdrawCurrency(uint256 amt) public onlyOwner {
payable(msg.sender).transfer(amt);
}
// function deposit(address token, uint256 amt) public onlyOwner {
// uint256 allowance = IERC20(token).allowance(msg.sender, address(this));
// require(allowance >= amt, "Check the token allowance");
// IERC20(token).transferFrom(owner(), address(this), amt);
// }
}
// File @openzeppelin/contracts/utils/Address.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)
pragma solidity ^0.8.0;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(
address(this).balance >= amount,
"Address: insufficient balance"
);
(bool success, ) = recipient.call{value: amount}("");
require(
success,
"Address: unable to send value, recipient may have reverted"
);
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data
) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return
functionCallWithValue(
target,
data,
value,
"Address: low-level call with value failed"
);
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(
address(this).balance >= value,
"Address: insufficient balance for call"
);
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(
data
);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data
) internal view returns (bytes memory) {
return
functionStaticCall(
target,
data,
"Address: low-level static call failed"
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data
) internal returns (bytes memory) {
return
functionDelegateCall(
target,
data,
"Address: low-level delegate call failed"
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)
pragma solidity ^0.8.0;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(
token,
abi.encodeWithSelector(token.transfer.selector, to, value)
);
}
function safeTransferFrom(
IERC20 token,
address from,
address to,
uint256 value
) internal {
_callOptionalReturn(
token,
abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
);
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(
IERC20 token,
address spender,
uint256 value
) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
require(
(value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(
token,
abi.encodeWithSelector(token.approve.selector, spender, value)
);
}
function safeIncreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
uint256 newAllowance = token.allowance(address(this), spender) + value;
_callOptionalReturn(
token,
abi.encodeWithSelector(
token.approve.selector,
spender,
newAllowance
)
);
}
function safeDecreaseAllowance(
IERC20 token,
address spender,
uint256 value
) internal {
unchecked {
uint256 oldAllowance = token.allowance(address(this), spender);
require(
oldAllowance >= value,
"SafeERC20: decreased allowance below zero"
);
uint256 newAllowance = oldAllowance - value;
_callOptionalReturn(
token,
abi.encodeWithSelector(
token.approve.selector,
spender,
newAllowance
)
);
}
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(
data,
"SafeERC20: low-level call failed"
);
if (returndata.length > 0) {
// Return data is optional
require(
abi.decode(returndata, (bool)),
"SafeERC20: ERC20 operation did not succeed"
);
}
}
}
// File @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol@v4.4.2
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
pragma solidity ^0.8.0;
/**
* @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 contracts/PreSale.sol
// SPDX-License-Identifier: MIT
// import "hardhat/console.sol";
pragma solidity ^0.8.0;
contract YapSwapPresale is OwnerWithdrawable {
using SafeMath for uint256;
using SafeERC20 for IERC20;
using SafeERC20 for IERC20Metadata;
uint256[20] public rate;
// Token for which presale is being done
address public saleToken;
uint public saleTokenDec;
//Total tokens to be sold in the presale
uint256[20] public totalTokensforSale;
// Whitelist of tokens to buy from
mapping(address => bool) public tokenWL;
// 1 Token price in terms of WL tokens
mapping(address => uint256[20]) public tokenPrices;
// List of Buyers
address[] public buyers;
bool public isUnlockingStarted;
bool public isPresaleStarted;
uint public presalePhase;
// Amounts bought by buyers
mapping(address => BuyerTokenDetails) public buyersAmount;
mapping(address => uint256[3]) public presaleData;
//
// Statistics
//
uint256[20] public totalTokensSold;
struct BuyerTokenDetails {
uint amount;
bool isClaimed;
}
constructor() {}
//modifier to check if the sale has already started
modifier saleStarted() {
require(!isPresaleStarted, "PreSale: Sale has already started");
_;
}
//function to set information of Token sold in Pre-Sale and its rate in Native currency
function setSaleTokenParams(
address _saleToken,
uint256[20] calldata _totalTokensforSale
) external onlyOwner saleStarted {
saleToken = _saleToken;
saleTokenDec = IERC20Metadata(saleToken).decimals();
totalTokensforSale = _totalTokensforSale;
uint deposit;
for (uint i = 0; i < 20; i++) {
deposit = deposit.add(totalTokensforSale[i]);
}
IERC20(saleToken).safeTransferFrom(msg.sender, address(this), deposit);
}
// Add a token to buy presale token from, with price
function addWhiteListedToken(
address _token,
uint256[20] calldata _prices
) external onlyOwner {
tokenWL[_token] = true;
for (uint256 i = 0; i < _prices.length; i++) {
require(_prices[i] != 0, "Presale: Cannot set price to 0");
}
tokenPrices[_token] = _prices;
}
function updateEthRate(uint[20] calldata _rate) external onlyOwner {
rate = _rate;
}
function updateTokenRate(
address _token,
uint256[20] memory _prices
) external onlyOwner {
require(tokenWL[_token], "Presale: Token not whitelisted");
for (uint256 i = 0; i < _prices.length; i++) {
require(_prices[i] != 0, "Presale: Cannot set price to 0");
}
tokenPrices[_token] = _prices;
}
function startPresale() external onlyOwner {
require(!isPresaleStarted, "PreSale: Sale has already started");
isPresaleStarted = true;
}
function stopPresale() external onlyOwner {
require(isPresaleStarted, "PreSale: Sale hasn't started yet!");
isPresaleStarted = false;
}
function startUnlocking() external onlyOwner {
require(!isUnlockingStarted, "PreSale: Unlocking has already started");
isUnlockingStarted = true;
}
function stopUnlocking() external onlyOwner {
require(isUnlockingStarted, "PreSale: Unlocking hasn't started yet!");
isUnlockingStarted = false;
}
function nextPhase() external onlyOwner {
require(isPresaleStarted, "PreSale: Sale hasn't started yet!");
require(presalePhase + 1 < 20, "PreSale: Sale has ended!");
presalePhase = presalePhase + 1;
}
function setPhase(uint _phase) external onlyOwner {
require(isPresaleStarted, "PreSale: Sale hasn't started yet!");
require(_phase < 20, "PreSale: Sale has ended!");
presalePhase = _phase;
}
// Public view function to calculate amount of sale tokens returned if you buy using "amount" of "token"
function getTokenAmount(
address token,
uint256 amount
) public view returns (uint256) {
if (!isPresaleStarted) {
return 0;
}
uint256 amtOut;
if (token != address(0)) {
require(tokenWL[token] == true, "Presale: Token not whitelisted");
uint256 price = tokenPrices[token][presalePhase];
amtOut = amount.mul(10 ** saleTokenDec).div(price);
} else {
amtOut = amount.mul(10 ** saleTokenDec).div(rate[presalePhase]);
}
return amtOut;
}
// Public Function to buy tokens. APPROVAL needs to be done first
function buyToken(address _token, uint256 _amount) external payable {
require(isPresaleStarted, "PreSale: Sale hasn't started yet!");
require(
totalTokensSold[presalePhase] <= totalTokensforSale[presalePhase],
"PreSale: Total Token Sale Reached for current stage!"
);
uint256 saleTokenAmt;
if (_token != address(0)) {
require(_amount > 0, "Presale: Cannot buy with zero amount");
require(tokenWL[_token] == true, "Presale: Token not whitelisted");
saleTokenAmt = getTokenAmount(_token, _amount);
require(
(totalTokensSold[presalePhase] + saleTokenAmt) <=
totalTokensforSale[presalePhase],
"PreSale: Total Token Sale Reached!"
);
IERC20(_token).safeTransferFrom(msg.sender, address(this), _amount);
} else {
saleTokenAmt = getTokenAmount(address(0), msg.value);
require(
(totalTokensSold[presalePhase] + saleTokenAmt) <=
totalTokensforSale[presalePhase],
"PreSale: Total Token Sale Reached!"
);
}
totalTokensSold[presalePhase] += saleTokenAmt;
buyersAmount[msg.sender].amount += saleTokenAmt;
presaleData[msg.sender][presalePhase] += saleTokenAmt;
}
function withdrawToken() external {
uint256 tokensforWithdraw;
require(
buyersAmount[msg.sender].isClaimed == false,
"Presale: Already claimed"
);
require(isUnlockingStarted, "Presale: Unlocking not started yet");
tokensforWithdraw = buyersAmount[msg.sender].amount;
buyersAmount[msg.sender].isClaimed = true;
IERC20(saleToken).safeTransfer(msg.sender, tokensforWithdraw);
}
function getAllTotalTokensSold()
external
view
returns (uint256[20] memory)
{
return totalTokensSold;
}
function getAllTotalTokensForSale()
external
view
returns (uint256[20] memory)
{
return totalTokensforSale;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256[20]","name":"_prices","type":"uint256[20]"}],"name":"addWhiteListedToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buyToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"buyersAmount","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"isClaimed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllTotalTokensForSale","outputs":[{"internalType":"uint256[20]","name":"","type":"uint256[20]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getAllTotalTokensSold","outputs":[{"internalType":"uint256[20]","name":"","type":"uint256[20]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"getTokenAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPresaleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isUnlockingStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"presaleData","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presalePhase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"saleTokenDec","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_phase","type":"uint256"}],"name":"setPhase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_saleToken","type":"address"},{"internalType":"uint256[20]","name":"_totalTokensforSale","type":"uint256[20]"}],"name":"setSaleTokenParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startUnlocking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopUnlocking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenPrices","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenWL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalTokensSold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalTokensforSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[20]","name":"_rate","type":"uint256[20]"}],"name":"updateEthRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256[20]","name":"_prices","type":"uint256[20]"}],"name":"updateTokenRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdrawCurrency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040523480156200001157600080fd5b5062000032620000266200003860201b60201c565b6200004060201b60201c565b62000104565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b613a6880620001146000396000f3fe6080604052600436106101fc5760003560e01c80639431991b1161010d578063ca628c78116100a0578063e985e3671161006f578063e985e367146106ce578063f2aa8218146106f9578063f2fde38b14610736578063f3fef3a31461075f578063fa09e6301461078857610203565b8063ca628c7814610624578063d293187c1461063b578063e59622f814610666578063e7ee6ad61461069157610203565b8063aa976007116100dc578063aa97600714610590578063aab60d41146105b9578063ace1741c146105e2578063b5b0763c1461060d57610203565b80639431991b146104d457806398d6d8ed146104fd5780639da48b7f14610528578063a7b78a2e1461056557610203565b80633c00a36c1161019057806368f8fc101161015f57806368f8fc10146103fc578063715018a61461041857806377927b631461042f5780638ce0b9d21461046c5780638da5cb5b146104a957610203565b80633c00a36c146103415780633eadb6db1461036a57806354a9f10214610381578063683b3b97146103bf57610203565b80632a95c24c116101cc5780632a95c24c146102995780632cc82655146102b05780633848a771146102d957806338d56acd1461030457610203565b8062e6c0cc1461020557806304c98b2b1461022e578063115ece4c146102455780631ad2ad1a1461028257610203565b3661020357005b005b34801561021157600080fd5b5061022c600480360381019061022791906127ce565b6107b1565b005b34801561023a57600080fd5b50610243610952565b005b34801561025157600080fd5b5061026c60048036038101906102679190612845565b610a3b565b6040516102799190612894565b60405180910390f35b34801561028e57600080fd5b50610297610c0e565b005b3480156102a557600080fd5b506102ae610cf6565b005b3480156102bc57600080fd5b506102d760048036038101906102d291906128af565b610ddf565b005b3480156102e557600080fd5b506102ee610ef7565b6040516102fb91906128f7565b60405180910390f35b34801561031057600080fd5b5061032b600480360381019061032691906128af565b610f0a565b6040516103389190612894565b60405180910390f35b34801561034d57600080fd5b50610368600480360381019061036391906128af565b610f25565b005b34801561037657600080fd5b5061037f610feb565b005b34801561038d57600080fd5b506103a860048036038101906103a39190612912565b61111e565b6040516103b692919061293f565b60405180910390f35b3480156103cb57600080fd5b506103e660048036038101906103e19190612845565b61114f565b6040516103f39190612894565b60405180910390f35b61041660048036038101906104119190612845565b611177565b005b34801561042457600080fd5b5061042d61157d565b005b34801561043b57600080fd5b50610456600480360381019061045191906128af565b611605565b6040516104639190612894565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190612912565b611620565b6040516104a091906128f7565b60405180910390f35b3480156104b557600080fd5b506104be611640565b6040516104cb9190612977565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f691906127ce565b611669565b005b34801561050957600080fd5b506105126118c5565b60405161051f91906128f7565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190612845565b6118d8565b60405161055c9190612894565b60405180910390f35b34801561057157600080fd5b5061057a611900565b6040516105879190612a3d565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b29190612a59565b61194b565b005b3480156105c557600080fd5b506105e060048036038101906105db9190612bc9565b6119dc565b005b3480156105ee57600080fd5b506105f7611bb1565b6040516106049190612894565b60405180910390f35b34801561061957600080fd5b50610622611bb7565b005b34801561063057600080fd5b50610639611c9f565b005b34801561064757600080fd5b50610650611e75565b60405161065d9190612894565b60405180910390f35b34801561067257600080fd5b5061067b611e7b565b6040516106889190612a3d565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b391906128af565b611ec6565b6040516106c59190612894565b60405180910390f35b3480156106da57600080fd5b506106e3611ee1565b6040516106f09190612977565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b91906128af565b611f07565b60405161072d9190612977565b60405180910390f35b34801561074257600080fd5b5061075d60048036038101906107589190612912565b611f46565b005b34801561076b57600080fd5b5061078660048036038101906107819190612845565b61203d565b005b34801561079457600080fd5b506107af60048036038101906107aa9190612912565b6120e8565b005b6107b96121f0565b73ffffffffffffffffffffffffffffffffffffffff166107d7611640565b73ffffffffffffffffffffffffffffffffffffffff161461082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082490612c67565b60405180910390fd5b6001602b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060005b60148110156108fe5760008282601481106108a6576108a5612c87565b5b6020020135036108eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e290612d02565b60405180910390fd5b80806108f690612d51565b915050610888565b5080602c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090601461094d92919061267a565b505050565b61095a6121f0565b73ffffffffffffffffffffffffffffffffffffffff16610978611640565b73ffffffffffffffffffffffffffffffffffffffff16146109ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c590612c67565b60405180910390fd5b602e60019054906101000a900460ff1615610a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1590612e0b565b60405180910390fd5b6001602e60016101000a81548160ff021916908315150217905550565b6000602e60019054906101000a900460ff16610a5a5760009050610c08565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610bb65760011515602b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1990612e77565b60405180910390fd5b6000602c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020602f5460148110610b7757610b76612c87565b5b01549050610bae81610ba0601654600a610b919190612fca565b876121f890919063ffffffff16565b61220e90919063ffffffff16565b915050610c03565b610c006001602f5460148110610bcf57610bce612c87565b5b0154610bf2601654600a610be39190612fca565b866121f890919063ffffffff16565b61220e90919063ffffffff16565b90505b809150505b92915050565b610c166121f0565b73ffffffffffffffffffffffffffffffffffffffff16610c34611640565b73ffffffffffffffffffffffffffffffffffffffff1614610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190612c67565b60405180910390fd5b602e60019054906101000a900460ff16610cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd090613087565b60405180910390fd5b6000602e60016101000a81548160ff021916908315150217905550565b610cfe6121f0565b73ffffffffffffffffffffffffffffffffffffffff16610d1c611640565b73ffffffffffffffffffffffffffffffffffffffff1614610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6990612c67565b60405180910390fd5b602e60009054906101000a900460ff1615610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db990613119565b60405180910390fd5b6001602e60006101000a81548160ff021916908315150217905550565b610de76121f0565b73ffffffffffffffffffffffffffffffffffffffff16610e05611640565b73ffffffffffffffffffffffffffffffffffffffff1614610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290612c67565b60405180910390fd5b602e60019054906101000a900460ff16610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190613087565b60405180910390fd5b60148110610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee490613185565b60405180910390fd5b80602f8190555050565b602e60009054906101000a900460ff1681565b60178160148110610f1a57600080fd5b016000915090505481565b610f2d6121f0565b73ffffffffffffffffffffffffffffffffffffffff16610f4b611640565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9890612c67565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fe7573d6000803e3d6000fd5b5050565b610ff36121f0565b73ffffffffffffffffffffffffffffffffffffffff16611011611640565b73ffffffffffffffffffffffffffffffffffffffff1614611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90612c67565b60405180910390fd5b602e60019054906101000a900460ff166110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad90613087565b60405180910390fd5b60146001602f546110c791906131a5565b10611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fe90613185565b60405180910390fd5b6001602f5461111691906131a5565b602f81905550565b60306020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b602c602052816000526040600020816014811061116b57600080fd5b01600091509150505481565b602e60019054906101000a900460ff166111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90613087565b60405180910390fd5b6017602f54601481106111dc576111db612c87565b5b01546032602f54601481106111f4576111f3612c87565b5b01541115611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e9061324b565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146113fc57600082116112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a6906132dd565b60405180910390fd5b60011515602b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133990612e77565b60405180910390fd5b61134c8383610a3b565b90506017602f546014811061136457611363612c87565b5b0154816032602f546014811061137d5761137c612c87565b5b015461138991906131a5565b11156113ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c19061336f565b60405180910390fd5b6113f73330848673ffffffffffffffffffffffffffffffffffffffff16612224909392919063ffffffff16565b611486565b611407600034610a3b565b90506017602f546014811061141f5761141e612c87565b5b0154816032602f546014811061143857611437612c87565b5b015461144491906131a5565b1115611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c9061336f565b60405180910390fd5b5b806032602f546014811061149d5761149c612c87565b5b0160008282546114ad91906131a5565b9250508190555080603060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082825461150691906131a5565b9250508190555080603160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020602f546003811061156157611560612c87565b5b01600082825461157191906131a5565b92505081905550505050565b6115856121f0565b73ffffffffffffffffffffffffffffffffffffffff166115a3611640565b73ffffffffffffffffffffffffffffffffffffffff16146115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f090612c67565b60405180910390fd5b61160360006122ad565b565b6032816014811061161557600080fd5b016000915090505481565b602b6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116716121f0565b73ffffffffffffffffffffffffffffffffffffffff1661168f611640565b73ffffffffffffffffffffffffffffffffffffffff16146116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc90612c67565b60405180910390fd5b602e60019054906101000a900460ff1615611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c90612e0b565b60405180910390fd5b81601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180791906133c8565b60ff1660168190555080601790601461182192919061267a565b50600080600090505b60148110156118705761185b6017826014811061184a57611849612c87565b5b01548361237190919063ffffffff16565b9150808061186890612d51565b91505061182a565b506118c0333083601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612224909392919063ffffffff16565b505050565b602e60019054906101000a900460ff1681565b603160205281600052604060002081600381106118f457600080fd5b01600091509150505481565b6119086126ba565b6032601480602002604051908101604052809291908260148015611941576020028201915b81548152602001906001019080831161192d575b5050505050905090565b6119536121f0565b73ffffffffffffffffffffffffffffffffffffffff16611971611640565b73ffffffffffffffffffffffffffffffffffffffff16146119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be90612c67565b60405180910390fd5b8060019060146119d892919061267a565b5050565b6119e46121f0565b73ffffffffffffffffffffffffffffffffffffffff16611a02611640565b73ffffffffffffffffffffffffffffffffffffffff1614611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f90612c67565b60405180910390fd5b602b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90612e77565b60405180910390fd5b60005b6014811015611b5d576000828260148110611b0557611b04612c87565b5b602002015103611b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4190612d02565b60405180910390fd5b8080611b5590612d51565b915050611ae7565b5080602c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020906014611bac9291906126dd565b505050565b60165481565b611bbf6121f0565b73ffffffffffffffffffffffffffffffffffffffff16611bdd611640565b73ffffffffffffffffffffffffffffffffffffffff1614611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90612c67565b60405180910390fd5b602e60009054906101000a900460ff16611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7990613467565b60405180910390fd5b6000602e60006101000a81548160ff021916908315150217905550565b6000801515603060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff16151514611d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2d906134d3565b60405180910390fd5b602e60009054906101000a900460ff16611d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7c90613565565b60405180910390fd5b603060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506001603060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff021916908315150217905550611e723382601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123879092919063ffffffff16565b50565b602f5481565b611e836126ba565b6017601480602002604051908101604052809291908260148015611ebc576020028201915b815481526020019060010190808311611ea8575b5050505050905090565b60018160148110611ed657600080fd5b016000915090505481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602d8181548110611f1757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f4e6121f0565b73ffffffffffffffffffffffffffffffffffffffff16611f6c611640565b73ffffffffffffffffffffffffffffffffffffffff1614611fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb990612c67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612031576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612028906135f7565b60405180910390fd5b61203a816122ad565b50565b6120456121f0565b73ffffffffffffffffffffffffffffffffffffffff16612063611640565b73ffffffffffffffffffffffffffffffffffffffff16146120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090612c67565b60405180910390fd5b6120e433828473ffffffffffffffffffffffffffffffffffffffff166123879092919063ffffffff16565b5050565b6120f06121f0565b73ffffffffffffffffffffffffffffffffffffffff1661210e611640565b73ffffffffffffffffffffffffffffffffffffffff1614612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215b90612c67565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161219f9190612977565b602060405180830381865afa1580156121bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e0919061362c565b90506121ec828261203d565b5050565b600033905090565b600081836122069190613659565b905092915050565b6000818361221c91906136ca565b905092915050565b6122a7846323b872dd60e01b858585604051602401612245939291906136fb565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061240d565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361237f91906131a5565b905092915050565b6124088363a9059cbb60e01b84846040516024016123a6929190613732565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061240d565b505050565b600061246f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166124d49092919063ffffffff16565b90506000815111156124cf578080602001905181019061248f9190613787565b6124ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c590613826565b60405180910390fd5b5b505050565b60606124e384846000856124ec565b90509392505050565b606082471015612531576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612528906138b8565b60405180910390fd5b61253a85612600565b612579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257090613924565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125a291906139b5565b60006040518083038185875af1925050503d80600081146125df576040519150601f19603f3d011682016040523d82523d6000602084013e6125e4565b606091505b50915091506125f4828286612613565b92505050949350505050565b600080823b905060008111915050919050565b6060831561262357829050612673565b6000835111156126365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266a9190613a10565b60405180910390fd5b9392505050565b82601481019282156126a9579160200282015b828111156126a857823582559160200191906001019061268d565b5b5090506126b6919061271d565b5090565b604051806102800160405280601490602082028036833780820191505090505090565b826014810192821561270c579160200282015b8281111561270b5782518255916020019190600101906126f0565b5b509050612719919061271d565b5090565b5b8082111561273657600081600090555060010161271e565b5090565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061277482612749565b9050919050565b61278481612769565b811461278f57600080fd5b50565b6000813590506127a18161277b565b92915050565b600080fd5b6000819050826020601402820111156127c8576127c76127a7565b5b92915050565b6000806102a083850312156127e6576127e5612744565b5b60006127f485828601612792565b9250506020612805858286016127ac565b9150509250929050565b6000819050919050565b6128228161280f565b811461282d57600080fd5b50565b60008135905061283f81612819565b92915050565b6000806040838503121561285c5761285b612744565b5b600061286a85828601612792565b925050602061287b85828601612830565b9150509250929050565b61288e8161280f565b82525050565b60006020820190506128a96000830184612885565b92915050565b6000602082840312156128c5576128c4612744565b5b60006128d384828501612830565b91505092915050565b60008115159050919050565b6128f1816128dc565b82525050565b600060208201905061290c60008301846128e8565b92915050565b60006020828403121561292857612927612744565b5b600061293684828501612792565b91505092915050565b60006040820190506129546000830185612885565b61296160208301846128e8565b9392505050565b61297181612769565b82525050565b600060208201905061298c6000830184612968565b92915050565b600060149050919050565b600081905092915050565b6000819050919050565b6129bb8161280f565b82525050565b60006129cd83836129b2565b60208301905092915050565b6000602082019050919050565b6129ef81612992565b6129f9818461299d565b9250612a04826129a8565b8060005b83811015612a35578151612a1c87826129c1565b9650612a27836129d9565b925050600181019050612a08565b505050505050565b600061028082019050612a5360008301846129e6565b92915050565b60006102808284031215612a7057612a6f612744565b5b6000612a7e848285016127ac565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ad582612a8c565b810181811067ffffffffffffffff82111715612af457612af3612a9d565b5b80604052505050565b6000612b0761273a565b9050612b138282612acc565b919050565b600067ffffffffffffffff821115612b3357612b32612a9d565b5b602082029050919050565b6000612b51612b4c84612b18565b612afd565b90508060208402830185811115612b6b57612b6a6127a7565b5b835b81811015612b945780612b808882612830565b845260208401935050602081019050612b6d565b5050509392505050565b600082601f830112612bb357612bb2612a87565b5b6014612bc0848285612b3e565b91505092915050565b6000806102a08385031215612be157612be0612744565b5b6000612bef85828601612792565b9250506020612c0085828601612b9e565b9150509250929050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612c51602083612c0a565b9150612c5c82612c1b565b602082019050919050565b60006020820190508181036000830152612c8081612c44565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f50726573616c653a2043616e6e6f742073657420707269636520746f20300000600082015250565b6000612cec601e83612c0a565b9150612cf782612cb6565b602082019050919050565b60006020820190508181036000830152612d1b81612cdf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d5c8261280f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d8e57612d8d612d22565b5b600182019050919050565b7f50726553616c653a2053616c652068617320616c72656164792073746172746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612df5602183612c0a565b9150612e0082612d99565b604082019050919050565b60006020820190508181036000830152612e2481612de8565b9050919050565b7f50726573616c653a20546f6b656e206e6f742077686974656c69737465640000600082015250565b6000612e61601e83612c0a565b9150612e6c82612e2b565b602082019050919050565b60006020820190508181036000830152612e9081612e54565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115612eee57808604811115612eca57612ec9612d22565b5b6001851615612ed95780820291505b8081029050612ee785612e97565b9450612eae565b94509492505050565b600082612f075760019050612fc3565b81612f155760009050612fc3565b8160018114612f2b5760028114612f3557612f64565b6001915050612fc3565b60ff841115612f4757612f46612d22565b5b8360020a915084821115612f5e57612f5d612d22565b5b50612fc3565b5060208310610133831016604e8410600b8410161715612f995782820a905083811115612f9457612f93612d22565b5b612fc3565b612fa68484846001612ea4565b92509050818404811115612fbd57612fbc612d22565b5b81810290505b9392505050565b6000612fd58261280f565b9150612fe08361280f565b925061300d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612ef7565b905092915050565b7f50726553616c653a2053616c65206861736e277420737461727465642079657460008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b6000613071602183612c0a565b915061307c82613015565b604082019050919050565b600060208201905081810360008301526130a081613064565b9050919050565b7f50726553616c653a20556e6c6f636b696e672068617320616c7265616479207360008201527f7461727465640000000000000000000000000000000000000000000000000000602082015250565b6000613103602683612c0a565b915061310e826130a7565b604082019050919050565b60006020820190508181036000830152613132816130f6565b9050919050565b7f50726553616c653a2053616c652068617320656e646564210000000000000000600082015250565b600061316f601883612c0a565b915061317a82613139565b602082019050919050565b6000602082019050818103600083015261319e81613162565b9050919050565b60006131b08261280f565b91506131bb8361280f565b92508282019050808211156131d3576131d2612d22565b5b92915050565b7f50726553616c653a20546f74616c20546f6b656e2053616c652052656163686560008201527f6420666f722063757272656e7420737461676521000000000000000000000000602082015250565b6000613235603483612c0a565b9150613240826131d9565b604082019050919050565b6000602082019050818103600083015261326481613228565b9050919050565b7f50726573616c653a2043616e6e6f74206275792077697468207a65726f20616d60008201527f6f756e7400000000000000000000000000000000000000000000000000000000602082015250565b60006132c7602483612c0a565b91506132d28261326b565b604082019050919050565b600060208201905081810360008301526132f6816132ba565b9050919050565b7f50726553616c653a20546f74616c20546f6b656e2053616c652052656163686560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b6000613359602283612c0a565b9150613364826132fd565b604082019050919050565b600060208201905081810360008301526133888161334c565b9050919050565b600060ff82169050919050565b6133a58161338f565b81146133b057600080fd5b50565b6000815190506133c28161339c565b92915050565b6000602082840312156133de576133dd612744565b5b60006133ec848285016133b3565b91505092915050565b7f50726553616c653a20556e6c6f636b696e67206861736e27742073746172746560008201527f6420796574210000000000000000000000000000000000000000000000000000602082015250565b6000613451602683612c0a565b915061345c826133f5565b604082019050919050565b6000602082019050818103600083015261348081613444565b9050919050565b7f50726573616c653a20416c726561647920636c61696d65640000000000000000600082015250565b60006134bd601883612c0a565b91506134c882613487565b602082019050919050565b600060208201905081810360008301526134ec816134b0565b9050919050565b7f50726573616c653a20556e6c6f636b696e67206e6f742073746172746564207960008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b600061354f602283612c0a565b915061355a826134f3565b604082019050919050565b6000602082019050818103600083015261357e81613542565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135e1602683612c0a565b91506135ec82613585565b604082019050919050565b60006020820190508181036000830152613610816135d4565b9050919050565b60008151905061362681612819565b92915050565b60006020828403121561364257613641612744565b5b600061365084828501613617565b91505092915050565b60006136648261280f565b915061366f8361280f565b925082820261367d8161280f565b9150828204841483151761369457613693612d22565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006136d58261280f565b91506136e08361280f565b9250826136f0576136ef61369b565b5b828204905092915050565b60006060820190506137106000830186612968565b61371d6020830185612968565b61372a6040830184612885565b949350505050565b60006040820190506137476000830185612968565b6137546020830184612885565b9392505050565b613764816128dc565b811461376f57600080fd5b50565b6000815190506137818161375b565b92915050565b60006020828403121561379d5761379c612744565b5b60006137ab84828501613772565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000613810602a83612c0a565b915061381b826137b4565b604082019050919050565b6000602082019050818103600083015261383f81613803565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006138a2602683612c0a565b91506138ad82613846565b604082019050919050565b600060208201905081810360008301526138d181613895565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600061390e601d83612c0a565b9150613919826138d8565b602082019050919050565b6000602082019050818103600083015261393d81613901565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101561397857808201518184015260208101905061395d565b60008484015250505050565b600061398f82613944565b613999818561394f565b93506139a981856020860161395a565b80840191505092915050565b60006139c18284613984565b915081905092915050565b600081519050919050565b60006139e2826139cc565b6139ec8185612c0a565b93506139fc81856020860161395a565b613a0581612a8c565b840191505092915050565b60006020820190508181036000830152613a2a81846139d7565b90509291505056fea2646970667358221220cda16556199d23f48dd6fb54efecf2ac6be51765f9d668f63981d85f313f57b864736f6c63430008120033
Deployed Bytecode
0x6080604052600436106101fc5760003560e01c80639431991b1161010d578063ca628c78116100a0578063e985e3671161006f578063e985e367146106ce578063f2aa8218146106f9578063f2fde38b14610736578063f3fef3a31461075f578063fa09e6301461078857610203565b8063ca628c7814610624578063d293187c1461063b578063e59622f814610666578063e7ee6ad61461069157610203565b8063aa976007116100dc578063aa97600714610590578063aab60d41146105b9578063ace1741c146105e2578063b5b0763c1461060d57610203565b80639431991b146104d457806398d6d8ed146104fd5780639da48b7f14610528578063a7b78a2e1461056557610203565b80633c00a36c1161019057806368f8fc101161015f57806368f8fc10146103fc578063715018a61461041857806377927b631461042f5780638ce0b9d21461046c5780638da5cb5b146104a957610203565b80633c00a36c146103415780633eadb6db1461036a57806354a9f10214610381578063683b3b97146103bf57610203565b80632a95c24c116101cc5780632a95c24c146102995780632cc82655146102b05780633848a771146102d957806338d56acd1461030457610203565b8062e6c0cc1461020557806304c98b2b1461022e578063115ece4c146102455780631ad2ad1a1461028257610203565b3661020357005b005b34801561021157600080fd5b5061022c600480360381019061022791906127ce565b6107b1565b005b34801561023a57600080fd5b50610243610952565b005b34801561025157600080fd5b5061026c60048036038101906102679190612845565b610a3b565b6040516102799190612894565b60405180910390f35b34801561028e57600080fd5b50610297610c0e565b005b3480156102a557600080fd5b506102ae610cf6565b005b3480156102bc57600080fd5b506102d760048036038101906102d291906128af565b610ddf565b005b3480156102e557600080fd5b506102ee610ef7565b6040516102fb91906128f7565b60405180910390f35b34801561031057600080fd5b5061032b600480360381019061032691906128af565b610f0a565b6040516103389190612894565b60405180910390f35b34801561034d57600080fd5b50610368600480360381019061036391906128af565b610f25565b005b34801561037657600080fd5b5061037f610feb565b005b34801561038d57600080fd5b506103a860048036038101906103a39190612912565b61111e565b6040516103b692919061293f565b60405180910390f35b3480156103cb57600080fd5b506103e660048036038101906103e19190612845565b61114f565b6040516103f39190612894565b60405180910390f35b61041660048036038101906104119190612845565b611177565b005b34801561042457600080fd5b5061042d61157d565b005b34801561043b57600080fd5b50610456600480360381019061045191906128af565b611605565b6040516104639190612894565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190612912565b611620565b6040516104a091906128f7565b60405180910390f35b3480156104b557600080fd5b506104be611640565b6040516104cb9190612977565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f691906127ce565b611669565b005b34801561050957600080fd5b506105126118c5565b60405161051f91906128f7565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190612845565b6118d8565b60405161055c9190612894565b60405180910390f35b34801561057157600080fd5b5061057a611900565b6040516105879190612a3d565b60405180910390f35b34801561059c57600080fd5b506105b760048036038101906105b29190612a59565b61194b565b005b3480156105c557600080fd5b506105e060048036038101906105db9190612bc9565b6119dc565b005b3480156105ee57600080fd5b506105f7611bb1565b6040516106049190612894565b60405180910390f35b34801561061957600080fd5b50610622611bb7565b005b34801561063057600080fd5b50610639611c9f565b005b34801561064757600080fd5b50610650611e75565b60405161065d9190612894565b60405180910390f35b34801561067257600080fd5b5061067b611e7b565b6040516106889190612a3d565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b391906128af565b611ec6565b6040516106c59190612894565b60405180910390f35b3480156106da57600080fd5b506106e3611ee1565b6040516106f09190612977565b60405180910390f35b34801561070557600080fd5b50610720600480360381019061071b91906128af565b611f07565b60405161072d9190612977565b60405180910390f35b34801561074257600080fd5b5061075d60048036038101906107589190612912565b611f46565b005b34801561076b57600080fd5b5061078660048036038101906107819190612845565b61203d565b005b34801561079457600080fd5b506107af60048036038101906107aa9190612912565b6120e8565b005b6107b96121f0565b73ffffffffffffffffffffffffffffffffffffffff166107d7611640565b73ffffffffffffffffffffffffffffffffffffffff161461082d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082490612c67565b60405180910390fd5b6001602b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060005b60148110156108fe5760008282601481106108a6576108a5612c87565b5b6020020135036108eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e290612d02565b60405180910390fd5b80806108f690612d51565b915050610888565b5080602c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090601461094d92919061267a565b505050565b61095a6121f0565b73ffffffffffffffffffffffffffffffffffffffff16610978611640565b73ffffffffffffffffffffffffffffffffffffffff16146109ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c590612c67565b60405180910390fd5b602e60019054906101000a900460ff1615610a1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1590612e0b565b60405180910390fd5b6001602e60016101000a81548160ff021916908315150217905550565b6000602e60019054906101000a900460ff16610a5a5760009050610c08565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614610bb65760011515602b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514610b22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1990612e77565b60405180910390fd5b6000602c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020602f5460148110610b7757610b76612c87565b5b01549050610bae81610ba0601654600a610b919190612fca565b876121f890919063ffffffff16565b61220e90919063ffffffff16565b915050610c03565b610c006001602f5460148110610bcf57610bce612c87565b5b0154610bf2601654600a610be39190612fca565b866121f890919063ffffffff16565b61220e90919063ffffffff16565b90505b809150505b92915050565b610c166121f0565b73ffffffffffffffffffffffffffffffffffffffff16610c34611640565b73ffffffffffffffffffffffffffffffffffffffff1614610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190612c67565b60405180910390fd5b602e60019054906101000a900460ff16610cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd090613087565b60405180910390fd5b6000602e60016101000a81548160ff021916908315150217905550565b610cfe6121f0565b73ffffffffffffffffffffffffffffffffffffffff16610d1c611640565b73ffffffffffffffffffffffffffffffffffffffff1614610d72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6990612c67565b60405180910390fd5b602e60009054906101000a900460ff1615610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db990613119565b60405180910390fd5b6001602e60006101000a81548160ff021916908315150217905550565b610de76121f0565b73ffffffffffffffffffffffffffffffffffffffff16610e05611640565b73ffffffffffffffffffffffffffffffffffffffff1614610e5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5290612c67565b60405180910390fd5b602e60019054906101000a900460ff16610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190613087565b60405180910390fd5b60148110610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee490613185565b60405180910390fd5b80602f8190555050565b602e60009054906101000a900460ff1681565b60178160148110610f1a57600080fd5b016000915090505481565b610f2d6121f0565b73ffffffffffffffffffffffffffffffffffffffff16610f4b611640565b73ffffffffffffffffffffffffffffffffffffffff1614610fa1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9890612c67565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610fe7573d6000803e3d6000fd5b5050565b610ff36121f0565b73ffffffffffffffffffffffffffffffffffffffff16611011611640565b73ffffffffffffffffffffffffffffffffffffffff1614611067576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105e90612c67565b60405180910390fd5b602e60019054906101000a900460ff166110b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ad90613087565b60405180910390fd5b60146001602f546110c791906131a5565b10611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fe90613185565b60405180910390fd5b6001602f5461111691906131a5565b602f81905550565b60306020528060005260406000206000915090508060000154908060010160009054906101000a900460ff16905082565b602c602052816000526040600020816014811061116b57600080fd5b01600091509150505481565b602e60019054906101000a900460ff166111c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bd90613087565b60405180910390fd5b6017602f54601481106111dc576111db612c87565b5b01546032602f54601481106111f4576111f3612c87565b5b01541115611237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122e9061324b565b60405180910390fd5b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146113fc57600082116112af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a6906132dd565b60405180910390fd5b60011515602b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514611342576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133990612e77565b60405180910390fd5b61134c8383610a3b565b90506017602f546014811061136457611363612c87565b5b0154816032602f546014811061137d5761137c612c87565b5b015461138991906131a5565b11156113ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c19061336f565b60405180910390fd5b6113f73330848673ffffffffffffffffffffffffffffffffffffffff16612224909392919063ffffffff16565b611486565b611407600034610a3b565b90506017602f546014811061141f5761141e612c87565b5b0154816032602f546014811061143857611437612c87565b5b015461144491906131a5565b1115611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c9061336f565b60405180910390fd5b5b806032602f546014811061149d5761149c612c87565b5b0160008282546114ad91906131a5565b9250508190555080603060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001600082825461150691906131a5565b9250508190555080603160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020602f546003811061156157611560612c87565b5b01600082825461157191906131a5565b92505081905550505050565b6115856121f0565b73ffffffffffffffffffffffffffffffffffffffff166115a3611640565b73ffffffffffffffffffffffffffffffffffffffff16146115f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115f090612c67565b60405180910390fd5b61160360006122ad565b565b6032816014811061161557600080fd5b016000915090505481565b602b6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6116716121f0565b73ffffffffffffffffffffffffffffffffffffffff1661168f611640565b73ffffffffffffffffffffffffffffffffffffffff16146116e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116dc90612c67565b60405180910390fd5b602e60019054906101000a900460ff1615611735576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172c90612e0b565b60405180910390fd5b81601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061180791906133c8565b60ff1660168190555080601790601461182192919061267a565b50600080600090505b60148110156118705761185b6017826014811061184a57611849612c87565b5b01548361237190919063ffffffff16565b9150808061186890612d51565b91505061182a565b506118c0333083601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612224909392919063ffffffff16565b505050565b602e60019054906101000a900460ff1681565b603160205281600052604060002081600381106118f457600080fd5b01600091509150505481565b6119086126ba565b6032601480602002604051908101604052809291908260148015611941576020028201915b81548152602001906001019080831161192d575b5050505050905090565b6119536121f0565b73ffffffffffffffffffffffffffffffffffffffff16611971611640565b73ffffffffffffffffffffffffffffffffffffffff16146119c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119be90612c67565b60405180910390fd5b8060019060146119d892919061267a565b5050565b6119e46121f0565b73ffffffffffffffffffffffffffffffffffffffff16611a02611640565b73ffffffffffffffffffffffffffffffffffffffff1614611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f90612c67565b60405180910390fd5b602b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611ae4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611adb90612e77565b60405180910390fd5b60005b6014811015611b5d576000828260148110611b0557611b04612c87565b5b602002015103611b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4190612d02565b60405180910390fd5b8080611b5590612d51565b915050611ae7565b5080602c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020906014611bac9291906126dd565b505050565b60165481565b611bbf6121f0565b73ffffffffffffffffffffffffffffffffffffffff16611bdd611640565b73ffffffffffffffffffffffffffffffffffffffff1614611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90612c67565b60405180910390fd5b602e60009054906101000a900460ff16611c82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7990613467565b60405180910390fd5b6000602e60006101000a81548160ff021916908315150217905550565b6000801515603060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160009054906101000a900460ff16151514611d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2d906134d3565b60405180910390fd5b602e60009054906101000a900460ff16611d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7c90613565565b60405180910390fd5b603060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506001603060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010160006101000a81548160ff021916908315150217905550611e723382601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166123879092919063ffffffff16565b50565b602f5481565b611e836126ba565b6017601480602002604051908101604052809291908260148015611ebc576020028201915b815481526020019060010190808311611ea8575b5050505050905090565b60018160148110611ed657600080fd5b016000915090505481565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b602d8181548110611f1757600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f4e6121f0565b73ffffffffffffffffffffffffffffffffffffffff16611f6c611640565b73ffffffffffffffffffffffffffffffffffffffff1614611fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb990612c67565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612031576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612028906135f7565b60405180910390fd5b61203a816122ad565b50565b6120456121f0565b73ffffffffffffffffffffffffffffffffffffffff16612063611640565b73ffffffffffffffffffffffffffffffffffffffff16146120b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b090612c67565b60405180910390fd5b6120e433828473ffffffffffffffffffffffffffffffffffffffff166123879092919063ffffffff16565b5050565b6120f06121f0565b73ffffffffffffffffffffffffffffffffffffffff1661210e611640565b73ffffffffffffffffffffffffffffffffffffffff1614612164576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215b90612c67565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161219f9190612977565b602060405180830381865afa1580156121bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e0919061362c565b90506121ec828261203d565b5050565b600033905090565b600081836122069190613659565b905092915050565b6000818361221c91906136ca565b905092915050565b6122a7846323b872dd60e01b858585604051602401612245939291906136fb565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061240d565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000818361237f91906131a5565b905092915050565b6124088363a9059cbb60e01b84846040516024016123a6929190613732565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061240d565b505050565b600061246f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166124d49092919063ffffffff16565b90506000815111156124cf578080602001905181019061248f9190613787565b6124ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c590613826565b60405180910390fd5b5b505050565b60606124e384846000856124ec565b90509392505050565b606082471015612531576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612528906138b8565b60405180910390fd5b61253a85612600565b612579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257090613924565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516125a291906139b5565b60006040518083038185875af1925050503d80600081146125df576040519150601f19603f3d011682016040523d82523d6000602084013e6125e4565b606091505b50915091506125f4828286612613565b92505050949350505050565b600080823b905060008111915050919050565b6060831561262357829050612673565b6000835111156126365782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161266a9190613a10565b60405180910390fd5b9392505050565b82601481019282156126a9579160200282015b828111156126a857823582559160200191906001019061268d565b5b5090506126b6919061271d565b5090565b604051806102800160405280601490602082028036833780820191505090505090565b826014810192821561270c579160200282015b8281111561270b5782518255916020019190600101906126f0565b5b509050612719919061271d565b5090565b5b8082111561273657600081600090555060010161271e565b5090565b6000604051905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061277482612749565b9050919050565b61278481612769565b811461278f57600080fd5b50565b6000813590506127a18161277b565b92915050565b600080fd5b6000819050826020601402820111156127c8576127c76127a7565b5b92915050565b6000806102a083850312156127e6576127e5612744565b5b60006127f485828601612792565b9250506020612805858286016127ac565b9150509250929050565b6000819050919050565b6128228161280f565b811461282d57600080fd5b50565b60008135905061283f81612819565b92915050565b6000806040838503121561285c5761285b612744565b5b600061286a85828601612792565b925050602061287b85828601612830565b9150509250929050565b61288e8161280f565b82525050565b60006020820190506128a96000830184612885565b92915050565b6000602082840312156128c5576128c4612744565b5b60006128d384828501612830565b91505092915050565b60008115159050919050565b6128f1816128dc565b82525050565b600060208201905061290c60008301846128e8565b92915050565b60006020828403121561292857612927612744565b5b600061293684828501612792565b91505092915050565b60006040820190506129546000830185612885565b61296160208301846128e8565b9392505050565b61297181612769565b82525050565b600060208201905061298c6000830184612968565b92915050565b600060149050919050565b600081905092915050565b6000819050919050565b6129bb8161280f565b82525050565b60006129cd83836129b2565b60208301905092915050565b6000602082019050919050565b6129ef81612992565b6129f9818461299d565b9250612a04826129a8565b8060005b83811015612a35578151612a1c87826129c1565b9650612a27836129d9565b925050600181019050612a08565b505050505050565b600061028082019050612a5360008301846129e6565b92915050565b60006102808284031215612a7057612a6f612744565b5b6000612a7e848285016127ac565b91505092915050565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ad582612a8c565b810181811067ffffffffffffffff82111715612af457612af3612a9d565b5b80604052505050565b6000612b0761273a565b9050612b138282612acc565b919050565b600067ffffffffffffffff821115612b3357612b32612a9d565b5b602082029050919050565b6000612b51612b4c84612b18565b612afd565b90508060208402830185811115612b6b57612b6a6127a7565b5b835b81811015612b945780612b808882612830565b845260208401935050602081019050612b6d565b5050509392505050565b600082601f830112612bb357612bb2612a87565b5b6014612bc0848285612b3e565b91505092915050565b6000806102a08385031215612be157612be0612744565b5b6000612bef85828601612792565b9250506020612c0085828601612b9e565b9150509250929050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612c51602083612c0a565b9150612c5c82612c1b565b602082019050919050565b60006020820190508181036000830152612c8081612c44565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f50726573616c653a2043616e6e6f742073657420707269636520746f20300000600082015250565b6000612cec601e83612c0a565b9150612cf782612cb6565b602082019050919050565b60006020820190508181036000830152612d1b81612cdf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612d5c8261280f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612d8e57612d8d612d22565b5b600182019050919050565b7f50726553616c653a2053616c652068617320616c72656164792073746172746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b6000612df5602183612c0a565b9150612e0082612d99565b604082019050919050565b60006020820190508181036000830152612e2481612de8565b9050919050565b7f50726573616c653a20546f6b656e206e6f742077686974656c69737465640000600082015250565b6000612e61601e83612c0a565b9150612e6c82612e2b565b602082019050919050565b60006020820190508181036000830152612e9081612e54565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115612eee57808604811115612eca57612ec9612d22565b5b6001851615612ed95780820291505b8081029050612ee785612e97565b9450612eae565b94509492505050565b600082612f075760019050612fc3565b81612f155760009050612fc3565b8160018114612f2b5760028114612f3557612f64565b6001915050612fc3565b60ff841115612f4757612f46612d22565b5b8360020a915084821115612f5e57612f5d612d22565b5b50612fc3565b5060208310610133831016604e8410600b8410161715612f995782820a905083811115612f9457612f93612d22565b5b612fc3565b612fa68484846001612ea4565b92509050818404811115612fbd57612fbc612d22565b5b81810290505b9392505050565b6000612fd58261280f565b9150612fe08361280f565b925061300d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612ef7565b905092915050565b7f50726553616c653a2053616c65206861736e277420737461727465642079657460008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b6000613071602183612c0a565b915061307c82613015565b604082019050919050565b600060208201905081810360008301526130a081613064565b9050919050565b7f50726553616c653a20556e6c6f636b696e672068617320616c7265616479207360008201527f7461727465640000000000000000000000000000000000000000000000000000602082015250565b6000613103602683612c0a565b915061310e826130a7565b604082019050919050565b60006020820190508181036000830152613132816130f6565b9050919050565b7f50726553616c653a2053616c652068617320656e646564210000000000000000600082015250565b600061316f601883612c0a565b915061317a82613139565b602082019050919050565b6000602082019050818103600083015261319e81613162565b9050919050565b60006131b08261280f565b91506131bb8361280f565b92508282019050808211156131d3576131d2612d22565b5b92915050565b7f50726553616c653a20546f74616c20546f6b656e2053616c652052656163686560008201527f6420666f722063757272656e7420737461676521000000000000000000000000602082015250565b6000613235603483612c0a565b9150613240826131d9565b604082019050919050565b6000602082019050818103600083015261326481613228565b9050919050565b7f50726573616c653a2043616e6e6f74206275792077697468207a65726f20616d60008201527f6f756e7400000000000000000000000000000000000000000000000000000000602082015250565b60006132c7602483612c0a565b91506132d28261326b565b604082019050919050565b600060208201905081810360008301526132f6816132ba565b9050919050565b7f50726553616c653a20546f74616c20546f6b656e2053616c652052656163686560008201527f6421000000000000000000000000000000000000000000000000000000000000602082015250565b6000613359602283612c0a565b9150613364826132fd565b604082019050919050565b600060208201905081810360008301526133888161334c565b9050919050565b600060ff82169050919050565b6133a58161338f565b81146133b057600080fd5b50565b6000815190506133c28161339c565b92915050565b6000602082840312156133de576133dd612744565b5b60006133ec848285016133b3565b91505092915050565b7f50726553616c653a20556e6c6f636b696e67206861736e27742073746172746560008201527f6420796574210000000000000000000000000000000000000000000000000000602082015250565b6000613451602683612c0a565b915061345c826133f5565b604082019050919050565b6000602082019050818103600083015261348081613444565b9050919050565b7f50726573616c653a20416c726561647920636c61696d65640000000000000000600082015250565b60006134bd601883612c0a565b91506134c882613487565b602082019050919050565b600060208201905081810360008301526134ec816134b0565b9050919050565b7f50726573616c653a20556e6c6f636b696e67206e6f742073746172746564207960008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b600061354f602283612c0a565b915061355a826134f3565b604082019050919050565b6000602082019050818103600083015261357e81613542565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006135e1602683612c0a565b91506135ec82613585565b604082019050919050565b60006020820190508181036000830152613610816135d4565b9050919050565b60008151905061362681612819565b92915050565b60006020828403121561364257613641612744565b5b600061365084828501613617565b91505092915050565b60006136648261280f565b915061366f8361280f565b925082820261367d8161280f565b9150828204841483151761369457613693612d22565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006136d58261280f565b91506136e08361280f565b9250826136f0576136ef61369b565b5b828204905092915050565b60006060820190506137106000830186612968565b61371d6020830185612968565b61372a6040830184612885565b949350505050565b60006040820190506137476000830185612968565b6137546020830184612885565b9392505050565b613764816128dc565b811461376f57600080fd5b50565b6000815190506137818161375b565b92915050565b60006020828403121561379d5761379c612744565b5b60006137ab84828501613772565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b6000613810602a83612c0a565b915061381b826137b4565b604082019050919050565b6000602082019050818103600083015261383f81613803565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b60006138a2602683612c0a565b91506138ad82613846565b604082019050919050565b600060208201905081810360008301526138d181613895565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b600061390e601d83612c0a565b9150613919826138d8565b602082019050919050565b6000602082019050818103600083015261393d81613901565b9050919050565b600081519050919050565b600081905092915050565b60005b8381101561397857808201518184015260208101905061395d565b60008484015250505050565b600061398f82613944565b613999818561394f565b93506139a981856020860161395a565b80840191505092915050565b60006139c18284613984565b915081905092915050565b600081519050919050565b60006139e2826139cc565b6139ec8185612c0a565b93506139fc81856020860161395a565b613a0581612a8c565b840191505092915050565b60006020820190508181036000830152613a2a81846139d7565b90509291505056fea2646970667358221220cda16556199d23f48dd6fb54efecf2ac6be51765f9d668f63981d85f313f57b864736f6c63430008120033
Deployed Bytecode Sourcemap
28766:6921:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30717:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31549:159;;;;;;;;;;;;;:::i;:::-;;32817:586;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31716:158;;;;;;;;;;;;;:::i;:::-;;31882:170;;;;;;;;;;;;;:::i;:::-;;32477:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29407:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29115:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14426:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32237:232;;;;;;;;;;;;;:::i;:::-;;29549:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;29293:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33482:1406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13018:103;;;;;;;;;;;;;:::i;:::-;;29706:34;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29201:39;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12367:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30136:515;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29446:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29613:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35372:149;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31065:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31171:370;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29036:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32060:169;;;;;;;;;;;;;:::i;:::-;;34896:468;;;;;;;;;;;;;:::i;:::-;;29483:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35529:155;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28927:23;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29005:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29375:23;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13276:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14130:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14263:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30717:340;12598:12;:10;:12::i;:::-;12587:23;;:7;:5;:7::i;:::-;:23;;;12579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30865:4:::1;30847:7;:15;30855:6;30847:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;30885:9;30880:130;30904:14;30900:1;:18;30880:130;;;30962:1;30948:7;30956:1;30948:10;;;;;;;:::i;:::-;;;;;;:15:::0;30940:58:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;30920:3;;;;;:::i;:::-;;;;30880:130;;;;31042:7;31020:11;:19;31032:6;31020:19;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;30717:340:::0;;:::o;31549:159::-;12598:12;:10;:12::i;:::-;12587:23;;:7;:5;:7::i;:::-;:23;;;12579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31612:16:::1;;;;;;;;;;;31611:17;31603:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;31696:4;31677:16;;:23;;;;;;;;;;;;;;;;;;31549:159::o:0;32817:586::-;32918:7;32943:16;;;;;;;;;;;32938:58;;32983:1;32976:8;;;;32938:58;33006:14;33052:1;33035:19;;:5;:19;;;33031:341;;33097:4;33079:22;;:7;:14;33087:5;33079:14;;;;;;;;;;;;;;;;;;;;;;;;;:22;;;33071:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;33151:13;33167:11;:18;33179:5;33167:18;;;;;;;;;;;;;;;33186:12;;33167:32;;;;;;;:::i;:::-;;;;33151:48;;33223:41;33258:5;33223:30;33240:12;;33234:2;:18;;;;:::i;:::-;33223:6;:10;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;33214:50;;33056:220;33031:341;;;33306:54;33341:4;33346:12;;33341:18;;;;;;;:::i;:::-;;;;33306:30;33323:12;;33317:2;:18;;;;:::i;:::-;33306:6;:10;;:30;;;;:::i;:::-;:34;;:54;;;;:::i;:::-;33297:63;;33031:341;33389:6;33382:13;;;32817:586;;;;;:::o;31716:158::-;12598:12;:10;:12::i;:::-;12587:23;;:7;:5;:7::i;:::-;:23;;;12579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31777:16:::1;;;;;;;;;;;31769:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31861:5;31842:16;;:24;;;;;;;;;;;;;;;;;;31716:158::o:0;31882:170::-;12598:12;:10;:12::i;:::-;12587:23;;:7;:5;:7::i;:::-;:23;;;12579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31947:18:::1;;;;;;;;;;;31946:19;31938:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32040:4;32019:18;;:25;;;;;;;;;;;;;;;;;;31882:170::o:0;32477:222::-;12598:12;:10;:12::i;:::-;12587:23;;:7;:5;:7::i;:::-;:23;;;12579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32546:16:::1;;;;;;;;;;;32538:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32628:2;32619:6;:11;32611:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;32685:6;32670:12;:21;;;;32477:222:::0;:::o;29407:30::-;;;;;;;;;;;;;:::o;29115:37::-;;;;;;;;;;;;;;;;;;;;:::o;14426:108::-;12598:12;:10;:12::i;:::-;12587:23;;:7;:5;:7::i;:::-;:23;;;12579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14501:10:::1;14493:28;;:33;14522:3;14493:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14426:108:::0;:::o;32237:232::-;12598:12;:10;:12::i;:::-;12587:23;;:7;:5;:7::i;:::-;:23;;;12579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32296:16:::1;;;;;;;;;;;32288:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32388:2;32384:1;32369:12;;:16;;;;:::i;:::-;:21;32361:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32460:1;32445:12;;:16;;;;:::i;:::-;32430:12;:31;;;;32237:232::o:0;29549:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29293:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33482:1406::-;33569:16;;;;;;;;;;;33561:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33689:18;33708:12;;33689:32;;;;;;;:::i;:::-;;;;33656:15;33672:12;;33656:29;;;;;;;:::i;:::-;;;;:65;;33634:167;;;;;;;;;;;;:::i;:::-;;;;;;;;;33812:20;33865:1;33847:20;;:6;:20;;;33843:858;;33902:1;33892:7;:11;33884:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;33986:4;33967:23;;:7;:15;33975:6;33967:15;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;33959:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34057:31;34072:6;34080:7;34057:14;:31::i;:::-;34042:46;;34202:18;34221:12;;34202:32;;;;;;;:::i;:::-;;;;34164:12;34132:15;34148:12;;34132:29;;;;;;;:::i;:::-;;;;:44;;;;:::i;:::-;34131:103;;34105:199;;;;;;;;;;;;:::i;:::-;;;;;;;;;34321:67;34353:10;34373:4;34380:7;34328:6;34321:31;;;;:67;;;;;;:::i;:::-;33843:858;;;34436:37;34459:1;34463:9;34436:14;:37::i;:::-;34421:52;;34587:18;34606:12;;34587:32;;;;;;;:::i;:::-;;;;34549:12;34517:15;34533:12;;34517:29;;;;;;;:::i;:::-;;;;:44;;;;:::i;:::-;34516:103;;34490:199;;;;;;;;;;;;:::i;:::-;;;;;;;;;33843:858;34746:12;34713:15;34729:12;;34713:29;;;;;;;:::i;:::-;;;;:45;;;;;;;:::i;:::-;;;;;;;;34804:12;34769;:24;34782:10;34769:24;;;;;;;;;;;;;;;:31;;;:47;;;;;;;:::i;:::-;;;;;;;;34868:12;34827:11;:23;34839:10;34827:23;;;;;;;;;;;;;;;34851:12;;34827:37;;;;;;;:::i;:::-;;;;:53;;;;;;;:::i;:::-;;;;;;;;33550:1338;33482:1406;;:::o;13018:103::-;12598:12;:10;:12::i;:::-;12587:23;;:7;:5;:7::i;:::-;:23;;;12579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13083:30:::1;13110:1;13083:18;:30::i;:::-;13018:103::o:0;29706:34::-;;;;;;;;;;;;;;;;;;;;:::o;29201:39::-;;;;;;;;;;;;;;;;;;;;;;:::o;12367:87::-;12413:7;12440:6;;;;;;;;;;;12433:13;;12367:87;:::o;30136:515::-;12598:12;:10;:12::i;:::-;12587:23;;:7;:5;:7::i;:::-;:23;;;12579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29961:16:::1;;;;;;;;;;;29960:17;29952:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;30305:10:::2;30293:9;;:22;;;;;;;;;;;;;;;;;;30356:9;;;;;;;;;;;30341:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30326:51;;:12;:51;;;;30409:19;30388:18;:40;;;;;;;:::i;:::-;;30439:12;30467:6:::0;30476:1:::2;30467:10;;30462:101;30483:2;30479:1;:6;30462:101;;;30517:34;30529:18;30548:1;30529:21;;;;;;;:::i;:::-;;;;30517:7;:11;;:34;;;;:::i;:::-;30507:44;;30487:3;;;;;:::i;:::-;;;;30462:101;;;;30573:70;30608:10;30628:4;30635:7;30580:9;;;;;;;;;;;30573:34;;;;:70;;;;;;:::i;:::-;30282:369;30136:515:::0;;:::o;29446:28::-;;;;;;;;;;;;;:::o;29613:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35372:149::-;35455:18;;:::i;:::-;35498:15;35491:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35372:149;:::o;31065:98::-;12598:12;:10;:12::i;:::-;12587:23;;:7;:5;:7::i;:::-;:23;;;12579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31150:5:::1;31143:4;:12;;;;;;;:::i;:::-;;31065:98:::0;:::o;31171:370::-;12598:12;:10;:12::i;:::-;12587:23;;:7;:5;:7::i;:::-;:23;;;12579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31303:7:::1;:15;31311:6;31303:15;;;;;;;;;;;;;;;;;;;;;;;;;31295:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31369:9;31364:130;31388:14;31384:1;:18;31364:130;;;31446:1;31432:7;31440:1;31432:10;;;;;;;:::i;:::-;;;;;;:15:::0;31424:58:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;31404:3;;;;;:::i;:::-;;;;31364:130;;;;31526:7;31504:11;:19;31516:6;31504:19;;;;;;;;;;;;;;;:29;;;;;;;:::i;:::-;;31171:370:::0;;:::o;29036:24::-;;;;:::o;32060:169::-;12598:12;:10;:12::i;:::-;12587:23;;:7;:5;:7::i;:::-;:23;;;12579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32123:18:::1;;;;;;;;;;;32115:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;32216:5;32195:18;;:26;;;;;;;;;;;;;;;;;;32060:169::o:0;34896:468::-;34941:25;35037:5;34999:43;;:12;:24;35012:10;34999:24;;;;;;;;;;;;;;;:34;;;;;;;;;;;;:43;;;34977:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;35113:18;;;;;;;;;;;35105:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35201:12;:24;35214:10;35201:24;;;;;;;;;;;;;;;:31;;;35181:51;;35280:4;35243:12;:24;35256:10;35243:24;;;;;;;;;;;;;;;:34;;;:41;;;;;;;;;;;;;;;;;;35295:61;35326:10;35338:17;35302:9;;;;;;;;;;;35295:30;;;;:61;;;;;:::i;:::-;34930:434;34896:468::o;29483:24::-;;;;:::o;35529:155::-;35615:18;;:::i;:::-;35658;35651:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35529:155;:::o;28927:23::-;;;;;;;;;;;;;;;;;;;;:::o;29005:24::-;;;;;;;;;;;;;:::o;29375:23::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13276:238::-;12598:12;:10;:12::i;:::-;12587:23;;:7;:5;:7::i;:::-;:23;;;12579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13399:1:::1;13379:22;;:8;:22;;::::0;13357:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;13478:28;13497:8;13478:18;:28::i;:::-;13276:238:::0;:::o;14130:125::-;12598:12;:10;:12::i;:::-;12587:23;;:7;:5;:7::i;:::-;:23;;;12579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14204:43:::1;14231:10;14243:3;14211:5;14204:26;;;;:43;;;;;:::i;:::-;14130:125:::0;;:::o;14263:155::-;12598:12;:10;:12::i;:::-;12587:23;;:7;:5;:7::i;:::-;:23;;;12579:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14327:11:::1;14348:5;14341:23;;;14373:4;14341:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14327:52;;14390:20;14399:5;14406:3;14390:8;:20::i;:::-;14316:102;14263:155:::0;:::o;11064:98::-;11117:7;11144:10;11137:17;;11064:98;:::o;3970:::-;4028:7;4059:1;4055;:5;;;;:::i;:::-;4048:12;;3970:98;;;;:::o;4369:::-;4427:7;4458:1;4454;:5;;;;:::i;:::-;4447:12;;4369:98;;;;:::o;24384:285::-;24528:133;24562:5;24605:27;;;24634:4;24640:2;24644:5;24582:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24528:19;:133::i;:::-;24384:285;;;;:::o;13674:191::-;13748:16;13767:6;;;;;;;;;;;13748:25;;13793:8;13784:6;;:17;;;;;;;;;;;;;;;;;;13848:8;13817:40;;13838:8;13817:40;;;;;;;;;;;;13737:128;13674:191;:::o;3232:98::-;3290:7;3321:1;3317;:5;;;;:::i;:::-;3310:12;;3232:98;;;;:::o;24162:214::-;24245:123;24279:5;24322:23;;;24347:2;24351:5;24299:58;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24245:19;:123::i;:::-;24162:214;;;:::o;27095:802::-;27519:23;27545:106;27587:4;27545:106;;;;;;;;;;;;;;;;;27553:5;27545:27;;;;:106;;;;;:::i;:::-;27519:132;;27686:1;27666:10;:17;:21;27662:228;;;27781:10;27770:30;;;;;;;;;;;;:::i;:::-;27744:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;27662:228;27165:732;27095:802;;:::o;18575:229::-;18712:12;18744:52;18766:6;18774:4;18780:1;18783:12;18744:21;:52::i;:::-;18737:59;;18575:229;;;;;:::o;19791:571::-;19961:12;20033:5;20008:21;:30;;19986:118;;;;;;;;;;;;:::i;:::-;;;;;;;;;20123:18;20134:6;20123:10;:18::i;:::-;20115:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;20189:12;20203:23;20230:6;:11;;20249:5;20270:4;20230:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20188:97;;;;20303:51;20320:7;20329:10;20341:12;20303:16;:51::i;:::-;20296:58;;;;19791:571;;;;;;:::o;15670:387::-;15730:4;15938:12;16005:7;15993:20;15985:28;;16048:1;16041:4;:8;16034:15;;;15670:387;;;:::o;22746:712::-;22896:12;22925:7;22921:530;;;22956:10;22949:17;;;;22921:530;23090:1;23070:10;:17;:21;23066:374;;;23268:10;23262:17;23329:15;23316:10;23312:2;23308:19;23301:44;23066:374;23411:12;23404:20;;;;;;;;;;;:::i;:::-;;;;;;;;22746:712;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:117::-;950:1;947;940:12;983:250;1055:8;1086:6;1074:18;;1139:3;1131:4;1125;1121:15;1111:8;1107:30;1104:39;1101:126;;;1146:79;;:::i;:::-;1101:126;983:250;;;;:::o;1239:527::-;1333:6;1341;1390:3;1378:9;1369:7;1365:23;1361:33;1358:120;;;1397:79;;:::i;:::-;1358:120;1517:1;1542:53;1587:7;1578:6;1567:9;1563:22;1542:53;:::i;:::-;1532:63;;1488:117;1644:2;1670:79;1741:7;1732:6;1721:9;1717:22;1670:79;:::i;:::-;1660:89;;1615:144;1239:527;;;;;:::o;1772:77::-;1809:7;1838:5;1827:16;;1772:77;;;:::o;1855:122::-;1928:24;1946:5;1928:24;:::i;:::-;1921:5;1918:35;1908:63;;1967:1;1964;1957:12;1908:63;1855:122;:::o;1983:139::-;2029:5;2067:6;2054:20;2045:29;;2083:33;2110:5;2083:33;:::i;:::-;1983:139;;;;:::o;2128:474::-;2196:6;2204;2253:2;2241:9;2232:7;2228:23;2224:32;2221:119;;;2259:79;;:::i;:::-;2221:119;2379:1;2404:53;2449:7;2440:6;2429:9;2425:22;2404:53;:::i;:::-;2394:63;;2350:117;2506:2;2532:53;2577:7;2568:6;2557:9;2553:22;2532:53;:::i;:::-;2522:63;;2477:118;2128:474;;;;;:::o;2608:118::-;2695:24;2713:5;2695:24;:::i;:::-;2690:3;2683:37;2608:118;;:::o;2732:222::-;2825:4;2863:2;2852:9;2848:18;2840:26;;2876:71;2944:1;2933:9;2929:17;2920:6;2876:71;:::i;:::-;2732:222;;;;:::o;2960:329::-;3019:6;3068:2;3056:9;3047:7;3043:23;3039:32;3036:119;;;3074:79;;:::i;:::-;3036:119;3194:1;3219:53;3264:7;3255:6;3244:9;3240:22;3219:53;:::i;:::-;3209:63;;3165:117;2960:329;;;;:::o;3295:90::-;3329:7;3372:5;3365:13;3358:21;3347:32;;3295:90;;;:::o;3391:109::-;3472:21;3487:5;3472:21;:::i;:::-;3467:3;3460:34;3391:109;;:::o;3506:210::-;3593:4;3631:2;3620:9;3616:18;3608:26;;3644:65;3706:1;3695:9;3691:17;3682:6;3644:65;:::i;:::-;3506:210;;;;:::o;3722:329::-;3781:6;3830:2;3818:9;3809:7;3805:23;3801:32;3798:119;;;3836:79;;:::i;:::-;3798:119;3956:1;3981:53;4026:7;4017:6;4006:9;4002:22;3981:53;:::i;:::-;3971:63;;3927:117;3722:329;;;;:::o;4057:320::-;4172:4;4210:2;4199:9;4195:18;4187:26;;4223:71;4291:1;4280:9;4276:17;4267:6;4223:71;:::i;:::-;4304:66;4366:2;4355:9;4351:18;4342:6;4304:66;:::i;:::-;4057:320;;;;;:::o;4383:118::-;4470:24;4488:5;4470:24;:::i;:::-;4465:3;4458:37;4383:118;;:::o;4507:222::-;4600:4;4638:2;4627:9;4623:18;4615:26;;4651:71;4719:1;4708:9;4704:17;4695:6;4651:71;:::i;:::-;4507:222;;;;:::o;4735:105::-;4801:6;4829:4;4819:14;;4735:105;;;:::o;4846:144::-;4944:11;4981:3;4966:18;;4846:144;;;;:::o;4996:99::-;5062:4;5085:3;5077:11;;4996:99;;;:::o;5101:108::-;5178:24;5196:5;5178:24;:::i;:::-;5173:3;5166:37;5101:108;;:::o;5215:179::-;5284:10;5305:46;5347:3;5339:6;5305:46;:::i;:::-;5383:4;5378:3;5374:14;5360:28;;5215:179;;;;:::o;5400:112::-;5469:4;5501;5496:3;5492:14;5484:22;;5400:112;;;:::o;5552:700::-;5690:53;5737:5;5690:53;:::i;:::-;5759:85;5837:6;5832:3;5759:85;:::i;:::-;5752:92;;5868:55;5917:5;5868:55;:::i;:::-;5946:7;5977:1;5962:283;5987:6;5984:1;5981:13;5962:283;;;6063:6;6057:13;6090:63;6149:3;6134:13;6090:63;:::i;:::-;6083:70;;6176:59;6228:6;6176:59;:::i;:::-;6166:69;;6022:223;6009:1;6006;6002:9;5997:14;;5962:283;;;5966:14;5666:586;;;5552:700;;:::o;6258:319::-;6399:4;6437:3;6426:9;6422:19;6414:27;;6451:119;6567:1;6556:9;6552:17;6543:6;6451:119;:::i;:::-;6258:319;;;;:::o;6583:382::-;6668:6;6717:3;6705:9;6696:7;6692:23;6688:33;6685:120;;;6724:79;;:::i;:::-;6685:120;6844:1;6869:79;6940:7;6931:6;6920:9;6916:22;6869:79;:::i;:::-;6859:89;;6815:143;6583:382;;;;:::o;6971:117::-;7080:1;7077;7070:12;7094:102;7135:6;7186:2;7182:7;7177:2;7170:5;7166:14;7162:28;7152:38;;7094:102;;;:::o;7202:180::-;7250:77;7247:1;7240:88;7347:4;7344:1;7337:15;7371:4;7368:1;7361:15;7388:281;7471:27;7493:4;7471:27;:::i;:::-;7463:6;7459:40;7601:6;7589:10;7586:22;7565:18;7553:10;7550:34;7547:62;7544:88;;;7612:18;;:::i;:::-;7544:88;7652:10;7648:2;7641:22;7431:238;7388:281;;:::o;7675:129::-;7709:6;7736:20;;:::i;:::-;7726:30;;7765:33;7793:4;7785:6;7765:33;:::i;:::-;7675:129;;;:::o;7810:250::-;7886:4;7976:18;7968:6;7965:30;7962:56;;;7998:18;;:::i;:::-;7962:56;8048:4;8040:6;8036:17;8028:25;;7810:250;;;:::o;8085:645::-;8180:5;8205:80;8221:63;8277:6;8221:63;:::i;:::-;8205:80;:::i;:::-;8196:89;;8305:5;8358:4;8350:6;8346:17;8338:6;8334:30;8387:3;8379:6;8376:15;8373:122;;;8406:79;;:::i;:::-;8373:122;8521:6;8504:220;8538:6;8533:3;8530:15;8504:220;;;8613:3;8642:37;8675:3;8663:10;8642:37;:::i;:::-;8637:3;8630:50;8709:4;8704:3;8700:14;8693:21;;8580:144;8564:4;8559:3;8555:14;8548:21;;8504:220;;;8508:21;8186:544;;8085:645;;;;;:::o;8755:341::-;8825:5;8874:3;8867:4;8859:6;8855:17;8851:27;8841:122;;8882:79;;:::i;:::-;8841:122;8986:4;9008:82;9086:3;9078:6;9070;9008:82;:::i;:::-;8999:91;;8831:265;8755:341;;;;:::o;9102:523::-;9194:6;9202;9251:3;9239:9;9230:7;9226:23;9222:33;9219:120;;;9258:79;;:::i;:::-;9219:120;9378:1;9403:53;9448:7;9439:6;9428:9;9424:22;9403:53;:::i;:::-;9393:63;;9349:117;9505:2;9531:77;9600:7;9591:6;9580:9;9576:22;9531:77;:::i;:::-;9521:87;;9476:142;9102:523;;;;;:::o;9631:169::-;9715:11;9749:6;9744:3;9737:19;9789:4;9784:3;9780:14;9765:29;;9631:169;;;;:::o;9806:182::-;9946:34;9942:1;9934:6;9930:14;9923:58;9806:182;:::o;9994:366::-;10136:3;10157:67;10221:2;10216:3;10157:67;:::i;:::-;10150:74;;10233:93;10322:3;10233:93;:::i;:::-;10351:2;10346:3;10342:12;10335:19;;9994:366;;;:::o;10366:419::-;10532:4;10570:2;10559:9;10555:18;10547:26;;10619:9;10613:4;10609:20;10605:1;10594:9;10590:17;10583:47;10647:131;10773:4;10647:131;:::i;:::-;10639:139;;10366:419;;;:::o;10791:180::-;10839:77;10836:1;10829:88;10936:4;10933:1;10926:15;10960:4;10957:1;10950:15;10977:180;11117:32;11113:1;11105:6;11101:14;11094:56;10977:180;:::o;11163:366::-;11305:3;11326:67;11390:2;11385:3;11326:67;:::i;:::-;11319:74;;11402:93;11491:3;11402:93;:::i;:::-;11520:2;11515:3;11511:12;11504:19;;11163:366;;;:::o;11535:419::-;11701:4;11739:2;11728:9;11724:18;11716:26;;11788:9;11782:4;11778:20;11774:1;11763:9;11759:17;11752:47;11816:131;11942:4;11816:131;:::i;:::-;11808:139;;11535:419;;;:::o;11960:180::-;12008:77;12005:1;11998:88;12105:4;12102:1;12095:15;12129:4;12126:1;12119:15;12146:233;12185:3;12208:24;12226:5;12208:24;:::i;:::-;12199:33;;12254:66;12247:5;12244:77;12241:103;;12324:18;;:::i;:::-;12241:103;12371:1;12364:5;12360:13;12353:20;;12146:233;;;:::o;12385:220::-;12525:34;12521:1;12513:6;12509:14;12502:58;12594:3;12589:2;12581:6;12577:15;12570:28;12385:220;:::o;12611:366::-;12753:3;12774:67;12838:2;12833:3;12774:67;:::i;:::-;12767:74;;12850:93;12939:3;12850:93;:::i;:::-;12968:2;12963:3;12959:12;12952:19;;12611:366;;;:::o;12983:419::-;13149:4;13187:2;13176:9;13172:18;13164:26;;13236:9;13230:4;13226:20;13222:1;13211:9;13207:17;13200:47;13264:131;13390:4;13264:131;:::i;:::-;13256:139;;12983:419;;;:::o;13408:180::-;13548:32;13544:1;13536:6;13532:14;13525:56;13408:180;:::o;13594:366::-;13736:3;13757:67;13821:2;13816:3;13757:67;:::i;:::-;13750:74;;13833:93;13922:3;13833:93;:::i;:::-;13951:2;13946:3;13942:12;13935:19;;13594:366;;;:::o;13966:419::-;14132:4;14170:2;14159:9;14155:18;14147:26;;14219:9;14213:4;14209:20;14205:1;14194:9;14190:17;14183:47;14247:131;14373:4;14247:131;:::i;:::-;14239:139;;13966:419;;;:::o;14391:102::-;14433:8;14480:5;14477:1;14473:13;14452:34;;14391:102;;;:::o;14499:848::-;14560:5;14567:4;14591:6;14582:15;;14615:5;14606:14;;14629:712;14650:1;14640:8;14637:15;14629:712;;;14745:4;14740:3;14736:14;14730:4;14727:24;14724:50;;;14754:18;;:::i;:::-;14724:50;14804:1;14794:8;14790:16;14787:451;;;15219:4;15212:5;15208:16;15199:25;;14787:451;15269:4;15263;15259:15;15251:23;;15299:32;15322:8;15299:32;:::i;:::-;15287:44;;14629:712;;;14499:848;;;;;;;:::o;15353:1073::-;15407:5;15598:8;15588:40;;15619:1;15610:10;;15621:5;;15588:40;15647:4;15637:36;;15664:1;15655:10;;15666:5;;15637:36;15733:4;15781:1;15776:27;;;;15817:1;15812:191;;;;15726:277;;15776:27;15794:1;15785:10;;15796:5;;;15812:191;15857:3;15847:8;15844:17;15841:43;;;15864:18;;:::i;:::-;15841:43;15913:8;15910:1;15906:16;15897:25;;15948:3;15941:5;15938:14;15935:40;;;15955:18;;:::i;:::-;15935:40;15988:5;;;15726:277;;16112:2;16102:8;16099:16;16093:3;16087:4;16084:13;16080:36;16062:2;16052:8;16049:16;16044:2;16038:4;16035:12;16031:35;16015:111;16012:246;;;16168:8;16162:4;16158:19;16149:28;;16203:3;16196:5;16193:14;16190:40;;;16210:18;;:::i;:::-;16190:40;16243:5;;16012:246;16283:42;16321:3;16311:8;16305:4;16302:1;16283:42;:::i;:::-;16268:57;;;;16357:4;16352:3;16348:14;16341:5;16338:25;16335:51;;;16366:18;;:::i;:::-;16335:51;16415:4;16408:5;16404:16;16395:25;;15353:1073;;;;;;:::o;16432:285::-;16492:5;16516:23;16534:4;16516:23;:::i;:::-;16508:31;;16560:27;16578:8;16560:27;:::i;:::-;16548:39;;16606:104;16643:66;16633:8;16627:4;16606:104;:::i;:::-;16597:113;;16432:285;;;;:::o;16723:220::-;16863:34;16859:1;16851:6;16847:14;16840:58;16932:3;16927:2;16919:6;16915:15;16908:28;16723:220;:::o;16949:366::-;17091:3;17112:67;17176:2;17171:3;17112:67;:::i;:::-;17105:74;;17188:93;17277:3;17188:93;:::i;:::-;17306:2;17301:3;17297:12;17290:19;;16949:366;;;:::o;17321:419::-;17487:4;17525:2;17514:9;17510:18;17502:26;;17574:9;17568:4;17564:20;17560:1;17549:9;17545:17;17538:47;17602:131;17728:4;17602:131;:::i;:::-;17594:139;;17321:419;;;:::o;17746:225::-;17886:34;17882:1;17874:6;17870:14;17863:58;17955:8;17950:2;17942:6;17938:15;17931:33;17746:225;:::o;17977:366::-;18119:3;18140:67;18204:2;18199:3;18140:67;:::i;:::-;18133:74;;18216:93;18305:3;18216:93;:::i;:::-;18334:2;18329:3;18325:12;18318:19;;17977:366;;;:::o;18349:419::-;18515:4;18553:2;18542:9;18538:18;18530:26;;18602:9;18596:4;18592:20;18588:1;18577:9;18573:17;18566:47;18630:131;18756:4;18630:131;:::i;:::-;18622:139;;18349:419;;;:::o;18774:174::-;18914:26;18910:1;18902:6;18898:14;18891:50;18774:174;:::o;18954:366::-;19096:3;19117:67;19181:2;19176:3;19117:67;:::i;:::-;19110:74;;19193:93;19282:3;19193:93;:::i;:::-;19311:2;19306:3;19302:12;19295:19;;18954:366;;;:::o;19326:419::-;19492:4;19530:2;19519:9;19515:18;19507:26;;19579:9;19573:4;19569:20;19565:1;19554:9;19550:17;19543:47;19607:131;19733:4;19607:131;:::i;:::-;19599:139;;19326:419;;;:::o;19751:191::-;19791:3;19810:20;19828:1;19810:20;:::i;:::-;19805:25;;19844:20;19862:1;19844:20;:::i;:::-;19839:25;;19887:1;19884;19880:9;19873:16;;19908:3;19905:1;19902:10;19899:36;;;19915:18;;:::i;:::-;19899:36;19751:191;;;;:::o;19948:239::-;20088:34;20084:1;20076:6;20072:14;20065:58;20157:22;20152:2;20144:6;20140:15;20133:47;19948:239;:::o;20193:366::-;20335:3;20356:67;20420:2;20415:3;20356:67;:::i;:::-;20349:74;;20432:93;20521:3;20432:93;:::i;:::-;20550:2;20545:3;20541:12;20534:19;;20193:366;;;:::o;20565:419::-;20731:4;20769:2;20758:9;20754:18;20746:26;;20818:9;20812:4;20808:20;20804:1;20793:9;20789:17;20782:47;20846:131;20972:4;20846:131;:::i;:::-;20838:139;;20565:419;;;:::o;20990:223::-;21130:34;21126:1;21118:6;21114:14;21107:58;21199:6;21194:2;21186:6;21182:15;21175:31;20990:223;:::o;21219:366::-;21361:3;21382:67;21446:2;21441:3;21382:67;:::i;:::-;21375:74;;21458:93;21547:3;21458:93;:::i;:::-;21576:2;21571:3;21567:12;21560:19;;21219:366;;;:::o;21591:419::-;21757:4;21795:2;21784:9;21780:18;21772:26;;21844:9;21838:4;21834:20;21830:1;21819:9;21815:17;21808:47;21872:131;21998:4;21872:131;:::i;:::-;21864:139;;21591:419;;;:::o;22016:221::-;22156:34;22152:1;22144:6;22140:14;22133:58;22225:4;22220:2;22212:6;22208:15;22201:29;22016:221;:::o;22243:366::-;22385:3;22406:67;22470:2;22465:3;22406:67;:::i;:::-;22399:74;;22482:93;22571:3;22482:93;:::i;:::-;22600:2;22595:3;22591:12;22584:19;;22243:366;;;:::o;22615:419::-;22781:4;22819:2;22808:9;22804:18;22796:26;;22868:9;22862:4;22858:20;22854:1;22843:9;22839:17;22832:47;22896:131;23022:4;22896:131;:::i;:::-;22888:139;;22615:419;;;:::o;23040:86::-;23075:7;23115:4;23108:5;23104:16;23093:27;;23040:86;;;:::o;23132:118::-;23203:22;23219:5;23203:22;:::i;:::-;23196:5;23193:33;23183:61;;23240:1;23237;23230:12;23183:61;23132:118;:::o;23256:139::-;23311:5;23342:6;23336:13;23327:22;;23358:31;23383:5;23358:31;:::i;:::-;23256:139;;;;:::o;23401:347::-;23469:6;23518:2;23506:9;23497:7;23493:23;23489:32;23486:119;;;23524:79;;:::i;:::-;23486:119;23644:1;23669:62;23723:7;23714:6;23703:9;23699:22;23669:62;:::i;:::-;23659:72;;23615:126;23401:347;;;;:::o;23754:225::-;23894:34;23890:1;23882:6;23878:14;23871:58;23963:8;23958:2;23950:6;23946:15;23939:33;23754:225;:::o;23985:366::-;24127:3;24148:67;24212:2;24207:3;24148:67;:::i;:::-;24141:74;;24224:93;24313:3;24224:93;:::i;:::-;24342:2;24337:3;24333:12;24326:19;;23985:366;;;:::o;24357:419::-;24523:4;24561:2;24550:9;24546:18;24538:26;;24610:9;24604:4;24600:20;24596:1;24585:9;24581:17;24574:47;24638:131;24764:4;24638:131;:::i;:::-;24630:139;;24357:419;;;:::o;24782:174::-;24922:26;24918:1;24910:6;24906:14;24899:50;24782:174;:::o;24962:366::-;25104:3;25125:67;25189:2;25184:3;25125:67;:::i;:::-;25118:74;;25201:93;25290:3;25201:93;:::i;:::-;25319:2;25314:3;25310:12;25303:19;;24962:366;;;:::o;25334:419::-;25500:4;25538:2;25527:9;25523:18;25515:26;;25587:9;25581:4;25577:20;25573:1;25562:9;25558:17;25551:47;25615:131;25741:4;25615:131;:::i;:::-;25607:139;;25334:419;;;:::o;25759:221::-;25899:34;25895:1;25887:6;25883:14;25876:58;25968:4;25963:2;25955:6;25951:15;25944:29;25759:221;:::o;25986:366::-;26128:3;26149:67;26213:2;26208:3;26149:67;:::i;:::-;26142:74;;26225:93;26314:3;26225:93;:::i;:::-;26343:2;26338:3;26334:12;26327:19;;25986:366;;;:::o;26358:419::-;26524:4;26562:2;26551:9;26547:18;26539:26;;26611:9;26605:4;26601:20;26597:1;26586:9;26582:17;26575:47;26639:131;26765:4;26639:131;:::i;:::-;26631:139;;26358:419;;;:::o;26783:225::-;26923:34;26919:1;26911:6;26907:14;26900:58;26992:8;26987:2;26979:6;26975:15;26968:33;26783:225;:::o;27014:366::-;27156:3;27177:67;27241:2;27236:3;27177:67;:::i;:::-;27170:74;;27253:93;27342:3;27253:93;:::i;:::-;27371:2;27366:3;27362:12;27355:19;;27014:366;;;:::o;27386:419::-;27552:4;27590:2;27579:9;27575:18;27567:26;;27639:9;27633:4;27629:20;27625:1;27614:9;27610:17;27603:47;27667:131;27793:4;27667:131;:::i;:::-;27659:139;;27386:419;;;:::o;27811:143::-;27868:5;27899:6;27893:13;27884:22;;27915:33;27942:5;27915:33;:::i;:::-;27811:143;;;;:::o;27960:351::-;28030:6;28079:2;28067:9;28058:7;28054:23;28050:32;28047:119;;;28085:79;;:::i;:::-;28047:119;28205:1;28230:64;28286:7;28277:6;28266:9;28262:22;28230:64;:::i;:::-;28220:74;;28176:128;27960:351;;;;:::o;28317:410::-;28357:7;28380:20;28398:1;28380:20;:::i;:::-;28375:25;;28414:20;28432:1;28414:20;:::i;:::-;28409:25;;28469:1;28466;28462:9;28491:30;28509:11;28491:30;:::i;:::-;28480:41;;28670:1;28661:7;28657:15;28654:1;28651:22;28631:1;28624:9;28604:83;28581:139;;28700:18;;:::i;:::-;28581:139;28365:362;28317:410;;;;:::o;28733:180::-;28781:77;28778:1;28771:88;28878:4;28875:1;28868:15;28902:4;28899:1;28892:15;28919:185;28959:1;28976:20;28994:1;28976:20;:::i;:::-;28971:25;;29010:20;29028:1;29010:20;:::i;:::-;29005:25;;29049:1;29039:35;;29054:18;;:::i;:::-;29039:35;29096:1;29093;29089:9;29084:14;;28919:185;;;;:::o;29110:442::-;29259:4;29297:2;29286:9;29282:18;29274:26;;29310:71;29378:1;29367:9;29363:17;29354:6;29310:71;:::i;:::-;29391:72;29459:2;29448:9;29444:18;29435:6;29391:72;:::i;:::-;29473;29541:2;29530:9;29526:18;29517:6;29473:72;:::i;:::-;29110:442;;;;;;:::o;29558:332::-;29679:4;29717:2;29706:9;29702:18;29694:26;;29730:71;29798:1;29787:9;29783:17;29774:6;29730:71;:::i;:::-;29811:72;29879:2;29868:9;29864:18;29855:6;29811:72;:::i;:::-;29558:332;;;;;:::o;29896:116::-;29966:21;29981:5;29966:21;:::i;:::-;29959:5;29956:32;29946:60;;30002:1;29999;29992:12;29946:60;29896:116;:::o;30018:137::-;30072:5;30103:6;30097:13;30088:22;;30119:30;30143:5;30119:30;:::i;:::-;30018:137;;;;:::o;30161:345::-;30228:6;30277:2;30265:9;30256:7;30252:23;30248:32;30245:119;;;30283:79;;:::i;:::-;30245:119;30403:1;30428:61;30481:7;30472:6;30461:9;30457:22;30428:61;:::i;:::-;30418:71;;30374:125;30161:345;;;;:::o;30512:229::-;30652:34;30648:1;30640:6;30636:14;30629:58;30721:12;30716:2;30708:6;30704:15;30697:37;30512:229;:::o;30747:366::-;30889:3;30910:67;30974:2;30969:3;30910:67;:::i;:::-;30903:74;;30986:93;31075:3;30986:93;:::i;:::-;31104:2;31099:3;31095:12;31088:19;;30747:366;;;:::o;31119:419::-;31285:4;31323:2;31312:9;31308:18;31300:26;;31372:9;31366:4;31362:20;31358:1;31347:9;31343:17;31336:47;31400:131;31526:4;31400:131;:::i;:::-;31392:139;;31119:419;;;:::o;31544:225::-;31684:34;31680:1;31672:6;31668:14;31661:58;31753:8;31748:2;31740:6;31736:15;31729:33;31544:225;:::o;31775:366::-;31917:3;31938:67;32002:2;31997:3;31938:67;:::i;:::-;31931:74;;32014:93;32103:3;32014:93;:::i;:::-;32132:2;32127:3;32123:12;32116:19;;31775:366;;;:::o;32147:419::-;32313:4;32351:2;32340:9;32336:18;32328:26;;32400:9;32394:4;32390:20;32386:1;32375:9;32371:17;32364:47;32428:131;32554:4;32428:131;:::i;:::-;32420:139;;32147:419;;;:::o;32572:179::-;32712:31;32708:1;32700:6;32696:14;32689:55;32572:179;:::o;32757:366::-;32899:3;32920:67;32984:2;32979:3;32920:67;:::i;:::-;32913:74;;32996:93;33085:3;32996:93;:::i;:::-;33114:2;33109:3;33105:12;33098:19;;32757:366;;;:::o;33129:419::-;33295:4;33333:2;33322:9;33318:18;33310:26;;33382:9;33376:4;33372:20;33368:1;33357:9;33353:17;33346:47;33410:131;33536:4;33410:131;:::i;:::-;33402:139;;33129:419;;;:::o;33554:98::-;33605:6;33639:5;33633:12;33623:22;;33554:98;;;:::o;33658:147::-;33759:11;33796:3;33781:18;;33658:147;;;;:::o;33811:246::-;33892:1;33902:113;33916:6;33913:1;33910:13;33902:113;;;34001:1;33996:3;33992:11;33986:18;33982:1;33977:3;33973:11;33966:39;33938:2;33935:1;33931:10;33926:15;;33902:113;;;34049:1;34040:6;34035:3;34031:16;34024:27;33873:184;33811:246;;;:::o;34063:386::-;34167:3;34195:38;34227:5;34195:38;:::i;:::-;34249:88;34330:6;34325:3;34249:88;:::i;:::-;34242:95;;34346:65;34404:6;34399:3;34392:4;34385:5;34381:16;34346:65;:::i;:::-;34436:6;34431:3;34427:16;34420:23;;34171:278;34063:386;;;;:::o;34455:271::-;34585:3;34607:93;34696:3;34687:6;34607:93;:::i;:::-;34600:100;;34717:3;34710:10;;34455:271;;;;:::o;34732:99::-;34784:6;34818:5;34812:12;34802:22;;34732:99;;;:::o;34837:377::-;34925:3;34953:39;34986:5;34953:39;:::i;:::-;35008:71;35072:6;35067:3;35008:71;:::i;:::-;35001:78;;35088:65;35146:6;35141:3;35134:4;35127:5;35123:16;35088:65;:::i;:::-;35178:29;35200:6;35178:29;:::i;:::-;35173:3;35169:39;35162:46;;34929:285;34837:377;;;;:::o;35220:313::-;35333:4;35371:2;35360:9;35356:18;35348:26;;35420:9;35414:4;35410:20;35406:1;35395:9;35391:17;35384:47;35448:78;35521:4;35512:6;35448:78;:::i;:::-;35440:86;;35220:313;;;;:::o
Swarm Source
ipfs://cda16556199d23f48dd6fb54efecf2ac6be51765f9d668f63981d85f313f57b8
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ 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.