Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
xINCH
Compiler Version
v0.6.2+commit.bacdbe57
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-01-13 */ // File: @openzeppelin/contracts-ethereum-package/contracts/token/ERC20/IERC20.sol pragma solidity ^0.6.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-ethereum-package/contracts/math/SafeMath.sol pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts-ethereum-package/contracts/utils/Address.sol pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } } // File: @openzeppelin/contracts-ethereum-package/contracts/token/ERC20/SafeERC20.sol pragma solidity ^0.6.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 ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; 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)); } 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' // solhint-disable-next-line max-line-length 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).add(value); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero"); _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. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: @openzeppelin/contracts-ethereum-package/contracts/Initializable.sol pragma solidity >=0.4.24 <0.7.0; /** * @title Initializable * * @dev Helper contract to support initializer functions. To use it, replace * the constructor with a function that has the `initializer` modifier. * WARNING: Unlike constructors, initializer functions must be manually * invoked. This applies both to deploying an Initializable contract, as well * as extending an Initializable contract via inheritance. * WARNING: When used with inheritance, manual care must be taken to not invoke * a parent initializer twice, or ensure that all initializers are idempotent, * because this is not dealt with automatically as with constructors. */ contract Initializable { /** * @dev Indicates that the contract has been initialized. */ bool private initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool private initializing; /** * @dev Modifier to use in the initializer function of a contract. */ modifier initializer() { require(initializing || isConstructor() || !initialized, "Contract instance has already been initialized"); bool isTopLevelCall = !initializing; if (isTopLevelCall) { initializing = true; initialized = true; } _; if (isTopLevelCall) { initializing = false; } } /// @dev Returns true if and only if the function is running in the constructor function isConstructor() private view returns (bool) { // extcodesize checks the size of the code stored in an address, and // address returns the current address. Since the code is still not // deployed when running a constructor, any checks on its code size will // yield zero, making it an effective way to detect if a contract is // under construction or not. address self = address(this); uint256 cs; assembly { cs := extcodesize(self) } return cs == 0; } // Reserved storage space to allow for layout changes in the future. uint256[50] private ______gap; } // File: @openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol pragma solidity ^0.6.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 GSN 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. */ contract ContextUpgradeSafe is Initializable { // Empty internal constructor, to prevent people from mistakenly deploying // an instance of this contract, which should be used via inheritance. function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; } // File: @openzeppelin/contracts-ethereum-package/contracts/token/ERC20/ERC20.sol pragma solidity ^0.6.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20MinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20UpgradeSafe is Initializable, ContextUpgradeSafe, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ function __ERC20_init(string memory name, string memory symbol) internal initializer { __Context_init_unchained(); __ERC20_init_unchained(name, symbol); } function __ERC20_init_unchained(string memory name, string memory symbol) internal initializer { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } uint256[44] private __gap; } // File: @openzeppelin/contracts-ethereum-package/contracts/access/Ownable.sol pragma solidity ^0.6.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. */ contract OwnableUpgradeSafe is Initializable, ContextUpgradeSafe { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[49] private __gap; } // File: @openzeppelin/contracts-ethereum-package/contracts/utils/Pausable.sol pragma solidity ^0.6.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ contract PausableUpgradeSafe is Initializable, ContextUpgradeSafe { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ function __Pausable_init() internal initializer { __Context_init_unchained(); __Pausable_init_unchained(); } function __Pausable_init_unchained() internal initializer { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!_paused, "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(_paused, "Pausable: not paused"); _; } /** * @dev Triggers stopped state. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } uint256[49] private __gap; } // File: contracts/interface/IGovernanceRewards.sol pragma solidity 0.6.2; // https://etherscan.io/address/0x0f85a912448279111694f4ba4f85dc641c54b594#writeContract interface IGovernanceRewards { function getReward() external; function earned(address account) external view returns (uint256); } // File: contracts/interface/IExchangeGovernance.sol pragma solidity 0.6.2; interface IExchangeGovernance { function leftoverShareVote(uint256 govShare, uint256 refShare) external; } // File: contracts/interface/IGovernanceMothership.sol pragma solidity 0.6.2; interface IGovernanceMothership { function stake(uint256 amount) external; function unstake(uint256 amount) external; function notify() external; } // File: contracts/interface/IMooniswapPoolGovernance.sol pragma solidity 0.6.2; interface IMooniswapPoolGovernance { function feeVote(uint256 vote) external; function slippageFeeVote(uint256 vote) external; function decayPeriodVote(uint256 vote) external; } // File: contracts/interface/IMooniswapFactoryGovernance.sol pragma solidity 0.6.2; // https://etherscan.io/address/0xc4a8b7e29e3c8ec560cd4945c1cf3461a85a148d#code interface IMooniswapFactoryGovernance { function defaultDecayPeriodVote(uint256 vote) external; function defaultFeeVote(uint256 vote) external; function defaultSlippageFeeVote(uint256 vote) external; function governanceShareVote(uint256 vote) external; function referralShareVote(uint256 vote) external; } // File: contracts/interface/IOneInchLiquidityProtocol.sol pragma solidity ^0.6.0; interface IOneInchLiquidityProtocol { function swap(address src, address dst, uint256 amount, uint256 minReturn, address referral) external payable returns(uint256 result); function swapFor(address src, address dst, uint256 amount, uint256 minReturn, address referral, address payable receiver) external payable returns(uint256 result); } // File: contracts/xINCH.sol //SPDX-License-Identifier: Unlicense pragma solidity 0.6.2; contract xINCH is Initializable, ERC20UpgradeSafe, OwnableUpgradeSafe, PausableUpgradeSafe { using SafeMath for uint256; using SafeERC20 for IERC20; uint256 private constant LIQUIDATION_TIME_PERIOD = 4 weeks; uint256 private constant INITIAL_SUPPLY_MULTIPLIER = 10; uint256 private constant BUFFER_TARGET = 20; // 5% target uint256 private constant MAX_UINT = 2**256 - 1; uint256 public adminActiveTimestamp; uint256 public withdrawableOneInchFees; IERC20 private oneInch; IOneInchLiquidityProtocol private oneInchLiquidityProtocol; IMooniswapFactoryGovernance private factoryGovernance; IGovernanceMothership private governanceMothership; IExchangeGovernance private exchangeGovernance; IGovernanceRewards private governanceRewards; address private oneInchExchange; address private manager; address private manager2; address private constant ETH_ADDRESS = address(0); struct FeeDivisors { uint256 mintFee; uint256 burnFee; uint256 claimFee; } FeeDivisors public feeDivisors; event Rebalance(); event FeeDivisorsSet(uint256 mintFee, uint256 burnFee, uint256 claimFee); event FeeWithdraw(uint256 ethFee, uint256 inchFee); function initialize( string calldata _symbol, IERC20 _oneInch, IGovernanceMothership _governanceMothership, IOneInchLiquidityProtocol _oneInchLiquidityProtocol, uint256 _mintFeeDivisor, uint256 _burnFeeDivisor, uint256 _claimFeeDivisor ) external initializer { __Context_init_unchained(); __Ownable_init_unchained(); __ERC20_init_unchained("xINCH", _symbol); oneInch = _oneInch; governanceMothership = _governanceMothership; oneInchLiquidityProtocol = _oneInchLiquidityProtocol; _setFeeDivisors(_mintFeeDivisor, _burnFeeDivisor, _claimFeeDivisor); } /* * @dev Mint xINCH using ETH * @param minReturn: Min return to pass to 1Inch trade */ function mint(uint256 minReturn) external payable whenNotPaused { require(msg.value > 0, "Must send ETH"); uint256 fee = _calculateFee(msg.value, feeDivisors.mintFee); uint256 ethValue = msg.value.sub(fee); uint256 incrementalOneInch = oneInchLiquidityProtocol.swap.value(ethValue)( ETH_ADDRESS, address(oneInch), ethValue, minReturn, address(0) ); _mintInternal(incrementalOneInch); } /* * @dev Mint xINCH using INCH * @param oneInchAmount: INCH tokens to contribute */ function mintWithToken(uint256 oneInchAmount) external whenNotPaused { require(oneInchAmount > 0, "Must send token"); oneInch.safeTransferFrom(msg.sender, address(this), oneInchAmount); uint256 fee = _calculateFee(oneInchAmount, feeDivisors.mintFee); _incrementWithdrawableOneInchFees(fee); return _mintInternal(oneInchAmount.sub(fee)); } function _mintInternal(uint256 _incrementalOneInch) private { uint256 mintAmount = calculateMintAmount(_incrementalOneInch, totalSupply()); return super._mint(msg.sender, mintAmount); } /* * @dev Burn xINCH tokens * @notice Will fail if pro rata balance exceeds available liquidity * @param tokenAmount: xINCH tokens to burn * @param redeemForEth: Redeem for ETH or INCH * @param minReturn: Min return to pass to 1Inch trade */ function burn( uint256 tokenAmount, bool redeemForEth, uint256 minReturn ) external { require(tokenAmount > 0, "Must send xINCH"); uint256 stakedBalance = getStakedBalance(); uint256 bufferBalance = getBufferBalance(); uint256 inchHoldings = stakedBalance.add(bufferBalance); uint256 proRataInch = inchHoldings.mul(tokenAmount).div(totalSupply()); require(proRataInch <= bufferBalance, "Insufficient exit liquidity"); super._burn(msg.sender, tokenAmount); if (redeemForEth) { uint256 fee = _calculateFee(proRataInch, feeDivisors.burnFee); _incrementWithdrawableOneInchFees(fee); oneInchLiquidityProtocol.swapFor( address(oneInch), ETH_ADDRESS, proRataInch.sub(fee), minReturn, address(0), msg.sender ); } else { uint256 fee = _calculateFee(proRataInch, feeDivisors.burnFee); _incrementWithdrawableOneInchFees(fee); oneInch.safeTransfer(msg.sender, proRataInch.sub(fee)); } } function calculateMintAmount( uint256 incrementalOneInch, uint256 totalSupply ) public view returns (uint256 mintAmount) { if (totalSupply == 0) return incrementalOneInch.mul(INITIAL_SUPPLY_MULTIPLIER); mintAmount = (incrementalOneInch).mul(totalSupply).div(getNav()); } /* ========================================================================================= */ /* Management */ /* ========================================================================================= */ function getNav() public view returns (uint256) { return getStakedBalance().add(getBufferBalance()); } function getStakedBalance() public view returns (uint256) { return IERC20(address(governanceMothership)).balanceOf(address(this)); } function getBufferBalance() public view returns (uint256) { return oneInch.balanceOf(address(this)).sub(withdrawableOneInchFees); } /* * @dev Admin function for claiming INCH rewards */ function getReward() external onlyOwnerOrManager { _certifyAdmin(); _getReward(); } /* * @dev Public callable function for claiming INCH rewards */ function getRewardExternal() external { _getReward(); } function _getReward() private { uint256 bufferBalanceBefore = getBufferBalance(); governanceRewards.getReward(); uint256 bufferBalanceAfter = getBufferBalance(); uint256 fee = _calculateFee( bufferBalanceAfter.sub(bufferBalanceBefore), feeDivisors.claimFee ); _incrementWithdrawableOneInchFees(fee); } function _stake(uint256 _amount) private { governanceMothership.stake(_amount); } /* * @dev Admin function for unstaking beyond the scope of a rebalance */ function adminUnstake(uint256 _amount) external onlyOwnerOrManager { _unstake(_amount); } /* * @dev Public callable function for unstaking in event of admin failure/incapacitation */ function emergencyUnstake(uint256 _amount) external { require( adminActiveTimestamp.add(LIQUIDATION_TIME_PERIOD) < block.timestamp, "Liquidation time not elapsed" ); _unstake(_amount); } function unstake(uint256 _amount) external onlyOwnerOrManager { _unstake(_amount); } function _unstake(uint256 _amount) private { governanceMothership.unstake(_amount); } /* * @dev Admin function for collecting reward and restoring target buffer balance */ function rebalance() external onlyOwnerOrManager { _certifyAdmin(); _getReward(); _rebalance(); } /* * @dev Public callable function for collecting reward and restoring target buffer balance */ function rebalanceExternal() external { require( adminActiveTimestamp.add(LIQUIDATION_TIME_PERIOD) > block.timestamp, "Liquidation time elapsed; no more staking" ); _getReward(); _rebalance(); } function _rebalance() private { uint256 stakedBalance = getStakedBalance(); uint256 bufferBalance = getBufferBalance(); uint256 targetBuffer = (stakedBalance.add(bufferBalance)).div(BUFFER_TARGET); if (bufferBalance > targetBuffer) { _stake(bufferBalance.sub(targetBuffer)); } else { _unstake(targetBuffer.sub(bufferBalance)); } emit Rebalance(); } function _calculateFee(uint256 _value, uint256 _feeDivisor) internal pure returns (uint256 fee) { if (_feeDivisor > 0) { fee = _value.div(_feeDivisor); } } function _incrementWithdrawableOneInchFees(uint256 _feeAmount) private { withdrawableOneInchFees = withdrawableOneInchFees.add(_feeAmount); } /* ========================================================================================= */ /* Governance */ /* ========================================================================================= */ function setFactoryGovernanceAddress( IMooniswapFactoryGovernance _factoryGovernance ) external onlyOwnerOrManager { factoryGovernance = _factoryGovernance; } function setGovernanceRewardsAddress(IGovernanceRewards _governanceRewards) external onlyOwnerOrManager { governanceRewards = _governanceRewards; } function setExchangeGovernanceAddress( IExchangeGovernance _exchangeGovernance ) external onlyOwnerOrManager { exchangeGovernance = _exchangeGovernance; } function defaultDecayPeriodVote(uint256 vote) external onlyOwnerOrManager { factoryGovernance.defaultDecayPeriodVote(vote); } function defaultFeeVote(uint256 vote) external onlyOwnerOrManager { factoryGovernance.defaultFeeVote(vote); } function defaultSlippageFeeVote(uint256 vote) external onlyOwnerOrManager { factoryGovernance.defaultSlippageFeeVote(vote); } function governanceShareVote(uint256 vote) external onlyOwnerOrManager { factoryGovernance.governanceShareVote(vote); } function referralShareVote(uint256 vote) external onlyOwnerOrManager { factoryGovernance.referralShareVote(vote); } function leftoverShareVote(uint256 govShare, uint256 refShare) external onlyOwnerOrManager { exchangeGovernance.leftoverShareVote(govShare, refShare); } function poolFeeVote(address pool, uint256 vote) external onlyOwnerOrManager { IMooniswapPoolGovernance(pool).feeVote(vote); } function poolSlippageFeeVote(address pool, uint256 vote) external onlyOwnerOrManager { IMooniswapPoolGovernance(pool).slippageFeeVote(vote); } function poolDecayPeriodVote(address pool, uint256 vote) external onlyOwnerOrManager { IMooniswapPoolGovernance(pool).decayPeriodVote(vote); } /* ========================================================================================= */ /* Utils */ /* ========================================================================================= */ /* * @notice Inverse of fee i.e., a fee divisor of 100 == 1% * @notice Three fee types * @dev Mint fee 0 or <= 2% * @dev Burn fee 0 or <= 1% * @dev Claim fee 0 <= 4% */ function setFeeDivisors( uint256 mintFeeDivisor, uint256 burnFeeDivisor, uint256 claimFeeDivisor ) public onlyOwner { _setFeeDivisors(mintFeeDivisor, burnFeeDivisor, claimFeeDivisor); } function _setFeeDivisors( uint256 _mintFeeDivisor, uint256 _burnFeeDivisor, uint256 _claimFeeDivisor ) private { require(_mintFeeDivisor == 0 || _mintFeeDivisor >= 50, "Invalid fee"); require(_burnFeeDivisor == 0 || _burnFeeDivisor >= 100, "Invalid fee"); require(_claimFeeDivisor >= 25, "Invalid fee"); feeDivisors.mintFee = _mintFeeDivisor; feeDivisors.burnFee = _burnFeeDivisor; feeDivisors.claimFee = _claimFeeDivisor; emit FeeDivisorsSet(_mintFeeDivisor, _burnFeeDivisor, _claimFeeDivisor); } function pauseContract() public onlyOwnerOrManager returns (bool) { _pause(); return true; } function unpauseContract() public onlyOwnerOrManager returns (bool) { _unpause(); return true; } /* * @notice Registers that admin is present and active * @notice If admin isn't certified within liquidation time period, * emergencyUnstake function becomes callable */ function _certifyAdmin() private { adminActiveTimestamp = block.timestamp; } function setManager(address _manager) external onlyOwner { manager = _manager; } function setManager2(address _manager2) external onlyOwner { manager2 = _manager2; } function approveInch(address _toApprove) external onlyOwnerOrManager { oneInch.safeApprove(_toApprove, MAX_UINT); } /* * @notice Emergency function in case of errant transfer of * xINCH token directly to contract */ function withdrawNativeToken() public onlyOwnerOrManager { uint256 tokenBal = balanceOf(address(this)); if (tokenBal > 0) { IERC20(address(this)).safeTransfer(msg.sender, tokenBal); } } /* * @notice Withdraw function for ETH and INCH fees */ function withdrawFees() public onlyOwner { uint256 ethBal = address(this).balance; (bool success, ) = msg.sender.call.value(ethBal)(""); require(success, "Transfer failed"); uint256 oneInchFees = withdrawableOneInchFees; withdrawableOneInchFees = 0; oneInch.safeTransfer(msg.sender, oneInchFees); emit FeeWithdraw(ethBal, oneInchFees); } modifier onlyOwnerOrManager { require( msg.sender == owner() || msg.sender == manager || msg.sender == manager2, "Non-admin caller" ); _; } receive() external payable { require(msg.sender != tx.origin, "Errant ETH deposit"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"mintFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claimFee","type":"uint256"}],"name":"FeeDivisorsSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"ethFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"inchFee","type":"uint256"}],"name":"FeeWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[],"name":"Rebalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"adminActiveTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"adminUnstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_toApprove","type":"address"}],"name":"approveInch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"bool","name":"redeemForEth","type":"bool"},{"internalType":"uint256","name":"minReturn","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"incrementalOneInch","type":"uint256"},{"internalType":"uint256","name":"totalSupply","type":"uint256"}],"name":"calculateMintAmount","outputs":[{"internalType":"uint256","name":"mintAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vote","type":"uint256"}],"name":"defaultDecayPeriodVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vote","type":"uint256"}],"name":"defaultFeeVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vote","type":"uint256"}],"name":"defaultSlippageFeeVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"emergencyUnstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDivisors","outputs":[{"internalType":"uint256","name":"mintFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"},{"internalType":"uint256","name":"claimFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBufferBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNav","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getRewardExternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getStakedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"vote","type":"uint256"}],"name":"governanceShareVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"contract IERC20","name":"_oneInch","type":"address"},{"internalType":"contract IGovernanceMothership","name":"_governanceMothership","type":"address"},{"internalType":"contract IOneInchLiquidityProtocol","name":"_oneInchLiquidityProtocol","type":"address"},{"internalType":"uint256","name":"_mintFeeDivisor","type":"uint256"},{"internalType":"uint256","name":"_burnFeeDivisor","type":"uint256"},{"internalType":"uint256","name":"_claimFeeDivisor","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"govShare","type":"uint256"},{"internalType":"uint256","name":"refShare","type":"uint256"}],"name":"leftoverShareVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minReturn","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"oneInchAmount","type":"uint256"}],"name":"mintWithToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"vote","type":"uint256"}],"name":"poolDecayPeriodVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"vote","type":"uint256"}],"name":"poolFeeVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"vote","type":"uint256"}],"name":"poolSlippageFeeVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rebalanceExternal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vote","type":"uint256"}],"name":"referralShareVote","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IExchangeGovernance","name":"_exchangeGovernance","type":"address"}],"name":"setExchangeGovernanceAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IMooniswapFactoryGovernance","name":"_factoryGovernance","type":"address"}],"name":"setFactoryGovernanceAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintFeeDivisor","type":"uint256"},{"internalType":"uint256","name":"burnFeeDivisor","type":"uint256"},{"internalType":"uint256","name":"claimFeeDivisor","type":"uint256"}],"name":"setFeeDivisors","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IGovernanceRewards","name":"_governanceRewards","type":"address"}],"name":"setGovernanceRewardsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_manager","type":"address"}],"name":"setManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_manager2","type":"address"}],"name":"setManager2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpauseContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawNativeToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawableOneInchFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405234801561001057600080fd5b50613e85806100206000396000f3fe60806040526004361061031e5760003560e01c80638da5cb5b116101ab578063d0ebdbe7116100f7578063e7654b3c11610095578063f2fde38b1161006f578063f2fde38b14610bb0578063f38a8c0614610be3578063f8173f4d14610bf8578063fdec72f2146105335761036f565b8063e7654b3c14610b3b578063e9f7e17b14610b71578063ed89610414610b9b5761036f565b8063d9bb7170116100d1578063d9bb717014610a83578063dc24fc0714610ab3578063dd62ed3e14610ac8578063df22db8814610b035761036f565b8063d0ebdbe7146109f3578063d8d8f69b14610a26578063d8f4e0eb14610a595761036f565b8063a457c2d711610164578063b33712c51161013e578063b33712c514610948578063b3eaff8b1461095d578063b90fb49e14610987578063cbf325b6146109ba5761036f565b8063a457c2d7146108a6578063a5699e35146108df578063a9059cbb1461090f5761036f565b80638da5cb5b146107cb5780639154d77c146107fc57806395d89b41146108115780639725ff3514610826578063a0712d6814610850578063a1e12fc31461086d5761036f565b8063439766ce1161026a578063693986f611610223578063715018a6116101fd578063715018a614610759578063769658671461076e5780637d7c2a1c146107835780638bea72fb146107985761036f565b8063693986f6146106d85780636ff9b43a1461071157806370a08231146107265761036f565b8063439766ce1461061e578063476343ee146106335780635a18664c146106485780635c975abb1461065d5780635cb4746914610672578063629c577e146106a55761036f565b80632ba653ec116102d75780633552c62f116102b15780633552c62f14610588578063395093511461059d5780633b4d2d39146105d65780633d18b912146106095761036f565b80632ba653ec146105095780632e17de7814610533578063313ce5671461055d5761036f565b8063012ce5011461037457806306fdde031461039e578063095ea7b31461042857806314fd235a1461047557806318160ddd1461049f57806323b872dd146104c65761036f565b3661036f573332141561036d576040805162461bcd60e51b8152602060048201526012602482015271115c9c985b9d081155120819195c1bdcda5d60721b604482015290519081900360640190fd5b005b600080fd5b34801561038057600080fd5b5061036d6004803603602081101561039757600080fd5b5035610ca0565b3480156103aa57600080fd5b506103b3610d16565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103ed5781810151838201526020016103d5565b50505050905090810190601f16801561041a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561043457600080fd5b506104616004803603604081101561044b57600080fd5b506001600160a01b038135169060200135610dad565b604080519115158252519081900360200190f35b34801561048157600080fd5b5061036d6004803603602081101561049857600080fd5b5035610dcb565b3480156104ab57600080fd5b506104b4610eba565b60408051918252519081900360200190f35b3480156104d257600080fd5b50610461600480360360608110156104e957600080fd5b506001600160a01b03813581169160208101359091169060400135610ec0565b34801561051557600080fd5b5061036d6004803603602081101561052c57600080fd5b5035610f4d565b34801561053f57600080fd5b5061036d6004803603602081101561055657600080fd5b5035611021565b34801561056957600080fd5b506105726110a8565b6040805160ff9092168252519081900360200190f35b34801561059457600080fd5b506104b46110b1565b3480156105a957600080fd5b50610461600480360360408110156105c057600080fd5b506001600160a01b0381351690602001356110d7565b3480156105e257600080fd5b5061036d600480360360208110156105f957600080fd5b50356001600160a01b031661112b565b34801561061557600080fd5b5061036d6111d4565b34801561062a57600080fd5b5061046161126d565b34801561063f57600080fd5b5061036d611304565b34801561065457600080fd5b5061036d611453565b34801561066957600080fd5b506104616114fe565b34801561067e57600080fd5b5061036d6004803603602081101561069557600080fd5b50356001600160a01b0316611507565b3480156106b157600080fd5b506106ba6115b1565b60408051938452602084019290925282820152519081900360600190f35b3480156106e457600080fd5b5061036d600480360360408110156106fb57600080fd5b506001600160a01b0381351690602001356115c0565b34801561071d57600080fd5b5061036d611263565b34801561073257600080fd5b506104b46004803603602081101561074957600080fd5b50356001600160a01b03166116a9565b34801561076557600080fd5b5061036d6116c4565b34801561077a57600080fd5b506104b4611766565b34801561078f57600080fd5b5061036d6117e3565b3480156107a457600080fd5b5061036d600480360360208110156107bb57600080fd5b50356001600160a01b0316611882565b3480156107d757600080fd5b506107e06118fd565b604080516001600160a01b039092168252519081900360200190f35b34801561080857600080fd5b506104b461190c565b34801561081d57600080fd5b506103b3611912565b34801561083257600080fd5b5061036d6004803603602081101561084957600080fd5b5035611973565b61036d6004803603602081101561086657600080fd5b5035611a47565b34801561087957600080fd5b5061036d6004803603604081101561089057600080fd5b506001600160a01b038135169060200135611bb2565b3480156108b257600080fd5b50610461600480360360408110156108c957600080fd5b506001600160a01b038135169060200135611c7f565b3480156108eb57600080fd5b5061036d6004803603604081101561090257600080fd5b5080359060200135611ced565b34801561091b57600080fd5b506104616004803603604081101561093257600080fd5b506001600160a01b038135169060200135611dc9565b34801561095457600080fd5b50610461611ddd565b34801561096957600080fd5b5061036d6004803603602081101561098057600080fd5b5035611e6e565b34801561099357600080fd5b5061036d600480360360208110156109aa57600080fd5b50356001600160a01b0316611f57565b3480156109c657600080fd5b5061036d600480360360408110156109dd57600080fd5b506001600160a01b038135169060200135611ffd565b3480156109ff57600080fd5b5061036d60048036036020811015610a1657600080fd5b50356001600160a01b03166120ca565b348015610a3257600080fd5b5061036d60048036036020811015610a4957600080fd5b50356001600160a01b0316612145565b348015610a6557600080fd5b5061036d60048036036020811015610a7c57600080fd5b50356121ef565b348015610a8f57600080fd5b506104b460048036036040811015610aa657600080fd5b50803590602001356122c3565b348015610abf57600080fd5b506104b4612310565b348015610ad457600080fd5b506104b460048036036040811015610aeb57600080fd5b506001600160a01b038135811691602001351661239f565b348015610b0f57600080fd5b5061036d60048036036060811015610b2657600080fd5b508035906020810135151590604001356123ca565b348015610b4757600080fd5b5061036d60048036036060811015610b5e57600080fd5b50803590602081013590604001356125fd565b348015610b7d57600080fd5b5061036d60048036036020811015610b9457600080fd5b5035612665565b348015610ba757600080fd5b5061036d612739565b348015610bbc57600080fd5b5061036d60048036036020811015610bd357600080fd5b50356001600160a01b031661278d565b348015610bef57600080fd5b506104b4612886565b348015610c0457600080fd5b5061036d600480360360e0811015610c1b57600080fd5b810190602081018135640100000000811115610c3657600080fd5b820183602082011115610c4857600080fd5b80359060200191846001830284011164010000000083111715610c6a57600080fd5b91935091506001600160a01b03813581169160208101358216916040820135169060608101359060808101359060a0013561288c565b60fb544290610cb8906224ea0063ffffffff6129ec16565b10610d0a576040805162461bcd60e51b815260206004820152601c60248201527f4c69717569646174696f6e2074696d65206e6f7420656c617073656400000000604482015290519081900360640190fd5b610d1381612a46565b50565b60688054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610da25780601f10610d7757610100808354040283529160200191610da2565b820191906000526020600020905b815481529060010190602001808311610d8557829003601f168201915b505050505090505b90565b6000610dc1610dba612a94565b8484612a98565b5060015b92915050565b610dd36118fd565b6001600160a01b0316336001600160a01b03161480610dfd5750610104546001600160a01b031633145b80610e135750610105546001600160a01b031633145b610e52576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b60ff5460408051630a7e91ad60e11b81526004810184905290516001600160a01b03909216916314fd235a9160248082019260009290919082900301818387803b158015610e9f57600080fd5b505af1158015610eb3573d6000803e3d6000fd5b5050505050565b60675490565b6000610ecd848484612b84565b610f4384610ed9612a94565b610f3e85604051806060016040528060288152602001613ceb602891396001600160a01b038a16600090815260666020526040812090610f17612a94565b6001600160a01b03168152602081019190915260400160002054919063ffffffff612ced16565b612a98565b5060019392505050565b610f556118fd565b6001600160a01b0316336001600160a01b03161480610f7f5750610104546001600160a01b031633145b80610f955750610105546001600160a01b031633145b610fd4576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b60ff5460408051630ae994fb60e21b81526004810184905290516001600160a01b0390921691632ba653ec9160248082019260009290919082900301818387803b158015610e9f57600080fd5b6110296118fd565b6001600160a01b0316336001600160a01b031614806110535750610104546001600160a01b031633145b806110695750610105546001600160a01b031633145b610d0a576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b606a5460ff1690565b60006110d26110be612310565b6110c6611766565b9063ffffffff6129ec16565b905090565b6000610dc16110e4612a94565b84610f3e85606660006110f5612a94565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6129ec16565b6111336118fd565b6001600160a01b0316336001600160a01b0316148061115d5750610104546001600160a01b031633145b806111735750610105546001600160a01b031633145b6111b2576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b60ff80546001600160a01b0319166001600160a01b0392909216919091179055565b6111dc6118fd565b6001600160a01b0316336001600160a01b031614806112065750610104546001600160a01b031633145b8061121c5750610105546001600160a01b031633145b61125b576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b611263612d84565b61126b612d8a565b565b60006112776118fd565b6001600160a01b0316336001600160a01b031614806112a15750610104546001600160a01b031633145b806112b75750610105546001600160a01b031633145b6112f6576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b6112fe612e34565b50600190565b61130c612a94565b6097546001600160a01b0390811691161461135c576040805162461bcd60e51b81526020600482018190526024820152600080516020613d13833981519152604482015290519081900360640190fd5b6040514790600090339083908381818185875af1925050503d80600081146113a0576040519150601f19603f3d011682016040523d82523d6000602084013e6113a5565b606091505b50509050806113ed576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60fc8054600090915560fd54611413906001600160a01b0316338363ffffffff612ed216565b604080518481526020810183905281517f17321e0553949bd83c456af1d2fb55ef7f4cf9cda87b9512c9ea532becaab5f6929181900390910190a1505050565b61145b6118fd565b6001600160a01b0316336001600160a01b031614806114855750610104546001600160a01b031633145b8061149b5750610105546001600160a01b031633145b6114da576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b60006114e5306116a9565b90508015610d1357610d1330338363ffffffff612ed216565b60c95460ff1690565b61150f6118fd565b6001600160a01b0316336001600160a01b031614806115395750610104546001600160a01b031633145b8061154f5750610105546001600160a01b031633145b61158e576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b61010180546001600160a01b0319166001600160a01b0392909216919091179055565b61010654610107546101085483565b6115c86118fd565b6001600160a01b0316336001600160a01b031614806115f25750610104546001600160a01b031633145b806116085750610105546001600160a01b031633145b611647576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b816001600160a01b03166311212d66826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561168d57600080fd5b505af11580156116a1573d6000803e3d6000fd5b505050505050565b6001600160a01b031660009081526065602052604090205490565b6116cc612a94565b6097546001600160a01b0390811691161461171c576040805162461bcd60e51b81526020600482018190526024820152600080516020613d13833981519152604482015290519081900360640190fd5b6097546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3609780546001600160a01b0319169055565b61010054604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156117b257600080fd5b505afa1580156117c6573d6000803e3d6000fd5b505050506040513d60208110156117dc57600080fd5b5051905090565b6117eb6118fd565b6001600160a01b0316336001600160a01b031614806118155750610104546001600160a01b031633145b8061182b5750610105546001600160a01b031633145b61186a576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b611872612d84565b61187a612d8a565b61126b612f24565b61188a612a94565b6097546001600160a01b039081169116146118da576040805162461bcd60e51b81526020600482018190526024820152600080516020613d13833981519152604482015290519081900360640190fd5b61010580546001600160a01b0319166001600160a01b0392909216919091179055565b6097546001600160a01b031690565b60fb5481565b60698054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610da25780601f10610d7757610100808354040283529160200191610da2565b61197b6118fd565b6001600160a01b0316336001600160a01b031614806119a55750610104546001600160a01b031633145b806119bb5750610105546001600160a01b031633145b6119fa576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b60ff5460408051639725ff3560e01b81526004810184905290516001600160a01b0390921691639725ff359160248082019260009290919082900301818387803b158015610e9f57600080fd5b60c95460ff1615611a92576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60003411611ad7576040805162461bcd60e51b815260206004820152600d60248201526c09aeae6e840e6cadcc8408aa89609b1b604482015290519081900360640190fd5b6000611ae93461010660000154612fc0565b90506000611afd348363ffffffff612fd816565b60fe5460fd546040805163d5bcb9b560e01b81526000600482018190526001600160a01b03938416602483015260448201869052606482018990526084820181905291519495509093919092169163d5bcb9b591859160a48082019260209290919082900301818588803b158015611b7457600080fd5b505af1158015611b88573d6000803e3d6000fd5b50505050506040513d6020811015611b9f57600080fd5b50519050611bac8161301a565b50505050565b611bba6118fd565b6001600160a01b0316336001600160a01b03161480611be45750610104546001600160a01b031633145b80611bfa5750610105546001600160a01b031633145b611c39576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b816001600160a01b03166307a80070826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561168d57600080fd5b6000610dc1611c8c612a94565b84610f3e85604051806060016040528060258152602001613e2b6025913960666000611cb6612a94565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff612ced16565b611cf56118fd565b6001600160a01b0316336001600160a01b03161480611d1f5750610104546001600160a01b031633145b80611d355750610105546001600160a01b031633145b611d74576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b610101546040805163a5699e3560e01b8152600481018590526024810184905290516001600160a01b039092169163a5699e359160448082019260009290919082900301818387803b15801561168d57600080fd5b6000610dc1611dd6612a94565b8484612b84565b6000611de76118fd565b6001600160a01b0316336001600160a01b03161480611e115750610104546001600160a01b031633145b80611e275750610105546001600160a01b031633145b611e66576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b6112fe613039565b60c95460ff1615611eb9576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60008111611f00576040805162461bcd60e51b815260206004820152600f60248201526e26bab9ba1039b2b732103a37b5b2b760891b604482015290519081900360640190fd5b60fd54611f1e906001600160a01b031633308463ffffffff6130ba16565b6000611f308261010660000154612fc0565b9050611f3b81613114565b611f53611f4e838363ffffffff612fd816565b61301a565b5050565b611f5f6118fd565b6001600160a01b0316336001600160a01b03161480611f895750610104546001600160a01b031633145b80611f9f5750610105546001600160a01b031633145b611fde576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b60fd54610d13906001600160a01b03168260001963ffffffff61312d16565b6120056118fd565b6001600160a01b0316336001600160a01b0316148061202f5750610104546001600160a01b031633145b806120455750610105546001600160a01b031633145b612084576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b816001600160a01b031663eaadf848826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561168d57600080fd5b6120d2612a94565b6097546001600160a01b03908116911614612122576040805162461bcd60e51b81526020600482018190526024820152600080516020613d13833981519152604482015290519081900360640190fd5b61010480546001600160a01b0319166001600160a01b0392909216919091179055565b61214d6118fd565b6001600160a01b0316336001600160a01b031614806121775750610104546001600160a01b031633145b8061218d5750610105546001600160a01b031633145b6121cc576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b61010280546001600160a01b0319166001600160a01b0392909216919091179055565b6121f76118fd565b6001600160a01b0316336001600160a01b031614806122215750610104546001600160a01b031633145b806122375750610105546001600160a01b031633145b612276576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b60ff546040805163d8f4e0eb60e01b81526004810184905290516001600160a01b039092169163d8f4e0eb9160248082019260009290919082900301818387803b158015610e9f57600080fd5b6000816122e2576122db83600a63ffffffff61324016565b9050610dc5565b6123096122ed6110b1565b6122fd858563ffffffff61324016565b9063ffffffff61329916565b9392505050565b60fc5460fd54604080516370a0823160e01b815230600482015290516000936110d29390926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561236757600080fd5b505afa15801561237b573d6000803e3d6000fd5b505050506040513d602081101561239157600080fd5b50519063ffffffff612fd816565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b60008311612411576040805162461bcd60e51b815260206004820152600f60248201526e09aeae6e840e6cadcc840f0929c869608b1b604482015290519081900360640190fd5b600061241b611766565b90506000612427612310565b9050600061243b838363ffffffff6129ec16565b9050600061245a61244a610eba565b6122fd848a63ffffffff61324016565b9050828111156124b1576040805162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e742065786974206c69717569646974790000000000604482015290519081900360640190fd5b6124bb33886132db565b85156125a85760006124d38261010660010154612fc0565b90506124de81613114565b60fe5460fd546001600160a01b039182169163e331d03991166000612509868663ffffffff612fd816565b604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529290931660248301526044820152606481018a90526000608482018190523360a4830152915160c48083019360209383900390910190829087803b15801561257557600080fd5b505af1158015612589573d6000803e3d6000fd5b505050506040513d602081101561259f57600080fd5b506125f4915050565b60006125ba8261010660010154612fc0565b90506125c581613114565b6125f2336125d9848463ffffffff612fd816565b60fd546001600160a01b0316919063ffffffff612ed216565b505b50505050505050565b612605612a94565b6097546001600160a01b03908116911614612655576040805162461bcd60e51b81526020600482018190526024820152600080516020613d13833981519152604482015290519081900360640190fd5b6126608383836133e3565b505050565b61266d6118fd565b6001600160a01b0316336001600160a01b031614806126975750610104546001600160a01b031633145b806126ad5750610105546001600160a01b031633145b6126ec576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b60ff546040805163e9f7e17b60e01b81526004810184905290516001600160a01b039092169163e9f7e17b9160248082019260009290919082900301818387803b158015610e9f57600080fd5b60fb544290612751906224ea0063ffffffff6129ec16565b116118725760405162461bcd60e51b8152600401808060200182810382526029815260200180613bf16029913960400191505060405180910390fd5b612795612a94565b6097546001600160a01b039081169116146127e5576040805162461bcd60e51b81526020600482018190526024820152600080516020613d13833981519152604482015290519081900360640190fd5b6001600160a01b03811661282a5760405162461bcd60e51b8152600401808060200182810382526026815260200180613c3c6026913960400191505060405180910390fd5b6097546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3609780546001600160a01b0319166001600160a01b0392909216919091179055565b60fc5481565b600054610100900460ff16806128a557506128a5613518565b806128b3575060005460ff16155b6128ee5760405162461bcd60e51b815260040180806020018281038252602e815260200180613d33602e913960400191505060405180910390fd5b600054610100900460ff16158015612919576000805460ff1961ff0019909116610100171660011790555b61292161351e565b6129296135bf565b612986604051806040016040528060058152602001640f0929c86960db1b8152508a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506136b892505050565b60fd80546001600160a01b03808a166001600160a01b031992831617909255610100805489841690831617905560fe8054928816929091169190911790556129cf8484846133e3565b80156129e1576000805461ff00191690555b505050505050505050565b600082820183811015612309576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b61010054604080516305c2fbcf60e31b81526004810184905290516001600160a01b0390921691632e17de789160248082019260009290919082900301818387803b158015610e9f57600080fd5b3390565b6001600160a01b038316612add5760405162461bcd60e51b8152600401808060200182810382526024815260200180613da76024913960400191505060405180910390fd5b6001600160a01b038216612b225760405162461bcd60e51b8152600401808060200182810382526022815260200180613c626022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316612bc95760405162461bcd60e51b8152600401808060200182810382526025815260200180613d826025913960400191505060405180910390fd5b6001600160a01b038216612c0e5760405162461bcd60e51b8152600401808060200182810382526023815260200180613bce6023913960400191505060405180910390fd5b612c19838383612660565b612c5c81604051806060016040528060268152602001613c84602691396001600160a01b038616600090815260656020526040902054919063ffffffff612ced16565b6001600160a01b038085166000908152606560205260408082209390935590841681522054612c91908263ffffffff6129ec16565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115612d7c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d41578181015183820152602001612d29565b50505050905090810190601f168015612d6e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b4260fb55565b6000612d94612310565b905061010260009054906101000a90046001600160a01b03166001600160a01b0316633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612de757600080fd5b505af1158015612dfb573d6000803e3d6000fd5b505050506000612e09612310565b90506000612e29612e20838563ffffffff612fd816565b61010854612fc0565b905061266081613114565b60c95460ff1615612e7f576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60c9805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612eb5612a94565b604080516001600160a01b039092168252519081900360200190a1565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612660908490613790565b6000612f2e611766565b90506000612f3a612310565b90506000612f5360146122fd858563ffffffff6129ec16565b905080821115612f7a57612f75612f70838363ffffffff612fd816565b613948565b612f92565b612f92612f8d828463ffffffff612fd816565b612a46565b6040517ff57243a1fddfdc9fa2c7de26cc3503b1b94cfd4368d2b82d0970bfbb2fbce3a490600090a1505050565b60008115610dc557612309838363ffffffff61329916565b600061230983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ced565b600061302d82613028610eba565b6122c3565b9050611f533382613996565b60c95460ff16613087576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b60c9805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612eb5612a94565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611bac908590613790565b60fc54613127908263ffffffff6129ec16565b60fc5550565b8015806131b3575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561318557600080fd5b505afa158015613199573d6000803e3d6000fd5b505050506040513d60208110156131af57600080fd5b5051155b6131ee5760405162461bcd60e51b8152600401808060200182810382526036815260200180613df56036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052612660908490613790565b60008261324f57506000610dc5565b8282028284828161325c57fe5b04146123095760405162461bcd60e51b8152600401808060200182810382526021815260200180613cca6021913960400191505060405180910390fd5b600061230983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a94565b6001600160a01b0382166133205760405162461bcd60e51b8152600401808060200182810382526021815260200180613d616021913960400191505060405180910390fd5b61332c82600083612660565b61336f81604051806060016040528060228152602001613c1a602291396001600160a01b038516600090815260656020526040902054919063ffffffff612ced16565b6001600160a01b03831660009081526065602052604090205560675461339b908263ffffffff612fd816565b6067556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b8215806133f1575060328310155b613430576040805162461bcd60e51b815260206004820152600b60248201526a496e76616c69642066656560a81b604482015290519081900360640190fd5b81158061343e575060648210155b61347d576040805162461bcd60e51b815260206004820152600b60248201526a496e76616c69642066656560a81b604482015290519081900360640190fd5b60198110156134c1576040805162461bcd60e51b815260206004820152600b60248201526a496e76616c69642066656560a81b604482015290519081900360640190fd5b610106839055610107829055610108819055604080518481526020810184905280820183905290517f985786ed84548f26eae234688f08682cdd04f5b552190a894b31307afd72c46a9181900360600190a1505050565b303b1590565b600054610100900460ff16806135375750613537613518565b80613545575060005460ff16155b6135805760405162461bcd60e51b815260040180806020018281038252602e815260200180613d33602e913960400191505060405180910390fd5b600054610100900460ff161580156135ab576000805460ff1961ff0019909116610100171660011790555b8015610d13576000805461ff001916905550565b600054610100900460ff16806135d857506135d8613518565b806135e6575060005460ff16155b6136215760405162461bcd60e51b815260040180806020018281038252602e815260200180613d33602e913960400191505060405180910390fd5b600054610100900460ff1615801561364c576000805460ff1961ff0019909116610100171660011790555b6000613656612a94565b609780546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610d13576000805461ff001916905550565b600054610100900460ff16806136d157506136d1613518565b806136df575060005460ff16155b61371a5760405162461bcd60e51b815260040180806020018281038252602e815260200180613d33602e913960400191505060405180910390fd5b600054610100900460ff16158015613745576000805460ff1961ff0019909116610100171660011790555b8251613758906068906020860190613b35565b50815161376c906069906020850190613b35565b50606a805460ff191660121790558015612660576000805461ff0019169055505050565b6137a2826001600160a01b0316613af9565b6137f3576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106138315780518252601f199092019160209182019101613812565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613893576040519150601f19603f3d011682016040523d82523d6000602084013e613898565b606091505b5091509150816138ef576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115611bac5780806020019051602081101561390b57600080fd5b5051611bac5760405162461bcd60e51b815260040180806020018281038252602a815260200180613dcb602a913960400191505060405180910390fd5b610100546040805163534a7e1d60e11b81526004810184905290516001600160a01b039092169163a694fc3a9160248082019260009290919082900301818387803b158015610e9f57600080fd5b6001600160a01b0382166139f1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6139fd60008383612660565b606754613a10908263ffffffff6129ec16565b6067556001600160a01b038216600090815260656020526040902054613a3c908263ffffffff6129ec16565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183613ae35760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612d41578181015183820152602001612d29565b506000838581613aef57fe5b0495945050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590613b2d57508115155b949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613b7657805160ff1916838001178555613ba3565b82800160010185558215613ba3579182015b82811115613ba3578251825591602001919060010190613b88565b50613baf929150613bb3565b5090565b610daa91905b80821115613baf5760008155600101613bb956fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734c69717569646174696f6e2074696d6520656c61707365643b206e6f206d6f7265207374616b696e6745524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654e6f6e2d61646d696e2063616c6c657200000000000000000000000000000000536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202d116da9a3d141ac63eaa0f49642984f0eb853c11f66fa99579d8390e1dea15564736f6c63430006020033
Deployed Bytecode
0x60806040526004361061031e5760003560e01c80638da5cb5b116101ab578063d0ebdbe7116100f7578063e7654b3c11610095578063f2fde38b1161006f578063f2fde38b14610bb0578063f38a8c0614610be3578063f8173f4d14610bf8578063fdec72f2146105335761036f565b8063e7654b3c14610b3b578063e9f7e17b14610b71578063ed89610414610b9b5761036f565b8063d9bb7170116100d1578063d9bb717014610a83578063dc24fc0714610ab3578063dd62ed3e14610ac8578063df22db8814610b035761036f565b8063d0ebdbe7146109f3578063d8d8f69b14610a26578063d8f4e0eb14610a595761036f565b8063a457c2d711610164578063b33712c51161013e578063b33712c514610948578063b3eaff8b1461095d578063b90fb49e14610987578063cbf325b6146109ba5761036f565b8063a457c2d7146108a6578063a5699e35146108df578063a9059cbb1461090f5761036f565b80638da5cb5b146107cb5780639154d77c146107fc57806395d89b41146108115780639725ff3514610826578063a0712d6814610850578063a1e12fc31461086d5761036f565b8063439766ce1161026a578063693986f611610223578063715018a6116101fd578063715018a614610759578063769658671461076e5780637d7c2a1c146107835780638bea72fb146107985761036f565b8063693986f6146106d85780636ff9b43a1461071157806370a08231146107265761036f565b8063439766ce1461061e578063476343ee146106335780635a18664c146106485780635c975abb1461065d5780635cb4746914610672578063629c577e146106a55761036f565b80632ba653ec116102d75780633552c62f116102b15780633552c62f14610588578063395093511461059d5780633b4d2d39146105d65780633d18b912146106095761036f565b80632ba653ec146105095780632e17de7814610533578063313ce5671461055d5761036f565b8063012ce5011461037457806306fdde031461039e578063095ea7b31461042857806314fd235a1461047557806318160ddd1461049f57806323b872dd146104c65761036f565b3661036f573332141561036d576040805162461bcd60e51b8152602060048201526012602482015271115c9c985b9d081155120819195c1bdcda5d60721b604482015290519081900360640190fd5b005b600080fd5b34801561038057600080fd5b5061036d6004803603602081101561039757600080fd5b5035610ca0565b3480156103aa57600080fd5b506103b3610d16565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103ed5781810151838201526020016103d5565b50505050905090810190601f16801561041a5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561043457600080fd5b506104616004803603604081101561044b57600080fd5b506001600160a01b038135169060200135610dad565b604080519115158252519081900360200190f35b34801561048157600080fd5b5061036d6004803603602081101561049857600080fd5b5035610dcb565b3480156104ab57600080fd5b506104b4610eba565b60408051918252519081900360200190f35b3480156104d257600080fd5b50610461600480360360608110156104e957600080fd5b506001600160a01b03813581169160208101359091169060400135610ec0565b34801561051557600080fd5b5061036d6004803603602081101561052c57600080fd5b5035610f4d565b34801561053f57600080fd5b5061036d6004803603602081101561055657600080fd5b5035611021565b34801561056957600080fd5b506105726110a8565b6040805160ff9092168252519081900360200190f35b34801561059457600080fd5b506104b46110b1565b3480156105a957600080fd5b50610461600480360360408110156105c057600080fd5b506001600160a01b0381351690602001356110d7565b3480156105e257600080fd5b5061036d600480360360208110156105f957600080fd5b50356001600160a01b031661112b565b34801561061557600080fd5b5061036d6111d4565b34801561062a57600080fd5b5061046161126d565b34801561063f57600080fd5b5061036d611304565b34801561065457600080fd5b5061036d611453565b34801561066957600080fd5b506104616114fe565b34801561067e57600080fd5b5061036d6004803603602081101561069557600080fd5b50356001600160a01b0316611507565b3480156106b157600080fd5b506106ba6115b1565b60408051938452602084019290925282820152519081900360600190f35b3480156106e457600080fd5b5061036d600480360360408110156106fb57600080fd5b506001600160a01b0381351690602001356115c0565b34801561071d57600080fd5b5061036d611263565b34801561073257600080fd5b506104b46004803603602081101561074957600080fd5b50356001600160a01b03166116a9565b34801561076557600080fd5b5061036d6116c4565b34801561077a57600080fd5b506104b4611766565b34801561078f57600080fd5b5061036d6117e3565b3480156107a457600080fd5b5061036d600480360360208110156107bb57600080fd5b50356001600160a01b0316611882565b3480156107d757600080fd5b506107e06118fd565b604080516001600160a01b039092168252519081900360200190f35b34801561080857600080fd5b506104b461190c565b34801561081d57600080fd5b506103b3611912565b34801561083257600080fd5b5061036d6004803603602081101561084957600080fd5b5035611973565b61036d6004803603602081101561086657600080fd5b5035611a47565b34801561087957600080fd5b5061036d6004803603604081101561089057600080fd5b506001600160a01b038135169060200135611bb2565b3480156108b257600080fd5b50610461600480360360408110156108c957600080fd5b506001600160a01b038135169060200135611c7f565b3480156108eb57600080fd5b5061036d6004803603604081101561090257600080fd5b5080359060200135611ced565b34801561091b57600080fd5b506104616004803603604081101561093257600080fd5b506001600160a01b038135169060200135611dc9565b34801561095457600080fd5b50610461611ddd565b34801561096957600080fd5b5061036d6004803603602081101561098057600080fd5b5035611e6e565b34801561099357600080fd5b5061036d600480360360208110156109aa57600080fd5b50356001600160a01b0316611f57565b3480156109c657600080fd5b5061036d600480360360408110156109dd57600080fd5b506001600160a01b038135169060200135611ffd565b3480156109ff57600080fd5b5061036d60048036036020811015610a1657600080fd5b50356001600160a01b03166120ca565b348015610a3257600080fd5b5061036d60048036036020811015610a4957600080fd5b50356001600160a01b0316612145565b348015610a6557600080fd5b5061036d60048036036020811015610a7c57600080fd5b50356121ef565b348015610a8f57600080fd5b506104b460048036036040811015610aa657600080fd5b50803590602001356122c3565b348015610abf57600080fd5b506104b4612310565b348015610ad457600080fd5b506104b460048036036040811015610aeb57600080fd5b506001600160a01b038135811691602001351661239f565b348015610b0f57600080fd5b5061036d60048036036060811015610b2657600080fd5b508035906020810135151590604001356123ca565b348015610b4757600080fd5b5061036d60048036036060811015610b5e57600080fd5b50803590602081013590604001356125fd565b348015610b7d57600080fd5b5061036d60048036036020811015610b9457600080fd5b5035612665565b348015610ba757600080fd5b5061036d612739565b348015610bbc57600080fd5b5061036d60048036036020811015610bd357600080fd5b50356001600160a01b031661278d565b348015610bef57600080fd5b506104b4612886565b348015610c0457600080fd5b5061036d600480360360e0811015610c1b57600080fd5b810190602081018135640100000000811115610c3657600080fd5b820183602082011115610c4857600080fd5b80359060200191846001830284011164010000000083111715610c6a57600080fd5b91935091506001600160a01b03813581169160208101358216916040820135169060608101359060808101359060a0013561288c565b60fb544290610cb8906224ea0063ffffffff6129ec16565b10610d0a576040805162461bcd60e51b815260206004820152601c60248201527f4c69717569646174696f6e2074696d65206e6f7420656c617073656400000000604482015290519081900360640190fd5b610d1381612a46565b50565b60688054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610da25780601f10610d7757610100808354040283529160200191610da2565b820191906000526020600020905b815481529060010190602001808311610d8557829003601f168201915b505050505090505b90565b6000610dc1610dba612a94565b8484612a98565b5060015b92915050565b610dd36118fd565b6001600160a01b0316336001600160a01b03161480610dfd5750610104546001600160a01b031633145b80610e135750610105546001600160a01b031633145b610e52576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b60ff5460408051630a7e91ad60e11b81526004810184905290516001600160a01b03909216916314fd235a9160248082019260009290919082900301818387803b158015610e9f57600080fd5b505af1158015610eb3573d6000803e3d6000fd5b5050505050565b60675490565b6000610ecd848484612b84565b610f4384610ed9612a94565b610f3e85604051806060016040528060288152602001613ceb602891396001600160a01b038a16600090815260666020526040812090610f17612a94565b6001600160a01b03168152602081019190915260400160002054919063ffffffff612ced16565b612a98565b5060019392505050565b610f556118fd565b6001600160a01b0316336001600160a01b03161480610f7f5750610104546001600160a01b031633145b80610f955750610105546001600160a01b031633145b610fd4576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b60ff5460408051630ae994fb60e21b81526004810184905290516001600160a01b0390921691632ba653ec9160248082019260009290919082900301818387803b158015610e9f57600080fd5b6110296118fd565b6001600160a01b0316336001600160a01b031614806110535750610104546001600160a01b031633145b806110695750610105546001600160a01b031633145b610d0a576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b606a5460ff1690565b60006110d26110be612310565b6110c6611766565b9063ffffffff6129ec16565b905090565b6000610dc16110e4612a94565b84610f3e85606660006110f5612a94565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549063ffffffff6129ec16565b6111336118fd565b6001600160a01b0316336001600160a01b0316148061115d5750610104546001600160a01b031633145b806111735750610105546001600160a01b031633145b6111b2576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b60ff80546001600160a01b0319166001600160a01b0392909216919091179055565b6111dc6118fd565b6001600160a01b0316336001600160a01b031614806112065750610104546001600160a01b031633145b8061121c5750610105546001600160a01b031633145b61125b576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b611263612d84565b61126b612d8a565b565b60006112776118fd565b6001600160a01b0316336001600160a01b031614806112a15750610104546001600160a01b031633145b806112b75750610105546001600160a01b031633145b6112f6576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b6112fe612e34565b50600190565b61130c612a94565b6097546001600160a01b0390811691161461135c576040805162461bcd60e51b81526020600482018190526024820152600080516020613d13833981519152604482015290519081900360640190fd5b6040514790600090339083908381818185875af1925050503d80600081146113a0576040519150601f19603f3d011682016040523d82523d6000602084013e6113a5565b606091505b50509050806113ed576040805162461bcd60e51b815260206004820152600f60248201526e151c985b9cd9995c8819985a5b1959608a1b604482015290519081900360640190fd5b60fc8054600090915560fd54611413906001600160a01b0316338363ffffffff612ed216565b604080518481526020810183905281517f17321e0553949bd83c456af1d2fb55ef7f4cf9cda87b9512c9ea532becaab5f6929181900390910190a1505050565b61145b6118fd565b6001600160a01b0316336001600160a01b031614806114855750610104546001600160a01b031633145b8061149b5750610105546001600160a01b031633145b6114da576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b60006114e5306116a9565b90508015610d1357610d1330338363ffffffff612ed216565b60c95460ff1690565b61150f6118fd565b6001600160a01b0316336001600160a01b031614806115395750610104546001600160a01b031633145b8061154f5750610105546001600160a01b031633145b61158e576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b61010180546001600160a01b0319166001600160a01b0392909216919091179055565b61010654610107546101085483565b6115c86118fd565b6001600160a01b0316336001600160a01b031614806115f25750610104546001600160a01b031633145b806116085750610105546001600160a01b031633145b611647576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b816001600160a01b03166311212d66826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561168d57600080fd5b505af11580156116a1573d6000803e3d6000fd5b505050505050565b6001600160a01b031660009081526065602052604090205490565b6116cc612a94565b6097546001600160a01b0390811691161461171c576040805162461bcd60e51b81526020600482018190526024820152600080516020613d13833981519152604482015290519081900360640190fd5b6097546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3609780546001600160a01b0319169055565b61010054604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156117b257600080fd5b505afa1580156117c6573d6000803e3d6000fd5b505050506040513d60208110156117dc57600080fd5b5051905090565b6117eb6118fd565b6001600160a01b0316336001600160a01b031614806118155750610104546001600160a01b031633145b8061182b5750610105546001600160a01b031633145b61186a576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b611872612d84565b61187a612d8a565b61126b612f24565b61188a612a94565b6097546001600160a01b039081169116146118da576040805162461bcd60e51b81526020600482018190526024820152600080516020613d13833981519152604482015290519081900360640190fd5b61010580546001600160a01b0319166001600160a01b0392909216919091179055565b6097546001600160a01b031690565b60fb5481565b60698054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610da25780601f10610d7757610100808354040283529160200191610da2565b61197b6118fd565b6001600160a01b0316336001600160a01b031614806119a55750610104546001600160a01b031633145b806119bb5750610105546001600160a01b031633145b6119fa576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b60ff5460408051639725ff3560e01b81526004810184905290516001600160a01b0390921691639725ff359160248082019260009290919082900301818387803b158015610e9f57600080fd5b60c95460ff1615611a92576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60003411611ad7576040805162461bcd60e51b815260206004820152600d60248201526c09aeae6e840e6cadcc8408aa89609b1b604482015290519081900360640190fd5b6000611ae93461010660000154612fc0565b90506000611afd348363ffffffff612fd816565b60fe5460fd546040805163d5bcb9b560e01b81526000600482018190526001600160a01b03938416602483015260448201869052606482018990526084820181905291519495509093919092169163d5bcb9b591859160a48082019260209290919082900301818588803b158015611b7457600080fd5b505af1158015611b88573d6000803e3d6000fd5b50505050506040513d6020811015611b9f57600080fd5b50519050611bac8161301a565b50505050565b611bba6118fd565b6001600160a01b0316336001600160a01b03161480611be45750610104546001600160a01b031633145b80611bfa5750610105546001600160a01b031633145b611c39576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b816001600160a01b03166307a80070826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561168d57600080fd5b6000610dc1611c8c612a94565b84610f3e85604051806060016040528060258152602001613e2b6025913960666000611cb6612a94565b6001600160a01b03908116825260208083019390935260409182016000908120918d1681529252902054919063ffffffff612ced16565b611cf56118fd565b6001600160a01b0316336001600160a01b03161480611d1f5750610104546001600160a01b031633145b80611d355750610105546001600160a01b031633145b611d74576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b610101546040805163a5699e3560e01b8152600481018590526024810184905290516001600160a01b039092169163a5699e359160448082019260009290919082900301818387803b15801561168d57600080fd5b6000610dc1611dd6612a94565b8484612b84565b6000611de76118fd565b6001600160a01b0316336001600160a01b03161480611e115750610104546001600160a01b031633145b80611e275750610105546001600160a01b031633145b611e66576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b6112fe613039565b60c95460ff1615611eb9576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60008111611f00576040805162461bcd60e51b815260206004820152600f60248201526e26bab9ba1039b2b732103a37b5b2b760891b604482015290519081900360640190fd5b60fd54611f1e906001600160a01b031633308463ffffffff6130ba16565b6000611f308261010660000154612fc0565b9050611f3b81613114565b611f53611f4e838363ffffffff612fd816565b61301a565b5050565b611f5f6118fd565b6001600160a01b0316336001600160a01b03161480611f895750610104546001600160a01b031633145b80611f9f5750610105546001600160a01b031633145b611fde576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b60fd54610d13906001600160a01b03168260001963ffffffff61312d16565b6120056118fd565b6001600160a01b0316336001600160a01b0316148061202f5750610104546001600160a01b031633145b806120455750610105546001600160a01b031633145b612084576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b816001600160a01b031663eaadf848826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561168d57600080fd5b6120d2612a94565b6097546001600160a01b03908116911614612122576040805162461bcd60e51b81526020600482018190526024820152600080516020613d13833981519152604482015290519081900360640190fd5b61010480546001600160a01b0319166001600160a01b0392909216919091179055565b61214d6118fd565b6001600160a01b0316336001600160a01b031614806121775750610104546001600160a01b031633145b8061218d5750610105546001600160a01b031633145b6121cc576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b61010280546001600160a01b0319166001600160a01b0392909216919091179055565b6121f76118fd565b6001600160a01b0316336001600160a01b031614806122215750610104546001600160a01b031633145b806122375750610105546001600160a01b031633145b612276576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b60ff546040805163d8f4e0eb60e01b81526004810184905290516001600160a01b039092169163d8f4e0eb9160248082019260009290919082900301818387803b158015610e9f57600080fd5b6000816122e2576122db83600a63ffffffff61324016565b9050610dc5565b6123096122ed6110b1565b6122fd858563ffffffff61324016565b9063ffffffff61329916565b9392505050565b60fc5460fd54604080516370a0823160e01b815230600482015290516000936110d29390926001600160a01b03909116916370a0823191602480820192602092909190829003018186803b15801561236757600080fd5b505afa15801561237b573d6000803e3d6000fd5b505050506040513d602081101561239157600080fd5b50519063ffffffff612fd816565b6001600160a01b03918216600090815260666020908152604080832093909416825291909152205490565b60008311612411576040805162461bcd60e51b815260206004820152600f60248201526e09aeae6e840e6cadcc840f0929c869608b1b604482015290519081900360640190fd5b600061241b611766565b90506000612427612310565b9050600061243b838363ffffffff6129ec16565b9050600061245a61244a610eba565b6122fd848a63ffffffff61324016565b9050828111156124b1576040805162461bcd60e51b815260206004820152601b60248201527f496e73756666696369656e742065786974206c69717569646974790000000000604482015290519081900360640190fd5b6124bb33886132db565b85156125a85760006124d38261010660010154612fc0565b90506124de81613114565b60fe5460fd546001600160a01b039182169163e331d03991166000612509868663ffffffff612fd816565b604080516001600160e01b031960e087901b1681526001600160a01b0394851660048201529290931660248301526044820152606481018a90526000608482018190523360a4830152915160c48083019360209383900390910190829087803b15801561257557600080fd5b505af1158015612589573d6000803e3d6000fd5b505050506040513d602081101561259f57600080fd5b506125f4915050565b60006125ba8261010660010154612fc0565b90506125c581613114565b6125f2336125d9848463ffffffff612fd816565b60fd546001600160a01b0316919063ffffffff612ed216565b505b50505050505050565b612605612a94565b6097546001600160a01b03908116911614612655576040805162461bcd60e51b81526020600482018190526024820152600080516020613d13833981519152604482015290519081900360640190fd5b6126608383836133e3565b505050565b61266d6118fd565b6001600160a01b0316336001600160a01b031614806126975750610104546001600160a01b031633145b806126ad5750610105546001600160a01b031633145b6126ec576040805162461bcd60e51b81526020600482015260106024820152600080516020613caa833981519152604482015290519081900360640190fd5b60ff546040805163e9f7e17b60e01b81526004810184905290516001600160a01b039092169163e9f7e17b9160248082019260009290919082900301818387803b158015610e9f57600080fd5b60fb544290612751906224ea0063ffffffff6129ec16565b116118725760405162461bcd60e51b8152600401808060200182810382526029815260200180613bf16029913960400191505060405180910390fd5b612795612a94565b6097546001600160a01b039081169116146127e5576040805162461bcd60e51b81526020600482018190526024820152600080516020613d13833981519152604482015290519081900360640190fd5b6001600160a01b03811661282a5760405162461bcd60e51b8152600401808060200182810382526026815260200180613c3c6026913960400191505060405180910390fd5b6097546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3609780546001600160a01b0319166001600160a01b0392909216919091179055565b60fc5481565b600054610100900460ff16806128a557506128a5613518565b806128b3575060005460ff16155b6128ee5760405162461bcd60e51b815260040180806020018281038252602e815260200180613d33602e913960400191505060405180910390fd5b600054610100900460ff16158015612919576000805460ff1961ff0019909116610100171660011790555b61292161351e565b6129296135bf565b612986604051806040016040528060058152602001640f0929c86960db1b8152508a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506136b892505050565b60fd80546001600160a01b03808a166001600160a01b031992831617909255610100805489841690831617905560fe8054928816929091169190911790556129cf8484846133e3565b80156129e1576000805461ff00191690555b505050505050505050565b600082820183811015612309576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b61010054604080516305c2fbcf60e31b81526004810184905290516001600160a01b0390921691632e17de789160248082019260009290919082900301818387803b158015610e9f57600080fd5b3390565b6001600160a01b038316612add5760405162461bcd60e51b8152600401808060200182810382526024815260200180613da76024913960400191505060405180910390fd5b6001600160a01b038216612b225760405162461bcd60e51b8152600401808060200182810382526022815260200180613c626022913960400191505060405180910390fd5b6001600160a01b03808416600081815260666020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316612bc95760405162461bcd60e51b8152600401808060200182810382526025815260200180613d826025913960400191505060405180910390fd5b6001600160a01b038216612c0e5760405162461bcd60e51b8152600401808060200182810382526023815260200180613bce6023913960400191505060405180910390fd5b612c19838383612660565b612c5c81604051806060016040528060268152602001613c84602691396001600160a01b038616600090815260656020526040902054919063ffffffff612ced16565b6001600160a01b038085166000908152606560205260408082209390935590841681522054612c91908263ffffffff6129ec16565b6001600160a01b0380841660008181526065602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b60008184841115612d7c5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612d41578181015183820152602001612d29565b50505050905090810190601f168015612d6e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b4260fb55565b6000612d94612310565b905061010260009054906101000a90046001600160a01b03166001600160a01b0316633d18b9126040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612de757600080fd5b505af1158015612dfb573d6000803e3d6000fd5b505050506000612e09612310565b90506000612e29612e20838563ffffffff612fd816565b61010854612fc0565b905061266081613114565b60c95460ff1615612e7f576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60c9805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612eb5612a94565b604080516001600160a01b039092168252519081900360200190a1565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612660908490613790565b6000612f2e611766565b90506000612f3a612310565b90506000612f5360146122fd858563ffffffff6129ec16565b905080821115612f7a57612f75612f70838363ffffffff612fd816565b613948565b612f92565b612f92612f8d828463ffffffff612fd816565b612a46565b6040517ff57243a1fddfdc9fa2c7de26cc3503b1b94cfd4368d2b82d0970bfbb2fbce3a490600090a1505050565b60008115610dc557612309838363ffffffff61329916565b600061230983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ced565b600061302d82613028610eba565b6122c3565b9050611f533382613996565b60c95460ff16613087576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b60c9805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612eb5612a94565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611bac908590613790565b60fc54613127908263ffffffff6129ec16565b60fc5550565b8015806131b3575060408051636eb1769f60e11b81523060048201526001600160a01b03848116602483015291519185169163dd62ed3e91604480820192602092909190829003018186803b15801561318557600080fd5b505afa158015613199573d6000803e3d6000fd5b505050506040513d60208110156131af57600080fd5b5051155b6131ee5760405162461bcd60e51b8152600401808060200182810382526036815260200180613df56036913960400191505060405180910390fd5b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052612660908490613790565b60008261324f57506000610dc5565b8282028284828161325c57fe5b04146123095760405162461bcd60e51b8152600401808060200182810382526021815260200180613cca6021913960400191505060405180910390fd5b600061230983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a94565b6001600160a01b0382166133205760405162461bcd60e51b8152600401808060200182810382526021815260200180613d616021913960400191505060405180910390fd5b61332c82600083612660565b61336f81604051806060016040528060228152602001613c1a602291396001600160a01b038516600090815260656020526040902054919063ffffffff612ced16565b6001600160a01b03831660009081526065602052604090205560675461339b908263ffffffff612fd816565b6067556040805182815290516000916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9181900360200190a35050565b8215806133f1575060328310155b613430576040805162461bcd60e51b815260206004820152600b60248201526a496e76616c69642066656560a81b604482015290519081900360640190fd5b81158061343e575060648210155b61347d576040805162461bcd60e51b815260206004820152600b60248201526a496e76616c69642066656560a81b604482015290519081900360640190fd5b60198110156134c1576040805162461bcd60e51b815260206004820152600b60248201526a496e76616c69642066656560a81b604482015290519081900360640190fd5b610106839055610107829055610108819055604080518481526020810184905280820183905290517f985786ed84548f26eae234688f08682cdd04f5b552190a894b31307afd72c46a9181900360600190a1505050565b303b1590565b600054610100900460ff16806135375750613537613518565b80613545575060005460ff16155b6135805760405162461bcd60e51b815260040180806020018281038252602e815260200180613d33602e913960400191505060405180910390fd5b600054610100900460ff161580156135ab576000805460ff1961ff0019909116610100171660011790555b8015610d13576000805461ff001916905550565b600054610100900460ff16806135d857506135d8613518565b806135e6575060005460ff16155b6136215760405162461bcd60e51b815260040180806020018281038252602e815260200180613d33602e913960400191505060405180910390fd5b600054610100900460ff1615801561364c576000805460ff1961ff0019909116610100171660011790555b6000613656612a94565b609780546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610d13576000805461ff001916905550565b600054610100900460ff16806136d157506136d1613518565b806136df575060005460ff16155b61371a5760405162461bcd60e51b815260040180806020018281038252602e815260200180613d33602e913960400191505060405180910390fd5b600054610100900460ff16158015613745576000805460ff1961ff0019909116610100171660011790555b8251613758906068906020860190613b35565b50815161376c906069906020850190613b35565b50606a805460ff191660121790558015612660576000805461ff0019169055505050565b6137a2826001600160a01b0316613af9565b6137f3576040805162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e747261637400604482015290519081900360640190fd5b60006060836001600160a01b0316836040518082805190602001908083835b602083106138315780518252601f199092019160209182019101613812565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613893576040519150601f19603f3d011682016040523d82523d6000602084013e613898565b606091505b5091509150816138ef576040805162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564604482015290519081900360640190fd5b805115611bac5780806020019051602081101561390b57600080fd5b5051611bac5760405162461bcd60e51b815260040180806020018281038252602a815260200180613dcb602a913960400191505060405180910390fd5b610100546040805163534a7e1d60e11b81526004810184905290516001600160a01b039092169163a694fc3a9160248082019260009290919082900301818387803b158015610e9f57600080fd5b6001600160a01b0382166139f1576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6139fd60008383612660565b606754613a10908263ffffffff6129ec16565b6067556001600160a01b038216600090815260656020526040902054613a3c908263ffffffff6129ec16565b6001600160a01b03831660008181526065602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183613ae35760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612d41578181015183820152602001612d29565b506000838581613aef57fe5b0495945050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590613b2d57508115155b949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613b7657805160ff1916838001178555613ba3565b82800160010185558215613ba3579182015b82811115613ba3578251825591602001919060010190613b88565b50613baf929150613bb3565b5090565b610daa91905b80821115613baf5760008155600101613bb956fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734c69717569646174696f6e2074696d6520656c61707365643b206e6f206d6f7265207374616b696e6745524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63654e6f6e2d61646d696e2063616c6c657200000000000000000000000000000000536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e2066726f6d20746865207a65726f206164647265737345524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212202d116da9a3d141ac63eaa0f49642984f0eb853c11f66fa99579d8390e1dea15564736f6c63430006020033
Deployed Bytecode Sourcemap
36607:14887:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51437:10;51451:9;51437:23;;51429:54;;;;;-1:-1:-1;;;51429:54:0;;;;;;;;;;;;-1:-1:-1;;;51429:54:0;;;;;;;;;;;;;;;36607:14887;;;;;43773:244;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43773:244:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;43773:244:0;;:::i;20859:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20859:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;20859:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22965:169;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22965:169:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22965:169:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;47027:133;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47027:133:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47027:133:0;;:::i;21934:100::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21934:100:0;;;:::i;:::-;;;;;;;;;;;;;;;;23608:321;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23608:321:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;23608:321:0;;;;;;;;;;;;;;;;;:::i;46602:139::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46602:139:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46602:139:0;;:::i;44025:98::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44025:98:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;44025:98:0;;:::i;21786:83::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21786:83:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;42163:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42163:116:0;;;:::i;24338:218::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24338:218:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;24338:218:0;;;;;;;;:::i;46026:186::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46026:186:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46026:186:0;-1:-1:-1;;;;;46026:186:0;;:::i;42665:106::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42665:106:0;;;:::i;49408:115::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49408:115:0;;;:::i;50735:409::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50735:409:0;;;:::i;50424:230::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50424:230:0;;;:::i;33593:78::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33593:78:0;;;:::i;46412:182::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46412:182:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46412:182:0;-1:-1:-1;;;;;46412:182:0;;:::i;37722:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37722:30:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;47502:163;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47502:163:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;47502:163:0;;;;;;;;:::i;42860:69::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42860:69:0;;;:::i;22097:119::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22097:119:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22097:119:0;-1:-1:-1;;;;;22097:119:0;;:::i;31688:148::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31688:148:0;;;:::i;42287:146::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42287:146:0;;;:::i;44341:129::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44341:129:0;;;:::i;50058:98::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50058:98:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50058:98:0;-1:-1:-1;;;;;50058:98:0;;:::i;31046:79::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31046:79:0;;;:::i;:::-;;;;-1:-1:-1;;;;;31046:79:0;;;;;;;;;;;;;;37039:35;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37039:35:0;;;:::i;21061:87::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21061:87:0;;;:::i;47168:129::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47168:129:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47168:129:0;;:::i;38731:550::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;38731:550:0;;:::i;47673:179::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47673:179:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;47673:179:0;;;;;;;;:::i;25059:269::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25059:269:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;25059:269:0;;;;;;;;:::i;47305:189::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47305:189:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;47305:189:0;;;;;;;:::i;22429:175::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22429:175:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22429:175:0;;;;;;;;:::i;49531:119::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49531:119:0;;;:::i;39397:392::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;39397:392:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;39397:392:0;;:::i;50164:129::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;50164:129:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;50164:129:0;-1:-1:-1;;;;;50164:129:0;;:::i;47860:179::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;47860:179:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;47860:179:0;;;;;;;;:::i;49956:94::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;49956:94:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;49956:94:0;-1:-1:-1;;;;;49956:94:0;;:::i;46220:184::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46220:184:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46220:184:0;-1:-1:-1;;;;;46220:184:0;;:::i;46749:123::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46749:123:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46749:123:0;;:::i;41519:331::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;41519:331:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;41519:331:0;;;;;;;:::i;42441:145::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;42441:145:0;;;:::i;22667:151::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22667:151:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;22667:151:0;;;;;;;;;;:::i;40311:1200::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;40311:1200:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40311:1200:0;;;;;;;;;;;;;;:::i;48562:231::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48562:231:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;48562:231:0;;;;;;;;;;;;:::i;46880:139::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;46880:139:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;46880:139:0;;:::i;44591:261::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44591:261:0;;;:::i;31991:244::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31991:244:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;31991:244:0;-1:-1:-1;;;;;31991:244:0;;:::i;37081:38::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37081:38:0;;;:::i;37923:689::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;37923:689:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;37923:689:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;37923:689:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;37923:689:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;37923:689:0;;-1:-1:-1;37923:689:0;-1:-1:-1;;;;;;37923:689:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;43773:244::-;43858:20;;43910:15;;43858:49;;36845:7;43858:49;:24;:49;:::i;:::-;:67;43836:145;;;;;-1:-1:-1;;;43836:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;43992:17;44001:7;43992:8;:17::i;:::-;43773:244;:::o;20859:83::-;20929:5;20922:12;;;;;;;;-1:-1:-1;;20922:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20896:13;;20922:12;;20929:5;;20922:12;;20929:5;20922:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20859:83;;:::o;22965:169::-;23048:4;23065:39;23074:12;:10;:12::i;:::-;23088:7;23097:6;23065:8;:39::i;:::-;-1:-1:-1;23122:4:0;22965:169;;;;;:::o;47027:133::-;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;;47109:17:::1;::::0;:43:::1;::::0;;-1:-1:-1;;;47109:43:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;47109:17:0;;::::1;::::0;:37:::1;::::0;:43;;;;;:17:::1;::::0;:43;;;;;;;;:17;;:43;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;47109:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;47109:43:0;;;;47027:133:::0;:::o;21934:100::-;22014:12;;21934:100;:::o;23608:321::-;23714:4;23731:36;23741:6;23749:9;23760:6;23731:9;:36::i;:::-;23778:121;23787:6;23795:12;:10;:12::i;:::-;23809:89;23847:6;23809:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23809:19:0;;;;;;:11;:19;;;;;;23829:12;:10;:12::i;:::-;-1:-1:-1;;;;;23809:33:0;;;;;;;;;;;;-1:-1:-1;23809:33:0;;;:89;;:37;:89;:::i;:::-;23778:8;:121::i;:::-;-1:-1:-1;23917:4:0;23608:321;;;;;:::o;46602:139::-;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;;46687:17:::1;::::0;:46:::1;::::0;;-1:-1:-1;;;46687:46:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;46687:17:0;;::::1;::::0;:40:::1;::::0;:46;;;;;:17:::1;::::0;:46;;;;;;;;:17;;:46;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;44025:98:0::0;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;21786:83;21852:9;;;;21786:83;:::o;42163:116::-;42202:7;42229:42;42252:18;:16;:18::i;:::-;42229;:16;:18::i;:::-;:22;:42;:22;:42;:::i;:::-;42222:49;;42163:116;:::o;24338:218::-;24426:4;24443:83;24452:12;:10;:12::i;:::-;24466:7;24475:50;24514:10;24475:11;:25;24487:12;:10;:12::i;:::-;-1:-1:-1;;;;;24475:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;24475:25:0;;;:34;;;;;;;;;;;:50;:38;:50;:::i;46026:186::-;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;;46166:17:::1;:38:::0;;-1:-1:-1;;;;;;46166:38:0::1;-1:-1:-1::0;;;;;46166:38:0;;;::::1;::::0;;;::::1;::::0;;46026:186::o;42665:106::-;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;;42725:15:::1;:13;:15::i;:::-;42751:12;:10;:12::i;:::-;42665:106::o:0;49408:115::-;49468:4;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;;49485:8:::1;:6;:8::i;:::-;-1:-1:-1::0;49511:4:0::1;49408:115:::0;:::o;50735:409::-;31268:12;:10;:12::i;:::-;31258:6;;-1:-1:-1;;;;;31258:6:0;;;:22;;;31250:67;;;;;-1:-1:-1;;;31250:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31250:67:0;;;;;;;;;;;;;;;50855:33:::1;::::0;50804:21:::1;::::0;50787:14:::1;::::0;50855:10:::1;::::0;50804:21;;50787:14;50855:33;50787:14;50855:33;50804:21;50855:10;:33:::1;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;50836:52:0;;;50907:7;50899:35;;;::::0;;-1:-1:-1;;;50899:35:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;50899:35:0;;;;;;;;;;;;;::::1;;50969:23;::::0;;50947:19:::1;51003:27:::0;;;51041:7:::1;::::0;:45:::1;::::0;-1:-1:-1;;;;;51041:7:0::1;51062:10;50969:23:::0;51041:45:::1;:20;:45;:::i;:::-;51104:32;::::0;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;::::1;31328:1;;;50735:409::o:0;50424:230::-;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;;50492:16:::1;50511:24;50529:4;50511:9;:24::i;:::-;50492:43:::0;-1:-1:-1;50550:12:0;;50546:101:::1;;50579:56;50594:4;50614:10;50626:8:::0;50579:56:::1;:34;:56;:::i;33593:78::-:0;33656:7;;;;33593:78;:::o;46412:182::-;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;;46546:18:::1;:40:::0;;-1:-1:-1;;;;;;46546:40:0::1;-1:-1:-1::0;;;;;46546:40:0;;;::::1;::::0;;;::::1;::::0;;46412:182::o;37722:30::-;;;;;;;;:::o;47502:163::-;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;;47638:4:::1;-1:-1:-1::0;;;;;47613:38:0::1;;47652:4;47613:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;5:2;47613:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;47613:44:0;;;;47502:163:::0;;:::o;22097:119::-;-1:-1:-1;;;;;22190:18:0;22163:7;22190:18;;;:9;:18;;;;;;;22097:119::o;31688:148::-;31268:12;:10;:12::i;:::-;31258:6;;-1:-1:-1;;;;;31258:6:0;;;:22;;;31250:67;;;;;-1:-1:-1;;;31250:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31250:67:0;;;;;;;;;;;;;;;31779:6:::1;::::0;31758:40:::1;::::0;31795:1:::1;::::0;-1:-1:-1;;;;;31779:6:0::1;::::0;31758:40:::1;::::0;31795:1;;31758:40:::1;31809:6;:19:::0;;-1:-1:-1;;;;;;31809:19:0::1;::::0;;31688:148::o;42287:146::-;42378:20;;42363:62;;;-1:-1:-1;;;42363:62:0;;42419:4;42363:62;;;;;;42336:7;;-1:-1:-1;;;;;42378:20:0;;42363:47;;:62;;;;;;;;;;;;;;42378:20;42363:62;;;5:2:-1;;;;30:1;27;20:12;5:2;42363:62:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42363:62:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42363:62:0;;-1:-1:-1;42287:146:0;:::o;44341:129::-;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;;44401:15:::1;:13;:15::i;:::-;44427:12;:10;:12::i;:::-;44450;:10;:12::i;50058:98::-:0;31268:12;:10;:12::i;:::-;31258:6;;-1:-1:-1;;;;;31258:6:0;;;:22;;;31250:67;;;;;-1:-1:-1;;;31250:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31250:67:0;;;;;;;;;;;;;;;50128:8:::1;:20:::0;;-1:-1:-1;;;;;;50128:20:0::1;-1:-1:-1::0;;;;;50128:20:0;;;::::1;::::0;;;::::1;::::0;;50058:98::o;31046:79::-;31111:6;;-1:-1:-1;;;;;31111:6:0;31046:79;:::o;37039:35::-;;;;:::o;21061:87::-;21133:7;21126:14;;;;;;;;-1:-1:-1;;21126:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21100:13;;21126:14;;21133:7;;21126:14;;21133:7;21126:14;;;;;;;;;;;;;;;;;;;;;;;;47168:129;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;;47248:17:::1;::::0;:41:::1;::::0;;-1:-1:-1;;;47248:41:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;47248:17:0;;::::1;::::0;:35:::1;::::0;:41;;;;;:17:::1;::::0;:41;;;;;;;;:17;;:41;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;38731:550:0::0;33830:7;;;;33829:8;33821:37;;;;;-1:-1:-1;;;33821:37:0;;;;;;;;;;;;-1:-1:-1;;;33821:37:0;;;;;;;;;;;;;;;38826:1:::1;38814:9;:13;38806:39;;;::::0;;-1:-1:-1;;;38806:39:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;38806:39:0;;;;;;;;;;;;;::::1;;38858:11;38872:45;38886:9;38897:11;:19;;;38872:13;:45::i;:::-;38858:59:::0;-1:-1:-1;38928:16:0::1;38947:18;:9;38858:59:::0;38947:18:::1;:13;:18;:::i;:::-;39018:24;::::0;39120:7:::1;::::0;39018:209:::1;::::0;;-1:-1:-1;;;39018:209:0;;38976:26:::1;39018:209;::::0;::::1;::::0;;;-1:-1:-1;;;;;39120:7:0;;::::1;39018:209:::0;;;;;;;;;;;;;;;;;;;;;;;;38928:37;;-1:-1:-1;38976:26:0;;39018:24;;;::::1;::::0;:29:::1;::::0;38928:37;;39018:209;;;;;::::1;::::0;;;;;;;;;38928:37;39018:24;:209;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;5:2;39018:209:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;39018:209:0;;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26::::0;19:12:::1;2:2;-1:-1:::0;39018:209:0;;-1:-1:-1;39240:33:0::1;39018:209:::0;39240:13:::1;:33::i;:::-;33869:1;;;38731:550:::0;:::o;47673:179::-;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;;47817:4:::1;-1:-1:-1::0;;;;;47792:46:0::1;;47839:4;47792:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;25059:269:0::0;25152:4;25169:129;25178:12;:10;:12::i;:::-;25192:7;25201:96;25240:15;25201:96;;;;;;;;;;;;;;;;;:11;:25;25213:12;:10;:12::i;:::-;-1:-1:-1;;;;;25201:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;25201:25:0;;;:34;;;;;;;;;;;:96;;:38;:96;:::i;47305:189::-;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;;47430:18:::1;::::0;:56:::1;::::0;;-1:-1:-1;;;47430:56:0;;::::1;::::0;::::1;::::0;;;;;;;;;;;-1:-1:-1;;;;;47430:18:0;;::::1;::::0;:36:::1;::::0;:56;;;;;:18:::1;::::0;:56;;;;;;;;:18;;:56;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;22429:175:0::0;22515:4;22532:42;22542:12;:10;:12::i;:::-;22556:9;22567:6;22532:9;:42::i;49531:119::-;49593:4;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;;49610:10:::1;:8;:10::i;39397:392::-:0;33830:7;;;;33829:8;33821:37;;;;;-1:-1:-1;;;33821:37:0;;;;;;;;;;;;-1:-1:-1;;;33821:37:0;;;;;;;;;;;;;;;39501:1:::1;39485:13;:17;39477:45;;;::::0;;-1:-1:-1;;;39477:45:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;39477:45:0;;;;;;;;;;;;;::::1;;39533:7;::::0;:66:::1;::::0;-1:-1:-1;;;;;39533:7:0::1;39558:10;39578:4;39585:13:::0;39533:66:::1;:24;:66;:::i;:::-;39612:11;39626:49;39640:13;39655:11;:19;;;39626:13;:49::i;:::-;39612:63;;39686:38;39720:3;39686:33;:38::i;:::-;39744:37;39758:22;:13:::0;39776:3;39758:22:::1;:17;:22;:::i;:::-;39744:13;:37::i;:::-;39737:44;39397:392:::0;:::o;50164:129::-;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;;50244:7:::1;::::0;:41:::1;::::0;-1:-1:-1;;;;;50244:7:0::1;50264:10:::0;-1:-1:-1;;50244:41:0::1;:19;:41;:::i;47860:179::-:0;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;;48004:4:::1;-1:-1:-1::0;;;;;47979:46:0::1;;48026:4;47979:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27::::0;20:12:::1;49956:94:0::0;31268:12;:10;:12::i;:::-;31258:6;;-1:-1:-1;;;;;31258:6:0;;;:22;;;31250:67;;;;;-1:-1:-1;;;31250:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31250:67:0;;;;;;;;;;;;;;;50024:7:::1;:18:::0;;-1:-1:-1;;;;;;50024:18:0::1;-1:-1:-1::0;;;;;50024:18:0;;;::::1;::::0;;;::::1;::::0;;49956:94::o;46220:184::-;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;;46358:17:::1;:38:::0;;-1:-1:-1;;;;;;46358:38:0::1;-1:-1:-1::0;;;;;46358:38:0;;;::::1;::::0;;;::::1;::::0;;46220:184::o;46749:123::-;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;;46826:17:::1;::::0;:38:::1;::::0;;-1:-1:-1;;;46826:38:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;46826:17:0;;::::1;::::0;:32:::1;::::0;:38;;;;;:17:::1;::::0;:38;;;;;;;;:17;;:38;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;41519:331:0::0;41643:18;41678:16;41674:91;;41716:49;:18;36912:2;41716:49;:22;:49;:::i;:::-;41709:56;;;;41674:91;41791:51;41833:8;:6;:8::i;:::-;41791:37;41792:18;41816:11;41791:37;:24;:37;:::i;:::-;:41;:51;:41;:51;:::i;:::-;41778:64;41519:331;-1:-1:-1;;;41519:331:0:o;42441:145::-;42554:23;;42517:7;;:32;;;-1:-1:-1;;;42517:32:0;;42543:4;42517:32;;;;;;42490:7;;42517:61;;42554:23;;-1:-1:-1;;;;;42517:7:0;;;;:17;;:32;;;;;;;;;;;;;;;:7;:32;;;5:2:-1;;;;30:1;27;20:12;5:2;42517:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;42517:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;42517:32:0;;:61;:36;:61;:::i;22667:151::-;-1:-1:-1;;;;;22783:18:0;;;22756:7;22783:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22667:151::o;40311:1200::-;40460:1;40446:11;:15;40438:43;;;;;-1:-1:-1;;;40438:43:0;;;;;;;;;;;;-1:-1:-1;;;40438:43:0;;;;;;;;;;;;;;;40494:21;40518:18;:16;:18::i;:::-;40494:42;;40547:21;40571:18;:16;:18::i;:::-;40547:42;-1:-1:-1;40600:20:0;40623:32;:13;40547:42;40623:32;:17;:32;:::i;:::-;40600:55;;40666:19;40688:48;40722:13;:11;:13::i;:::-;40688:29;:12;40705:11;40688:29;:16;:29;:::i;:48::-;40666:70;;40772:13;40757:11;:28;;40749:68;;;;;-1:-1:-1;;;40749:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;40828:36;40840:10;40852:11;40828;:36::i;:::-;40881:12;40877:627;;;40910:11;40924:47;40938:11;40951;:19;;;40924:13;:47::i;:::-;40910:61;;40986:38;41020:3;40986:33;:38::i;:::-;41039:24;;41098:7;;-1:-1:-1;;;;;41039:24:0;;;;:32;;41098:7;41039:24;41155:20;:11;41171:3;41155:20;:15;:20;:::i;:::-;41039:237;;;-1:-1:-1;;;;;;41039:237:0;;;;;;;-1:-1:-1;;;;;41039:237:0;;;;;;;;;;;;;;;;;;;;;;;;;41230:1;41039:237;;;;;;41251:10;41039:237;;;;;;;;;;;;;;;;;;;;;;;;;;5:2:-1;;;;30:1;27;20:12;5:2;41039:237:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;41039:237:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;40877:627:0;;-1:-1:-1;;40877:627:0;;41309:11;41323:47;41337:11;41350;:19;;;41323:13;:47::i;:::-;41309:61;;41385:38;41419:3;41385:33;:38::i;:::-;41438:54;41459:10;41471:20;:11;41487:3;41471:20;:15;:20;:::i;:::-;41438:7;;-1:-1:-1;;;;;41438:7:0;;:54;;:20;:54;:::i;:::-;40877:627;;40311:1200;;;;;;;:::o;48562:231::-;31268:12;:10;:12::i;:::-;31258:6;;-1:-1:-1;;;;;31258:6:0;;;:22;;;31250:67;;;;;-1:-1:-1;;;31250:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31250:67:0;;;;;;;;;;;;;;;48721:64:::1;48737:14;48753;48769:15;48721;:64::i;:::-;48562:231:::0;;;:::o;46880:139::-;51227:7;:5;:7::i;:::-;-1:-1:-1;;;;;51213:21:0;:10;-1:-1:-1;;;;;51213:21:0;;:63;;;-1:-1:-1;51269:7:0;;-1:-1:-1;;;;;51269:7:0;51255:10;:21;51213:63;:106;;;-1:-1:-1;51311:8:0;;-1:-1:-1;;;;;51311:8:0;51297:10;:22;51213:106;51191:172;;;;;-1:-1:-1;;;51191:172:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;51191:172:0;;;;;;;;;;;;;;;46965:17:::1;::::0;:46:::1;::::0;;-1:-1:-1;;;46965:46:0;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;46965:17:0;;::::1;::::0;:40:::1;::::0;:46;;;;;:17:::1;::::0;:46;;;;;;;;:17;;:46;::::1;;5:2:-1::0;::::1;;;30:1;27::::0;20:12:::1;44591:261:0::0;44662:20;;44714:15;;44662:49;;36845:7;44662:49;:24;:49;:::i;:::-;:67;44640:158;;;;-1:-1:-1;;;44640:158:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31991:244;31268:12;:10;:12::i;:::-;31258:6;;-1:-1:-1;;;;;31258:6:0;;;:22;;;31250:67;;;;;-1:-1:-1;;;31250:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;31250:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32080:22:0;::::1;32072:73;;;;-1:-1:-1::0;;;32072:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32182:6;::::0;32161:38:::1;::::0;-1:-1:-1;;;;;32161:38:0;;::::1;::::0;32182:6:::1;::::0;32161:38:::1;::::0;32182:6:::1;::::0;32161:38:::1;32210:6;:17:::0;;-1:-1:-1;;;;;;32210:17:0::1;-1:-1:-1::0;;;;;32210:17:0;;;::::1;::::0;;;::::1;::::0;;31991:244::o;37081:38::-;;;;:::o;37923:689::-;15966:12;;;;;;;;:31;;;15982:15;:13;:15::i;:::-;15966:47;;;-1:-1:-1;16002:11:0;;;;16001:12;15966:47;15958:106;;;;-1:-1:-1;;;15958:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16073:19;16096:12;;;;;;16095:13;16115:83;;;;16144:12;:19;;-1:-1:-1;;;;16144:19:0;;;;;16172:18;16159:4;16172:18;;;16115:83;38261:26:::1;:24;:26::i;:::-;38298;:24;:26::i;:::-;38335:40;;;;;;;;;;;;;;-1:-1:-1::0;;;38335:40:0::1;;::::0;38367:7:::1;;38335:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;38335:22:0::1;::::0;-1:-1:-1;;;38335:40:0:i:1;:::-;38388:7;:18:::0;;-1:-1:-1;;;;;38388:18:0;;::::1;-1:-1:-1::0;;;;;;38388:18:0;;::::1;;::::0;;;::::1;38417:44:::0;;;;::::1;::::0;;::::1;;::::0;;38472:24:::1;:52:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;38537:67:::1;38553:15:::0;38570;38587:16;38537:15:::1;:67::i;:::-;16220:14:::0;16216:57;;;16260:5;16245:20;;-1:-1:-1;;16245:20:0;;;16216:57;37923:689;;;;;;;;;:::o;3766:181::-;3824:7;3856:5;;;3880:6;;;;3872:46;;;;;-1:-1:-1;;;3872:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;44131:99;44185:20;;:37;;;-1:-1:-1;;;44185:37:0;;;;;;;;;;-1:-1:-1;;;;;44185:20:0;;;;:28;;:37;;;;;:20;;:37;;;;;;;;:20;;:37;;;5:2:-1;;;;30:1;27;20:12;17997:106:0;18085:10;17997:106;:::o;28206:346::-;-1:-1:-1;;;;;28308:19:0;;28300:68;;;;-1:-1:-1;;;28300:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28387:21:0;;28379:68;;;;-1:-1:-1;;;28379:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28460:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28512:32;;;;;;;;;;;;;;;;;28206:346;;;:::o;25818:539::-;-1:-1:-1;;;;;25924:20:0;;25916:70;;;;-1:-1:-1;;;25916:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26005:23:0;;25997:71;;;;-1:-1:-1;;;25997:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26081:47;26102:6;26110:9;26121:6;26081:20;:47::i;:::-;26161:71;26183:6;26161:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26161:17:0;;;;;;:9;:17;;;;;;;:71;;:21;:71;:::i;:::-;-1:-1:-1;;;;;26141:17:0;;;;;;;:9;:17;;;;;;:91;;;;26266:20;;;;;;;:32;;26291:6;26266:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;26243:20:0;;;;;;;:9;:20;;;;;;;;;:55;;;;26314:35;;;;;;;26243:20;;26314:35;;;;;;;;;;;;;25818:539;;;:::o;4653:192::-;4739:7;4775:12;4767:6;;;;4759:29;;;;-1:-1:-1;;;4759:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4759:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4811:5:0;;;4653:192::o;49858:90::-;49925:15;49902:20;:38;49858:90::o;42937:413::-;42978:27;43008:18;:16;:18::i;:::-;42978:48;;43037:17;;;;;;;;;-1:-1:-1;;;;;43037:17:0;-1:-1:-1;;;;;43037:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;43037:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;43037:29:0;;;;43079:26;43108:18;:16;:18::i;:::-;43079:47;-1:-1:-1;43137:11:0;43164:129;43196:43;43079:47;43219:19;43196:43;:22;:43;:::i;:::-;43258:20;;43164:13;:129::i;:::-;43137:156;;43304:38;43338:3;43304:33;:38::i;34144:118::-;33830:7;;;;33829:8;33821:37;;;;;-1:-1:-1;;;33821:37:0;;;;;;;;;;;;-1:-1:-1;;;33821:37:0;;;;;;;;;;;;;;;34204:7:::1;:14:::0;;-1:-1:-1;;34204:14:0::1;34214:4;34204:14;::::0;;34234:20:::1;34241:12;:10;:12::i;:::-;34234:20;::::0;;-1:-1:-1;;;;;34234:20:0;;::::1;::::0;;;;;;;::::1;::::0;;::::1;34144:118::o:0;11664:177::-;11774:58;;;-1:-1:-1;;;;;11774:58:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11774:58:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;11747:86:0;;11767:5;;11747:19;:86::i;44860:459::-;44901:21;44925:18;:16;:18::i;:::-;44901:42;;44954:21;44978:18;:16;:18::i;:::-;44954:42;-1:-1:-1;45007:20:0;45043:53;36962:2;45044:32;:13;44954:42;45044:32;:17;:32;:::i;45043:53::-;45007:89;;45129:12;45113:13;:28;45109:174;;;45158:39;45165:31;:13;45183:12;45165:31;:17;:31;:::i;:::-;45158:6;:39::i;:::-;45109:174;;;45230:41;45239:31;:12;45256:13;45239:31;:16;:31;:::i;:::-;45230:8;:41::i;:::-;45300:11;;;;;;;44860:459;;;:::o;45327:223::-;45437:11;45470:15;;45466:77;;45508:23;:6;45519:11;45508:23;:10;:23;:::i;4222:136::-;4280:7;4307:43;4311:1;4314;4307:43;;;;;;;;;;;;;;;;;:3;:43::i;39797:223::-;39868:18;39902:55;39922:19;39943:13;:11;:13::i;:::-;39902:19;:55::i;:::-;39868:89;;39977:35;39989:10;40001;39977:11;:35::i;34326:120::-;34029:7;;;;34021:40;;;;;-1:-1:-1;;;34021:40:0;;;;;;;;;;;;-1:-1:-1;;;34021:40:0;;;;;;;;;;;;;;;34385:7:::1;:15:::0;;-1:-1:-1;;34385:15:0::1;::::0;;34416:22:::1;34425:12;:10;:12::i;11849:205::-:0;11977:68;;;-1:-1:-1;;;;;11977:68:0;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11977:68:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;11950:96:0;;11970:5;;11950:19;:96::i;45558:155::-;45666:23;;:39;;45694:10;45666:39;:27;:39;:::i;:::-;45640:23;:65;-1:-1:-1;45558:155:0:o;12062:622::-;12432:10;;;12431:62;;-1:-1:-1;12448:39:0;;;-1:-1:-1;;;12448:39:0;;12472:4;12448:39;;;;-1:-1:-1;;;;;12448:39:0;;;;;;;;;:15;;;;;;:39;;;;;;;;;;;;;;;:15;:39;;;5:2:-1;;;;30:1;27;20:12;5:2;12448:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12448:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12448:39:0;:44;12431:62;12423:152;;;;-1:-1:-1;;;12423:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12613:62;;;-1:-1:-1;;;;;12613:62:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12613:62:0;;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;12586:90:0;;12606:5;;12586:19;:90::i;5096:471::-;5154:7;5399:6;5395:47;;-1:-1:-1;5429:1:0;5422:8;;5395:47;5466:5;;;5470:1;5466;:5;:1;5490:5;;;;;:10;5482:56;;;;-1:-1:-1;;;5482:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6035:132;6093:7;6120:39;6124:1;6127;6120:39;;;;;;;;;;;;;;;;;:3;:39::i;27348:418::-;-1:-1:-1;;;;;27432:21:0;;27424:67;;;;-1:-1:-1;;;27424:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27504:49;27525:7;27542:1;27546:6;27504:20;:49::i;:::-;27587:68;27610:6;27587:68;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27587:18:0;;;;;;:9;:18;;;;;;;:68;;:22;:68;:::i;:::-;-1:-1:-1;;;;;27566:18:0;;;;;;:9;:18;;;;;:89;27681:12;;:24;;27698:6;27681:24;:16;:24;:::i;:::-;27666:12;:39;27721:37;;;;;;;;27747:1;;-1:-1:-1;;;;;27721:37:0;;;;;;;;;;;;27348:418;;:::o;48801:599::-;48963:20;;;:45;;;49006:2;48987:15;:21;;48963:45;48955:69;;;;;-1:-1:-1;;;48955:69:0;;;;;;;;;;;;-1:-1:-1;;;48955:69:0;;;;;;;;;;;;;;;49043:20;;;:46;;;49086:3;49067:15;:22;;49043:46;49035:70;;;;;-1:-1:-1;;;49035:70:0;;;;;;;;;;;;-1:-1:-1;;;49035:70:0;;;;;;;;;;;;;;;49144:2;49124:16;:22;;49116:46;;;;;-1:-1:-1;;;49116:46:0;;;;;;;;;;;;-1:-1:-1;;;49116:46:0;;;;;;;;;;;;;;;49173:11;:37;;;49221:19;:37;;;49269:20;:39;;;49326:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48801:599;;;:::o;16367:508::-;16784:4;16830:17;16862:7;16367:508;:::o;17918:69::-;15966:12;;;;;;;;:31;;;15982:15;:13;:15::i;:::-;15966:47;;;-1:-1:-1;16002:11:0;;;;16001:12;15966:47;15958:106;;;;-1:-1:-1;;;15958:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16073:19;16096:12;;;;;;16095:13;16115:83;;;;16144:12;:19;;-1:-1:-1;;;;16144:19:0;;;;;16172:18;16159:4;16172:18;;;16115:83;16220:14;16216:57;;;16260:5;16245:20;;-1:-1:-1;;16245:20:0;;;17918:69;:::o;30761:202::-;15966:12;;;;;;;;:31;;;15982:15;:13;:15::i;:::-;15966:47;;;-1:-1:-1;16002:11:0;;;;16001:12;15966:47;15958:106;;;;-1:-1:-1;;;15958:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16073:19;16096:12;;;;;;16095:13;16115:83;;;;16144:12;:19;;-1:-1:-1;;;;16144:19:0;;;;;16172:18;16159:4;16172:18;;;16115:83;30833:17:::1;30853:12;:10;:12::i;:::-;30876:6;:18:::0;;-1:-1:-1;;;;;;30876:18:0::1;-1:-1:-1::0;;;;;30876:18:0;::::1;::::0;;::::1;::::0;;;30910:43:::1;::::0;30876:18;;-1:-1:-1;30876:18:0;-1:-1:-1;;30910:43:0::1;::::0;-1:-1:-1;;30910:43:0::1;16206:1;16220:14:::0;16216:57;;;16260:5;16245:20;;-1:-1:-1;;16245:20:0;;;30761:202;:::o;20603:184::-;15966:12;;;;;;;;:31;;;15982:15;:13;:15::i;:::-;15966:47;;;-1:-1:-1;16002:11:0;;;;16001:12;15966:47;15958:106;;;;-1:-1:-1;;;15958:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16073:19;16096:12;;;;;;16095:13;16115:83;;;;16144:12;:19;;-1:-1:-1;;;;16144:19:0;;;;;16172:18;16159:4;16172:18;;;16115:83;20713:12;;::::1;::::0;:5:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;20736:16:0;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;20763:9:0::1;:14:::0;;-1:-1:-1;;20763:14:0::1;20775:2;20763:14;::::0;;16216:57;;;;16260:5;16245:20;;-1:-1:-1;;16245:20:0;;;20603:184;;;:::o;13708:1115::-;14313:27;14321:5;-1:-1:-1;;;;;14313:25:0;;:27::i;:::-;14305:71;;;;;-1:-1:-1;;;14305:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14450:12;14464:23;14499:5;-1:-1:-1;;;;;14491:19:0;14511:4;14491:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;14491:25:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;14449:67:0;;;;14535:7;14527:52;;;;;-1:-1:-1;;;14527:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14596:17;;:21;14592:224;;14738:10;14727:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14727:30:0;14719:85;;;;-1:-1:-1;;;14719:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43358:95;43410:20;;:35;;;-1:-1:-1;;;43410:35:0;;;;;;;;;;-1:-1:-1;;;;;43410:20:0;;;;:26;;:35;;;;;:20;;:35;;;;;;;;:20;;:35;;;5:2:-1;;;;30:1;27;20:12;26638:378:0;-1:-1:-1;;;;;26722:21:0;;26714:65;;;;;-1:-1:-1;;;26714:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26792:49;26821:1;26825:7;26834:6;26792:20;:49::i;:::-;26869:12;;:24;;26886:6;26869:24;:16;:24;:::i;:::-;26854:12;:39;-1:-1:-1;;;;;26925:18:0;;;;;;:9;:18;;;;;;:30;;26948:6;26925:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;26904:18:0;;;;;;:9;:18;;;;;;;;:51;;;;26971:37;;;;;;;26904:18;;;;26971:37;;;;;;;;;;26638:378;;:::o;6655:345::-;6741:7;6843:12;6836:5;6828:28;;;;-1:-1:-1;;;6828:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27:10:-1;;8:100;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;6828:28:0;;6867:9;6883:1;6879;:5;;;;;;;6655:345;-1:-1:-1;;;;;6655:345:0:o;9026:619::-;9086:4;9554:20;;9397:66;9594:23;;;;;;:42;;-1:-1:-1;9621:15:0;;;9594:42;9586:51;9026:619;-1:-1:-1;;;;9026:619:0:o;36607:14887::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;36607:14887:0;;;-1:-1:-1;36607:14887:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://2d116da9a3d141ac63eaa0f49642984f0eb853c11f66fa99579d8390e1dea155
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
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.