Polygon Sponsored slots available. Book your slot here!
ERC-20
Overview
Max Total Supply
937,784.44400664336121312 BALL
Holders
777
Market
Price
$0.00 @ 0.000000 MATIC
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.098574699365844302 BALLValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
BTOKEN
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2021-06-20 */ /** *Submitted for verification at polygonscan.com on 2021-06-19 */ // SPDX-License-Identifier: MIT pragma solidity 0.6.12; /* * @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. */ abstract contract Context { 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; } } /** * @dev Interface of the ERC777Token standard as defined in the EIP. * * This contract uses the * https://eips.ethereum.org/EIPS/eip-1820[ERC1820 registry standard] to let * token holders and recipients react to token movements by using setting implementers * for the associated interfaces in said registry. See {IERC1820Registry} and * {ERC1820Implementer}. */ interface IERC777 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() external view returns (string memory); /** * @dev Returns the smallest part of the token that is not divisible. This * means all token operations (creation, movement and destruction) must have * amounts that are a multiple of this number. * * For most token contracts, this value will equal 1. */ function granularity() external view returns (uint256); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by an account (`owner`). */ function balanceOf(address owner) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * If send or receive hooks are registered for the caller and `recipient`, * the corresponding functions will be called with `data` and empty * `operatorData`. See {IERC777Sender} and {IERC777Recipient}. * * Emits a {Sent} event. * * Requirements * * - the caller must have at least `amount` tokens. * - `recipient` cannot be the zero address. * - if `recipient` is a contract, it must implement the {IERC777Recipient} * interface. */ function send( address recipient, uint256 amount, bytes calldata data ) external; /** * @dev Destroys `amount` tokens from the caller's account, reducing the * total supply. * * If a send hook is registered for the caller, the corresponding function * will be called with `data` and empty `operatorData`. See {IERC777Sender}. * * Emits a {Burned} event. * * Requirements * * - the caller must have at least `amount` tokens. */ function burn(uint256 amount, bytes calldata data) external; /** * @dev Returns true if an account is an operator of `tokenHolder`. * Operators can send and burn tokens on behalf of their owners. All * accounts are their own operator. * * See {operatorSend} and {operatorBurn}. */ function isOperatorFor(address operator, address tokenHolder) external view returns (bool); /** * @dev Make an account an operator of the caller. * * See {isOperatorFor}. * * Emits an {AuthorizedOperator} event. * * Requirements * * - `operator` cannot be calling address. */ function authorizeOperator(address operator) external; /** * @dev Revoke an account's operator status for the caller. * * See {isOperatorFor} and {defaultOperators}. * * Emits a {RevokedOperator} event. * * Requirements * * - `operator` cannot be calling address. */ function revokeOperator(address operator) external; /** * @dev Returns the list of default operators. These accounts are operators * for all token holders, even if {authorizeOperator} was never called on * them. * * This list is immutable, but individual holders may revoke these via * {revokeOperator}, in which case {isOperatorFor} will return false. */ function defaultOperators() external view returns (address[] memory); /** * @dev Moves `amount` tokens from `sender` to `recipient`. The caller must * be an operator of `sender`. * * If send or receive hooks are registered for `sender` and `recipient`, * the corresponding functions will be called with `data` and * `operatorData`. See {IERC777Sender} and {IERC777Recipient}. * * Emits a {Sent} event. * * Requirements * * - `sender` cannot be the zero address. * - `sender` must have at least `amount` tokens. * - the caller must be an operator for `sender`. * - `recipient` cannot be the zero address. * - if `recipient` is a contract, it must implement the {IERC777Recipient} * interface. */ function operatorSend( address sender, address recipient, uint256 amount, bytes calldata data, bytes calldata operatorData ) external; /** * @dev Destroys `amount` tokens from `account`, reducing the total supply. * The caller must be an operator of `account`. * * If a send hook is registered for `account`, the corresponding function * will be called with `data` and `operatorData`. See {IERC777Sender}. * * Emits a {Burned} event. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. * - the caller must be an operator for `account`. */ function operatorBurn( address account, uint256 amount, bytes calldata data, bytes calldata operatorData ) external; event Sent(address indexed operator, address indexed from, address indexed to, uint256 amount, bytes data, bytes operatorData); event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData); event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData); event AuthorizedOperator(address indexed operator, address indexed tokenHolder); event RevokedOperator(address indexed operator, address indexed tokenHolder); } /** * @dev Interface of the ERC777TokensRecipient standard as defined in the EIP. * * Accounts can be notified of {IERC777} tokens being sent to them by having a * contract implement this interface (contract holders can be their own * implementer) and registering it on the * https://eips.ethereum.org/EIPS/eip-1820[ERC1820 global registry]. * * See {IERC1820Registry} and {ERC1820Implementer}. */ interface IERC777Recipient { /** * @dev Called by an {IERC777} token contract whenever tokens are being * moved or created into a registered account (`to`). The type of operation * is conveyed by `from` being the zero address or not. * * This call occurs _after_ the token contract's state is updated, so * {IERC777-balanceOf}, etc., can be used to query the post-operation state. * * This function may revert to prevent the operation from being executed. */ function tokensReceived( address operator, address from, address to, uint256 amount, bytes calldata userData, bytes calldata operatorData ) external; } /** * @dev Interface of the ERC777TokensSender standard as defined in the EIP. * * {IERC777} Token holders can be notified of operations performed on their * tokens by having a contract implement this interface (contract holders can be * their own implementer) and registering it on the * https://eips.ethereum.org/EIPS/eip-1820[ERC1820 global registry]. * * See {IERC1820Registry} and {ERC1820Implementer}. */ interface IERC777Sender { /** * @dev Called by an {IERC777} token contract whenever a registered holder's * (`from`) tokens are about to be moved or destroyed. The type of operation * is conveyed by `to` being the zero address or not. * * This call occurs _before_ the token contract's state is updated, so * {IERC777-balanceOf}, etc., can be used to query the pre-operation state. * * This function may revert to prevent the operation from being executed. */ function tokensToSend( address operator, address from, address to, uint256 amount, bytes calldata userData, bytes calldata operatorData ) external; } /** * @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); } /** * @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) { 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; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // 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"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue( address target, bytes memory data, uint256 weiValue, string memory errorMessage ) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{value: weiValue}(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Interface of the global ERC1820 Registry, as defined in the * https://eips.ethereum.org/EIPS/eip-1820[EIP]. Accounts may register * implementers for interfaces in this registry, as well as query support. * * Implementers may be shared by multiple accounts, and can also implement more * than a single interface for each account. Contracts can implement interfaces * for themselves, but externally-owned accounts (EOA) must delegate this to a * contract. * * {IERC165} interfaces can also be queried via the registry. * * For an in-depth explanation and source code analysis, see the EIP text. */ interface IERC1820Registry { /** * @dev Sets `newManager` as the manager for `account`. A manager of an * account is able to set interface implementers for it. * * By default, each account is its own manager. Passing a value of `0x0` in * `newManager` will reset the manager to this initial state. * * Emits a {ManagerChanged} event. * * Requirements: * * - the caller must be the current manager for `account`. */ function setManager(address account, address newManager) external; /** * @dev Returns the manager for `account`. * * See {setManager}. */ function getManager(address account) external view returns (address); /** * @dev Sets the `implementer` contract as ``account``'s implementer for * `interfaceHash`. * * `account` being the zero address is an alias for the caller's address. * The zero address can also be used in `implementer` to remove an old one. * * See {interfaceHash} to learn how these are created. * * Emits an {InterfaceImplementerSet} event. * * Requirements: * * - the caller must be the current manager for `account`. * - `interfaceHash` must not be an {IERC165} interface id (i.e. it must not * end in 28 zeroes). * - `implementer` must implement {IERC1820Implementer} and return true when * queried for support, unless `implementer` is the caller. See * {IERC1820Implementer-canImplementInterfaceForAddress}. */ function setInterfaceImplementer( address account, bytes32 interfaceHash, address implementer ) external; /** * @dev Returns the implementer of `interfaceHash` for `account`. If no such * implementer is registered, returns the zero address. * * If `interfaceHash` is an {IERC165} interface id (i.e. it ends with 28 * zeroes), `account` will be queried for support of it. * * `account` being the zero address is an alias for the caller's address. */ function getInterfaceImplementer(address account, bytes32 interfaceHash) external view returns (address); /** * @dev Returns the interface hash for an `interfaceName`, as defined in the * corresponding * https://eips.ethereum.org/EIPS/eip-1820#interface-name[section of the EIP]. */ function interfaceHash(string calldata interfaceName) external pure returns (bytes32); /** * @notice Updates the cache with whether the contract implements an ERC165 interface or not. * @param account Address of the contract for which to update the cache. * @param interfaceId ERC165 interface for which to update the cache. */ function updateERC165Cache(address account, bytes4 interfaceId) external; /** * @notice Checks whether a contract implements an ERC165 interface or not. * If the result is not cached a direct lookup on the contract address is performed. * If the result is not cached or the cached value is out-of-date, the cache MUST be updated manually by calling * {updateERC165Cache} with the contract address. * @param account Address of the contract to check. * @param interfaceId ERC165 interface to check. * @return True if `account` implements `interfaceId`, false otherwise. */ function implementsERC165Interface(address account, bytes4 interfaceId) external view returns (bool); /** * @notice Checks whether a contract implements an ERC165 interface or not without using nor updating the cache. * @param account Address of the contract to check. * @param interfaceId ERC165 interface to check. * @return True if `account` implements `interfaceId`, false otherwise. */ function implementsERC165InterfaceNoCache(address account, bytes4 interfaceId) external view returns (bool); event InterfaceImplementerSet(address indexed account, bytes32 indexed interfaceHash, address indexed implementer); event ManagerChanged(address indexed account, address indexed newManager); } /** * @dev Implementation of the {IERC777} 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}. * * Support for ERC20 is included in this contract, as specified by the EIP: both * the ERC777 and ERC20 interfaces can be safely used when interacting with it. * Both {IERC777-Sent} and {IERC20-Transfer} events are emitted on token * movements. * * Additionally, the {IERC777-granularity} value is hard-coded to `1`, meaning that there * are no special restrictions in the amount of tokens that created, moved, or * destroyed. This makes integration with ERC20 applications seamless. * * @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 ERC777OwnableUpgradeSafe is Context, IERC777, IERC20 { using SafeMath for uint256; using Address for address; bool private initialized; bool private initializing; address private _owner; IERC1820Registry internal constant _ERC1820_REGISTRY = IERC1820Registry(0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24); mapping(address => uint256) internal _balances; uint256 private _totalSupply; uint256 private _totalBurned; string private _name; string private _symbol; uint8 private _decimals; // We inline the result of the following hashes because Solidity doesn't resolve them at compile time. // See https://github.com/ethereum/solidity/issues/4024. // keccak256("ERC777TokensSender") bytes32 private constant _TOKENS_SENDER_INTERFACE_HASH = 0x29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe895; // keccak256("ERC777TokensRecipient") bytes32 private constant _TOKENS_RECIPIENT_INTERFACE_HASH = 0xb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b; // This isn't ever read from - it's only used to respond to the defaultOperators query. address[] private _defaultOperatorsArray; // Immutable, but accounts may revoke them (tracked in __revokedDefaultOperators). mapping(address => bool) private _defaultOperators; // For each account, a mapping of its operators and revoked default operators. mapping(address => mapping(address => bool)) private _operators; mapping(address => mapping(address => bool)) private _revokedDefaultOperators; // ERC20-allowances mapping(address => mapping(address => uint256)) private _allowances; bool private __ERC1820_REGISTRY_ENABLED = false; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @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; } function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer {} // Reserved storage space to allow for layout changes in the future. uint256[50] private __gap; function __ERC777_init( string memory name, string memory symbol, bool _erc1820RegistryEnabled ) internal initializer { __Context_init_unchained(); __ERC777_init_unchained(name, symbol); __Ownable_init_unchained(); __ERC1820_REGISTRY_ENABLED = _erc1820RegistryEnabled; // register interfaces if (__ERC1820_REGISTRY_ENABLED) { _ERC1820_REGISTRY.setInterfaceImplementer(address(this), keccak256("ERC777Token"), address(this)); _ERC1820_REGISTRY.setInterfaceImplementer(address(this), keccak256("ERC20Token"), address(this)); } } function __ERC777_init_unchained(string memory name, string memory symbol) internal initializer { _name = name; _symbol = symbol; _decimals = 18; } 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; } function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev See {IERC777-name}. */ function name() public view override returns (string memory) { return _name; } /** * @dev See {IERC777-symbol}. */ function symbol() public view override returns (string memory) { return _symbol; } /** * @dev See {ERC20-decimals}. * * Always returns 18, as per the * [ERC777 EIP](https://eips.ethereum.org/EIPS/eip-777#backward-compatibility). */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC777-granularity}. * * This implementation always returns `1`. */ function granularity() public view override returns (uint256) { return 1; } /** * @dev See {IERC777-totalSupply}. */ function totalSupply() public view override(IERC20, IERC777) returns (uint256) { return _totalSupply; } function totalBurned() public view returns (uint256) { return _totalBurned; } /** * @dev Returns the amount of tokens owned by an account (`tokenHolder`). */ function balanceOf(address tokenHolder) public view override(IERC20, IERC777) returns (uint256) { return _balances[tokenHolder]; } /** * @dev See {IERC777-send}. * * Also emits a {IERC20-Transfer} event for ERC20 compatibility. */ function send( address recipient, uint256 amount, bytes memory data ) public override { _send(_msgSender(), recipient, amount, data, "", true); } /** * @dev See {IERC20-transfer}. * * Unlike `send`, `recipient` is _not_ required to implement the {IERC777Recipient} * interface if it is a contract. * * Also emits a {Sent} event. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { require(recipient != address(0), "ERC777: transfer to the zero address"); address from = _msgSender(); _callTokensToSend(from, from, recipient, amount, "", ""); _move(from, from, recipient, amount, "", ""); _callTokensReceived(from, from, recipient, amount, "", "", false); return true; } /** * @dev See {IERC777-burn}. * * Also emits a {IERC20-Transfer} event for ERC20 compatibility. */ function burn(uint256 amount, bytes memory data) public override { _burn(_msgSender(), amount, data, ""); } /** * @dev See {IERC777-isOperatorFor}. */ function isOperatorFor(address operator, address tokenHolder) public view override returns (bool) { return operator == tokenHolder || (_defaultOperators[operator] && !_revokedDefaultOperators[tokenHolder][operator]) || _operators[tokenHolder][operator]; } /** * @dev See {IERC777-authorizeOperator}. */ function authorizeOperator(address operator) public override { require(_msgSender() != operator, "ERC777: authorizing self as operator"); if (_defaultOperators[operator]) { delete _revokedDefaultOperators[_msgSender()][operator]; } else { _operators[_msgSender()][operator] = true; } emit AuthorizedOperator(operator, _msgSender()); } /** * @dev See {IERC777-revokeOperator}. */ function revokeOperator(address operator) public override { require(operator != _msgSender(), "ERC777: revoking self as operator"); if (_defaultOperators[operator]) { _revokedDefaultOperators[_msgSender()][operator] = true; } else { delete _operators[_msgSender()][operator]; } emit RevokedOperator(operator, _msgSender()); } /** * @dev See {IERC777-defaultOperators}. */ function defaultOperators() public view override returns (address[] memory) { return _defaultOperatorsArray; } /** * @dev See {IERC777-operatorSend}. * * Emits {Sent} and {IERC20-Transfer} events. */ function operatorSend( address sender, address recipient, uint256 amount, bytes memory data, bytes memory operatorData ) public override { require(isOperatorFor(_msgSender(), sender), "ERC777: caller is not an operator for holder"); _send(sender, recipient, amount, data, operatorData, true); } /** * @dev See {IERC777-operatorBurn}. * * Emits {Burned} and {IERC20-Transfer} events. */ function operatorBurn( address account, uint256 amount, bytes memory data, bytes memory operatorData ) public override { require(isOperatorFor(_msgSender(), account), "ERC777: caller is not an operator for holder"); _burn(account, amount, data, operatorData); } /** * @dev See {IERC20-allowance}. * * Note that operator and allowance concepts are orthogonal: operators may * not have allowance, and accounts with allowance may not be operators * themselves. */ function allowance(address holder, address spender) public view override returns (uint256) { return _allowances[holder][spender]; } /** * @dev See {IERC20-approve}. * * Note that accounts cannot have allowance issued by their operators. */ function approve(address spender, uint256 value) public override returns (bool) { address holder = _msgSender(); _approve(holder, spender, value); return true; } /** * @dev See {IERC20-transferFrom}. * * Note that operator and allowance concepts are orthogonal: operators cannot * call `transferFrom` (unless they have allowance), and accounts with * allowance cannot call `operatorSend` (unless they are operators). * * Emits {Sent}, {IERC20-Transfer} and {IERC20-Approval} events. */ function transferFrom( address holder, address recipient, uint256 amount ) public virtual override returns (bool) { require(recipient != address(0), "ERC777: transfer to the zero address"); require(holder != address(0), "ERC777: transfer from the zero address"); address spender = _msgSender(); _callTokensToSend(spender, holder, recipient, amount, "", ""); _move(spender, holder, recipient, amount, "", ""); _approve(holder, spender, _allowances[holder][spender].sub(amount, "ERC777: transfer amount exceeds allowance")); _callTokensReceived(spender, holder, recipient, amount, "", "", false); return true; } /** * @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * If a send hook is registered for `account`, the corresponding function * will be called with `operator`, `data` and `operatorData`. * * See {IERC777Sender} and {IERC777Recipient}. * * Emits {Minted} and {IERC20-Transfer} events. * * Requirements * * - `account` cannot be the zero address. * - if `account` is a contract, it must implement the {IERC777Recipient} * interface. */ function _mint( address account, uint256 amount, bytes memory userData, bytes memory operatorData ) internal virtual { require(account != address(0), "ERC777: mint to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), account, amount); // Update state variables _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); _callTokensReceived(operator, address(0), account, amount, userData, operatorData, false); emit Minted(operator, account, amount, userData, operatorData); emit Transfer(address(0), account, amount); } /** * @dev Send tokens * @param from address token holder address * @param to address recipient address * @param amount uint256 amount of tokens to transfer * @param userData bytes extra information provided by the token holder (if any) * @param operatorData bytes extra information provided by the operator (if any) * @param requireReceptionAck if true, contract recipients are required to implement ERC777TokensRecipient */ function _send( address from, address to, uint256 amount, bytes memory userData, bytes memory operatorData, bool requireReceptionAck ) internal virtual { require(from != address(0), "ERC777: send from the zero address"); require(to != address(0), "ERC777: send to the zero address"); address operator = _msgSender(); _callTokensToSend(operator, from, to, amount, userData, operatorData); _move(operator, from, to, amount, userData, operatorData); _callTokensReceived(operator, from, to, amount, userData, operatorData, requireReceptionAck); } /** * @dev Burn tokens * @param from address token holder address * @param amount uint256 amount of tokens to burn * @param data bytes extra information provided by the token holder * @param operatorData bytes extra information provided by the operator (if any) */ function _burn( address from, uint256 amount, bytes memory data, bytes memory operatorData ) internal virtual { require(from != address(0), "ERC777: burn from the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), amount); _callTokensToSend(operator, from, address(0), amount, data, operatorData); // Update state variables _balances[from] = _balances[from].sub(amount, "ERC777: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); _totalBurned = _totalBurned.add(amount); emit Burned(operator, from, amount, data, operatorData); emit Transfer(from, address(0), amount); } function _move( address operator, address from, address to, uint256 amount, bytes memory userData, bytes memory operatorData ) internal virtual returns (uint256 _amountSent) { _beforeTokenTransfer(operator, from, to, amount); _balances[from] = _balances[from].sub(amount, "ERC777: transfer amount exceeds balance"); _balances[to] = _balances[to].add(amount); _amountSent = amount; emit Sent(operator, from, to, amount, userData, operatorData); emit Transfer(from, to, amount); } /** * @dev See {ERC20-_approve}. * * Note that accounts cannot have allowance issued by their operators. */ function _approve( address holder, address spender, uint256 value ) internal { require(holder != address(0), "ERC777: approve from the zero address"); require(spender != address(0), "ERC777: approve to the zero address"); _allowances[holder][spender] = value; emit Approval(holder, spender, value); } /** * @dev Call from.tokensToSend() if the interface is registered * @param operator address operator requesting the transfer * @param from address token holder address * @param to address recipient address * @param amount uint256 amount of tokens to transfer * @param userData bytes extra information provided by the token holder (if any) * @param operatorData bytes extra information provided by the operator (if any) */ function _callTokensToSend( address operator, address from, address to, uint256 amount, bytes memory userData, bytes memory operatorData ) internal { if (__ERC1820_REGISTRY_ENABLED) { address implementer = _ERC1820_REGISTRY.getInterfaceImplementer(from, _TOKENS_SENDER_INTERFACE_HASH); if (implementer != address(0)) { IERC777Sender(implementer).tokensToSend(operator, from, to, amount, userData, operatorData); } } } /** * @dev Call to.tokensReceived() if the interface is registered. Reverts if the recipient is a contract but * tokensReceived() was not registered for the recipient * @param operator address operator requesting the transfer * @param from address token holder address * @param to address recipient address * @param amount uint256 amount of tokens to transfer * @param userData bytes extra information provided by the token holder (if any) * @param operatorData bytes extra information provided by the operator (if any) * @param requireReceptionAck if true, contract recipients are required to implement ERC777TokensRecipient */ function _callTokensReceived( address operator, address from, address to, uint256 amount, bytes memory userData, bytes memory operatorData, bool requireReceptionAck ) internal { if (__ERC1820_REGISTRY_ENABLED) { address implementer = _ERC1820_REGISTRY.getInterfaceImplementer(to, _TOKENS_RECIPIENT_INTERFACE_HASH); if (implementer != address(0)) { IERC777Recipient(implementer).tokensReceived(operator, from, to, amount, userData, operatorData); } else if (requireReceptionAck) { require(!to.isContract(), "ERC777: token recipient contract has no implementer for ERC777TokensRecipient"); } } } /** * @dev Hook that is called before any token transfer. This includes * calls to {send}, {transfer}, {operatorSend}, 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 operator, address from, address to, uint256 amount ) internal virtual {} } contract ContractGuard { mapping(uint256 => mapping(address => bool)) private _status; function checkSameOriginReentranted() internal view returns (bool) { return _status[block.number][tx.origin]; } function checkSameSenderReentranted() internal view returns (bool) { return _status[block.number][msg.sender]; } modifier onlyOneBlock() { require(!checkSameOriginReentranted(), "ContractGuard: one block, one function"); require(!checkSameSenderReentranted(), "ContractGuard: one block, one function"); _; _status[block.number][tx.origin] = true; _status[block.number][msg.sender] = true; } } interface IBasisAsset { function mint(address recipient, uint256 amount) external returns (bool); function burn(uint256 amount) external; function burnFrom(address from, uint256 amount) external; function isOperator() external returns (bool); function operator() external view returns (address); } contract BTOKEN is ERC777OwnableUpgradeSafe, ContractGuard { using SafeMath for uint256; /* ========== STATE VARIABLES ========== */ uint256 public cap; mapping(address => bool) public minter; // TOTAL MAX SUPPLY = 100,000,000 TOKEN uint256 public constant COMMUNITY_FUND_POOL_ALLOCATION = 0 ether; uint256 public constant DEV_FUND_POOL_ALLOCATION = 0 ether; uint256 public constant IDO_ALLOCATION = 0 ether; uint256 public constant VESTING_DURATION = 150 weeks; uint256 public constant startTime = 1624080000; uint256 public constant endTime = startTime + VESTING_DURATION; uint256 public constant communityFundRewardRate = COMMUNITY_FUND_POOL_ALLOCATION / VESTING_DURATION; uint256 public constant devFundRewardRate = DEV_FUND_POOL_ALLOCATION / VESTING_DURATION; address public communityFund; address public devFund; uint256 public jackpotRate; uint256 public fundRate; uint256 public communityFundLastClaimed = startTime; uint256 public devFundLastClaimed = startTime; address public jackpotFund; uint256 public burnRate; uint256 public taxRate; // buy back SDO and add liquidity address public taxFund; // fund buy back SDO uint256 private _totalTaxAdded; mapping(address => bool) private _isExcludedFromFee; mapping(address => bool) private _isExcludedToFee; /* =================== Added variables (need to keep orders for proxy to work) =================== */ /*... /* ========== EVENTS ========== */ event MinterUpdate(address indexed account, bool isMinter); event TaxAdded(address indexed account, address taxFund, uint256 amount); /* ========== Modifiers =============== */ modifier onlyMinter() { require(minter[msg.sender], "!minter"); _; } /* ========== GOVERNANCE ========== */ //cap: 100000000000000000000000000/1e18=100 000 000 function initialize(uint256 _cap,address _taxFund) public initializer { __ERC777_init("polyeuro.finance", "BALL", true); require(_taxFund != address(0), "zero"); cap = _cap; taxFund = _taxFund; devFund = msg.sender; jackpotFund = msg.sender; jackpotFund = msg.sender; burnRate = 2; // 0.2% taxRate = 0; // 0.3% loyaltypool when open jackpotRate = 3;//0.3% fundRate = 2;//0.2% communityFundLastClaimed = startTime; devFundLastClaimed = startTime; _isExcludedFromFee[_msgSender()] = true; _isExcludedToFee[_msgSender()] = true; _isExcludedFromFee[_taxFund] = true; _isExcludedToFee[_taxFund] = true; _mint(_msgSender(), IDO_ALLOCATION.add(1 ether), "", ""); // mint extra 1 MTokenERC777 for initial pools deployment } function setMinter(address _account, bool _isMinter) external onlyOwner { require(_account != address(0), "zero"); minter[_account] = _isMinter; emit MinterUpdate(_account, _isMinter); } function setCommunityFund(address _communityFund) external onlyOwner { communityFund = _communityFund; } function setBurnRate(uint256 _burnRate) external onlyOwner { require(_burnRate <= 1000, "too high"); // <= 10% burnRate = _burnRate; } function setTaxRate(uint256 _taxRate) external onlyOwner { require(_taxRate <= 1000, "too high"); // <= 10% taxRate = _taxRate; } function setTaxFund(address _taxFund) external onlyOwner { require(_taxFund != address(0), "zero"); taxFund = _taxFund; } function setDevFund(address _devFund) external onlyOwner { require(_devFund != address(0), "zero"); devFund = _devFund; } function setJackpotRate(uint256 _jackpotRate) external onlyOwner { require(_jackpotRate <= 1000, "too high"); // <= 10% jackpotRate = _jackpotRate; } function setJackpotFund(address _jackpotFund) external onlyOwner { jackpotFund = _jackpotFund; } function setExcludeFromFee(address _account, bool _status) external onlyOwner { _isExcludedFromFee[_account] = _status; } function setExcludeToFee(address _account, bool _status) external onlyOwner { _isExcludedToFee[_account] = _status; } function setExcludeBothDirectionsFee(address _account, bool _status) external onlyOwner { _isExcludedFromFee[_account] = _status; _isExcludedToFee[_account] = _status; } /* ========== VIEW FUNCTIONS ========== */ function totalTaxAdded() external view returns (uint256) { return _totalTaxAdded; } /* ========== MUTATIVE FUNCTIONS ========== */ function mint(address _recipient, uint256 _amount) public onlyMinter returns (bool) { uint256 balanceBefore = balanceOf(_recipient); _mint(_recipient, _amount, "", ""); uint256 balanceAfter = balanceOf(_recipient); return balanceAfter > balanceBefore; } function burn(uint256 _amount) external onlyOneBlock { _burn(msg.sender, _amount, "", ""); } function burnFrom(address _account, uint256 _amount) external onlyOneBlock { _approve(_account, _msgSender(), allowance(_account, _msgSender()).sub(_amount, "ERC20: burn amount exceeds allowance")); _burn(_account, _amount, "", ""); } /* ========== OVERRIDE STANDARD FUNCTIONS ========== */ function transfer(address recipient, uint256 amount) public override returns (bool) { require(recipient != address(0), "SDO: transfer to the zero address"); address from = _msgSender(); _callTokensToSend(from, from, recipient, amount, "", ""); uint256 _amountSent = _move(from, from, recipient, amount, "", ""); _callTokensReceived(from, from, recipient, _amountSent, "", "", false); return true; } function transferFrom( address holder, address recipient, uint256 amount ) public override returns (bool) { require(recipient != address(0), "MTokenERC777: transfer to the zero address"); require(holder != address(0), "MTokenERC777: transfer from the zero address"); address spender = _msgSender(); _callTokensToSend(spender, holder, recipient, amount, "", ""); uint256 _amountSent = _move(spender, holder, recipient, amount, "", ""); _approve(holder, spender, allowance(holder, spender).sub(amount, "MTokenERC777: transfer amount exceeds allowance")); _callTokensReceived(spender, holder, recipient, _amountSent, "", "", false); return true; } /** * @dev See {ERC20-_beforeTokenTransfer}. * * Requirements: * * - minted tokens must not cause the total supply to go over the cap. */ function _beforeTokenTransfer( address _operator, address _from, address _to, uint256 _amount ) internal override { super._beforeTokenTransfer(_operator, _from, _to, _amount); if (_from == address(0)) { // When minting tokens require(totalSupply().add(_amount) <= cap, "cap exceeded"); } if (_to == address(0)) { // When burning tokens cap = cap.sub(_amount, "burn amount exceeds cap"); } } /** * @dev Send tokens * @param from address token holder address * @param to address recipient address * @param amount uint256 amount of tokens to transfer * @param userData bytes extra information provided by the token holder (if any) * @param operatorData bytes extra information provided by the operator (if any) * @param requireReceptionAck if true, contract recipients are required to implement ERC777TokensRecipient */ function _send( address from, address to, uint256 amount, bytes memory userData, bytes memory operatorData, bool requireReceptionAck ) internal override { require(from != address(0), "MTokenERC777: send from the zero address"); require(to != address(0), "MTokenERC777: send to the zero address"); address _operator = _msgSender(); _callTokensToSend(_operator, from, to, amount, userData, operatorData); uint256 _amountSent = _move(_operator, from, to, amount, userData, operatorData); _callTokensReceived(_operator, from, to, _amountSent, userData, operatorData, requireReceptionAck); } function _move( address _operator, address from, address to, uint256 amount, bytes memory userData, bytes memory operatorData ) internal override returns (uint256 _amountSent) { uint256 _amount = amount; if (!_isExcludedFromFee[from] && !_isExcludedToFee[to]) { { uint256 _taxRate = taxRate; if (_taxRate > 0) { uint256 _taxAmount = amount.mul(_taxRate).div(10000); address _taxFund = taxFund; _balances[from] = _balances[from].sub(_taxAmount, "MTokenERC777: transfer amount exceeds balance"); _balances[_taxFund] = _balances[_taxFund].add(_taxAmount); _amount = _amount.sub(_taxAmount); _totalTaxAdded = _totalTaxAdded.add(_taxAmount); emit TaxAdded(from, _taxFund, _taxAmount); emit Transfer(from, _taxFund, _taxAmount); } } { uint256 _burnAmount = 0; uint256 _burnRate = burnRate; if (_burnRate > 0) { _burnAmount = amount.mul(_burnRate).div(10000); _burn(from, _burnAmount, "", ""); _amount = _amount.sub(_burnAmount); } } { uint256 _jackpotRate = jackpotRate; if (_jackpotRate > 0) { uint256 _jackpotAmount = amount.mul(_jackpotRate).div(10000); address _jackpotFund = jackpotFund; _balances[from] = _balances[from].sub(_jackpotAmount, "MTokenERC777: transfer amount exceeds balance"); _balances[_jackpotFund] = _balances[_jackpotFund].add(_jackpotAmount); _amount = _amount.sub(_jackpotAmount); emit Transfer(from, _jackpotFund, _jackpotAmount); } } { uint256 _fundRate = fundRate; if (_fundRate > 0) { uint256 _devAmount = amount.mul(_fundRate).div(10000); address _devFund = devFund; _balances[from] = _balances[from].sub(_devAmount, "MTokenERC777: transfer amount exceeds balance"); _balances[_devFund] = _balances[_devFund].add(_devAmount); _amount = _amount.sub(_devAmount); emit Transfer(from, _devFund, _devAmount); } } } _balances[from] = _balances[from].sub(_amount, "MTokenERC777: transfer amount exceeds balance"); _balances[to] = _balances[to].add(_amount); _amountSent = _amount; emit Sent(_operator, from, to, _amount, userData, operatorData); emit Transfer(from, to, _amount); } function unclaimedCommunityFund() public view returns (uint256 _pending) { uint256 _now = block.timestamp; if (_now > endTime) _now = endTime; if (communityFundLastClaimed >= _now) return 0; _pending = _now.sub(communityFundLastClaimed).mul(communityFundRewardRate); } function unclaimedDevFund() public view returns (uint256 _pending) { uint256 _now = block.timestamp; if (_now > endTime) _now = endTime; if (devFundLastClaimed >= _now) return 0; _pending = _now.sub(devFundLastClaimed).mul(devFundRewardRate); } /** * @dev Claim pending rewards to community and dev fund */ function claimRewards() external { uint256 _pending = unclaimedCommunityFund(); if (_pending > 0 && communityFund != address(0)) { _mint(communityFund, _pending, "", ""); communityFundLastClaimed = block.timestamp; } _pending = unclaimedDevFund(); if (_pending > 0 && devFund != address(0)) { _mint(devFund, _pending, "", ""); devFundLastClaimed = block.timestamp; } } }
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":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"tokenHolder","type":"address"}],"name":"AuthorizedOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"Burned","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"Minted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isMinter","type":"bool"}],"name":"MinterUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"tokenHolder","type":"address"}],"name":"RevokedOperator","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"},{"indexed":false,"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"Sent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"taxFund","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TaxAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"COMMUNITY_FUND_POOL_ALLOCATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEV_FUND_POOL_ALLOCATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"IDO_ALLOCATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"VESTING_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"authorizeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenHolder","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"communityFund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communityFundLastClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"communityFundRewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultOperators","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFundLastClaimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devFundRewardRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"granularity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cap","type":"uint256"},{"internalType":"address","name":"_taxFund","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"tokenHolder","type":"address"}],"name":"isOperatorFor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotFund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"jackpotRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"operatorBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"},{"internalType":"bytes","name":"operatorData","type":"bytes"}],"name":"operatorSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"revokeOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"send","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnRate","type":"uint256"}],"name":"setBurnRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_communityFund","type":"address"}],"name":"setCommunityFund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devFund","type":"address"}],"name":"setDevFund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setExcludeBothDirectionsFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setExcludeToFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_jackpotFund","type":"address"}],"name":"setJackpotFund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_jackpotRate","type":"uint256"}],"name":"setJackpotRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"bool","name":"_isMinter","type":"bool"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_taxFund","type":"address"}],"name":"setTaxFund","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxRate","type":"uint256"}],"name":"setTaxRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxFund","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalTaxAdded","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":"holder","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":"unclaimedCommunityFund","outputs":[{"internalType":"uint256","name":"_pending","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unclaimedDevFund","outputs":[{"internalType":"uint256","name":"_pending","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052600c805460ff191690556360cd7e80604681905560475534801561002757600080fd5b506142e5806100376000396000f3fe608060405234801561001057600080fd5b50600436106103ae5760003560e01c80636409de78116101f4578063af9549e01161011a578063da35a26f116100ad578063f2fde38b1161007c578063f2fde38b14610b58578063fad8b32a14610b7e578063fc673c4f14610ba4578063fe9d930314610ce2576103ae565b8063da35a26f14610ad0578063dd62ed3e14610afc578063ee7e767114610b2a578063f17fdc4014610b50576103ae565b8063c7320509116100e9578063c732050914610a64578063cf456ae714610a6c578063d89135cd14610a9a578063d95b637114610aa2576103ae565b8063af9549e0146109f4578063bed9985014610a22578063c600e04114610a2a578063c6d69a3014610a47576103ae565b80638b93e49e116101925780639bd9bbc6116101615780639bd9bbc6146108e1578063a9059cbb1461099a578063abb4b1be146109c6578063ae4db919146109ce576103ae565b80638b93e49e146108a35780638da5cb5b146108ab578063959b8c3f146108b357806395d89b41146108d9576103ae565b8063715018a6116101ce578063715018a61461085f578063771a3a1d1461086757806378e979251461086f57806379cc679014610877576103ae565b80636409de78146107e5578063686166c01461081357806370a0823114610839576103ae565b806337339a16116102d95780634cfc4d3011610277578063556f0dc711610246578063556f0dc71461068c57806361a2a8c81461069457806362ad1b831461069c57806362d1c04c14610599576103ae565b80634cfc4d30146106745780634f337dd51461059957806351305eef1461067c578063547f121314610684576103ae565b806340c10f19116102b357806340c10f191461062357806342966c681461064f5780634390d2a81461066c57806344cdc45414610599576103ae565b806337339a16146105d75780633bba8eed146105995780633dd08c38146105fd576103ae565b8063189d165e11610351578063313ce56711610320578063313ce567146105a15780633197cbb6146105bf578063355274ea146105c7578063372500ab146105cf576103ae565b8063189d165e1461053e57806323b872dd1461055b5780632c07a624146105915780632e3367ce14610599576103ae565b806306e485381161038d57806306e485381461042157806306fdde0314610479578063095ea7b3146104f657806318160ddd14610536576103ae565b8062f380f4146103b357806302317601146103d75780630401731514610407575b600080fd5b6103bb610d8d565b604080516001600160a01b039092168252519081900360200190f35b610405600480360360408110156103ed57600080fd5b506001600160a01b0381351690602001351515610d9c565b005b61040f610e38565b60408051918252519081900360200190f35b610429610e3e565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561046557818101518382015260200161044d565b505050509050019250505060405180910390f35b610481610ea1565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104bb5781810151838201526020016104a3565b50505050905090810190601f1680156104e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105226004803603604081101561050c57600080fd5b506001600160a01b038135169060200135610f2e565b604080519115158252519081900360200190f35b61040f610f52565b6104056004803603602081101561055457600080fd5b5035610f58565b6105226004803603606081101561057157600080fd5b506001600160a01b03813581169160208101359091169060400135610ffd565b61040f611163565b61040f6111ad565b6105a96111b2565b6040805160ff9092168252519081900360200190f35b61040f6111bb565b61040f6111c3565b6104056111c9565b610405600480360360208110156105ed57600080fd5b50356001600160a01b0316611292565b6105226004803603602081101561061357600080fd5b50356001600160a01b0316611312565b6105226004803603604081101561063957600080fd5b506001600160a01b038135169060200135611327565b6104056004803603602081101561066557600080fd5b50356113c3565b6103bb6114b3565b61040f6114c2565b61040f6114ca565b61040f6114d0565b61040f61150e565b61040f611513565b610405600480360360a08110156106b257600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156106ec57600080fd5b8201836020820111156106fe57600080fd5b803590602001918460018302840111600160201b8311171561071f57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561077157600080fd5b82018360208201111561078357600080fd5b803590602001918460018302840111600160201b831117156107a457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611519945050505050565b610405600480360360408110156107fb57600080fd5b506001600160a01b038135169060200135151561157b565b6104056004803603602081101561082957600080fd5b50356001600160a01b0316611604565b61040f6004803603602081101561084f57600080fd5b50356001600160a01b0316611684565b61040561169f565b61040f61174e565b61040f611754565b6104056004803603604081101561088d57600080fd5b506001600160a01b03813516906020013561175c565b61040f611887565b6103bb61188d565b610405600480360360208110156108c957600080fd5b50356001600160a01b03166118a2565b6104816119ee565b610405600480360360608110156108f757600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561092657600080fd5b82018360208201111561093857600080fd5b803590602001918460018302840111600160201b8311171561095957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611a4f945050505050565b610522600480360360408110156109b057600080fd5b506001600160a01b038135169060200135611a79565b61040f611b61565b610405600480360360208110156109e457600080fd5b50356001600160a01b0316611b67565b61040560048036036040811015610a0a57600080fd5b506001600160a01b0381351690602001351515611c2b565b61040f611cb4565b61040560048036036020811015610a4057600080fd5b5035611cba565b61040560048036036020811015610a5d57600080fd5b5035611d5f565b6103bb611e04565b61040560048036036040811015610a8257600080fd5b506001600160a01b0381351690602001351515611e13565b61040f611f15565b61052260048036036040811015610ab857600080fd5b506001600160a01b0381358116916020013516611f1b565b61040560048036036040811015610ae657600080fd5b50803590602001356001600160a01b0316611fbd565b61040f60048036036040811015610b1257600080fd5b506001600160a01b0381358116916020013516612242565b61040560048036036020811015610b4057600080fd5b50356001600160a01b031661226d565b6103bb612331565b61040560048036036020811015610b6e57600080fd5b50356001600160a01b0316612340565b61040560048036036020811015610b9457600080fd5b50356001600160a01b031661244c565b61040560048036036080811015610bba57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610be957600080fd5b820183602082011115610bfb57600080fd5b803590602001918460018302840111600160201b83111715610c1c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610c6e57600080fd5b820183602082011115610c8057600080fd5b803590602001918460018302840111600160201b83111715610ca157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612598945050505050565b61040560048036036040811015610cf857600080fd5b81359190810190604081016020820135600160201b811115610d1957600080fd5b820183602082011115610d2b57600080fd5b803590602001918460018302840111600160201b83111715610d4c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506125f6945050505050565b6042546001600160a01b031681565b610da461261c565b6000546201000090046001600160a01b03908116911614610dfa576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6001600160a01b039091166000908152604d60209081526040808320805494151560ff199586168117909155604e9092529091208054909216179055565b60475481565b60606007805480602002602001604051908101604052809291908181526020018280548015610e9657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e78575b505050505090505b90565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e965780601f10610f0257610100808354040283529160200191610e96565b820191906000526020600020905b815481529060010190602001808311610f1057509395945050505050565b600080610f3961261c565b9050610f46818585612620565b60019150505b92915050565b60025490565b610f6061261c565b6000546201000090046001600160a01b03908116911614610fb6576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6103e8811115610ff8576040805162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b604482015290519081900360640190fd5b604955565b60006001600160a01b0383166110445760405162461bcd60e51b815260040180806020018281038252602a81526020018061421a602a913960400191505060405180910390fd5b6001600160a01b0384166110895760405162461bcd60e51b815260040180806020018281038252602c8152602001806141c2602c913960400191505060405180910390fd5b600061109361261c565b90506110c181868686604051806020016040528060008152506040518060200160405280600081525061270c565b60006110ef828787876040518060200160405280600081525060405180602001604052806000815250612945565b90506111298683611124876040518060600160405280602f815260200161404a602f913961111d8c89612242565b9190612f39565b612620565b6111578287878460405180602001604052806000815250604051806020016040528060008152506000612fd0565b50600195945050505050565b600042636635c5808111156111795750636635c5805b806047541061118c576000915050610e9e565b6047546111a7906000906111a1908490613260565b906132a2565b91505090565b600081565b60065460ff1690565b636635c58081565b60405481565b60006111d36114d0565b90506000811180156111ef57506042546001600160a01b031615155b1561122d57604254604080516020808201835260008083528351918201909352918252611228926001600160a01b0316918491906132fb565b426046555b611235611163565b905060008111801561125157506043546001600160a01b031615155b1561128f5760435460408051602080820183526000808352835191820190935291825261128a926001600160a01b0316918491906132fb565b426047555b50565b61129a61261c565b6000546201000090046001600160a01b039081169116146112f0576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b604280546001600160a01b0319166001600160a01b0392909216919091179055565b60416020526000908152604090205460ff1681565b3360009081526041602052604081205460ff16611375576040805162461bcd60e51b815260206004820152600760248201526610b6b4b73a32b960c91b604482015290519081900360640190fd5b600061138084611684565b90506113ac848460405180602001604052806000815250604051806020016040528060008152506132fb565b60006113b785611684565b91909111949350505050565b6113cb613520565b156114075760405162461bcd60e51b81526004018080602001828103825260268152602001806142446026913960400191505060405180910390fd5b61140f613541565b1561144b5760405162461bcd60e51b81526004018080602001828103825260268152602001806142446026913960400191505060405180910390fd5b61147533826040518060200160405280600081525060405180602001604052806000815250613562565b50436000908152603f602090815260408083203284529091528082208054600160ff1991821681179092553384529190922080549091169091179055565b6043546001600160a01b031681565b630568470081565b60445481565b600042636635c5808111156114e65750636635c5805b80604654106114f9576000915050610e9e565b6046546111a7906000906111a1908490613260565b600190565b60455481565b61152a61152461261c565b86611f1b565b6115655760405162461bcd60e51b815260040180806020018281038252602c8152602001806141ee602c913960400191505060405180910390fd5b6115748585858585600161379a565b5050505050565b61158361261c565b6000546201000090046001600160a01b039081169116146115d9576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152604e60205260409020805460ff1916911515919091179055565b61160c61261c565b6000546201000090046001600160a01b03908116911614611662576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b604880546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526001602052604090205490565b6116a761261c565b6000546201000090046001600160a01b039081169116146116fd576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b60008054604051620100009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805462010000600160b01b0319169055565b604a5481565b6360cd7e8081565b611764613520565b156117a05760405162461bcd60e51b81526004018080602001828103825260268152602001806142446026913960400191505060405180910390fd5b6117a8613541565b156117e45760405162461bcd60e51b81526004018080602001828103825260268152602001806142446026913960400191505060405180910390fd5b61181e826117f061261c565b611124846040518060600160405280602481526020016141566024913961111d8861181961261c565b612242565b61184882826040518060200160405280600081525060405180602001604052806000815250613562565b5050436000908152603f602090815260408083203284529091528082208054600160ff1991821681179092553384529190922080549091169091179055565b604c5490565b6000546201000090046001600160a01b031690565b806001600160a01b03166118b461261c565b6001600160a01b031614156118fa5760405162461bcd60e51b8152600401808060200182810382526024815260200180613fd86024913960400191505060405180910390fd5b6001600160a01b03811660009081526008602052604090205460ff161561195d57600a600061192761261c565b6001600160a01b03908116825260208083019390935260409182016000908120918516815292529020805460ff191690556119a4565b60016009600061196b61261c565b6001600160a01b03908116825260208083019390935260409182016000908120918616815292529020805460ff19169115159190911790555b6119ac61261c565b6001600160a01b0316816001600160a01b03167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e965780601f10610f0257610100808354040283529160200191610e96565b611a74611a5a61261c565b84848460405180602001604052806000815250600161379a565b505050565b60006001600160a01b038316611ac05760405162461bcd60e51b81526004018080602001828103825260218152602001806140796021913960400191505060405180910390fd5b6000611aca61261c565b9050611af881828686604051806020016040528060008152506040518060200160405280600081525061270c565b6000611b26828387876040518060200160405280600081525060405180602001604052806000815250612945565b9050611b568283878460405180602001604052806000815250604051806020016040528060008152506000612fd0565b506001949350505050565b60465481565b611b6f61261c565b6000546201000090046001600160a01b03908116911614611bc5576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6001600160a01b038116611c09576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b604380546001600160a01b0319166001600160a01b0392909216919091179055565b611c3361261c565b6000546201000090046001600160a01b03908116911614611c89576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152604d60205260409020805460ff1916911515919091179055565b60495481565b611cc261261c565b6000546201000090046001600160a01b03908116911614611d18576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6103e8811115611d5a576040805162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b604482015290519081900360640190fd5b604455565b611d6761261c565b6000546201000090046001600160a01b03908116911614611dbd576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6103e8811115611dff576040805162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b604482015290519081900360640190fd5b604a55565b604b546001600160a01b031681565b611e1b61261c565b6000546201000090046001600160a01b03908116911614611e71576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6001600160a01b038216611eb5576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6001600160a01b038216600081815260416020908152604091829020805460ff1916851515908117909155825190815291517f279360e293bcf8120adefa5fb6f669c774022ed25c09e099edd1818d155c57b69281900390910190a25050565b60035490565b6000816001600160a01b0316836001600160a01b03161480611f8657506001600160a01b03831660009081526008602052604090205460ff168015611f8657506001600160a01b038083166000908152600a602090815260408083209387168352929052205460ff16155b80611fb657506001600160a01b0380831660009081526009602090815260408083209387168352929052205460ff165b9392505050565b600054610100900460ff1680611fd65750611fd661385f565b80611fe4575060005460ff16155b61201f5760405162461bcd60e51b815260040180806020018281038252602e815260200180614128602e913960400191505060405180910390fd5b600054610100900460ff1615801561204a576000805460ff1961ff0019909116610100171660011790555b61209a6040518060400160405280601081526020016f706f6c796575726f2e66696e616e636560801b815250604051806040016040528060048152602001631090531360e21b8152506001613865565b6001600160a01b0382166120de576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6040839055604b80546001600160a01b0384166001600160a01b031991821617909155604380548216339081179091556048805483168217909216179055600260498190556000604a81905560036044556045919091556360cd7e806046819055604755600190604d9061215061261c565b6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001604e600061219561261c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790559086168152604d8352818120805485166001908117909155604e90935220805490921617905561222c6121f461261c565b6122076000670de0b6b3a7640000613a6a565b60405180602001604052806000815250604051806020016040528060008152506132fb565b8015611a74576000805461ff0019169055505050565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b61227561261c565b6000546201000090046001600160a01b039081169116146122cb576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6001600160a01b03811661230f576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b604b80546001600160a01b0319166001600160a01b0392909216919091179055565b6048546001600160a01b031681565b61234861261c565b6000546201000090046001600160a01b0390811691161461239e576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6001600160a01b0381166123e35760405162461bcd60e51b8152600401808060200182810382526026815260200180613f906026913960400191505060405180910390fd5b600080546040516001600160a01b03808516936201000090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b61245461261c565b6001600160a01b0316816001600160a01b031614156124a45760405162461bcd60e51b81526004018080602001828103825260218152602001806140296021913960400191505060405180910390fd5b6001600160a01b03811660009081526008602052604090205460ff1615612510576001600a60006124d361261c565b6001600160a01b03908116825260208083019390935260409182016000908120918616815292529020805460ff191691151591909117905561254e565b6009600061251c61261c565b6001600160a01b03908116825260208083019390935260409182016000908120918516815292529020805460ff191690555b61255661261c565b6001600160a01b0316816001600160a01b03167f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a350565b6125a96125a361261c565b85611f1b565b6125e45760405162461bcd60e51b815260040180806020018281038252602c8152602001806141ee602c913960400191505060405180910390fd5b6125f084848484613562565b50505050565b61261861260161261c565b838360405180602001604052806000815250613562565b5050565b3390565b6001600160a01b0383166126655760405162461bcd60e51b8152600401808060200182810382526025815260200180613f6b6025913960400191505060405180910390fd5b6001600160a01b0382166126aa5760405162461bcd60e51b815260040180806020018281038252602381526020018061428d6023913960400191505060405180910390fd5b6001600160a01b038084166000818152600b6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600c5460ff161561293d576040805163555ddc6560e11b81526001600160a01b03871660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe89560248201529051600091731820a4b7618bde71dce8cdc73aab6c95905fad249163aabbb8ca91604480820192602092909190829003018186803b15801561279b57600080fd5b505afa1580156127af573d6000803e3d6000fd5b505050506040513d60208110156127c557600080fd5b505190506001600160a01b0381161561293b57806001600160a01b03166375ab97828888888888886040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001856001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015612870578181015183820152602001612858565b50505050905090810190601f16801561289d5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156128d05781810151838201526020016128b8565b50505050905090810190601f1680156128fd5780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561292257600080fd5b505af1158015612936573d6000803e3d6000fd5b505050505b505b505050505050565b6001600160a01b0385166000908152604d6020526040812054849060ff1615801561298957506001600160a01b0386166000908152604e602052604090205460ff16155b15612d3757604a548015612ae65760006129af6127106129a989856132a2565b90613ac4565b604b546040805160608101909152602d8082529293506001600160a01b03909116916129ff918491613ffc60208301396001600160a01b038d166000908152600160205260409020549190612f39565b6001600160a01b03808c166000908152600160205260408082209390935590831681522054612a2e9083613a6a565b6001600160a01b038216600090815260016020526040902055612a518483613260565b604c54909450612a619083613a6a565b604c55604080516001600160a01b038381168252602082018590528251908d16927f3518075fae16f1bca7d9a1f28fede590b3ee4854c3c0bb4c5259b4ed62aa1674928290030190a2806001600160a01b03168a6001600160a01b031660008051602061417a833981519152846040518082815260200191505060405180910390a350505b506049546000908015612b3c57612b036127106129a989846132a2565b9150612b2f89836040518060200160405280600081525060405180602001604052806000815250613562565b612b398383613260565b92505b50506044548015612c39576000612b596127106129a989856132a2565b6048546040805160608101909152602d8082529293506001600160a01b0390911691612ba9918491613ffc60208301396001600160a01b038d166000908152600160205260409020549190612f39565b6001600160a01b03808c166000908152600160205260408082209390935590831681522054612bd89083613a6a565b6001600160a01b038216600090815260016020526040902055612bfb8483613260565b9350806001600160a01b03168a6001600160a01b031660008051602061417a833981519152846040518082815260200191505060405180910390a350505b506045548015612d35576000612c556127106129a989856132a2565b6043546040805160608101909152602d8082529293506001600160a01b0390911691612ca5918491613ffc60208301396001600160a01b038d166000908152600160205260409020549190612f39565b6001600160a01b03808c166000908152600160205260408082209390935590831681522054612cd49083613a6a565b6001600160a01b038216600090815260016020526040902055612cf78483613260565b9350806001600160a01b03168a6001600160a01b031660008051602061417a833981519152846040518082815260200191505060405180910390a350505b505b612d74816040518060600160405280602d8152602001613ffc602d91396001600160a01b038a166000908152600160205260409020549190612f39565b6001600160a01b038089166000908152600160205260408082209390935590881681522054612da39082613a6a565b60016000886001600160a01b03166001600160a01b0316815260200190815260200160002081905550809150856001600160a01b0316876001600160a01b0316896001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987848888604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015612e58578181015183820152602001612e40565b50505050905090810190601f168015612e855780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015612eb8578181015183820152602001612ea0565b50505050905090810190601f168015612ee55780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a4856001600160a01b0316876001600160a01b031660008051602061417a833981519152836040518082815260200191505060405180910390a3509695505050505050565b60008184841115612fc85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f8d578181015183820152602001612f75565b50505050905090810190601f168015612fba5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600c5460ff161561293b576040805163555ddc6560e11b81526001600160a01b03871660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b60248201529051600091731820a4b7618bde71dce8cdc73aab6c95905fad249163aabbb8ca91604480820192602092909190829003018186803b15801561305f57600080fd5b505afa158015613073573d6000803e3d6000fd5b505050506040513d602081101561308957600080fd5b505190506001600160a01b0381161561320257806001600160a01b03166223de298989898989896040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001856001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561313357818101518382015260200161311b565b50505050905090810190601f1680156131605780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561319357818101518382015260200161317b565b50505050905090810190601f1680156131c05780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b1580156131e557600080fd5b505af11580156131f9573d6000803e3d6000fd5b50505050613256565b81156132565761321a866001600160a01b0316613b06565b156132565760405162461bcd60e51b815260040180806020018281038252604d8152602001806140db604d913960600191505060405180910390fd5b5050505050505050565b6000611fb683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f39565b6000826132b157506000610f4c565b828202828482816132be57fe5b0414611fb65760405162461bcd60e51b815260040180806020018281038252602181526020018061409a6021913960400191505060405180910390fd5b6001600160a01b038416613356576040805162461bcd60e51b815260206004820181905260248201527f4552433737373a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b600061336061261c565b905061336f8160008787613b0c565b60025461337c9085613a6a565b6002556001600160a01b0385166000908152600160205260409020546133a29085613a6a565b6001600160a01b0386166000908152600160205260408120919091556133ce9082908787878784612fd0565b846001600160a01b0316816001600160a01b03167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d868686604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561344d578181015183820152602001613435565b50505050905090810190601f16801561347a5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156134ad578181015183820152602001613495565b50505050905090810190601f1680156134da5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a36040805185815290516001600160a01b0387169160009160008051602061417a8339815191529181900360200190a35050505050565b436000908152603f6020908152604080832032845290915290205460ff1690565b436000908152603f6020908152604080832033845290915290205460ff1690565b6001600160a01b0384166135a75760405162461bcd60e51b8152600401808060200182810382526022815260200180613fb66022913960400191505060405180910390fd5b60006135b161261c565b90506135c08186600087613b0c565b6135cf8186600087878761270c565b61360c8460405180606001604052806023815260200161426a602391396001600160a01b0388166000908152600160205260409020549190612f39565b6001600160a01b0386166000908152600160205260409020556002546136329085613260565b6002556003546136429085613a6a565b600381905550846001600160a01b0316816001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098868686604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156136c75781810151838201526020016136af565b50505050905090810190601f1680156136f45780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561372757818101518382015260200161370f565b50505050905090810190601f1680156137545780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a36040805185815290516000916001600160a01b0388169160008051602061417a8339815191529181900360200190a35050505050565b6001600160a01b0386166137df5760405162461bcd60e51b815260040180806020018281038252602881526020018061419a6028913960400191505060405180910390fd5b6001600160a01b0385166138245760405162461bcd60e51b8152600401808060200182810382526026815260200180613f456026913960400191505060405180910390fd5b600061382e61261c565b905061383e81888888888861270c565b600061384e828989898989612945565b905061325682898984898989612fd0565b303b1590565b600054610100900460ff168061387e575061387e61385f565b8061388c575060005460ff16155b6138c75760405162461bcd60e51b815260040180806020018281038252602e815260200180614128602e913960400191505060405180910390fd5b600054610100900460ff161580156138f2576000805460ff1961ff0019909116610100171660011790555b6138fa613bd4565b6139048484613c75565b61390c613d4d565b600c805460ff1916831515179081905560ff1615613a5357604080516329965a1d60e01b815230600482018190527fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce2177054602483015260448201529051731820a4b7618bde71dce8cdc73aab6c95905fad24916329965a1d91606480830192600092919082900301818387803b1580156139a357600080fd5b505af11580156139b7573d6000803e3d6000fd5b5050604080516329965a1d60e01b815230600482018190527faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a602483015260448201529051731820a4b7618bde71dce8cdc73aab6c95905fad2493506329965a1d9250606480830192600092919082900301818387803b158015613a3a57600080fd5b505af1158015613a4e573d6000803e3d6000fd5b505050505b80156125f0576000805461ff001916905550505050565b600082820183811015611fb6576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000611fb683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e4c565b3b151590565b613b18848484846125f0565b6001600160a01b038316613b7d57604054613b3b82613b35610f52565b90613a6a565b1115613b7d576040805162461bcd60e51b815260206004820152600c60248201526b18d85c08195e18d95959195960a21b604482015290519081900360640190fd5b6001600160a01b0382166125f057604080518082018252601781527f6275726e20616d6f756e7420657863656564732063617000000000000000000060208201529054613bcb918390612f39565b60405550505050565b600054610100900460ff1680613bed5750613bed61385f565b80613bfb575060005460ff16155b613c365760405162461bcd60e51b815260040180806020018281038252602e815260200180614128602e913960400191505060405180910390fd5b600054610100900460ff16158015613c61576000805460ff1961ff0019909116610100171660011790555b801561128f576000805461ff001916905550565b600054610100900460ff1680613c8e5750613c8e61385f565b80613c9c575060005460ff16155b613cd75760405162461bcd60e51b815260040180806020018281038252602e815260200180614128602e913960400191505060405180910390fd5b600054610100900460ff16158015613d02576000805460ff1961ff0019909116610100171660011790555b8251613d15906004906020860190613eb1565b508151613d29906005906020850190613eb1565b506006805460ff191660121790558015611a74576000805461ff0019169055505050565b600054610100900460ff1680613d665750613d6661385f565b80613d74575060005460ff16155b613daf5760405162461bcd60e51b815260040180806020018281038252602e815260200180614128602e913960400191505060405180910390fd5b600054610100900460ff16158015613dda576000805460ff1961ff0019909116610100171660011790555b6000613de461261c565b6000805462010000600160b01b031916620100006001600160a01b038416908102919091178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561128f576000805461ff001916905550565b60008183613e9b5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612f8d578181015183820152602001612f75565b506000838581613ea757fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613ef257805160ff1916838001178555613f1f565b82800160010185558215613f1f579182015b82811115613f1f578251825591602001919060010190613f04565b50613f2b929150613f2f565b5090565b5b80821115613f2b5760008155600101613f3056fe4d546f6b656e4552433737373a2073656e6420746f20746865207a65726f20616464726573734552433737373a20617070726f76652066726f6d20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433737373a206275726e2066726f6d20746865207a65726f20616464726573734552433737373a20617574686f72697a696e672073656c66206173206f70657261746f724d546f6b656e4552433737373a207472616e7366657220616d6f756e7420657863656564732062616c616e63654552433737373a207265766f6b696e672073656c66206173206f70657261746f724d546f6b656e4552433737373a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636553444f3a207472616e7366657220746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433737373a20746f6b656e20726563697069656e7420636f6e747261637420686173206e6f20696d706c656d656e74657220666f7220455243373737546f6b656e73526563697069656e74436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4d546f6b656e4552433737373a2073656e642066726f6d20746865207a65726f20616464726573734d546f6b656e4552433737373a207472616e736665722066726f6d20746865207a65726f20616464726573734552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f7220666f7220686f6c6465724d546f6b656e4552433737373a207472616e7366657220746f20746865207a65726f2061646472657373436f6e747261637447756172643a206f6e6520626c6f636b2c206f6e652066756e6374696f6e4552433737373a206275726e20616d6f756e7420657863656564732062616c616e63654552433737373a20617070726f766520746f20746865207a65726f2061646472657373a2646970667358221220b9cbf8a280941f8e3ab8744cb405c8abf392ff5120fde88c7e83d818e99aba4a64736f6c634300060c0033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106103ae5760003560e01c80636409de78116101f4578063af9549e01161011a578063da35a26f116100ad578063f2fde38b1161007c578063f2fde38b14610b58578063fad8b32a14610b7e578063fc673c4f14610ba4578063fe9d930314610ce2576103ae565b8063da35a26f14610ad0578063dd62ed3e14610afc578063ee7e767114610b2a578063f17fdc4014610b50576103ae565b8063c7320509116100e9578063c732050914610a64578063cf456ae714610a6c578063d89135cd14610a9a578063d95b637114610aa2576103ae565b8063af9549e0146109f4578063bed9985014610a22578063c600e04114610a2a578063c6d69a3014610a47576103ae565b80638b93e49e116101925780639bd9bbc6116101615780639bd9bbc6146108e1578063a9059cbb1461099a578063abb4b1be146109c6578063ae4db919146109ce576103ae565b80638b93e49e146108a35780638da5cb5b146108ab578063959b8c3f146108b357806395d89b41146108d9576103ae565b8063715018a6116101ce578063715018a61461085f578063771a3a1d1461086757806378e979251461086f57806379cc679014610877576103ae565b80636409de78146107e5578063686166c01461081357806370a0823114610839576103ae565b806337339a16116102d95780634cfc4d3011610277578063556f0dc711610246578063556f0dc71461068c57806361a2a8c81461069457806362ad1b831461069c57806362d1c04c14610599576103ae565b80634cfc4d30146106745780634f337dd51461059957806351305eef1461067c578063547f121314610684576103ae565b806340c10f19116102b357806340c10f191461062357806342966c681461064f5780634390d2a81461066c57806344cdc45414610599576103ae565b806337339a16146105d75780633bba8eed146105995780633dd08c38146105fd576103ae565b8063189d165e11610351578063313ce56711610320578063313ce567146105a15780633197cbb6146105bf578063355274ea146105c7578063372500ab146105cf576103ae565b8063189d165e1461053e57806323b872dd1461055b5780632c07a624146105915780632e3367ce14610599576103ae565b806306e485381161038d57806306e485381461042157806306fdde0314610479578063095ea7b3146104f657806318160ddd14610536576103ae565b8062f380f4146103b357806302317601146103d75780630401731514610407575b600080fd5b6103bb610d8d565b604080516001600160a01b039092168252519081900360200190f35b610405600480360360408110156103ed57600080fd5b506001600160a01b0381351690602001351515610d9c565b005b61040f610e38565b60408051918252519081900360200190f35b610429610e3e565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561046557818101518382015260200161044d565b505050509050019250505060405180910390f35b610481610ea1565b6040805160208082528351818301528351919283929083019185019080838360005b838110156104bb5781810151838201526020016104a3565b50505050905090810190601f1680156104e85780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6105226004803603604081101561050c57600080fd5b506001600160a01b038135169060200135610f2e565b604080519115158252519081900360200190f35b61040f610f52565b6104056004803603602081101561055457600080fd5b5035610f58565b6105226004803603606081101561057157600080fd5b506001600160a01b03813581169160208101359091169060400135610ffd565b61040f611163565b61040f6111ad565b6105a96111b2565b6040805160ff9092168252519081900360200190f35b61040f6111bb565b61040f6111c3565b6104056111c9565b610405600480360360208110156105ed57600080fd5b50356001600160a01b0316611292565b6105226004803603602081101561061357600080fd5b50356001600160a01b0316611312565b6105226004803603604081101561063957600080fd5b506001600160a01b038135169060200135611327565b6104056004803603602081101561066557600080fd5b50356113c3565b6103bb6114b3565b61040f6114c2565b61040f6114ca565b61040f6114d0565b61040f61150e565b61040f611513565b610405600480360360a08110156106b257600080fd5b6001600160a01b03823581169260208101359091169160408201359190810190608081016060820135600160201b8111156106ec57600080fd5b8201836020820111156106fe57600080fd5b803590602001918460018302840111600160201b8311171561071f57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561077157600080fd5b82018360208201111561078357600080fd5b803590602001918460018302840111600160201b831117156107a457600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611519945050505050565b610405600480360360408110156107fb57600080fd5b506001600160a01b038135169060200135151561157b565b6104056004803603602081101561082957600080fd5b50356001600160a01b0316611604565b61040f6004803603602081101561084f57600080fd5b50356001600160a01b0316611684565b61040561169f565b61040f61174e565b61040f611754565b6104056004803603604081101561088d57600080fd5b506001600160a01b03813516906020013561175c565b61040f611887565b6103bb61188d565b610405600480360360208110156108c957600080fd5b50356001600160a01b03166118a2565b6104816119ee565b610405600480360360608110156108f757600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b81111561092657600080fd5b82018360208201111561093857600080fd5b803590602001918460018302840111600160201b8311171561095957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611a4f945050505050565b610522600480360360408110156109b057600080fd5b506001600160a01b038135169060200135611a79565b61040f611b61565b610405600480360360208110156109e457600080fd5b50356001600160a01b0316611b67565b61040560048036036040811015610a0a57600080fd5b506001600160a01b0381351690602001351515611c2b565b61040f611cb4565b61040560048036036020811015610a4057600080fd5b5035611cba565b61040560048036036020811015610a5d57600080fd5b5035611d5f565b6103bb611e04565b61040560048036036040811015610a8257600080fd5b506001600160a01b0381351690602001351515611e13565b61040f611f15565b61052260048036036040811015610ab857600080fd5b506001600160a01b0381358116916020013516611f1b565b61040560048036036040811015610ae657600080fd5b50803590602001356001600160a01b0316611fbd565b61040f60048036036040811015610b1257600080fd5b506001600160a01b0381358116916020013516612242565b61040560048036036020811015610b4057600080fd5b50356001600160a01b031661226d565b6103bb612331565b61040560048036036020811015610b6e57600080fd5b50356001600160a01b0316612340565b61040560048036036020811015610b9457600080fd5b50356001600160a01b031661244c565b61040560048036036080811015610bba57600080fd5b6001600160a01b0382351691602081013591810190606081016040820135600160201b811115610be957600080fd5b820183602082011115610bfb57600080fd5b803590602001918460018302840111600160201b83111715610c1c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b811115610c6e57600080fd5b820183602082011115610c8057600080fd5b803590602001918460018302840111600160201b83111715610ca157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612598945050505050565b61040560048036036040811015610cf857600080fd5b81359190810190604081016020820135600160201b811115610d1957600080fd5b820183602082011115610d2b57600080fd5b803590602001918460018302840111600160201b83111715610d4c57600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506125f6945050505050565b6042546001600160a01b031681565b610da461261c565b6000546201000090046001600160a01b03908116911614610dfa576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6001600160a01b039091166000908152604d60209081526040808320805494151560ff199586168117909155604e9092529091208054909216179055565b60475481565b60606007805480602002602001604051908101604052809291908181526020018280548015610e9657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610e78575b505050505090505b90565b60048054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e965780601f10610f0257610100808354040283529160200191610e96565b820191906000526020600020905b815481529060010190602001808311610f1057509395945050505050565b600080610f3961261c565b9050610f46818585612620565b60019150505b92915050565b60025490565b610f6061261c565b6000546201000090046001600160a01b03908116911614610fb6576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6103e8811115610ff8576040805162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b604482015290519081900360640190fd5b604955565b60006001600160a01b0383166110445760405162461bcd60e51b815260040180806020018281038252602a81526020018061421a602a913960400191505060405180910390fd5b6001600160a01b0384166110895760405162461bcd60e51b815260040180806020018281038252602c8152602001806141c2602c913960400191505060405180910390fd5b600061109361261c565b90506110c181868686604051806020016040528060008152506040518060200160405280600081525061270c565b60006110ef828787876040518060200160405280600081525060405180602001604052806000815250612945565b90506111298683611124876040518060600160405280602f815260200161404a602f913961111d8c89612242565b9190612f39565b612620565b6111578287878460405180602001604052806000815250604051806020016040528060008152506000612fd0565b50600195945050505050565b600042636635c5808111156111795750636635c5805b806047541061118c576000915050610e9e565b6047546111a7906000906111a1908490613260565b906132a2565b91505090565b600081565b60065460ff1690565b636635c58081565b60405481565b60006111d36114d0565b90506000811180156111ef57506042546001600160a01b031615155b1561122d57604254604080516020808201835260008083528351918201909352918252611228926001600160a01b0316918491906132fb565b426046555b611235611163565b905060008111801561125157506043546001600160a01b031615155b1561128f5760435460408051602080820183526000808352835191820190935291825261128a926001600160a01b0316918491906132fb565b426047555b50565b61129a61261c565b6000546201000090046001600160a01b039081169116146112f0576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b604280546001600160a01b0319166001600160a01b0392909216919091179055565b60416020526000908152604090205460ff1681565b3360009081526041602052604081205460ff16611375576040805162461bcd60e51b815260206004820152600760248201526610b6b4b73a32b960c91b604482015290519081900360640190fd5b600061138084611684565b90506113ac848460405180602001604052806000815250604051806020016040528060008152506132fb565b60006113b785611684565b91909111949350505050565b6113cb613520565b156114075760405162461bcd60e51b81526004018080602001828103825260268152602001806142446026913960400191505060405180910390fd5b61140f613541565b1561144b5760405162461bcd60e51b81526004018080602001828103825260268152602001806142446026913960400191505060405180910390fd5b61147533826040518060200160405280600081525060405180602001604052806000815250613562565b50436000908152603f602090815260408083203284529091528082208054600160ff1991821681179092553384529190922080549091169091179055565b6043546001600160a01b031681565b630568470081565b60445481565b600042636635c5808111156114e65750636635c5805b80604654106114f9576000915050610e9e565b6046546111a7906000906111a1908490613260565b600190565b60455481565b61152a61152461261c565b86611f1b565b6115655760405162461bcd60e51b815260040180806020018281038252602c8152602001806141ee602c913960400191505060405180910390fd5b6115748585858585600161379a565b5050505050565b61158361261c565b6000546201000090046001600160a01b039081169116146115d9576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152604e60205260409020805460ff1916911515919091179055565b61160c61261c565b6000546201000090046001600160a01b03908116911614611662576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b604880546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b031660009081526001602052604090205490565b6116a761261c565b6000546201000090046001600160a01b039081169116146116fd576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b60008054604051620100009091046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36000805462010000600160b01b0319169055565b604a5481565b6360cd7e8081565b611764613520565b156117a05760405162461bcd60e51b81526004018080602001828103825260268152602001806142446026913960400191505060405180910390fd5b6117a8613541565b156117e45760405162461bcd60e51b81526004018080602001828103825260268152602001806142446026913960400191505060405180910390fd5b61181e826117f061261c565b611124846040518060600160405280602481526020016141566024913961111d8861181961261c565b612242565b61184882826040518060200160405280600081525060405180602001604052806000815250613562565b5050436000908152603f602090815260408083203284529091528082208054600160ff1991821681179092553384529190922080549091169091179055565b604c5490565b6000546201000090046001600160a01b031690565b806001600160a01b03166118b461261c565b6001600160a01b031614156118fa5760405162461bcd60e51b8152600401808060200182810382526024815260200180613fd86024913960400191505060405180910390fd5b6001600160a01b03811660009081526008602052604090205460ff161561195d57600a600061192761261c565b6001600160a01b03908116825260208083019390935260409182016000908120918516815292529020805460ff191690556119a4565b60016009600061196b61261c565b6001600160a01b03908116825260208083019390935260409182016000908120918616815292529020805460ff19169115159190911790555b6119ac61261c565b6001600160a01b0316816001600160a01b03167ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f960405160405180910390a350565b60058054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610e965780601f10610f0257610100808354040283529160200191610e96565b611a74611a5a61261c565b84848460405180602001604052806000815250600161379a565b505050565b60006001600160a01b038316611ac05760405162461bcd60e51b81526004018080602001828103825260218152602001806140796021913960400191505060405180910390fd5b6000611aca61261c565b9050611af881828686604051806020016040528060008152506040518060200160405280600081525061270c565b6000611b26828387876040518060200160405280600081525060405180602001604052806000815250612945565b9050611b568283878460405180602001604052806000815250604051806020016040528060008152506000612fd0565b506001949350505050565b60465481565b611b6f61261c565b6000546201000090046001600160a01b03908116911614611bc5576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6001600160a01b038116611c09576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b604380546001600160a01b0319166001600160a01b0392909216919091179055565b611c3361261c565b6000546201000090046001600160a01b03908116911614611c89576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152604d60205260409020805460ff1916911515919091179055565b60495481565b611cc261261c565b6000546201000090046001600160a01b03908116911614611d18576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6103e8811115611d5a576040805162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b604482015290519081900360640190fd5b604455565b611d6761261c565b6000546201000090046001600160a01b03908116911614611dbd576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6103e8811115611dff576040805162461bcd60e51b81526020600482015260086024820152670e8dede40d0d2ced60c31b604482015290519081900360640190fd5b604a55565b604b546001600160a01b031681565b611e1b61261c565b6000546201000090046001600160a01b03908116911614611e71576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6001600160a01b038216611eb5576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6001600160a01b038216600081815260416020908152604091829020805460ff1916851515908117909155825190815291517f279360e293bcf8120adefa5fb6f669c774022ed25c09e099edd1818d155c57b69281900390910190a25050565b60035490565b6000816001600160a01b0316836001600160a01b03161480611f8657506001600160a01b03831660009081526008602052604090205460ff168015611f8657506001600160a01b038083166000908152600a602090815260408083209387168352929052205460ff16155b80611fb657506001600160a01b0380831660009081526009602090815260408083209387168352929052205460ff165b9392505050565b600054610100900460ff1680611fd65750611fd661385f565b80611fe4575060005460ff16155b61201f5760405162461bcd60e51b815260040180806020018281038252602e815260200180614128602e913960400191505060405180910390fd5b600054610100900460ff1615801561204a576000805460ff1961ff0019909116610100171660011790555b61209a6040518060400160405280601081526020016f706f6c796575726f2e66696e616e636560801b815250604051806040016040528060048152602001631090531360e21b8152506001613865565b6001600160a01b0382166120de576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6040839055604b80546001600160a01b0384166001600160a01b031991821617909155604380548216339081179091556048805483168217909216179055600260498190556000604a81905560036044556045919091556360cd7e806046819055604755600190604d9061215061261c565b6001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055506001604e600061219561261c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790559086168152604d8352818120805485166001908117909155604e90935220805490921617905561222c6121f461261c565b6122076000670de0b6b3a7640000613a6a565b60405180602001604052806000815250604051806020016040528060008152506132fb565b8015611a74576000805461ff0019169055505050565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b61227561261c565b6000546201000090046001600160a01b039081169116146122cb576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6001600160a01b03811661230f576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b604b80546001600160a01b0319166001600160a01b0392909216919091179055565b6048546001600160a01b031681565b61234861261c565b6000546201000090046001600160a01b0390811691161461239e576040805162461bcd60e51b815260206004820181905260248201526000805160206140bb833981519152604482015290519081900360640190fd5b6001600160a01b0381166123e35760405162461bcd60e51b8152600401808060200182810382526026815260200180613f906026913960400191505060405180910390fd5b600080546040516001600160a01b03808516936201000090930416917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b61245461261c565b6001600160a01b0316816001600160a01b031614156124a45760405162461bcd60e51b81526004018080602001828103825260218152602001806140296021913960400191505060405180910390fd5b6001600160a01b03811660009081526008602052604090205460ff1615612510576001600a60006124d361261c565b6001600160a01b03908116825260208083019390935260409182016000908120918616815292529020805460ff191691151591909117905561254e565b6009600061251c61261c565b6001600160a01b03908116825260208083019390935260409182016000908120918516815292529020805460ff191690555b61255661261c565b6001600160a01b0316816001600160a01b03167f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa160405160405180910390a350565b6125a96125a361261c565b85611f1b565b6125e45760405162461bcd60e51b815260040180806020018281038252602c8152602001806141ee602c913960400191505060405180910390fd5b6125f084848484613562565b50505050565b61261861260161261c565b838360405180602001604052806000815250613562565b5050565b3390565b6001600160a01b0383166126655760405162461bcd60e51b8152600401808060200182810382526025815260200180613f6b6025913960400191505060405180910390fd5b6001600160a01b0382166126aa5760405162461bcd60e51b815260040180806020018281038252602381526020018061428d6023913960400191505060405180910390fd5b6001600160a01b038084166000818152600b6020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b600c5460ff161561293d576040805163555ddc6560e11b81526001600160a01b03871660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe89560248201529051600091731820a4b7618bde71dce8cdc73aab6c95905fad249163aabbb8ca91604480820192602092909190829003018186803b15801561279b57600080fd5b505afa1580156127af573d6000803e3d6000fd5b505050506040513d60208110156127c557600080fd5b505190506001600160a01b0381161561293b57806001600160a01b03166375ab97828888888888886040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001856001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015612870578181015183820152602001612858565b50505050905090810190601f16801561289d5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156128d05781810151838201526020016128b8565b50505050905090810190601f1680156128fd5780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b15801561292257600080fd5b505af1158015612936573d6000803e3d6000fd5b505050505b505b505050505050565b6001600160a01b0385166000908152604d6020526040812054849060ff1615801561298957506001600160a01b0386166000908152604e602052604090205460ff16155b15612d3757604a548015612ae65760006129af6127106129a989856132a2565b90613ac4565b604b546040805160608101909152602d8082529293506001600160a01b03909116916129ff918491613ffc60208301396001600160a01b038d166000908152600160205260409020549190612f39565b6001600160a01b03808c166000908152600160205260408082209390935590831681522054612a2e9083613a6a565b6001600160a01b038216600090815260016020526040902055612a518483613260565b604c54909450612a619083613a6a565b604c55604080516001600160a01b038381168252602082018590528251908d16927f3518075fae16f1bca7d9a1f28fede590b3ee4854c3c0bb4c5259b4ed62aa1674928290030190a2806001600160a01b03168a6001600160a01b031660008051602061417a833981519152846040518082815260200191505060405180910390a350505b506049546000908015612b3c57612b036127106129a989846132a2565b9150612b2f89836040518060200160405280600081525060405180602001604052806000815250613562565b612b398383613260565b92505b50506044548015612c39576000612b596127106129a989856132a2565b6048546040805160608101909152602d8082529293506001600160a01b0390911691612ba9918491613ffc60208301396001600160a01b038d166000908152600160205260409020549190612f39565b6001600160a01b03808c166000908152600160205260408082209390935590831681522054612bd89083613a6a565b6001600160a01b038216600090815260016020526040902055612bfb8483613260565b9350806001600160a01b03168a6001600160a01b031660008051602061417a833981519152846040518082815260200191505060405180910390a350505b506045548015612d35576000612c556127106129a989856132a2565b6043546040805160608101909152602d8082529293506001600160a01b0390911691612ca5918491613ffc60208301396001600160a01b038d166000908152600160205260409020549190612f39565b6001600160a01b03808c166000908152600160205260408082209390935590831681522054612cd49083613a6a565b6001600160a01b038216600090815260016020526040902055612cf78483613260565b9350806001600160a01b03168a6001600160a01b031660008051602061417a833981519152846040518082815260200191505060405180910390a350505b505b612d74816040518060600160405280602d8152602001613ffc602d91396001600160a01b038a166000908152600160205260409020549190612f39565b6001600160a01b038089166000908152600160205260408082209390935590881681522054612da39082613a6a565b60016000886001600160a01b03166001600160a01b0316815260200190815260200160002081905550809150856001600160a01b0316876001600160a01b0316896001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987848888604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b83811015612e58578181015183820152602001612e40565b50505050905090810190601f168015612e855780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b83811015612eb8578181015183820152602001612ea0565b50505050905090810190601f168015612ee55780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a4856001600160a01b0316876001600160a01b031660008051602061417a833981519152836040518082815260200191505060405180910390a3509695505050505050565b60008184841115612fc85760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612f8d578181015183820152602001612f75565b50505050905090810190601f168015612fba5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600c5460ff161561293b576040805163555ddc6560e11b81526001600160a01b03871660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b60248201529051600091731820a4b7618bde71dce8cdc73aab6c95905fad249163aabbb8ca91604480820192602092909190829003018186803b15801561305f57600080fd5b505afa158015613073573d6000803e3d6000fd5b505050506040513d602081101561308957600080fd5b505190506001600160a01b0381161561320257806001600160a01b03166223de298989898989896040518763ffffffff1660e01b815260040180876001600160a01b03168152602001866001600160a01b03168152602001856001600160a01b031681526020018481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561313357818101518382015260200161311b565b50505050905090810190601f1680156131605780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561319357818101518382015260200161317b565b50505050905090810190601f1680156131c05780820380516001836020036101000a031916815260200191505b5098505050505050505050600060405180830381600087803b1580156131e557600080fd5b505af11580156131f9573d6000803e3d6000fd5b50505050613256565b81156132565761321a866001600160a01b0316613b06565b156132565760405162461bcd60e51b815260040180806020018281038252604d8152602001806140db604d913960600191505060405180910390fd5b5050505050505050565b6000611fb683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612f39565b6000826132b157506000610f4c565b828202828482816132be57fe5b0414611fb65760405162461bcd60e51b815260040180806020018281038252602181526020018061409a6021913960400191505060405180910390fd5b6001600160a01b038416613356576040805162461bcd60e51b815260206004820181905260248201527f4552433737373a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b600061336061261c565b905061336f8160008787613b0c565b60025461337c9085613a6a565b6002556001600160a01b0385166000908152600160205260409020546133a29085613a6a565b6001600160a01b0386166000908152600160205260408120919091556133ce9082908787878784612fd0565b846001600160a01b0316816001600160a01b03167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d868686604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b8381101561344d578181015183820152602001613435565b50505050905090810190601f16801561347a5780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b838110156134ad578181015183820152602001613495565b50505050905090810190601f1680156134da5780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a36040805185815290516001600160a01b0387169160009160008051602061417a8339815191529181900360200190a35050505050565b436000908152603f6020908152604080832032845290915290205460ff1690565b436000908152603f6020908152604080832033845290915290205460ff1690565b6001600160a01b0384166135a75760405162461bcd60e51b8152600401808060200182810382526022815260200180613fb66022913960400191505060405180910390fd5b60006135b161261c565b90506135c08186600087613b0c565b6135cf8186600087878761270c565b61360c8460405180606001604052806023815260200161426a602391396001600160a01b0388166000908152600160205260409020549190612f39565b6001600160a01b0386166000908152600160205260409020556002546136329085613260565b6002556003546136429085613a6a565b600381905550846001600160a01b0316816001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098868686604051808481526020018060200180602001838103835285818151815260200191508051906020019080838360005b838110156136c75781810151838201526020016136af565b50505050905090810190601f1680156136f45780820380516001836020036101000a031916815260200191505b50838103825284518152845160209182019186019080838360005b8381101561372757818101518382015260200161370f565b50505050905090810190601f1680156137545780820380516001836020036101000a031916815260200191505b509550505050505060405180910390a36040805185815290516000916001600160a01b0388169160008051602061417a8339815191529181900360200190a35050505050565b6001600160a01b0386166137df5760405162461bcd60e51b815260040180806020018281038252602881526020018061419a6028913960400191505060405180910390fd5b6001600160a01b0385166138245760405162461bcd60e51b8152600401808060200182810382526026815260200180613f456026913960400191505060405180910390fd5b600061382e61261c565b905061383e81888888888861270c565b600061384e828989898989612945565b905061325682898984898989612fd0565b303b1590565b600054610100900460ff168061387e575061387e61385f565b8061388c575060005460ff16155b6138c75760405162461bcd60e51b815260040180806020018281038252602e815260200180614128602e913960400191505060405180910390fd5b600054610100900460ff161580156138f2576000805460ff1961ff0019909116610100171660011790555b6138fa613bd4565b6139048484613c75565b61390c613d4d565b600c805460ff1916831515179081905560ff1615613a5357604080516329965a1d60e01b815230600482018190527fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce2177054602483015260448201529051731820a4b7618bde71dce8cdc73aab6c95905fad24916329965a1d91606480830192600092919082900301818387803b1580156139a357600080fd5b505af11580156139b7573d6000803e3d6000fd5b5050604080516329965a1d60e01b815230600482018190527faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a602483015260448201529051731820a4b7618bde71dce8cdc73aab6c95905fad2493506329965a1d9250606480830192600092919082900301818387803b158015613a3a57600080fd5b505af1158015613a4e573d6000803e3d6000fd5b505050505b80156125f0576000805461ff001916905550505050565b600082820183811015611fb6576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000611fb683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613e4c565b3b151590565b613b18848484846125f0565b6001600160a01b038316613b7d57604054613b3b82613b35610f52565b90613a6a565b1115613b7d576040805162461bcd60e51b815260206004820152600c60248201526b18d85c08195e18d95959195960a21b604482015290519081900360640190fd5b6001600160a01b0382166125f057604080518082018252601781527f6275726e20616d6f756e7420657863656564732063617000000000000000000060208201529054613bcb918390612f39565b60405550505050565b600054610100900460ff1680613bed5750613bed61385f565b80613bfb575060005460ff16155b613c365760405162461bcd60e51b815260040180806020018281038252602e815260200180614128602e913960400191505060405180910390fd5b600054610100900460ff16158015613c61576000805460ff1961ff0019909116610100171660011790555b801561128f576000805461ff001916905550565b600054610100900460ff1680613c8e5750613c8e61385f565b80613c9c575060005460ff16155b613cd75760405162461bcd60e51b815260040180806020018281038252602e815260200180614128602e913960400191505060405180910390fd5b600054610100900460ff16158015613d02576000805460ff1961ff0019909116610100171660011790555b8251613d15906004906020860190613eb1565b508151613d29906005906020850190613eb1565b506006805460ff191660121790558015611a74576000805461ff0019169055505050565b600054610100900460ff1680613d665750613d6661385f565b80613d74575060005460ff16155b613daf5760405162461bcd60e51b815260040180806020018281038252602e815260200180614128602e913960400191505060405180910390fd5b600054610100900460ff16158015613dda576000805460ff1961ff0019909116610100171660011790555b6000613de461261c565b6000805462010000600160b01b031916620100006001600160a01b038416908102919091178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350801561128f576000805461ff001916905550565b60008183613e9b5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315612f8d578181015183820152602001612f75565b506000838581613ea757fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10613ef257805160ff1916838001178555613f1f565b82800160010185558215613f1f579182015b82811115613f1f578251825591602001919060010190613f04565b50613f2b929150613f2f565b5090565b5b80821115613f2b5760008155600101613f3056fe4d546f6b656e4552433737373a2073656e6420746f20746865207a65726f20616464726573734552433737373a20617070726f76652066726f6d20746865207a65726f20616464726573734f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433737373a206275726e2066726f6d20746865207a65726f20616464726573734552433737373a20617574686f72697a696e672073656c66206173206f70657261746f724d546f6b656e4552433737373a207472616e7366657220616d6f756e7420657863656564732062616c616e63654552433737373a207265766f6b696e672073656c66206173206f70657261746f724d546f6b656e4552433737373a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636553444f3a207472616e7366657220746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433737373a20746f6b656e20726563697069656e7420636f6e747261637420686173206e6f20696d706c656d656e74657220666f7220455243373737546f6b656e73526563697069656e74436f6e747261637420696e7374616e63652068617320616c7265616479206265656e20696e697469616c697a656445524332303a206275726e20616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4d546f6b656e4552433737373a2073656e642066726f6d20746865207a65726f20616464726573734d546f6b656e4552433737373a207472616e736665722066726f6d20746865207a65726f20616464726573734552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f7220666f7220686f6c6465724d546f6b656e4552433737373a207472616e7366657220746f20746865207a65726f2061646472657373436f6e747261637447756172643a206f6e6520626c6f636b2c206f6e652066756e6374696f6e4552433737373a206275726e20616d6f756e7420657863656564732062616c616e63654552433737373a20617070726f766520746f20746865207a65726f2061646472657373a2646970667358221220b9cbf8a280941f8e3ab8744cb405c8abf392ff5120fde88c7e83d818e99aba4a64736f6c634300060c0033
Deployed Bytecode Sourcemap
51599:12879:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52448:28;;;:::i;:::-;;;;-1:-1:-1;;;;;52448:28:0;;;;;;;;;;;;;;56028:192;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;56028:192:0;;;;;;;;;;:::i;:::-;;52633:45;;;:::i;:::-;;;;;;;;;;;;;;;;39624:124;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35699:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41232:193;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;41232:193:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;36500:117;;;:::i;54828:157::-;;;;;;;;;;;;;;;;-1:-1:-1;54828:157:0;;:::i;57658:763::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;57658:763:0;;;;;;;;;;;;;;;;;:::i;63624:285::-;;;:::i;52352:87::-;;;:::i;36140:83::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;52174:62;;;:::i;51749:18::-;;;:::i;63996:479::-;;;:::i;54698:118::-;;;;;;;;;;;;;;;;-1:-1:-1;54698:118:0;-1:-1:-1;;;;;54698:118:0;;:::i;51776:38::-;;;;;;;;;;;;;;;;-1:-1:-1;51776:38:0;-1:-1:-1;;;;;51776:38:0;;:::i;56437:296::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;56437:296:0;;;;;;;;:::i;56741:106::-;;;;;;;;;;;;;;;;-1:-1:-1;56741:106:0;;:::i;52483:22::-;;;:::i;52061:52::-;;;:::i;52512:26::-;;;:::i;63307:309::-;;;:::i;36345:89::-;;;:::i;52545:23::-;;;:::i;39874:367::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39874:367:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39874:367:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39874:367:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39874:367:0;;;;;;;;-1:-1:-1;39874:367:0;;-1:-1:-1;;;;;39874:367:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39874:367:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39874:367:0;;-1:-1:-1;39874:367:0;;-1:-1:-1;;;;;39874:367:0:i;55889:131::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;55889:131:0;;;;;;;;;;:::i;55630:110::-;;;;;;;;;;;;;;;;-1:-1:-1;55630:110:0;-1:-1:-1;;;;;55630:110:0;;:::i;36821:144::-;;;;;;;;;;;;;;;;-1:-1:-1;36821:144:0;-1:-1:-1;;;;;36821:144:0;;:::i;34995:148::-;;;:::i;52748:22::-;;;:::i;52120:46::-;;;:::i;56855:257::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;56855:257:0;;;;;;;;:::i;56278:97::-;;;:::i;34353:79::-;;;:::i;38665:414::-;;;;;;;;;;;;;;;;-1:-1:-1;38665:414:0;-1:-1:-1;;;;;38665:414:0;;:::i;35852:96::-;;;:::i;37102:191::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;37102:191:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37102:191:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37102:191:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37102:191:0;;-1:-1:-1;37102:191:0;;-1:-1:-1;;;;;37102:191:0:i;57183:467::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;57183:467:0;;;;;;;;:::i;52575:51::-;;;:::i;55304:144::-;;;;;;;;;;;;;;;;-1:-1:-1;55304:144:0;-1:-1:-1;;;;;55304:144:0;;:::i;55746:135::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;55746:135:0;;;;;;;;;;:::i;52718:23::-;;;:::i;55453:172::-;;;;;;;;;;;;;;;;-1:-1:-1;55453:172:0;;:::i;54993:152::-;;;;;;;;;;;;;;;;-1:-1:-1;54993:152:0;;:::i;52811:22::-;;;:::i;54472:218::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;54472:218:0;;;;;;;;;;:::i;36625:91::-;;;:::i;38311:282::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38311:282:0;;;;;;;;;;:::i;53580:884::-;;;;;;;;;;;;;;;;-1:-1:-1;53580:884:0;;;;;;-1:-1:-1;;;;;53580:884:0;;:::i;40942:145::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40942:145:0;;;;;;;;;;:::i;55153:144::-;;;;;;;;;;;;;;;;-1:-1:-1;55153:144:0;-1:-1:-1;;;;;55153:144:0;;:::i;52685:26::-;;;:::i;35298:244::-;;;;;;;;;;;;;;;;-1:-1:-1;35298:244:0;-1:-1:-1;;;;;35298:244:0;;:::i;39148:405::-;;;;;;;;;;;;;;;;-1:-1:-1;39148:405:0;-1:-1:-1;;;;;39148:405:0;;:::i;40369:325::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40369:325:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;40369:325:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;40369:325:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40369:325:0;;;;;;;;-1:-1:-1;40369:325:0;;-1:-1:-1;;;;;40369:325:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;40369:325:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40369:325:0;;-1:-1:-1;40369:325:0;;-1:-1:-1;;;;;40369:325:0:i;38122:121::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38122:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38122:121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38122:121:0;;-1:-1:-1;38122:121:0;;-1:-1:-1;;;;;38122:121:0:i;52448:28::-;;;-1:-1:-1;;;;;52448:28:0;;:::o;56028:192::-;34575:12;:10;:12::i;:::-;34565:6;;;;;-1:-1:-1;;;;;34565:6:0;;;:22;;;34557:67;;;;;-1:-1:-1;;;34557:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34557:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;56127:28:0;;::::1;;::::0;;;:18:::1;:28;::::0;;;;;;;:38;;;::::1;;-1:-1:-1::0;;56127:38:0;;::::1;::::0;::::1;::::0;;;56176:16:::1;:26:::0;;;;;;:36;;;;::::1;;::::0;;56028:192::o;52633:45::-;;;;:::o;39624:124::-;39682:16;39718:22;39711:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39711:29:0;;;;;;;;;;;;;;;;;;;;;;;39624:124;;:::o;35699:92::-;35778:5;35771:12;;;;;;;;-1:-1:-1;;35771:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35745:13;;35771:12;;35778:5;;35771:12;;35778:5;35771:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35771:12:0;;35699:92;-1:-1:-1;;;;;35699:92:0:o;41232:193::-;41306:4;41323:14;41340:12;:10;:12::i;:::-;41323:29;;41363:32;41372:6;41380:7;41389:5;41363:8;:32::i;:::-;41413:4;41406:11;;;41232:193;;;;;:::o;36500:117::-;36597:12;;36500:117;:::o;54828:157::-;34575:12;:10;:12::i;:::-;34565:6;;;;;-1:-1:-1;;;;;34565:6:0;;;:22;;;34557:67;;;;;-1:-1:-1;;;34557:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34557:67:0;;;;;;;;;;;;;;;54919:4:::1;54906:9;:17;;54898:38;;;::::0;;-1:-1:-1;;;54898:38:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;54898:38:0;;;;;;;;;;;;;::::1;;54957:8;:20:::0;54828:157::o;57658:763::-;57790:4;-1:-1:-1;;;;;57815:23:0;;57807:78;;;;-1:-1:-1;;;57807:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;57904:20:0;;57896:77;;;;-1:-1:-1;;;57896:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57986:15;58004:12;:10;:12::i;:::-;57986:30;;58029:61;58047:7;58056:6;58064:9;58075:6;58029:61;;;;;;;;;;;;;;;;;;;;;;;;:17;:61::i;:::-;58103:19;58125:49;58131:7;58140:6;58148:9;58159:6;58125:49;;;;;;;;;;;;;;;;;;;;;;;;:5;:49::i;:::-;58103:71;;58185:116;58194:6;58202:7;58211:89;58242:6;58211:89;;;;;;;;;;;;;;;;;:26;58221:6;58229:7;58211:9;:26::i;:::-;:30;:89;:30;:89::i;:::-;58185:8;:116::i;:::-;58314:75;58334:7;58343:6;58351:9;58362:11;58314:75;;;;;;;;;;;;;;;;;;;;;;;;58383:5;58314:19;:75::i;:::-;-1:-1:-1;58409:4:0;;57658:763;-1:-1:-1;;;;;57658:763:0:o;63624:285::-;63673:16;63717:15;52208:28;63747:14;;63743:34;;;-1:-1:-1;52208:28:0;63743:34;63814:4;63792:18;;:26;63788:40;;63827:1;63820:8;;;;;63788:40;63859:18;;63850:51;;51990:7;;63850:28;;:4;;:8;:28::i;:::-;:32;;:51::i;:::-;63839:62;;63624:285;;:::o;52352:87::-;51990:7;52352:87;:::o;36140:83::-;36206:9;;;;36140:83;:::o;52174:62::-;52208:28;52174:62;:::o;51749:18::-;;;;:::o;63996:479::-;64040:16;64059:24;:22;:24::i;:::-;64040:43;;64109:1;64098:8;:12;:43;;;;-1:-1:-1;64114:13:0;;-1:-1:-1;;;;;64114:13:0;:27;;64098:43;64094:171;;;64164:13;;64158:38;;;;;;;;;64164:13;64158:38;;;;;;;;;;;;;;;;-1:-1:-1;;;;;64164:13:0;;64179:8;;64158:38;:5;:38::i;:::-;64238:15;64211:24;:42;64094:171;64286:18;:16;:18::i;:::-;64275:29;;64330:1;64319:8;:12;:37;;;;-1:-1:-1;64335:7:0;;-1:-1:-1;;;;;64335:7:0;:21;;64319:37;64315:153;;;64379:7;;64373:32;;;;;;;;;64379:7;64373:32;;;;;;;;;;;;;;;;-1:-1:-1;;;;;64379:7:0;;64388:8;;64373:32;:5;:32::i;:::-;64441:15;64420:18;:36;64315:153;63996:479;:::o;54698:118::-;34575:12;:10;:12::i;:::-;34565:6;;;;;-1:-1:-1;;;;;34565:6:0;;;:22;;;34557:67;;;;;-1:-1:-1;;;34557:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34557:67:0;;;;;;;;;;;;;;;54778:13:::1;:30:::0;;-1:-1:-1;;;;;;54778:30:0::1;-1:-1:-1::0;;;;;54778:30:0;;;::::1;::::0;;;::::1;::::0;;54698:118::o;51776:38::-;;;;;;;;;;;;;;;:::o;56437:296::-;53426:10;56515:4;53419:18;;;:6;:18;;;;;;;;53411:38;;;;;-1:-1:-1;;;53411:38:0;;;;;;;;;;;;-1:-1:-1;;;53411:38:0;;;;;;;;;;;;;;;56532:21:::1;56556;56566:10;56556:9;:21::i;:::-;56532:45;;56588:34;56594:10;56606:7;56588:34;;;;;;;;;;;::::0;::::1;;;;;;;;;;;::::0;:5:::1;:34::i;:::-;56633:20;56656:21;56666:10;56656:9;:21::i;:::-;56697:28:::0;;;::::1;::::0;56437:296;-1:-1:-1;;;;56437:296:0:o;56741:106::-;50970:28;:26;:28::i;:::-;50969:29;50961:80;;;;-1:-1:-1;;;50961:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51061:28;:26;:28::i;:::-;51060:29;51052:80;;;;-1:-1:-1;;;51052:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56805:34:::1;56811:10;56823:7;56805:34;;;;;;;;;;;::::0;::::1;;;;;;;;;;;::::0;:5:::1;:34::i;:::-;-1:-1:-1::0;51167:12:0;51159:21;;;;:7;:21;;;;;;;;51181:9;51159:32;;;;;;;;:39;;51194:4;-1:-1:-1;;51159:39:0;;;;;;;;51231:10;51209:33;;;;;;:40;;;;;;;;;;56741:106::o;52483:22::-;;;-1:-1:-1;;;;;52483:22:0;;:::o;52061:52::-;52104:9;52061:52;:::o;52512:26::-;;;;:::o;63307:309::-;63362:16;63406:15;52208:28;63436:14;;63432:34;;;-1:-1:-1;52208:28:0;63432:34;63509:4;63481:24;;:32;63477:46;;63522:1;63515:8;;;;;63477:46;63554:24;;63545:63;;51925:7;;63545:34;;:4;;:8;:34::i;36345:89::-;36425:1;36345:89;:::o;52545:23::-;;;;:::o;39874:367::-;40080:35;40094:12;:10;:12::i;:::-;40108:6;40080:13;:35::i;:::-;40072:92;;;;-1:-1:-1;;;40072:92:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40175:58;40181:6;40189:9;40200:6;40208:4;40214:12;40228:4;40175:5;:58::i;:::-;39874:367;;;;;:::o;55889:131::-;34575:12;:10;:12::i;:::-;34565:6;;;;;-1:-1:-1;;;;;34565:6:0;;;:22;;;34557:67;;;;;-1:-1:-1;;;34557:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34557:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;55976:26:0;;;::::1;;::::0;;;:16:::1;:26;::::0;;;;:36;;-1:-1:-1;;55976:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;55889:131::o;55630:110::-;34575:12;:10;:12::i;:::-;34565:6;;;;;-1:-1:-1;;;;;34565:6:0;;;:22;;;34557:67;;;;;-1:-1:-1;;;34557:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34557:67:0;;;;;;;;;;;;;;;55706:11:::1;:26:::0;;-1:-1:-1;;;;;;55706:26:0::1;-1:-1:-1::0;;;;;55706:26:0;;;::::1;::::0;;;::::1;::::0;;55630:110::o;36821:144::-;-1:-1:-1;;;;;36935:22:0;36908:7;36935:22;;;:9;:22;;;;;;;36821:144::o;34995:148::-;34575:12;:10;:12::i;:::-;34565:6;;;;;-1:-1:-1;;;;;34565:6:0;;;:22;;;34557:67;;;;;-1:-1:-1;;;34557:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34557:67:0;;;;;;;;;;;;;;;35102:1:::1;35086:6:::0;;35065:40:::1;::::0;35086:6;;;::::1;-1:-1:-1::0;;;;;35086:6:0::1;::::0;35065:40:::1;::::0;35102:1;;35065:40:::1;35133:1;35116:19:::0;;-1:-1:-1;;;;;;35116:19:0::1;::::0;;34995:148::o;52748:22::-;;;;:::o;52120:46::-;52156:10;52120:46;:::o;56855:257::-;50970:28;:26;:28::i;:::-;50969:29;50961:80;;;;-1:-1:-1;;;50961:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51061:28;:26;:28::i;:::-;51060:29;51052:80;;;;-1:-1:-1;;;51052:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56941:120:::1;56950:8;56960:12;:10;:12::i;:::-;56974:86;57012:7;56974:86;;;;;;;;;;;;;;;;;:33;56984:8;56994:12;:10;:12::i;:::-;56974:9;:33::i;56941:120::-;57072:32;57078:8;57088:7;57072:32;;;;;;;;;;;::::0;::::1;;;;;;;;;;;::::0;:5:::1;:32::i;:::-;-1:-1:-1::0;;51167:12:0;51159:21;;;;:7;:21;;;;;;;;51181:9;51159:32;;;;;;;;:39;;51194:4;-1:-1:-1;;51159:39:0;;;;;;;;51231:10;51209:33;;;;;;:40;;;;;;;;;;56855:257::o;56278:97::-;56353:14;;56278:97;:::o;34353:79::-;34391:7;34418:6;;;;-1:-1:-1;;;;;34418:6:0;;34353:79::o;38665:414::-;38761:8;-1:-1:-1;;;;;38745:24:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;38745:24:0;;;38737:73;;;;-1:-1:-1;;;38737:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38827:27:0;;;;;;:17;:27;;;;;;;;38823:189;;;38878:24;:38;38903:12;:10;:12::i;:::-;-1:-1:-1;;;;;38878:38:0;;;;;;;;;;;;;;;;;-1:-1:-1;38878:38:0;;;:48;;;;;;;;;38871:55;;-1:-1:-1;;38871:55:0;;;38823:189;;;38996:4;38959:10;:24;38970:12;:10;:12::i;:::-;-1:-1:-1;;;;;38959:24:0;;;;;;;;;;;;;;;;;-1:-1:-1;38959:24:0;;;:34;;;;;;;;;:41;;-1:-1:-1;;38959:41:0;;;;;;;;;;38823:189;39058:12;:10;:12::i;:::-;-1:-1:-1;;;;;39029:42:0;39048:8;-1:-1:-1;;;;;39029:42:0;;;;;;;;;;;38665:414;:::o;35852:96::-;35933:7;35926:14;;;;;;;;-1:-1:-1;;35926:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35900:13;;35926:14;;35933:7;;35926:14;;35933:7;35926:14;;;;;;;;;;;;;;;;;;;;;;;;37102:191;37231:54;37237:12;:10;:12::i;:::-;37251:9;37262:6;37270:4;37231:54;;;;;;;;;;;;37280:4;37231:5;:54::i;:::-;37102:191;;;:::o;57183:467::-;57261:4;-1:-1:-1;;;;;57286:23:0;;57278:69;;;;-1:-1:-1;;;57278:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57360:12;57375;:10;:12::i;:::-;57360:27;;57400:56;57418:4;57424;57430:9;57441:6;57400:56;;;;;;;;;;;;;;;;;;;;;;;;:17;:56::i;:::-;57469:19;57491:44;57497:4;57503;57509:9;57520:6;57491:44;;;;;;;;;;;;;;;;;;;;;;;;:5;:44::i;:::-;57469:66;;57548:70;57568:4;57574;57580:9;57591:11;57548:70;;;;;;;;;;;;;;;;;;;;;;;;57612:5;57548:19;:70::i;:::-;-1:-1:-1;57638:4:0;;57183:467;-1:-1:-1;;;;57183:467:0:o;52575:51::-;;;;:::o;55304:144::-;34575:12;:10;:12::i;:::-;34565:6;;;;;-1:-1:-1;;;;;34565:6:0;;;:22;;;34557:67;;;;;-1:-1:-1;;;34557:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34557:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;55380:22:0;::::1;55372:39;;;::::0;;-1:-1:-1;;;55372:39:0;;::::1;;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;;;55372:39:0;;;;;;;;;;;;;::::1;;55422:7;:18:::0;;-1:-1:-1;;;;;;55422:18:0::1;-1:-1:-1::0;;;;;55422:18:0;;;::::1;::::0;;;::::1;::::0;;55304:144::o;55746:135::-;34575:12;:10;:12::i;:::-;34565:6;;;;;-1:-1:-1;;;;;34565:6:0;;;:22;;;34557:67;;;;;-1:-1:-1;;;34557:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34557:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;55835:28:0;;;::::1;;::::0;;;:18:::1;:28;::::0;;;;:38;;-1:-1:-1;;55835:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;55746:135::o;52718:23::-;;;;:::o;55453:172::-;34575:12;:10;:12::i;:::-;34565:6;;;;;-1:-1:-1;;;;;34565:6:0;;;:22;;;34557:67;;;;;-1:-1:-1;;;34557:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34557:67:0;;;;;;;;;;;;;;;55553:4:::1;55537:12;:20;;55529:41;;;::::0;;-1:-1:-1;;;55529:41:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;55529:41:0;;;;;;;;;;;;;::::1;;55591:11;:26:::0;55453:172::o;54993:152::-;34575:12;:10;:12::i;:::-;34565:6;;;;;-1:-1:-1;;;;;34565:6:0;;;:22;;;34557:67;;;;;-1:-1:-1;;;34557:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34557:67:0;;;;;;;;;;;;;;;55081:4:::1;55069:8;:16;;55061:37;;;::::0;;-1:-1:-1;;;55061:37:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;55061:37:0;;;;;;;;;;;;;::::1;;55119:7;:18:::0;54993:152::o;52811:22::-;;;-1:-1:-1;;;;;52811:22:0;;:::o;54472:218::-;34575:12;:10;:12::i;:::-;34565:6;;;;;-1:-1:-1;;;;;34565:6:0;;;:22;;;34557:67;;;;;-1:-1:-1;;;34557:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34557:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;54563:22:0;::::1;54555:39;;;::::0;;-1:-1:-1;;;54555:39:0;;::::1;;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;;;54555:39:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;54605:16:0;::::1;;::::0;;;:6:::1;:16;::::0;;;;;;;;:28;;-1:-1:-1;;54605:28:0::1;::::0;::::1;;::::0;;::::1;::::0;;;54649:33;;;;;;;::::1;::::0;;;;;;;;::::1;54472:218:::0;;:::o;36625:91::-;36696:12;;36625:91;:::o;38311:282::-;38403:4;38452:11;-1:-1:-1;;;;;38440:23:0;:8;-1:-1:-1;;;;;38440:23:0;;:108;;;-1:-1:-1;;;;;;38468:27:0;;;;;;:17;:27;;;;;;;;:79;;;;-1:-1:-1;;;;;;38500:37:0;;;;;;;:24;:37;;;;;;;;:47;;;;;;;;;;;;38499:48;38468:79;38440:145;;;-1:-1:-1;;;;;;38552:23:0;;;;;;;:10;:23;;;;;;;;:33;;;;;;;;;;;;38440:145;38420:165;38311:282;-1:-1:-1;;;38311:282:0:o;53580:884::-;31925:12;;;;;;;;:31;;;31941:15;:13;:15::i;:::-;31925:47;;;-1:-1:-1;31961:11:0;;;;31960:12;31925:47;31917:106;;;;-1:-1:-1;;;31917:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32036:19;32059:12;;;;;;32058:13;32082:99;;;;32117:12;:19;;-1:-1:-1;;;;32117:19:0;;;;;32151:18;32132:4;32151:18;;;32082:99;53661:47:::1;;;;;;;;;;;;;;-1:-1:-1::0;;;53661:47:0::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;53661:47:0::1;;::::0;53703:4:::1;53661:13;:47::i;:::-;-1:-1:-1::0;;;;;53727:22:0;::::1;53719:39;;;::::0;;-1:-1:-1;;;53719:39:0;;::::1;;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;;;53719:39:0;;;;;;;;;;;;;::::1;;53769:3;:10:::0;;;53790:7:::1;:18:::0;;-1:-1:-1;;;;;53790:18:0;::::1;-1:-1:-1::0;;;;;;53790:18:0;;::::1;;::::0;;;53819:7:::1;:20:::0;;;::::1;53829:10;53819:20:::0;;::::1;::::0;;;53850:11:::1;:24:::0;;;::::1;::::0;::::1;53885::::0;;::::1;;::::0;;53931:1:::1;53920:8;:12:::0;;;53790:7:::1;53951;:11:::0;;;-1:-1:-1;54003:11:0::1;:15:::0;54036:8:::1;:12:::0;;;;52156:10:::1;54066:24;:36:::0;;;54113:18:::1;:30:::0;53790:18;;54154::::1;::::0;54173:12:::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;54154:32:0::1;-1:-1:-1::0;;;;;54154:32:0::1;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;54237:4;54204:16;:30;54221:12;:10;:12::i;:::-;-1:-1:-1::0;;;;;54204:30:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;54204:30:0;;;:37;;;::::1;;-1:-1:-1::0;;54204:37:0;;::::1;;::::0;;54252:28;;::::1;::::0;;:18:::1;:28:::0;;;;;:35;;;::::1;54204:37:::0;54252:35;;::::1;::::0;;;54298:16:::1;:26:::0;;;;:33;;;;::::1;;::::0;;54342:56:::1;54348:12;:10;:12::i;:::-;54362:27;52045:7;54381;54362:18;:27::i;:::-;54342:56;;;;;;;;;;;::::0;::::1;;;;;;;;;;;::::0;:5:::1;:56::i;:::-;32211:14:::0;32207:67;;;32257:5;32242:20;;-1:-1:-1;;32242:20:0;;;53580:884;;;:::o;40942:145::-;-1:-1:-1;;;;;41051:19:0;;;41024:7;41051:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;40942:145::o;55153:144::-;34575:12;:10;:12::i;:::-;34565:6;;;;;-1:-1:-1;;;;;34565:6:0;;;:22;;;34557:67;;;;;-1:-1:-1;;;34557:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34557:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;55229:22:0;::::1;55221:39;;;::::0;;-1:-1:-1;;;55221:39:0;;::::1;;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;;;55221:39:0;;;;;;;;;;;;;::::1;;55271:7;:18:::0;;-1:-1:-1;;;;;;55271:18:0::1;-1:-1:-1::0;;;;;55271:18:0;;;::::1;::::0;;;::::1;::::0;;55153:144::o;52685:26::-;;;-1:-1:-1;;;;;52685:26:0;;:::o;35298:244::-;34575:12;:10;:12::i;:::-;34565:6;;;;;-1:-1:-1;;;;;34565:6:0;;;:22;;;34557:67;;;;;-1:-1:-1;;;34557:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;34557:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;35387:22:0;::::1;35379:73;;;;-1:-1:-1::0;;;35379:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35489:6;::::0;;35468:38:::1;::::0;-1:-1:-1;;;;;35468:38:0;;::::1;::::0;35489:6;;;::::1;;::::0;35468:38:::1;::::0;::::1;35517:6;:17:::0;;-1:-1:-1;;;;;35517:17:0;;::::1;::::0;::::1;-1:-1:-1::0;;;;;;35517:17:0;;::::1;::::0;;;::::1;::::0;;35298:244::o;39148:405::-;39237:12;:10;:12::i;:::-;-1:-1:-1;;;;;39225:24:0;:8;-1:-1:-1;;;;;39225:24:0;;;39217:70;;;;-1:-1:-1;;;39217:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;39304:27:0;;;;;;:17;:27;;;;;;;;39300:189;;;39399:4;39348:24;:38;39373:12;:10;:12::i;:::-;-1:-1:-1;;;;;39348:38:0;;;;;;;;;;;;;;;;;-1:-1:-1;39348:38:0;;;:48;;;;;;;;;:55;;-1:-1:-1;;39348:55:0;;;;;;;;;;39300:189;;;39443:10;:24;39454:12;:10;:12::i;:::-;-1:-1:-1;;;;;39443:24:0;;;;;;;;;;;;;;;;;-1:-1:-1;39443:24:0;;;:34;;;;;;;;;39436:41;;-1:-1:-1;;39436:41:0;;;39300:189;39532:12;:10;:12::i;:::-;-1:-1:-1;;;;;39506:39:0;39522:8;-1:-1:-1;;;;;39506:39:0;;;;;;;;;;;39148:405;:::o;40369:325::-;40548:36;40562:12;:10;:12::i;:::-;40576:7;40548:13;:36::i;:::-;40540:93;;;;-1:-1:-1;;;40540:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40644:42;40650:7;40659:6;40667:4;40673:12;40644:5;:42::i;:::-;40369:325;;;;:::o;38122:121::-;38198:37;38204:12;:10;:12::i;:::-;38218:6;38226:4;38198:37;;;;;;;;;;;;:5;:37::i;:::-;38122:121;;:::o;679:106::-;767:10;679:106;:::o;46871:375::-;-1:-1:-1;;;;;46999:20:0;;46991:70;;;;-1:-1:-1;;;46991:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47080:21:0;;47072:69;;;;-1:-1:-1;;;47072:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;47154:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:36;;;47206:32;;;;;;;;;;;;;;;;;46871:375;;;:::o;47730:555::-;47952:26;;;;47948:330;;;48017:78;;;-1:-1:-1;;;48017:78:0;;-1:-1:-1;;;;;48017:78:0;;;;;;30762:66;48017:78;;;;;;47995:19;;30226:42;;48017:41;;:78;;;;;;;;;;;;;;;30226:42;48017:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48017:78:0;;-1:-1:-1;;;;;;48114:25:0;;;48110:157;;48174:11;-1:-1:-1;;;;;48160:39:0;;48200:8;48210:4;48216:2;48220:6;48228:8;48238:12;48160:91;;;;;;;;;;;;;-1:-1:-1;;;;;48160:91:0;;;;;;-1:-1:-1;;;;;48160:91:0;;;;;;-1:-1:-1;;;;;48160:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;48160:91:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48110:157;47948:330;;47730:555;;;;;;:::o;60348:2951::-;-1:-1:-1;;;;;60636:24:0;;60562:19;60636:24;;;:18;:24;;;;;;60612:6;;60636:24;;60635:25;:50;;;;-1:-1:-1;;;;;;60665:20:0;;;;;;:16;:20;;;;;;;;60664:21;60635:50;60631:2349;;;60740:7;;60770:12;;60766:617;;60807:18;60828:31;60853:5;60828:20;:6;60839:8;60828:10;:20::i;:::-;:24;;:31::i;:::-;60901:7;;60949:80;;;;;;;;;;;;;60807:52;;-1:-1:-1;;;;;;60901:7:0;;;;60949:80;;60807:52;;60949:80;;;;;-1:-1:-1;;;;;60949:15:0;;;;;;:9;:15;;;;;;;:80;:19;:80::i;:::-;-1:-1:-1;;;;;60931:15:0;;;;;;;:9;:15;;;;;;:98;;;;61074:19;;;;;;;:35;;61098:10;61074:23;:35::i;:::-;-1:-1:-1;;;;;61052:19:0;;;;;;:9;:19;;;;;:57;61142:23;:7;61154:10;61142:11;:23::i;:::-;61205:14;;61132:33;;-1:-1:-1;61205:30:0;;61224:10;61205:18;:30::i;:::-;61188:14;:47;61263:36;;;-1:-1:-1;;;;;61263:36:0;;;;;;;;;;;;;;;;;;;;;;;;;61342:8;-1:-1:-1;;;;;61327:36:0;61336:4;-1:-1:-1;;;;;61327:36:0;-1:-1:-1;;;;;;;;;;;61352:10:0;61327:36;;;;;;;;;;;;;;;;;;60766:617;;;-1:-1:-1;61493:8:0;;61431:19;;61524:13;;61520:220;;61576:32;61602:5;61576:21;:6;61587:9;61576:10;:21::i;:32::-;61562:46;;61631:32;61637:4;61643:11;61631:32;;;;;;;;;;;;;;;;;;;;;;;;:5;:32::i;:::-;61696:24;:7;61708:11;61696;:24::i;:::-;61686:34;;61520:220;-1:-1:-1;;61812:11:0;;61846:16;;61842:531;;61887:22;61912:35;61941:5;61912:24;:6;61923:12;61912:10;:24::i;:35::-;61993:11;;62045:84;;;;;;;;;;;;;61887:60;;-1:-1:-1;;;;;;61993:11:0;;;;62045:84;;61887:60;;62045:84;;;;;-1:-1:-1;;;;;62045:15:0;;;;;;:9;:15;;;;;;;:84;:19;:84::i;:::-;-1:-1:-1;;;;;62027:15:0;;;;;;;:9;:15;;;;;;:102;;;;62178:23;;;;;;;:43;;62206:14;62178:27;:43::i;:::-;-1:-1:-1;;;;;62152:23:0;;;;;;:9;:23;;;;;:69;62254:27;:7;62266:14;62254:11;:27::i;:::-;62244:37;;62324:12;-1:-1:-1;;;;;62309:44:0;62318:4;-1:-1:-1;;;;;62309:44:0;-1:-1:-1;;;;;;;;;;;62338:14:0;62309:44;;;;;;;;;;;;;;;;;;61842:531;;;-1:-1:-1;62442:8:0;;62473:13;;62469:485;;62511:18;62532:32;62558:5;62532:21;:6;62543:9;62532:10;:21::i;:32::-;62606:7;;62654:80;;;;;;;;;;;;;62511:53;;-1:-1:-1;;;;;;62606:7:0;;;;62654:80;;62511:53;;62654:80;;;;;-1:-1:-1;;;;;62654:15:0;;;;;;:9;:15;;;;;;;:80;:19;:80::i;:::-;-1:-1:-1;;;;;62636:15:0;;;;;;;:9;:15;;;;;;:98;;;;62779:19;;;;;;;:35;;62803:10;62779:23;:35::i;:::-;-1:-1:-1;;;;;62757:19:0;;;;;;:9;:19;;;;;:57;62847:23;:7;62859:10;62847:11;:23::i;:::-;62837:33;;62913:8;-1:-1:-1;;;;;62898:36:0;62907:4;-1:-1:-1;;;;;62898:36:0;-1:-1:-1;;;;;;;;;;;62923:10:0;62898:36;;;;;;;;;;;;;;;;;;62469:485;;;60631:2349;;63010:77;63030:7;63010:77;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;63010:15:0;;;;;;:9;:15;;;;;;;:77;:19;:77::i;:::-;-1:-1:-1;;;;;62992:15:0;;;;;;;:9;:15;;;;;;:95;;;;63114:13;;;;;;;:26;;63132:7;63114:17;:26::i;:::-;63098:9;:13;63108:2;-1:-1:-1;;;;;63098:13:0;-1:-1:-1;;;;;63098:13:0;;;;;;;;;;;;:42;;;;63165:7;63151:21;;63212:2;-1:-1:-1;;;;;63190:58:0;63206:4;-1:-1:-1;;;;;63190:58:0;63195:9;-1:-1:-1;;;;;63190:58:0;;63216:7;63225:8;63235:12;63190:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;63190:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63279:2;-1:-1:-1;;;;;63264:27:0;63273:4;-1:-1:-1;;;;;63264:27:0;-1:-1:-1;;;;;;;;;;;63283:7:0;63264:27;;;;;;;;;;;;;;;;;;60348:2951;;;;;;;;;:::o;14054:226::-;14174:7;14210:12;14202:6;;;;14194:29;;;;-1:-1:-1;;;14194:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;14246:5:0;;;14054:226::o;48987:770::-;49246:26;;;;49242:508;;;49311:79;;;-1:-1:-1;;;49311:79:0;;-1:-1:-1;;;;;49311:79:0;;;;;;30940:66;49311:79;;;;;;49289:19;;30226:42;;49311:41;;:79;;;;;;;;;;;;;;;30226:42;49311:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49311:79:0;;-1:-1:-1;;;;;;49409:25:0;;;49405:334;;49472:11;-1:-1:-1;;;;;49455:44:0;;49500:8;49510:4;49516:2;49520:6;49528:8;49538:12;49455:96;;;;;;;;;;;;;-1:-1:-1;;;;;49455:96:0;;;;;;-1:-1:-1;;;;;49455:96:0;;;;;;-1:-1:-1;;;;;49455:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;49455:96:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49405:334;;;49577:19;49573:166;;;49626:15;:2;-1:-1:-1;;;;;49626:13:0;;:15::i;:::-;49625:16;49617:106;;;;-1:-1:-1;;;49617:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49242:508;48987:770;;;;;;;:::o;13615:136::-;13673:7;13700:43;13704:1;13707;13700:43;;;;;;;;;;;;;;;;;:3;:43::i;14539:471::-;14597:7;14842:6;14838:47;;-1:-1:-1;14872:1:0;14865:8;;14838:47;14909:5;;;14913:1;14909;:5;:1;14933:5;;;;;:10;14925:56;;;;-1:-1:-1;;;14925:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43127:738;-1:-1:-1;;;;;43304:21:0;;43296:66;;;;;-1:-1:-1;;;43296:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43375:16;43394:12;:10;:12::i;:::-;43375:31;;43419:59;43440:8;43458:1;43462:7;43471:6;43419:20;:59::i;:::-;43541:12;;:24;;43558:6;43541:16;:24::i;:::-;43526:12;:39;-1:-1:-1;;;;;43597:18:0;;;;;;:9;:18;;;;;;:30;;43620:6;43597:22;:30::i;:::-;-1:-1:-1;;;;;43576:18:0;;;;;;:9;:18;;;;;:51;;;;43640:89;;43660:8;;43586:7;43691:6;43699:8;43709:12;43576:18;43640:19;:89::i;:::-;43764:7;-1:-1:-1;;;;;43747:57:0;43754:8;-1:-1:-1;;;;;43747:57:0;;43773:6;43781:8;43791:12;43747:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43747:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43820:37;;;;;;;;-1:-1:-1;;;;;43820:37:0;;;43837:1;;-1:-1:-1;;;;;;;;;;;43820:37:0;;;;;;;;43127:738;;;;;:::o;50659:125::-;50752:12;50720:4;50744:21;;;:7;:21;;;;;;;;50766:9;50744:32;;;;;;;;;;50659:125;:::o;50792:126::-;50885:12;50853:4;50877:21;;;:7;:21;;;;;;;;50899:10;50877:33;;;;;;;;;;50792:126;:::o;45334:784::-;-1:-1:-1;;;;;45504:18:0;;45496:65;;;;-1:-1:-1;;;45496:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45574:16;45593:12;:10;:12::i;:::-;45574:31;;45618:56;45639:8;45649:4;45663:1;45667:6;45618:20;:56::i;:::-;45687:73;45705:8;45715:4;45729:1;45733:6;45741:4;45747:12;45687:17;:73::i;:::-;45826:66;45846:6;45826:66;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45826:15:0;;;;;;:9;:15;;;;;;;:66;:19;:66::i;:::-;-1:-1:-1;;;;;45808:15:0;;;;;;:9;:15;;;;;:84;45918:12;;:24;;45935:6;45918:16;:24::i;:::-;45903:12;:39;45968:12;;:24;;45985:6;45968:16;:24::i;:::-;45953:12;:39;;;;46027:4;-1:-1:-1;;;;;46010:50:0;46017:8;-1:-1:-1;;;;;46010:50:0;;46033:6;46041:4;46047:12;46010:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;46010:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46076:34;;;;;;;;46099:1;;-1:-1:-1;;;;;46076:34:0;;;-1:-1:-1;;;;;;;;;;;46076:34:0;;;;;;;;45334:784;;;;;:::o;59628:712::-;-1:-1:-1;;;;;59859:18:0;;59851:71;;;;-1:-1:-1;;;59851:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;59941:16:0;;59933:67;;;;-1:-1:-1;;;59933:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60013:17;60033:12;:10;:12::i;:::-;60013:32;;60058:70;60076:9;60087:4;60093:2;60097:6;60105:8;60115:12;60058:17;:70::i;:::-;60141:19;60163:58;60169:9;60180:4;60186:2;60190:6;60198:8;60208:12;60163:5;:58::i;:::-;60141:80;;60234:98;60254:9;60265:4;60271:2;60275:11;60288:8;60298:12;60312:19;60234;:98::i;32374:568::-;32815:4;32882:17;32927:7;32374:568;:::o;33225:656::-;31925:12;;;;;;;;:31;;;31941:15;:13;:15::i;:::-;31925:47;;;-1:-1:-1;31961:11:0;;;;31960:12;31925:47;31917:106;;;;-1:-1:-1;;;31917:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32036:19;32059:12;;;;;;32058:13;32082:99;;;;32117:12;:19;;-1:-1:-1;;;;32117:19:0;;;;;32151:18;32132:4;32151:18;;;32082:99;33386:26:::1;:24;:26::i;:::-;33423:37;33447:4;33453:6;33423:23;:37::i;:::-;33471:26;:24;:26::i;:::-;33510;:52:::0;;-1:-1:-1;;33510:52:0::1;::::0;::::1;;;::::0;;;;::::1;33611:26;33607:267;;;33654:97;::::0;;-1:-1:-1;;;33654:97:0;;33704:4:::1;33654:97;::::0;::::1;::::0;;;33711:24:::1;33654:97:::0;;;;;;;;;;30226:42:::1;::::0;33654:41:::1;::::0;:97;;;;;-1:-1:-1;;33654:97:0;;;;;;;-1:-1:-1;30226:42:0;33654:97;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;33766:96:0::1;::::0;;-1:-1:-1;;;33766:96:0;;33816:4:::1;33766:96;::::0;::::1;::::0;;;33823:23:::1;33766:96:::0;;;;;;;;;;30226:42:::1;::::0;-1:-1:-1;33766:41:0::1;::::0;-1:-1:-1;33766:96:0;;;;;-1:-1:-1;;33766:96:0;;;;;;;-1:-1:-1;30226:42:0;33766:96;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33607:267;32211:14:::0;32207:67;;;32257:5;32242:20;;-1:-1:-1;;32242:20:0;;;33225:656;;;;:::o;13151:181::-;13209:7;13241:5;;;13265:6;;;;13257:46;;;;;-1:-1:-1;;;13257:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;15486:132;15544:7;15571:39;15575:1;15578;15571:39;;;;;;;;;;;;;;;;;:3;:39::i;18394:444::-;18774:20;18822:8;;;18394:444::o;58608:533::-;58774:58;58801:9;58812:5;58819:3;58824:7;58774:26;:58::i;:::-;-1:-1:-1;;;;;58847:19:0;;58843:146;;58957:3;;58927:26;58945:7;58927:13;:11;:13::i;:::-;:17;;:26::i;:::-;:33;;58919:58;;;;;-1:-1:-1;;;58919:58:0;;;;;;;;;;;;-1:-1:-1;;;58919:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;59003:17:0;;58999:135;;59079:43;;;;;;;;;;;;;;;;:3;;:43;;59087:7;;59079;:43::i;:::-;59073:3;:49;58608:533;;;;:::o;33050:59::-;31925:12;;;;;;;;:31;;;31941:15;:13;:15::i;:::-;31925:47;;;-1:-1:-1;31961:11:0;;;;31960:12;31925:47;31917:106;;;;-1:-1:-1;;;31917:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32036:19;32059:12;;;;;;32058:13;32082:99;;;;32117:12;:19;;-1:-1:-1;;;;32117:19:0;;;;;32151:18;32132:4;32151:18;;;32082:99;32211:14;32207:67;;;32257:5;32242:20;;-1:-1:-1;;32242:20:0;;;33050:59;:::o;33889:179::-;31925:12;;;;;;;;:31;;;31941:15;:13;:15::i;:::-;31925:47;;;-1:-1:-1;31961:11:0;;;;31960:12;31925:47;31917:106;;;;-1:-1:-1;;;31917:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32036:19;32059:12;;;;;;32058:13;32082:99;;;;32117:12;:19;;-1:-1:-1;;;;32117:19:0;;;;;32151:18;32132:4;32151:18;;;32082:99;33996:12;;::::1;::::0;:5:::1;::::0;:12:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;34019:16:0;;::::1;::::0;:7:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;34046:9:0::1;:14:::0;;-1:-1:-1;;34046:14:0::1;34058:2;34046:14;::::0;;32207:67;;;;32257:5;32242:20;;-1:-1:-1;;32242:20:0;;;33889:179;;;:::o;34076:196::-;31925:12;;;;;;;;:31;;;31941:15;:13;:15::i;:::-;31925:47;;;-1:-1:-1;31961:11:0;;;;31960:12;31925:47;31917:106;;;;-1:-1:-1;;;31917:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32036:19;32059:12;;;;;;32058:13;32082:99;;;;32117:12;:19;;-1:-1:-1;;;;32117:19:0;;;;;32151:18;32132:4;32151:18;;;32082:99;34144:17:::1;34164:12;:10;:12::i;:::-;34187:6;:18:::0;;-1:-1:-1;;;;;;34187:18:0::1;::::0;-1:-1:-1;;;;;34187:18:0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;34221:43:::1;::::0;34187:18;;-1:-1:-1;34187:18:0;34221:43:::1;::::0;34187:6;;34221:43:::1;32193:1;32211:14:::0;32207:67;;;32257:5;32242:20;;-1:-1:-1;;32242:20:0;;;34076:196;:::o;16114:312::-;16234:7;16269:12;16262:5;16254:28;;;;-1:-1:-1;;;16254:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16293:9;16309:1;16305;:5;;;;;;;16114:312;-1:-1:-1;;;;;16114:312:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;
Swarm Source
ipfs://b9cbf8a280941f8e3ab8744cb405c8abf392ff5120fde88c7e83d818e99aba4a
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.