Feature Tip: Add private address tag to any address under My Name Tag !
Overview
Max Total Supply
650,462.524777629939324862 BLOODY
Holders
473 (0.00%)
Market
Price
$0.00 @ 0.000000 ETH
Onchain Market Cap
$48.59
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
125,000 BLOODYValue
$9.34 ( ~0.00284308796323316 Eth) [19.2171%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BloodyToken
Compiler Version
v0.6.2+commit.bacdbe57
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2020-10-27 */ /* @@@@@@@ @@@ @@@@@@ @@@@@@ @@@@@@@ @@@ @@@ @@@@@@@@ @@@ @@@@@@@@ @@@@@@@@ @@@@@@@@ @@@ @@@ @@! @@@ @@! @@! @@@ @@! @@@ @@! @@@ @@! !@@ !@ @!@ !@! !@! @!@ !@! @!@ !@! @!@ !@! @!! @!@!@!@ @!! @!@ !@! @!@ !@! @!@ !@! !@!@! !!!@!!!! !!! !@! !!! !@! !!! !@! !!! @!!! !!: !!! !!: !!: !!! !!: !!! !!: !!! !!: :!: !:! :!: :!: !:! :!: !:! :!: !:! :!: :: :::: :: :::: ::::: :: ::::: :: :::: :: :: :: : :: : :: : : : : : : : : :: : : : Website: bloodyfi.org BLOODY, a deflationary elastic experiment that clots if it doesn't circulate How does clotting work? Whenever the BLOODY transfer volume increases, everyone's BLOODY balance gets a little bit bigger, whenever the BLOODY transfer volume decreases, everyone's BLOODY balance gets a little bit smaller. How is it deflationary? Whenever there's a BLOODY transfer, it spills. The faster it circulates, the higher the spill rate. How often are rebases? Rebases are hourly. After a rebase, transfers are frozen for 5 minutes. How are BLOODY liquidity provider incentivized? - Half the spills are redistributed to BLOODY-ETH, BLOODY-ROT and BLOODY-NICE liquidity providers (up to 6% of ANY transfer). - A BLOODY-ROT pool will be added to Rottenswap on Halloween. How is BLOODY initially distributed? BLOODY cannot be minted, it is ditributed once on Halloween 2020 to ROT holders with a balance above 7,500. The snapshot block (11106871) was chosen at random https://twitter.com/TheTimTempleton/status/1320722096578727937 Are contracts audited? BLOODY is written 100% from scratch, not tested nor audited. It is not secure, use at your own risk. What does it BLOODY do? Nothing, it is an experiment with no purpose. */ // File: @openzeppelin/contracts/GSN/Context.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ 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; } } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: @openzeppelin/contracts/math/SafeMath.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } // File: @openzeppelin/contracts/utils/Address.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @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); } } } } // File: contracts/ERC20.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ // EDIT: make balanceOf virtual so it can be overridden function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } // function balanceOf(address account) public view override returns (uint256) { // return _balances[account]; // } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); // _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { // require(account != address(0), "ERC20: mint to the zero address"); // _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { // require(account != address(0), "ERC20: burn from the zero address"); // _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } } // File: contracts/ERC20TransferBurn.sol pragma solidity ^0.6.2; contract ERC20TransferBurn is ERC20 { using SafeMath for uint256; constructor (string memory name, string memory symbol) ERC20(name, symbol) public {} // the amount of burn during every transfer, i.e. 100 = 1%, 50 = 2%, 40 = 2.5% uint256 private _burnDivisor = 100; function burnDivisor() public view virtual returns (uint256) { return _burnDivisor; } function _setBurnDivisor(uint256 burnDivisor) internal virtual { require(burnDivisor > 0, "_setBurnDivisor burnDivisor must be bigger than 0"); _burnDivisor = burnDivisor; } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { // calculate burn amount uint256 burnAmount = amount.div(_burnDivisor); // burn burn amount burn(msg.sender, burnAmount); // transfer amount minus burn amount return super.transfer(recipient, amount.sub(burnAmount)); } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { // calculate burn amount uint256 burnAmount = amount.div(_burnDivisor); // burn burn amount burn(sender, burnAmount); // transfer amount minus burn amount return super.transferFrom(sender, recipient, amount.sub(burnAmount)); } // keep track of total supply burned (for fun only, serves no purpose) uint256 private _totalSupplyBurned; function totalSupplyBurned() public view virtual returns (uint256) { return _totalSupplyBurned; } function burn(address account, uint256 amount) private { _burn(account, amount); // keep track of total supply burned _totalSupplyBurned = _totalSupplyBurned.add(amount); } } // File: contracts/ERC20ElasticTransferBurn.sol // ERC20Elastic is duplicated in ERC20Elastic.sol and ERC20ElasticTransferBurn.sol // because I don't know how to not duplicate it pragma solidity ^0.6.0; contract ERC20ElasticTransferBurn is ERC20TransferBurn { using SafeMath for uint256; constructor (string memory name, string memory symbol) ERC20TransferBurn(name, symbol) public {} uint256 private _elasticMultiplier = 100; function elasticMultiplier() public view virtual returns (uint256) { return _elasticMultiplier; } function _setElasticMultiplier(uint256 elasticMultiplier) internal virtual { require(elasticMultiplier > 0, "_setElasticMultiplier elasticMultiplier must be bigger than 0"); _elasticMultiplier = elasticMultiplier; } function balanceOf(address account) public view virtual override returns (uint256) { return super.balanceOf(account).mul(_elasticMultiplier); } // don't override totalSupply to cause more madness and confusion function totalSupplyElastic() public view virtual returns (uint256) { return super.totalSupply().mul(_elasticMultiplier); } function balanceOfRaw(address account) public view virtual returns (uint256) { return super.balanceOf(account); } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { return super.transfer(recipient, amount.div(_elasticMultiplier)); } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { return super.transferFrom(sender, recipient, amount.div(_elasticMultiplier)); } } // File: @openzeppelin/contracts/access/Ownable.sol // SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { 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; } } // File: contracts/BloodyToken.sol pragma solidity ^0.6.2; contract BloodyToken is ERC20ElasticTransferBurn("BloodyToken", "BLOODY"), Ownable { using SafeMath for uint256; // store how many transfers have occurred every hour // to calculate the burn divisor uint256 public transferVolumeNowBucket; uint256 public transferVolume1HourAgoBucket; // store the now timestamp to know when it has expired uint256 public transferVolumeNowBucketTimestamp; constructor() public { // set to arbitrary initial values _setBurnDivisor(100); _setElasticMultiplier(10); // freeze transfers for 5 minutes after rebase // to mitigate users transferring wrong amounts transferAfterRebaseFreezeTime = 5 minutes; transferVolumeNowBucketTimestamp = getTransferVolumeNowBucketTimestamp(); } function getTransferVolumeNowBucketTimestamp() public view returns (uint256) { // 3600 seconds per hour // round the timestamp bucket every hour return block.timestamp - (block.timestamp % 3600); } event Rebase( uint256 indexed transferVolumeNowBucketTimestamp, uint256 burnDivisor, uint256 elasticMultiplier, uint256 transferVolume1HourAgoBucket, uint256 transferVolume2HoursAgoBucket ); uint256 public lastRebaseTimestamp; uint256 public transferAfterRebaseFreezeTime; function rebase() public { // time is still in current bucket, does not need updating require(requiresRebase() == true, "someone else called rebase already"); // update volume buckets // shift buckets 1 spot uint256 transferVolume2HoursAgoBucket = transferVolume1HourAgoBucket; transferVolume1HourAgoBucket = transferVolumeNowBucket; transferVolumeNowBucket = 0; // store new timestamp transferVolumeNowBucketTimestamp = getTransferVolumeNowBucketTimestamp(); // mint half the burn to the uniswap pairs // make sure to sync the uniswap pairs after uint256 uniswapPairReward = transferVolume1HourAgoBucket.div(burnDivisor()).div(2); mintToUniswapPairs(uniswapPairReward); // rebase supply and burn rate uint256 newBurnDivisor = calculateBurnDivisor(burnDivisor(), transferVolume1HourAgoBucket, transferVolume2HoursAgoBucket); // arbitrarily set elastic modifier to 10x the burn rate (10 * 100 / burnDivisor) // if bloody circulates, spill rate increases, but clotting decreases // if volume increases, burn rate increases (burn divisor decreases), supply increases uint256 newElasticMultiplier = uint256(1000).div(newBurnDivisor); _setBurnDivisor(newBurnDivisor); _setElasticMultiplier(newElasticMultiplier); emit Rebase(transferVolumeNowBucketTimestamp, newBurnDivisor, newElasticMultiplier, transferVolume1HourAgoBucket, transferVolume2HoursAgoBucket); // if uniswap pairs are not synced loss of // funds will occur after rebase or reward minting syncUniswapPairs(); // set to false until next rebase setRequiresRebase(false); lastRebaseTimestamp = block.timestamp; } uint256 public constant minBurnPercent = 1; uint256 public constant maxBurnPercent = 12; // they are inversely correlated uint256 public constant minBurnDivisor = 100 / maxBurnPercent; uint256 public constant maxBurnDivisor = 100 / minBurnPercent; // if bloody circulates, spill rate increases, but clotting decreases // if volume decreases, burn rate decreases (burn divisor increases), supply decreases // if supply decreases, price goes up, which stimulates more volume, which in turn // increases burn // if volume increases, burn rate increases (burn divisor decreases), supply increases function calculateBurnDivisor(uint256 _previousBurnDivisor, uint256 _transferVolume1HourAgoBucket, uint256 _transferVolume2HoursAgoBucket) public view returns (uint256) { // convert burn divisor to burn percent using division precision int256 divisionPrecision = 10000; int256 preciseMinBurnPercent = int256(minBurnPercent) * divisionPrecision; int256 preciseMaxBurnPercent = int256(maxBurnPercent) * divisionPrecision; // don't divide by 0 if (_previousBurnDivisor == 0) { return minBurnDivisor; } int256 precisePreviousBurnPercent = (100 * divisionPrecision) / int256(_previousBurnDivisor); // no update needed if (_transferVolume1HourAgoBucket == _transferVolume2HoursAgoBucket) { // never return burn divisor above or below max if (precisePreviousBurnPercent < preciseMinBurnPercent) { return maxBurnDivisor; } else if (precisePreviousBurnPercent > preciseMaxBurnPercent) { return minBurnDivisor; } else { return _previousBurnDivisor; } } bool volumeHasIncreased = _transferVolume1HourAgoBucket > _transferVolume2HoursAgoBucket; // check for min / max already reached if (volumeHasIncreased) { // volume has increased but // burn percent is already max (burn divisor is already min) if (precisePreviousBurnPercent >= preciseMaxBurnPercent) { return minBurnDivisor; } } // volume has decreased else { // volume has decreased but // burn percent is already min (burn divisor is already max) if (precisePreviousBurnPercent <= preciseMinBurnPercent) { return maxBurnDivisor; } } // find the transfer volume difference ratio between the 2 hour buckets int256 transferVolumeRatio; if (_transferVolume1HourAgoBucket == 0) { transferVolumeRatio = -int256(_transferVolume2HoursAgoBucket + 1); } else if (_transferVolume2HoursAgoBucket == 0) { transferVolumeRatio = int256(_transferVolume1HourAgoBucket + 1); } else if (volumeHasIncreased) { transferVolumeRatio = int256(_transferVolume1HourAgoBucket / _transferVolume2HoursAgoBucket); } else { transferVolumeRatio = -int256(_transferVolume2HoursAgoBucket / _transferVolume1HourAgoBucket); } // find the burn percent modifier and the new burn percent // round division to 10000 int256 preciseNewBurnPercent = calculateBurnPercentFromTransferVolumeRatio( precisePreviousBurnPercent, transferVolumeRatio * divisionPrecision, preciseMinBurnPercent, preciseMaxBurnPercent ); // convert the burn percent back to burn divisor, without forgetting division precision return uint256((100 * divisionPrecision) / preciseNewBurnPercent); } function calculateBurnPercentFromTransferVolumeRatio(int256 _previousBurnPercent, int256 _transferVolumeRatio, int256 _minBurnPercent, int256 _maxBurnPercent) public pure returns (int256) { // this is a pure function, don't use globals min and max // because might use division precision // previous burn percent should never be bigger or smaller than max or min // but if the exception occurs it messes up the curve if (_previousBurnPercent < _minBurnPercent) { _previousBurnPercent = _minBurnPercent; } else if (_previousBurnPercent > _maxBurnPercent) { _previousBurnPercent = _maxBurnPercent; } // attempt to find burn divisor curve int256 burnPercentModifier = _transferVolumeRatio; int8 maxAttempt = 5; while (true) { int256 newBurnPercent = _previousBurnPercent + burnPercentModifier; // found burn divisor curve if (newBurnPercent < _maxBurnPercent && newBurnPercent > _minBurnPercent) { return _previousBurnPercent + burnPercentModifier; } // curve formula brings too little change to burn divisor, not worth it if (maxAttempt-- == 0) { // instead of returning the value very close to the min or max // return min or max instead to avoid wasting gas if (_transferVolumeRatio > 0) { // if _transferVolumeRatio is positive, burn should increase return _maxBurnPercent; } else { // bigger than max would give min return _minBurnPercent; } } // divide by 2 until burnPercent + burnPercentModifier // fit between min and max to find the perfect curve burnPercentModifier = burnPercentModifier / 2; } } function transfer(address recipient, uint256 amount) public override returns (bool) { // if time for rebase, freeze all transfers until someone calls rebase require(requiresRebase() == false, "transfers are frozen until someone calls rebase"); require(transfersAreFrozenAfterRebase() == false, "transfers are frozen for a few minutes after rebase"); super.transfer(recipient, amount); updateTransferVolume(amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { // if time for rebase, freeze all transfers until someone calls rebase require(requiresRebase() == false, "transfers are frozen until someone calls rebase"); require(transfersAreFrozenAfterRebase() == false, "transfers are frozen for a few minutes after rebase"); super.transferFrom(sender, recipient, amount); updateTransferVolume(amount); return true; } function updateTransferVolume(uint256 volume) internal virtual { // keep track of transfer volume on each transfer // store the volume without elastic multiplier to know the real volume transferVolumeNowBucket = transferVolumeNowBucket.add(volume.div(elasticMultiplier())); // if 1 hour has passed, requires new rebase if (transferVolumeNowBucketTimestamp != getTransferVolumeNowBucketTimestamp()) { setRequiresRebase(true); } } function transfersAreFrozenAfterRebase() public view returns (bool) { // use < and not <= to always stop transfers that occur on the same block as a rebase // even if transferAfterRebaseFreezeTime is set to 0 if (lastRebaseTimestamp + transferAfterRebaseFreezeTime < block.timestamp) { return false; } return true; } // if should rebase, freeze all transfers until someone calls rebase bool private _requiresRebase = false; // only require rebase on the next block uint256 private lastSetRequiresRebaseTimestamp; function requiresRebase() public view returns (bool) { if (_requiresRebase) { if (lastSetRequiresRebaseTimestamp < block.timestamp) { return true; } } return false; } function setRequiresRebase (bool value) internal { _requiresRebase = value; lastSetRequiresRebaseTimestamp = block.timestamp; } // mint half the burn to the uniswap pair to incentivize liquidity // swapping or providing liquidity on any other pairs will cause // loss of funds after every rebase address public bloodyEthUniswapPair; address public bloodyNiceUniswapPair; address public bloodyRotUniswapPair; // called by owner after contract is deployed to set // the uniswap pair which receives half the burn to incentivize liquidity // then contract ownership is transfered to // address 0x0000000000000000000000000000000000000000 and can never be called again function setUniswapPairs(address _bloodyEthUniswapPair, address _bloodyNiceUniswapPair, address _bloodyRotUniswapPair) public virtual onlyOwner { bloodyEthUniswapPair = _bloodyEthUniswapPair; bloodyNiceUniswapPair = _bloodyNiceUniswapPair; bloodyRotUniswapPair = _bloodyRotUniswapPair; } // mint half the burn to the uniswap pairs // make sure to sync the uniswap pairs after // reward is half of the burn split into 3 pairs function mintToUniswapPairs(uint256 uniswapPairRewardAmount) internal { if (uniswapPairRewardAmount == 0) { return; } // reward is half of the burn split into 3 pairs uint256 amountPerPair = uniswapPairRewardAmount.div(3); if (uniswapPairRewardAmount == 0) { return; } if (bloodyEthUniswapPair != address(0)) { _mint(bloodyEthUniswapPair, amountPerPair); } if (bloodyNiceUniswapPair != address(0)) { _mint(bloodyNiceUniswapPair, amountPerPair); } if (bloodyRotUniswapPair != address(0)) { _mint(bloodyRotUniswapPair, amountPerPair); } } // if uniswap pairs are not synced loss of // funds will occur after rebase or reward minting function syncUniswapPairs() internal { if (bloodyEthUniswapPair != address(0)) { IUniswapV2Pair(bloodyEthUniswapPair).sync(); } if (bloodyNiceUniswapPair != address(0)) { IUniswapV2Pair(bloodyNiceUniswapPair).sync(); } if (bloodyRotUniswapPair != address(0)) { IUniswapV2Pair(bloodyRotUniswapPair).sync(); } } // called by owner after contract is deployed to airdrop // tokens to inital holders, then contract ownership is transfered to // address 0x0000000000000000000000000000000000000000 and can never be called again function airdrop(address[] memory recipients, uint256[] memory amounts) public onlyOwner { for (uint i = 0; i < recipients.length; i++) { _mint(recipients[i], amounts[i]); } } // util external function for website function totalSupplyBurnedElastic() external view returns (uint256) { return totalSupplyBurned().mul(elasticMultiplier()); } // util external function for website // half the burn is minted to the uniswap pools // might not be accurate if uniswap pools aren't set yet function totalSupplyBurnedMinusRewards() public view returns (uint256) { return totalSupplyBurned().div(2); } // util external function for website function timeUntilNextRebase() external view returns (uint256) { uint256 rebaseTime = transferVolumeNowBucketTimestamp + 3600; if (rebaseTime <= block.timestamp) { return 0; } return rebaseTime - block.timestamp; } // util external function for website function nextRebaseTimestamp() external view returns (uint256) { return transferVolumeNowBucketTimestamp + 3600; } // util external function for website function transfersAreFrozen() external view returns (bool) { if (transfersAreFrozenAfterRebase() || requiresRebase()) { return true; } return false; } // util external function for website function transfersAreFrozenRequiresRebase() external view returns (bool) { return requiresRebase(); } // util external function for website function timeUntilNextTransferAfterRebaseUnfreeze() external view virtual returns (uint256) { uint256 unfreezeTime = lastRebaseTimestamp + transferAfterRebaseFreezeTime; if (unfreezeTime <= block.timestamp) { return 0; } return unfreezeTime - block.timestamp; } // util external function for website function nextTransferAfterRebaseUnfreezeTimestamp() external view virtual returns (uint256) { return lastRebaseTimestamp + transferAfterRebaseFreezeTime; } // util external function for website function balanceInUniswapPair(address user, address uniswapPair) public view returns (uint256) { if (uniswapPair == address(0)) { return 0; } uint256 pairBloodyBalance = balanceOf(uniswapPair); if (pairBloodyBalance == 0) { return 0; } uint256 userLpBalance = IUniswapV2Pair(uniswapPair).balanceOf(user); if (userLpBalance == 0) { return 0; } uint256 lpTotalSupply = IUniswapV2Pair(uniswapPair).totalSupply(); uint256 divisionPrecision = 1e12; uint256 userLpTotalOwnershipRatio = userLpBalance.mul(divisionPrecision).div(lpTotalSupply); return pairBloodyBalance.mul(userLpTotalOwnershipRatio).div(divisionPrecision); } // util external function for website function balanceInUniswapPairs(address user) public view returns (uint256) { return balanceInUniswapPair(user, bloodyEthUniswapPair) .add(balanceInUniswapPair(user, bloodyNiceUniswapPair)) .add(balanceInUniswapPair(user, bloodyRotUniswapPair)); } // util external function for website function balanceIncludingUniswapPairs(address user) external view returns (uint256) { return balanceOf(user).add(balanceInUniswapPairs(user)); } } interface IUniswapV2Pair { function sync() external; function balanceOf(address owner) external view returns (uint); function totalSupply() external view returns (uint); }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"transferVolumeNowBucketTimestamp","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burnDivisor","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"elasticMultiplier","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transferVolume1HourAgoBucket","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transferVolume2HoursAgoBucket","type":"uint256"}],"name":"Rebase","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":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"address","name":"uniswapPair","type":"address"}],"name":"balanceInUniswapPair","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"balanceInUniswapPairs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"balanceIncludingUniswapPairs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOfRaw","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bloodyEthUniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bloodyNiceUniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bloodyRotUniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_previousBurnDivisor","type":"uint256"},{"internalType":"uint256","name":"_transferVolume1HourAgoBucket","type":"uint256"},{"internalType":"uint256","name":"_transferVolume2HoursAgoBucket","type":"uint256"}],"name":"calculateBurnDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"int256","name":"_previousBurnPercent","type":"int256"},{"internalType":"int256","name":"_transferVolumeRatio","type":"int256"},{"internalType":"int256","name":"_minBurnPercent","type":"int256"},{"internalType":"int256","name":"_maxBurnPercent","type":"int256"}],"name":"calculateBurnPercentFromTransferVolumeRatio","outputs":[{"internalType":"int256","name":"","type":"int256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"elasticMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTransferVolumeNowBucketTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lastRebaseTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBurnDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBurnPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBurnDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBurnPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextRebaseTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextTransferAfterRebaseUnfreezeTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rebase","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requiresRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_bloodyEthUniswapPair","type":"address"},{"internalType":"address","name":"_bloodyNiceUniswapPair","type":"address"},{"internalType":"address","name":"_bloodyRotUniswapPair","type":"address"}],"name":"setUniswapPairs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeUntilNextRebase","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"timeUntilNextTransferAfterRebaseUnfreeze","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":"totalSupplyBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplyBurnedElastic","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplyBurnedMinusRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupplyElastic","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":[],"name":"transferAfterRebaseFreezeTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferVolume1HourAgoBucket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferVolumeNowBucket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transferVolumeNowBucketTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transfersAreFrozen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transfersAreFrozenAfterRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transfersAreFrozenRequiresRebase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052606460065560646008556000600f60006101000a81548160ff0219169083151502179055503480156200003657600080fd5b506040518060400160405280600b81526020017f426c6f6f6479546f6b656e0000000000000000000000000000000000000000008152506040518060400160405280600681526020017f424c4f4f44590000000000000000000000000000000000000000000000000000815250818181818160039080519060200190620000bf929190620002dd565b508060049080519060200190620000d8929190620002dd565b506012600560006101000a81548160ff021916908360ff16021790555050505050505060006200010d620001f560201b60201c565b905080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620001be6064620001fd60201b60201c565b620001d0600a6200026260201b60201c565b61012c600e81905550620001e9620002c760201b60201c565b600c819055506200038c565b600033905090565b6000811162000258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603181526020018062003cc56031913960400191505060405180910390fd5b8060068190555050565b60008111620002bd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d81526020018062003c88603d913960400191505060405180910390fd5b8060088190555050565b6000610e104281620002d557fe5b064203905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200032057805160ff191683800117855562000351565b8280016001018555821562000351579182015b828111156200035057825182559160200191906001019062000333565b5b50905062000360919062000364565b5090565b6200038991905b80821115620003855760008160009055506001016200036b565b5090565b90565b6138ec806200039c6000396000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80638da5cb5b11610182578063be378b89116100e9578063f00dcaee116100a2578063f42f40c21161007c578063f42f40c214610e6b578063f7752afe14610e89578063f7a9f6cf14610f01578063f89b601114610f1f576102d6565b8063f00dcaee14610dbf578063f047c10d14610e09578063f2fde38b14610e27576102d6565b8063be378b8914610c11578063c3d7402614610c69578063c962c2df14610c87578063c9b7d92814610ca5578063d661e90a14610cc3578063dd62ed3e14610d47576102d6565b8063a9059cbb1161013b578063a9059cbb14610ae3578063af14052c14610b49578063b6ef70bc14610b53578063b863a7cb14610bb3578063b86a2fd714610bd5578063ba52c8b714610bf3576102d6565b80638da5cb5b14610952578063914344cf1461099c57806395d89b41146109be5780639cc32cdb14610a41578063a457c2d714610a5f578063a779a81b14610ac5576102d6565b80632bb2bb061161024157806354f5bffa116101fa578063715018a6116101d4578063715018a6146108ee5780637fba744e146108f8578063859f6d8a146109165780638a991b7f14610934576102d6565b806354f5bffa1461072c578063672434821461074a57806370a0823114610896576102d6565b80632bb2bb06146105f2578063313ce5671461061057806339509351146106345780634456e3271461069a578063486ed6e2146106b85780634f656b861461070e576102d6565b806317c5b5cb1161029357806317c5b5cb1461047a57806318160ddd1461049c57806323b872dd146104ba578063240c98681461054057806326fe6a8c1461058a578063295f42a9146105d4576102d6565b806305ee7414146102db57806306fdde03146102f9578063095ea7b31461037c5780630b5d1a54146103e2578063106cdceb1461043a578063106f3b6e1461045c575b600080fd5b6102e3610f77565b6040518082815260200191505060405180910390f35b610301610f9a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610341578082015181840152602081019050610326565b50505050905090810190601f16801561036e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103c86004803603604081101561039257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061103c565b604051808215151515815260200191505060405180910390f35b610424600480360360208110156103f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061105a565b6040518082815260200191505060405180910390f35b610442611086565b604051808215151515815260200191505060405180910390f35b6104646110a7565b6040518082815260200191505060405180910390f35b6104826110ac565b604051808215151515815260200191505060405180910390f35b6104a46110df565b6040518082815260200191505060405180910390f35b610526600480360360608110156104d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110e9565b604051808215151515815260200191505060405180910390f35b6105486111d2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105926111f8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105dc61121e565b6040518082815260200191505060405180910390f35b6105fa611245565b6040518082815260200191505060405180910390f35b61061861124b565b604051808260ff1660ff16815260200191505060405180910390f35b6106806004803603604081101561064a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611262565b604051808215151515815260200191505060405180910390f35b6106a2611315565b6040518082815260200191505060405180910390f35b6106f8600480360360608110156106ce57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061131b565b6040518082815260200191505060405180910390f35b61071661148b565b6040518082815260200191505060405180910390f35b610734611495565b6040518082815260200191505060405180910390f35b6108946004803603604081101561076057600080fd5b810190808035906020019064010000000081111561077d57600080fd5b82018360208201111561078f57600080fd5b803590602001918460208302840111640100000000831117156107b157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561081157600080fd5b82018360208201111561082357600080fd5b8035906020019184602083028401116401000000008311171561084557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506114bd565b005b6108d8600480360360208110156108ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115d8565b6040518082815260200191505060405180910390f35b6108f66115fe565b005b610900611789565b6040518082815260200191505060405180910390f35b61091e611797565b6040518082815260200191505060405180910390f35b61093c6117a1565b6040518082815260200191505060405180910390f35b61095a6117a7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109a46117d1565b604051808215151515815260200191505060405180910390f35b6109c6611800565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a065780820151818401526020810190506109eb565b50505050905090810190601f168015610a335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a496118a2565b6040518082815260200191505060405180910390f35b610aab60048036036040811015610a7557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506118c9565b604051808215151515815260200191505060405180910390f35b610acd611996565b6040518082815260200191505060405180910390f35b610b2f60048036036040811015610af957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119ab565b604051808215151515815260200191505060405180910390f35b610b51611a92565b005b610b9d60048036036080811015610b6957600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611c0e565b6040518082815260200191505060405180910390f35b610bbb611cb7565b604051808215151515815260200191505060405180910390f35b610bdd611cc6565b6040518082815260200191505060405180910390f35b610bfb611ccc565b6040518082815260200191505060405180910390f35b610c5360048036036020811015610c2757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cd6565b6040518082815260200191505060405180910390f35b610c71611ce8565b6040518082815260200191505060405180910390f35b610c8f611ced565b6040518082815260200191505060405180910390f35b610cad611cf3565b6040518082815260200191505060405180910390f35b610d4560048036036060811015610cd957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d02565b005b610da960048036036040811015610d5d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e94565b6040518082815260200191505060405180910390f35b610dc7611f1b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e11611f41565b6040518082815260200191505060405180910390f35b610e6960048036036020811015610e3d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f4f565b005b610e7361215f565b6040518082815260200191505060405180910390f35b610eeb60048036036040811015610e9f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612181565b6040518082815260200191505060405180910390f35b610f0961239b565b6040518082815260200191505060405180910390f35b610f6160048036036020811015610f3557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123aa565b6040518082815260200191505060405180910390f35b6000610f95600854610f876110df565b61245990919063ffffffff16565b905090565b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110325780601f1061100757610100808354040283529160200191611032565b820191906000526020600020905b81548152906001019060200180831161101557829003601f168201915b5050505050905090565b60006110506110496124df565b84846124e7565b6001905092915050565b600061107f611068836123aa565b611071846115d8565b6126de90919063ffffffff16565b9050919050565b600042600e54600d5401101561109f57600090506110a4565b600190505b90565b600181565b6000600f60009054906101000a900460ff16156110d7574260105410156110d657600190506110dc565b5b600090505b90565b6000600254905090565b60008015156110f66110ac565b15151461114e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061377e602f913960400191505060405180910390fd5b6000151561115a611086565b1515146111b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603381526020018061367e6033913960400191505060405180910390fd5b6111bd848484612766565b506111c782612790565b600190509392505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610e10600c5401905042811161123b576000915050611242565b4281039150505b90565b600a5481565b6000600560009054906101000a900460ff16905090565b600061130b61126f6124df565b8461130685600160006112806124df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126de90919063ffffffff16565b6124e7565b6001905092915050565b600e5481565b60008061271090506000816001029050600082600c029050600087141561135257600c60648161134757fe5b049350505050611484565b600087846064028161136057fe5b059050858714156113b5578281121561138a57600160648161137e57fe5b04945050505050611484565b818113156113a957600c60648161139d57fe5b04945050505050611484565b87945050505050611484565b6000868811905080156113e6578282126113e157600c6064816113d457fe5b0495505050505050611484565b611406565b8382136114055760016064816113f857fe5b0495505050505050611484565b5b60008089141561141e5760018801600003905061145b565b60008814156114325760018901905061145a565b81156114495787898161144157fe5b049050611459565b88888161145257fe5b0460000390505b5b5b600061146b848884028888611c0e565b905080876064028161147957fe5b059750505050505050505b9392505050565b6000600854905090565b60006114b86114a261148b565b6114aa611797565b61245990919063ffffffff16565b905090565b6114c56124df565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611587576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b82518110156115d3576115c68382815181106115a557fe5b60200260200101518383815181106115b957fe5b60200260200101516127e2565b808060010191505061158d565b505050565b60006115f76008546115e9846128fa565b61245990919063ffffffff16565b9050919050565b6116066124df565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610e10600c5401905090565b6000600754905090565b600b5481565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006117db611086565b806117ea57506117e96110ac565b5b156117f857600190506117fd565b600090505b90565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118985780601f1061186d57610100808354040283529160200191611898565b820191906000526020600020905b81548152906001019060200180831161187b57829003601f168201915b5050505050905090565b600080600e54600d540190504281116118bf5760009150506118c6565b4281039150505b90565b600061198c6118d66124df565b846119878560405180606001604052806025815260200161389260259139600160006119006124df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129429092919063ffffffff16565b6124e7565b6001905092915050565b6000610e1042816119a357fe5b064203905090565b60008015156119b86110ac565b151514611a10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061377e602f913960400191505060405180910390fd5b60001515611a1c611086565b151514611a74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603381526020018061367e6033913960400191505060405180910390fd5b611a7e8383612a02565b50611a8882612790565b6001905092915050565b60011515611a9e6110ac565b151514611af6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806138706022913960400191505060405180910390fd5b6000600b549050600a54600b819055506000600a81905550611b16611996565b600c819055506000611b4d6002611b3f611b2e611ccc565b600b54612a2a90919063ffffffff16565b612a2a90919063ffffffff16565b9050611b5881612a74565b6000611b6e611b65611ccc565b600b548561131b565b90506000611b87826103e8612a2a90919063ffffffff16565b9050611b9282612c37565b611b9b81612c9a565b600c547fa904dcf42a3461c90173c0b966672b2cb4350e529ea12d44e562fcec438363248383600b54886040518085815260200184815260200183815260200182815260200194505050505060405180910390a2611bf7612cfd565b611c016000612f8a565b42600d8190555050505050565b600082851215611c2057829450611c2d565b81851315611c2c578194505b5b60008490506000600590505b600115611cac57600082880190508481128015611c5557508581135b15611c67578288019350505050611caf565b6000828060019003935060000b1415611c99576000871315611c8e57849350505050611caf565b859350505050611caf565b60028381611ca357fe5b05925050611c39565b50505b949350505050565b6000611cc16110ac565b905090565b600d5481565b6000600654905090565b6000611ce1826128fa565b9050919050565b600c81565b600c5481565b600c606481611cfe57fe5b0481565b611d0a6124df565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dcc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b82601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e54600d5401905090565b611f576124df565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612019576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561209f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806136d36026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061217c600261216e611797565b612a2a90919063ffffffff16565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c05760009050612395565b60006121cb836115d8565b905060008114156121e0576000915050612395565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561225f57600080fd5b505afa158015612273573d6000803e3d6000fd5b505050506040513d602081101561228957600080fd5b8101908080519060200190929190505050905060008114156122b057600092505050612395565b60008473ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156122f857600080fd5b505afa15801561230c573d6000803e3d6000fd5b505050506040513d602081101561232257600080fd5b81019080805190602001909291905050509050600064e8d4a510009050600061236683612358848761245990919063ffffffff16565b612a2a90919063ffffffff16565b905061238d8261237f838861245990919063ffffffff16565b612a2a90919063ffffffff16565b955050505050505b92915050565b60016064816123a657fe5b0481565b60006124526123db83601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612181565b61244461240a85601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612181565b61243686601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612181565b6126de90919063ffffffff16565b6126de90919063ffffffff16565b9050919050565b60008083141561246c57600090506124d9565b600082840290508284828161247d57fe5b04146124d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806137de6021913960400191505060405180910390fd5b809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561256d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061384c6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806136f96022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b60008082840190508381101561275c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000612787848461278260085486612a2a90919063ffffffff16565b612fae565b90509392505050565b6127be6127ad61279e61148b565b83612a2a90919063ffffffff16565b600a546126de90919063ffffffff16565b600a819055506127cc611996565b600c54146127df576127de6001612f8a565b5b50565b6127f7816002546126de90919063ffffffff16565b60028190555061284e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126de90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008383111582906129ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129b4578082015181840152602081019050612999565b50505050905090810190601f1680156129e15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000612a2283612a1d60085485612a2a90919063ffffffff16565b612ff9565b905092915050565b6000612a6c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613042565b905092915050565b6000811415612a8257612c34565b6000612a98600383612a2a90919063ffffffff16565b90506000821415612aa95750612c34565b600073ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b2c57612b2b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826127e2565b5b600073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612baf57612bae601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826127e2565b5b600073ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c3257612c31601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826127e2565b5b505b50565b60008111612c90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806137ad6031913960400191505060405180910390fd5b8060068190555050565b60008111612cf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180613741603d913960400191505060405180910390fd5b8060088190555050565b600073ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dd657601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612dbd57600080fd5b505af1158015612dd1573d6000803e3d6000fd5b505050505b600073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612eaf57601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612e9657600080fd5b505af1158015612eaa573d6000803e3d6000fd5b505050505b600073ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f8857601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612f6f57600080fd5b505af1158015612f83573d6000803e3d6000fd5b505050505b565b80600f60006101000a81548160ff0219169083151502179055504260108190555050565b600080612fc660065484612a2a90919063ffffffff16565b9050612fd28582613108565b612fef8585612fea848761313190919063ffffffff16565b61317b565b9150509392505050565b60008061301160065484612a2a90919063ffffffff16565b905061301d3382613108565b61303984613034838661313190919063ffffffff16565b613254565b91505092915050565b600080831182906130ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156130b3578082015181840152602081019050613098565b50505050905090810190601f1680156130e05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816130fa57fe5b049050809150509392505050565b6131128282613272565b613127816007546126de90919063ffffffff16565b6007819055505050565b600061317383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612942565b905092915050565b60006131888484846133a4565b613249846131946124df565b613244856040518060600160405280602881526020016137ff60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006131fa6124df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129429092919063ffffffff16565b6124e7565b600190509392505050565b60006132686132616124df565b84846133a4565b6001905092915050565b6132dd816040518060600160405280602281526020016136b1602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129429092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133348160025461313190919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561342a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806138276025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061365b6023913960400191505060405180910390fd5b61351b8160405180606001604052806026815260200161371b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129429092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135ae816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126de90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573737472616e7366657273206172652066726f7a656e20666f72206120666577206d696e757465732061667465722072656261736545524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655f736574456c61737469634d756c7469706c69657220656c61737469634d756c7469706c696572206d75737420626520626967676572207468616e20307472616e7366657273206172652066726f7a656e20756e74696c20736f6d656f6e652063616c6c73207265626173655f7365744275726e44697669736f72206275726e44697669736f72206d75737420626520626967676572207468616e2030536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373736f6d656f6e6520656c73652063616c6c65642072656261736520616c726561647945524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208004802ec84dcc94442e25491577b7ee0a379b53cfec17e5e98bd9c34013923864736f6c634300060200335f736574456c61737469634d756c7469706c69657220656c61737469634d756c7469706c696572206d75737420626520626967676572207468616e20305f7365744275726e44697669736f72206275726e44697669736f72206d75737420626520626967676572207468616e2030
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102d65760003560e01c80638da5cb5b11610182578063be378b89116100e9578063f00dcaee116100a2578063f42f40c21161007c578063f42f40c214610e6b578063f7752afe14610e89578063f7a9f6cf14610f01578063f89b601114610f1f576102d6565b8063f00dcaee14610dbf578063f047c10d14610e09578063f2fde38b14610e27576102d6565b8063be378b8914610c11578063c3d7402614610c69578063c962c2df14610c87578063c9b7d92814610ca5578063d661e90a14610cc3578063dd62ed3e14610d47576102d6565b8063a9059cbb1161013b578063a9059cbb14610ae3578063af14052c14610b49578063b6ef70bc14610b53578063b863a7cb14610bb3578063b86a2fd714610bd5578063ba52c8b714610bf3576102d6565b80638da5cb5b14610952578063914344cf1461099c57806395d89b41146109be5780639cc32cdb14610a41578063a457c2d714610a5f578063a779a81b14610ac5576102d6565b80632bb2bb061161024157806354f5bffa116101fa578063715018a6116101d4578063715018a6146108ee5780637fba744e146108f8578063859f6d8a146109165780638a991b7f14610934576102d6565b806354f5bffa1461072c578063672434821461074a57806370a0823114610896576102d6565b80632bb2bb06146105f2578063313ce5671461061057806339509351146106345780634456e3271461069a578063486ed6e2146106b85780634f656b861461070e576102d6565b806317c5b5cb1161029357806317c5b5cb1461047a57806318160ddd1461049c57806323b872dd146104ba578063240c98681461054057806326fe6a8c1461058a578063295f42a9146105d4576102d6565b806305ee7414146102db57806306fdde03146102f9578063095ea7b31461037c5780630b5d1a54146103e2578063106cdceb1461043a578063106f3b6e1461045c575b600080fd5b6102e3610f77565b6040518082815260200191505060405180910390f35b610301610f9a565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610341578082015181840152602081019050610326565b50505050905090810190601f16801561036e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103c86004803603604081101561039257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061103c565b604051808215151515815260200191505060405180910390f35b610424600480360360208110156103f857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061105a565b6040518082815260200191505060405180910390f35b610442611086565b604051808215151515815260200191505060405180910390f35b6104646110a7565b6040518082815260200191505060405180910390f35b6104826110ac565b604051808215151515815260200191505060405180910390f35b6104a46110df565b6040518082815260200191505060405180910390f35b610526600480360360608110156104d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110e9565b604051808215151515815260200191505060405180910390f35b6105486111d2565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105926111f8565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6105dc61121e565b6040518082815260200191505060405180910390f35b6105fa611245565b6040518082815260200191505060405180910390f35b61061861124b565b604051808260ff1660ff16815260200191505060405180910390f35b6106806004803603604081101561064a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611262565b604051808215151515815260200191505060405180910390f35b6106a2611315565b6040518082815260200191505060405180910390f35b6106f8600480360360608110156106ce57600080fd5b8101908080359060200190929190803590602001909291908035906020019092919050505061131b565b6040518082815260200191505060405180910390f35b61071661148b565b6040518082815260200191505060405180910390f35b610734611495565b6040518082815260200191505060405180910390f35b6108946004803603604081101561076057600080fd5b810190808035906020019064010000000081111561077d57600080fd5b82018360208201111561078f57600080fd5b803590602001918460208302840111640100000000831117156107b157600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192908035906020019064010000000081111561081157600080fd5b82018360208201111561082357600080fd5b8035906020019184602083028401116401000000008311171561084557600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f8201169050808301925050505050505091929192905050506114bd565b005b6108d8600480360360208110156108ac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506115d8565b6040518082815260200191505060405180910390f35b6108f66115fe565b005b610900611789565b6040518082815260200191505060405180910390f35b61091e611797565b6040518082815260200191505060405180910390f35b61093c6117a1565b6040518082815260200191505060405180910390f35b61095a6117a7565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109a46117d1565b604051808215151515815260200191505060405180910390f35b6109c6611800565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610a065780820151818401526020810190506109eb565b50505050905090810190601f168015610a335780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a496118a2565b6040518082815260200191505060405180910390f35b610aab60048036036040811015610a7557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506118c9565b604051808215151515815260200191505060405180910390f35b610acd611996565b6040518082815260200191505060405180910390f35b610b2f60048036036040811015610af957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119ab565b604051808215151515815260200191505060405180910390f35b610b51611a92565b005b610b9d60048036036080811015610b6957600080fd5b8101908080359060200190929190803590602001909291908035906020019092919080359060200190929190505050611c0e565b6040518082815260200191505060405180910390f35b610bbb611cb7565b604051808215151515815260200191505060405180910390f35b610bdd611cc6565b6040518082815260200191505060405180910390f35b610bfb611ccc565b6040518082815260200191505060405180910390f35b610c5360048036036020811015610c2757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611cd6565b6040518082815260200191505060405180910390f35b610c71611ce8565b6040518082815260200191505060405180910390f35b610c8f611ced565b6040518082815260200191505060405180910390f35b610cad611cf3565b6040518082815260200191505060405180910390f35b610d4560048036036060811015610cd957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d02565b005b610da960048036036040811015610d5d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e94565b6040518082815260200191505060405180910390f35b610dc7611f1b565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610e11611f41565b6040518082815260200191505060405180910390f35b610e6960048036036020811015610e3d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611f4f565b005b610e7361215f565b6040518082815260200191505060405180910390f35b610eeb60048036036040811015610e9f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612181565b6040518082815260200191505060405180910390f35b610f0961239b565b6040518082815260200191505060405180910390f35b610f6160048036036020811015610f3557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123aa565b6040518082815260200191505060405180910390f35b6000610f95600854610f876110df565b61245990919063ffffffff16565b905090565b606060038054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110325780601f1061100757610100808354040283529160200191611032565b820191906000526020600020905b81548152906001019060200180831161101557829003601f168201915b5050505050905090565b60006110506110496124df565b84846124e7565b6001905092915050565b600061107f611068836123aa565b611071846115d8565b6126de90919063ffffffff16565b9050919050565b600042600e54600d5401101561109f57600090506110a4565b600190505b90565b600181565b6000600f60009054906101000a900460ff16156110d7574260105410156110d657600190506110dc565b5b600090505b90565b6000600254905090565b60008015156110f66110ac565b15151461114e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061377e602f913960400191505060405180910390fd5b6000151561115a611086565b1515146111b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603381526020018061367e6033913960400191505060405180910390fd5b6111bd848484612766565b506111c782612790565b600190509392505050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600080610e10600c5401905042811161123b576000915050611242565b4281039150505b90565b600a5481565b6000600560009054906101000a900460ff16905090565b600061130b61126f6124df565b8461130685600160006112806124df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126de90919063ffffffff16565b6124e7565b6001905092915050565b600e5481565b60008061271090506000816001029050600082600c029050600087141561135257600c60648161134757fe5b049350505050611484565b600087846064028161136057fe5b059050858714156113b5578281121561138a57600160648161137e57fe5b04945050505050611484565b818113156113a957600c60648161139d57fe5b04945050505050611484565b87945050505050611484565b6000868811905080156113e6578282126113e157600c6064816113d457fe5b0495505050505050611484565b611406565b8382136114055760016064816113f857fe5b0495505050505050611484565b5b60008089141561141e5760018801600003905061145b565b60008814156114325760018901905061145a565b81156114495787898161144157fe5b049050611459565b88888161145257fe5b0460000390505b5b5b600061146b848884028888611c0e565b905080876064028161147957fe5b059750505050505050505b9392505050565b6000600854905090565b60006114b86114a261148b565b6114aa611797565b61245990919063ffffffff16565b905090565b6114c56124df565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611587576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008090505b82518110156115d3576115c68382815181106115a557fe5b60200260200101518383815181106115b957fe5b60200260200101516127e2565b808060010191505061158d565b505050565b60006115f76008546115e9846128fa565b61245990919063ffffffff16565b9050919050565b6116066124df565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000610e10600c5401905090565b6000600754905090565b600b5481565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006117db611086565b806117ea57506117e96110ac565b5b156117f857600190506117fd565b600090505b90565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156118985780601f1061186d57610100808354040283529160200191611898565b820191906000526020600020905b81548152906001019060200180831161187b57829003601f168201915b5050505050905090565b600080600e54600d540190504281116118bf5760009150506118c6565b4281039150505b90565b600061198c6118d66124df565b846119878560405180606001604052806025815260200161389260259139600160006119006124df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129429092919063ffffffff16565b6124e7565b6001905092915050565b6000610e1042816119a357fe5b064203905090565b60008015156119b86110ac565b151514611a10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f81526020018061377e602f913960400191505060405180910390fd5b60001515611a1c611086565b151514611a74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603381526020018061367e6033913960400191505060405180910390fd5b611a7e8383612a02565b50611a8882612790565b6001905092915050565b60011515611a9e6110ac565b151514611af6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806138706022913960400191505060405180910390fd5b6000600b549050600a54600b819055506000600a81905550611b16611996565b600c819055506000611b4d6002611b3f611b2e611ccc565b600b54612a2a90919063ffffffff16565b612a2a90919063ffffffff16565b9050611b5881612a74565b6000611b6e611b65611ccc565b600b548561131b565b90506000611b87826103e8612a2a90919063ffffffff16565b9050611b9282612c37565b611b9b81612c9a565b600c547fa904dcf42a3461c90173c0b966672b2cb4350e529ea12d44e562fcec438363248383600b54886040518085815260200184815260200183815260200182815260200194505050505060405180910390a2611bf7612cfd565b611c016000612f8a565b42600d8190555050505050565b600082851215611c2057829450611c2d565b81851315611c2c578194505b5b60008490506000600590505b600115611cac57600082880190508481128015611c5557508581135b15611c67578288019350505050611caf565b6000828060019003935060000b1415611c99576000871315611c8e57849350505050611caf565b859350505050611caf565b60028381611ca357fe5b05925050611c39565b50505b949350505050565b6000611cc16110ac565b905090565b600d5481565b6000600654905090565b6000611ce1826128fa565b9050919050565b600c81565b600c5481565b600c606481611cfe57fe5b0481565b611d0a6124df565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dcc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b82601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e54600d5401905090565b611f576124df565b73ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612019576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561209f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806136d36026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061217c600261216e611797565b612a2a90919063ffffffff16565b905090565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121c05760009050612395565b60006121cb836115d8565b905060008114156121e0576000915050612395565b60008373ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561225f57600080fd5b505afa158015612273573d6000803e3d6000fd5b505050506040513d602081101561228957600080fd5b8101908080519060200190929190505050905060008114156122b057600092505050612395565b60008473ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156122f857600080fd5b505afa15801561230c573d6000803e3d6000fd5b505050506040513d602081101561232257600080fd5b81019080805190602001909291905050509050600064e8d4a510009050600061236683612358848761245990919063ffffffff16565b612a2a90919063ffffffff16565b905061238d8261237f838861245990919063ffffffff16565b612a2a90919063ffffffff16565b955050505050505b92915050565b60016064816123a657fe5b0481565b60006124526123db83601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612181565b61244461240a85601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612181565b61243686601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612181565b6126de90919063ffffffff16565b6126de90919063ffffffff16565b9050919050565b60008083141561246c57600090506124d9565b600082840290508284828161247d57fe5b04146124d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806137de6021913960400191505060405180910390fd5b809150505b92915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561256d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061384c6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806136f96022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b60008082840190508381101561275c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000612787848461278260085486612a2a90919063ffffffff16565b612fae565b90509392505050565b6127be6127ad61279e61148b565b83612a2a90919063ffffffff16565b600a546126de90919063ffffffff16565b600a819055506127cc611996565b600c54146127df576127de6001612f8a565b5b50565b6127f7816002546126de90919063ffffffff16565b60028190555061284e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126de90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008383111582906129ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156129b4578082015181840152602081019050612999565b50505050905090810190601f1680156129e15780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000612a2283612a1d60085485612a2a90919063ffffffff16565b612ff9565b905092915050565b6000612a6c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613042565b905092915050565b6000811415612a8257612c34565b6000612a98600383612a2a90919063ffffffff16565b90506000821415612aa95750612c34565b600073ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b2c57612b2b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826127e2565b5b600073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612baf57612bae601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826127e2565b5b600073ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c3257612c31601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826127e2565b5b505b50565b60008111612c90576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806137ad6031913960400191505060405180910390fd5b8060068190555050565b60008111612cf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603d815260200180613741603d913960400191505060405180910390fd5b8060088190555050565b600073ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612dd657601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612dbd57600080fd5b505af1158015612dd1573d6000803e3d6000fd5b505050505b600073ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612eaf57601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612e9657600080fd5b505af1158015612eaa573d6000803e3d6000fd5b505050505b600073ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f8857601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612f6f57600080fd5b505af1158015612f83573d6000803e3d6000fd5b505050505b565b80600f60006101000a81548160ff0219169083151502179055504260108190555050565b600080612fc660065484612a2a90919063ffffffff16565b9050612fd28582613108565b612fef8585612fea848761313190919063ffffffff16565b61317b565b9150509392505050565b60008061301160065484612a2a90919063ffffffff16565b905061301d3382613108565b61303984613034838661313190919063ffffffff16565b613254565b91505092915050565b600080831182906130ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156130b3578082015181840152602081019050613098565b50505050905090810190601f1680156130e05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816130fa57fe5b049050809150509392505050565b6131128282613272565b613127816007546126de90919063ffffffff16565b6007819055505050565b600061317383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612942565b905092915050565b60006131888484846133a4565b613249846131946124df565b613244856040518060600160405280602881526020016137ff60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006131fa6124df565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129429092919063ffffffff16565b6124e7565b600190509392505050565b60006132686132616124df565b84846133a4565b6001905092915050565b6132dd816040518060600160405280602281526020016136b1602291396000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129429092919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133348160025461313190919063ffffffff16565b600281905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561342a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806138276025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061365b6023913960400191505060405180910390fd5b61351b8160405180606001604052806026815260200161371b602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129429092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506135ae816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546126de90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a350505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573737472616e7366657273206172652066726f7a656e20666f72206120666577206d696e757465732061667465722072656261736545524332303a206275726e20616d6f756e7420657863656564732062616c616e63654f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e63655f736574456c61737469634d756c7469706c69657220656c61737469634d756c7469706c696572206d75737420626520626967676572207468616e20307472616e7366657273206172652066726f7a656e20756e74696c20736f6d656f6e652063616c6c73207265626173655f7365744275726e44697669736f72206275726e44697669736f72206d75737420626520626967676572207468616e2030536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373736f6d656f6e6520656c73652063616c6c65642072656261736520616c726561647945524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208004802ec84dcc94442e25491577b7ee0a379b53cfec17e5e98bd9c34013923864736f6c63430006020033
Deployed Bytecode Sourcemap
34734:17715:0:-:0;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34734:17715:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31667:137;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19650:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;19650:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21959:169;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21959:169:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;52288:158;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;52288:158:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45349:379;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;37966:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;45954:241;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;20725:100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44311:520;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;44311:520:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;46629:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;46586:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;49634:268;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34955:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20577:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23332:218;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23332:218:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;36068:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38611:3195;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38611:3195:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31066:111;;;:::i;:::-;;;;;;;;;;;;;;;;;;;49156:138;;;:::i;:::-;;;;;;;;;;;;;;;;;;;48894:211;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;48894:211:0;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;48894:211:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;48894:211:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;48894:211:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;48894:211:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;48894:211:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;48894:211:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;48894:211:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;48894:211:0;;;;;;;;;;;;;;;:::i;:::-;;31431:157;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31431:157:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34111:148;;;:::i;:::-;;49953:128;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30271:111;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35000:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33469:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;50132:195;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;19852:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;19852:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50544:315;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24053:269;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;24053:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;35568:229;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43815:488;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;43815:488:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;36121:1837;;;:::i;:::-;;41814:1993;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;41814:1993:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;50378:115;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;36027:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29055:99;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31812:127;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31812:127:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38015:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35112:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38103:61;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46948:319;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46948:319:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21661:151;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21661:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46544:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;50910:169;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34414:244;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34414:244:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;49460:123;;;:::i;:::-;;;;;;;;;;;;;;;;;;;51130:770;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;51130:770:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38171:61;;;:::i;:::-;;;;;;;;;;;;;;;;;;;51951:286;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;51951:286:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31667:137;31726:7;31753:43;31777:18;;31753:19;:17;:19::i;:::-;:23;;:43;;;;:::i;:::-;31746:50;;31667:137;:::o;19650:83::-;19687:13;19720:5;19713:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19650:83;:::o;21959:169::-;22042:4;22059:39;22068:12;:10;:12::i;:::-;22082:7;22091:6;22059:8;:39::i;:::-;22116:4;22109:11;;21959:169;;;;:::o;52288:158::-;52363:7;52390:48;52410:27;52432:4;52410:21;:27::i;:::-;52390:15;52400:4;52390:9;:15::i;:::-;:19;;:48;;;;:::i;:::-;52383:55;;52288:158;;;:::o;45349:379::-;45411:4;45643:15;45611:29;;45589:19;;:51;:69;45585:114;;;45682:5;45675:12;;;;45585:114;45716:4;45709:11;;45349:379;;:::o;37966:42::-;38007:1;37966:42;:::o;45954:241::-;46001:4;46022:15;;;;;;;;;;;46018:147;;;46091:15;46058:30;;:48;46054:100;;;46134:4;46127:11;;;;46054:100;46018:147;46182:5;46175:12;;45954:241;;:::o;20725:100::-;20778:7;20805:12;;20798:19;;20725:100;:::o;44311:520::-;44409:4;44534:5;44514:25;;:16;:14;:16::i;:::-;:25;;;44506:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44645:5;44610:40;;:31;:29;:31::i;:::-;:40;;;44602:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44717:45;44736:6;44744:9;44755:6;44717:18;:45::i;:::-;;44773:28;44794:6;44773:20;:28::i;:::-;44819:4;44812:11;;44311:520;;;;;:::o;46629:35::-;;;;;;;;;;;;;:::o;46586:36::-;;;;;;;;;;;;;:::o;49634:268::-;49688:7;49708:18;49764:4;49729:32;;:39;49708:60;;49797:15;49783:10;:29;49779:70;;49836:1;49829:8;;;;;49779:70;49879:15;49866:10;:28;49859:35;;;49634:268;;:::o;34955:38::-;;;;:::o;20577:83::-;20618:5;20643:9;;;;;;;;;;;20636:16;;20577:83;:::o;23332:218::-;23420:4;23437:83;23446:12;:10;:12::i;:::-;23460:7;23469:50;23508:10;23469:11;:25;23481:12;:10;:12::i;:::-;23469:25;;;;;;;;;;;;;;;:34;23495:7;23469:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;23437:8;:83::i;:::-;23538:4;23531:11;;23332:218;;;;:::o;36068:44::-;;;;:::o;38611:3195::-;38771:7;38865:24;38892:5;38865:32;;38908:28;38964:17;38007:1;38939:42;38908:73;;38992:28;39048:17;38056:2;39023:42;38992:73;;39134:1;39110:20;:25;39106:79;;;38056:2;38144:3;:20;;;;;;39152:21;;;;;;;39106:79;39195:33;39266:20;39238:17;39232:3;:23;39231:56;;;;;;39195:92;;39366:30;39333:29;:63;39329:480;;;39507:21;39478:26;:50;39474:324;;;38007:1;38212:3;:20;;;;;;39549:21;;;;;;;;39474:324;39638:21;39609:26;:50;39605:193;;;38056:2;38144:3;:20;;;;;;39680:21;;;;;;;;39605:193;39762:20;39755:27;;;;;;;;39329:480;39821:23;39879:30;39847:29;:62;39821:88;;39974:18;39970:582;;;40159:21;40129:26;:51;40125:113;;38056:2;38144:3;:20;;;;;;40201:21;;;;;;;;;40125:113;39970:582;;;40462:21;40432:26;:51;40428:113;;38007:1;38212:3;:20;;;;;;40504:21;;;;;;;;;40428:113;39970:582;40645:26;40719:1;40686:29;:34;40682:571;;;40800:1;40767:30;:34;40759:43;;40737:65;;40682:571;;;40867:1;40833:30;:35;40829:424;;;40946:1;40914:29;:33;40885:63;;40829:424;;;40979:18;40975:278;;;41075:30;41043:29;:62;;;;;;41014:92;;40975:278;;;41211:29;41178:30;:62;;;;;;41170:71;;41148:93;;40975:278;40829:424;40682:571;41369:28;41400:223;41458:26;41521:17;41499:19;:39;41554:21;41591;41400:43;:223::i;:::-;41369:254;;41776:21;41755:17;41749:3;:23;41748:49;;;;;;41733:65;;;;;;;;;38611:3195;;;;;;:::o;31066:111::-;31124:7;31151:18;;31144:25;;31066:111;:::o;49156:138::-;49215:7;49242:44;49266:19;:17;:19::i;:::-;49242;:17;:19::i;:::-;:23;;:44;;;;:::i;:::-;49235:51;;49156:138;:::o;48894:211::-;33691:12;:10;:12::i;:::-;33681:22;;:6;;;;;;;;;;;:22;;;33673:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48999:6:::1;49008:1:::0;48999:10:::1;;48994:104;49015:10;:17;49011:1;:21;48994:104;;;49054:32;49060:10;49071:1;49060:13;;;;;;;;;;;;;;49075:7;49083:1;49075:10;;;;;;;;;;;;;;49054:5;:32::i;:::-;49034:3;;;;;;;48994:104;;;;48894:211:::0;;:::o;31431:157::-;31505:7;31532:48;31561:18;;31532:24;31548:7;31532:15;:24::i;:::-;:28;;:48;;;;:::i;:::-;31525:55;;31431:157;;;:::o;34111:148::-;33691:12;:10;:12::i;:::-;33681:22;;:6;;;;;;;;;;;:22;;;33673:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34218:1:::1;34181:40;;34202:6;;;;;;;;;;;34181:40;;;;;;;;;;;;34249:1;34232:6;;:19;;;;;;;;;;;;;;;;;;34111:148::o:0;49953:128::-;50007:7;50069:4;50034:32;;:39;50027:46;;49953:128;:::o;30271:111::-;30329:7;30356:18;;30349:25;;30271:111;:::o;35000:43::-;;;;:::o;33469:79::-;33507:7;33534:6;;;;;;;;;;;33527:13;;33469:79;:::o;50132:195::-;50185:4;50206:31;:29;:31::i;:::-;:51;;;;50241:16;:14;:16::i;:::-;50206:51;50202:95;;;50281:4;50274:11;;;;50202:95;50314:5;50307:12;;50132:195;;:::o;19852:87::-;19891:13;19924:7;19917:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19852:87;:::o;50544:315::-;50627:7;50647:20;50692:29;;50670:19;;:51;50647:74;;50752:15;50736:12;:31;50732:72;;50791:1;50784:8;;;;;50732:72;50836:15;50821:12;:30;50814:37;;;50544:315;;:::o;24053:269::-;24146:4;24163:129;24172:12;:10;:12::i;:::-;24186:7;24195:96;24234:15;24195:96;;;;;;;;;;;;;;;;;:11;:25;24207:12;:10;:12::i;:::-;24195:25;;;;;;;;;;;;;;;:34;24221:7;24195:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;24163:8;:129::i;:::-;24310:4;24303:11;;24053:269;;;;:::o;35568:229::-;35636:7;35784:4;35766:15;:22;;;;;;35747:15;:42;35740:49;;35568:229;:::o;43815:488::-;43893:4;44018:5;43998:25;;:16;:14;:16::i;:::-;:25;;;43990:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44129:5;44094:40;;:31;:29;:31::i;:::-;:40;;;44086:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44201:33;44216:9;44227:6;44201:14;:33::i;:::-;;44245:28;44266:6;44245:20;:28::i;:::-;44291:4;44284:11;;43815:488;;;;:::o;36121:1837::-;36253:4;36233:24;;:16;:14;:16::i;:::-;:24;;;36225:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36376:37;36416:28;;36376:68;;36486:23;;36455:28;:54;;;;36546:1;36520:23;:27;;;;36627:37;:35;:37::i;:::-;36592:32;:72;;;;36783:25;36811:54;36863:1;36811:47;36844:13;:11;:13::i;:::-;36811:28;;:32;;:47;;;;:::i;:::-;:51;;:54;;;;:::i;:::-;36783:82;;36876:37;36895:17;36876:18;:37::i;:::-;36966:22;36991:96;37012:13;:11;:13::i;:::-;37027:28;;37057:29;36991:20;:96::i;:::-;36966:121;;37364:28;37395:33;37413:14;37403:4;37395:17;;:33;;;;:::i;:::-;37364:64;;37439:31;37455:14;37439:15;:31::i;:::-;37481:43;37503:20;37481:21;:43::i;:::-;37547:32;;37540:139;37581:14;37597:20;37619:28;;37649:29;37540:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37804:18;:16;:18::i;:::-;37878:24;37896:5;37878:17;:24::i;:::-;37935:15;37913:19;:37;;;;36121:1837;;;;:::o;41814:1993::-;41994:6;42305:15;42282:20;:38;42278:233;;;42360:15;42337:38;;42278:233;;;42429:15;42406:20;:38;42402:109;;;42484:15;42461:38;;42402:109;42278:233;42570:26;42599:20;42570:49;;42630:15;42648:1;42630:19;;42660:1140;42667:4;42660:1140;;;42688:21;42735:19;42712:20;:42;42688:66;;42831:15;42814:14;:32;:68;;;;;42867:15;42850:14;:32;42814:68;42810:158;;;42933:19;42910:20;:42;42903:49;;;;;;;42810:158;43089:1;43073:12;;;;;;;:17;;;43069:524;;;43285:1;43262:20;:24;43258:320;;;43400:15;43393:22;;;;;;;43258:320;43543:15;43536:22;;;;;;;43069:524;43787:1;43765:19;:23;;;;;;43743:45;;42660:1140;;;;41814:1993;;;;;;;;;:::o;50378:115::-;50445:4;50469:16;:14;:16::i;:::-;50462:23;;50378:115;:::o;36027:34::-;;;;:::o;29055:99::-;29107:7;29134:12;;29127:19;;29055:99;:::o;31812:127::-;31880:7;31907:24;31923:7;31907:15;:24::i;:::-;31900:31;;31812:127;;;:::o;38015:43::-;38056:2;38015:43;:::o;35112:47::-;;;;:::o;38103:61::-;38056:2;38144:3;:20;;;;;;38103:61;:::o;46948:319::-;33691:12;:10;:12::i;:::-;33681:22;;:6;;;;;;;;;;;:22;;;33673:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47126:21:::1;47103:20;;:44;;;;;;;;;;;;;;;;;;47182:22;47158:21;;:46;;;;;;;;;;;;;;;;;;47238:21;47215:20;;:44;;;;;;;;;;;;;;;;;;46948:319:::0;;;:::o;21661:151::-;21750:7;21777:11;:18;21789:5;21777:18;;;;;;;;;;;;;;;:27;21796:7;21777:27;;;;;;;;;;;;;;;;21770:34;;21661:151;;;;:::o;46544:35::-;;;;;;;;;;;;;:::o;50910:169::-;50993:7;51042:29;;51020:19;;:51;51013:58;;50910:169;:::o;34414:244::-;33691:12;:10;:12::i;:::-;33681:22;;:6;;;;;;;;;;;:22;;;33673:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34523:1:::1;34503:22;;:8;:22;;;;34495:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34613:8;34584:38;;34605:6;;;;;;;;;;;34584:38;;;;;;;;;;;;34642:8;34633:6;;:17;;;;;;;;;;;;;;;;;;34414:244:::0;:::o;49460:123::-;49522:7;49549:26;49573:1;49549:19;:17;:19::i;:::-;:23;;:26;;;;:::i;:::-;49542:33;;49460:123;:::o;51130:770::-;51216:7;51263:1;51240:25;;:11;:25;;;51236:66;;;51289:1;51282:8;;;;51236:66;51312:25;51340:22;51350:11;51340:9;:22::i;:::-;51312:50;;51398:1;51377:17;:22;51373:63;;;51423:1;51416:8;;;;;51373:63;51446:21;51485:11;51470:37;;;51508:4;51470:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51470:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51470:43:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;51470:43:0;;;;;;;;;;;;;;;;51446:67;;51545:1;51528:13;:18;51524:59;;;51570:1;51563:8;;;;;;51524:59;51593:21;51632:11;51617:39;;;:41;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;51617:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;51617:41:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;51617:41:0;;;;;;;;;;;;;;;;51593:65;;51669:25;51697:4;51669:32;;51712:33;51748:55;51789:13;51748:36;51766:17;51748:13;:17;;:36;;;;:::i;:::-;:40;;:55;;;;:::i;:::-;51712:91;;51821:71;51874:17;51821:48;51843:25;51821:17;:21;;:48;;;;:::i;:::-;:52;;:71;;;;:::i;:::-;51814:78;;;;;;;51130:770;;;;;:::o;38171:61::-;38007:1;38212:3;:20;;;;;;38171:61;:::o;51951:286::-;52017:7;52044:185;52180:48;52201:4;52207:20;;;;;;;;;;;52180;:48::i;:::-;52044:117;52111:49;52132:4;52138:21;;;;;;;;;;;52111:20;:49::i;:::-;52044:48;52065:4;52071:20;;;;;;;;;;;52044;:48::i;:::-;:66;;:117;;;;:::i;:::-;:135;;:185;;;;:::i;:::-;52037:192;;51951:286;;;:::o;8074:471::-;8132:7;8382:1;8377;:6;8373:47;;;8407:1;8400:8;;;;8373:47;8432:9;8448:1;8444;:5;8432:17;;8477:1;8472;8468;:5;;;;;;:10;8460:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8536:1;8529:8;;;8074:471;;;;;:::o;2576:106::-;2629:15;2664:10;2657:17;;2576:106;:::o;27215:346::-;27334:1;27317:19;;:5;:19;;;;27309:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27415:1;27396:21;;:7;:21;;;;27388:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27499:6;27469:11;:18;27481:5;27469:18;;;;;;;;;;;;;;;:27;27488:7;27469:27;;;;;;;;;;;;;;;:36;;;;27537:7;27521:32;;27530:5;27521:32;;;27546:6;27521:32;;;;;;;;;;;;;;;;;;27215:346;;;:::o;6720:181::-;6778:7;6798:9;6814:1;6810;:5;6798:17;;6839:1;6834;:6;;6826:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6892:1;6885:8;;;6720:181;;;;:::o;32130:207::-;32236:4;32260:69;32279:6;32287:9;32298:30;32309:18;;32298:6;:10;;:30;;;;:::i;:::-;32260:18;:69::i;:::-;32253:76;;32130:207;;;;;:::o;44839:502::-;45078:60;45106:31;45117:19;:17;:19::i;:::-;45106:6;:10;;:31;;;;:::i;:::-;45078:23;;:27;;:60;;;;:::i;:::-;45052:23;:86;;;;45245:37;:35;:37::i;:::-;45209:32;;:73;45205:129;;45299:23;45317:4;45299:17;:23::i;:::-;45205:129;44839:502;:::o;25635:384::-;25872:24;25889:6;25872:12;;:16;;:24;;;;:::i;:::-;25857:12;:39;;;;25928:30;25951:6;25928:9;:18;25938:7;25928:18;;;;;;;;;;;;;;;;:22;;:30;;;;:::i;:::-;25907:9;:18;25917:7;25907:18;;;;;;;;;;;;;;;:51;;;;25995:7;25974:37;;25991:1;25974:37;;;26004:6;25974:37;;;;;;;;;;;;;;;;;;25635:384;;:::o;20949:127::-;21023:7;21050:9;:18;21060:7;21050:18;;;;;;;;;;;;;;;;21043:25;;20949:127;;;:::o;7623:192::-;7709:7;7742:1;7737;:6;;7745:12;7729:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;7729:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7769:9;7785:1;7781;:5;7769:17;;7806:1;7799:8;;;7623:192;;;;;:::o;31947:175::-;32033:4;32057:57;32072:9;32083:30;32094:18;;32083:6;:10;;:30;;;;:::i;:::-;32057:14;:57::i;:::-;32050:64;;31947:175;;;;:::o;9021:132::-;9079:7;9106:39;9110:1;9113;9106:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9099:46;;9021:132;;;;:::o;47427:714::-;47539:1;47512:23;:28;47508:67;;;47557:7;;47508:67;47643:21;47667:30;47695:1;47667:23;:27;;:30;;;;:::i;:::-;47643:54;;47739:1;47712:23;:28;47708:67;;;47757:7;;;47708:67;47821:1;47789:34;;:20;;;;;;;;;;;:34;;;47785:109;;47840:42;47846:20;;;;;;;;;;;47868:13;47840:5;:42::i;:::-;47785:109;47941:1;47908:35;;:21;;;;;;;;;;;:35;;;47904:111;;47960:43;47966:21;;;;;;;;;;;47989:13;47960:5;:43::i;:::-;47904:111;48061:1;48029:34;;:20;;;;;;;;;;;:34;;;48025:109;;48080:42;48086:20;;;;;;;;;;;48108:13;48080:5;:42::i;:::-;48025:109;47427:714;;;:::o;29162:196::-;29258:1;29244:11;:15;29236:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29339:11;29324:12;:26;;;;29162:196;:::o;31185:238::-;31299:1;31279:17;:21;31271:95;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31398:17;31377:18;:38;;;;31185:238;:::o;48253:407::-;48337:1;48305:34;;:20;;;;;;;;;;;:34;;;48301:110;;48371:20;;;;;;;;;;;48356:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48356:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48356:43:0;;;;48301:110;48458:1;48425:35;;:21;;;;;;;;;;;:35;;;48421:112;;48492:21;;;;;;;;;;;48477:42;;;:44;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48477:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48477:44:0;;;;48421:112;48579:1;48547:34;;:20;;;;;;;;;;;:34;;;48543:110;;48613:20;;;;;;;;;;;48598:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;48598:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;48598:43:0;;;;48543:110;48253:407::o;46203:150::-;46281:5;46263:15;;:23;;;;;;;;;;;;;;;;;;46330:15;46297:30;:48;;;;46203:150;:::o;29745:399::-;29851:4;29902:18;29923:24;29934:12;;29923:6;:10;;:24;;;;:::i;:::-;29902:45;;29987:24;29992:6;30000:10;29987:4;:24::i;:::-;30075:61;30094:6;30102:9;30113:22;30124:10;30113:6;:10;;:22;;;;:::i;:::-;30075:18;:61::i;:::-;30068:68;;;29745:399;;;;;:::o;29366:371::-;29452:4;29503:18;29524:24;29535:12;;29524:6;:10;;:24;;;;:::i;:::-;29503:45;;29588:28;29593:10;29605;29588:4;:28::i;:::-;29680:49;29695:9;29706:22;29717:10;29706:6;:10;;:22;;;;:::i;:::-;29680:14;:49::i;:::-;29673:56;;;29366:371;;;;:::o;9649:278::-;9735:7;9767:1;9763;:5;9770:12;9755:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;9755:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9794:9;9810:1;9806;:5;;;;;;9794:17;;9918:1;9911:8;;;9649:278;;;;;:::o;30390:204::-;30456:22;30462:7;30471:6;30456:5;:22::i;:::-;30556:30;30579:6;30556:18;;:22;;:30;;;;:::i;:::-;30535:18;:51;;;;30390:204;;:::o;7184:136::-;7242:7;7269:43;7273:1;7276;7269:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;7262:50;;7184:136;;;;:::o;22602:321::-;22708:4;22725:36;22735:6;22743:9;22754:6;22725:9;:36::i;:::-;22772:121;22781:6;22789:12;:10;:12::i;:::-;22803:89;22841:6;22803:89;;;;;;;;;;;;;;;;;:11;:19;22815:6;22803:19;;;;;;;;;;;;;;;:33;22823:12;:10;:12::i;:::-;22803:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;22772:8;:121::i;:::-;22911:4;22904:11;;22602:321;;;;;:::o;21423:175::-;21509:4;21526:42;21536:12;:10;:12::i;:::-;21550:9;21561:6;21526:9;:42::i;:::-;21586:4;21579:11;;21423:175;;;;:::o;26351:424::-;26596:68;26619:6;26596:68;;;;;;;;;;;;;;;;;:9;:18;26606:7;26596:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;26575:9;:18;26585:7;26575:18;;;;;;;;;;;;;;;:89;;;;26690:24;26707:6;26690:12;;:16;;:24;;;;:::i;:::-;26675:12;:39;;;;26756:1;26730:37;;26739:7;26730:37;;;26760:6;26730:37;;;;;;;;;;;;;;;;;;26351:424;;:::o;24812:542::-;24936:1;24918:20;;:6;:20;;;;24910:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25020:1;24999:23;;:9;:23;;;;24991:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25158;25180:6;25158:71;;;;;;;;;;;;;;;;;:9;:17;25168:6;25158:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;25138:9;:17;25148:6;25138:17;;;;;;;;;;;;;;;:91;;;;25263:32;25288:6;25263:9;:20;25273:9;25263:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;25240:9;:20;25250:9;25240:20;;;;;;;;;;;;;;;:55;;;;25328:9;25311:35;;25320:6;25311:35;;;25339:6;25311:35;;;;;;;;;;;;;;;;;;24812:542;;;:::o
Swarm Source
ipfs://8004802ec84dcc94442e25491577b7ee0a379b53cfec17e5e98bd9c340139238
Loading...
Loading
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.